
    \j<                    J   U d Z ddlmZ ddl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          Z+	 d&d'dZ,d(dZ-d)dZ.d*d!Z/d+d#Z0d,d%Z1dS )-z<Plugin for supporting the functools standard library module.    )annotations)FinalN)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d	dZdS )
_MethodInfo	is_staticbooltyper   returnNonec                "    || _         || _        d S N)r&   r(   )selfr&   r(   s      Z/var/www/app.qaans.com/backend/venv/lib/python3.11/site-packages/mypy/plugins/functools.py__init__z_MethodInfo.__init__/   s     )			    N)r&   r'   r(   r   r)   r*   )__name__
__module____qualname__r/    r0   r.   r%   r%   .   s(                   r0   r%   Fctxmypy.plugin.ClassDefContextauto_attribs_defaultr'   r)   c                  
 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 r,   r4   )kcomparison_methodss    r.   <lambda>z9functools_total_ordering_maker_callback.<locals>.<lambda>A   s    2DQ2G42OQR1S r0   )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)r5   r7   rootroot_method
other_type	bool_typerH   proper_ret_typeadditional_opargsr;   s             @r.   'functools_total_ordering_maker_callbackrV   4   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4r0   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   rL   )rW   first_arg_poscur_pos_arg	other_argarg_kindarg_types         r.   rF   rF   [   s    )0AAqMKI!&+"79NOO 	 	(!!## 	m++$	1KK"" IE # y8999r0   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?   )rN   infomror"   namesnoderI   r	   r(   r   r%   r&   r   r   is_staticmethod)r5   r;   rN   rJ   rh   proper_types         r.   rA   rA   q   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 r0   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   rY   )callee)rI   rB   mypycheckerTypeCheckerdefault_return_typelenr\   r   r   handle_partial_with_calleer5   s    r.   partial_new_callbackrv      s    cgt|788 '&&
3=Q&&
3=!!&&/#-"21"566
CC '&&%c#-2B12EFFFFr0   rn   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 r4   )rt   ).0itemr5   s     r.   
<listcomp>z.handle_partial_with_callee.<locals>.<listcomp>   s$    SSSt'T22SSSr0   ru   r?   TFrY   )startc                    |          S r,   r4   )iactual_typess    r.   r<   z,handle_partial_with_callee.<locals>.<lambda>   s    ,q/ r0   )actual_kindsactual_namesformal_kindsformal_namesactual_arg_typec                    h | ]	}|j         
S r4   idry   tvs     r.   	<setcomp>z-handle_partial_with_callee.<locals>.<setcomp>   s    JJJbeJJJr0   c                    g | ]<}|t           j        k    rt           j        n|t           j        k    rt           j        n|=S r4   )r
   r   ARG_OPT	ARG_NAMEDARG_NAMED_OPT)ry   r:   s     r.   r{   z.handle_partial_with_callee.<locals>.<listcomp>   sU     
 
 
  '' /0G4E/E/Eg++1	
 
 
r0   c                P    g | ]"}|j         v st          |t                     |#S r4   )r   rI   r   )ry   r   can_infer_idss     r.   r{   z.handle_partial_with_callee.<locals>.<listcomp>   sA     
 
 
u%%ZK-H-H%  &%%r0   partial)r[   rH   	variablesspecial_sigr   )rn   rU   r[   	arg_namesanalyzedrn   rU   r[   r   context)rH   c              3  X   K   | ]$}|         t           j        t           j        fv V  %d S r,   )r
   r   ARG_STAR)ry   jactual_arg_kindss     r.   	<genexpr>z-handle_partial_with_callee.<locals>.<genexpr>&  s9      __RS#A&7?G<L*MM______r0   )r\   r[   r   rH   r   c                    g | ]	}|j         
S r4   r   r   s     r.   r{   z.handle_partial_with_callee.<locals>.<listcomp>B  s    /R/R/R"/R/R/Rr0   __mypy_partial#__mypy_partial_paramspec_args_bound%__mypy_partial_paramspec_kwargs_bound)9rI   rB   ro   rp   rq   rr   r   r   
make_unionitemsextract_callable_typewith_unpacked_kwargswith_normalized_var_argstype_contextis_type_objnamed_generic_typer#   rH   set	enumeraterU   addappendr[   r   r\   r   updater   copy_modifiedr   lineset_liner   r   r   expr_checker
check_callr   r   r(   fullnamers   is_valid_inferred_typeoptionsr
   r   r   anyr   r   r   copy_with_extra_attr
param_specextra_attrscopy	immutable) r5   rn   callee_properfn_typelast_contextrH   wrapped_returnactual_argsactual_arg_names	seen_argsr~   paramr   aformal_to_actualrb   	defaulted	call_expr_boundpartial_kindspartial_typespartial_namesactualskindpartially_appliederased_ret_typeretattrsr   r   r   s    `                            @@@r.   rt   rt      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Jr0   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 r4   )rI   r   rh   r   r(   r   )ry   args     r.   r{   z)partial_call_callback.<locals>.<listcomp>|  sj       c8$$ sx%%	
 sx}m44  r0   c              3  @   K   | ]}|j         t          j        k    V  d S r,   )flavorr   ARGSry   parts     r.   r   z(partial_call_callback.<locals>.<genexpr>  s,      ]]ddk_%99]]]]]]r0   c              3  @   K   | ]}|j         t          j        k    V  d S r,   )r   r   KWARGSr   s     r.   r   z(partial_call_callback.<locals>.<genexpr>  s,      aa$'==aaaaaar0   ) rI   rB   ro   rp   rq   r(   r   r   r#   r   r   rr   r   rs   r\   r   r   rU   r   r   r[   r   r   r   r   r   r   r   r   msgtoo_few_argumentstoo_many_arguments)r5   r   partial_typer   r   r   r   r~   r   r   r   resultr   
args_boundkwargs_boundpassed_paramspec_partsargs_passedkwargs_passeds                     r.   partial_call_callbackr   Q  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^___Mr0   )F)r5   r6   r7   r'   r)   r'   )rW   r%   r)   r   )r5   r6   r)   rc   )r5   rk   r)   r   )r5   rk   rn   r   r)   r   )r5   r   r)   r   )2__doc__
__future__r   typingr   mypy.checkerro   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   __annotations__r"   r#   r%   rV   rF   rA   rv   rt   r   r4   r0   r.   <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v v v vr> > > > > >r0   