<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0-alpha1/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-GLhlTQ8iRABdZLl6O3oVMWSktQOp6b7In1Zl3/Jr59b6EGGoI1aFkw7cmDA6j6gD" crossorigin="anonymous">
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.3.0/css/all.min.css"
        integrity="sha512-SzlrxWUlpfuzQ+pcUCosxcglQRNAq/DZjVsC0lE40xsADsfeQoEypE+enwcOiGjk/bSuGGKHEyjSoQ1zVisanQ=="
        crossorigin="anonymous" referrerpolicy="no-referrer" />
</head>
</html>
B
    [$                 @   s   d dl 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 d dlmZ dd ZG dd deZe Zd	d
 Ze eG dd deZG dd deZdS )    N)InvariantExceptionCheckedType_restore_picklestore_invariants)
set_fields
check_typePFIELD_NO_INITIAL	serializecheck_global_invariants)	transformc             C   s   t | dko| d tkS )N   r   )lenr   )bases r   E/opt/alt/python37/lib64/python3.7/site-packages/pyrsistent/_pclass.py
_is_pclass   s    r   c                   s   e Zd Z fddZ  ZS )
PClassMetac                sh   t ||dd t||dd dtdd |d D  |d< t|rR|d  d	7  < tt| | |||S )
N_pclass_fields)name_pclass_invariantsZ__invariant__)_pclass_frozenc             s   s   | ]
}|V  qd S )Nr   ).0keyr   r   r   	<genexpr>   s    z%PClassMeta.__new__.<locals>.<genexpr>	__slots__)__weakref__)r   r   tupler   superr   __new__)Zmcsr   r   dct)	__class__r   r   r      s    zPClassMeta.__new__)__name__
__module____qualname__r   __classcell__r   r   )r    r   r      s   r   c             C   s<   t | ||| ||\}}|s,|| nt||| d S )N)r   Z	invariantappendsetattr)clsfieldr   valueresultinvariant_errorsZis_okZ
error_coder   r   r   _check_and_set_attr   s
    r,   c                   s   e Zd ZdZ fddZdd Zed"dd	Zd#d
