
    5 fh]                       U d Z ddlmZ ddlZddlZddlmZ ddlmZ ddl	m
Z
 ddlZddlmZmZmZmZmZ ddlmZmZmZ dd	lmZ dd
lmZmZmZmZ ddlmZ dZded<   ddhZ ded<   h dZ!ded<   d Z"d Z#	 	 d>d?d"Z$d# Z%d@d$Z& ej'        e&d%&          Z( ej'        e&d'&          Z) ej'        e&d(&          Z*	 dAdBd*Z+d+ Z,dCd,Z-	 dAdDd.Z.d/Z/dEd1Z0dAdFd2Z1dAdFd3Z2	 dAdBd4Z3dGd6Z4dHd9Z5dId=Z6dS )Jz.Astroid hooks for the Python standard library.    )annotationsN)Iterator)dedent)Final)	argumentsbasesinference_tipnodesutil)AstroidBuilder_extract_single_nodeextract_node)InferenceContext)AstroidTypeErrorAstroidValueErrorInferenceErrorUseInferenceDefault)AstroidManager	enum.Enumz
Final[str]
ENUM_QNAMEtyping.NamedTupletyping_extensions.NamedTupler   TYPING_NAMEDTUPLE_QUALIFIED>   
NamedTupler   r   TYPING_NAMEDTUPLE_BASENAMESc                   t          | t          j                  rt          	 t	          |                     |                    }n# t          $ r}t          |d }~ww xY wt          |t          j                  rt                      |S )Ncontext)
isinstancer   UninferableBaser   nextinferStopIterationr   )noder   valueexcs       Y/var/www/equiseq/venv/lib/python3.11/site-packages/astroid/brain/brain_namedtuple_enum.py_infer_firstr(   '   s    $,-- "!!&TZZZ0011 & & &#%&%-.. $!###Ls   #A 
AAAc                    	 dfd	}| j         | j        }|rd |D             ni  |dd          } |dd          }|r|r	|j        |fS t                      )	Nc                    t                    | k    rt          |                    S |r|v rt          |                   S d S d S N)lenr(   )positionkey_nameargsr   found_keywordss     r'   "_extract_namedtuple_arg_or_keywordzE_find_func_form_arguments.<locals>._extract_namedtuple_arg_or_keyword4   sd     t99xX888 	CN22x 8'BBB	C 	C22    c                (    i | ]}|j         |j        S  )argr%   ).0keywords     r'   
<dictcomp>z-_find_func_form_arguments.<locals>.<dictcomp>?   s    <<<gm<<<r2   r   typename)r-   r.      field_namesr+   )r/   keywordsr%   r   )r$   r   r1   r<   namenamesr/   r0   s    `    @@r'   _find_func_form_argumentsr?   3   s    C C C C C C C C 9D}H@HP<<8<<<<b  .-q:NNND..MRRRE ! !z5  


r2   Fr$   
nodes.Call	base_typelist[nodes.NodeNG]r   InferenceContext | Noneenumboolreturn%tuple[nodes.ClassDef, str, list[str]]c           	     &   	 t          |           \  }}	 |j                            dd                                          }n# t          $ r}|s6g }t          |           }|r"t          |          }	fd|	j        D             }nt          |d          r.t          |j
        t                    rfd|j
        D             }n^t          |d          rFt          d |j        D                       rfd|j        D             }nfd	|j        D             }nt          ||st          |Y d
}~nd
}~ww xY wn!# t          t          f$ r}t          |d
}~ww xY w|sd |D             }d |D             }|pd}t          j        || j        | j        | j        | j        t          j                              }
| j        |
_        |
                    |g d
           |D ].}t          j                    }|
|_        ||_        |g|
j        |<   /|
||fS )z<Specific inference function for namedtuple or Python 3 enum., c                :    g | ]}t          |          j        S r4   r(   r%   r6   constr   s     r'   
<listcomp>z#infer_func_form.<locals>.<listcomp>a   s3     " " "?DUG44:" " "r2   itemsc                    g | ]=}t          |d          t          j                  "t          |d                    j        >S r   )r   r
   Constr(   r%   rM   s     r'   rO   z#infer_func_form.<locals>.<listcomp>j   sP     " " "!%eAh<<"$U1Xw77=" " "r2   eltsc              3  J   K   | ]}t          |t          j                  V  d S r+   )r   r
   Tuple)r6   rN   s     r'   	<genexpr>z"infer_func_form.<locals>.<genexpr>s   s.      RRe:eU[99RRRRRRr2   c                    g | ]<}t          |t          j                  t          |j        d                    j        =S rR   )r   r
   rV   r(   rT   r%   rM   s     r'   rO   z#infer_func_form.<locals>.<listcomp>t   sN     & & & %)%==&(A@@F& & &r2   c                :    g | ]}t          |          j        S r4   rL   rM   s     r'   rO   z#infer_func_form.<locals>.<listcomp>z   s3     & & &CHL88>& & &r2   Nc                ,    g | ]}t          |          S r4   )strr6   attrs     r'   rO   z#infer_func_form.<locals>.<listcomp>   s    777Dc$ii777r2   c                    g | ]}d |v|	S )rJ   r4   r\   s     r'   rO   z#infer_func_form.<locals>.<listcomp>   s    AAA4D$r2   Uninferable)lineno
col_offset
end_linenoend_col_offsetparent)r   body
decorators)r?   r%   replacesplitAttributeError_get_namedtuple_fieldsr   rT   hasattrr   rP   listallr   r   r
   ClassDefr`   ra   rb   rc   Unknownrd   postinit	EmptyNodeattrnameinstance_attrs)r$   rA   r   rD   r=   r>   
