Ë
    ñEj™F  ã                   ó�  — d Z ddlZddlZddlZddlmZ ddlmZ 	 ddlmZ ddl
mZmZmZmZmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlm Z  ddl!m"Z" ddl#m$Z$m%Z%m&Z&m'Z' ddl(m)Z)m*Z* ddl+m,Z, er,ddl(m-Z- ddl
m.Z.m/Z/  edd¬«      Z0eed   df   Z1 G d„ d«      Z2g d¢Z3 ed«      Z4ejj                  dk\  r³ eejl                  e$f¬«      edddddddddddœ
de7d e7d!e7d"e7d#e7d$e7d%eeee8   df   d&ee7   d'ee7   d(e7d)eee4   gd*f   fd+„«       «       Z9 eejl                  e$f¬«      edddddddddddœ
d,ee4   de7d e7d!e7d"e7d#e7d$e7d%eeee8   df   d&ee7   d'ee7   d(e7d)d*fd-„«       «       Z9n¬ eejl                  e$f¬«      edddddddddd.œ	de7d e7d!e7d"e7d#e7d$e7d%eeee8   df   d&ee7   d'ee7   d)eee4   gd*f   fd/„«       «       Z9 eejl                  e$f¬«      edddddddddd.œ	d,ee4   de7d e7d!e7d"e7d#e7d$e7d%eeee8   df   d&ee7   d'ee7   d)d*fd0„«       «       Z9 eejl                  e$f¬«      	 dJdddddddddddœ
d,eee4      de7d e7d!e7d"e7d#e7d$e7d%eeee8   df   d&ee7   d'ee7   d(e7d)eeee4   gd*f   d*f   fd1„«       Z9ed2ed   d3e7d)eed   ddf   fd4„«       Z: G d5„ d«      Z;d6ed   d%ee   d&e7d7e<d)df
d8„Z=dKd:„Z>d2ed   d;ed)dfd<„Z?edfd6ed   d%ee   d7ee<   d)ed=   fd>„Z@ejj                  d?k\  rd@ddAe<d)e7fdB„ZAn
d@ddAe<d)e7fdC„ZAdLdE„ZBdDddFe<d3ed)dfdG„ZCd,ee   d)e7fdH„ZDd6ed   d%ee   d)d9fdI„ZEy# e	$ r Y �Œ"w xY w)MaX  
The main purpose is to enhance stdlib dataclasses by adding validation
A pydantic dataclass can be generated from scratch or from a stdlib one.

Behind the scene, a pydantic dataclass is just like a regular one on which we attach
a `BaseModel` and magic methods to trigger the validation of the data.
`__init__` and `__post_init__` are hence overridden and have extra logic to be
able to validate input data.

When a pydantic dataclass is generated from scratch, it's just a plain dataclass
with validation triggered at initialization

The tricky part if for stdlib dataclasses that are converted after into pydantic ones e.g.

```py
@dataclasses.dataclass
class M:
    x: int

ValidatedM = pydantic.dataclasses.dataclass(M)
```

We indeed still want to support equality, hashing, repr, ... as if it was the stdlib one!

```py
assert isinstance(ValidatedM(x=1), M)
assert ValidatedM(x=1) == M(x=1)
```

