§
    ñyIf˜ ã                  óp  — d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
mZ ddlmZmZ ddlmZmZmZmZmZmZ ddlmZmZmZ ddlmZmZmZmZ dd	lm Z m!Z!m"Z"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. ddl/m0Z0 ddl1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z> ddl?m@Z@mAZA ddlBmCZC ddlDmEZE ddlFmGZGmHZHmIZImJZJ erddlmKZKmLZL ddlMmNZN dZO ePddh¦  «        ZQ ePh d£¦  «        ZR ed¦  «        ZSd„ ZTd<d„ZUd=d$„ZVd%„ ZW G d&„ d'eA¦  «        ZX G d(„ d)e@¦  «        ZY G d*„ d+e@¦  «        ZZ G d,„ d-e@¦  «        Z[ G d.„ d/e@¦  «        Z\d0„ Z] G d1„ d2e<j^        eA¦  «        Z_ G d3„ d4e<j`        e<j^        e<ja        eA¦  «        Zb G d5„ d6eb¦  «        Zcd>d?d8„Zdd>d@d9„Zed:„ Zf G d;„ d!e<j^        eAe<ja        ¦  «        ZgdS )AzÚ
This module contains the classes for "scoped" node, i.e. which are opening a
new local scope in the language definition : Module, ClassDef, FunctionDef (and
Lambda, GeneratorExp, DictComp and SetComp to some extent).
é    )ÚannotationsN)Ú	GeneratorÚIterableÚIteratorÚSequence)Úcached_propertyÚ	lru_cache)ÚTYPE_CHECKINGÚAnyÚClassVarÚLiteralÚNoReturnÚTypeVar)ÚbasesÚ	protocolsÚutil)ÚIS_PYPYÚPY38Ú	PY39_PLUSÚPYPY_7_3_11_PLUS)ÚCallContextÚInferenceContextÚbind_context_to_nodeÚcopy_context)
ÚAstroidBuildingErrorÚAstroidTypeErrorÚAttributeInferenceErrorÚDuplicateBasesErrorÚInconsistentMroErrorÚInferenceErrorÚMroErrorÚParentMissingErrorÚStatementMissingÚTooManyLevelsError)Úlookup)Ú
ClassModelÚFunctionModelÚModuleModel)ÚAstroidManager)Ú	ArgumentsÚConstÚNodeNGÚUnknownÚ_base_nodesÚconst_factoryÚnode_classes)ÚComprehensionScopeÚLocalsDictNodeNG)Úbuiltin_lookup)ÚPosition)ÚInferBinaryOpÚInferenceErrorInfoÚInferenceResultÚSuccessfulInferenceResult)ÚnodesÚobjects)ÚLookupMixIn)Ú__iter__Ú__getitem__Ú	ExceptionÚBaseException>   ÚclassmethodÚstaticmethodúbuiltins.classmethodúbuiltins.staticmethodÚ_Tc                óî   — g }	 d„ | D ¦   «         } | s|S | D ]!}|d         }| D ]}||dd…         v rd} nŒ nŒ"|st          d| ||¬¦  «        ‚|                     |¦  «         | D ]}|d         |k    r|d= ŒŒs)zŒMerges MROs in *sequences* to a single MRO using the C3 algorithm.

    Adapted from http://www.python.org/download/releases/2.3/mro/.

    Tc                ó   — g | ]}|¯|‘ŒS © rG   )Ú.0Úss     ú[/var/www/piapp/venv/lib/python3.11/site-packages/astroid/nodes/scoped_nodes/scoped_nodes.pyú
<listcomp>z_c3_merge.<locals>.<listcomp>U   s   € Ð/Ð/Ð/˜1¨QÐ/�QÐ/Ð/Ð/ó    r   é   NzTCannot create a consistent method resolution order for MROs {mros} of class {cls!r}.©ÚmessageÚmrosÚclsÚcontext)r   Úappend)Ú	sequencesrQ   rR   ÚresultÚs1Ú	candidateÚs2Úseqs           rJ   Ú	_c3_mergerZ   M   só   € ð €FðØ/Ð/ 	Ð/Ñ/Ô/ˆ	Øð 	ØˆMØð 	ð 	ˆBØ˜1œˆIØð ð �Ø  1 2 2¤Ð&Ð&Ø $�IØ�Eð 'ð �ð ð ð 		õ 'ð4àØØðñ ô ð ð 	�Š�iÑ Ô Ð àð 	ð 	ˆCØ�1Œv˜Ò"Ð"Ø˜�Føð7rL   rT   úlist[list[ClassDef]]ÚreturnÚNonec                óV  — | dd…         }| d         }t          |¦  «        D ]!\  }}|                     ¦   «         dk    r|} nŒ"dS t          |¦  «        D ]'\  }}||k    rŒt          d„ |D ¦   «         ¦  «        r nŒ(dS |                     |¦  «         |                     |¦  «         dS )aé  A class can inherit from typing.Generic directly, as base,
    and as base of bases. The merged MRO must however only contain the last entry.
    To prepare for _c3_merge, remove some typing.Generic entries from
    sequences if multiple are present.

    This method will check if Generic is in inferred_bases and also
    part of bases_mro. If true, remove it from inferred_bases
    as well as its entry the bases_mro.

    Format sequences: [[self]] + bases_mro + [inferred_bases]
    rM   éÿÿÿÿútyping.GenericNc              3  óF   K  — | ]}|                      ¦   «         d k    V — ŒdS )r`   N©Úqname©rH   Úbases     rJ   ú	<genexpr>z+clean_typing_generic_mro.<locals>.<genexpr>�   s0   è è € Ð@Ð@°Dˆt�zŠz‰|Œ|Ð/Ò/Ð@Ð@Ð@Ð@Ð@Ð@rL   )Ú	enumeraterc   ÚanyÚpop)rT   Ú	bases_mroÚinferred_basesÚire   Úposition_in_inferred_basesrY   s          rJ   Úclean_typing_generic_mrorn   s   sì   € ð ˜!˜B˜$”€IØ˜r”]€Nå˜^Ñ,Ô,ð ð ‰ˆˆ4Ø�:Š:‰<Œ<Ð+Ò+Ð+Ø)*Ð&ØˆEð ,ð 	ˆõ ˜IÑ&Ô&ð ð ‰ˆˆ3ØÐ*Ò*Ð*ØÝÐ@Ð@¸CÐ@Ñ@Ô@Ñ@Ô@ð 	ØˆEð	ð 	ˆð ×ÒÐ1Ñ2Ô2Ð2Ø‡M‚MÐ,Ñ-Ô-Ð-Ð-Ð-rL   rQ   ÚClassDefrR   úInferenceContext | Nonec                óÄ   — | D ]\}t          ¦   «         }|D ]I}|j        |                     ¦   «         f}||v rt          d| ||¬¦  «        ‚|                     |¦  «         ŒJŒ]| S )Nz,Duplicates found in MROs {mros} for {cls!r}.rN   )ÚsetÚlinenorc   r   Úadd)rT   rQ   rR   ÚsequenceÚseenÚnodeÚlineno_and_qnames          rJ   Úclean_duplicates_mrory   —   s“   € ð
 ð 'ð 'ˆÝ‰uŒuˆØð 		'ð 		'ˆDØ $¤¨T¯ZªZ©\¬\Ð:ÐØ 4Ð'Ð'Ý)ØJØ"ØØ#ð	ñ ô ð ð �HŠHÐ%Ñ&Ô&Ð&Ð&ð		'ð ÐrL   c                óÈ   — t          | t          ¦  «        rL| j        dk    rt          j        | |¦  «        S | j        dk    r| S | j        dk    rt          j        | ¦  «        S | S )Nr@   ÚpropertyrA   )Ú
isinstanceÚFunctionDefÚtyper   ÚBoundMethodÚUnboundMethod)ÚnÚklasss     rJ   Úfunction_to_methodrƒ   «   si   € Ý�!•[Ñ!Ô!ð *ØŒ6�]Ò"Ð"ÝÔ$ Q¨Ñ.Ô.Ð.ØŒ6�ZÒÐØˆHØŒ6�^Ò#Ð#ÝÔ& qÑ)Ô)Ð)Ø€HrL   c                  ód  ‡ — e Zd ZU dZdZded<   	 dZded<   	 dZded	<   	  e¦   «         Z		 h d
£Z
ded<   	 dZdZ	 	 	 	 dOdPˆ fd„ZddœdQd„Zd „ Zd!„ ZdRd%„Z	 dSdTd+„ZdUd-„ZdVd.„Z	 dWdXd1„Z	 dYdZd3„Zd[d4„Zdd5œd\d9„Zd:„ Zd;„ ZdZd[d<„Z	 	 	 d]d^dB„Zd_dC„ZdD„ ZdE„ Z dYd`dF„Z!dG„ Z"dd5œdadJ„Z#	 dYdbdN„Z$ˆ xZ%S )cÚModulezéClass representing an :class:`ast.Module` node.

    >>> import astroid
    >>> node = astroid.extract_node('import astroid')
    >>> node
    <Import l.1 at 0x7f23b2e4e5c0>
    >>> node.parent
    <Module l.0 at 0x7f23b2e4eda0>
    )Údoc_nodeÚbodyúConst | Noner†   Nzstr | bytes | NoneÚ
file_bytesú
str | NoneÚfile_encoding>   Ú__doc__Ú__file__Ú__name__Ú__path__Ú__package__zClassVar[set[str]]Úscope_attrs)ÚnameÚfileÚpathÚpackageÚpure_pythonÚfuture_imports)ÚlocalsÚglobalsFTr’   Ústrr“   r”   úSequence[str] | Noner•   Úboolr–   r\   r]   c                óþ   •— || _         	 || _        	 || _        || _        	 || _        	 |  	 i x| _        | _        	 g | _        	 t          ¦   «         | _	        	 t          ¦   «                              dd dd d ¬¦  «         d S )Nr   )rs   ÚparentÚ
col_offsetÚ
end_linenoÚend_col_offset)r’   r“   r”   r•   r–   r˜   r™   r‡   rr   r—   ÚsuperÚ__init__)Úselfr’   r“   r”   r•   r–   Ú	__class__s         €rJ   r£   zModule.__init__é   s£   ø€ ð ˆŒ	Ø%àˆŒ	ð	ð ˆŒ	àˆŒØ@à&ˆÔØ4àÐ6ØUà%'Ð'ˆŒ�d”lØSà/1ˆŒ	Ø)å(+©¬ˆÔØ.å‰Œ×ÒØ˜T¨a¸DÐQUð 	ñ 	
ô 	
ð 	
ð 	
ð 	
rL   )r†   r‡   úlist[node_classes.NodeNG]c               ó"   — || _         || _        d S ©N)r‡   r†   )r¤   r‡   r†   s      rJ   ÚpostinitzModule.postinit  s   € ð ˆŒ	Ø ˆŒˆˆrL   c                ó‚   — | j         �t          j        | j         ¦  «        S | j        �t	          | j        d¦  «        }|S d S )NÚrb)r‰   ÚioÚBytesIOr“   Úopen)r¤   Ústreams     rJ   Ú_get_streamzModule._get_stream  s?   € ØŒ?Ð&Ý”:˜dœoÑ.Ô.Ð.ØŒ9Ð å˜$œ) TÑ*Ô*ˆFØˆMØˆtrL   c                ó*   — |                       ¦   «         S )zaGet a stream to the underlying file or bytes.

        :type: file or io.BytesIO or None
        )r°   ©r¤   s    rJ   r¯   zModule.stream$  s   € ð
 ×ÒÑ!Ô!Ð!rL   rs   Úintútuple[int, int]c                ó   — | j         | j        fS )z±Get a range from where this node starts to where this node ends.

        :param lineno: Unused.

        :returns: The range of line numbers that this node belongs to.
        ©Ú
fromlinenoÚtolineno©r¤   rs   s     rJ   Úblock_rangezModule.block_range+  ó   € ð Œ ¤Ð-Ð-rL   r   rw   r;   Úoffsetú2tuple[LocalsDictNodeNG, list[node_classes.NodeNG]]c                ó¬   — || j         v r5|| j        vr,	 | |                      |¦  «        fS # t          $ r | g fcY S w xY w|                      |||¦  «        S )aþ  Lookup where the given variable is assigned.

        :param node: The node to look for assignments up to.
            Any assignments after the given node are ignored.

        :param name: The name of the variable to find assignments for.

        :param offset: The line offset to filter statements up to.

        :returns: This scope node and the list of assignments associated to the
            given name according to the scope where it has been found (locals,
            globals or builtin).
        )r‘   r˜   Úgetattrr   Ú_scope_lookup)r¤   rw   r’   r¼   s       rJ   Úscope_lookupzModule.scope_lookup4  sz   € ð  �4Ô#Ð#Ð#¨°D´KÐ(?Ð(?ð Ø˜TŸ\š\¨$Ñ/Ô/Ð/Ð/øÝ*ð  ð  ð  Ø˜R�x���ð øøøà×!Ò! $¨¨fÑ5Ô5Ð5s   ”+ «<»<úLiteral['builtins.module']c                ó   — dS )úeGet the name of the type that this node represents.

        :returns: The name of the type.
        zbuiltins.modulerG   r²   s    rJ   ÚpytypezModule.pytypeK  s
   € ð
 !Ð rL   c                ó   — dS )újA human readable type of this node.

        :returns: The type of this node.
        :rtype: str
        r…   rG   r²   s    rJ   Údisplay_typezModule.display_typeR  s	   € ð ˆxrL   rR   rp   c                óä  — |st          | ||¬¦  «        ‚g }|| j        v }|| j        v rH|sF|sD| j                             |¦  «        g}|dk    r"|                     t          d¦  «        ¦  «         n_|s|r| j        |         }nM| j        rF	 |                      |d¬¦  «        g}n,# t          t          f$ r}t          | ||¬¦  «        |‚d }~ww xY wd„ |D ¦   «         }|r|S t          | ||¬¦  «        ‚)N©ÚtargetÚ	attributerR   rŽ   Ú__main__T)Úrelative_onlyc                óF   — g | ]}t          |t          j        ¦  «        °|‘ŒS rG   )r|   r0   ÚDelName©rH   r�   s     rJ   rK   z"Module.getattr.<locals>.<listcomp>p  ó*   € ÐOÐOÐO˜­:°a½Ô9MÑ+NÔ+NÐO�!ÐOÐOÐOrL   )
r   r˜   Úspecial_attributesr%   rS   r/   r•   Úimport_moduler   ÚSyntaxError)r¤   r’   rR   Úignore_localsrU   Úname_in_localsÚexcs          rJ   r¿   zModule.getattrZ  sP  € ð ð 	XÝ)°ÀÈwÐWÑWÔWÐWàˆØ ¤Ð,ˆà�4Ô*Ð*Ð*°=Ð*ÈÐ*ØÔ-×4Ò4°TÑ:Ô:Ð;ˆFØ�zÒ!Ð!Ø—’�m¨JÑ7Ô7Ñ8Ô8Ð8øØð 	 >ð 	Ø”[ Ô&ˆFˆFØŒ\ð 	ðØ×,Ò,¨TÀÐ,ÑFÔFÐG��øÝ(­+Ð6ð ð ð Ý-Ø¨4¸ðñ ô àðøøøøðøøøð PÐO˜VÐOÑOÔOˆØð 	ØˆMÝ%¨T¸TÈ7ÐSÑSÔSÐSs   ÂB$ Â$CÂ5CÃCúIterator[InferenceResult]c                óì   — t          |¦  «        }||_        	 t          j        |                      ||¦  «        || ¬¦  «        S # t
          $ r&}t          t          |¦  «        | ||¬¦  «        |‚d}~ww xY w)ú£Infer the possible values of the given variable.

        :param name: The name of the variable to infer.

        :returns: The inferred possible values.
        ©ÚframerÊ   N)r   Ú
lookupnamer   Ú_infer_stmtsr¿   r   r    rš   ©r¤   r’   rR   Úerrors       rJ   ÚigetattrzModule.igetattru  s�   € õ ˜wÑ'Ô'ˆØ!ˆÔð	ÝÔ% d§l¢l°4¸Ñ&AÔ&AÀ7ÐRVÐWÑWÔWÐWøÝ&ð 	ð 	ð 	Ý Ý�E‘
”
 4°4Àðñ ô àðøøøøð	øøøs   ˜*A Á
A3Á!A.Á.A3c                óH   — | j         duo| j                              d¦  «        S )zÞCheck if this module has been build from a .py file.

        If so, the module contains a complete representation,
        including the code.

        :returns: Whether the module has been built from a .py file.
        Nz.py)r“   Úendswithr²   s    rJ   Úfully_definedzModule.fully_defined‰  s&   € ð Œy Ð$ÐB¨¬×);Ò);¸EÑ)BÔ)BÐBrL   ©Úfuturerç   úLiteral[None, True]r   c               ó^   — |�t          j        dt          d¬¦  «         t          | ¬¦  «        ‚)z“The first parent node, including self, marked as statement node.

        When called on a :class:`Module` this raises a StatementMissing.
        Nz.The future arg will be removed in astroid 4.0.é   )Ú
stacklevel©rË   )ÚwarningsÚwarnÚDeprecationWarningr#   ©r¤   rç   s     rJ   Ú	statementzModule.statement“  s?   € ð
 ÐÝŒMØ@Ý"Øðñ ô ð õ
  dÐ+Ñ+Ô+Ð+rL   c                ó   — dS )zThe previous sibling statement.

        :returns: The previous sibling statement node.
        :rtype: NodeNG or None
        NrG   r²   s    rJ   Úprevious_siblingzModule.previous_sibling   ó   € € € rL   c                ó   — dS )z|The next sibling statement node.

        :returns: The next sibling statement node.
        :rtype: NodeNG or None
        NrG   r²   s    rJ   Únext_siblingzModule.next_sibling§  rô   rL   c                ó   — | j         S )zWhether :pep:`328` absolute import behaviour has been enabled.

        :returns: Whether :pep:`328` has been enabled.
        )Ú_absolute_import_activatedr²   s    rJ   Úabsolute_import_activatedz Module.absolute_import_activated°  s   € ð
 Ô.Ð.rL   ÚmodnamerÎ   Úlevelú
