Ë
    n€9eæ%  ã                   ó¨   — 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 d dlmZ d„ Z G d„ de«      Z e«       Zd„ Z G d„ d	ee¬
«      Z G d„ de«      Zy)é    )ÚInvariantExceptionÚCheckedTypeÚ_restore_pickleÚstore_invariants)Ú
set_fieldsÚ
check_typeÚis_field_ignore_extra_complaintÚPFIELD_NO_INITIALÚ	serializeÚcheck_global_invariants©Ú	transformc                 ó:   — t        | «      dk(  xr | d   t        k(  S )Né   r   )Úlenr   )Úbasess    ú4/usr/lib/python3/dist-packages/pyrsistent/_pclass.pyÚ
_is_pclassr      s   € Üˆu‹:˜‰?Ò6˜u Q™x¬;Ñ6Ð6ó    c                   ó   ‡ — e Zd Zˆ fd„Zˆ xZS )Ú
PClassMetac                 óÎ   •— t        ||d¬«       t        ||dd«       dt        d„ |d   D «       «      z   |d<   t        |«      r|dxx   dz  cc<   t        t
        | �  | |||«      S )	NÚ_pclass_fields)ÚnameÚ_pclass_invariantsÚ__invariant__)Ú_pclass_frozenc              3   ó    K  — | ]  }|–— Œ y ­w©N© )Ú.0Úkeys     r   ú	<genexpr>z%PClassMeta.__new__.<locals>.<genexpr>   s   è ø€ Ò6\¸s´sÑ6\ùs   ‚Ú	__slots__)Ú__weakref__)r   r   Útupler   Úsuperr   Ú__new__)Úmcsr   r   ÚdctÚ	__class__s       €r   r(   zPClassMeta.__new__   sr   ø€ Ü�3˜Ð$4Õ5Ü˜˜eÐ%9¸?ÔKØ.´Ñ6\ÀcÐJZÑF[Ô6\Ó1\Ñ\ˆˆKÑô �eÔØ�ÓÐ 0Ñ0Óä”Z Ñ-¨c°4¸ÀÓDÐDr   )Ú__name__Ú
__module__Ú__qualname__r(   Ú__classcell__©r+   s   @r   r   r      s   ø„ ÷
Eð 
Er   r   c                 óŠ   — t        | |||«       |j                  |«      \  }}|s|j                  |«       y t        |||«       y r   )r   Ú	invariantÚappendÚsetattr)ÚclsÚfieldr   ÚvalueÚresultÚinvariant_errorsÚis_okÚ
error_codes           r   Ú_check_and_set_attrr<      s@   € Üˆs�E˜4 Ô'ØŸ™¨Ó.Ñ€Eˆ:ÙØ×Ñ 
Õ+ä�˜˜eÕ$r   c                   óˆ   ‡ — e Zd ZdZˆ fd„Zd„ Zedd„«       Zdd„Zd„ Z	d„ Z
d„ Zd	„ Zˆ fd
„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zˆ xZS )ÚPClassa­  
    A PClass is a python class with a fixed set of specified fields. PClasses are declared as python classes inheriting
    from PClass. It is defined the same way that PRecords are and behaves like a PRecord in all aspects except that it
    is not a PMap and hence not a collection but rather a plain Python object.


    More documentation and examples of PClass usage is available at https://github.com/tobgu/pyrsistent
    c           	      ó†  •— t         t        | �  | «      }|j                  dd «      }|j                  dd «      }g }g }| j                  j                  «       D ]ñ  \  }}||v r\|�||v r=t        t        ||«      r|j                  ||   |¬«      }	n|j                  ||   «      }	n||   }	t        | |||	||«       ||= Œf|j                  t        urBt        |j                  «      r|j                  «       n|j                  }