attributesr&   fieldsfields_node
class_noder]   	fake_nodes     `          r'   infer_func_formry   J   s   ,+/g>>e(	2$)K$7$7S$A$A$G$G$I$IJJ &	2 &	2 &	2 $2
/55 ".v"6"6K" " " "HSHX" " "J 5'** 2z%+t/L/L 2" " " "%*[" " "JJ
 UF++ 2 RRuzRRRRR 	& & & &).& & &

& & & &LQJ& & &

 )c1! 2(c1M&	2N N+ + + +!s*+  877J777
 BA:AAAJ  =D{??*}  J J	      6 6O%%	%	!	+4+
!$''tZ''sA   D; -A D; 
D7CD2-D; 2D77D; ;EEEc                :    t          | j                  t          z  S )zRPredicate for class inference tip.

    :type node: ClassDef
    :rtype: bool
    )set	basenamesr   r$   s    r'   _has_namedtuple_baser~      s     t~!<<<r2   c                    | j         }t          |t          j                  r|j        |k    S t          |t          j                  r|j        |k    S dS NF)funcr   r
   	Attributerr   Namer=   )r$   r=   r   s      r'   _looks_liker      sP    9D$(( %}$$$
## !yD  5r2   
namedtupler=   Enumr   Iterator[nodes.ClassDef]c                   t          j        d|                                 dddd          g}t          | ||          \  }}}t          j                            | |          }t          d          } 	 t          | 	                                          }n## t          $ r}t          |           |d}~ww xY w	 t          |                    |d|pt                                                                          }	n# t          t          f$ r d	}	Y nw xY w	 t          |||	          }n_# t           $ r%}
t#          d
t%          |
          z             |
d}
~
wt&          $ r%}
t#          dt%          |
          z             |
d}
~
ww xY wd                    d |D                       }dd                    fdt+          |          D                       }t-          t/                                                    d| d|d| d| d	          }|j        d         j        d         |j        d<   |j        d         j        d         |j        d<   |j        d         j        d         |j        d<   |j        d         j        d         |j        d<   |D ]"}|j        d         j        |         |j        |<   #t7          |g          S )z5Specific inference function for namedtuple Call node.tupler   N)r=   rd   r`   ra   rb   rc   r   z*import collections; collections.namedtupler}   renameFzTypeError: zValueError: , c              3      K   | ]	}| d V  
dS )z=NoneNr4   )r6   r5   s     r'   rW   z$infer_named_tuple.<locals>.<genexpr>   s(      AAs]]]AAAAAAr2   z[    {name} = property(lambda self: self[{index:d}], doc='Alias for field number {index:d}')
c              3  L   K   | ]\  }}                     ||           V  dS ))r=   indexN)format)r6   r   r=   	field_defs      r'   rW   z$infer_named_tuple.<locals>.<genexpr>   sN        E4 	d%00     r2   z
class z*(tuple):
    __slots__ = ()
    _fields = z
    def _asdict(self):
        return self.__dict__
    @classmethod
    def _make(cls, iterable, new=tuple.__new__, len=len):
        return new(cls, iterable)
    def _replace(self, zP):
        return self
    def __getnewargs__(self):
        return tuple(self)