int | NoneÚ	use_cachec                óü   — |r|€d}|                       ||¦  «        }	 t          ¦   «                              ||¬¦  «        S # t          $ r |r‚ ||k    r‚ Y nw xY wt          ¦   «                              ||¬¦  «        S )ax  Get the ast for a given module as if imported from this module.

        :param modname: The name of the module to "import".

        :param relative_only: Whether to only consider relative imports.

        :param level: The level of relative import.

        :param use_cache: Whether to use the astroid_cache of modules.

        :returns: The imported module ast.
        Nr   )rý   )Úrelative_to_absolute_namer)   Úast_from_module_namer   )r¤   rú   rÎ   rû   rý   Ú
absmodnames         rJ   rÔ   zModule.import_module·  sº   € ð& ð 	˜U˜]ØˆEØ×3Ò3°G¸UÑCÔCˆ
ð	Ý!Ñ#Ô#×8Ò8Ø ið 9ñ ô ð øõ $ð 	ð 	ð 	ð ð Øð ˜*Ò$Ð$Øð %Ð$ð	øøøõ ÑÔ×4Ò4°WÈ	Ð4ÑRÔRÐRs   ž"A ÁAÁAc                ó@  — |                       ¦   «         r|€|S |�rE| j        r'|dz
  }| j                             d|¦  «        d         }nà| j        r¸t
          j                             t
          j                             | j        d         ¦  «        dz   ¦  «        snt
          j                             t
          j                             | j        d         ¦  «        dz   |                     d¦  «        d         z   ¦  «        r|dz
  }d}n!| j                             d|¦  «        d         }|r4| j         	                    d¦  «        |k     rt          || j        ¬¦  «        ‚n0| j        r| j        }n!| j                             dd¦  «        d         }|r|s|S |› d|› �S |S )	a‚  Get the absolute module name for a relative import.

        The relative import can be implicit or explicit.

        :param modname: The module name to convert.

        :param level: The level of relative import.

        :returns: The absolute module name.

        :raises TooManyLevelsError: When the relative import refers to a
            module too far above this one.
        NrM   ú.r   z/__init__.pyú/Ú )rû   r’   )rù   r•   r’   Úrsplitr”   ÚosÚexistsÚdirnameÚsplitÚcountr$   )r¤   rú   rû   Úpackage_names       rJ   rÿ   z Module.relative_to_absolute_nameÝ  s¢  € ð" ×)Ò)Ñ+Ô+ð 	°°ØˆNØñ 	7ØŒ|ð ?Ø ™	�Ø#œy×/Ò/°°UÑ;Ô;¸AÔ>��à”	ð
?åœŸš¥r¤w§¢°t´yÀ´|Ñ'DÔ'DÀ~Ñ'UÑVÔVð
?õ ”G—N’NÝ”G—O’O D¤I¨a¤LÑ1Ô1°CÑ7¸'¿-º-ÈÑ:LÔ:LÈQÔ:OÑOñô ð
?ð  ™	�Ø!��à#œy×/Ò/°°UÑ;Ô;¸AÔ>�Øð F˜œŸš¨Ñ-Ô-°Ò5Ð5Ý(¨u¸4¼9ÐEÑEÔEÐEøàŒ\ð 	7Øœ9ˆLˆLàœ9×+Ò+¨C°Ñ3Ô3°AÔ6ˆLàð 	/Øð $Ø#Ð#Ø"Ð.Ð. WÐ.Ð.Ð.ØˆrL   c                óþ  — d„ |                       ¦   «         D ¦   «         }	 | d         }n# t          $ r |cY S w xY w	 t          |                     ¦   «         ¦  «        }n&# t          t
          f$ r |cY S t          $ r |cY S w xY wg }	 t          |                     ¦   «         ¦  «        }n# t          t
          f$ r |cY S w xY wt          |t          j
        t          j        f¦  «        s|S dd„}|j        D ]‡} ||¦  «        r|                     |j        ¦  «         Œ(	 t          |                     ¦   «         ¦  «        }n# t          t
          f$ r Y Œ^w xY w ||¦  «        r|                     |j        ¦  «         Œˆ|S )a  The list of imported names when this module is 'wildcard imported'.

        It doesn't include the '__builtins__' name which is added by the
        current CPython implementation of wildcard imports.

        :returns: The list of imported names.
        :rtype: list(str)
        c                ó<   — g | ]}|                      d ¦  «        °|‘ŒS ©Ú_©Ú
startswith©rH   r’   s     rJ   rK   z0Module.wildcard_import_names.<locals>.<listcomp>  s)   € ÐLÐLÐL˜D°t·²ÀsÑ7KÔ7KÐL�4ÐLÐLÐLrL   Ú__all__r\   rœ   c                ój   — t          | t          j        ¦  «        ot          | j        t          ¦  «        S r¨   )r|   r0   r+   Úvaluerš   )rw   s    rJ   Ú	str_constz/Module.wildcard_import_names.<locals>.str_const0  s'   € Ý˜d¥LÔ$6Ñ7Ô7ÐW½JÀtÄzÕSVÑ<WÔ<WÐWrL   ©r\   rœ   )ÚkeysÚKeyErrorÚnextÚassigned_stmtsr    ÚStopIterationÚAttributeErrorÚinferr|   r0   ÚTupleÚListÚeltsrS   r  )r¤   ÚdefaultÚ
all_valuesÚexplicitÚinferredr  rw   Úinferred_nodes           rJ   Úwildcard_import_nameszModule.wildcard_import_names  sê  € ð MÐL D§I¢I¡K¤KÐLÑLÔLˆð	Ø˜iœˆJˆJøÝð 	ð 	ð 	ØˆNˆNˆNð	øøøð	Ý˜J×5Ò5Ñ7Ô7Ñ8Ô8ˆHˆHøÝ¥Ð.ð 	ð 	ð 	ØˆNˆNˆNÝð 	ð 	ð 	ð ˆNˆNˆNð	øøøð ˆð	Ý˜HŸNšNÑ,Ô,Ñ-Ô-ˆHˆHøÝ¥Ð.ð 	ð 	ð 	ØˆNˆNˆNð	øøøå˜(¥\Ô%7½Ô9JÐ$KÑLÔLð 	ØˆNð	Xð 	Xð 	Xð 	Xð ”Mð 		9ð 		9ˆDØˆy˜‰Œð 9Ø—’ ¤
Ñ+Ô+Ð+Ð+ðÝ$(¨¯ª©¬Ñ$6Ô$6�M�MøÝ&­Ð6ð ð ð Ø�Hðøøøà�9˜]Ñ+Ô+ð 9Ø—O’O MÔ$7Ñ8Ô8Ð8øØˆsG    ) ©8·8¼!A ÁBÁ3BÂ BÂ!B) Â)B?Â>B?Ä!E Å EÅEc                ó>   — d„ |                       ¦   «         D ¦   «         S )z‘The list of the names that are publicly available in this module.

        :returns: The list of public names.
        :rtype: list(str)
        c                ó<   — g | ]}|                      d ¦  «        °|‘ŒS r  r  r  s     rJ   rK   z'Module.public_names.<locals>.<listcomp>E  s)   € ÐIÐIÐI˜°D·O²OÀCÑ4HÔ4HÐI�ÐIÐIÐIrL   )r  r²   s    rJ   Úpublic_nameszModule.public_names?  s!   € ð JÐI §¢¡¤ÐIÑIÔIÐIrL   c                ó   — dS )z Determine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`Module` this is always ``True``.
        TrG   ©r¤   rR   s     rJ   Ú
bool_valuezModule.bool_valueG  ó	   € ð ˆtrL   c              #  ó$   K  — | j         E d {V —† d S r¨   ©r‡   r²   s    rJ   Úget_childrenzModule.get_childrenO  s&   è è € Ø”9ÐÐÐÐÐÐÐÐÐrL   r¤   rD   c               ó   — | S ©z³The node's frame node.

        A frame node is a :class:`Module`, :class:`FunctionDef`,
        :class:`ClassDef` or :class:`Lambda`.

        :returns: The node itself.
        rG   rð   s     rJ   rÝ   zModule.frameR  ó	   € ð ˆrL   Úkwargsr   úGenerator[Module, None, None]c              +  ó   K  — | V — d S r¨   rG   ©r¤   rR   r6  s      rJ   Ú_inferzModule._infer\  ó   è è € ð ˆ
ˆ
ˆ
ˆ
ˆ
rL   )NNFT)r’   rš   r“   rŠ   r”   r›   r•   rœ   r–   rœ   r\   r]   )r‡   r¦   r†   rˆ   ©rs   r³   r\   r´   ©r   )rw   r;   r’   rš   r¼   r³   r\   r½   )r\   rÂ   ©r\   rš   )NF©rR   rp   r¨   ©r’   rš   rR   rp   r\   rÙ   r  )rç   rè   r\   r   )FNT)
rú   rš   rÎ   rœ   rû   rü   rý   rœ   r\   r…   )rú   rš   rû   rü   r\   rš   ©rR   rp   r\   rœ   ©r¤   rD   rç   rè   r\   rD   )rR   rp   r6  r   r\   r7  )&rŽ   Ú
__module__Ú__qualname__rŒ   Ú_astroid_fieldsÚ__annotations__r‰   r‹   r(   rÓ   r‘   Ú_other_fieldsÚ_other_other_fieldsr£   r©   r°   r¯   rº   rÁ   rÅ   rÈ   r¿   râ   rå   rñ   ró   rö   rø   rù   rÔ   rÿ   r(  r+  r.  r2  rÝ   r:  Ú__classcell__©r¥   s   @rJ   r…   r…   ¶   s
  ø€ € € € € € ðð ð +€OàÐÐÑØ1ð &*€JÐ)Ð)Ð)Ñ)Ø8à $€MÐ$Ð$Ð$Ñ$ðð %˜™œÐØ?ð'ð 'ð '€Kð ð ð ñ ð Mð€Mð 0Ðð
  Ø%)ØØ ð(
ð (
ð (
ð (
ð (
ð (
ð (
ðZ LPð!ð !ð !ð !ð !ð !ðð ð ð"ð "ð "ð.ð .ð .ð .ð ;<ð6ð 6ð 6ð 6ð 6ð.!ð !ð !ð !ðð ð ð ð LQðTð Tð Tð Tð Tð8 =Aðð ð ð ð ð(Cð Cð Cð Cð :>ð ,ð ,ð ,ð ,ð ,ð ,ðð ð ðð ð ð "&Ðð/ð /ð /ð /ð $Ø Øð$Sð $Sð $Sð $Sð $SðL.ð .ð .ð .ð`0ð 0ð 0ðdJð Jð Jðð ð ð ð ðð ð ð :>ð ð ð ð ð ð ð 26ðð ð ð ð ð ð ð ð rL   r…   c                  óR   ‡ — e Zd ZU dZdZdZded<   	 dˆ fd„Zdd„Zddd„Z	d„ Z
ˆ xZS )ÚGeneratorExpzÔClass representing an :class:`ast.GeneratorExp` node.

    >>> import astroid
    >>> node = astroid.extract_node('(thing for thing in things if thing)')
    >>> node
    <GeneratorExp l.1 at 0x7f23b2e4e400>
    ©ÚeltÚ
generators©r˜   r,   rN  rs   r³   rŸ   rž   r    rü   r¡   r\   r]   c               ót   •— i | _         	 g | _        	 t          ¦   «                              |||||¬¦  «         d S ©N©rs   rŸ   r    r¡   rž   ©r˜   rO  r¢   r£   ©r¤   rs   rŸ   rž   r    r¡   r¥   s         €rJ   r£   zGeneratorExp.__init__p  óS   ø€ ð ˆŒØSà57ˆŒØ5å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
rL   rO  úlist[nodes.Comprehension]c                ó"   — || _         || _        d S r¨   rM  ©r¤   rN  rO  s      rJ   r©   zGeneratorExp.postinit‡  ó   € ØˆŒØ$ˆŒˆˆrL   NrR   rp   úLiteral[True]c                ó   — dS )z¦Determine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`GeneratorExp` this is always ``True``.
        TrG   r-  s     rJ   r.  zGeneratorExp.bool_value‹  r/  rL   c              #  ó6   K  — | j         V — | j        E d {V —† d S r¨   rM  r²   s    rJ   r2  zGeneratorExp.get_children“  ó1   è è € ØŒhˆˆˆà”?Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"rL   ©rs   r³   rŸ   r³   rž   r,   r    rü   r¡   rü   r\   r]   ©rN  r,   rO  rW  r\   r]   r¨   ©rR   rp   r\   r[  ©rŽ   rC  rD  rŒ   rE  rH  rF  r£   r©   r.  r2  rI  rJ  s   @rJ   rL  rL  b  sž   ø€ € € € € € ðð ð ,€OØ%ÐØ€K€K�KØ>ð
ð 
ð 
ð 
ð 
ð 
ð.%ð %ð %ð %ðð ð ð ð ð#ð #ð #ð #ð #ð #ð #rL   rL  c                  ó^   ‡ — e Zd ZU dZdZdZded<   	 ded<   	 dˆ fd„Zdd„Zddd„Z	d„ Z
ˆ xZS )ÚDictCompzÉClass representing an :class:`ast.DictComp` node.

    >>> import astroid
    >>> node = astroid.extract_node('{k:v for k, v in things if k > v}')
    >>> node
    <DictComp l.1 at 0x7f23b2e41d68>
    ©Úkeyr  rO  rP  r,   rf  r  rs   r³   rŸ   rž   r    rü   r¡   r\   r]   c               ód   •— i | _         	 t          ¦   «                              |||||¬¦  «         d S rR  )r˜   r¢   r£   rU  s         €rJ   r£   zDictComp.__init__ª  sI   ø€ ð ˆŒØSå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
rL   rO  rW  c                ó0   — || _         || _        || _        d S r¨   re  )r¤   rf  r  rO  s       rJ   r©   zDictComp.postinit¾  s   € ð ˆŒØˆŒ
Ø$ˆŒˆˆrL   NrR   rp   c                ó   — t           j        S )zÊDetermine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`DictComp` this is always :class:`Uninferable`.
        :rtype: Uninferable
        ©r   ÚUninferabler-  s     rJ   r.  zDictComp.bool_valueÅ  ó   € õ ÔÐrL   c              #  óH   K  — | j         V — | j        V — | j        E d {V —† d S r¨   re  r²   s    rJ   r2  zDictComp.get_childrenÎ  s?   è è € ØŒhˆˆˆØŒjÐÐÐà”?Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"Ð"rL   r_  )rf  r,   r  r,   rO  rW  r\   r]   r¨   r?  rb  rJ  s   @rJ   rd  rd  ™  sª   ø€ € € € € € ðð ð 5€OØ%ÐØ€K€K�KØ!à€M€M�MØ#ð
ð 
ð 
ð 
ð 
ð 
ð(%ð %ð %ð %ð ð  ð  ð  ð  ð#ð #ð #ð #ð #ð #ð #rL   rd  c                  óR   ‡ — e Zd ZU dZdZdZded<   	 dˆ fd„Zdd„Zddd„Z	d„ Z
ˆ xZS )ÚSetCompzÊClass representing an :class:`ast.SetComp` node.

    >>> import astroid
    >>> node = astroid.extract_node('{thing for thing in things if thing}')
    >>> node
    <SetComp l.1 at 0x7f23b2e41898>
    rM  rP  r,   rN  rs   r³   rŸ   rž   r    rü   r¡   r\   r]   c               ót   •— i | _         	 g | _        	 t          ¦   «                              |||||¬¦  «         d S rR  rT  rU  s         €rJ   r£   zSetComp.__init__ã  rV  rL   rO  rW  c                ó"   — || _         || _        d S r¨   rM  rY  s      rJ   r©   zSetComp.postinitú  rZ  rL   NrR   rp   c                ó   — t           j        S )zÉDetermine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`SetComp` this is always :class:`Uninferable`.
        :rtype: Uninferable
        rj  r-  s     rJ   r.  zSetComp.bool_valueþ  rl  rL   c              #  ó6   K  — | j         V — | j        E d {V —† d S r¨   rM  r²   s    rJ   r2  zSetComp.get_children  r^  rL   r_  r`  r¨   r?  rb  rJ  s   @rJ   ro  ro  Õ  sž   ø€ € € € € € ðð ð ,€OØ%ÐØ€K€K�KØ>ð
ð 
ð 
ð 
ð 
ð 
ð.%ð %ð %ð %ð ð  ð  ð  ð  ð#ð #ð #ð #ð #ð #ð #rL   ro  c                  óR   ‡ — e Zd ZU dZdZdZded<   	 dˆ fd„Zdd„Zddd„Z	d„ Z
ˆ xZS )ÚListCompzÌClass representing an :class:`ast.ListComp` node.

    >>> import astroid
    >>> node = astroid.extract_node('[thing for thing in things if thing]')
    >>> node
    <ListComp l.1 at 0x7f23b2e418d0>
    rM  rP  r,   rN  rs   r³   rŸ   rž   r    rü   r¡   r\   r]   c               ót   •— i | _         	 g | _        	 t          ¦   «                              |||||¬¦  «         d S rR  rT  rU  s         €rJ   r£   zListComp.__init__  sS   ø€ ð ˆŒØLà57ˆŒØ5å‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
rL   rO  rW  c                ó"   — || _         || _        d S r¨   rM  rY  s      rJ   r©   zListComp.postinit3  rZ  rL   NrR   rp   c                ó   — t           j        S )zÊDetermine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`ListComp` this is always :class:`Uninferable`.
        :rtype: Uninferable
        rj  r-  s     rJ   r.  zListComp.bool_value7  rl  rL   c              #  ó6   K  — | j         V — | j        E d {V —† d S r¨   rM  r²   s    rJ   r2  zListComp.get_children@  r^  rL   r_  )rN  r,   rO  rW  r¨   r?  rb  rJ  s   @rJ   ru  ru    sž   ø€ € € € € € ðð ð ,€OØ%Ðà€K€K�KØ>ð
ð 
ð 
ð 
ð 
ð 
ð.%ð %ð %ð %ð ð  ð  ð  ð  ð#ð #ð #ð #ð #ð #ð #rL   ru  c                ó   — t          | t          ¦  «        sdS | j        sdS 	 t          |                      | j        ¦  «        d¦  «        }n# t
          $ r Y dS w xY wt          |t          j        ¦  «        r|j        }t          |t          ¦  «        r.| 
                    d¦  «        rdS | 
                    d¦  «        rdS t          |t          ¦  «        r©|j        sdS |j        j        D ]“}t          |t          j        ¦  «        r|j        t           v r	|j        c S t          |t          j        ¦  «        rFt          |j        t          j        ¦  «        r'|j        j        dk    r|j        t           v r	|j        c S Œ”dS )z_Detect decorator call chaining and see if the end result is a
    static or a classmethod.
    NrB   r@   rC   rA   Úbuiltins)r|   r}   rž   r  Úinfer_call_resultr    r   ÚInstanceÚ_proxiedro   Úis_subtype_ofÚ
