o
    0h                     @  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____dictrefoffset____dict____next__z
Slots of 'z' cannot be determined)	r   getgetattrappend
isinstancestrhasattr	TypeError__name__)r
   slots r   O/var/www/vscode/kcb/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-   r2   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%   )r1   r2   zipr.   __setattr__r&   )r-   r4   r2   fieldvaluer   r   r    _dataclass_setstatec   s   
z@dataclass_slots.<locals>._add_slots.<locals>._dataclass_setstate__getstate____setstate__)r-   r   r   r.   )r-   r   r4   r5   r   r6   )r   r   r   dicttupler1   r2   set	itertoolschainfrom_iterablemap__mro__filterfalse__contains__popr   type	__bases__r,   r<   r=   )
r
   r"   r$   cls_dictfield_namesinherited_slots
field_namequalnamer3   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   )r1   is_dataclassr   _PARAMSfrozen)r
   rQ   paramsr$   r   rP   r    r      s   
C)r
   r   r   r   )
__future__r   r1   rA   typingr   r   collections.abcr   	_typeshedr   __all__r   r   r   r   r   r    <module>   s   