This means we **don't want to create a new dataclass that inherits from it**
The trick is to create a wrapper around `M` that will act as a proxy to trigger
validation without altering default `M` behaviour.
é    N)Úcontextmanager)Úwraps)Úcached_property)ÚTYPE_CHECKINGÚAnyÚCallableÚClassVarÚDictÚ	GeneratorÚOptionalÚTypeÚTypeVarÚUnionÚoverload)Údataclass_transformé   )Úgather_all_validators)Ú
BaseConfigÚ
ConfigDictÚExtraÚ
get_config)ÚValidationError)ÚDataclassTypeError)ÚFieldÚ	FieldInfoÚRequiredÚ	Undefined)Úcreate_modelÚvalidate_model)ÚClassAttribute)Ú	BaseModel)ÚCallableGeneratorÚNoArgAnyCallableÚ
DataclassTÚ	Dataclass)ÚboundÚDataclassProxyc                   ó  — e Zd ZU eeeef      ed<   ee   ed<   eed      ed<   ee	   ed<   eed      ed<   ee	   ed<   ee
e      ed<   eed gd	f      ed
<   ee	   ed<   dededd	fd„Zede
d    ddfd„«       Zede
d   deddfd„«       Zy	)r%   Ú__dataclass_fields__Ú__dataclass_params__).NÚ__post_init__Ú__pydantic_run_validation__Ú__post_init_post_parse__Ú__pydantic_initialised__Ú__pydantic_model__NÚ__pydantic_validate_values__Ú#__pydantic_has_field_info_default__ÚargsÚkwargsÚreturnc                  ó   — y ©N© ©Úselfr2   r3   s      úZ/var/www/html/peoplehubportal/venv/lib/python3.12/site-packages/pydantic/v1/dataclasses.pyÚ__init__zDataclass.__init__P   s   € Øó    Úclsr"   c                  ó   — y r6   r7   ©r=   s    r:   Ú__get_validators__zDataclass.__get_validators__S   ó   € àr<   r$   Úvc                  ó   — y r6   r7   ©r=   rB   s     r:   Ú__validate__zDataclass.__validate__W   rA   r<   )Ú__name__Ú
__module__Ú__qualname__r	   r
   Ústrr   Ú__annotations__r   Úboolr   r!   Úobjectr;   Úclassmethodr@   rE   r7   r<   r:   r%   r%   B   sõ   … à& t¨C°¨H¡~Ñ6Ó6Ø& s™mÓ+Ø ¨Ñ 3Ñ4Ó4ð &.¨d¡^Ó3Ø"*¨8°IÑ+>Ñ"?Ó?Ø"*¨4¡.Ó0Ø$ T¨)¡_Ñ5Ó5Ø&.¨x¸¸ÀtÐ8KÑ/LÑ&MÓMØ-5°d©^Ó;ð	 &ð 	°Fð 	¸tó 	ð 
ð	 D¨Ñ$5ð 	Ð:Mò 	ó 
ð	ð 
ð	˜d <Ñ0ð 	°Sð 	¸\ò 	ó 
ñ	r<   )Ú	dataclassÚset_validationÚ$create_pydantic_model_from_dataclassÚis_builtin_dataclassÚmake_dataclass_validatorÚ_T©é   é
   )Úfield_specifiersTF.©
ÚinitÚreprÚeqÚorderÚunsafe_hashÚfrozenÚconfigÚvalidate_on_initÚ	use_proxyÚkw_onlyrY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   r4   ÚDataclassClassOrWrapperc        
          ó   — y r6   r7   rX   s
             r:   rN   rN   h   ó   € ð 	r<   Ú_clsc       
          ó   — y r6   r7   )rf   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   s              r:   rN   rN   y   s   € ð  	r<   ©	rY   rZ   r[   r\   r]   r^   r_   r`   ra   c        	          ó   — y r6   r7   rh   s	            r:   rN   rN   �   s   € ð 	r<   c       	          ó   — y r6   r7   )
rf   rY   rZ   r[   r\   r]   r^   r_   r`   ra   s
             r:   rN   rN   �   re   r<   c       
         ó€   ‡‡‡‡‡‡‡‡	‡
‡— t        |«      Šdt        t           ddfˆˆˆˆ
ˆˆˆˆˆ	ˆf
d„}| €|S  || «      S )a  
    Like the python standard lib dataclasses but with type validation.
    The result is either a pydantic dataclass that will validate input data
    or a wrapper that will trigger validation around a stdlib dataclass
    to avoid modifying it directly
    r=   r4   rc   c           
      ó  •