decoratorsr9   r0   ÚNamer’   ÚBUILTIN_DESCRIPTORSÚ	AttributeÚexprÚattrname)rw   rU   Ú	decorators      rJ   Ú_infer_decorator_callchainr‡  F  s¡  € õ �d�KÑ(Ô(ð ØˆtØŒ;ð ØˆtðÝ�d×,Ò,¨T¬[Ñ9Ô9¸4Ñ@Ô@ˆˆøÝð ð ð Øˆtˆtðøøøå�&�%œ.Ñ)Ô)ð !Ø”ˆÝ�&�(Ñ#Ô#ð "Ø×ÒÐ 6Ñ7Ô7ð 	!Ø �=Ø×ÒÐ 7Ñ8Ô8ð 	"Ø!�>Ý�&�+Ñ&Ô&ð *ØÔ ð 	Ø�4àÔ*Ô0ð 
	*ð 
	*ˆIÝ˜)¥\Ô%6Ñ7Ô7ð *Ø”>Õ%8Ð8Ð8Ø$œ>Ð)Ð)Ð)å˜9¥lÔ&<Ñ=Ô=ð*å˜yœ~­|Ô/@ÑAÔAð*ð ”NÔ'¨:Ò5Ð5ØÔ&Õ*=Ð=Ð=à Ô)Ð)Ð)Ð)øØˆ4s   ¢(A Á
AÁAc                  ó  ‡ — e Zd ZU dZdZded<   dZded<   dZdZ e	¦   «         Z
	 d	ed
<   	 ded<   	 dAd„ZedBd„¦   «         ZdCˆ fd„ZdDd„ZdEd„ZdFd„ZdGd!„ZdHd#„Z	 dIdJd*„Z	 dKdLd1„ZdIdMd2„Zd3„ Zd$d4œdNd9„Z	 dIdOd;„Z	 dIdPd?„Zd@„ Zˆ xZS )QÚLambdazÀClass representing an :class:`ast.Lambda` node.

    >>> import astroid
    >>> node = astroid.extract_node('lambda arg: arg + 1')
    >>> node
    <Lambda.<lambda> l.1 at 0x7f23b2e41518>
    ©Úargsr‡   zClassVar[tuple[str, ...]]rE  rP  rH  z<lambda>Tr*   r‹  r,   r‡   r\   ú
Literal[0]c                ó   — dS )Nr   rG   r²   s    rJ   Úimplicit_parameterszLambda.implicit_parameters�  ó   € ØˆqrL   úLiteral['method', 'function']c                ó¾   — | j         j        rP| j         j        d         j        dk    r5| j        r.t	          | j                             ¦   «         t          ¦  «        rdS dS )zuWhether this is a method or function.

        :returns: 'method' if this is a method, 'function' otherwise.
        r   r¤   ÚmethodÚfunction)r‹  Ú	argumentsr’   rž   r|   Úscopero   r²   s    rJ   r~   zLambda.type„  s[   € ð Œ9Ôð 	  4¤9Ô#6°qÔ#9Ô#>À&Ò#HÐ#HØŒ{ð  �z¨$¬+×*;Ò*;Ñ*=Ô*=½xÑHÔHð  Ø�xØˆzrL   rs   r³   rŸ   rž   r    rü   r¡   c               ór   •— i | _         	 i | _        t          ¦   «                              |||||¬¦  «         d S rR  )r˜   Úinstance_attrsr¢   r£   rU  s         €rJ   r£   zLambda.__init__�  sQ   ø€ ð ˆŒØLà79ˆÔå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð 	
ð 	
rL   r]   c                ó"   — || _         || _        d S r¨   rŠ  )r¤   r‹  r‡   s      rJ   r©   zLambda.postinit¥  s   € ØˆŒ	ØˆŒ	ˆ	ˆ	rL   ú7Literal['builtins.instancemethod', 'builtins.function']c                ó   — d| j         v rdS dS ©rÄ   r’  zbuiltins.instancemethodzbuiltins.function©r~   r²   s    rJ   rÅ   zLambda.pytype©  ó   € ð
 �t”yÐ Ð Ø,Ð,Ø"Ð"rL   rš   c                ó   — d| j         v rdS dS ©rÇ   r’  ÚMethodÚFunctionrœ  r²   s    rJ   rÈ   zLambda.display_type²  ó   € ð �t”yÐ Ð Ø�8ØˆzrL   r[  c                ó   — dS )z¼Whether this node defines something that is callable.

        :returns: Whether this defines something that is callable
            For a :class:`Lambda` this is always ``True``.
        TrG   r²   s    rJ   ÚcallablezLambda.callable¼  r/  rL   ú	list[str]c                óP   — | j         j        rd„ | j         j        D ¦   «         }ng }|S )á  Get the names of each of the arguments, including that
        of the collections of variable-length arguments ("args", "kwargs",
        etc.), as well as positional-only and keyword-only arguments.

        :returns: The names of the arguments.
        :rtype: list(str)
        c                ó   — g | ]	}|j         ‘Œ
S rG   ©r’   ©rH   rN  s     rJ   rK   z#Lambda.argnames.<locals>.<listcomp>Í  ó   € Ð=Ð=Ð= #�S”XÐ=Ð=Ð=rL   ©r‹  r”  ©r¤   Únamess     rJ   ÚargnameszLambda.argnamesÄ  ó5   € ð Œ9Ôð 	Ø=Ð=¨¬Ô)<Ð=Ñ=Ô=ˆEˆEàˆEàˆrL   NÚcallerú SuccessfulInferenceResult | NonerR   rp   rÙ   c                ó6   — | j                              |¦  «        S )ú,Infer what the function returns when called.)r‡   r  )r¤   r±  rR   s      rJ   r|  zLambda.infer_call_resultÓ  s   € ð Œy�Š˜wÑ'Ô'Ð'rL   r   rw   r;   r’   r¼   ú%tuple[LocalsDictNodeNG, list[NodeNG]]c                ó  — | j         j        r|| j         j        v s| j         j        rA|| j         j        v r3| j        st	          | ¬¦  «        ‚| j                             ¦   «         }d}n| }|                     |||¦  «        S )aë  Lookup where the given names is assigned.

        :param node: The node to look for assignments up to.
            Any assignments after the given node are ignored.

        :param name: The name to find assignments for.

        :param offset: The line offset to filter statements up to.

        :returns: This scope node and the list of assignments associated to the
            given name according to the scope where it has been found (locals,
            globals or builtin).
        rì   r_   )r‹  ÚdefaultsÚkw_defaultsrž   r"   rÝ   rÀ   ©r¤   rw   r’   r¼   rÝ   s        rJ   rÁ   zLambda.scope_lookupÛ  s“   € ð  ŒIÔð 	 4¨4¬9Ô+=Ð#=Ð#=ØŒIÔ!ð $>Ø&*¨d¬iÔ.CÐ&CÐ&Cà”;ð 6Ý(°Ð5Ñ5Ô5Ð5Ø”K×%Ò%Ñ'Ô'ˆEð ˆFˆFð ˆEØ×"Ò" 4¨¨vÑ6Ô6Ð6rL   c                ó   — dS )z Determine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`Lambda` this is always ``True``.
        TrG   r-  s     rJ   r.  zLambda.bool_valueù  r/  rL   c              #  ó.   K  — | j         V — | j        V — d S r¨   rŠ  r²   s    rJ   r2  zLambda.get_children  s    è è € ØŒiˆˆˆØŒiˆˆˆˆˆrL   ræ   r¤   rD   rç   rè   c               ó   — | S r4  rG   rð   s     rJ   rÝ   zLambda.frame  r5  rL   úlist[NodeNG]c                óð   — |st          | ||¬¦  «        ‚g }|| j        v r| j        |         }|| j        v r-|                     | j                             |¦  «        ¦  «         |r|S t          | |¬¦  «        ‚©NrÊ   )rË   rÌ   ©r   r—  rÓ   rS   r%   ©r¤   r’   rR   Úfound_attrss       rJ   r¿   zLambda.getattr  ó–   € ð ð 	XÝ)°ÀÈwÐWÑWÔWÐWàˆØ�4Ô&Ð&Ð&ØÔ-¨dÔ3ˆKØ�4Ô*Ð*Ð*Ø×Ò˜tÔ6×=Ò=¸dÑCÔCÑDÔDÐDØð 	ØÐÝ%¨T¸TÐBÑBÔBÐBrL   r6  r   úGenerator[Lambda, None, None]c              +  ó   K  — | V — d S r¨   rG   r9  s      rJ   r:  zLambda._infer  r;  rL   c              #  óH   K  — | j                              ¦   «         E d{V —† dS )z3A Lambda node can contain a Yield node in the body.N)r‡   Ú_get_yield_nodes_skip_functionsr²   s    rJ   rÇ  z&Lambda._get_yield_nodes_skip_functions#  s2   è è € à”9×<Ò<Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>rL   )r\   rŒ  )r\   r�  )
rs   r³   rŸ   r³   rž   r,   r    rü   r¡   rü   )r‹  r*   r‡   r,   r\   r]   ©r\   r™  r>  ©r\   r[  ©r\   r¥  r¨   ©r±  r²  rR   rp   r\   rÙ   r=  )rw   r;   r’   rš   r¼   r³   r\   rµ  ra  rB  ©r’   rš   rR   rp   r\   r½  )rR   rp   r6  r   r\   rÄ  )rŽ   rC  rD  rŒ   rE  rF  rH  r’   Ú	is_lambdar'   rÓ   rŽ  r{   r~   r£   r©   rÅ   rÈ   r¤  r¯  r|  rÁ   r.  r2  rÝ   r¿   r:  rÇ  rI  rJ  s   @rJ   r‰  r‰  k  s  ø€ € € € € € ðð ð 2B€OÐAÐAÐAÑAØ5@ÐÐ@Ð@Ð@Ñ@Ø€DØ€IØ&˜™œÐØAà€O€O�OØ0à€L€L�LØ,ðð ð ð ð ðð ð ñ „Xðð
ð 
ð 
ð 
ð 
ð 
ð,ð ð ð ð#ð #ð #ð #ðð ð ð ðð ð ð ðð ð ð ð$ ,0ð(ð (ð (ð (ð (ð ;<ð7ð 7ð 7ð 7ð 7ð<ð ð ð ð ðð ð ð :>ð ð ð ð ð ð ð =AðCð Cð Cð Cð Cð  26ðð ð ð ð ð
?ð ?ð ?ð ?ð ?ð ?ð ?rL   r‰  c                  óÎ  ‡ — e Zd ZU dZdZdZdZded<   	 ded<   	 d	ed
<   	 dZ	 dZ		 dZ
	 dZ	 dZdZdZdZ e¦   «         Z	 dWˆ fd„Z	 	 	 	 dXddddœdYd#„ZedZd%„¦   «         Zd[d'„Zd\d(„Zd]d*„Zd^d,„Z	 d_d`d/„Zed\d0„¦   «         Zedad1„¦   «         Zed2„ ¦   «         Zdbd4„Zdcd6„Z	 d_ddd8„Z ded:„Z!d_dfd<„Z"ded=„Z#dgded?„Z$ded@„Z%	 d_dhdD„Z&d_didE„Z'	 d_djdH„Z(d_dkdI„Z)dJ„ Z*	 dldmdP„Z+ddQœdndV„Z,ˆ xZ-S )or}   zóClass representing an :class:`ast.FunctionDef`.

    >>> import astroid
    >>> node = astroid.extract_node('''
    ... def my_func(arg):
    ...     return arg + 1
    ... ''')
    >>> node
    <FunctionDef.my_func l.2 at 0x7f23b2e71e10>
    )r€  r‹  ÚreturnsÚtype_paramsr†   r‡   r1  Núnode_classes.Decorators | Noner€  rˆ   r†   r*   r‹  T)r’   Úposition)r˜   Ú_typeÚtype_comment_returnsÚtype_comment_argsz<functiondef>r’   rš   rs   r³   rŸ   rž   r,   r    rü   r¡   r\   r]   c               ó,  •— || _         	 i | _        	 g | _        	 g | _        	 i | _        t          ¦   «                              |||||¬¦  «         |rAt          |t          ¦  «        s.| 	                    ¦   «         }| 
                    || ¦  «         d S d S d S rR  )r’   r˜   r‡   rÐ  r—  r¢   r£   r|   r-   rÝ   Ú	set_local)	r¤   r’   rs   rŸ   rž   r    r¡   rÝ   r¥   s	           €rJ   r£   zFunctionDef.__init__o  sÄ   ø€ ð ˆŒ	Ø'àˆŒØLà"$ˆŒ	Ø0ð ð 	Ôð 	\à79ˆÔå‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð ð 	(�* V­WÑ5Ô5ð 	(Ø—L’L‘N”NˆEØ�OŠO˜D $Ñ'Ô'Ð'Ð'Ð'ð	(ð 	(ð 	(ð 	(rL   ©rÒ  r†   rÐ  r‡   r½  rÒ  úPosition | NonerÐ  úAlist[nodes.TypeVar | nodes.ParamSpec | nodes.TypeVarTuple] | Nonec               óˆ   — || _         || _        || _        || _        || _        || _        || _        || _        |	pg | _        dS )aÁ  Do some setup after initialisation.

        :param args: The arguments that the function takes.

        :param body: The contents of the function body.

        :param decorators: The decorators that are applied to this
            method or function.
        :params type_comment_returns:
            The return type annotation passed via a type comment.
        :params type_comment_args:
            The args type annotation passed via a type comment.
        :params position:
            Position of function keyword(s) and name.
        :param doc_node:
            The doc node associated with this node.
        :param type_params:
            The type_params associated with this node.
        N)	r‹  r‡   r€  rÏ  rÔ  rÕ  rÒ  r†   rÐ  )
r¤   r‹  r‡   r€  rÏ  rÔ  rÕ  rÒ  r†   rÐ  s
             rJ   r©   zFunctionDef.postinit”  sR   € ðD ˆŒ	ØˆŒ	Ø$ˆŒØˆŒØ$8ˆÔ!Ø!2ˆÔØ ˆŒØ ˆŒØ&Ð,¨"ˆÔÐÐrL   úlist[node_classes.Call]c                óH  — | j         r.t          | j                              ¦   «         x}t          ¦  «        sg S g }|j        D ]à}t          |j        t          j        ¦  «        r¿t          |j        j        t          j	        ¦  «        r›|j
        D ]“}t          |t          j        ¦  «        sŒ|j        | j        k    rŒ.	 || j                 }t          |t          ¦  «        r2|                     ¦   «         |k    r|                     |j        ¦  «         Œ„# t          $ r Y Œ�w xY wŒá|S )a  The extra decorators that this function can have.

        Additional decorators are considered when they are used as
        assignments, as in ``method = staticmethod(method)``.
        The property will return all the callables that are used for
        decoration.
        )rž   r|   rÝ   ro   Ú_assign_nodes_in_scoper  r0   ÚCallÚfuncr�  ÚtargetsÚ
AssignNamer’   r}   rS   r  )r¤   rÝ   r€  ÚassignÚassign_nodeÚmeths         rJ   Úextra_decoratorszFunctionDef.extra_decoratorsÀ  sC  € ð Œ{ð 	¥*°d´k×6GÒ6GÑ6IÔ6IÐ-I¨UÍ8Ñ"TÔ"Tð 	ØˆIà.0ˆ
ØÔ2ð 	<ð 	<ˆFÝ˜&œ,­Ô(9Ñ:Ô:ð <½zØ”Ô!¥<Ô#4ñ@ô @ð <ð $*¤>ð <ð <�KÝ% kµ<Ô3JÑKÔKð !à à"Ô'¨4¬9Ò4Ð4ð !ð<Ø$ T¤YÔ/˜õ ' t­[Ñ9Ô9ð<à +× 1Ò 1Ñ 3Ô 3°uÒ <Ð <à&×-Ò-¨f¬lÑ;Ô;Ð;øøõ $ð !ð !ð !Ø ˜ð!øøøøð Ðs   Â<DÄ
DÄDr™  c                ó   — d| j         v rdS dS r›  rœ  r²   s    rJ   rÅ   zFunctionDef.pytypeè  r�  rL   c                ó   — d| j         v rdS dS rŸ  rœ  r²   s    rJ   rÈ   zFunctionDef.display_typeñ  r¢  rL   r[  c                ó   — dS ©NTrG   r²   s    rJ   r¤  zFunctionDef.callableû  s   € ØˆtrL   r¥  c                óP   — | j         j        rd„ | j         j        D ¦   «         }ng }|S )r§  c                ó   — g | ]	}|j         ‘Œ
S rG   r©  rª  s     rJ   rK   z(FunctionDef.argnames.<locals>.<listcomp>  r«  rL   r¬  r­  s     rJ   r¯  zFunctionDef.argnamesþ  r°  rL   rR   rp   c                óð   — |st          | ||¬¦  «        ‚g }|| j        v r| j        |         }|| j        v r-|                     | j                             |¦  «        ¦  «         |r|S t          | |¬¦  «        ‚r¿  rÀ  rÁ  s       rJ   r¿   zFunctionDef.getattr  rÃ  rL   c                óÜ  — | j         D ]#}|j        j        t          v r|j        j        c S Œ$| j        st          | ¬¦  «        ‚| j                             ¦   «         }d}t          |t          ¦  «        r)| j        dk    rdS | j        dk    rdS | j        dk    rdS d}| j	        s|S | j	        j
        D �]¹}t          |t          j        ¦  «        r|j        t          v r	|j        c S t          |t          j        ¦  «        rFt          |j        t          j        ¦  «        r'|j        j        dk    r|j        t          v r	|j        c S t          |t          j        ¦  «        rT	 t#          |j                             ¦   «         ¦  «        }n# t&          t(          f$ r Y Œéw xY wt+          |¦  «        }|�|c S 	 |                     ¦   «         D ]�}t+          |¦  «        }|�|c c S t          |t          ¦  «        sŒ/|                     ¦   «         D ]L}t          |t          ¦  «        sŒ|                     d
