Ë
    ¬;jÝh  ã                  ó"  — d Z ddlmZ ddlmZmZmZmZmZ ddl	m
Z
 ddlmZmZmZ ddlmZmZmZ ddlmZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZmZ ddl m!Z!m"Z"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(m)Z) ddl*m+Z+ ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2 ddlm3Z3 ddl4m5Z5 erddlm6Z6  G d„ de«      Z7 G d„ de«      Z8d-d„Z9d.d„Z: G d„ d«      Z;d„ Z< G d„ d e3«      Z= G d!„ d"e5«      Z> G d#„ d$e$e)«      Z? G d%„ d&e$e;«      Z@ G d'„ d(e$e;«      ZA G d)„ d*e;e(e¬+«      ZBy,)/a  
Like described in the :mod:`parso.python.tree` module,
there's a need for an ast like module to represent the states of parsed
modules.

But now there are also structures in Python that need a little bit more than
that. An ``Instance`` for example is only a ``Class`` before it is
instantiated. This class represents these cases.

So, why is there also a ``Class`` class here? Well, there are decorators and
they change classes in Python 3.

Representation modules also define "magic methods". Those methods look like
``py__foo__`` and are typically mappable to the Python equivalents ``__call__``
and others. Here's a list:

====================================== ========================================
**Method**                             **Description**
-------------------------------------- ----------------------------------------
py__call__(arguments: Array)           On callable objects, returns types.
py__bool__()                           Returns True/False/None; None means that
                                       there's no certainty.
py__bases__()                          Returns a list of base classes.
py__iter__()                           Returns a generator of a set of types.
py__class__()                          Returns the class of an instance.
py__simple_getitem__(index: int/str)   Returns a a set of types of the index.
                                       Can raise an IndexError/KeyError.
py__getitem__(indexes: ValueSet)       Returns a a set of types of the index.
py__file__()                           Only on modules. Returns None if does
                                       not exist.
py__package__() -> List[str]           Only on modules. For the import system.
py__path__()                           Only on modules. For the import system.
py__get__(call_object)                 Only on instances. Simulates
                                       descriptors.
py__doc__()                            Returns the docstring for a value.
====================================== ========================================

é    )Úannotations)ÚListÚOptionalÚTupleÚTYPE_CHECKINGÚAny)Údebug)Úget_cached_parent_scopeÚexpr_is_dottedÚfunction_is_property)Úinference_state_method_cacheÚCachedMetaClassÚ&inference_state_method_generator_cache)Úcompiled)ÚLazyKnownValuesÚLazyTreeValue)ÚParserTreeFilter)ÚTreeNameDefinitionÚ	ValueName)Úunpack_arglistÚValuesArguments)ÚValueSetÚiterator_to_value_setÚ	NO_VALUESÚValueWrapper©ÚClassContext)ÚFunctionAndClassBaseÚFunctionMixin)Ú	Decoratee)ÚLazyGenericManagerÚTupleGenericManager)Úplugin_manager)Ú	Parameter)ÚBaseTreeParamName)ÚAbstractSignature)ÚInferenceStatec                  óB   ‡ — e Zd Zˆ fd„Zed„ «       Zeˆ fd„«       Zˆ xZS )Ú	ClassNamec                óB   •— t         ‰| �  ||«       || _        || _        y ©N)ÚsuperÚ__init__Ú_apply_decoratorsÚ_class_value)ÚselfÚclass_valueÚ	tree_nameÚname_contextÚapply_decoratorsÚ	__class__s        €úk/workspace/moltex-experiments/.pixi/envs/default/lib/python3.12/site-packages/jedi/inference/value/klass.pyr-   zClassName.__init__E   s"   ø€ Ü‰Ñ˜ yÔ1Ø!1ˆÔØ'ˆÕó    c              #  óú   K  — ddl m}  || j                  j                  | j                  | j                  «      }|D ]8  }| j
                  r&|j                  d | j                  ¬«      E d {  –—†  Œ5|–— Œ: y 7 Œ­w)Nr   )Útree_name_to_values)Úinstancer1   )Újedi.inference.syntax_treer9   Úparent_contextÚinference_stater2   r.   Ú	py__get__r/   )r0   r9   ÚinferredÚresult_values       r6   ÚinferzClassName.inferJ   sq   è ø€ õ 	CÙ&Ø×Ñ×/Ñ/°×1DÑ1DÀdÇnÁnóVˆó %ˆLØ×%Ò%Ø'×1Ñ1¸4ÈT×M^ÑM^Ð1Ó_×_Ñ_à"Ó"ñ	 %à_ús   ‚A*A;Á,A9Á-A;c                óz   •— t         ‰| �  }|dk(  r*| j                  j                  «       }|€|S t	        |«      ry|S )NÚfunctionÚproperty)r,   Úapi_typer2   Úget_definitionr   )r0   Útype_Ú
