HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //usr/local/lib/python3.10/dist-packages/pydantic/v1/__pycache__/generics.cpython-310.pyc
o

|��g�E�
@sXUddlZddlZddlZddlmZmZmZmZmZmZm	Z	m
Z
mZmZm
Z
mZmZmZmZddlmZmZddlmZmZddlmZddlmZddlmZmZddl m!Z!dd	l"m#Z#m$Z$m%Z%m&Z&m'Z'dd
l(m)Z)m*Z*ej+dkrzddlm,Z,ej+d
kr�ddlmZeddd�Z-eZ.e
eeee
edffZ/ee.eefZ0ej+dkr�ee/eefZ1eeee0fZ2neZ1eZ2e1�Z3e2�Z4Gdd�de�Z5dedeeefdefdd�Z6dee5de
edfddfdd�Z7i�8�j9Z:eee;d<dede	e.fd d!�Z<de
ee=e>ffd"d#�Z?d$ee5d%ee=efd&ee=e@fd'eee@fddf
d(d)�ZAdS)*�N)�
TYPE_CHECKING�Any�ClassVar�Dict�
ForwardRef�Generic�Iterator�List�Mapping�Optional�Tuple�Type�TypeVar�Union�cast)�WeakKeyDictionary�WeakValueDictionary)�	Annotated�Literal)�gather_all_validators)�DeferredType)�	BaseModel�create_model)�JsonWrapper)�display_as_type�get_all_type_hints�get_args�
get_origin�typing_base)�
all_identical�lenient_issubclass���
)�_UnionGenericAlias�r"�)r�
GenericModelT�GenericModel)�bound.)r"�	c@s�eZdZUdZdZeeed<eree	e
dfed<deede
eee	eedffdeefd	d
�Zedeede	eedfdefdd��Zed
edeeefdd��ZdS)r(�F�__concrete__.�__parameters__�cls�params�returnc
sdtdtf�fdd�}t�||��}|dur|S�jr$t�jvr$td��t|t	�s,|f}�t
ur=tdd�|D��r=td	��t�d
�sKtd�j
�d���t�|�tt�j|��}t|��|���re|re�S��|�}t��}t����}d
d�|D�}�fdd�|D�}	t�\}
}ttt
t|f|
p��j�ft	��|��d|dd�|	���}|t|<|r�d}
|}t j!|jj"}|
|ur�|�#||�}
|d7}|
|us��j$|_$t	dd�t%|���D��}||_|r�||_|t||�<t&|�dkr�|t||d�<t'||	||�|S)a�Instantiates a new class from a generic class `cls` and type variables `params`.

        :param params: Tuple of types the class . Given a generic class
            `Model` with 2 type variables and a concrete model `Model[str, int]`,
            the value `(str, int)` would be passed to `params`.
        :return: New model class inheriting from `cls` with instantiated
            types described by `params`. If no parameters are given, `cls` is
            returned as is.

        �_paramsr0cs@t|�}t|�dkrt|dt�rt|d�|df}�||fS)N�r�)r�len�
isinstance�list�tuple)r1�args�r.r+�?/usr/local/lib/python3.10/dist-packages/pydantic/v1/generics.py�
_cache_keyWs
z2GenericModel.__class_getitem__.<locals>._cache_keyNz?Cannot parameterize a concrete instantiation of a generic modelcss�|]}t|t�VqdS�N)r5r��.0�paramr+r+r:�	<genexpr>e��z1GenericModel.__class_getitem__.<locals>.<genexpr>zDType parameters should be placed on typing.Generic, not GenericModelr-zType z< must inherit from typing.Generic before being parameterizedcSs"i|]
\}}t|�tur||�qSr+)rr)r>�k�vr+r+r:�
<dictcomp>us"z2GenericModel.__class_getitem__.<locals>.<dictcomp>cs*i|]}|�jvr|t��j|jf�qSr+)�
__fields__r�
field_info)r>rBr9r+r:rDws*)�
__module__�__base__�
__config__�__validators__�__cls_kwargs__�_cSsi|]}|d�qSr<r+r=r+r+r:rD�sr3r)(r�CacheKey�_generic_types_cache�getr,r�	__bases__�	TypeErrorr5r7r(�any�hasattr�__name__�check_parameters_count�dict�zipr-r�keys�values�__concrete_name__rr�items�get_caller_frame_inforr
rrG�__parameterized_bases__�_assigned_parameters�sys�modules�__dict__�
setdefault�Config�iter_contained_typevarsr4�_prepare_model_fields)r.r/r;�cached�typevars_map�
model_name�
validators�
type_hints�instance_type_hints�fields�model_module�called_globally�
created_model�object_by_reference�reference_name�reference_module_globals�
new_paramsr+r9r:�__class_getitem__Ksr




����
��zGenericModel.__class_getitem__cCs*dd�|D�}d�|�}|j�d|�d�S)a�Compute class name for child classes.

        :param params: Tuple of types the class . Given a generic class
            `Model` with 2 type variables and a concrete model `Model[str, int]`,
            the value `(str, int)` would be passed to `params`.
        :return: String representing a the new class where `params` are
            passed to `cls` as type variables.

        This method can be overridden to achieve a custom naming scheme for GenericModels.
        cSsg|]}t|��qSr+)rr=r+r+r:�
<listcomp>�sz2GenericModel.__concrete_name__.<locals>.<listcomp>z, �[�])�joinrT)r.r/�param_names�params_componentr+r+r:rZ�s
zGenericModel.__concrete_name__rgc#s��dttdtdtttf�fdd�}�jD]6}t|t�sqt|dd�s&q�tvrE|tvr/q�fdd	�t���D�}|||�EdHq||��EdHqdS)
a�
        Returns unbound bases of cls parameterised to given type variables

        :param typevars_map: Dictionary of type applications for binding subclasses.
            Given a generic class `Model` with 2 type variables [S, T]
            and a concrete model `Model[str, int]`,
            the value `{S: str, T: int}` would be passed to `typevars_map`.
        :return: an iterator of generic sub classes, parameterised by `typevars_map`
            and other assigned parameters of `cls`

        e.g.:
        ```
        class A(GenericModel, Generic[T]):
            ...

        class B(A[V], Generic[V]):
            ...

        assert A[int] in B.__parameterized_bases__({V: int})
        ```
        �
base_model�mapped_typesr0c3sB�t�fdd�|jD��}|�|�}||us|�urdS|VdS)Nc3s�|]}�|VqdSr<r+r=�r|r+r:r@�s�zQGenericModel.__parameterized_bases__.<locals>.build_base_model.<locals>.<genexpr>)r7r-rt)r{r|�base_parameters�parameterized_baser9r}r:�build_base_model�s�

z>GenericModel.__parameterized_bases__.<locals>.build_base_modelr-Ncsi|]\}}|��||��qSr+)rO)r>�key�value)rgr+r:rD�s�z8GenericModel.__parameterized_bases__.<locals>.<dictcomp>)	r
r(�ParametrizationrrP�
issubclass�getattrr^r[)r.rgr�r{r|r+)r.rgr:r]�s,���
�




��z$GenericModel.__parameterized_bases__N)rTrG�__qualname__�	__slots__r,r�bool�__annotations__rr�TypeVarTyper
r'rrrt�classmethod�strrZr�rr]r+r+r+r:r(@s
6_( �type_�type_mapr0c	s��s|St|�}t|�}|tur|^}}tt|��t|�fS|tus,tjdkr2|tur2��	||�S|r{t�fdd�|D��}t
||�rF|S|durbt|t�rbt|t�sbt
|dd�durbt
t|j�}|dushJ�tjdkrw|tjurwt||�S||S|s�t|t�r�|js�|j}t�fdd�|D��}t
||�r�|S||St|ttf�r�t�fdd�|D��}t
||�r�|S|S|s�t|t�r�t|j��|_|S��	||�}t|t�r�t|�S|S)	a�Return type with all occurrences of `type_map` keys recursively replaced with their values.

    :param type_: Any type, class or generic alias
    :param type_map: Mapping from `TypeVar` instance to concrete types.
    :return: New type representing the basic structure of `type_` with all
        `typevar_map` keys recursively replaced.

    >>> replace_types(Tuple[str, Union[List[str], float]], {str: int})
    Tuple[int, Union[List[int], float]]

    r%c3��|]}t|��VqdSr<��
replace_types)r>�arg�r�r+r:r@rAz replace_types.<locals>.<genexpr>N�_namer!c3r�r<r�)r>�tr�r+r:r@0rAc3r�r<r�)r>�elementr�r+r:r@8rA)rrrr�r7�
ExtLiteralr_�version_inforrOrr5rr��typingr��types�	UnionTyper$r r(r,r-r	r6r�
inner_typer�r)	r�r��	type_args�origin_type�annotated_type�annotations�resolved_type_args�
resolved_list�new_typer+r�r:r��sT
��



r�r.�
parametersc	CsPt|�}t|j�}||kr&||krdnd}td|�d|j�d|�d|����dS)N�many�fewzToo z parameters for z	; actual z, expected )r4r-rQrT)r.r��actual�expected�descriptionr+r+r:rUMs
"�rU�
DictValuesrCccs��t|t�r|VdSt|d�r!t|�s!t|t�r!|jEdHdSt|ttf�r6|D]	}t	|�EdHq*dSt
|�}|D]	}t	|�EdHq<dS)zdRecursively iterate through all subtypes and type args of `v` and yield any typevars that are found.r-N)r5rrSrr r(r-r�r6rdr)rC�varr8r�r+r+r:rdXs�

��rdc
Cs^zt�d�}Wnty}ztd�|�d}~wty!YdSw|j}|�d�|j|ufS)z�
    Used inside a function to check whether it was called globally

    Will only work against non-compiled code, therefore used only in pydantic.generics

    :returns Tuple[module_name, called_globally]
    r2z2This function must be used inside another functionN)NFrT)r_�	_getframe�
ValueError�RuntimeError�AttributeError�	f_globalsrO�f_locals)�previous_caller_frame�e�
frame_globalsr+r+r:r\gs
��r\rorlrkrgcCsz|j��D]5\}}||vr|jjtusJ�q|jjtus"J|jj��||}t||�}||_||_|��||j|<qdS)zP
    Replace DeferredType fields with concrete type hints and prepare them.
    N)	rEr[r��	__class__rr��outer_type_�preparer�)rorlrkrgr��field�field_type_hint�
concrete_typer+r+r:reys

�re)Br_r�r�rrrrrrrr	r
rrr
rrr�weakrefrr�typing_extensionsrrr��pydantic.v1.class_validatorsr�pydantic.v1.fieldsr�pydantic.v1.mainrr�pydantic.v1.typesr�pydantic.v1.typingrrrrr�pydantic.v1.utilsrr r�r$r'r�rMr��GenericTypesCache�AssignedParametersrNr^r(r�rUrYr�r�r�rdr�r�r\�typerer+r+r+r:�<module>sZ
D


<"R�
�
�
��