¦  «        r   dS |                     d¦  «        r   dS ŒMŒ‘�Œª# t&          $ r Y �Œ·w xY w|S )ztThe function type for this node.

        Possible values are: method, function, staticmethod, classmethod.
        rì   r“  Ú__new__r@   Ú__init_subclass__Ú__class_getitem__r’  r{  NrB   rC   rA   )ræ  rà  r’   r‚  rž   r"   rÝ   r|   ro   r€  r9   r0   r�  rƒ  r„  r…  rß  r  r  r    r  r‡  Ú	ancestorsr  )	r¤   r†  rÝ   Ú	type_namerw   ÚcurrentrÓ  r&  Úancestors	            rJ   r~   zFunctionDef.type  sá  € ð Ô.ð 	+ð 	+ˆIØŒ~Ô"Õ&9Ð9Ð9Ø ”~Ô*Ð*Ð*Ð*ð :ð Œ{ð 	2Ý$¨DÐ1Ñ1Ô1Ð1à”×!Ò!Ñ#Ô#ˆØˆ	Ý�e�XÑ&Ô&ð 	!ØŒy˜IÒ%Ð%Ø$�}ØŒyÐ/Ò/Ð/Ø$�}ØŒyÐ/Ò/Ð/Ø$�}à ˆIàŒð 	ØÐà”OÔ)ð *	ñ *	ˆDÝ˜$¥Ô 1Ñ2Ô2ð %Ø”9Õ 3Ð3Ð3Øœ9Ð$Ð$Ð$å˜4¥Ô!7Ñ8Ô8ð%å˜tœy­,Ô*;Ñ<Ô<ð%ð ”I”N jÒ0Ð0Ø”MÕ%8Ð8Ð8à”}Ð$Ð$Ð$å˜$¥Ô 1Ñ2Ô2ð !ð
Ý" 4¤9§?¢?Ñ#4Ô#4Ñ5Ô5�G�GøÝ&­Ð6ð ð ð Ø�Hðøøøå2°7Ñ;Ô;�ØÐ$Ø �L�L�LðØ $§
¢
¡¤ð 2ð 2�Hå6°xÑ@Ô@�EØÐ(Ø$˜˜˜˜˜å% hµÑ9Ô9ð !Ø Ø$,×$6Ò$6Ñ$8Ô$8ð 2ð 2˜Ý)¨(µHÑ=Ô=ð %Ø$Ø#×1Ò1Ð2HÑIÔIð 1Ø#0 = = = =Ø#×1Ò1Ð2IÑJÔJð 2Ø#1 > > > >ð2ð2ñ2øõ "ð ð ð Ø‘ðøøøàÐs7   Å &FÆFÆFÆ4*IÇ!AIÈ=IÉIÉ
I)É(I)c                óv   — | j         pd}| j        �&|t          d„ | j        j        D ¦   «         ¦  «        z  }|pdS )úƒThe first line that this node appears on in the source code.

        Can also return 0 if the line can not be determined.
        r   Nc              3  ó>   K  — | ]}|j         |j        pd z
  dz   V — ŒdS ©r   rM   N©r¸   rs   ©rH   rw   s     rJ   rf   z)FunctionDef.fromlineno.<locals>.<genexpr>o  sF   è è € ð ð Ø;?�” ¤Ð!1°Ñ2°QÑ6ðð ð ð ð ð rL   )rs   r€  Úsumr9   r¹   s     rJ   r·   zFunctionDef.fromlinenoe  s[   € ð ”Ð! ˆØŒ?Ð&Ø•cð ð ØCGÄ?ÔCXðñ ô ñ ô ñ ˆFð ˆ{˜ÐrL   c                ó   — | j         j        S )úPThe line on which the beginning of this block ends.

        :type: int
        )r‹  r¸   r²   s    rJ   Úblockstart_tolinenozFunctionDef.blockstart_tolinenou  s   € ð ŒyÔ!Ð!rL   úLiteral[0, 1]c                ó2   — |                       ¦   «         rdndS )NrM   r   )Úis_boundr²   s    rJ   rŽ  zFunctionDef.implicit_parameters}  s   € Ø—M’M‘O”OÐ*ˆqˆq¨Ð*rL   r´   c                ó   — | j         | j        fS ©z°Get a range from the given line number to where this node ends.

        :param lineno: Unused.

        :returns: The range of line numbers that this node belongs to,
        r¶   r¹   s     rJ   rº   zFunctionDef.block_range€  r»   rL   rÙ   c                óÀ   — 	 t          j        |                      ||¦  «        || ¬¦  «        S # t          $ r&}t	          t          |¦  «        | ||¬¦  «        |‚d}~ww xY w)zCInferred getattr, which returns an iterator of inferred statements.rÜ   rÊ   N)r   rß   r¿   r   r    rš   rà   s       rJ   râ   zFunctionDef.igetattr‰  sv   € ð	ÝÔ% d§l¢l°4¸Ñ&AÔ&AÀ7ÐRVÐWÑWÔWÐWøÝ&ð 	ð 	ð 	Ý Ý�E‘
”
 4°4Àðñ ô àðøøøøð	øøøs   ‚*- ­
A·!AÁArœ   c                ó‚   — | j         dk    o4| j        duo+t          | j                             ¦   «         t          ¦  «        S )zfCheck if this function node represents a method.

        :returns: Whether this is a method.
        r“  N)r~   rž   r|   rÝ   ro   r²   s    rJ   Ú	is_methodzFunctionDef.is_method”  sB   € ð ŒI˜Ò#ð :Ø” 4Ð'ð:å˜4œ;×,Ò,Ñ.Ô.µÑ9Ô9ð	
rL   úset[str]c                ó  — t          ¦   «         }g }| j        �|| j        j        z  }|| j        z  }|D ]S}	 |                     |¬¦  «        D ])}|                     |                     ¦   «         ¦  «         Œ*ŒD# t          $ r Y ŒPw xY w|S )zßGet the qualified names of each of the decorators on this function.

        :param context:
            An inference context that can be passed to inference functions
        :returns: The names of the decorators.
        N©rR   )rr   r€  r9   ræ  r  rt   rc   r    )r¤   rR   rU   ÚdecoratornodesÚdecnodeÚinfnodes         rJ   ÚdecoratornameszFunctionDef.decoratornames¡  s®   € õ ‘”ˆØˆØŒ?Ð&Ø˜dœoÔ3Ñ3ˆNØ˜$Ô/Ñ/ˆØ%ð 	ð 	ˆGðØ&Ÿ}š}°W˜}Ñ=Ô=ð 0ð 0�GØ—J’J˜wŸ}š}™œÑ/Ô/Ð/Ð/ð0øå!ð ð ð Ø�ðøøøàˆs   ¶A A7Á7
BÂBc                ó   — | j         dv S )zŠCheck if the function is bound to an instance or class.

        :returns: Whether the function is bound to an instance or class.
        >   r’  r@   rœ  r²   s    rJ   r  zFunctionDef.is_boundµ  s   € ð
 ŒyÐ5Ð5Ð5rL   Fc                óž  — | j         rd| j         j        D ]W}	 t          |                     ¦   «         ¦  «        }n# t          t
          f$ r Y Œ8w xY w|r|                     ¦   «         dv r dS ŒX| j        D ]U}t          |t          j
        ¦  «        r|r dS |                     ¦   «         r dS |ot          |t          j        ¦  «        c S |rdS dS )aÎ  Check if the method is abstract.

        A method is considered abstract if any of the following is true:
        * The only statement is 'raise NotImplementedError'
        * The only statement is 'raise <SomeException>' and any_raise_is_abstract is True
        * The only statement is 'pass' and pass_is_abstract is True
        * The method is annotated with abc.astractproperty/abc.abstractmethod

        :returns: Whether the method is abstract.
        >   úabc.abstractmethodúabc.abstractpropertyTF)r€  r9   r  r  r    r  rc   r‡   r|   r0   ÚRaiseÚraises_not_implementedÚPass)r¤   Úpass_is_abstractÚany_raise_is_abstractrw   r&  Ú
child_nodes         rJ   Úis_abstractzFunctionDef.is_abstract¼  s  € ð Œ?ð 
	 ØœÔ-ð 	 ð 	 �ðÝ# D§J¢J¡L¤LÑ1Ô1�H�HøÝ&­Ð6ð ð ð Ø�Hðøøøàð   §¢Ñ 0Ô 0ð 5ð !ð !ð  ˜4˜4øàœ)ð 	Rð 	RˆJÝ˜*¥lÔ&8Ñ9Ô9ð  Ø(ð  Ø˜4˜4Ø×4Ò4Ñ6Ô6ð  Ø˜4˜4Ø#ÐQ­
°:½|Ô?PÑ(QÔ(QÐQÐQÐQàð 	Ø�4àˆus   —!9¹AÁAc                óª   — t          |                      ¦   «         ¦  «        }t          |                      ¦   «         ¦  «        }t          ||z  ¦  «        S )zhCheck if this is a generator function.

        :returns: Whether this is a generator function.
        )rr   Ú_get_yield_nodes_skip_lambdasrÇ  rœ   )r¤   Úyields_without_lambdasÚyields_without_functionss      rJ   Úis_generatorzFunctionDef.is_generatorà  sM   € õ
 "% T×%GÒ%GÑ%IÔ%IÑ!JÔ!JÐÝ#& t×'KÒ'KÑ'MÔ'MÑ#NÔ#NÐ åÐ*Ð-EÑEÑFÔFÐFrL   r6  r   úCGenerator[objects.Property | FunctionDef, None, InferenceErrorInfo]c              +  ó„  ‡K  — ddl mŠ | j        rt          j        | ¦  «        s| V — t          | |¬¦  «        S | j        st          | ¬¦  «        ‚| j                             ¦   «         }| j	        |j
        v o*t          ˆfd„|j
        | j	                 D ¦   «         ¦  «        }t          | j        t          j        t          j        f¦  «        rd} ‰j        | | j	        | j        |s| j        nd | j        ¬¦  «        }|r| j        |_        |                     g | j        | j        ¬¦  «         |V — t          | |¬¦  «        S )	Nr   ©r:   ©rw   rR   rì   c              3  óB   •K  — | ]}t          |‰j        ¦  «        V — Œd S r¨   )r|   ÚProperty)rH   Úvalr:   s     €rJ   rf   z%FunctionDef._infer.<locals>.<genexpr>û  sI   øè è € ð U
ð U
Ø25�J�s˜GÔ,Ñ-Ô-ðU
ð U
ð U
ð U
ð U
ð U
rL   T)r“  r’   rs   rž   rŸ   )r‡   r‹  r†   )Úastroidr:   r€  r   Ú_is_propertyr6   rž   r"   rÝ   r’   r˜   rh   r|   r0   ÚTryÚIfr$  rs   rŸ   r©   r‹  r†   )r¤   rR   r6  Úparent_frameÚ!property_already_in_parent_localsÚ	prop_funcr:   s         @rJ   r:  zFunctionDef._inferê  s–  øè è € ð 	$Ð#Ð#Ð#Ð#Ð#àŒð 	B¥eÔ&8¸Ñ&>Ô&>ð 	BØˆJˆJˆJÝ%¨4¸ÐAÑAÔAÐAð Œ{ð 	2Ý$¨DÐ1Ñ1Ô1Ð1Ø”{×(Ò(Ñ*Ô*ˆØ,0¬I¸Ô9LÐ,Lð -
ÕQTð U
ð U
ð U
ð U
Ø9EÔ9LÈTÌYÔ9WðU
ñ U
ô U
ñ R
ô R
Ð)õ ØŒKÝÔ�|œÐ/ñ
ô 
ð 	5ð 15Ð-à$�GÔ$ØØ”Ø”;Ø&GÐQ�4”;�;ÈTØ”ð
ñ 
ô 
ˆ	ð -ð 	+Ø#œ{ˆIÔØ×Ò ¨¬¸T¼]ÐÑKÔKÐKØˆˆˆÝ! t°WÐ=Ñ=Ô=Ð=rL   c              #  ó&  K  — |                       t          j        ¦  «        D ]n}|j        €,t          j        d¦  «        }||_        |j        |_        |V — Œ5|                     ¦   «         | k    r!|j                             |¬¦  «        E d{V —† ŒodS )z—Infer what the function yields when called

        :returns: What the function yields
        :rtype: iterable(NodeNG or Uninferable) or None
        Nr
  )	Únodes_of_classr0   ÚYieldr  r+   rž   rs   r•  r  )r¤   rR   Úyield_Úconsts       rJ   Úinfer_yield_resultzFunctionDef.infer_yield_result  s¤   è è € ð ×)Ò)­,Ô*<Ñ=Ô=ð 	?ð 	?ˆFØŒ|Ð#Ý$Ô*¨4Ñ0Ô0�Ø%�”Ø%œ}�”Ø����Ø—’‘” 4Ò'Ð'Ø!œ<×-Ò-°gÐ-Ñ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øð	?ð 	?rL   r±  r²  c              #  ó  ‡K  — |                       ¦   «         rAt          | t          ¦  «        rt          j        }nt          j        } || ‰¬¦  «        }|V — dS | j        dk    �r¬|��©| j        j        �rœt          | j        j        ¦  «        dk    �r~| j        j	        ��qt          |j        t          ¦  «        rB|j        j        €J ‚t          |j        j        d                              ‰¦  «        d¦  «        }nmt          |j        t          ¦  «        r/t          |j        d                              ‰¦  «        d¦  «        }n$t          dt          |j        ¦  «        › �¦  «        ‚t          |t           ¦  «        r“	 ˆfd„|j        dd…         D ¦   «         }n1# t"          $ r$}t%          |j        dd…         ‰¬¦  «        |‚d}~ww xY wt!          d	dddd| ¬
¦  «        }d|_        |                     d„ |D ¦   «         g d|¬¦  «         |V — dS |                      ¦   «         }	t          |	d¦  «        }
|
sT| j        r>|                      dd¬¦  «        rt0          j        V — nt5          j        d¦  «        V — dS t%          d¦  «        ‚t9          j        |
f|	¦  «        D ]_}|j        €t5          j        d¦  «        V — Œ 	 |j                             ‰¦  «        E d{V —† ŒB# t$          $ r t0          j        V — Y Œ\w xY wdS )r´  )Úgenerator_initial_contextNÚwith_metaclassrM   r   z0caller.args was neither Arguments nor list; got c           	     ó–   •— g | ]E}t          d „ |                     ‰r‰                     ¦   «         n‰¬¦  «        D ¦   «         ¦  «        ‘ŒFS )c              3  óR   K  — | ]"}t          |t          ¦  «        r|j        ®|V — Œ#d S r¨   ©r|   r+   r  ©rH   Úbs     rJ   rf   z;FunctionDef.infer_call_result.<locals>.<listcomp>.<genexpr>K  sK   è è € ð ð à !õ %/¨qµ%Ñ$8Ô$8ðð
 >?¼W¸_ð	 ð >M¸_¸_¸_ðð rL   r
  )r  r  Úclone)rH   ÚargrR   s     €rJ   rK   z1FunctionDef.infer_call_result.<locals>.<listcomp>I  sx   ø€ ð 