definitionr5   s      €r6   rE   zClassName.api_typeW   sD   ø€ ä‘Ñ ˆØ�JÒØŸ™×6Ñ6Ó8ˆJØÐ!Ø�Ü# JÔ/ð "Øˆr7   )	Ú__name__Ú
__module__Ú__qualname__r-   r   rA   rD   rE   Ú__classcell__©r5   s   @r6   r)   r)   D   s0   ø„ ô(ð
 ñ
#ó ð
#ð óó ôr7   r)   c                  ó@   ‡ — e Zd Z	 	 dˆ fd„	Zd„ Zd„ Zd„ Zˆ fd„Zˆ xZS )ÚClassFilterc                ód   •— t         ‰| �  |j                  «       |||¬«       || _        || _        y )N)Úuntil_positionÚorigin_scope)r,   r-   Ú
as_contextr/   Ú_is_instance)r0   r1   Únode_contextrQ   rR   Úis_instancer5   s         €r6   r-   zClassFilter.__init__i   s;   ø€ ä‰ÑØ×"Ñ"Ó$ lØ)Ø%ð 	ô 	
ð
 (ˆÔØ'ˆÕr7   c           	     ó„   — |D �cg c]0  }t        | j                  || j                  | j                   ¬«      ‘Œ2 c}S c c}w )N)r1   r2   r3   r4   )r)   r/   Ú_node_contextrT   )r0   ÚnamesÚnames      r6   Ú_convert_nameszClassFilter._convert_namess   sS   € ñ  ó
ñ  �$ô Ø ×-Ñ-ØØ!×/Ñ/Ø%)×%6Ñ%6Ð!6ö	ð
  ñ
ð 	
ùò 
s   …5=c                ó�   — | j                   }|�8|| j                  k(  s|| j                  k(  ryt        | j                  |«      }|�Œ8y)NTF)Ú_origin_scopeÚ_parser_scoper<   r
   Ú_parso_cache_node)r0   Únodes     r6   Ú_equals_origin_scopez ClassFilter._equals_origin_scope}   sP   € Ø×!Ñ!ˆØÐØ�t×)Ñ)Ò)¨T°T×5HÑ5HÒ-HØÜ*¨4×+AÑ+AÀ4ÓHˆDð Ñð r7   c                ó˜   — |j                   j                  d«       xs- |j                   j                  d«      xs | j                  «       S )NÚ__)ÚvalueÚ