— ‰�‰nYt        | «      xrM | j                  d   t        u xs6 t        t	        | «      «      t        t	        | j                  d   «      «      k(  }|rd}t        | «      }d}n_| j                  xs d}t        j                  dk\  rt        j                  | ‰‰‰‰
‰‰‰	¬«      }nt        j                  | ‰‰‰‰
‰‰¬«      }d}‰€|n‰}t        | ‰||«        |j                  j                  di | j                  | i¤Ž |S )	Nr   Ú FrT   )rY   rZ   r[   r\   r]   r^   rb   )rY   rZ   r[   r\   r]   r^   Tr7   )rQ   Ú	__bases__rL   ÚsetÚdirr'   Ú__doc__ÚsysÚversion_infoÚdataclassesrN   Ú#_add_pydantic_validation_attributesr/   Ú__try_update_forward_refs__rF   )r=   Úshould_use_proxyÚ
dc_cls_docÚdc_clsÚdefault_validate_on_initÚshould_validate_on_initr[   r^   rY   rb   r\   rZ   Ú
the_configr]   ra   r`   s         €€€€€€€€€€r:   Úwrapzdataclass.<locals>.wrapÆ   s*  ø€ ð Ð$ñ ô % SÓ)ò `Ø—]‘] 1Ñ%¬Ð/Ò^´3´s¸3³x³=ÄCÌÈCÏMÉMÐZ[ÑL\ÓH]ÓD^Ñ3^ð 	ñ ØˆJÜ# CÓ(ˆFØ',Ñ$àŸ™Ò*¨ˆJÜ×Ñ 7Ò*Ü$×.Ñ.ØØØØØØ +Ø!Ø#ô	‘ô %×.Ñ.Ø˜d¨°"¸EÈ{Ðciô�ð (,Ð$à>NÐ>VÑ":Ð\lÐÜ+¨C°Ð=TÐV`ÔaØ=ˆ×!Ñ!×=Ñ=ÑTÀÇÁÈsÐ@SÒTØˆr<   )r   r   r   )rf   rY   rZ   r[   r\   r]   r^   r_   r`   ra   rb   r}   r|   s    `````` ``` @r:   rN   rN   ¯   sD   ÿù€ ô* ˜FÓ#€Jð#”$”s‘)ð #Ð 9÷ #ö #ðJ €|Øˆá�‹:Ðr<   r=   Úvaluec              #   ób   K  — | j                   }	 || _         | –— || _         y # || _         w xY w­wr6   )r,   )r=   r~   Úoriginal_run_validations      r:   rO   rO   ñ   s6   è ø€ à!×=Ñ=ÐðBØ*/ˆÔ'ØŠ	à*AˆÕ'øÐ*AˆÕ'üs   ‚/�# ›/£	,¬/c                   ó†   — e Zd ZdZded   ddfd„Zdededefd	„Zd
edefd„Z	dededdfd„Z
dedefd„Zdd„Zdedd fd„Zy)r'   Ú__dataclass__ry   r%   r4   Nc                 ó2   — t         j                  | d|«       y )Nr‚   )rL   Ú__setattr__)r9   ry   s     r:   r;   zDataclassProxy.__init__þ   s   € Ü×Ñ˜4 °&Õ9r<   r2   r3   c                 ó~   — t        | j                  d«      5   | j                  |i |¤Žcd d d «       S # 1 sw Y   y xY w)NT)rO   r‚   r8   s      r:   Ú__call__zDataclassProxy.__call__  s<   € Ü˜D×.Ñ.°Ó5ñ 	7Ø%�4×%Ñ% tÐ6¨vÑ6÷	7÷ 	7ò 	7ús   —3³<Únamec                 ó.   — t        | j                  |«      S r6   )Úgetattrr‚   )r9   r‡   s     r:   Ú__getattr__zDataclassProxy.__getattr__  s   € Ü�t×)Ñ)¨4Ó0Ð0r<   Ú_DataclassProxy__nameÚ_DataclassProxy__valuec                 ó0   — t        | j                  ||«      S r6   )Úsetattrr‚   )r9   r‹   rŒ   s      r:   r„   zDataclassProxy.__setattr__  s   € Ü�t×)Ñ)¨6°7Ó;Ð;r<   Úinstancec                 ó.   — t        || j                  «      S r6   )Ú
isinstancer‚   )r9   r�   s     r:   Ú__instancecheck__z DataclassProxy.__instancecheck__  s   € Ü˜( D×$6Ñ$6Ó7Ð7r<   c                 óR   — t        t        j                  | j                  «      «      S r6   )r'   Úcopyr‚   )r9   s    r:   Ú__copy__zDataclassProxy.__copy__  s   € ÜœdŸi™i¨×(:Ñ(:Ó;Ó<Ð<r<   Úmemoc                 óT   — t        t        j                  | j                  |«      «      S r6   )r'   r”   Údeepcopyr‚   )r9   r–   s     r:   Ú__deepcopy__zDataclassProxy.__deepcopy__  s   € ÜœdŸm™m¨D×,>Ñ,>ÀÓEÓFÐFr<   )r4   r'   )rF   rG   rH   Ú	__slots__r   r;   r   r†   rI   rŠ   r„   rK   r’   r•   r™   r7   r<   r:   r'   r'   û   s•   „ Ø€Ið:˜t KÑ0ð :°Tó :ð7˜cð 7¨Sð 7°Só 7ð1 ð 1¨ó 1ð< #ð <°ð <¸ó <ð8¨#ð 8°$ó 8ó=ðG ð GÐ)9ô Gr<   ry   rx   c           	      ób  ‡‡‡‡— | j                   Št        ‰«      dddt        dt        ddfˆˆfd„«       Št        | d«      rW	 | j                  j
                  Št        ‰«      dddt        dt        ddfˆˆfd	„«       }t        | d