t        | |||
||«       Œº|j                  sŒÇ|j                  dj                  | j                  |«      «       Œó |s|rt!        t#        |«      t#        |«      d«      ‚|r4t%        dj                  dj'                  |«      | j                  «      «      ‚t)        || j*                  «       d|_        |S )	NÚ_factory_fieldsÚignore_extra)rA   z{0}.{1}zField invariant failedz0'{0}' are not among the specified fields for {1}ú, T)r'   r>   r(   Úpopr   Úitemsr	   Úfactoryr<   Úinitialr
   ÚcallableÚ	mandatoryr3   Úformatr,   r   r&   ÚAttributeErrorÚjoinr   r   r   )r5   Úkwargsr8   Úfactory_fieldsrA   Úmissing_fieldsr9   r   r6   r7   rF   r+   s              €r   r(   zPClass.__new__.   s¦  ø€ Ü”v˜sÑ+¨CÓ0ˆØŸ™Ð$5°tÓ<ˆØ—z‘z .°$Ó7ˆØˆØÐØ×-Ñ-×3Ñ3Ó5ò 	L‰KˆD�%Ø�v‰~Ø!Ð)¨T°^Ñ-CÜ6´v¸uÀlÔSØ %§¡¨f°T©lÈ Ó V™à %§¡¨f°T©lÓ ;™à" 4™L�EÜ# C¨°°e¸VÐEUÔVØ˜4‘LØ—‘Ô&7Ñ7Ü-5°e·m±mÔ-D˜%Ÿ-™-œ/È%Ï-É-�Ü#Ø˜  g¨vÐ7GõIà—“Ø×%Ñ% i×&6Ñ&6°s·|±|ÀTÓ&JÕKð!	Lñ$ ™~Ü$¤UÐ+;Ó%<¼eÀNÓ>SÐUmÓnÐnáÜ Ð!S×!ZÑ!ZØ—	‘	˜&Ó! 3§<¡<ó"1ó 2ð 2ô 	  ¨×(>Ñ(>Ô?à $ˆÔØˆr   c                 óÄ   — |r|d   ||d   <   t        |«      }| j                  D ]&  }||vsŒt        | |t        «      }|t        usŒ"|||<   Œ(  | j                  dd|i|¤ŽS )a  
        Set a field in the instance. Returns a new instance with the updated value. The original instance remains
        unmodified. Accepts key-value pairs or single string representing the field name and a value.

        >>> from pyrsistent import PClass, field
        >>> class AClass(PClass):
        ...     x = field()
        ...
        >>> a = AClass(x=1)
        >>> a2 = a.set(x=2)
        >>> a3 = a.set('x', 3)
        >>> a
        AClass(x=1)
        >>> a2
        AClass(x=2)
        >>> a3
        AClass(x=3)
        r   r   r@   r    )Úsetr   ÚgetattrÚ_MISSING_VALUEr+   )ÚselfÚargsrL   rM   r"   r7   s         r   rP   z
PClass.setR   sx   € ñ& Ø" 1™gˆF�4˜‘7‰Oä˜V›ˆà×&Ñ&ò 	(ˆCØ˜&Ò Ü  c¬>Ó:�Ø¤Ò.Ø"'�F˜3’Kð		(ð ˆt�~‰~ÑG¨nÐGÀÑGÐGr   c                 ó†   — t        || «      r|S |r"| j                  D �ci c]  }||v sŒ|||   “Œ }} | d||dœ|¤ŽS c c}w )a:  
        Factory method. Will create a new PClass of the current type and assign the values
        specified in kwargs.

        :param ignore_extra: A boolean which when set to True will ignore any keys which appear in kwargs that are not
                             in the set of fields on the PClass.
        )r@   rA   r    )Ú
isinstancer   )r5   rL   r@   rA   Úks        r   ÚcreatezPClass.creater   sY   € ô �f˜cÔ"ØˆMáØ,/×,>Ñ,>ÖN qÀ!ÀvÂ+�a˜ ™‘lÐNˆFÐNáÐX ?ÀÑXÐQWÑXÐXùò Os   Ÿ	>©>c                 ó®   — i }| j                   D ]C  }t        | |t        «      }|t        usŒt        | j                   |   j                  ||«      ||<   ŒE |S )z‚
        Serialize the current PClass using custom serializer functions for fields where
        such have been supplied.
        )r   rQ   rR   r   Ú
