
    hi;                    P   U d Z ddlmZ ddlmZmZ ddlZddlZddl	Zddl
mZ ddlmZ ddlmZmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZmZmZm Z m!Z!m"Z"m#Z#m$Z$m%Z%m&Z&m'Z' dhZ(de)d<   h dZ*de)d<   dZ+de)d<    G d de          Z,	 d&d'dZ-d(dZ.d)dZ/d*d!Z0d+d#Z1d,d%Z2dS )-z<Plugin for supporting the functools standard library module.    )annotations)Final
NamedTupleN)map_actuals_to_formals)erase_typevars)ARG_POS	ARG_STAR2SYMBOL_FUNCBASE_TYPESArgKindArgumentCallExprNameExprVar)add_method_to_class)get_all_type_vars)AnyTypeCallableTypeInstance
OverloadedParamSpecFlavorParamSpecTypeType	TypeOfAnyTypeVarTypeUnboundType	UnionTypeget_proper_typezfunctools.total_orderingr   functools_total_ordering_makers>   __ge____gt____le____lt___ORDERING_METHODSzfunctools.partialPARTIALc                  $    e Zd ZU ded<   ded<   dS )_MethodInfobool	is_staticr   typeN)__name__
__module____qualname____annotations__     f/var/www/html/Pagina-Ingenieria-Requisitos/venv/lib/python3.11/site-packages/mypy/plugins/functools.pyr&   r&   .   s'         OOOr/   r&   Fctxmypy.plugin.ClassDefContextauto_attribs_defaultr'   returnc                  
 t          |           

s"| j                            d| j                   dS t	          

fd          }
|         }|sdS t          |          }| j                            d          }|}|j        j        | j                            d          k    rkt          |j        j                  }t          |t                    r$|j                            d          d         dk    st          t          j                  }t"          D ]Z}
                    |          sCt'          t)          d	|          |d
t*                    g}	t-          | j        | j        ||	|           [dS )zFAdd dunder methods to classes decorated with functools.total_ordering.zNNo ordering operation defined when using "functools.total_ordering": < > <= >=Tc                    |          d u | fS Nr.   )kcomparison_methodss    r0   <lambda>z9functools_total_ordering_maker_callback.<locals>.<lambda>@   s    2DQ2G42OQR1S r/   )keyzbuiltins.bool.r'   otherN)_analyze_classapifailreasonmax_find_other_type
named_typer)   ret_typer   
isinstancer   namesplitr   r   implementation_artifactr#   getr   r   r   r   cls)r1   r3   rootroot_method
other_type	bool_typerF   proper_ret_typeadditional_opargsr9   s             @r0   'functools_total_ordering_maker_callbackrT   3   s    (,, \J	
 	
 	
 t !'S'S'S'STTTD$T*K t!+..J""?33IH CG$6$6$G$GGG)+*:*CDD44	B$**3//3v==y@AAH* Q Q "%%m44 	QS*55z4QQRD-xPPP4r/   methodr   c                   | j         rdnd}d}d}t          | j        j        | j        j                  D ]8\  }}|                                r||k    r|} n|dz  })|t          k    r|} n9|t          t          j	                  S |S )z?Find the type of the ``other`` argument in a comparison method.r      N)
r(   zipr)   	arg_kinds	arg_typesis_positionalr	   r   r   rJ   )rU   first_arg_poscur_pos_arg	other_argarg_kindarg_types         r0   rD   rD   Z   s    )0AAqMKI!&+"79NOO 	 	(!!## 	m++$	1KK"" IE # y8999r/   dict[str, _MethodInfo | None]c                   i }| j         j        j        dd         D ]}t          D ]}||j        v r||vr|j        |         j        }t          |t                    r8t          |j        t                    rt          |j        |j                  ||<   nt          |t                    rBt          |j                  }t          |t                    rt          |j        |          ||<   d||<   ˌ|S )zMAnalyze the class body, its parents, and return the comparison methods found.Nr=   )rL   infomror#   namesnoderG   r
   r)   r   r&   r(   r   r   is_staticmethod)r1   r9   rL   rH   rf   proper_types         r0   r?   r?   p   s	    9;w|$ 0 0% 	0 	0Dsy  T1C%C%Cy+d$9:: z$)Ua?b?b /:4>49/U/U&t,dC(( !"1$)"<"<K!+|<< !3>t?SU`3a3a*40 +/"4(	0 r/   mypy.plugin.FunctionContextc                   t          | j        t          j        j                  s| j        S t          | j                  dk    r| j        S t          | j        d                   dk    r| j        S t          t          | j        d         d                   t                    r| j        S t          | | j        d         d                   S )z6Infer a more precise return type for functools.partial   r   rW   )callee)rG   r@   mypycheckerTypeCheckerdefault_return_typelenrZ   r   r   handle_partial_with_calleer1   s    r0   partial_new_callbackrt      s    cgt|788 '&&