‰«       t        | d|«       n1t        ‰«      dddt        dt        ddfˆfd„«       }t        | d
|«       t        | dt        d|«      «       t        | dd«       t        | dt        | ‰|«      «       t        | dt        «       t        | dt        t        «      «       t        | dt        t        «      «       | j                  j                  j                   r)| j"                  j$                  st        | dt&        «       yyy# t        $ r | j                  ŠY �ŒTw xY w)a  
    We need to replace the right method. If no `__post_init__` has been set in the stdlib dataclass
    it won't even exist (code is generated on the fly by `dataclasses`)
    By default, we run validation after `__init__` or `__post_init__` if defined
    r9   r%   r2   r3   r4   Nc           
      ó
  •— ‰j                   t        j                  k(  r> ‰| g|¢­i |j                  «       D ��ci c]  \  }}|| j                  v sŒ||“Œ c}}¤Ž y ‰j                   t        j
                  k(  rr|j                  «       D ]!  \  }}| j                  j                  ||«       Œ#  ‰| g|¢­i |j                  «       D ��ci c]  \  }}|| j                  v sŒ||“Œ c}}¤Ž y  ‰| g|¢­i |¤Ž y c c}}w c c}}w r6   )Úextrar   ÚignoreÚitemsr)   ÚallowÚ__dict__Ú