serializer)rS   rI   r8   r   r7   s        r   r   zPClass.serializeƒ   sa   € ð
 ˆØ×'Ñ'ò 	^ˆDÜ˜D $¬Ó7ˆEØœNÒ*Ü(¨×)<Ñ)<¸TÑ)B×)MÑ)MÈvÐW\Ó]��t’ð	^ð
 ˆr   c                 ó   — t        | |«      S )aT  
        Apply transformations to the currency PClass. For more details on transformations see
        the documentation for PMap. Transformations on PClasses do not support key matching
        since the PClass is not a collection. Apart from that the transformations available
        for other persistent types work as expected.
        r   )rS   Útransformationss     r   r   zPClass.transform�   s   € ô ˜˜Ó/Ð/r   c                 ó¨   — t        || j                  «      r7| j                  D ]'  }t        | |t        «      t        ||t        «      k7  sŒ' y yt
        S )NFT)rV   r+   r   rQ   rR   ÚNotImplemented)rS   Úotherr   s      r   Ú__eq__zPClass.__eq__™   sM   € Ü�e˜TŸ^™^Ô,Ø×+Ñ+ò !�Ü˜4 ¤~Ó6¼'À%ÈÌ~Ó:^Ó^Ù ð!ð äÐr   c                 ó   — | |k(   S r   r    )rS   r_   s     r   Ú__ne__zPClass.__ne__£   s   € Ø˜5‘=Ð Ð r   c                 óR   ‡ — t        t        ˆ fd„‰ j                  D «       «      «      S )Nc              3   óD   •K  — | ]  }|t        ‰|t        «      f–— Œ y ­wr   )rQ   rR   ©r!   r"   rS   s     €r   r#   z"PClass.__hash__.<locals>.<genexpr>¨   s   øè ø€ ÒcÈ˜3¤¨¨c´>Ó BÔCÑcùs   ƒ )Úhashr&   r   ©rS   s   `r   Ú__hash__zPClass.__hash__¦   s   ø€ ä”EÓcÈt×ObÑObÔcÓcÓdÐdr   c                 ó~   •— t        | dd«      rt        dj                  ||«      «      ‚t        t        | �  ||«       y )Nr   Fz'Can't set attribute, key={0}, value={1})rQ   rJ   rI   r'   r>   Ú__setattr__©rS   r"   r7   r+   s      €r   rj   zPClass.__setattr__ª   s<   ø€ Ü�4Ð)¨5Ô1Ü Ð!J×!QÑ!QÐRUÐW\Ó!]Ó^Ð^äŒf�dÑ'¨¨UÕ3r   c                 ó6   — t        dj                  |«      «      ‚)Nz-Can't delete attribute, key={0}, use remove())rJ   rI   )rS   r"   s     r   Ú__delattr__zPClass.__delattr__°   s   € Ü Ð!P×!WÑ!WÐX[Ó!\Ó]Ð]r   c                 ój   — i }| j                   D ]!  }t        | |t        «      }|t        usŒ|||<   Œ# |S r   )r   rQ   rR   )rS   r8   r"   r7   s       r   Ú_to_dictzPClass._to_dict³   sB   € ØˆØ×&Ñ&ò 	$ˆCÜ˜D #¤~Ó6ˆEØœNÒ*Ø#��s’ð	$ð
 ˆr   c                 ó²   — dj                  | j                  j                  dj                  d„ | j	                  «       j                  «       D «       «      «      S )Nz{0}({1})rB   c              3   óX   K  — | ]"  \  }}d j                  |t        |«      «      –— Œ$ y­w)z{0}={1}N)rI   Úrepr)r!   rW   Úvs      r   r#   z"PClass.__repr__.<locals>.<genexpr>¾   s%   è ø€ Ò*lÉDÈAÈq¨9×+;Ñ+;¸A¼tÀA»w×+GÑ*lùs   ‚(*)rI   r+   r,   rK   ro   rD   rg   s    r   Ú__repr__zPClass.__repr__¼   sH   € Ø× Ñ  §¡×!8Ñ!8Ø!%§¡Ñ*lÐTX×TaÑTaÓTc×TiÑTiÓTkÔ*lÓ!lónð 	nr   c                 óh   ‡ — t        ˆ fd„‰ j                  D «       «      }t        ‰ j                  |ffS )Nc              3   óT   •K  — | ]  }t        ‰|«      sŒ|t        ‰|«      f–— Œ! y ­wr   )ÚhasattrrQ   re   s     €r   r#   z$PClass.__reduce__.<locals>.<genexpr>Â   s)   øè ø€ Òc°#ÔPWÐX\Ð^aÕPb�Sœ' $¨Ó,Ô-Ñcùs   ƒ(•()Údictr   r   r+   )rS   Údatas   ` r   Ú
__reduce__zPClass.__reduce__À   s-   ø€ äÓc¸×9LÑ9LÔcÓcˆÜ §¡°Ð 7Ð7Ð7r   c                 ó6   — t        | | j                  «       «      S )z5
        Returns an evolver for this object.
        )Ú_PClassEvolverro   rg   s    r   ÚevolverzPClass.evolverÅ   s   € ô ˜d D§M¡M£OÓ4Ð4r   c                 óH   — | j                  «       }||= |j                  «       S )z‰
        Remove attribute given by name from the current instance. Raises AttributeError if the
        attribute doesn't exist.
        )r}   Ú