#ð 
#ð 
#ð  õ ð ð à%(§Y¢YØ;BÐ(O¨¯ª©¬¨Èð &/ñ &ô &ðñ ô ñ ô ð
#ð 
#ð 
#rL   r"  Útemporary_class)r’   rs   rŸ   r    r¡   rž   Tc                óF   — g | ]}t          |t          j        ¦  «        °|‘ŒS rG   ©r|   r   ÚUninferableBaserd   s     rJ   rK   z1FunctionDef.infer_call_result.<locals>.<listcomp>`  s;   € ð ð ð à Ý)¨$µÔ0DÑEÔEðØðð ð rL   )r   r‡   r€  Ú	metaclass)r  r  z0The function does not have any return statements)r  r|   ÚAsyncFunctionDefr   ÚAsyncGeneratorr   r’   r‹  ÚlenÚvarargr*   r  r  ÚlistÚ	TypeErrorr~   ro   r  r    Úhider©   Ú _get_return_nodes_skip_functionsr‡   r  r   rk  r0   r+   Ú	itertoolsÚchainr  )r¤   r±  rR   Úgenerator_clsrU   rA  Úclass_basesÚeÚ	new_classrÏ  Úfirst_returnÚ
returnnodes     `         rJ   r|  zFunctionDef.infer_call_result#  s¤  øè è € ð ×ÒÑÔð 	Ý˜$Õ 0Ñ1Ô1ð 0Ý7<Ô7K��å %¤�Ø"�] 4À7ÐKÑKÔKˆFØˆLˆLˆLØˆFð ŒIÐ)Ò)Ñ)ØÑ"Ø”	”ñ #å�D”I”NÑ#Ô# qÒ(Ñ(Ø”	Ô Ñ,å˜&œ+¥yÑ1Ô1ð Ø”{Ô'Ð3Ð3Ð3Ý  ¤Ô!1°!Ô!4×!:Ò!:¸7Ñ!CÔ!CÀTÑJÔJ�	�	Ý˜FœK­Ñ.Ô.ð Ý  ¤¨Q¤×!5Ò!5°gÑ!>Ô!>ÀÑEÔE�	�	åØZÅtÈFÌKÑGXÔGXÐZÐZñô ð õ ˜)¥XÑ.Ô.ð #ðWð
#ð 
#ð 
#ð 
#ð $*¤;¨q¨r¨r¤?ð
#ñ 
#ô 
#�K�Køõ %ð Wð Wð WÝ(¨f¬k¸!¸"¸"¬oÀwÐOÑOÔOÐUVÐVøøøøðWøøøå$Ø*ØØ Ø Ø#$Øðñ ô �	ð "&�	”Ø×"Ò"ðð à$/ðñ ô ð
 Ø#Ø'ð #ñ 	ô 	ð 	ð  ���Ø�Ø×7Ò7Ñ9Ô9ˆå˜G TÑ*Ô*ˆØð 	UØŒyð Ø×#Ò#°TÐQUÐ#ÑVÔVð 3ÝÔ*Ð*Ð*Ð*Ð*å&Ô,¨TÑ2Ô2Ð2Ð2Ð2Ø�å Ð!SÑTÔTÐTå#œ/¨<¨/¸7ÑCÔCð 	+ð 	+ˆJØÔÐ'Ý"Ô(¨Ñ.Ô.Ð.Ð.Ð.Ð.ð+Ø)Ô/×5Ò5°gÑ>Ô>Ð>Ð>Ð>Ð>Ð>Ð>Ð>Ð>øÝ%ð +ð +ð +ÝÔ*Ð*Ð*Ð*Ð*Ð*ð+øøøð	+ð 	+s*   Å?F Æ
G	Æ%GÇG	Ë K#Ë#K>Ë=K>c                ó   — dS )z¥Determine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`FunctionDef` this is always ``True``.
        TrG   r-  s     rJ   r.  zFunctionDef.bool_value�  r/  rL   c              #  ó�   K  — | j         �	| j         V — | j        V — | j        �	| j        V — | j        E d {V —† | j        E d {V —† d S r¨   )r€  r‹  rÏ  rÐ  r‡   r²   s    rJ   r2  zFunctionDef.get_children‰  sx   è è € ØŒ?Ð&Ø”/Ð!Ð!Ð!àŒiˆˆˆàŒ<Ð#Ø”,ÐÐÐØÔ#Ð#Ð#Ð#Ð#Ð#Ð#Ð#à”9ÐÐÐÐÐÐÐÐÐrL   r   rw   r;   r¼   ú+tuple[LocalsDictNodeNG, list[nodes.NodeNG]]c                ó‚  — |dk    r:| j         r3t          | j                              ¦   «         x}t          ¦  «        r| |gfS | j        j        r|| j        j        v s| j        j        rA|| j        j        v r3| j         st          | ¬¦  «        ‚| j                              ¦   «         }d}n| }|                     |||¦  «        S )z(Lookup where the given name is assigned.r¥   rì   r_   )	rž   r|   rÝ   ro   r‹  r·  r¸  r"   rÀ   r¹  s        rJ   rÁ   zFunctionDef.scope_lookup•  sÚ   € ð �;ÒÐð
 Œ{ð %�z°4´;×3DÒ3DÑ3FÔ3FÐ*F¨%ÍÑQÔQð %Ø˜e˜W�}Ð$àŒIÔð 	 4¨4¬9Ô+=Ð#=Ð#=ØŒIÔ!ð $>Ø&*¨d¬iÔ.CÐ&CÐ&Cà”;ð 6Ý(°Ð5Ñ5Ô5Ð5Ø”K×%Ò%Ñ'Ô'ˆEð ˆFˆFð ˆEØ×"Ò" 4¨¨vÑ6Ô6Ð6rL   ræ   r¤   rD   rç   rè   c               ó   — | S r4  rG   rð   s     rJ   rÝ   zFunctionDef.frame¯  r5  rL   ©r’   rš   rs   r³   rŸ   r³   rž   r,   r    rü   r¡   rü   r\   r]   )NNNN)r‹  r*   r‡   r½  r€  rÑ  rÒ  rÙ  r†   rˆ   rÐ  rÚ  )r\   rÜ  rÈ  r>  rÉ  rÊ  r¨   rÌ  ©r\   r³   )r\   r   r<  r@  r  )rR   rp   r\   r  )TF)rR   rp   r6  r   r\   r  r?  rË  rA  r=  ©rw   r;   r’   rš   r¼   r³   r\   rT  rB  ).rŽ   rC  rD  rŒ   rE  Ú_multi_line_block_fieldsrÏ  rF  Úis_functionÚtype_annotationrÕ  rÔ  rG  rH  rÓ  r’   r'   rÓ   r£   r©   r   ræ  rÅ   rÈ   r¤  r¯  r¿   r~   r·   rÿ  rŽ  rº   râ   r  r  r  r  r  r:  r2  r|  r.  r2  rÁ   rÝ   rI  rJ  s   @rJ   r}   r}   (  s‘  ø€ € € € € € ð	ð 	ð€Oð  )ÐØ€Gà.Ð.Ð.Ñ.ØEàÐÐÑØ1à€O€O�OØ0à€Kðð €Oðð Ððð  ÐØ\à(€MðÐð €Eà€Dà&˜™œÐØAð#(ð #(ð #(ð #(ð #(ð #(ðR 6:ØØ!Øð*-ð %)Ø!%ð ð*-ð *-ð *-ð *-ð *-ð *-ðX ð%ð %ð %ñ „_ð%ðN#ð #ð #ð #ðð ð ð ðð ð ð ðð ð ð ð  =AðCð Cð Cð Cð Cð ðFð Fð Fñ „_ðFðP ðð ð ñ „_ðð ð"ð "ñ „_ð"ð+ð +ð +ð +ð.ð .ð .ð .ð =Að	ð 	ð 	ð 	ð 	ð
ð 
ð 
ð 
ðð ð ð ð ð(6ð 6ð 6ð 6ð"ð "ð "ð "ð "ðHGð Gð Gð Gð 26ð&>ð &>ð &>ð &>ð &>ðP?ð ?ð ?ð ?ð ?ð( ,0ð\+ð \+ð \+ð \+ð \+ð|ð ð ð ð ð
ð 
ð 
ð ;<ð7ð 7ð 7ð 7ð 7ð4 :>ð ð ð ð ð ð ð ð ð ð rL   r}   c                  ó   — e Zd ZdZdS )rB  a¶  Class representing an :class:`ast.FunctionDef` node.

    A :class:`AsyncFunctionDef` is an asynchronous function
    created with the `async` keyword.

    >>> import astroid
    >>> node = astroid.extract_node('''
    async def func(things):
        async for thing in things:
            print(thing)
    ''')
    >>> node
    <AsyncFunctionDef.func l.2 at 0x7f23b2e416d8>
    >>> node.body[0]
    <AsyncFor l.3 at 0x7f23b2e417b8>
    N)rŽ   rC  rD  rŒ   rG   rL   rJ   rB  rB  º  s   € € € € € ðð ð ð rL   rB  rœ   c                óÀ  — | j         dk    rdS |€t          ¦   «         }| j        D ]¸}	 |                     |¬¦  «        D ]Ž}|                     ¦   «         }||v rŒ|                     |¦  «         t          |t          j        ¦  «        r  dS || u rŒSt          |t          ¦  «        sŒi|j	        dk    r  dS t          |||¬¦  «        r  dS Œ�Œ©# t          $ r Y Œµw xY wdS )z>Return if the given class can be
    used as a metaclass.
    r~   TNr
  FrA  )r’   rr   r   r  rc   rt   r|   r}  ro   rÓ  Ú_is_metaclassr    )r‚   rv   rR   re   ÚbaseobjÚbaseobj_names         rJ   r_  r_  Í  s+  € ð „z�VÒÐØˆtØ€|Ý‰uŒuˆØ”ð ð ˆð	ØŸ:š:¨g˜:Ñ6Ô6ð  ð  �Ø&Ÿ}š}™œ�Ø 4Ð'Ð'Øà—’˜Ñ&Ô&Ð&Ý˜g¥u¤~Ñ6Ô6ð !à ˜5˜5˜5Ø˜eÐ#Ð#ØÝ! '­8Ñ4Ô4ð ØØ”= KÒ/Ð/Ø˜4˜4˜4Ý  ¨$¸Ð@Ñ@Ô@ð  Ø˜4˜4˜4ð ð øõ" ð 	ð 	ð 	ØˆHð	øøøàˆ5s$   ¨A!CÂ'CÂ6CÃCÃ
CÃCc                óð  — | j         �| j         S t          | |¬¦  «        rd| _         n»| j                             d¦  «        rd| _         n™|€t	          ¦   «         }|                      ¦   «         }||v r	d| _         dS |                     |¦  «         |                      d¬¦  «        D ]<}t          ||¦  «        }|dk    r$|dk    rt          | ¦  «        sŒ.|j	        | _          nŒ=| j         €d| _         | j         S )	z]return a ClassDef node type to differ metaclass and exception
    from 'regular' classes
    Nr
  rA  r>   Ú	exceptionÚclassF)Úrecurs)
rÓ  r_  r’   rä   rr   rc   rt   rò  Ú_class_typer~   )r‚   rò  rR   Ú
klass_namere   r’   s         rJ   rf  rf  í  s  € ð
 „{ÐØŒ{ÐÝ�U GÐ,Ñ,Ô,ð Ø!ˆŒˆØ	Œ×	Ò	˜[Ñ	)Ô	)ð Ø!ˆŒˆàÐÝ™œˆIØ—[’[‘]”]ˆ
Ø˜Ð"Ð"à!ˆEŒKØ�7Ø�Š�jÑ!Ô!Ð!Ø—O’O¨5�OÑ1Ô1ð 	ð 	ˆDÝ˜t YÑ/Ô/ˆDØ�wŠˆØ˜;Ò&Ð&­}¸UÑ/CÔ/CÐ&ð Ø"œi�”Ø�ð ð „{ÐØˆŒØŒ;ÐrL   c                óÐ   — |                       ¦   «         }|�Ot          |t          ¦  «        s:|j        €d}n|j                              ¦   «         }|�t          |t          ¦  «        ¯:|S )zØGet the class that wraps the given node.

    We consider that a class wraps a node if the class
    is a parent for the said node.

    :returns: The class that wraps the given node
    :rtype: ClassDef or None
    N)rÝ   r|   ro   rž   )rw   r‚   s     rJ   Úget_wrapping_classri    sf   € ð �JŠJ‰LŒL€EØ
Ð
¥J¨uµhÑ$?Ô$?Ð
ØŒ<ÐØˆEˆEà”L×&Ò&Ñ(Ô(ˆEð	 Ð
¥J¨uµhÑ$?Ô$?Ð
ð
 €LrL   c                  óî  ‡ — e Zd ZU dZdZdZ	  e¦   «         Z	 dZdZ	de
d<   dZdZ eed¬¦  «        Zd	Zd
ZdZde
d<   d~ˆ fd„Zej        Zde
d<   dd„Zd„ Z	 	 	 d€ddddœd�d0„Zd‚dƒd3„ZdZ eed4¬¦  «        Zed„ˆ fd5„¦   «         Zed6„ ¦   «         Zd…d8„Zd†d:„Z d‡d;„Z!dˆd=„Z"d‚d‰d>„Z#d?„ Z$	 d‚dŠdC„Z%	 d‹dŒdI„Z&edJ„ ¦   «         Z'	 d�dŽdN„Z(d‚dƒdO„Z)d‚dƒdP„Z*dˆdQ„Z+d‚dƒdR„Z,d‚dƒdS„Z-d�dU„Z.	 	 d�d‘dX„Z/ e0dY¬Z¦  «        d[„ ¦   «         Z1d\„ Z2	 	 d�d’d]„Z3d‚d‰d^„Z4d‚dƒd_„Z5d`„ Z6da„ Z7db„ Z8	 d‚d“dc„Z9	 d”d•df„Z:	 d‚d“dg„Z;dh„ Z<di„ Z=dj„ Z>edk„ ¦   «         Z?dl„ Z@d‚dƒdm„ZAd‚dƒdn„ZBd‚d–dp„ZCd‚d—dr„ZDds„ ZEedt„ ¦   «         ZFdduœd˜dz„ZG	 d‚d™d}„ZHˆ xZIS )šro   a  Class representing an :class:`ast.ClassDef` node.

    >>> import astroid
    >>> node = astroid.extract_node('''
    class Thing:
        def my_meth(self, arg):
            return arg + self.offset
    ''')
    >>> node
    <ClassDef.Thing l.2 at 0x7f23b2e9e748>
    )r€  r   Úkeywordsr†   r‡   rÐ  NúNodeNG | NoneÚ
_metaclassFz\The class type for this node.

Possible values are: class, metaclass, exception.

:type: str)Údoc)r’   Úis_dataclassrÒ  )r˜   Ú	_newstyleúbool | Nonerp  r’   rš   rs   r³   rŸ   rž   r,   r    rü   r¡   r\   r]   c               óÐ  •— i | _         i | _        	 g | _        	 g | _        	 g | _        	 || _        	 d | _        	 d | _        	 d| _        	 g | _	        	 t          ¦   «                              |||||¬¦  «         |r=t          |t          ¦  «        s(|                     ¦   «                              || ¦  «         |                      ¦   «         D ]\  }}|                      ||¦  «         Œd S )NFrS  )r—  r˜   rk  r   r‡   r’   r€  r†   ro  rÐ  r¢   r£   r|   r-   rÝ   r×  Úimplicit_localsÚadd_local_node)
r¤   r’   rs   rŸ   rž   r    r¡   Ú
local_namerw   r¥   s
            €rJ   r£   zClassDef.__init__Y  s!  ø€ ð 24ˆÔØˆŒØLà46ˆŒð	ð
 79ˆŒ
Ø+à"$ˆŒ	Ø-àˆŒ	Ø$àˆŒØ<à&*ˆŒØ5à"'ˆÔØ0ð ð 	Ôð 	Må‰Œ×ÒØØ!Ø!Ø)Øð 	ñ 	
ô 	
ð 	
ð ð 	1�* V­WÑ5Ô5ð 	1Ø�LŠL‰NŒN×$Ò$ T¨4Ñ0Ô0Ð0à $× 4Ò 4Ñ 6Ô 6ð 	2ð 	2ÑˆJ˜Ø×Ò  jÑ1Ô1Ð1Ð1ð	2ð 	2rL   z!ClassVar[InferBinaryOp[ClassDef]]Úinfer_binary_opú
Literal[1]c                ó   — dS )NrM   rG   r²   s    rJ   rŽ  zClassDef.implicit_parameters•  r�  rL   c                óH   — d| j         j        ff}|d| j         j        ffz  }|S )z±Get implicitly defined class definition locals.

        :returns: the the name and Const pair for each local
        :rtype: tuple(tuple(str, node_classes.Const), ...)
        rC  rD  )rÓ   Úattr___module__Úattr___qualname__)r¤   Úlocals_s     rJ   rs  zClassDef.implicit_locals˜  s4   € ð ! $Ô"9Ô"IÐJÐLˆà�^ TÔ%<Ô%NÐOÐQÑQˆØˆrL   rØ  r   úlist[SuccessfulInferenceResult]r‡   r½  r€  rÑ  ÚnewstylerA  rk  ú!list[node_classes.Keyword] | NonerÒ  rÙ  r†   rˆ   rÐ  rÚ  c               óŒ   — |�|| _         || _        || _        || _        || _        || _        || _        || _        |	pg | _        d S r¨   )	rk  r   r‡   r€  rp  rm  rÒ  r†   rÐ  )
r¤   r   r‡   r€  r~  rA  rk  rÒ  r†   rÐ  s
             rJ   r©   zClassDef.postinit¤  sU   € ð ÐØ$ˆDŒMØˆŒ
ØˆŒ	Ø$ˆŒØ!ˆŒØ#ˆŒØ ˆŒØ ˆŒØ&Ð,¨"ˆÔÐÐrL   rR   rp   c                ób  — |€t          ¦   «         }| j        �| j        S |                      d|¬¦  «        D ] }|                     |¦  «        r	d| _         nŒ!|                      ¦   «         }|�/t          |t          ¦  «        r|                     |¦  «        | _        | j        €d| _        | j        S )NF©re  rR   T)r   rp  rò  Ú_newstyle_implÚdeclared_metaclassr|   ro   )r¤   rR   re   r‚   s       rJ   rƒ  zClassDef._newstyle_impl¾  s¾   € Øˆ?Ý&Ñ(Ô(ˆGØŒ>Ð%Ø”>Ð!Ø—N’N¨%¸�NÑAÔAð 	ð 	ˆDØ×"Ò" 7Ñ+Ô+ð Ø!%�”Ø�ðð ×'Ò'Ñ)Ô)ˆð Ð¥¨Eµ8Ñ!<Ô!<ÐØ"×1Ò1°'Ñ:Ô:ˆDŒNØŒ>Ð!Ø"ˆDŒNØŒ~ÐrL   z=Whether this is a new style class or not