z
    _asdict_make_replace_fields)r
   r   rootry   r   CallSite	from_callr   r!   r"   r#   r   infer_argumentr   
bool_value_check_namedtuple_attributesr   r   r[   r   join	enumerater   r   string_buildre   localsiter)r$   r   tuple_base_namerw   r=   rt   	call_siter   er   r&   replace_args
field_defsfaker]   r   s                  @r'   infer_named_tupler      sS   
 	
99;;	
 	
 	
	+O $3ow$ $ $ Jj ",,T7,CCIDEED/DJJLL!! / / /$'''Q./$$T8W5R@P@R@RSS
 

*,, 	 M*   F1$
FKK

 E E E!-#c((":;;D F F F!.3s88";<<#EF 99AAjAAAAAL	2      $Z00    J .**++88		 	 	 	 %	 	 	 	 	 D" $(9Q<#6y#AJi !%1!4W!=Jg$(IaL$7
$CJj!#'9Q<#6y#AJi  < <"&)A,"5d";
$sO   6!B 
B8"B33B8<AD DDD- -
F	7 EF	$ FF	c                   t          |           }t                      }t          |           D ]\  }}t          d |D                       rIt	          j        |          s5|r3|d                                         s|                    d          s||v rd|z  ||<   |                    |           t          |          S )Nc              3  J   K   | ]}|                                 p|d k    V  dS )_N)isalnum)r6   cs     r'   rW   z5_get_renamed_namedtuple_attributes.<locals>.<genexpr>  s3      ::AIIKK+18::::::r2   r   r   z_%d)
rl   r{   r   rm   r7   	iskeywordisdigit
startswithaddr   )r;   r>   seenir=   s        r'   "_get_renamed_namedtuple_attributesr   
  s    E55D[)) 
 