persistent)rS   r   r}   s      r   ÚremovezPClass.removeË   s%   € ð
 —,‘,“.ˆØ�DˆMØ×!Ñ!Ó#Ð#r   ©NFr   )r,   r-   r.   Ú__doc__r(   rP   ÚclassmethodrX   r   r   r`   rb   rh   rj   rm   ro   rt   rz   r}   r€   r/   r0   s   @r   r>   r>   %   sj   ø„ ñô"òHHð@ òYó ðYó ò0òò!òeô4ò^òònò8ò
5ö$r   r>   )Ú	metaclassc                   óR   ‡ — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
ˆ fd	„Zd
„ Zˆ xZS )r|   )Ú_pclass_evolver_originalÚ_pclass_evolver_dataÚ_pclass_evolver_data_is_dirtyr@   c                 óL   — || _         || _        d| _        t        «       | _        y r�   )r†   r‡   rˆ   rP   r@   )rS   ÚoriginalÚinitial_dicts      r   Ú__init__z_PClassEvolver.__init__Ø   s$   € Ø(0ˆÔ%Ø$0ˆÔ!Ø-2ˆÔ*Ü"›uˆÕr   c                 ó    — | j                   |   S r   )r‡   ©rS   Úitems     r   Ú__getitem__z_PClassEvolver.__getitem__Þ   s   € Ø×(Ñ(¨Ñ.Ð.r   c                 ó¬   — | j                   j                  |t        «      |ur1|| j                   |<   | j                  j	                  |«       d| _        | S ©NT)r‡   ÚgetrR   r@   Úaddrˆ   ©rS   r"   r7   s      r   rP   z_PClassEvolver.setá   sN   € Ø×$Ñ$×(Ñ(¨¬nÓ=ÀUÑJØ-2ˆD×%Ñ% cÑ*Ø× Ñ ×$Ñ$ SÔ)Ø15ˆDÔ.àˆr   c                 ó(   — | j                  ||«       y r   )rP   r•   s      r   Ú__setitem__z_PClassEvolver.__setitem__é   s   € Ø�‰��eÕr   c                 ó–   — || j                   v r1| j                   |= | j                  j                  |«       d| _        | S t	        |«      ‚r’   )r‡   r@   Údiscardrˆ   rJ   rŽ   s     r   r€   z_PClassEvolver.removeì   sJ   € Ø�4×,Ñ,Ñ,Ø×)Ñ)¨$Ð/Ø× Ñ ×(Ñ(¨Ô.Ø15ˆDÔ.ØˆKä˜TÓ"Ð"r   c                 ó&   — | j                  |«       y r   )r€   rŽ   s     r   Ú__delitem__z_PClassEvolver.__delitem__õ   s   € Ø�‰�DÕr   c                 ó–   — | j                   r2 | j                  j                  dd| j                  i| j                  ¤ŽS | j                  S )Nr@   r    )rˆ   r†   r+   r@   r‡   rg   s    r   r   z_PClassEvolver.persistentø   sS   € Ø×-Ò-Ø:�4×0Ñ0×:Ñ:ñ XÈ4×K_ÑK_ð XØ=A×=VÑ=VñXð Xð ×,Ñ,Ð,r   c                 óp   •— || j                   vr| j                  ||«       y t        t        | �  ||«       y r   )r$   rP   r'   r|   rj   rk   s      €r   rj   z_PClassEvolver.__setattr__ÿ   s.   ø€ Ø�d—n‘nÑ$Ø�H‰H�S˜%Õ ä”. $Ñ3°C¸Õ?r   c                 ó   — | |   S r   r    rŽ   s     r   Ú__getattr__z_PClassEvolver.__getattr__  s   € Ø�D‰zÐr   )r,   r-   r.   r$   rŒ   r�   rP   r—   r€   r›   r   rj   rŸ   r/   r0   s   @r   r|   r|   Õ   s6   ø„ Øx€Iò%ò/òòò#òò-ô@ör   r|   N)Úpyrsistent._checked_typesr   r   r   r   Úpyrsistent._field_commonr   r   r	   r
   r   r   Úpyrsistent._transformationsr   r   Útyper   ÚobjectrR   r<   r>   r|   r    r   r   ú<module>r¥      sX   ðß jÓ j÷÷ õ 2ò7ôE�ô Eñ “€ò%ôm$ˆ[ Jõ m$ô`1�Võ 1r   