setdefault)r9   r2   r3   ÚkrB   r_   rY   s        €€r:   Úhandle_extra_initz>_add_pydantic_validation_attributes.<locals>.handle_extra_init"  sà   ø€ à�<‰<œ5Ÿ<™<Ò'Ù�Ðd˜Òd°&·,±,³.× c©$¨!¨QÀAÈ×IbÑIbÒDb  A¡Ó cÓdà�\‰\œUŸ[™[Ò(ØŸ™›ò /‘��1Ø—‘×(Ñ(¨¨AÕ.ð/á�Ðd˜Òd°&·,±,³.× c©$¨!¨QÀAÈ×IbÑIbÒDb  A¡Ó cÓdñ �Ð'˜Ò' Ó'ùó !dùó
 !ds   ºC9ÁC9Ã	C?Ã C?r+   c                 óü   •— ‰j                   dk(  r ‰| g|¢­i |¤Ž | j                  j                  r.| j                  «        t	        | d«      r | j
                  |i |¤Ž ‰j                   dk(  r ‰| g|¢­i |¤Ž y y )NÚbefore_validationr-   Úafter_validation)Úpost_init_callÚ	__class__r,   r0   Úhasattrr-   )r9   r2   r3   r_   Ú	post_inits      €€r:   Únew_post_initz:_add_pydantic_validation_attributes.<locals>.new_post_init5  sƒ   ø€ à×$Ñ$Ð(;Ò;Ù˜$Ð0 Ò0¨Ò0à�~‰~×9Ò9Ø×1Ñ1Ô3Ü˜4Ð!;Ô<Ø1�D×1Ñ1°4ÐB¸6ÒBà×$Ñ$Ð(:Ò:Ù˜$Ð0 Ò0¨Ó0ð ;r<   r;   c                 óú  •—  ‰| g|¢­i |¤Ž | j                   j                  r| j                  «        t        | d«      rzi }t	        | j                   j
                  j                  «       «      D ]5  \  }}|j                  t        j                  u sŒ#	 ||   ||j                  <   Œ7  | j                  di |¤Ž y y # t        $ r6 |j                  |j                  |j                  «      ||j                  <   Y ŒŠw xY w)Nr-   r7   )r©   r,   r0   rª   Ú	enumerater)   ÚvaluesÚ_field_typert   Ú_FIELD_INITVARr‡   Ú
IndexErrorÚgetÚdefaultr-   )r9   r2   r3   Úinitvars_and_valuesÚiÚfr¤   s         €r:   Únew_initz5_add_pydantic_validation_attributes.<locals>.new_initG  sé   ø€ á˜dÐ4 TÒ4¨VÒ4à�~‰~×9Ò9Ø×1Ñ1Ô3ä�tÐ7Ô8ð
 79Ð#Ü% d§n¡n×&IÑ&I×&PÑ&PÓ&RÓSò X‘D�A�qØ—}‘}¬×(BÑ(BÒBðXà:>¸q¹'Ð/°·±Ò7ð	Xð .�×-Ñ-ÑDÐ0CÓDð 9øô  *ò XØ:@¿*¹*ÀQÇVÁVÈQÏYÉYÓ:WÐ/°·±Ó7ðXús   ÂB;Â;<C:Ã9C:r,   r.   Fr/   r0   rE   r@   r„   )r;   r   r   rª   r+   Ú__wrapped__ÚAttributeErrorrŽ   r    rP   Ú_dataclass_validate_valuesrM   Ú_validate_dataclassÚ_get_validatorsr/   Ú