4::T:::::	! &&	! 	! Aw  		!
 s##	! t||qyE!H<<r2   c                   t          |          }|rt          |          }| g|R D ]u}t          |t                    st	          d          |                                st          dd|z             t          j        |          rt          d|          vt                      }|D ]V}|
                    d          r|st          d|          ||v rt          d|          |                    |           W|S )Nz*Type names and field names must be stringsz(Type names and field names must be validzidentifiers: z0Type names and field names cannot be a keyword: r   z-Field names cannot start with an underscore: z"Encountered duplicate field name: )r   r   r   r[   r   isidentifierr   r7   r   r{   r   r   )r9   rt   r   r=   r   s        r'   r   r     s^   z""J D7
CC
 'J'' 
 
$$$ 	Q"#OPPP  "" 	#:=UT=U=UU   T"" 	#K4KK  	
 55D  ??3 	 	#HHH   4<<#$Q$Q$QRRR r2   Iterator[bases.Instance]c                R   	 | j                             |          }n!# t          t          f$ r}t          |d}~ww xY wt          d |D                       st          t          d          }t          | |g|d          d         }t          |	                                g          S )z/Specific inference function for enum Call node.Nc              3     K   | ];}t          |t          j                  o|                                t          k    V  <d S r+   )r   r
   rn   qnamer   )r6   items     r'   rW   zinfer_enum.<locals>.<genexpr>F  sT         	4((GTZZ\\Z-G     r2   a  
    class EnumMeta(object):
        'docstring'
        def __call__(self, node):
            class EnumAttribute(object):
                name = ''
                value = 0
            return EnumAttribute()
        def __iter__(self):
            class EnumAttribute(object):
                name = ''
                value = 0
            return [EnumAttribute()]
        def __reversed__(self):
            class EnumAttribute(object):
                name = ''
                value = 0
            return (EnumAttribute, )
        def __next__(self):
            return next(iter(self))
        def __getitem__(self, attr):
            class Value(object):
                @property
                def name(self):
                    return ''
                @property
                def value(self):
                    return attr

            return Value()
        __members__ = ['']
    T)r   rD   r   )
r   r"   r   r#   r   anyr   ry   r   instantiate_class)r$   r   inferredr&   	enum_metarw   s         r'   
infer_enumr   <  s    
+9??7++M* + + +!s*+        " "!$	! !ID !	{G$OOOPQRJ--//0111s    ;6;a  
    def __or__(self, other):
        return {name}(self.value | other.value)
    def __and__(self, other):
        return {name}(self.value & other.value)
    def __xor__(self, other):
        return {name}(self.value ^ other.value)
    def __add__(self, other):
        return {name}(self.value + other.value)
    def __div__(self, other):
        return {name}(self.value / other.value)
    def __invert__(self):
        return {name}(~self.value)
    def __mul__(self, other):
        return {name}(self.value * other.value)
nodes.ClassDefc                   d |                                  D             D ]}|                                 j        dk    r ni }t                      }| j                                        D ]\  }}t          d |D                       s|dk    r&|d                                         }t          |t          j
                  rMt          |j        d         t          j                  r |j        d                                         }n,|j        }n$t          |t          j                  r	|j        g}nd}|j        ~t          |j        t          j                  rFt          |j        j        t$                    rt'          |j        j                  }n&|j        j        }n|j                                        }g }	|D ]D}
t          |
t          j                  r|                    |
j                   t/          d                    |
j        d                    | j                  |	                    }d
|v r#|t6                              |
j                  z  }t9          t;                      d                              |          |
j                 }|
j        |_        |                                  D ]}|g|j        |j        <   |	!                    |"                                           |j        ?|||<   F|	| j        |<   t          j#        | | j$        | j%        | j&        | j'                  g| j        d<   t          j#        | | j$        | j%        | j&        | j'                  (                    fd|                                D                        g| j        d<   d|vrNt/          d          }t9          t;                                                    |          d         }|g| j        d<    | S )zSpecific inference for enums.c              3  .   K   | ]}|j         D ]}|V  d S r+   )r|   )r6   clsbs      r'   rW   z#infer_enum_class.<locals>.<genexpr>  s1      DD3cmDDQDDDDDDDr2   rD   c              3  L   K   | ]}t          |t          j                   V   d S r+   )r   r
   