3=Q&&
3=!!&&/#-"21"566
CC '&&%c#-2B12EFFFFr/   rl   c           
     <    t           j        t          j        j                  s j        S t          t          |          x}t                    r%t          j         fd|j	        D                       S  j        
                    | j                  }| j        S |                                                                } j        j        d         }|                                s) j                            t           |j        g          }d}n|j        }d  j        j        d<   d}g }g g }g t%                      }	t'           j        dd          d          D ]\  }
}t'          |          D ]\  }}||	v r
|	                    |           |                    |                                j        |
         |                    |                     j        |
         |                                         j        |
         |                    t5          ||j        |j        fd	          }t%                      t'          |j                  D ]:\  }
}||
         s                    d
 t9          |          D                        ;|                    d |j        D             |fd|j        D             d          }|j        dk     r|                      j                   tC           j        d         d         ||t           j"        tB                    r j"        j#        nd           }|                      j"                    j        j$        %                    ||||          \  }}|s| j        j        d<   t          |          }t          |tL                    s j        S |rft          |j                  }t          |tN                    r|j(        j)        t           k    r j        S |                    |j        d                   }g }g }g }t'          |          D ]\  }
}tU          |j                  tU          |j                  k    rE|j        |
         }t          j        +                    | j        j,                  s|j        |
         }n|j        |
         }|r%|j        |
         tZ          j.        tZ          j/        fv rV|                    |j        |
                    |                    |           |                    |j        |
                    |sJ ta          fd|D                       r |d                  }|tZ          j1        k    s|tZ          j/        k    rtZ          j2        }|                    |           |                    |           |                    |j        |
                    |j        }t          j        +                    | j        j,                  s|j        }|                    ||||d          }tg          |d |j        D                       } j                            t           |g          }|4                    d|          }|5                                ry|j6        J |j6        7                                }tZ          j.        v r|j8                            d           tZ          j/        v r|j8                            d           ||_6        |S )Nc                0    g | ]}t          |          S r.   )rr   ).0itemr1   s     r0   
<listcomp>z.handle_partial_with_callee.<locals>.<listcomp>   s$    SSSt'T22SSSr/   rs   r=   TFrW   )startc                    |          S r7   r.   )iactual_typess    r0   r:   z,handle_partial_with_callee.<locals>.<lambda>   s    ,q/ r/   )actual_kindsactual_namesformal_kindsformal_namesactual_arg_typec                    h | ]	}|j         
S r.   idrw   tvs     r0   	<setcomp>z-handle_partial_with_callee.<locals>.<setcomp>   s    JJJbeJJJr/   c                    g | ]<}|t           j        k    rt           j        n|t           j        k    rt           j        n|=S r.   )r   r   ARG_OPT	ARG_NAMEDARG_NAMED_OPT)rw   r8   s     r0   ry   z.handle_partial_with_callee.<locals>.<listcomp>   sU     
 
 
  '' /0G4E/E/Eg++1	
 
 
r/   c                P    g | ]"}|j         v st          |t                     |#S r.   )r   rG   r   )rw   r   can_infer_idss     r0   ry   z.handle_partial_with_callee.<locals>.<listcomp>   sA     
 
 
u%%ZK-H-H%  &%%r/   partial)rY   rF   	variablesspecial_sigr   )rl   rS   rY   	arg_namesanalyzedrl   rS   rY   r   context)rF   c              3  X   K   | ]$}|         t           j        t           j        fv V  %d S r7   )r   r   ARG_STAR)rw   jactual_arg_kindss     r0   	<genexpr>z-handle_partial_with_callee.<locals>.<genexpr>%  s9      __RS#A&7?G<L*MM______r/   )rZ   rY   r   rF   r   c                    g | ]	}|j         
S r.   r   r   s     r0   ry   z.handle_partial_with_callee.<locals>.<listcomp>>  s    /R/R/R"/R/R/Rr/   __mypy_partial#__mypy_partial_paramspec_args_bound%__mypy_partial_paramspec_kwargs_bound)9rG   r@   rm   rn   ro   rp   r   r   
make_unionitemsextract_callable_typewith_unpacked_kwargswith_normalized_var_argstype_contextis_type_objnamed_generic_typer$   rF   set	enumeraterS   addappendrY   r   rZ   r   updater   copy_modifiedr   lineset_liner   r   r   expr_checker
check_callr   r   r)   fullnamerq   is_valid_inferred_typeoptionsr   r   r	   anyr   r   r   copy_with_extra_attr
param_specextra_attrscopy	immutable) r1   rl   callee_properfn_typelast_contextrF   wrapped_returnactual_argsactual_arg_names	seen_argsr|   paramr   aformal_to_actualr`   	defaulted	call_expr_boundpartial_kindspartial_typespartial_namesactualskindpartially_appliederased_ret_typeretattrsr   r}   r   s    `                            @@@r0   rr   rr      s   cgt|788 '&&?6#:#::-IFF 
#SSSS}?RSSS
 
 	
 g++F8O+PPG&& **,,EEGGG7'+L    33Gg>N=OPP# $(R  KLIchqrrl!444 5 55e$$ 	5 	5DAqI~~  MM!q!!!##CM!$4Q$7888##CM!$4Q$7888a 0 34444	5 .%%&&1111   EEM !233 L L8" 	JJ.?.I.IJJJKKKK %%
 
 &
 
 
 
 
 
 