startswithÚendswithra   )r0   rZ   s     r6   Ú_access_possiblezClassFilter._access_possible…   sC   € à—:‘:×(Ñ(¨Ó.Ð.ò +°$·*±*×2EÑ2EÀdÓ2Kò +Ø×(Ñ(Ó*ð	+r7   c                óp   •— t         ‰| �  |«      }|D �cg c]  }| j                  |«      sŒ|‘Œ c}S c c}w r+   )r,   Ú_filterrg   )r0   rY   rZ   r5   s      €r6   ri   zClassFilter._filterŠ   s6   ø€ Ü‘‘ Ó&ˆÙ!&ÓF¡˜¨$×*?Ñ*?ÀÕ*E’ ÑFÐFùÒFs   •3¬3)NNNF)	rI   rJ   rK   r-   r[   ra   rg   ri   rL   rM   s   @r6   rO   rO   h   s)   ø„ ØFJØ05õ(ò
òò+÷
Gð Gr7   rO   c                óä   — | D ]k  }|j                   dk(  sŒ|j                  d   j                  dk(  sŒ0|j                  d   j                  dk(  r y|j                  d   j                  dk(  sŒk y y	)
zž
    Returns:

    - ``True`` if ``@dataclass(init=True)``
    - ``False`` if ``@dataclass(init=False)``
    - ``None`` if not specified ``@dataclass()``
    Úargumentr   Úinité   ÚFalseFÚTrueTN)ÚtypeÚchildrenrd   )Ú	arg_nodesÚarg_nodes     r6   Úinit_param_valuert   �   sp   € ó ˆà�M‰M˜ZÓ'Ø×!Ñ! !Ñ$×*Ñ*¨fÓ4à× Ñ  Ñ#×)Ñ)¨WÒ4ÙØ×"Ñ" 1Ñ%×+Ñ+¨vÓ5Ùð ð r7   c           	     ób  — g }| j                  «       j                  «       }t        |j                  «       d„ ¬«      D ]ï  }|j                  j                  «       }|j                  d   }|j                  dk(  sŒ<|j                  dk(  sŒL|j                  d   }|j                  dk(  r|j                  d   j                  dk(  rŒ‡t        |j                  «      d	k  rd
}n|j                  d   }|j                  t        | j                  |j                  |j                  d   |¬«      «       Œñ |S )a3  
    ``cls`` is a :class:`ClassMixin`. The type is only documented as mypy would
    complain that some fields are missing.

    .. code:: python

        @dataclass
        class A:
            a: int
            b: str = "toto"

    For the previous example, the param names would be ``a`` and ``b``.
    c                ó   — | j                   S r+   )Ú	start_pos)rZ   s    r6   Ú<lambda>z+get_dataclass_param_names.<locals>.<lambda>´   s   € ¸$¿.º.r7   )Úkeyé   Ú	expr_stmtÚ	annassignÚ	atom_exprr   ÚClassVaré   Né   )r<   r2   Úannotation_nodeÚdefault_node)rS   Úget_global_filterÚsortedÚvaluesr2   rF   rq   rp   rd   ÚlenÚappendÚDataclassParamNamer<   )ÚclsÚparam_namesÚfilter_rZ   Údr|   r`   Údefaults           r6   Úget_dataclass_param_namesrŽ   ¤   s
  € ð €KØ�n‰nÓ×0Ñ0Ó2€GÜ�w—~‘~Ó'Ñ-H×IˆØ�N‰N×)Ñ)Ó+ˆØ—J‘J˜q‘Mˆ	Ø�6‰6�[Ó  Y§^¡^°{Ó%BØ×%Ñ% aÑ(ˆDØ�y‰y˜KÒ'¨D¯M©M¸!Ñ,<×,BÑ,BÀjÒ,PØä�9×%Ñ%Ó&¨Ò*Ø‘à#×,Ñ,¨QÑ/�à×ÑÔ1Ø"×1Ñ1ØŸ.™.Ø )× 2Ñ 2°1Ñ 5Ø$ô	 õ ð Jð& Ðr7   c                  ó  — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded	<   ded
<   d„ Zd„ Zd„ Zd„ Zed„ «       Z	d„ Z
 e«       d„ «       Z	 	 dd„Zd d„Zd!d„Zd„ Zd„ Zd"d„Z ed¬«      d„ «       Zd„ Zd„ Zd„ Zy)#Ú
ClassMixinr   Ú	tree_noder<   r'   r=   Úpy__bases__Úget_metaclassesÚget_metaclass_filtersÚget_metaclass_signaturesÚlist_type_varsc                 ó   — y©NT© ©r0   s    r6   Úis_classzClassMixin.is_classÔ   ó   € Ør7   c                 ó   — yr˜   r™   rš   s    r6   Úis_class_mixinzClassMixin.is_class_mixin×   rœ   r7   c                ó°   — ddl m} ddlm} | j	                  «       rt         || «      g«      S t         || j                  | j                  | |«      g«      S )Nr   )ÚTreeInstance)Ú	TypedDict)Újedi.inference.valuer    Újedi.inference.gradual.typingr¡   Úis_typeddictr   r=   r<   )r0   Ú	argumentsr    r¡   s       r6   Ú
py__call__zClassMixin.py__call__Ú   sM   € Ý5å;Ø×ÑÔÜ™Y t›_Ð-Ó.Ð.Ü™ d×&:Ñ&:¸D×<OÑ<OÐQUÐW`ÓaÐbÓcÐcr7   c                óB   — t        j                  | j                  d«      S )Nrp   )r   Úbuiltin_from_namer=   rš   s    r6   Úpy__class__zClassMixin.py__class__â   s   € Ü×)Ñ)¨$×*>Ñ*>ÀÓGÐGr7   c                óB   — t        | | j                  j                  «      S r+   )r   r‘   rZ   rš   s    r6   rZ   zClassMixin.nameå   s   € ä˜˜tŸ~™~×2Ñ2Ó3Ð3r7   c                ó.   — | j                   j                  S r+   )rZ   Ústring_namerš   s    r6   Ú
py__name__zClassMixin.py__name__é   s   € Ø�y‰y×$Ñ$Ð$r7   c              #  ó"  K  — | g}| –— | j                  «       D ]J  }|j                  «       D ]5  }	 |j                  } |«       D ]  }||vsŒ|j                  |«       |–— Œ Œ7 ŒL y # t        $ r 	 t        j                  d| |«       Y Œ^w xY w­w)Nz$Super class of %s is not a class: %s)r’   rA   Ú	py__mro__r‡   ÚAttributeErrorr	   Úwarning)r0   ÚmroÚlazy_clsr‰   Ú
mro_methodÚcls_news         r6   r¯   zClassMixin.py__mro__ì   sš   è ø€ àˆfˆØŠ
ð ×(Ñ(Ö*ˆHð  —~‘~Ö'�ð*Ø!$§¡�Jñ $.¦<˜Ø"¨#Ò-ØŸJ™J wÔ/Ø")›Mñ $0ñ' (ñ +øô &ò Uð	ô —M‘MÐ"HÈ$ÐPSÖTðUüs-   ‚.B±A(½BÁBÁ(!BÂ	BÂBÂBNFc              #  ó2  K  — |r,| j                  «       }|r| j                  ||«      E d {  –—†  | j                  «       D ]L  }|j                  «       r|j	                  |¬«      E d {  –—†  Œ.t        | |j                  «       ||¬«      –— ŒN |s€|r}ddlm}  || j                  d«      }|| k7  r^t        g «      }	|j                  |	«      D ]>  }
|
j	                  «       }t        |d «       t        |d «       t        |d «      }|€J ‚|–— Œ@ y y y y 7 Œæ7 Œ«­w)N)rV   )rU   rR   rV   r   )r¨   rp   )r“   r”   r¯   Úis_compiledÚget_filtersrO   rS   Újedi.inference.compiledr¨   r=   r   r¦   Únext)r0   rR   rV   Úinclude_metaclassesÚinclude_type_when_classÚmetaclassesr‰   r¨   rG   Úargsr:   Úinstance_filtersÚxs                r6   r¸   zClassMixin.get_filters  s  è ø€ áØ×.Ñ.Ó0ˆKÙØ×5Ñ5°kÀ;ÓO×OÐOà—>‘>Ö#ˆCØ�‰Ô ØŸ?™?°{˜?ÓC×CÑCä!Ø s§~¡~Ó'7Ø!-Ø +ôó ð	 $ñ Ñ6ÝAÙ% d×&:Ñ&:¸FÓCˆEØ˜Š}ô ' rÓ*�Ø %× 0Ñ 0°Ö 6�HØ'/×';Ñ';Ó'=Ð$äÐ)¨4Ô0ÜÐ)¨4Ô0ÜÐ-¨tÓ4�AØ˜=Ð(˜=Ø“Gñ !7ð ð  7ˆ{ð Pøð Dús"   ‚*D¬D­<DÁ)DÁ*B*DÄDc                óÀ   — | j                  «       D ]K  }t        |t        «      sŒt        |j                  t        «      sŒ/d|j                  j                  «       fc S  y)NT)FN)r“   Ú
isinstancer    Ú_wrapped_valueÚDataclassTransformerÚinit_mode_from_new)r0   Úmetas     r6   Ú$_has_dataclass_transform_metaclassesz/ClassMixin._has_dataclass_transform_metaclasses.  sO   € Ø×(Ñ(Ö*ˆDä˜4¤Õ+ä˜t×2Ñ2Ô4HÕIà˜T×0Ñ0×CÑCÓEÐEÒEð +ð r7   c                óÈ  — g }d}d}t        t        | j                  «       «      «      D ]§  }|sQt        |t        «      r|j
                  rd}|j
                  }n#t        |t        «      r|j                  «       \  }}|rŒV|sŒYt        |t        «      sŒj|j                  «       s|j                  «       �Œ‹|sŒŽ|j                  t        |«      «       Œ© |rt        |«      gS g S )a)  
        Returns: A non-empty list if the class has dataclass semantics else an
        empty list.

        The dataclass-like semantics will be assumed for any class that directly
        or indirectly derives from the decorated class or uses the decorated
        class as a metaclass.
        FNT)ÚreversedÚlistr¯   rÂ   rÄ   Úinit_mode_from_init_subclassr�   rÇ   Ú