AssignName)r6   r%   s     r'   rW   z#infer_enum_class.<locals>.<genexpr>  s2      PP
5%*:;;;PPPPPPr2   _ignore_r   Na  
                class {name}({types}):
                    @property
                    def value(self):
                        return {return_value}
                    @property
                    def _value_(self):
                        return {return_value}
                    @property
                    def name(self):
                        return "{name}"
                    @property
                    def _name_(self):
                        return "{name}"
                r   )r=   typesreturn_valueIntFlagr   F)apply_transformsrd   r`   ra   rb   rc   _value2member_map_c                    g | ]N\  }}t          j        |           t          j        |j        |j        |j        |j        |j                  fOS ))rd   r   )r
   rS   r   r=   r`   ra   rb   rc   )r6   kvmemberss      r'   rO   z$infer_enum_class.<locals>.<listcomp>  st        Aq K'222J& x#$<#$<'('7  
  r2   __members__r=   zY
            @property
            def name(self):
                return ''
            ))mror   r=   r{   r   rP   r   	statementr   r
   AssigntargetsrV   itered	AnnAssigntargetr%   rS   r[   repr	as_stringStarredr   r   r   r   r|   INT_FLAG_ADDITION_METHODSr   r   r   rd   	mymethodsappendr   Dictr`   ra   rb   rc   rp   )r$   basenamedunder_memberstarget_nameslocalvaluesstmtr   inferred_return_valuenew_targetsr   classdefr   methodcodename_dynamicclassattrr   s                   @r'   infer_enum_classr     s5   DD$((**DDD J J99;;v%%Euu![..00 H	- H	-ME6PPPPPPPJ&&!9&&((D$-- dl1ou{;; +"l1o4466GG"lGGD%/22 ;-$(!z%dj%+66 C!$*"2C88 A04TZ5E0F0F--04
0@--,0J,@,@,B,B)K! *- *-fem44   ---! F#["ii77%:    * ((
  9 @ @fk @ R RRH%"$$u  ,x((6 %m"nn.. 8 8F06xDK,,""4#9#9#;#;<<<:%(,u%%!,DK J{??#2  -
() *;.
 
 
 	    +0022  	
 	
 	
  '.YM" %% D %3>3C3C$D$D$Q$QRV$W$W%! $9"9DKKr2   c                   d | j         D             }t          d                              | j        d                    |                    }t          |          }	 t          t          ||                    }n$# t          $ r}t          ||          |d}~ww xY w| 
                                D ]}|g|j        |j        <   | j         D ]m}t          |t          j                  r'|j        D ]}	|	j        }
| j        |
         |j        |
<   Ct          |t          j                  r|g|j        |j        <   nt#          |f          S )z&Infer a subclass of typing.NamedTuple.c                Z    g | ](}t          |t          j                  |j        j        )S r4   )r   r
   r   r   r=   )r6   	annassigns     r'   rO   z1infer_typing_namedtuple_class.<locals>.<listcomp>  s@       i11  r2   zU
    from collections import namedtuple
    namedtuple({typename!r}, {fields!r})
    rI   )r9   ru   )r$   r   N)re   r   r   r=   r   r   r!   r   r#   r   r   r   r   r
   r   r   rn   r   )rw   r   annassigns_fieldsr   r$   generated_class_noder   r   	body_noder   r]   s              r'   infer_typing_namedtuple_classr     s    #  
 	 
 fjochh7H.I.IfJJ 	 D@#$5dG$D$DEE @ @ @$888a?@&&(( < <4:8#FK00_ F F	i.. 	F#+ L L{4>4Ed4K$+D11L 	5>22 	F;D+ '	7%'(((s   A< <
BBBc                J    t          d          }|                    |          S )z
    Starting with python3.9, NamedTuple is a function of the typing module.
    The class NamedTuple is build dynamically through a call to `type` during
    initialization of the `_NamedTuple` variable.
    zD
        from typing import _NamedTuple
        _NamedTuple
        )r   r"   )r$   r   klasss      r'    infer_typing_namedtuple_functionr   5  s,     	 E ;;wr2   c                   	 t          | j                                                  }n!# t          t          f$ r}t
          |d}~ww xY w|                                t          vrt
          t          | j	                  dk    rt
          t          | j	        d         t          j        t          j        f          st
          t          | |          S )z$Infer a typing.NamedTuple(...) call.N   r:   )r!   r   r"   r   r#   r   r   r   r,   r/   r   r
   ListrV   r   )r$   r   r   r&   s       r'   infer_typing_namedtupler   D  s    +DIOO%%&&M* + + +!s*+ zz||666!!
49~~!!dilUZ$=>> "!!T7+++s   &) AAAr[   c                   g }d}	 t          | j        d                                                   }n,# t          t          f$ r}t
          |d}~wt          $ r Y nw xY w|s`| j        D ]X}|j        dk    rK	 t          |j	                                                  }n!# t          t          f$ r}t
          |d}~ww xY w nYt          |t          j                  st
          |j        D ]}t          |t          j                  r(|                    |                                           Dt          |t          j        t          j        f          st
          t'          |j                  dk    rt
          |                    |j        d                                                    |rdd                    |           d}nd	}|S )