'
 
 
 ! &  I$ ~32333 x{1~"")3CK)J)JT%%PT  I s{###w#.."" /  HAu  0#/R E""Ee\** '&& ?"5>22(H-- 	+1G71R1R**##X]1-=#>>MMM   011 7 7
7u3w'8#9#999q)H<66xQQ 0",Q/ (+H 	7'+A.73CWEV2WWW  !21!5666  ***  !21!56666NNN____W^_____ #GAJ/Dw(((DG4E,E,E,  &&&  ***  !21!56666~H<..xII $#-- .   %X/R/R@Q/R/R/RSSO
'
$
$W.?
@
@C

"
"#35F
G
GC##%%  ***$$&&///O EFFF 000O GHHHJr/   mypy.plugin.MethodContextc                p   t          | j        t          j        j                  rSt          | j        t                    r9| j        j        j        t          k    s| j        j	        rd| j        j	        j
        vr| j        S | j        j	        }t          |j
        d                   }t          | j                  dk    r| j        S g }g }g }t                      }t!          | j                  D ]\  }}t!          |          D ]\  }	}
|
|v r
|                    |
           |                    |
           |                    | j        |         |	                    |                    | j        |         |	                    | j        j                            ||||| j                  \  }}t          |t2                    r|                                |S d|j        v }d|j        v }d |D             }t9          d |D                       }|s.|s,| j        j        j                            || j        |           n.|r,|r*| j        j        j                            || j                   t9          d	 |D                       }|s-|s+| j        j        j                            || j        |           |S )
z@Infer a more precise return type for functools.partial.__call__.r      r   Nr   r   c                    g | ]\}t          |t                    t          |j        t                    1t          |j        j        t
                    P|j        j        ]S r.   )rG   r   rf   r   r)   r   )rw   args     r0   ry   z)partial_call_callback.<locals>.<listcomp>x  sj       c8$$ sx%%	
 sx}m44  r/   c              3  @   K   | ]}|j         t          j        k    V  d S r7   )flavorr   ARGSrw   parts     r0   r   z(partial_call_callback.<locals>.<genexpr>  s,      ]]ddk_%99]]]]]]r/   c              3  @   K   | ]}|j         t          j        k    V  d S r7   )r   r   KWARGSr   s     r0   r   z(partial_call_callback.<locals>.<genexpr>  s,      aa$'==aaaaaar/   ) rG   r@   rm   rn   ro   r)   r   r   r$   r   r   rp   r   rq   rZ   r   r   rS   r   r   rY   r   r   r   r   r   r   r   r   msgtoo_few_argumentstoo_many_arguments)r1   r   partial_typer   r   r   r   r|   r   r   r   resultr   
args_boundkwargs_boundpassed_paramspec_partsargs_passedkwargs_passeds                     r0   partial_call_callbackr   M  s    sw 899'#(H--' 8=!W,,x# -38#7#===&&(&K";#45E#FGGL
3=Q&& KIch'' 9 95e$$ 	9 	9DAqI~~MM!q!!!##CM!$4Q$7888##CM!$4Q$78888	9 $//"" 0  IFA lL11 \5L5L5N5N5V6+:OOJ:k>SSL    ]]F\]]]]]K Ok O 22<N^____	 O O 33L#+NNN aaJ`aaaaaM ` ` 22<N^___Mr/   )F)r1   r2   r3   r'   r4   r'   )rU   r&   r4   r   )r1   r2   r4   ra   )r1   ri   r4   r   )r1   ri   rl   r   r4   r   )r1   r   r4   r   )3__doc__
__future__r   typingr   r   mypy.checkerrm   mypy.pluginmypy.semanalmypy.argmapr   mypy.erasetyper   
mypy.nodesr   r	   r
   r   r   r   r   r   mypy.plugins.commonr   mypy.typeopsr   
mypy.typesr   r   r   r   r   r   r   r   r   r   r   r   r   r-   r#   r$   r&   rT   rD   r?   rt   rr   r   r.   r/   r0   <module>r      s   B B B " " " " " " $ $ $ $ $ $ $ $             . . . . . . ) ) ) ) ) )	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 4 3 3 3 3 3 * * * * * *                            +E)E  E E E ECCC  C C C C$ $ $ $ $    *    DI$ $ $ $ $N   ,   0G G G Gs s s sl> > > > > >r/   