ClassValueÚinit_param_modeÚextendrŽ   ÚDataclassSignature)r0   rŠ   Úis_dataclass_transformÚdefault_init_moder‰   s        r6   Ú#_get_dataclass_transform_signaturesz.ClassMixin._get_dataclass_transform_signatures9  sé   € ð ˆØ!&ÐØ,0ÐÜœD §¡Ó!1Ó2Ö3ˆCÙ)ô ˜sÔ$8Ô9Ø×8Ò8à-1Ð*Ø(+×(HÑ(HÑ%ô ˜s¤JÔ/ð ×@Ñ@ÓBñ >Ð*Ð,=ñ *Øò 'Ü˜s¤JÕ/à×'Ñ'Ô)Ø×+Ñ+Ó-Ñ5Ò:Kð ×"Ñ"Ü-¨cÓ2õðG 4ñN "Ü& s¨KÓ8Ð9Ð9àˆIr7   c                ó*  — | j                  «       }|r| j                  |«      }|r|S t        g «      }| j                  |«      }t	        |«      }| j                  «       }|r|S |j                  «       D �cg c]  }|j                  | «      ‘Œ c}S c c}w r+   )r“   r•   r   r¦   Úinit_or_new_funcrÒ   Úget_signaturesÚbind)r0   r½   Úsigsr¾   r:   Ú
init_funcsÚdataclass_sigsÚsigs           r6   rÕ   zClassMixin.get_signaturesq  s‘   € ð ×*Ñ*Ó,ˆÙØ×0Ñ0°Ó=ˆDÙØ�Ü˜rÓ"ˆØ—?‘? 4Ó(ˆÜ% hÓ/ˆ
à×AÑAÓCˆÙØ!Ð!à.8×.GÑ.GÔ.IÓJÑ.I s�C—H‘H˜T•NÐ.IÑJÐJùÒJs   Á5Bc                ó   — t        | «      S r+   r   rš   s    r6   Ú_as_contextzClassMixin._as_context„  s   € Ü˜DÓ!Ð!r7   c                óL   — |rd| j                  «       z  S | j                  «       S )NzType[%s])r­   )r0   Úadd_class_infos     r6   Úget_type_hintzClassMixin.get_type_hint‡  s$   € ÙØ §¡Ó 1Ñ1Ð1Ø�‰Ó Ð r7   ©r�   c                ó(  — ddl m} | j                  «       D ]h  }t        |t        «      s y|j
                  }t        |«      s y|j                  «       D ](  }t        ||«      r  y	 |j                  } |«       sŒ'  y Œj y# t        $ r Y   yw xY w)Nr   )ÚTypedDictClassFT)