zGet and return fields of a NamedTuple in code-as-a-string.

    Because the fields are represented in their code form we can
    extract a node from them later on.
    Nr:   r;   r   r   (rI   z,) )r!   r/   r"   r   r#   r   
IndexErrorr<   r5   r%   r   r
   BaseContainerrT   rS   r   r   r   rV   r,   r   )r$   r>   	containerr&   keyword_nodeeltr;   s          r'   rj   rj   [  s    EI1++--..		M* + + +!s*     M 	 	L=007 $\%7%=%=%?%? @ @II&6 7 7 7-367 1 i!455 "!!~ . .c5;'' 	LL)))#
EK899 	&%%sx==A%%SXa[**,,---- -#((5//---s3   ,3 AAAA6&BB;.B66B;r   astroid.ClassDefc                ,    |                      d          S )z,Return whether cls is a subclass of an Enum.r   )is_subtype_of)r   s    r'   _is_enum_subclassr    s    [)))r2   managerr   Nonec                   |                      t          j        t          t                    t
                     |                      t          j        t          t                    t                     |                      t          j        t          t                     |                      t          j        t          t                    t                     |                      t          j        t          t                    d            |                      t          j        t          t                    t                      d S )N)	predicatec                f    | j         dk    o&t          |                                 dd           dk    S )Nr   r=   typing)r=   getattrr   r}   s    r'   <lambda>zregister.<locals>.<lambda>  s1    TY,. ;DIIKK..(: r2   )register_transformr
   Callr	   r   _looks_like_namedtupler   _looks_like_enumrn   r   r  r   r~   FunctionDefr   r   _looks_like_typing_namedtuple)r	  s    r'   registerr    s   
M"3446L   uz=+D+DFVWWW(4E     344  
 677	; 	;   
-..%    r2   r   )
r$   r@   rA   rB   r   rC   rD   rE   rF   rG   )rF   rE   r+   )r$   r@   r   rC   rF   r   )F)r$   r@   r   rC   rF   r   )r$   r   rF   r   )r   rC   )r$   r@   rF   r[   )r   r  rF   rE   )r	  r   rF   r
  )7__doc__
__future__r   	functoolsr7   collections.abcr   textwrapr   r  r   astroidr   r   r	   r
   r   astroid.builderr   r   r   astroid.contextr   astroid.exceptionsr   r   r   r   astroid.managerr   r   __annotations__r   r   r(   r?   ry   r~   r   partialr  r  r  r   r   r   r   r   r   r   r   r   rj   r  r  r4   r2   r'   <module>r$     sK  
 5 4 4 " " " " " "      $ $ $ $ $ $              @ @ @ @ @ @ @ @ @ @ @ @ @ @ N N N N N N N N N N , , , , , ,            + * * * * *$
 $ $ $ $"&     & & &     	 	 	     4 (,	]( ]( ]( ]( ](@= = =    +*;\JJJ $9$[v>>>  1	 1+L Q Q Q  :>F F F F FR  "   D :>32 32 32 32 32l $M M M M`) ) ) ) )B           :>, , , , ,.' ' ' 'T* * * *
     r2   