:type: bool or Nonec                óÈ   •— t           rHt          rAt          s:| j        pd}| j        �&|t          d„ | j        j        D ¦   «         ¦  «        z  }|pdS t          ¦   «         j        S )r÷  r   Nc              3  ó>   K  — | ]}|j         |j        pd z
  dz   V — ŒdS rù  rú  rû  s     rJ   rf   z&ClassDef.fromlineno.<locals>.<genexpr>â  sI   è è € ð ð àð ”M T¤[Ð%5°AÑ6¸Ñ:ðð ð ð ð ð rL   )	r   r   r   rs   r€  rü  r9   r¢   r·   )r¤   rs   r¥   s     €rJ   r·   zClassDef.fromlinenoÖ  s‚   ø€ õ ð 	•tð 	Õ$4ð 	ð ”[Ð% AˆFØŒÐ*Ø�#ð ð à $¤Ô 5ðñ ô ñ ô ñ �ð
 �;˜QÐÝ‰wŒwÔ!Ð!rL   c                óB   — | j         r| j         d         j        S | j        S )rþ  r_   )r   r¸   r·   r²   s    rJ   rÿ  zClassDef.blockstart_tolinenoê  s%   € ð Œ:ð 	+Ø”:˜b”>Ô*Ð*àŒÐrL   r´   c                ó   — | j         | j        fS r  r¶   r¹   s     rJ   rº   zClassDef.block_rangeõ  r»   rL   ú-Literal['builtins.type', 'builtins.classobj']c                ó   — | j         rdS dS )rÄ   úbuiltins.typezbuiltins.classobj)r~  r²   s    rJ   rÅ   zClassDef.pytypeþ  s   € ð
 Œ=ð 	#Ø"�?Ø"Ð"rL   c                ó   — dS )rÇ   ÚClassrG   r²   s    rJ   rÈ   zClassDef.display_type  s	   € ð ˆwrL   rœ   c                ó   — dS )z¿Whether this node defines something that is callable.

        :returns: Whether this defines something that is callable.
            For a :class:`ClassDef` this is always ``True``.
        TrG   r²   s    rJ   r¤  zClassDef.callable  r/  rL   c                ó–   ‡— |                       ¦   «         ‰k    rdS t          ˆfd„|                      |¬¦  «        D ¦   «         ¦  «        S )zàWhether this class is a subtype of the given type.

        :param type_name: The name of the type of check against.
        :type type_name: str

        :returns: Whether this class is a subtype of the given type.
        Tc              3  óH   •K  — | ]}|                      ¦   «         ‰k    V — Œd S r¨   rb   )rH   Úancró  s     €rJ   rf   z)ClassDef.is_subtype_of.<locals>.<genexpr>"  s0   øè è € ÐWÐW°�3—9’9‘;”; )Ò+ÐWÐWÐWÐWÐWÐWrL   r
  )rc   rh   rò  )r¤   ró  rR   s    ` rJ   r  zClassDef.is_subtype_of  sN   ø€ ð �:Š:‰<Œ<˜9Ò$Ð$Ø�4åÐWÐWÐWÐW°t·~²~Èg°~Ñ7VÔ7VÐWÑWÔWÑWÔWÐWrL   c           	     ó  — 	 t          |j        d                              |¦  «        ¦  «        }n/# t          $ r"}t	          |j        d         |¬¦  «        |‚d }~ww xY wt          |t          j        ¦  «        r"t          |j        t          ¦  «        r|j        }nt          j        S t          |ddddt          ¦   «         ¬¦  «        }	 t          |j        d                              |¦  «        ¦  «        }n/# t          $ r"}t	          |j        d         |¬¦  «        |‚d }~ww xY wt          |t          j        t          j        f¦  «        rkg }|                     ¦   «         D ]L}	t          |	                     |¬¦  «        d ¦  «        }
|
r$ |j        t          j        |	|
¬¦  «        ¦  «         ŒM||_        nt          j        S 	 t          |j        d                              |¦  «        ¦  «        }n# t          t          f$ r d }Y nw xY w|rkt          |t          j        ¦  «        rQ|j        D ]I\  }}t          |t          j        ¦  «        r*t          |j        t          ¦  «        r|g|j        |j        <   ŒJ|j        |_        |S )Nr   r"  rS  rM   r
  )Úoriginalr  rê   )r  r‹  r  r  r    r|   r0   r+   r  rš   r   rk  ro   r-   r   r!  ÚiteredrS   ÚEvaluatedObjectr   ÚDictÚitemsr˜   rž   )r¤   r±  rR   Ú	name_noderN  r’   rU   rM  r   re   r&  ÚmembersÚattrr  s                 rJ   Ú_infer_type_callzClassDef._infer_type_call$  s©  € ð	NÝ˜Vœ[¨œ^×1Ò1°'Ñ:Ô:Ñ;Ô;ˆIˆIøÝð 	Nð 	Nð 	NÝ  f¤k°!¤n¸gÐFÑFÔFÈAÐMøøøøð	Nøøøå�i¥Ô!3Ñ4Ô4ð 	$½ØŒO�Sñ:
ô :
ð 	$ð ”?ˆDˆDåÔ#Ð#åØØØØØÝ‘9”9ð
ñ 
ô 
ˆð	NÝ˜vœ{¨1œ~×3Ò3°GÑ<Ô<Ñ=Ô=ˆKˆKøÝð 	Nð 	Nð 	NÝ  f¤k°!¤n¸gÐFÑFÔFÈAÐMøøøøð	Nøøøå�k¥LÔ$6½Ô8IÐ#JÑKÔKð 	$ØˆEØ#×*Ò*Ñ,Ô,ð ð �Ý §
¢
°7 
Ñ ;Ô ;¸TÑBÔB�Øð Ø �E”LÝ$Ô4¸dÈ(ÐSÑSÔSñô ð øð !ˆFŒLˆLõ
 Ô#Ð#ð	Ý˜6œ; qœ>×/Ò/°Ñ8Ô8Ñ9Ô9ˆGˆGøÝ¥Ð.ð 	ð 	ð 	ØˆGˆGˆGð	øøøð ð 	8•z '­<Ô+<Ñ=Ô=ð 	8Ø&œ}ð 8ð 8‘��eÝ˜d¥LÔ$6Ñ7Ô7ð 8½JÀtÄzÕSVÑ<WÔ<Wð 8Ø16°�F”M $¤*Ñ-øàœˆŒØˆs>   ‚-0 °
AºAÁAÃ	-C7 Ã7
D#ÄDÄD#Ç-G2 Ç2HÈHr±  r²  rÙ   c              #  ó0  K  — |                       d|¦  «        r4t          |j        ¦  «        dk    r|                      ||¦  «        }|V — dS d}	 |                      |¬¦  «        }|�,d|j        v r#t          |                     d|¦  «        ¦  «        }n# t          t          f$ r Y nw xY w|rR| 
                    ¦   «         dk    r:t          || ¦  «        }||j        _        |                     ||¦  «        E d{V —† dS |                      ¦   «         V — dS )z+infer what a class is returning when calledr‹  é   Nr
  Ú__call__zbuiltins.type.__call__)r  rD  r‹  r›  rA  r˜   r  râ   r   r  rc   r   ÚcallcontextÚcalleer|  Úinstantiate_class)r¤   r±  rR   rU   Údunder_callrA  s         rJ   r|  zClassDef.infer_call_result[  sW  è è € ð ×Ò˜o¨wÑ7Ô7ð 	½CÀÄÑ<LÔ<LÐPQÒ<QÐ<QØ×*Ò*¨6°7Ñ;Ô;ˆFØˆLˆLˆLØˆFàˆð
	ØŸš¨w˜Ñ7Ô7ˆIØÐ$ð
  Ô!1Ð1Ð1Ý"& y×'9Ò'9¸*ÀgÑ'NÔ'NÑ"OÔ"O�KøøÝ'­Ð7ð 	ð 	ð 	ØˆDð	øøøð ð 	+˜;×,Ò,Ñ.Ô.Ð2JÒJÐJõ +¨7°DÑ9Ô9ˆGØ)4ˆGÔÔ&Ø"×4Ò4°V¸WÑEÔEÐEÐEÐEÐEÐEÐEÐEÐEÐEà×(Ò(Ñ*Ô*Ð*Ð*Ð*Ð*Ð*s   ÁAB ÂB)Â(B)r   rw   r;   r¼   rT  c                óH  ‡— t          ‰j        t          j        ¦  «        o|t	          ¦   «         j        v }t          ˆfd„| j        D ¦   «         ¦  «        s|r3| j        st          | ¬¦  «        ‚| j         	                    ¦   «         }d}n| }| 
                    ‰||¦  «        S )aê  Lookup where the given name is assigned.

        :param node: The node to look for assignments up to.
            Any assignments after the given node are ignored.

        :param name: The name to find assignments for.

        :param offset: The line offset to filter statements up to.

        :returns: This scope node and the list of assignments associated to the
            given name according to the scope where it has been found (locals,
            globals or builtin).
        c              3  óN   •K  — | ]}‰|k    p|                      ‰¦  «        V — Œ d S r¨   )Ú	parent_of)rH   re   rw   s     €rJ   rf   z(ClassDef.scope_lookup.<locals>.<genexpr>•  s8   øè è € ÐLÐL¸�˜’Ð4 §¢¨tÑ 4Ô 4ÐLÐLÐLÐLÐLÐLrL   rì   r_   )r|   rž   r0   Ú
Decoratorsr)   Úbuiltins_modulerh   r   r"   rÝ   rÀ   )r¤   rw   r’   r¼   Úlookup_upper_framerÝ   s    `    rJ   rÁ   zClassDef.scope_lookup|  s¹   ø€ õ* �t”{¥LÔ$;Ñ<Ô<ð 9Ø�Ñ(Ô(Ô8Ð8ð 	õ
 ÐLÐLÐLÐLÀÄÐLÑLÔLÑLÔLð	à!ð	ð  ”;ð 6Ý(°Ð5Ñ5Ô5Ð5Ø”K×%Ò%Ñ'Ô'ˆEð ˆFˆFàˆEØ×"Ò" 4¨¨vÑ6Ô6Ð6rL   c                ó$   — d„ | j         D ¦   «         S )z�The names of the parent classes

        Names are given in the order they appear in the class definition.

        :type: list(str)
        c                ó6   — g | ]}|                      ¦   «         ‘ŒS rG   )Ú	as_string)rH   Úbnodes     rJ   rK   z&ClassDef.basenames.<locals>.<listcomp>¶  s"   € Ð:Ð:Ð: e�—’Ñ!Ô!Ð:Ð:Ð:rL   ©r   r²   s    rJ   Ú	basenameszClassDef.basenames®  s   € ð ;Ð:¨t¬zÐ:Ñ:Ô:Ð:rL   Tre  úGenerator[ClassDef, None, None]c              #  óÄ  K  — | h}|€t          ¦   «         }| j        s7|                      ¦   «         dk    rt          d¦  «        d         d         V — dS | j        D �]}|                     ¦   «         5  	 |                     |¦  «        D ] }t          |t          ¦  «        s#t          |t          j        ¦  «        r|j	        }nŒ:|j
        s||v rŒF|                     |¦  «         |V — |sŒb|                     d|¬¦  «        D ]&}|| u r n||v rŒ|                     |¦  «         |V — Œ'Œ¡n# t          $ r Y ddd¦  «         Œçw xY w	 ddd¦  «         n# 1 swxY w Y   �ŒdS )zµIterate over the base classes in prefixed depth first order.

        :param recurs: Whether to recurse or return direct ancestors only.

        :returns: The base classes
        Núbuiltins.objectÚobjectrM   r   Tr‚  )r   r   rc   r3   Úrestore_pathr  r|   ro   r}  r~  rH  rt   rò  r    )r¤   re  rR   ÚyieldedÚstmtr`  Úgrandpas          rJ   rò  zClassDef.ancestors¸  s  è è € ð �&ˆØˆ?Ý&Ñ(Ô(ˆGØŒzð 	˜dŸjšj™lœlÐ.?Ò?Ð?å  Ñ*Ô*¨1Ô-¨aÔ0Ð0Ð0Ð0ØˆFà”Jð 	ñ 	ˆDØ×%Ò%Ñ'Ô'ð ð ðØ#'§:¢:¨gÑ#6Ô#6ð *ð *˜Ý)¨'µ8Ñ<Ô<ð )Ý)¨'µ5´>ÑBÔBð )Ø*1Ô*:  à (Ø&œ|ð *Ø&¨'Ð1Ð1Ø (Ø#ŸKšK¨Ñ0Ô0Ð0Ø")˜M˜M˜MØ%ð %Ø$Ø'.×'8Ò'8ÀÈgÐ'8Ñ'VÔ'Vð *ð *˜GØ&¨$˜˜à % Ø&¨'Ð1Ð1Ø (Ø#ŸKšK¨Ñ0Ô0Ð0Ø")˜M˜M˜M˜Møð)*øõ* &ð ð ð Øð1ð ð ñ ô ð ð ð.øøøð+*ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ùð	ð 	s7   Á2EÁ4B6D+Ä*EÄ+
EÄ5EÅEÅEÅE	ÅE	c              #  ó®   K  — 	 |                       |¦  «        dd…         }n&# t          $ r |                      |¬¦  «        }Y nw xY w|D ]
}||v r|V — ŒdS )zéIterate over the parents that define the given name.

        :param name: The name to find definitions for.
        :type name: str

        :returns: The parents that define the given name.
        :rtype: iterable(NodeNG)
        rM   Nr
  )Úmror!   rò  )r¤   r’   rR   rò  r&  s        rJ   Úlocal_attr_ancestorszClassDef.local_attr_ancestorsæ  s‰   è è € ð	8Ø,0¯HªH°WÑ,=Ô,=¸a¸b¸bÔ,AˆIˆIøÝð 	8ð 	8ð 	8ð Ÿš¨w˜Ñ7Ô7ˆIˆIˆIð	8øøøð !ð 	ð 	ˆGØ�wˆˆØ���øð	ð 	s   „" ¢ AÁAc              #  óV   K  — |                       |¬¦  «        D ]}||j        v r|V — ŒdS )a  Iterate over the parents that define the given name as an attribute.

        :param name: The name to find definitions for.
        :type name: str

        :returns: The parents that define the given name as
            an instance attribute.
        :rtype: iterable(NodeNG)
        r
  N)rò  r—  )r¤   r’   rR   r&  s       rJ   Úinstance_attr_ancestorsz ClassDef.instance_attr_ancestorsû  sG   è è € ð —~’~¨g�~Ñ6Ô6ð 	ð 	ˆGØ�wÔ-Ð-Ð-Ø���øð	ð 	rL   c                ó   — || j         v S )z×Whether this class directly inherits from the given node.

        :param node: The node to check for.
        :type node: NodeNG

        :returns: Whether this class directly inherits from the given node.
        r­  )r¤   rw   s     rJ   Úhas_basezClassDef.has_base		  s   € ð �t”zÐ!Ð!rL   c                óÞ   — g }|| j         v r| j         |         }n3t          |                      ||¦  «        d¦  «        }|r|j         |         }d„ |D ¦   «         }|r|S t          | ||¬¦  «        ‚)ah  Get the list of assign nodes associated to the given name.

        Assignments are looked for in both this class and in parents.

        :returns: The list of assignments to the given name.
        :rtype: list(NodeNG)

        :raises AttributeInferenceError: If no attribute with this name
            can be found in this class or parent classes.
        Nc                óF   — g | ]}t          |t          j        ¦  «        °|‘ŒS rG   ©r|   r0   ÚDelAttrrÑ   s     rJ   rK   z'ClassDef.local_attr.<locals>.<listcomp>%	  rÒ   rL   rÊ   )r˜   r  r¹  r   )r¤   r’   rR   rU   Ú
class_nodes        rJ   Ú
local_attrzClassDef.local_attr	  s�   € ð ˆØ�4”;ÐÐØ”[ Ô&ˆFˆFå˜d×7Ò7¸¸gÑFÔFÈÑMÔMˆJØð 1Ø#Ô*¨4Ô0�ØOÐO˜VÐOÑOÔOˆØð 	ØˆMÝ%¨T¸TÈ7ÐSÑSÔSÐSrL   c                óè   — t          | j                             |g ¦  «        ¦  «        }|                      ||¦  «        D ]}||j        |         z  }Œd„ |D ¦   «         }|r|S t	          | ||¬¦  «        ‚)ak  Get the list of nodes associated to the given attribute name.

        Assignments are looked for in both this class and in parents.

        :returns: The list of assignments to the given name.
        :rtype: list(NodeNG)

        :raises AttributeInferenceError: If no attribute with this name
            can be found in this class or parent classes.
        c                óF   — g | ]}t          |t          j        ¦  «        °|‘ŒS rG   rÀ  rÑ   s     rJ   rK   z*ClassDef.instance_attr.<locals>.<listcomp>;	  rÒ   rL   rÊ   )rF  r—  Úgetr»  r   )r¤   r’   rR   ÚvaluesrÂ  s        rJ   Úinstance_attrzClassDef.instance_attr*	  sŒ   € õ �dÔ)×-Ò-¨d°BÑ7Ô7Ñ8Ô8ˆà×6Ò6°t¸WÑEÔEð 	6ð 	6ˆJØ�jÔ/°Ô5Ñ5ˆFˆFØOÐO˜VÐOÑOÔOˆØð 	ØˆMÝ%¨T¸TÈ7ÐSÑSÔSÐSrL   úbases.Instancec                óÐ   — ddl m} 	 t          d„ |                      ¦   «         D ¦   «         ¦  «        r |j        | ¦  «        S n# t
          $ r Y nw xY wt          j        | ¦  «        S )z†Get an :class:`Instance` of the :class:`ClassDef` node.

        :returns: An :class:`Instance` of the :class:`ClassDef` node
        r   r!  c              3  ó2   K  — | ]}|j         t          v V — Œd S r¨   )r’   ÚEXCEPTION_BASE_CLASSES)rH   rQ   s     rJ   rf   z-ClassDef.instantiate_class.<locals>.<genexpr>H	  s*   è è € ÐLÐL¸#�3”8Õ5Ð5ÐLÐLÐLÐLÐLÐLrL   )r&  r:   rh   r¸  ÚExceptionInstancer!   r   r}  )r¤   r:   s     rJ   r¡  zClassDef.instantiate_class@	  sŒ   € ð
 	$Ð#Ð#Ð#Ð#Ð#ð	ÝÐLÐLÀÇÂÁÄÐLÑLÔLÑLÔLð 7à0�wÔ0°Ñ6Ô6Ð6ð7øõ ð 	ð 	ð 	ØˆDð	øøøåŒ~˜dÑ#Ô#Ð#s   ˆ:A Á
AÁAÚclass_contextúlist[InferenceResult]c                óÒ  — |st          | ||¬¦  «        ‚t          | j                             |g ¦  «        ¦  «        }|                      d|¬¦  «        D ] }||j                             |g ¦  «        z  }Œ!|| j        v r,|r*|s(| j                             |¦  «        g}|dk    r||z  }|S |r||                      ||¦  «        z  }|                     ¦   «         D ]y}t          |t          j        ¦  «        r]|                     ¦   «         }t          |t          j        ¦  «        r/|j        €(|                     |                     |¦  «        ¦  «         Œz|st          | ||¬¦  «        ‚|S )aï  Get an attribute from this class, using Python's attribute semantic.

        This method doesn't look in the :attr:`instance_attrs` dictionary
        since it is done by an :class:`Instance` proxy at inference time.
        It may return an :class:`Uninferable` object if
        the attribute has not been
        found, but a ``__getattr__`` or ``__getattribute__`` method is defined.
        If ``class_context`` is given, then it is considered that the
        attribute is accessed from a class context,
        e.g. ClassDef.attribute, otherwise it might have been accessed
        from an instance as well. If ``class_context`` is used in that
        case, then a lookup in the implicit metaclass and the explicit
        metaclass will be done.

        :param name: The attribute to look for.

        :param class_context: Whether the attribute can be accessed statically.

        :returns: The attribute.

        :raises AttributeInferenceError: If the attribute cannot be inferred.
        rÊ   Tr‚  Ú	__bases__)r   rF  r˜   rÆ  rò  rÓ   r%   Ú_metaclass_lookup_attributeÚcopyr|   r0   râ  rñ   Ú	AnnAssignr  ri   Úindex)	r¤   r’   rR   rÎ  rÇ  Ú	classnoderU   r  rµ  s	            rJ   r¿   zClassDef.getattrO	  sŠ  € ð8 ð 	XÝ)°ÀÈwÐWÑWÔWÐWõ )-¨T¬[¯_ª_¸TÀ2Ñ-FÔ-FÑ(GÔ(GˆØŸš¨t¸W˜ÑEÔEð 	5ð 	5ˆIØ�iÔ&×*Ò*¨4°Ñ4Ô4Ñ4ˆFˆFà�4Ô*Ð*Ð*¨}Ð*ÀVÐ*ØÔ-×4Ò4°TÑ:Ô:Ð;ˆFØ�{Ò"Ð"ð ˜&Ñ �ØˆMàð 	FØ�d×6Ò6°t¸WÑEÔEÑEˆFð —[’[‘]”]ð 	4ð 	4ˆEÝ˜%¥Ô!8Ñ9Ô9ð 4Ø—’Ñ(Ô(�Ý˜d¥LÔ$:Ñ;Ô;ð 4ÀÄ
Ð@RØ—J’J˜vŸ|š|¨EÑ2Ô2Ñ3Ô3Ð3øàð 	XÝ)°ÀÈwÐWÑWÔWÐWàˆrL   i   )Úmaxsizec                óN  — t          ¦   «         }|                      ¦   «         }t          |¦  «        }|                      |¬¦  «        }||fD ]X}|rT|| k    rNt	          |t
          ¦  «        r9|                      |||¦  «        }|                     t          |¦  «        ¦  «         ŒY|S )zASearch the given name in the implicit and the explicit metaclass.r
  )rr   Úimplicit_metaclassr   rA  r|   ro   Ú_get_attribute_from_metaclassÚupdate)r¤   r’   rR   ÚattrsÚimplicit_metarA  rQ   Úcls_attributess           rJ   rÒ  z$ClassDef._metaclass_lookup_attributeŠ	  s§   € õ ‘”ˆØ×/Ò/Ñ1Ô1ˆÝ˜wÑ'Ô'ˆØ—N’N¨7�NÑ3Ô3ˆ	Ø! 9Ð-ð 	2ð 	2ˆCØð 2�s˜d’{�{¥z°#µxÑ'@Ô'@�{Ø!%×!CÒ!CÀCÈÈwÑ!WÔ!W�Ø—’�S Ñ0Ô0Ñ1Ô1Ð1øØˆrL   c              #  ó¾  K  — ddl m} 	 |                     ||d¬¦  «        }n# t          $ r Y d S w xY wt	          j        |||¬¦  «        D ]‘}t          |t          ¦  «        s|V — Œt          ||j        ¦  «        r|V — Œ6|j	        dk    r)t          |¦  «        p| }t	          j        ||¦  «        V — Œj|j	        dk    r|V — Œzt	          j        || ¦  «        V — Œ’d S )Nr   r!  T)rR   rÎ  rÜ   r@   rA   )r&  r:   r¿   r   r   rß   r|   r}   r$  r~   ri  r   )r¤   rQ   r’   rR   r:   rÜ  rš  rÝ   s           rJ   rÚ  z&ClassDef._get_attribute_from_metaclass—	  s5  è è € Ø#Ð#Ð#Ð#Ð#Ð#ð	Ø—K’K ¨gÀT�KÑJÔJˆEˆEøÝ&ð 	ð 	ð 	ØˆFˆFð	øøøõ Ô& u¨g¸SÐAÑAÔAð 	4ð 	4ˆDÝ˜d¥KÑ0Ô0ð Ø�
�
�
Øå˜$ Ô 0Ñ1Ô1ð Ø�
�
�
ØØŒy˜MÒ)Ð)õ +¨4Ñ0Ô0Ð8°D�ÝÔ'¨¨eÑ4Ô4Ð4Ð4Ð4Ð4Ø”˜nÒ,Ð,Ø�
�
�
�
åÔ'¨¨dÑ3Ô3Ð3Ð3Ð3Ð3ð'	4ð 	4s   Š# £
1°1c              #  óV  ‡K  — ddl m} t          |¦  «        }||_        |                      |¬¦  «        }	 |                      |||¬¦  «        }t          |¦  «        dk    r8|d         |dd…         }}|                     ¦   «         Š|gˆfd„|D ¦   «         z   }t          j	        ||| ¬¦  «        D �]}t          |t          j        ¦  «        sYt          |t          j        ¦  «        r?	 |j                             d	|¦  «         t          j        V — Œb# t"          $ r |V — Y Œrw xY wt          ||j        ¦  «        rg|j        }	|s|	                     | |¬
¦  «        E d{V —† Œ²|r9|	j                             ¦   «         |u r|	                     | |¬
¦  «        E d{V —† Œí|V — Œòt-          || ¦  «        V — �ŒdS # t"          $ re}
|                     d¦  «        s$|                      |¦  «        rt          j        V — n!t3          t5          |
¦  «        | ||¬¦  «        |
‚Y d}
~
dS d}
~
ww xY w)rÛ   r   r!  r
  )rÎ  rM   Nc                ó\   •— g | ](}|j         r|j                              ¦   «         ‰k    ¯&|‘Œ)S rG   )rž   r•  )rH   rš  Úfirst_scopes     €rJ   rK   z%ClassDef.igetattr.<locals>.<listcomp>Ð	  sH   ø€ ð -ð -ð -àØ”{ð-ð (,¤{×'8Ò'8Ñ':Ô':¸kÒ'IÐ'Ið à'IÐ'IÐ'IrL   rÜ   Ú__get__)r±  rR   Ú__rÊ   )r&  r:   r   rÞ   rA  r¿   rD  r•  r   rß   r|   r0   r+   r}  r~  r   rk  r   r$  r“  r|  rž   rƒ   r  Úhas_dynamic_getattrr    rš   )r¤   r’   rR   rÎ  r:   rA  Ú
attributesÚ
first_attrr&  r“  rá   râ  s              @rJ   râ   zClassDef.igetattr´	  s  øè è € ð 	$Ð#Ð#Ð#Ð#Ð#õ ˜wÑ'Ô'ˆØ!ˆÔà—N’N¨7�NÑ3Ô3ˆ	ð6	ØŸš d¨GÀ=˜ÑQÔQˆJõ �:‰Œ Ò"Ð"Ø)3°A¬¸
À1À2À2¼˜J�
Ø(×.Ò.Ñ0Ô0�Ø(˜\ð -ð -ð -ð -à *ð-ñ -ô -ñ �
õ "Ô.¨z¸7È$ÐOÑOÔOð  =ñ  =�å! (­LÔ,>Ñ?Ô?ð =ÅJØ�eœnñEô Eð =ð/Ø Ô)×1Ò1°)¸WÑEÔEÐEõ #Ô.Ð.Ð.Ð.Ð.øõ 3ð 'ð 'ð 'Ø&˜˜˜˜˜ð'øøøõ   ¨'Ô*:Ñ;Ô;ð =Ø'Ô0�HØ(ð 'à#+×#=Ò#=Ø#'°ð $>ñ $ô $ð ð ð ð ð ð ð ð ð #ð ' x¤×'<Ò'<Ñ'>Ô'>À)Ð'KÐ'Kð $,×#=Ò#=Ø#'°ð $>ñ $ô $ð ð ð ð ð ð ð ð ð '˜˜˜˜å,¨X°tÑ<Ô<Ð<Ð<Ð<Ñ<ðA =ð  =øõB 'ð 	ð 	ð 	Ø—?’? 4Ñ(Ô(ð ¨T×-EÒ-EÀgÑ-NÔ-Nð åÔ&Ð&Ð&Ð&Ð&å$Ý˜‘J”J t°tÀWðñ ô àðð 'Ð&Ð&Ð&Ð&Ð&øøøøð	øøøs>   ·B1F9 Ã)DÄF9 ÄD$Ä!F9 Ä#D$Ä$BF9 Æ9
H(ÇAH#È#H(c                óì   — d„ }	  ||                       d|¦  «        d         ¦  «        S # t          $ r= 	 |                       d|¦  «        d         } ||¦  «        cY S # t          $ r Y nw xY wY nw xY wdS )a0  Check if the class has a custom __getattr__ or __getattribute__.

        If any such method is found and it is not from
        builtins, nor from an extension module, then the function
        will return True.

        :returns: Whether the class has a custom __getattr__ or __getattribute__.
        c                ób   — |                       ¦   «         }|j        dk    ot          |dd ¦  «        S )Nr{  r–   )Úrootr’   r¿   )rw   rê  s     rJ   Ú_valid_getattrz4ClassDef.has_dynamic_getattr.<locals>._valid_getattr

  s-   € Ø—9’9‘;”;ˆDØ”9 
Ò*ÐQ­w°t¸]ÈDÑ/QÔ/QÐQrL   Ú__getattr__r   Ú__getattribute__F)r¿   r   )r¤   rR   rë  Úgetattributes       rJ   rå  zClassDef.has_dynamic_getattr 
  s·   € ð	Rð 	Rð 	Rð	Ø!�> $§,¢,¨}¸gÑ"FÔ"FÀqÔ"IÑJÔJÐJøÝ&ð 	ð 	ð 	ðØ#Ÿ|š|Ð,>ÀÑHÔHÈÔK�Ø%�~ lÑ3Ô3Ð3Ð3Ð3øÝ*ð ð ð Ø�ðøøøØ�ð	øøøð ˆus2   …$* ª
A1µ&AÁA1Á
A+Á(A1Á*A+Á+A1Á0A1c                ó–  — 	 t          | d|¬¦  «        }nu# t          $ rh}t          | t          ¦  «        r7	 |                      d¦  «        }n2# t          $ r t          | |¬¦  «        |‚w xY wt          | |¬¦  «        |‚Y d}~nd}~ww xY w|d         }t          || ¦  «        }t          |g|¬¦  «        |_        	 t          | 
                    | |¦  «        t          j        ¦  «        S # t          $ r? t          |t          j        ¦  «        r#|                      ¦   «         dk    rt"          r| cY S ‚ t$          $ r t          j        cY S w xY w)	aA  Return the inference of a subscript.

        This is basically looking up the method in the metaclass and calling it.

        :returns: The inferred value of a subscript to this class.
        :rtype: NodeNG

        :raises AstroidTypeError: If this class does not define a
            ``__getitem__`` method.
        r=   r
  rñ  r"  Nr   )r‹  r   r‹  )r%   r   r|   ro   r¿   r   r   r   rŸ  r  r|  r   rk  r  r0   Ú	EmptyNoderÅ   r   r    )r¤   rÕ  rR   ÚmethodsrØ   r’  Únew_contexts          rJ   ÚgetitemzClassDef.getitem
  sŸ  € ð	LÝ˜T =¸'ÐBÑBÔBˆGˆGøÝ&ð 	Lð 	Lð 	LÝ˜$¥Ñ)Ô)ð Lð
PØ"ŸlšlÐ+>Ñ?Ô?�G�Gøõ /ð Pð Pð PÝ*°¸gÐFÑFÔFÈCÐOðPøøøõ '¨D¸'ÐBÑBÔBÈÐKð �G�G�G�Gøøøøð	Løøøð  ˜”ˆõ +¨7°DÑ9Ô9ˆÝ"-°E°7À6Ð"JÑ"JÔ"JˆÔð	$Ý˜×0Ò0°°{ÑCÔCÅTÔEUÑVÔVÐVøÝð 	ð 	ð 	õ ˜6¥<Ô#9Ñ:Ô:ðà—K’K‘M”M _Ò4Ð4Ýð 5ð ���ØÝð 	$ð 	$ð 	$ÝÔ#Ð#Ð#Ð#ð	$øøøsD   ‚ •
BŸBµAÁ
BÁA(Á(BÂBÂ:-C( Ã(AEÄ/EÅEc              #  óÜ   K  — i }t          j        t          | f¦  «        |                      ¦   «         ¦  «        D ]1}|                     ¦   «         D ]}|j        |v rŒd||j        <   |V — ŒŒ2dS )z©Iterate over all of the method defined in this class and its parents.

        :returns: The methods defined on the class.
        :rtype: iterable(FunctionDef)
        N)rJ  rK  Úiterrò  Ú	mymethodsr’   )r¤   Údoner&  rå  s       rJ   rñ  zClassDef.methodsN
  sŠ   è è € ð ˆÝ ”¥t¨T¨G¡}¤}°d·n²nÑ6FÔ6FÑGÔGð 	ð 	ˆGØ×)Ò)Ñ+Ô+ð ð �Ø”9 Ð$Ð$ØØ"&��T”Y‘Ø�
�
�
�
ð	ð	ð 	rL   c              #  ój   K  — |                       ¦   «         D ]}t          |t          ¦  «        r|V — ŒdS )zžIterate over all of the method defined in this class only.

        :returns: The methods defined on the class.
        :rtype: iterable(FunctionDef)
        N)rÇ  r|   r}   )r¤   Úmembers     rJ   rö  zClassDef.mymethods\
  sE   è è € ð —k’k‘m”mð 	ð 	ˆFÝ˜&¥+Ñ.Ô.ð Ø���øð	ð 	rL   c                óJ   — | j         rt          d¦  «        d         d         S dS )a<  Get the implicit metaclass of the current class.

        For newstyle classes, this will return an instance of builtins.type.
        For oldstyle classes, it will simply return None, since there's
        no implicit metaclass there.

        :returns: The metaclass.
        :rtype: builtins.type or None
        r~   rM   r   N)r~  r3   r²   s    rJ   rÙ  zClassDef.implicit_metaclassf
  s+   € ð Œ=ð 	0Ý! &Ñ)Ô)¨!Ô,¨QÔ/Ð/ØˆtrL   c                ót  — | j         D ]]}	 |                     |¬¦  «        D ]3}t          |t          ¦  «        r|j        r|j        | _        d| _         nŒ4ŒN# t          $ r Y ŒZw xY w| j        rK	 t          d„ | j                             |¬¦  «        D ¦   «         ¦  «        S # t          t          f$ r Y dS w xY wdS )aæ  Return the explicit declared metaclass for the current class.

        An explicit declared metaclass is defined
        either by passing the ``metaclass`` keyword argument
        in the class definition line (Python 3) or (Python 2) by
        having a ``__metaclass__`` class attribute, or if there are
        no explicit bases but there is a global ``__metaclass__`` variable.

        :returns: The metaclass of this class,
            or None if one could not be found.
        r
  Tc              3  óN   K  — | ] }t          |t          j        ¦  «        °|V — Œ!d S r¨   r?  rû  s     rJ   rf   z.ClassDef.declared_metaclass.<locals>.<genexpr>�
  sI   è è € ð ð àÝ% d­DÔ,@ÑAÔAðØðð ð ð ð ð rL   N)
r   r  r|   ro   rH  rm  Ú_metaclass_hackr    r  r  )r¤   rR   re   r`  s       rJ   r„  zClassDef.declared_metaclasst
  s  € ð ”Jð 	ð 	ˆDðØ#Ÿzšz°'˜zÑ:Ô:ð ð �GÝ! '­8Ñ4Ô4ð ¸¼ð Ø*1Ô*<˜œØ/3˜Ô,Ø˜øøøÝ!ð ð ð Ø�ðøøøð Œ?ð 		ðÝð ð à $¤× 5Ò 5¸gÐ 5Ñ FÔ Fðñ ô ñ ô ð øõ
 #¥MÐ2ð ð ð Ø�t�tðøøøð ˆts$   ‹A
