
    ztf                    n   d dl mZ d dlZd dlZd dlZd dlZd dlmZmZm	Z	m
Z
mZmZmZ erd dlZd dlZd dlmZ d dlmZ  G d de      Z eed ee
e               Z G d	 d
      ZdZ ej6                  e      5  d dlmZ ddd       dZ ej6                  e      5  d dlmZ ddd        G d d      Zedd       Zed d       Zd dZed!d       Z ed"d       Z d#dZ ed$d       Z!ed%d       Z!d%dZ!ed&d       Z"ed'd       Z"d'dZ"d(dZ#	 d)	 	 	 	 	 d*dZ$y# 1 sw Y   xY w# 1 sw Y   xY w)+    )annotationsN)TYPE_CHECKINGAnyIteratorListProtocolcastoverload)	BaseModel)	TypeGuardc                  J    e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   y)	_DataclassParamsboolinitrepreqorderunsafe_hashfrozenN__name__
__module____qualname____annotations__     b/var/www/html/software/conda/envs/higlass/lib/python3.12/site-packages/psygnal/_dataclass_utils.pyr   r      s!    
J
JHKLr   r   GenericAliasc                      e Zd ZU ded<   y)	AttrsTypeztuple[attrs.Attribute, ...]__attrs_attrs__Nr   r   r   r   r    r       s    00r   r    __dataclass_params__)_DATACLASS_PARAMS__dataclass_fields__)_DATACLASS_FIELDSc                  "    e Zd ZU ded<   ded<   y)DataClassTyper   r"   zdict[str, dataclasses.Field]r$   Nr   r   r   r   r'   r'   (   s    **66r   r'   c                     y Nr   objs    r   is_dataclassr,   -   s    ?Br   c                     y r)   r   r*   s    r   r,   r,   1   s    ;>r   c                |    t        | t              rt        | t              s| n
t        |       }t        |t              S )z)Return True if the object is a dataclass.)
isinstancetyper   hasattrr%   )r+   clss     r   r,   r,   5   s8     c4 C)F 	#Y 
 3)**r   c                     y r)   r   r*   s    r   is_attrs_classr4   ?   s    =@r   c                     y r)   r   r*   s    r   r4   r4   C   s    9<r   c                    t         j                  j                  dd      }t        | t              r| n
t	        |       }||j                  |      S dS )z+Return True if the class is an attrs class.attrNF)sysmodulesgetr/   r0   has)r+   r7   r2   s      r   r4   r4   G   sB    ;;??64(DC&#DIC ,488C=7%7r   c                     y r)   r   r*   s    r   is_pydantic_modelr=   N   s    @Cr   c                     y r)   r   r*   s    r   r=   r=   R   s    <?r   c                    t         j                  j                  dd      }t        | t              r| n
t	        |       }|duxr t        ||j                        S )z1Return True if the class is a pydantic BaseModel.pydanticN)r8   r9   r:   r/   r0   
issubclassr   )r+   r@   r2   s      r   r=   r=   V   sG    {{z40HC&#DIC4GJsH4F4F$GGr   c                     y r)   r   r*   s    r   is_msgspec_structrC   ]   s    EHr   c                     y r)   r   r*   s    r   rC   rC   a   s    ADr   c                    t         j                  j                  dd      }t        | t              r| n
t	        |       }|duxr t        ||j                        S )z/Return True if the class is a `msgspec.Struct`.msgspecN)r8   r9   r:   r/   r0   rA   Struct)r+   rF   r2   s      r   rC   rC   e   sE    kkooi.GC&#DIC$B:c7>>#BBr   c                   t        | t              r| n
t        |       }t        dt        |t        d            }||j
                  S t        |dd      }|t        |dd      du ryt        |dd      }||j                  d      ryt        |j                  d	d      d
k(  ryt        |dd      }|t        t        |dd            S y)z$Return True if the object is frozen.z_DataclassParams | NoneN
__config__allow_mutationFTmodel_configr   r   _frozen_setattrs__struct_config__)	r/   r0   r	   getattrr#   r   r:   __setattr__r   )r+   r2   paramscfgs       r   	is_frozenrR   l   s     C&#DIC+WS:KT-RSF}} #|T
*C
73(8$?5H #~t
,C
3778, s
D15GG
#*D
1C
GC5122r   c              #    K   t        | dd      x}M|j                         D ]9  }|j                  t        j                  u s |j
                  |j                  f ; yt        |       rt        | d      rB| j                  j                         D ]$  \  }}|j                  r|r||j                  f & y| j                  j                         D ]5  }|j                  j                  s|r|j
                  |j                   f 7 yt        | dd      x}"|D ]  }|j
                  |j                  f  yt#        |       r4| j$                  D ]$  }| j&                  j)                  |d      }	||	f & yyw)a  Iterate over all fields in the class, including inherited fields.

    This function recognizes dataclasses, attrs classes, msgspec Structs, and pydantic
    models.

    Parameters
    ----------
    cls : type
        The class to iterate over.
    exclude_frozen : bool, optional
        If True, frozen fields will be excluded. By default True.

    Yields
    ------
    tuple[str, type | None]
        The name and type of each field.
    r$   Nmodel_fieldsr!   )rN   values_field_typedataclasses_FIELDnamer0   r=   r1   rT   itemsr   
annotation
__fields__
field_inforJ   outer_type_rC   __struct_fields__r   r:   )
r2   exclude_frozendclass_fieldsd_field
field_namep_fieldattrs_fieldsa_fieldm_fieldtype_s
             r   iter_fieldsri      s    , !&<dCCP$++- 	1G""k&8&88llGLL00	1 	3''*'7'7'='='? 9#
G~~^$g&8&8889 	 >>002 <%%44N!,,(;(;;;< 	%6==J# 	-G,,,,	-,, 	!G''++GT:E5. 	! 		 s   ?E<A"E<%AE<.BE<)r+   r0   returnzTypeGuard[type[DataClassType]])r+   objectrj   zTypeGuard[DataClassType])r+   r0   rj   TypeGuard[type[AttrsType]])r+   rk   rj   zTypeGuard[AttrsType])r+   rk   rj   rl   )r+   r0   rj   zTypeGuard[type[BaseModel]])r+   rk   rj   zTypeGuard[BaseModel])r+   r0   rj   zTypeGuard[type[msgspec.Struct]])r+   rk   rj   zTypeGuard[msgspec.Struct])r+   r   rj   r   )T)r2   r0   r`   r   rj   z!Iterator[tuple[str, type | None]])%
__future__r   
contextlibrW   r8   typestypingr   r   r   r   r   r	   r
   attrsrF   r@   r   typing_extensionsr   r   rN   r0   intr   r    r#   suppressImportErrorr%   r'   r,   r4   r=   rC   rR   ri   r   r   r   <module>rv      s   "   
  O O O"+x  und49o>1 1 + Z% .-.* Z% .-.7 7
 
 B 
 B 
 > 
 >+ 
 @ 
 @ 
 < 
 <8 
 C 
 C 
 ? 
 ?H 
 H 
 H 
 D 
 DC@ '+0	0#0&0U. .. .s   ;DD+D(+D4