__config__Úvalidate_assignmentr*   r^   Ú&_dataclass_validate_assignment_setattr)	ry   r_   r`   rx   r¬   r¸   r¤   rY   r«   s	    `    @@@r:   ru   ru     s¿  û€ ð �?‰?€Dä
ˆ4ƒ[ð
( ð 
(´Cð 
(Ä3ð 
(È4õ 
(ó ð
(ô ˆv�Ô'ð	-Ø×,Ñ,×8Ñ8ˆIô 
ˆyÓ	ð
	1 ð 
	1´Cð 
	1Ä3ð 
	1È4õ 
	1ó 
ð
	1ô 	�˜
Ð$5Ô6Ü�˜¨Õ7ô 
ˆt‹ð	E˜;ð 	E¬sð 	E¼cð 	EÀdô 	Eó 
ð	Eô, 	�˜
 HÔ-äˆFÐ1´>ÐB_ÐaqÓ3rÔsÜˆFÐ.°Ô6ÜˆFÐ(Ô*NÈvÐW]Ð_iÓ*jÔkÜˆFÐ2Ô4NÔOÜˆF�N¤KÔ0CÓ$DÔEÜˆFÐ(¬+´oÓ*FÔGà× Ñ ×+Ñ+×?Ò?È×HcÑHc×HjÒHjÜ�˜Ô'MÕNð IkÐ?øôk ò 	-Ø×,Ñ,‹Ið	-ús   ÁF ÆF.Æ-F.r"   c              #   ó(   K  — | j                   –— y ­wr6   )rE   r?   s    r:   r½   r½   k  s   è ø€ Ø
×
Ñ
Óùs   ‚rB   c                 ó8  — t        | d«      5  t        || «      r|j                  «        |cd d d «       S t        |t        t        f«      r | |Ž cd d d «       S t        |t
        «      r | di |¤Žcd d d «       S t        | j                  ¬«      ‚# 1 sw Y   y xY w)NT)Ú
class_namer7   )rO   r‘   r0   ÚlistÚtupleÚdictr   rF   rD   s     r:   r¼   r¼   o  s�   € Ü	˜˜TÓ	"ñ 	>Ü�a˜ÔØ×*Ñ*Ô,Ø÷	>ñ 	>ô ˜œD¤%˜=Ô)Ù˜�7÷	>ñ 	>ô ˜œ4Ô Ù‘8˜‘8÷	>ñ 	>ô %°·±Ô=Ð=÷	>ð 	>ús   �BµBÁBÁ:BÂBr!   c                 ó<  — i }t        j                  | «      D ]¯  }t        }d }|j                  t         j                  ur|j                  }n/|j
                  t         j                  ur|j
                  }nt        }t        |t        «      r
|}d| _	        nt        d||dœ|j                  ¤Ž}|j                  |f||j                  <   Œ± t        | «      }t        | j                   f|| j"                  |ddidœ|¤Ž}	|�	||	_        |	S | j$                  xs d|	_        |	S )NT)r´   Údefault_factoryÚ__resolve_forward_refs__F)r¾   rG   Ú__validators__Ú__cls_kwargs__rm   r7   )rt   Úfieldsr   r´   ÚMISSINGrÈ   r   r‘   r   r1   r   ÚmetadataÚtyper‡   r   r   rF   rG   rq   )
ry   r_   rx   Úfield_definitionsÚfieldr´   rÈ   Ú
field_infoÚ
validatorsÚmodels
             r:   rP   rP   |  s*  € ð
 )+ÐÜ×#Ñ# FÓ+ò AˆÜ ˆØ8<ˆð �=‰=¤× 3Ñ 3Ñ3Ø—m‘m‰GØ×"Ñ"¬+×*=Ñ*=Ñ=Ø#×3Ñ3‰OäˆGä�gœyÔ)Ø ˆJØ9=ˆFÕ6äÐb wÀÑbÐSX×SaÑSaÑbˆJà).¯©°ZÐ(@Ð˜%Ÿ*™*Ò%ð%Aô( ' vÓ.€JÜ+Ø�‰ð àØ×$Ñ$Ø!Ø2°EÐ:ñ ð ñ €Eð #-Ð"8�J€E„MØ€Lð ?E¿n¹nÒ>RÐPR€E„MØ€Lr<   )rU   é   Úobjr£   c                 óJ   — t        t        t        | «      |d «      t        «      S r6   )r‘   r‰   rÏ   r   ©rÖ   r£   s     r:   Ú_is_field_cached_propertyrÙ   ¥  s   € Üœ'¤$ s£)¨Q°Ó5´ÓGÐGr<   c                  ó   — y)NFr7   rØ   s     r:   rÙ   rÙ   ª  s   € Ør<   r9   c                 ó  — t        | d«      ry t        | dd«      rJ| j                  j                  «       D ��ci c]$  \  }}t        |t        «      st        | |«      s||“Œ& }}}n:| j                  j                  «       D ��ci c]  \  }}t        | |«      rŒ||“Œ }}}t        | j                  || j                  ¬«      \  }}}|r|‚| j                  j                  |«       t        j                  | dd«       y c c}}w c c}}w )Nr.   r1   Fr?   T)r‰   r¡   rŸ   r‘   r   rÙ   r   r/   r©   ÚupdaterL   r„   )r9   r£   rB   Ú
input_dataÚdÚ_Úvalidation_errors          r:   r»   r»   ®  sú   € ô ˆtÐ/Ô0ØÜˆtÐ:¸EÔBð
 Ÿ™×+Ñ+Ó-÷
á��1Ü˜q¤)Ô,Ô0IÈ$ÐPQÔ0Rð ˆq‰Dð
ˆ
ò 
ð (,§}¡}×':Ñ':Ó'<×g™t˜q !ÔD]Ð^bÐdeÕDf�a˜‘dÐgˆ
ÑgÜ+¨D×,CÑ,CÀZÐUY×UcÑUcÔdÑ€A€qÐ
ÙØÐØ‡M�M×Ñ˜ÔÜ
×Ñ�tÐ7¸Õ>ùó
ùó hs   ¸)C<ÂDÂDr‡   c                 ó^  — | j                   rŠt        | j                  «      }|j                  |d «       | j                  j
                  j                  |d «      }|r;|j                  |||| j                  ¬«      \  }}|rt        |g| j                  «      ‚t        j                  | ||«       y )N)Úlocr=   )r.   rÆ   r¡   Úpopr/   Ú