r£   râ   r’   rÂ   r   Údatar   rA   r¤   r°   )r0   râ   r³   r‘   r‰   Úmethods         r6   r¤   zClassMixin.is_typeddictŒ  s‘   € õ 	AØ×(Ñ(Ö*ˆHÜ˜h¬Ô6ÙØ Ÿ™ˆIô " )Ô,Ùà—~‘~Ö'�Ü˜c >Ô2Úð	$Ø ×-Ñ-�Fñ •xÚ#ñ (ð +ð. øô &ò !ó !ð	!ús   Á(BÂ	BÂBc                ó†   ‡ ‡‡— ddl mŠ |s!t        j                  d«       t	        ‰ g«      S t	        ˆˆˆ fd„|D «       «      S )Nr   ©ÚGenericClassz:Class indexes inferred to nothing. Returning class insteadc              3  óZ   •K  — | ]"  } ‰‰t        ‰j                  |¬ «      «      –— Œ$ y­w))Úcontext_of_indexÚindex_valueN)r!   Úcontext)Ú.0rê   rç   Úcontextualized_noder0   s     €€€r6   Ú	<genexpr>z+ClassMixin.py__getitem__.<locals>.<genexpr>¯  s9   øè ø€ ð 	
ñ  /�ñ ØÜ"Ø%8×%@Ñ%@Ø +ô÷ñ  /ùs   ƒ(+)Újedi.inference.gradual.baserç   r	   r±   r   )r0   Úindex_value_setrí   rç   s   ` `@r6   Úpy__getitem__zClassMixin.py__getitem__ª  s?   ú€ Ý<ÙÜ�M‰MÐVÔWÜ˜T˜FÓ#Ð#Üõ 	
ñ  /ó	
ó 	
ð 		
r7   c                ó2   — ddl m}  || t        |«      «      S )Nr   ræ   )rï   rç   r"   )r0   Úgenerics_tuplerç   s      r6   Úwith_genericszClassMixin.with_genericsº  s   € Ý<ÙØÜ Ó/ó
ð 	
r7   c                óŽ   ‡ ‡— ddl m} ˆ ˆfd„}‰r*t         |‰ t        t	         |«       «      «      «      g«      S t        ‰ h«      S )Nr   ræ   c               3  ó„   •K  — ‰j                  «       D ](  } ‰j                  | j                  «       t        «      –— Œ* y­w)aa  
            The TypeVars in the resulting classes have sometimes different names
            and we need to check for that, e.g. a signature can be:

            def iter(iterable: Iterable[_T]) -> Iterator[_T]: ...

            However, the iterator is defined as Iterator[_T_co], which means it has
            a different type var name.
            N)r–   Úgetr­   r   )Útype_varr0   Útype_var_dicts    €€r6   Úremap_type_varsz3ClassMixin.define_generics.<locals>.remap_type_varsÄ  s8   øè ø€ ð !×/Ñ/Ö1�Ø#×'Ñ'¨×(;Ñ(;Ó(=¼yÓIÓIñ 2ùs   ƒ=A )rï   rç   r   r"   Útuple)r0   rù   rç   rú   s   ``  r6   Údefine_genericszClassMixin.define_genericsÁ  sL   ù€ Ý<õ	Jñ Ü™\ØÜ#¤E©/Ó*;Ó$<Ó=óð ó ð ô ˜˜ÓÐr7   )NFTT)ÚreturnzTuple[bool, Optional[bool]])rý   zList[DataclassSignature]©T)rI   rJ   rK   Ú__annotations__r›   rž   r¦   r©   rD   rZ   r­   r   r¯   r¸   rÇ   rÒ   rÕ   rÜ   rß   r   r¤   rñ   rô   rü   r™   r7   r6   r�   r�   Ê   sÉ   … ØƒNØÓØ#Ó#ØÓØÓØÓØ!Ó!ØÓòòòdòHð ñ4ó ð4ò%ñ ,Ó-ñ*ó .ð*ð@ :?ØFJóóB	ó6òpKò&"ó!ñ
 "¨%Ô0ñó 1ðò:
ò 
ó r7   r�   c                óN  — | j                  d«      }t        |«      dk(  rut        t        |«      «      }	 |j                  }|j                  «       j                  «       r4|j                  j                  j                  dk(  r| j                  d«      S |S |S # t        $ r Y |S w xY w)Nr-   rz   ÚobjectÚ__new__)
Úpy__getattribute__r†   rº   ÚiterÚclass_contextÚget_root_contextÚis_builtins_modulerZ   r¬   r°   )rd   rØ   rl   r  s       r6   rÔ   rÔ   Ù  s¦   € Ø×)Ñ)¨*Ó5€JÜ
ˆ:ƒ˜!ÒÜ”D˜Ó$Ó%ˆð		;Ø ×.Ñ.ˆMð ×-Ñ-Ó/×BÑBÔDØ×*Ñ*×/Ñ/×;Ñ;¸xÒGØ×/Ñ/°	Ó:Ð:ØÐˆ:Ðøô ò 	Øð Ðð	ús   µB Â	B$Â#B$c                  ó.   ‡ — e Zd ZdZˆ fd„Zd„ Zd„ Zˆ xZS )rˆ   zL
    Represent a field declaration on a class with dataclass semantics.
    c                óB   •— t         ‰| �  ||«       || _        || _        y r+   )r,   r-   r�   r‚   )r0   r<   r2   r�   r‚   r5   s        €r6   r-   zDataclassParamName.__init__ï  s"   ø€ Ü‰Ñ˜¨Ô3Ø.ˆÔØ(ˆÕr7   c                ó"   — t         j                  S r+   )r$   ÚPOSITIONAL_OR_KEYWORDrš   s    r6   Úget_kindzDataclassParamName.get_kindô  s   € Ü×.Ñ.Ð.r7   c                óp   — | j                   €t        S | j                  j                  | j                   «      S r+   )r�   r   r<   Ú
infer_noderš   s    r6   rA   zDataclassParamName.infer÷  s1   € Ø×ÑÐ'ÜÐà×&Ñ&×1Ñ1°$×2FÑ2FÓGÐGr7   )rI   rJ   rK   Ú__doc__r-   r  rA   rL   rM   s   @r6   rˆ   rˆ   ê  s   ø„ ñô)ò
/öHr7   rˆ   c                  ó*   ‡ — e Zd ZdZˆ fd„Zdd„Zˆ xZS )rÏ   zn
    It represents the ``__init__`` signature of a class with dataclass semantics.

    .. code:: python

    c                ó2   •— t         ‰| �  |«       || _        y r+   )r,   r-   Ú_param_names)r0   rd   rŠ   r5   s      €r6   r-   zDataclassSignature.__init__  s   ø€ Ü‰Ñ˜ÔØ'ˆÕr7   c                ó   — | j                   S r+   )r  )r0   Úresolve_starss     r6   Úget_param_namesz"DataclassSignature.get_param_names	  s   € Ø× Ñ Ð r7   )F)rI   rJ   rK   r  r-   r  rL   rM   s   @r6   rÏ   rÏ   þ  s   ø„ ñô(÷!r7   rÏ   c                  ó.   ‡ — e Zd ZdZddˆ fd„Zdd„Zˆ xZS )ÚDataclassDecoratora  
    A dataclass(-like) decorator with custom parameters.

    .. code:: python

        @dataclass(init=True) # this
        class A: ...

        @dataclass_transform
        def create_model(*, init=False): pass

        @create_model(init=False) # or this
        class B: ...
    c                óh   •— t         ‰| �  |«       | j                  |«      }|�|| _        y|| _        y)zÑ
        Args:
            function: Decoratee | function
            arguments: The parameters to the dataclass function decorator
            default_init: Boolean to indicate the default init value
        N)r,   r-   Ú_init_param_valuerÍ   )r0   rC   r¥   Údefault_initÚargument_initr5   s        €r6   r-   zDataclassDecorator.__init__  s=   ø€ ô 	‰Ñ˜Ô"Ø×.Ñ.¨yÓ9ˆà*Ð6ˆMð 	ÕØ<Hð 	Õr7   c                óª   — |j                   sy |j                   j                  dk(  r|j                   j                  n|j                   g}t        |«      S )NÚarglist)Úargument_noderp   rq   rt   )r0   r¥   rr   s      r6   r  z$DataclassDecorator._init_param_value*  sS   € Ø×&Ò&Øð ×&Ñ&×+Ñ+¨yÒ8ð ×#Ñ#×,Ò,à×)Ñ)Ð*ð 	ô   	Ó*Ð*r7   rþ   )r  Úbool©rý   zOptional[bool])rI   rJ   rK   r  r-   r  rL   rM   s   @r6   r  r    s   ø„ ñö
÷
+r7   r  c                  ó<   ‡ — e Zd ZdZˆ fd„Zdd„Zedd„«       Zˆ xZS )rÄ   aO  
    A class decorated with the ``dataclass_transform`` decorator. dataclass-like
    semantics will be assumed for any class that directly or indirectly derives
    from the decorated class or uses the decorated class as a metaclass.
    Attributes on the decorated class and its base classes are not considered to
    be fields.
    c                ó$   •— t         ‰| �  |«       y r+   )r,   r-   )r0   Úwrapped_valuer5   s     €r6   r-   zDataclassTransformer.__init__?  s   ø€ Ü‰Ñ˜Õ'r7   c                ó`  — | j                   j                  d«      }|syt        |«      d   }|j                  «       D ]o  }|j                  dk(  sŒ|j
                  sŒ |j
                  j                  dk(  sŒ:|j
                  j                  dk(  r y|j
                  j                  dk(  sŒo y y)	z$Default value if missing is ``True``r  Tr   rl   Úkeywordrn   Fro   )rÃ   r  rÊ   r  r¬   r‚   rp   rd   )r0   Únew_methodsÚ
