o
    wZh                     @  sh   d dl mZ d dlZd dlZd dlmZmZ er$d dlmZ d dl	m
Z
 dgZeddd	ZdddZdS )    )annotationsN)TYPE_CHECKINGTypeVar)	Generator)DataclassInstancedataclass_slots_Tr   )boundclstype[_T]returntype[DataclassInstance]c                   sP   t | s	J dddd d fdd}t| t j}t|d
d}|| |j|S )Nz Can only be used on dataclasses.r
   r   r   Generator[str, None, None]c                 s  s    | j d}|d u r.g }t| dddkr|d t| dddkr'|d |E d H  d S t|tr8|V  d S t| dsD|E d H  d S td	| j d
)N	__slots____weakrefoffset__r   __weakref__Z__dictrefoffset____dict____next__z
Slots of 'z' cannot be determined)	r   getgetattrappend
isinstancestrhasattr	TypeError__name__)r
   slots r   J/var/www/auris/lib/python3.10/site-packages/torch/utils/_backport_slots.py
_get_slots   s   




z#dataclass_slots.<locals>._get_slots	is_frozenboolweakref_slotc           
        s  d| j v rt| j dt| j }tdd t| D }ttj	
t | jdd }tt|jt	||r:dnd|d< |D ]}||d  qC|d	d  |d
d  t| dd }t| j| j|} |d urm|| _ddd}ddd}	|rd|vr|| _d|vr|	| _| S )Nr   z already specifies __slots__c                 s  s    | ]}|j V  qd S N)name.0fr   r   r   	<genexpr>;   s    z6dataclass_slots.<locals>._add_slots.<locals>.<genexpr>   r   )r   r   r   r   __qualname__selfr   r   objectc                   s   t  } fdd|D S )Nc                   s   g | ]}t  |jqS r   )r   r%   r&   r,   r   r   
<listcomp>a   s    zTdataclass_slots.<locals>._add_slots.<locals>._dataclass_getstate.<locals>.<listcomp>)dataclassesfields)r,   r1   r   r.   r   _dataclass_getstate_   s   
z@dataclass_slots.<locals>._add_slots.<locals>._dataclass_getstatestatelist[object]Nonec                 S  s2   t | }t||D ]\}}t| |j| q
d S r$   )r0   r1   zipr-   __setattr__r%   )r,   r3   r1   fieldvaluer   r   r   _dataclass_setstatec   s   
z@dataclass_slots.<locals>._add_slots.<locals>._dataclass_setstate__getstate____setstate__)r,   r   r   r-   )r,   r   r3   r4   r   r5   )r   r   r   dicttupler0   r1   set	itertoolschainfrom_iterablemap__mro__filterfalse__contains__popr   type	__bases__r+   r;   r<   )
r
   r!   r#   cls_dictfield_namesZinherited_slots
field_namequalnamer2   r:   r    r   r   
_add_slots/   s@   




z#dataclass_slots.<locals>._add_slotsF)r
   r   r   r   )r
   r   r!   r"   r#   r"   r   r   )r0   is_dataclassr   _PARAMSfrozen)r
   rO   paramsr#   r   rN   r   r      s   
C)r
   r   r   r   )
__future__r   r0   r@   typingr   r   collections.abcr   Z	_typeshedr   __all__r   r   r   r   r   r   <module>   s   