__fields__r³   Úvalidater©   r   rL   r„   )r9   r‡   r~   rÞ   Úknown_fieldÚerror_s         r:   rÀ   rÀ   Ä  s‘   € Ø×$Ò$Ü�—‘ÓˆØ	�‰ˆd�DÔØ×-Ñ-×8Ñ8×<Ñ<¸TÀ4ÓHˆÙØ'×0Ñ0°¸¸tÈÏÉÐ0ÓX‰MˆE�6ÙÜ% v h°·±Ó?Ð?ä
×Ñ�t˜T 5Õ)r<   c           	      ó¾   — t        j                  | «      xrG t        | d«       xr8 t        | j                  «      j                  t        t        | di «      «      «      S )a¿  
    Whether a class is a stdlib dataclass
    (useful to discriminated a pydantic dataclass that is actually a wrapper around a stdlib dataclass)

    we check that
    - `_cls` is a dataclass
    - `_cls` is not a processed pydantic dataclass (with a basemodel attached)
    - `_cls` is not a pydantic dataclass inheriting directly from a stdlib dataclass
    e.g.
    ```
    @dataclasses.dataclass
    class A:
        x: int

    @pydantic.dataclasses.dataclass
    class B(A):
        y: int
    ```
    In this case, when we first check `B`, we make an extra check and look at the annotations ('y'),
    which won't be a superset of all the dataclass fields (only the stdlib fields i.e. 'x')
    r/   rJ   )rt   Úis_dataclassrª   ro   r)   Ú
issupersetr‰   )rf   s    r:   rQ   rQ   Ñ  sZ   € ô. 	× Ñ  Ó&ò 	aÜ˜Ð2Ó3Ð3ò	aä�×)Ñ)Ó*×5Ñ5´c¼'À$ÐHYÐ[]Ó:^Ó6_Ó`ðr<   c              #   óN   K  — t        t        | |d¬«      «      E d{  –—†  y7 Œ­w)zÔ
    Create a pydantic.dataclass from a builtin dataclass to add type validation
    and yield the validators
    It retrieves the parameters of the dataclass and forwards them to the newly created dataclass
    T)r_   ra   N)r½   rN   )ry   r_   s     r:   rR   rR   î  s   è ø€ ô œy¨¸È$ÔOÓP×PÒPús   ‚%�#ž%r6   )r=   rc   r4   r"   )r9   r%   r4   N)Frq   r”   rt   rr   Ú