new_methodÚparams       r6   rÅ   z'DataclassTransformer.init_mode_from_newB  sž   € à×)Ñ)×<Ñ<¸YÓGˆáØä˜+Ó& qÑ)ˆ
à×/Ñ/Ö1ˆEà×!Ñ! VÓ+Ø×&Ó&Ø×&Ñ&×+Ñ+¨yÓ8à×%Ñ%×+Ñ+¨wÒ6Ù Ø×'Ñ'×-Ñ-°Ó7Ùð 2ð r7   c                 ó   — yr˜   r™   rš   s    r6   rË   z1DataclassTransformer.init_mode_from_init_subclassX  s   € ð r7   )rý   r  r   )	rI   rJ   rK   r  r-   rÅ   rD   rË   rL   rM   s   @r6   rÄ   rÄ   7  s&   ø„ ñô(óð, òó ôr7   rÄ   c                  ó.   ‡ — e Zd ZdZ	 	 dˆ fd„Zd„ Zˆ xZS )ÚDataclassWrappera}  
    A class with dataclass semantics from a decorator. The init parameters are
    only from the current class and parent classes decorated where the ``init``
    parameter was ``True``.

    .. code:: python

        @dataclass
        class A: ... # this

        @dataclass_transform
        def create_model(): pass

        @create_model()
        class B: ... # or this
    c                ó2   •— t         ‰| �  |«       || _        y r+   )r,   r-   Úshould_generate_init)r0   r#  r-  r5   s      €r6   r-   zDataclassWrapper.__init__q  s   ø€ ô 	‰Ñ˜Ô'Ø$8ˆÕ!r7   c                óÞ   — g }t        t        | j                  «       «      «      D ]:  }t        |t        «      sŒ|j
                  sŒ!|j                  t        |«      «       Œ< t        |«      gS r+   )	rÉ   rÊ   r¯   rÂ   r+  r-  rÎ   rŽ   rÏ   )r0   rŠ   r‰   s      r6   rÕ   zDataclassWrapper.get_signaturesw  s\   € ØˆÜœD §¡Ó!1Ó2Ö3ˆCä˜3Ô 0Õ1Ø×,Ó,à×"Ñ"Ô#<¸SÓ#AÕBð 4ô # 3¨Ó4Ð5Ð5r7   )r-  r  )rI   rJ   rK   r  r-   rÕ   rL   rM   s   @r6   r+  r+  _  s   ø„ ñð"9Ø37õ9ö6r7   r+  c                  óÐ   — e Zd ZdZ e«       d„ «       Zd„ Z ed¬«      d„ «       Z ej                  «       d„ «       Z
 ee¬«      d„ «       Zdd	„Z ej                  «       d