dZdd Z	dd Z
dd Zdd Z fddZdd Zdd Zdd Zdd Zdd Zd d! Z  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       
         s&  t t| | }|dd }g }g }x| j D ]\}}||kr|d ksP||kr`||| }n|| }t| ||||| ||= q0|jt	k	rt
|jr| n|j}	t| |||	|| q0|jr0|d| j| q0W |s|rtt|t|d|rtdd|| jt|| j d|_|S )N_factory_fieldsz{0}.{1}zField invariant failedz0'{0}' are not among the specified fields for {1}z, T)r   r-   r   popr   itemsfactoryr,   initialr   callableZ	mandatoryr%   formatr!   r   r   AttributeErrorjoinr
   r   r   )
r'   kwargsr*   factory_fieldsZmissing_fieldsr+   r   r(   r)   r2   )r    r   r   r   .   s2    
zPClass.__new__c             O   sd   |r|d ||d < t |}x2| jD ](}||kr$t| |t}|tk	r$|||< q$W | jf 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.   )setr   getattr_MISSING_VALUEr    )selfargsr7   r8   r   r)   r   r   r   r9   N   s    z
PClass.setNFc                s8   t  | r S |r& fdd| jD  | f d|i S )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.
        c                s   i | ]}| kr | |qS r   r   )r   k)r7   r   r   
<dictcomp>{   s    z!PClass.create.<locals>.<dictcomp>r.   )
isinstancer   )r'   r7   r.   Zignore_extrar   )r7   r   createn   s
    	
zPClass.createc             C   sD   i }x:| j D ]0}t| |t}|tk	rt| j | j||||< qW |S )z
        Serialize the current PClass using custom serializer functions for fields where
        such have been supplied.
        )r   r:   r;   r	   Z
serializer)r<   r4   r*   r   r)   r   r   r   r	      s    zPClass.serializec             G   s
   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   )r<   Ztransformationsr   r   r   r      s    zPClass.transformc             C   s@   t || jr<x*| jD ] }t| |tt||tkrdS qW dS tS )NFT)r@   r    r   r:   r;   NotImplemented)r<   otherr   r   r   r   __eq__   s    zPClass.__eq__c             C   s
   | |k S )Nr   )r<   rC   r   r   r   __ne__   s    zPClass.__ne__c                s   t t fdd jD S )Nc             3   s   | ]}|t  |tfV  qd S )N)r:   r;   )r   r   )r<   r   r   r      s    z"PClass.__hash__.<locals>.<genexpr>)hashr   r   )r<   r   )r<   r   __hash__   s    zPClass.__hash__c                s2   t | ddrtd||tt| || d S )Nr   Fz'Can't set attribute, key={0}, value={1})r:   r5   r4   r   r-   __setattr__)r<   r   r)   )r    r   r   rH      s    zPClass.__setattr__c             C   s   t d|d S )Nz-Can't delete attribute, key={0}, use remove())r5   r4   )r<   r   r   r   r   __delattr__   s    zPClass.__delattr__c             C   s4   i }x*| j D ] }t| |t}|tk	r|||< qW |S )N)r   r:   r;   )r<   r*   r   r)   r   r   r   _to_dict   s    zPClass._to_dictc             C   s(   d | jjddd |   D S )Nz{0}({1})z, c             s   s"   | ]\}}d  |t|V  qdS )z{0}={1}N)r4   repr)r   r>   vr   r   r   r      s    z"PClass.__repr__.<locals>.<genexpr>)r4   r    r!   r6   rJ   r0   )r<   r   r   r   __repr__   s    
zPClass.__repr__c                s&   t  fdd jD }t j|ffS )Nc             3   s&   | ]}t  |r|t |fV  qd S )N)hasattrr:   )r   r   )r<   r   r   r      s    z$PClass.__reduce__.<locals>.<genexpr>)dictr   r   r    )r<   datar   )r<   r   
__reduce__   s    zPClass.__reduce__c             C   s   t | |  S )z5
        Returns an evolver for this object.
        )_PClassEvolverrJ   )r<   r   r   r   evolver   s    zPClass.evolverc             C   s   |   }||= | S )z
        Remove attribute given by name from the current instance. Raises AttributeError if the
        attribute doesn't exist.
        )rS   
persistent)r<   r   rS   r   r   r   remove   s    zPClass.remove)NF)N)r!   r"   r#   __doc__r   r9   classmethodrA   r	   r   rD   rE   rG   rH   rI   rJ   rM   rQ   rS   rU   r$   r   r   )r    r   r-   $   s"   	  
	
	r-   c                   s`   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
 fddZdd Z  ZS )rR   )_pclass_evolver_original_pclass_evolver_data_pclass_evolver_data_is_dirtyr.   c             C   s   || _ || _d| _t | _d S )NF)rX   rY   rZ   r9   r.   )r<   ZoriginalZinitial_dictr   r   r   __init__   s    z_PClassEvolver.__init__c             C   s
   | j | S )N)rY   )r<   itemr   r   r   __getitem__   s    z_PClassEvolver.__getitem__c             C   s2   | j |t|k	r.|| j |< | j| d| _| S )NT)rY   getr;   r.   addrZ   )r<   r   r)   r   r   r   r9      s
    
z_PClassEvolver.setc             C   s   |  || d S )N)r9   )r<   r   r)   r   r   r   __setitem__   s    z_PClassEvolver.__setitem__c             C   s4   || j kr(| j |= | j| d| _| S t|d S )NT)rY   r.   discardrZ   r5   )r<   r\   r   r   r   rU      s    
z_PClassEvolver.removec             C   s   |  | d S )N)rU   )r<   r\   r   r   r   __delitem__   s    z_PClassEvolver.__delitem__c             C   s&   | j r | jjf d| ji| jS | jS )Nr.   )rZ   rX   r    r.   rY   )r<   r   r   r   rT      s    
z_PClassEvolver.persistentc                s.   || j kr| || ntt| || d S )N)r   r9   r   rR   rH   )r<   r   r)   )r    r   r   rH      s    
z_PClassEvolver.__setattr__c             C   s   | | S )Nr   )r<   r\   r   r   r   __getattr__  s    z_PClassEvolver.__getattr__)r!   r"   r#   r   r[   r]   r9   r`   rU   rb   rT   rH   rc   r$   r   r   )r    r   rR      s   	rR   )ZsixZpyrsistent._checked_typesr   r   r   r   Zpyrsistent._field_commonr   r   r   r	   r
   Zpyrsistent._transformationsr   r   typer   objectr;   r,   Zadd_metaclassr-   rR   r   r   r   r   <module>   s   	 -