AÁ
A#Á"A#Á.1B  Â B5Â4B5rv   úset[ClassDef] | Nonec                óì   — |€t          ¦   «         }|                     | ¦  «         |                      |¬¦  «        }|€6|                      |¬¦  «        D ]}||vr|                     |¦  «        }|� nŒ |S )Nr
  )rr   rt   r„  rò  Ú_find_metaclass)r¤   rv   rR   r‚   rž   s        rJ   r   zClassDef._find_metaclass™
  sˆ   € ð ˆ<Ý‘5”5ˆDØ�Š�‰Œˆà×'Ò'°Ð'Ñ8Ô8ˆØˆ=ØŸ.š.°˜.Ñ9Ô9ð ð �Ø Ð%Ð%Ø"×2Ò2°4Ñ8Ô8�EØÐ(Ø˜øØˆrL   c                ó.   — |                       |¬¦  «        S )zìGet the metaclass of this class.

        If this class does not define explicitly a metaclass,
        then the first defined metaclass in ancestors will be used
        instead.

        :returns: The metaclass of this class.
        r
  )r   r-  s     rJ   rA  zClassDef.metaclass©
  s   € ð ×#Ò#¨GÐ#Ñ4Ô4Ð4rL   c                ó   — | j         S r¨   )rý  r²   s    rJ   Úhas_metaclass_hackzClassDef.has_metaclass_hack¶
  s   € ØÔ#Ð#rL   c              #  óÄ  K  — d| j         vrdS |                      d¦  «        D �];}t          D ])}	 |                     |¦  «          n# t          $ r Y Œ&w xY wŒ5t          |t          j        ¦  «        r|j        r|V — Œ[t          |d¦  «        sŒlt          |t          j
        ¦  «        rd„ |j        D ¦   «         }n|                     ¦   «         }t          |t          j        ¦  «        rŒÇ|s|c S |D ]k}	 |                     ¦   «         D ]C}t          |t          j        ¦  «        rt          |j        t           ¦  «        sŒ7|j        sŒ?|V — ŒDŒ\# t"          $ r Y Œhw xY w�Œ=dS )z+Return an iterator with the inferred slots.Ú	__slots__Nr”  c                ó   — g | ]
}|d          ‘ŒS r=  rG   )rH   Úitems     rJ   rK   z$ClassDef._islots.<locals>.<listcomp>Ó
  s   € Ð:Ð:Ð: d˜$˜qœ'Ð:Ð:Ð:rL   )r˜   râ   ÚITER_METHODSr¿   r   r|   r0   r+   r  Úhasattrr–  r—  r”  r   r@  r  rš   r    )r¤   Úslotsrå  rÇ  rN  r&  s         rJ   Ú_islotszClassDef._islots¹
  sÒ  è è € à˜dœkÐ)Ð)Ø�4Ø—]’] ;Ñ/Ô/ð +	ñ +	ˆEå$ð ð �ðØ—M’M $Ñ'Ô'Ð'Ø�EøÝ.ð ð ð Ø�Hðøøøð å˜%¥Ô!3Ñ4Ô4ð ð ”;ð  Ø�K�K�KØÝ˜5 (Ñ+Ô+ð àå˜%¥Ô!2Ñ3Ô3ð (Ø:Ð:¨e¬kÐ:Ñ:Ô:��àŸš™œ�Ý˜&¥$Ô"6Ñ7Ô7ð ØØð ð ���àð ð �ð