„ «       Zy)rÌ   Úclassc                óÚ   — g }| j                   j                  «       }|€g S t        |«      D ]<  \  }}|rŒ	ddlm}  || j
                  |«      D ]  }||vsŒ|j                  |«       Œ Œ> |S )Nr   )Úfind_unknown_type_vars)r‘   Úget_super_arglistr   Ú!jedi.inference.gradual.annotationr2  r<   r‡   )r0   Úfoundr  Ústarsr`   r2  rø   s          r6   r–   zClassValue.list_type_vars…  sr   € àˆØ—.‘.×2Ñ2Ó4ˆØˆ?ØˆIä)¨'Ö2‰KˆE�4ÙØåPÙ2°4×3FÑ3FÈÖM�Ø 5Ò(à—L‘L Õ*ñ Nð 3ð ˆr7   c                ó–   — | j                   j                  «       }|r-ddlm} |j	                  | j
                  | j                  |«      S y )Nr   )r¥   )r‘   r3  Újedi.inferencer¥   ÚTreeArgumentsr=   r<   )r0   r  r¥   s      r6   Ú_get_bases_argumentszClassValue._get_bases_arguments—  s?   € Ø—.‘.×2Ñ2Ó4ˆÙÝ0Ø×*Ñ*¨4×+?Ñ+?À×ATÑATÐV]Ó^Ð^Ør7   r™   rà   c                ó@  — | j                  «       }|�)|j                  «       D ��cg c]
  \  }}|�Œ	|‘Œ }}}|r|S | j                  «       dk(  r| j                  j	                  «       rg S t        | j                  j                  j                  d«      «      gS c c}}w )Nr  )	r:  Úunpackr­   r<   r  r   r=   Úbuiltins_moduler  )r0   r¾   ry   rd   Úlsts        r6   r’   zClassValue.py__bases__ž  s˜   € à×(Ñ(Ó*ˆØÐØ+/¯;©;¬=ÔH©=™Z˜S %¸C¹K’5¨=ˆCÑHÙØ�
à�?‰?Ó Ò(Ø×'Ñ'×:Ñ:Ô<ØˆIÜØ× Ñ ×0Ñ0×CÑCÀHÓMó
ð ð 	ùó Is
   ¦
B±Bc                ó2   — t        j                  d|«       g S )NzUnprocessed metaclass %s)r	   r±   )r0   r½   rV   s      r6   r”   z ClassValue.get_metaclass_filters­  s   € ä�‰Ð0°+Ô>Øˆ	r7   c                ó˜  — | j                  «       }|�Z|j                  «       D ��cg c]  \  }}|dk(  sŒ|‘Œ }}}t        j                  d„ |D «       «      }t        d„ |D «       «      }|r|S | j	                  «       D ]@  }|j                  «       D ]+  }|j                  «       sŒ|j                  «       }|sŒ'|c c S  ŒB t        S c c}}w )NÚ	metaclassc              3  ó<   K  — | ]  }|j                  «       –— Œ y ­wr+   )rA   )rì   Ú
lazy_values     r6   rî   z-ClassValue.get_metaclasses.<locals>.<genexpr>·  s   è ø€ Ð,TÑRSÀJ¨Z×-=Ñ-=×-?ÑRSùs   ‚c              3  óB   K  — | ]  }|j                  «       sŒ|–— Œ y ­wr+   )r›   )rì   Úms     r6   rî   z-ClassValue.get_metaclasses.<locals>.<genexpr>¸  s   è ø€ Ð"J©k¨¸Q¿Z¹Z½\¤1©kùs   ‚˜)	r:  r<  r   Ú	from_setsr’   rA   r›   r“   r   )r0   r¾   ry   rd   rE  r½   Ú	lazy_baser…   s           r6   r“   zClassValue.get_metaclasses²  s½   € à×(Ñ(Ó*ˆØÐØ)-¯©¬ÔM©™:˜3 ¸#ÀÓ:L’¨ˆAÑMÜ"×,Ñ,Ñ,TÑRSÓ,TÓTˆKÜ"Ñ"J©kÓ"JÓJˆKÙØ"Ð"à×)Ñ)Ö+ˆIØ"Ÿ™Ö*�Ø—>‘>Õ#Ø"×2Ñ2Ó4�FÚØ%œñ	 +ð ,ô Ðùó Ns
   ¦C´Cc                óš   — | j                  «       }|€y|j                  j                  dk7  ryt        |j                  j                  «      S )zQ
        It returns ``True`` if ``class X(init=False):`` else ``False``.
        Nr  )r:  r  rp   rt   rq   )r0   Úbases_argumentss     r6   rÍ   zClassValue.init_param_modeÄ  sK   € ð ×3Ñ3Ó5ˆàÐ"Øà×(Ñ(×-Ñ-°Ò:ð ä × =Ñ =× FÑ FÓGÐGr7   c                ó   — g S r+   r™   )r0   r½   s     r6   r•   z#ClassValue.get_metaclass_signaturesÔ  s   € àˆ	r7   Nr   )rI   rJ   rK   rE   r   r–   r:  r’   r#   Údecorater”   r   r“   rÍ   r•   r™   r7   r6   rÌ   rÌ   ‚  s—   „ Ø€Há!Ó#ñó $ðò"ñ "¨"Ô-ñó .ðð €^×ÑÓñó ðñ "¨)Ô4ñó 5ðó"Hð  €^×ÑÓñó ñr7   rÌ   )rA  Nr   )rý   zList[DataclassParamName])Cr  Ú
__future__r   Útypingr   r   r   r   r   Újedir	   Újedi.parser_utilsr
   r   r   Újedi.inference.cacher   r   r   r8  r   Újedi.inference.lazy_valuer   r   Újedi.inference.filtersr   Újedi.inference.namesr   r   Újedi.inference.argumentsr   r   Újedi.inference.base_valuer   r   r   r   Újedi.inference.contextr   Újedi.inference.value.functionr   r   Újedi.inference.value.decoratorr    Újedi.inference.gradual.genericsr!   r"   Újedi.pluginsr#   Úinspectr$   r%   Újedi.inference.signaturer&   r'   r)   rO   rt   rŽ   r�   rÔ   rˆ   rÏ   r  rÄ   r+  rÌ   r™   r7   r6   Ú<module>r]     sû   ðñ%õL #ç <Õ <å ÷ñ ÷+ñ +å #ß DÝ 3ß >ß D÷ó å /ß MÝ 4ß SÝ 'Ý Ý 2Ý 6áÝ-ô!Ð"ô !ôH$GÐ"ô $GóNó*#÷LL ñ L ò^ô"HÐ*ô Hô(!Ð*ô !ô'+˜ }ô '+ôT%˜<¨ô %ôP 6�| Zô  6ôFT�Ð1¸_ö Tr7   