contextlibr   Ú	functoolsr   r   ÚImportErrorÚtypingr   r   r   r	   r
   r   r   r   r   r   r   Útyping_extensionsr   Úclass_validatorsr   r_   r   r   r   r   Úerror_wrappersr   Úerrorsr   rÌ   r   r   r   r   Úmainr   r   Úutilsr    r!   r"   r#   r$   rc   r%   Ú__all__rS   rs   rÑ   rK   rL   rN   rO   r'   rI   ru   r½   r¼   rP   rÙ   r»   rÀ   rQ   rR   r7   r<   r:   ú<module>r÷      sÖ  ðñ óB Û Û 
Ý %Ý ð	Ý)÷
 u× t× tÑ tå 1å 3ß =Ó =Ý +Ý &ß 9Ó 9ß .Ý !áÝß;á˜¨[Ô9€Jà# D¨Ñ$5Ð7GÐ$GÑHÐ÷ñ ò4€ñ ˆTƒ]€à×Ñ�wÒá¨;×+<Ñ+<¸eÐ*DÔEØð ØØØØ!ØØ8<Ø+/Ø$(Øòàðð ðð ð	ð
 ðð ðð ðð �j $ v¡,°Ð4Ñ5ðð # 4™.ðð ˜D‘>ðð ðð 
�4˜‘8�*Ð7Ð7Ñ	8òó ó Fðñ ¨;×+<Ñ+<¸eÐ*DÔEØð ØØØØ!ØØ8<Ø+/Ø$(ØòØ�2‰hðð ðð ð	ð
 ðð ðð ðð ðð �j $ v¡,°Ð4Ñ5ðð # 4™.ðð ˜D‘>ðð ðð 
#òó ó Fññ$ ¨;×+<Ñ+<¸eÐ*DÔEØð ØØØØ!ØØ8<Ø+/Ø$(òàðð ðð ð	ð
 ðð ðð ðð �j $ v¡,°Ð4Ñ5ðð # 4™.ðð ˜D‘>ðð 
�4˜‘8�*Ð7Ð7Ñ	8òó ó Fðñ ¨;×+<Ñ+<¸eÐ*DÔEØð ØØØØ!ØØ8<Ø+/Ø$(òØ�2‰hðð ðð ð	ð
 ðð ðð ðð ðð �j $ v¡,°Ð4Ñ5ðð # 4™.ðð ˜D‘>ðð 
#òó ó Fðñ   {×'8Ñ'8¸%Ð&@ÔAà#ð>ð ØØØØØØ48Ø'+Ø $Øò>Ø
�4˜‘8Ñ
ð>ð ð>ð ð	>ð
 	ð>ð ð>ð ð>ð ð>ð �*˜d 6™l¨DÐ0Ñ1ð>ð ˜t‘nð>ð ˜‰~ð>ð ð>ð ˆ8�T˜"‘X�JÐ 9Ð9Ñ:Ð<UÐUÑVò>ó Bð>ðB ðB˜˜\Ñ*ð B°4ð B¸IÀdÈ<ÑFXÐZ^Ð`dÐFdÑ<eò Bó ðB÷Gñ Gð4SOØ�ÑðSOà�ÑðSOð ðSOð ð	SOð
 
óSOólð
>˜T ,Ñ/ð 
>°Cð 
>¸Ló 
>ð #Ø $ñ$Ø�Ñð$à�‰Ið$ð ˜‘ð$ð 
ˆ+Ñó	$ðN ×Ñ�vÒðH {ð H°sð H¸tô Hð
 {ð °sð ¸tó ó?ð,
*°ð 
*ÀCð 
*ÐPSð 
*ÐX\ó 
*ð˜t C™yð ¨Tó ð:Q T¨+Ñ%6ð QÀÀZÑ@Pð QÐUhô QøðI ò 	âð	ús   œL< Ì<MÍM