Ø$'§I¢I¡K¤Kð 'ð '˜Ý)Ø$¥lÔ&8ñ ô  ð %å!+¨H¬N½CÑ!@Ô!@ð%ð %Ø'œ~ð %Ø$Ø&˜˜˜˜ð'øõ &ð ð ð Ø�Hðøøøñð ˆts$   °AÁ
AÁAÃ5AEÅ
EÅEc                ó  — | j         st          d¦  «        ‚|                      ¦   «         }	 t          |¦  «        }n@# t          $ r3}|j        r!|j        d         dvr|j        d         cY d }~S Y d }~d S d }~ww xY w|g|¢S )Nú8The concept of slots is undefined for old-style classes.r   )r  N)r~  ÚNotImplementedErrorr  r  r  r‹  )r¤   r
  ÚfirstrØ   s       rJ   Ú_slotszClassDef._slotsì
  s±   € ØŒ}ð 	Ý%ØJñô ð ð —’‘”ˆð	Ý˜‘K”KˆEˆEøÝð 	ð 	ð 	àŒxð #˜CœH QœK¨zÐ9Ð9Ø”x ”{Ð"Ð"Ð"Ð"Ð"Ð"Ø�4�4�4�4�4øøøøð		øøøð
 ˆ˜ˆÐs   ¬< ¼
A9Á"A4Á(A9Á4A9c                óJ  — dd„}| j         st          d¦  «        ‚	 |                      ¦   «         }n"# t          $ r}t          d¦  «        |‚d}~ww xY wt	           ||¦  «        ¦  «        }t          d	„ |D ¦   «         ¦  «        sdS t          t          |¦  «        d
„ ¬¦  «        S )aY  Get all the slots for this node.

        :returns: The names of slots for this class.
            If the class doesn't define any slot, through the ``__slots__``
            variable, then this function will return a None.
            Also, it will return None in the case the slots were not inferred.
        :rtype: list(str) or None
        r¸  úlist[ClassDef]r\   ú$Iterator[node_classes.NodeNG | None]c              3  ó°   K  — | D ]P}|                      ¦   «         dk    rŒ	 |                     ¦   «         }n# t          $ r Y Œ=w xY w|�	|E d {V —† ŒLd V — ŒQd S )Nr±  )rc   r  r  )r¸  rQ   Ú	cls_slotss      rJ   Úgrouped_slotsz*ClassDef._all_slots.<locals>.grouped_slots  s˜   è è € ð ð ð �à—9’9‘;”;Ð"3Ò3Ð3ØðØ #§
¢
¡¤�I�IøÝ*ð ð ð Ø�HðøøøàÐ(Ø(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(à�J�J�J�Jðð s   ¡6¶
AÁAr  z)Cannot get slots while parsing mro fails.Nc              3  ó   K  — | ]}|d uV — Œ	d S r¨   rG   )rH   Úslots     rJ   rf   z&ClassDef._all_slots.<locals>.<genexpr>%  s'   è è € Ð6Ð6¨�4˜tÐ#Ð6Ð6Ð6Ð6Ð6Ð6rL   c                ó   — | j         S r¨   )r  )r  s    rJ   ú<lambda>z%ClassDef._all_slots.<locals>.<lambda>(  s   € °4´:€ rL   )rf  )r¸  r  r\   r  )r~  r  r¸  r!   rF  ÚallÚsortedrr   )r¤   r  r¸  rN  r
  s        rJ   Ú
_all_slotszClassDef._all_slotsý
  sÜ   € ð	ð 	ð 	ð 	ð  Œ}ð 	Ý%ØJñô ð ð	Ø—(’(‘*”*ˆCˆCøÝð 	ð 	ð 	Ý%Ø;ñô àðøøøøð	øøøõ
 �]�] 3Ñ'Ô'Ñ(Ô(ˆÝÐ6Ð6°Ð6Ñ6Ô6Ñ6Ô6ð 	Ø�4å•c˜%‘j”jÐ&=Ð&=Ð>Ñ>Ô>Ð>s   œ1 ±
A»AÁAc                ó   — | j         S r¨   )r  r²   s    rJ   r
  zClassDef.slots*  s
   € ØŒÐrL   c              #  ó
  K  — |€t          ¦   «         }| j        s7|                      ¦   «         dk    rt          d¦  «        d         d         V — d S | j        D ]ª}	 t	          d„ |                     |                     ¦   «         ¬¦  «        D ¦   «         ¦  «        }n# t          t          f$ r Y ŒVw xY wt          |t          j
        ¦  «        r|j        }t          |t          ¦  «        sŒ‘|j        s|V — Œ�|j        E d {V —† Œ«d S )Nr±  r²  rM   r   c              3  óR   K  — | ]"}t          |t          ¦  «        r|j        ®|V — Œ#d S r¨   r8  r9  s     rJ   rf   z+ClassDef._inferred_bases.<locals>.<genexpr>D  sF   è è € ð ð àÝ& q­%Ñ0Ô0ðð 67´W°_ð à5D°_°_°_ðð rL   r
  )r   r   rc   r3   r  r  r;  r    r  r|   r}  r~  ro   rH  )r¤   rR   rµ  r`  s       rJ   Ú_inferred_baseszClassDef._inferred_bases-  sE  è è € ð ˆ?Ý&Ñ(Ô(ˆGØŒzð 	˜dŸjšj™lœlÐ.?Ò?Ð?Ý  Ñ*Ô*¨1Ô-¨aÔ0Ð0Ð0Ð0ØˆFà”Jð 	)ð 	)ˆDðåð ð à!ŸZšZ°·²±´˜ZÑ@Ô@ðñ ô ñ ô ��øõ
 #¥MÐ2ð ð ð Ø�ðøøøå˜'¥5¤>Ñ2Ô2ð +Ø!Ô*�Ý˜g¥xÑ0Ô0ð ØØ”<ð )Ø����à"œ=Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(ð#	)ð 	)s   Á?BÂB/Â.B/c                óð  — |                       ¦   «         dk    r| gS t          |                      |¬¦  «        ¦  «        }g }|D ]{}|| u rŒ	 |                     |¬¦  «        }|                     |¦  «         Œ4# t
          $ r; t          |                     |¬¦  «        ¦  «        }|                     |¦  «         Y Œxw xY w| gg|¢|‘}t          || |¦  «        }t          |¦  «         t          || |¦  «        S )Nr±  r
  )
rc   rF  r!  Ú_compute_mrorS   r  rò  ry   rn   rZ   )r¤   rR   rk   rj   re   r¸  rò  Úunmerged_mros           rJ   r#  zClassDef._compute_mroT  s&  € Ø�:Š:‰<Œ<Ð,Ò,Ð,Ø�6ˆMå˜d×2Ò2¸7Ð2ÑCÔCÑDÔDˆØˆ	Ø"ð 	,ð 	,ˆDØ�tˆ|ˆ|Øð
,Ø×'Ò'°Ð'Ñ8Ô8�Ø× Ò  Ñ%Ô%Ð%Ð%øÝ&ð ,ð ,ð ,õ ! §¢¸ Ñ!@Ô!@ÑAÔA�	Ø× Ò  Ñ+Ô+Ð+Ð+Ð+ð,øøøð 04¨fÐ-Q°yÐ-QÀ.Ð-QˆÝ+¨L¸$ÀÑHÔHˆÝ  Ñ.Ô.Ð.Ý˜ t¨WÑ5Ô5Ð5s   Á+A7Á7AB<Â;B<r  c                ó.   — |                       |¬¦  «        S )a*  Get the method resolution order, using C3 linearization.

        :returns: The list of ancestors, sorted by the mro.
        :rtype: list(NodeNG)
        :raises DuplicateBasesError: Duplicate bases in the same class base
        :raises InconsistentMroError: A class' MRO is inconsistent
        r
  )r#  r-  s     rJ   r¸  zClassDef.mroo  s   € ð × Ò ¨Ð Ñ1Ô1Ð1rL   r[  c                ó   — dS )z¢Determine the boolean value of this node.

        :returns: The boolean value of this node.
            For a :class:`ClassDef` this is always ``True``.
        TrG   r-  s     rJ   r.  zClassDef.bool_valuey  r/  rL   c              #  ó    K  — | j         �	| j         V — | j        E d {V —† | j        �| j        E d {V —† | j        E d {V —† | j        E d {V —† d S r¨   )r€  r   rk  rÐ  r‡   r²   s    rJ   r2  zClassDef.get_children�  s“   è è € ØŒ?Ð&Ø”/Ð!Ð!Ð!à”:ÐÐÐÐÐÐÐØŒ=Ð$Ø”}Ð$Ð$Ð$Ð$Ð$Ð$Ð$ØÔ#Ð#Ð#Ð#Ð#Ð#Ð#Ð#à”9ÐÐÐÐÐÐÐÐÐrL   c                ó|   — d„ | j         D ¦   «         }t          t          j                             |¦  «        ¦  «        S )Nc              3  ó$   K  — | ]}|j         V — Œd S r¨   )rÞ  )rH   r  s     rJ   rf   z2ClassDef._assign_nodes_in_scope.<locals>.<genexpr>Ž  s6   è è € ð !
ð !
Ø2<ˆJÔ-ð!
ð !
ð !
ð !
ð !
ð !
rL   )r‡   rF  rJ  rK  Úfrom_iterable)r¤   Úchildren_assign_nodess     rJ   rÞ  zClassDef._assign_nodes_in_scopeŒ  sD   € ð!
ð !
Ø@DÄ	ð!
ñ !
ô !
Ðõ •I”O×1Ò1Ð2GÑHÔHÑIÔIÐIrL   ræ   r¤   rD   rç   rè   c               ó   — | S r4  rG   rð   s     rJ   rÝ   zClassDef.frame“  r5  rL   r6  r   c              +  ó   K  — | V — d S r¨   rG   r9  s      rJ   r:  zClassDef._infer�  r;  rL   rW  )r\   rw  )NNN)r   r}  r‡   r½  r€  rÑ  r~  rq  rA  rl  rk  r  rÒ  rÙ  r†   rˆ   rÐ  rÚ  r\   r]   r¨   r?  rX  r<  )r\   r‰  r>  r  rA  rË  r=  rY  )TN)re  rœ   rR   rp   r\   r¯  )r\   rÉ  rê  )r’   rš   rR   rp   rÎ  rœ   r\   rÏ  )r’   rš   rR   rp   rÎ  rœ   r\   rÙ   )rR   rp   r\   r²  ©NN)rv   rþ  rR   rp   r\   r²  )rR   rp   r\   r  ra  rB  )rR   rp   r6  r   r\   r¯  )JrŽ   rC  rD  rŒ   rE  r€  r&   rÓ   rÓ  rm  rF  rý  rH  r{   rf  r~   rG  rH  rp  r£   r   Úinstance_class_infer_binary_oprv  rŽ  rs  r©   rƒ  r~  r   r·   rÿ  rº   rÅ   rÈ   r¤  r  r›  r|  rÁ   r®  rò  r¹  r»  r½  rÃ  rÈ  r¡  r¿   r	   rÒ  rÚ  râ   rå  ró  rñ  rö  rÙ  r„  r   rA  r  r  r  r  r
  r!  r#  r¸  r.  r2  rÞ  rÝ   r:  rI  rJ  s   @rJ   ro   ro   "  sÇ  ø€ € € € € € ð
ð 
ð €Oð €Jðð $˜™œÐðð
 €EØ $€JÐ$Ð$Ð$Ñ$Ø€OØ€DØˆ8Øððñ ô €Dð 9€MØ1ÐØ!€IÐ!Ð!Ð!Ñ!ð62ð 62ð 62ð 62ð 62ð 62ðr 	Ô0ð ð ð ð ñ ðð ð ð ð	ð 	ð 	ð" !%Ø#'Ø6:ð-ð %)Ø!%ð ð-ð -ð -ð -ð -ð -ð4ð ð ð ð ð$ €IØˆxØØQðñ ô €Hð
 ð"ð "ð "ð "ð "ñ „_ð"ð& ðð ñ „_ðð.ð .ð .ð .ð#ð #ð #ð #ðð ð ð ðð ð ð ðXð Xð Xð Xð Xð5ð 5ð 5ðt ,0ð+ð +ð +ð +ð +ðD ;<ð07ð 07ð 07ð 07ð 07ðd ð;ð ;ñ „Xð;ð GKð,ð ,ð ,ð ,ð ,ð\ð ð ð ð ð*ð ð ð ð ð"ð "ð "ð "ðTð Tð Tð Tð Tð.Tð Tð Tð Tð Tð,$ð $ð $ð $ð$ ,0Ø"ð	9ð 9ð 9ð 9ð 9ðv €Y�tÐÑÔð
ð 
ñ Ôð
ð4ð 4ð 4ð@ ,0Ø"ð	Jð Jð Jð Jð JðXð ð ð ð ð23$ð 3$ð 3$ð 3$ð 3$ðjð ð ðð ð ðð ð ð 26ð#ð #ð #ð #ð #ðL UYðð ð ð ð ð" 26ð5ð 5ð 5ð 5ð 5ð$ð $ð $ð1ð 1ð 1ðfð ð ð" ð*?ð *?ñ „_ð*?ðXð ð ð%)ð %)ð %)ð %)ð %)ðN6ð 6ð 6ð 6ð 6ð62ð 2ð 2ð 2ð 2ðð ð ð ð ð	ð 	ð 	ð ðJð Jñ „_ðJð :>ð ð ð ð ð ð ð 26ðð ð ð ð ð ð ð ð rL   )rT   r[   r\   r]   )rT   r[   rQ   ro   rR   rp   r\   r[   r.  rA  r?  )hrŒ   Ú
__future__r   r¬   rJ  r  rí   Úcollections.abcr   r   r   r   Ú	functoolsr   r	   Útypingr
   r   r   r   r   r   r&  r   r   r   Úastroid.constr   r   r   r   Úastroid.contextr   r   r   r   Úastroid.exceptionsr   r   r   r   r   r    r!   r"   r#   r$   Ú!astroid.interpreter.dunder_lookupr%   Úastroid.interpreter.objectmodelr&   r'   r(   Úastroid.managerr)   Úastroid.nodesr*   r+   r,   r-   r.   r/   r0   Ú astroid.nodes.scoped_nodes.mixinr1   r2   Ú astroid.nodes.scoped_nodes.utilsr3   Úastroid.nodes.utilsr4   Úastroid.typingr5   r6   r7   r8   r9   r:   Úastroid.nodes._base_nodesr;   r  Ú	frozensetrÌ  r‚  rD   rZ   rn   ry   rƒ   r…   rL  rd  ro  ru  r‡  ÚFilterStmtsBaseNoder‰  ÚMultiLineBlockNodeÚ	Statementr}   rB  r_  rf  ri  ro   rG   rL   rJ   ú<module>rD     s±  ðð
ð ð #Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø Ð Ð Ð Ø 	€	€	€	Ø €€€Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ KÐ Kà *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ Dðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð 5Ð 4Ð 4Ð 4Ð 4Ð 4Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ *Ð *Ð *Ð *Ð *Ð *ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð RÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ð 6Ø&Ð&Ð&Ð&Ð&Ð&Ð&Ð&Ø5Ð5Ð5Ð5Ð5Ð5ð +€Ø"˜ K°Ð#AÑBÔBÐ Ø�iØTÐTÐTñô Ð ð €WˆT�]„]€ð#ð #ð #ðL!.ð !.ð !.ð !.ðHð ð ð ð(ð ð ðið ið ið ið iÐñ iô ið iðX4#ð 4#ð 4#ð 4#ð 4#Ð%ñ 4#ô 4#ð 4#ðn9#ð 9#ð 9#ð 9#ð 9#Ð!ñ 9#ô 9#ð 9#ðx5#ð 5#ð 5#ð 5#ð 5#Ð ñ 5#ô 5#ð 5#ðp6#ð 6#ð 6#ð 6#ð 6#Ð!ñ 6#ô 6#ð 6#ðr"ð "ð "ðJz?ð z?ð z?ð z?ð z?ˆ[Ô,Ð.>ñ z?ô z?ð z?ðzO
ð O
ð O
ð O
ð O
ØÔ"ØÔ#ØÔØñ	O
ô O
ð O
ðdð ð ð ð �{ñ ô ð ð&ð ð ð ð ð@ð ð ð ð ðDð ð ð&~ð ~ð ~ð ~ð ~ØÔ#Ð%5°{Ô7Lñ~ô ~ð ~ð ~ð ~rL   