o
    g                    @   s  d dl T d dlZd dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZmZmZmZmZmZmZmZ d dlmZ d dlmZmZmZ d dlmZ d dlZd dl Z G dd	 d	eZG d
d dejZG dd dejZG dd dejZG dd dejZG dd dejZ G dd dejZ!G dd dejZ"G dd dejZ#G dd dejZ$G dd dejZ%G dd dejZ&G d d! d!ejZ'G d"d# d#ejZ(G d$d% d%ejZ)G d&d' d'ejZ*G d(d) d)ejZ+G d*d+ d+ejZ,e-d,kre.  dS dS )-    )*N)Mock)
ClassVarAnyListUnionTupleDictGenericTypeVarOptionalProtocol)get_type_hints)dequeOrderedDict
namedtuple)total_orderingc                   @      e Zd ZdS )CustomErrorN__name__
__module____qualname__ r   r   K/Users/admin/.pyenv/versions/3.10.0/lib/python3.10/test/test_dataclasses.pyr          r   c                   @   s  e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1d2 Zd3d4 Zd5d6 Zd7d8 Zd9d: Zd;d< Z d=d> Z!d?d@ Z"dAdB Z#dCdD Z$dEdF Z%dGdH Z&dIdJ Z'dKdL Z(dMdN Z)dOdP Z*dQdR Z+dSdT Z,dUdV Z-dWdX Z.dYdZ Z/d[d\ Z0d]d^ Z1d_d` Z2dadb Z3dcdd Z4dedf Z5dgdh Z6didj Z7dkdl Z8dmdn Z9dodp Z:dqdr Z;dsdt Z<dudv Z=dwdx Z>dydz Z?d{d| Z@d}d~ ZAdd ZBdd ZCdd ZDdd ZEdd ZFdd ZGdd ZHdd ZIdd ZJdd ZKdd ZLdd ZMdd ZNdd ZOdd ZPdd ZQdd ZRdd ZSdd ZTdd ZUdd ZVdd ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_dd Z`dS )TestCasec                 C   0   t G dd d}| }| tt|d d S )Nc                   @   r   )z"TestCase.test_no_fields.<locals>.CNr   r   r   r   r   C       r   r   	dataclassassertEquallenfieldsselfr   or   r   r   test_no_fields      zTestCase.test_no_fieldsc                 C   r   )Nc                   @   s   e Zd ZdZdS )z6TestCase.test_no_fields_but_member_variable.<locals>.Cr   N)r   r   r   ir   r   r   r   r   "   s    r   r   r    r%   r   r   r   "test_no_fields_but_member_variable!   r)   z+TestCase.test_no_fields_but_member_variablec                 C   ,   t G dd d}|d}| |jd d S )Nc                   @      e Zd ZU eed< dS )z-TestCase.test_one_field_no_default.<locals>.CxNr   r   r   int__annotations__r   r   r   r   r   *      
 r   *   r!   r"   r.   r%   r   r   r   test_one_field_no_default)   s   z"TestCase.test_one_field_no_defaultc                 C   sH   d}|  t| tG dd d}W d    d S 1 sw   Y  d S )Nz/cannot specify both default and default_factoryc                   @   s"   e Zd ZU ededZeed< dS )z<TestCase.test_field_default_default_factory_error.<locals>.C   defaultdefault_factoryr.   N)r   r   r   fieldr0   r.   r1   r   r   r   r   r   4      
 r   )assertRaisesRegex
ValueErrorr!   )r&   msgr   r   r   r   (test_field_default_default_factory_error1   s
   "z1TestCase.test_field_default_default_factory_errorc                 C   s>   t dddd}d|_t|}dtdtd}| || d S )	Nr6   TF)r8   initrepridz4Field(name='id',type=None,default=1,default_factory=zO,init=True,repr=False,hash=None,compare=True,metadata=mappingproxy({}),kw_only=z,_field_type=None))r:   namerA   MISSINGr"   )r&   Z	int_fieldZrepr_outputZexpected_outputr   r   r   test_field_repr8   s   zTestCase.test_field_reprc                 C   s.   t G dd d}|dd}| |jd d S )Nc                   @   r-   )z*TestCase.test_named_init_params.<locals>.Cr.   Nr/   r   r   r   r   r   F   r2   r       r.   r4   r%   r   r   r   test_named_init_paramsE   s   
zTestCase.test_named_init_paramsc                 C   s  t G dd d}|d}| |j|jfd | td t G dd d}W d    n1 s1w   Y  | td t G dd d}t G d	d d|}W d    n1 sZw   Y  | td t G d
d d}t G dd d|}W d    d S 1 sw   Y  d S )Nc                   @   "   e Zd ZU eed< dZeed< dS )/TestCase.test_two_fields_one_default.<locals>.Cr.   r   yNr   r   r   r0   r1   rK   r   r   r   r   r   N      
 r      )rN   r   z1non-default argument 'y' follows default argumentc                   @   s"   e Zd ZU dZeed< eed< dS )rJ   r   r.   rK   Nr   r   r   r.   r0   r1   r   r   r   r   r   Z      
 c                   @      e Zd ZU dZeed< dS )/TestCase.test_two_fields_one_default.<locals>.Br   r.   NrO   r   r   r   r   Bc      
 rS   c                   @   r-   )rJ   rK   Nr/   r   r   r   r   r   g   r2   c                   @      e Zd ZU eed< eed< dS )rR   r.   rK   Nr/   r   r   r   r   rS   p      
 c                   @   rQ   )rJ   r   r.   NrO   r   r   r   r   r   u   rT   )r!   r"   r.   rK   r<   	TypeError)r&   r   r'   rS   r   r   r   test_two_fields_one_defaultM   s4   	"z$TestCase.test_two_fields_one_defaultc                 C   s  t ddG dd d}| t|dd t ddG dd d}| t|dtd | td	 t dd
G dd d}W d    n1 sKw   Y  t dd
G dd d}| t|dtd | td	 t dd
G dd d}W d    d S 1 sw   Y  d S )NTfrozenc                   @      e Zd ZU eed< dd ZdS )'TestCase.test_overwrite_hash.<locals>.Cr.   c                 S      dS N-  r   r&   r   r   r   __hash__      0TestCase.test_overwrite_hash.<locals>.C.__hash__N)r   r   r   r0   r1   ra   r   r   r   r   r   |   rV   r   d   r_   c                   @   r[   )r\   r.   c                 S   r]   NFr   r&   otherr   r   r   __eq__   rb   .TestCase.test_overwrite_hash.<locals>.C.__eq__Nr   r   r   r0   r1   rh   r   r   r   r   r      rV   )rd   #Cannot overwrite attribute __hash__unsafe_hashc                   @      e Zd Zdd ZdS )r\   c                 S      d S Nr   r`   r   r   r   ra      rb   rc   Nr   r   r   ra   r   r   r   r   r          c                   @   r[   )r\   r.   c                 S   ro   rp   r   r`   r   r   r   rh      rb   ri   Nrj   r   r   r   r   r      rV   
   )rs   c                   @   s&   e Zd ZU eed< dd Zdd ZdS )r\   r.   c                 S   ro   rp   r   r`   r   r   r   rh      rb   ri   c                 S   ro   rp   r   r`   r   r   r   ra      rb   rc   N)r   r   r   r0   r1   rh   ra   r   r   r   r   r      s   
 )r!   r"   hashr<   rW   r&   r   r   r   r   test_overwrite_hashy   s*   "zTestCase.test_overwrite_hashc                 C   sp   t G dd d}t G dd d|}| }| t|d | }| t|d |dd}| t|d	 d S )
Nc                   @   s&   e Zd ZU dZeed< dZeed< dS )z=TestCase.test_overwrite_fields_in_derived_class.<locals>.Baseg      .@r.   r   rK   N)r   r   r   r.   r   r1   rK   r0   r   r   r   r   Base      
 rw   c                   @   &   e Zd ZU dZeed< dZeed< dS )z;TestCase.test_overwrite_fields_in_derived_class.<locals>.C1rs   z   r.   N)r   r   r   rz   r0   r1   r.   r   r   r   r   C1   rx   r|   zJTestCase.test_overwrite_fields_in_derived_class.<locals>.Base(x=15.0, y=0)zLTestCase.test_overwrite_fields_in_derived_class.<locals>.C1(x=15, y=0, z=10)   rG   zKTestCase.test_overwrite_fields_in_derived_class.<locals>.C1(x=5, y=0, z=10)r!   r"   rA   )r&   rw   r|   r'   r   r   r   &test_overwrite_fields_in_derived_class   s   
z/TestCase.test_overwrite_fields_in_derived_classc                 C   s   t G dd d}|d}| |jd t|j}tt|j}| 	d| t G dd d}t|j}tt|j}| d| d S )Nc                   @   r-   ))TestCase.test_field_named_self.<locals>.Cr&   Nr   r   r   strr1   r   r   r   r   r      r2   r   foor&   c                   @   r-   )r   ZselfxNr   r   r   r   r   r      r2   )
r!   r"   r&   inspect	signature__init__nextiter
parametersassertNotEqual)r&   r   csigfirstr   r   r   test_field_named_self   s   zTestCase.test_field_named_selfc                 C   r,   )Nc                   @   r-   )z+TestCase.test_field_named_object.<locals>.CobjectNr   r   r   r   r   r      r2   r   r   r!   r"   r   r&   r   r   r   r   r   test_field_named_object   s   z TestCase.test_field_named_objectc                 C   s2   t ddG dd d}|d}| |jd d S )NTrY   c                   @   r-   )z2TestCase.test_field_named_object_frozen.<locals>.Cr   Nr   r   r   r   r   r      r2   r   r   r   r   r   r   r   test_field_named_object_frozen   s   z'TestCase.test_field_named_object_frozenc                    sn   h d t  fddtj D }dd |D }td|}|dd |D  }|D ]}| t||| q)d S )N>   TrueNoneFalsec                 3   &    | ]}| d s| vr|V  qdS __N
startswith.0bZ
exclusionsr   r   	<genexpr>       
z9TestCase.test_field_named_like_builtin.<locals>.<genexpr>c                 S      g | ]}|t fqS r   r   r   rC   r   r   r   
<listcomp>       z:TestCase.test_field_named_like_builtin.<locals>.<listcomp>r   c                 S      g | ]}|qS r   r   r   r   r   r   r          sortedbuiltins__dict__keysmake_dataclassr"   getattrr&   Zbuiltins_namesZ
attributesr   r   rC   r   r   r   test_field_named_like_builtin   s   
z&TestCase.test_field_named_like_builtinc                    sr   h d t  fddtj D }dd |D }td|dd}|d	d |D  }|D ]}| t||| q+d S )
N>   r   r   r   c                 3   r   r   r   r   r   r   r   r      r   z@TestCase.test_field_named_like_builtin_frozen.<locals>.<genexpr>c                 S   r   r   r   r   r   r   r   r     r   zATestCase.test_field_named_like_builtin_frozen.<locals>.<listcomp>r   TrY   c                 S   r   r   r   r   r   r   r   r     r   r   r   r   r   r   $test_field_named_like_builtin_frozen   s   z-TestCase.test_field_named_like_builtin_frozenc                 C   sR  t G dd d}t ddG dd d}||fD ]q}| j|da | | |  tdd	 d
d	 dd	 dd	 gD ]@\}}| j|d. | td|j d|j d || |  W d    n1 sfw   Y  W d    q:1 suw   Y  q:W d    q1 sw   Y  qt ddG dd d}| | |  | | |  d S )Nc                   @   r   )z)TestCase.test_0_field_compare.<locals>.C0Nr   r   r   r   r   C0  r   r   Forderc                   @   r   )z)TestCase.test_0_field_compare.<locals>.C1Nr   r   r   r   r   r|     r   r|   clsc                 S      | |k S rp   r   ar   r   r   r   <lambda>      z/TestCase.test_0_field_compare.<locals>.<lambda>c                 S      | |kS rp   r   r   r   r   r   r     r   c                 S      | |kS rp   r   r   r   r   r   r     r   c                 S      | |kS rp   r   r   r   r   r   r     r   idx$not supported between instances of '' and ''Tc                   @   r   )z(TestCase.test_0_field_compare.<locals>.CNr   r   r   r   r   r   !  r   r   )	r!   subTestr"   	enumerater<   rW   r   assertLessEqualassertGreaterEqualr&   r   r|   r   r   fnr   r   r   r   test_0_field_compare  s4   zTestCase.test_0_field_comparec                 C   s  t G dd d}t ddG dd d}||fD ]}| j|do | |d|d | |d	|d td
d dd dd dd gD ]B\}}| j|d0 | td|j d|j d ||d	|d	 W d    n1 stw   Y  W d    qF1 sw   Y  qFW d    q1 sw   Y  qt ddG dd d}| |d	|d | 	|d	|d | 	|d|d | 
|d|d	 | |d|d	 | |d|d d S )Nc                   @   r-   )z)TestCase.test_1_field_compare.<locals>.C0r.   Nr/   r   r   r   r   r   )  r2   r   Fr   c                   @   r-   )z)TestCase.test_1_field_compare.<locals>.C1r.   Nr/   r   r   r   r   r|   -  r2   r|   r   r6   r   c                 S   r   rp   r   r   r   r   r   r   5  r   z/TestCase.test_1_field_compare.<locals>.<lambda>c                 S   r   rp   r   r   r   r   r   r   6  r   c                 S   r   rp   r   r   r   r   r   r   7  r   c                 S   r   rp   r   r   r   r   r   r   8  r   r   r   r   r   Tc                   @   r-   )z(TestCase.test_1_field_compare.<locals>.Cr.   Nr/   r   r   r   r   r   >  r2   r   )r!   r   r"   r   r   r<   rW   r   
assertLessr   assertGreaterr   r   r   r   r   test_1_field_compare'  s>   zTestCase.test_1_field_comparec                 C   sJ  t G dd d}t ddG dd d}||fD ]}| j|d | |dd|dd | |d	d
|d	d
 | |d	d|dd | |d	d|d	d	 tdd dd dd dd gD ]D\}}| j|d2 | td|j d|j d ||dd|dd W d    n1 sw   Y  W d    qb1 sw   Y  qbW d    q1 sw   Y  qt ddG dd d}tdd dd dd gD ](\}}| j|d | ||dd|dd W d    q1 sw   Y  qtdd dd dd gD ]G\}}| j|d3 | ||dd|dd	 | ||dd	|d	d | ||d	d|d	d	 W d    q1 sGw   Y  qtdd dd dd gD ]G\}}| j|d3 | ||dd	|dd | ||d	d|dd	 | ||d	d	|d	d W d    q[1 sw   Y  q[d S ) Nc                   @   rU   )z(TestCase.test_simple_compare.<locals>.C0r.   rK   Nr/   r   r   r   r   r   J  rV   r   Fr   c                   @   rU   )z(TestCase.test_simple_compare.<locals>.C1r.   rK   Nr/   r   r   r   r   r|   O  rV   r|   r   r   r6      c                 S   r   rp   r   r   r   r   r   r   Z  r   z.TestCase.test_simple_compare.<locals>.<lambda>c                 S   r   rp   r   r   r   r   r   r   [  r   c                 S   r   rp   r   r   r   r   r   r   \  r   c                 S   r   rp   r   r   r   r   r   r   ]  r   r   r   r   r   Tc                   @   rU   )z'TestCase.test_simple_compare.<locals>.Cr.   rK   Nr/   r   r   r   r   r   c  rV   r   c                 S      | |kS rp   r   r   r   r   r   r   h  r   c                 S   r   rp   r   r   r   r   r   r   i  r   c                 S   r   rp   r   r   r   r   r   r   j  r   c                 S   r   rp   r   r   r   r   r   r   n  r   c                 S   r   rp   r   r   r   r   r   r   o  r   c                 S      | |kS rp   r   r   r   r   r   r   p  r   c                 S   r   rp   r   r   r   r   r   r   v  r   c                 S   r   rp   r   r   r   r   r   r   w  r   c                 S   r   rp   r   r   r   r   r   r   x  r   )	r!   r   r"   r   r   r<   rW   r   
assertTruer   r   r   r   test_simple_compareH  sj   $$zTestCase.test_simple_comparec              
   C   s.  t G dd d}t G dd d|}tdd dfdd d	fgD ])\}\}}| j|d
 | ||d|d| W d    q!1 sEw   Y  q!tdd dd dd dd gD ]9\}}| j|d
' | td ||d|d W d    n1 sw   Y  W d    q[1 sw   Y  q[d S )Nc                   @   r-   )z+TestCase.test_compare_subclasses.<locals>.Br*   Nr/   r   r   r   r   rS     r2   rS   c                   @   r   )z+TestCase.test_compare_subclasses.<locals>.CNr   r   r   r   r   r     r   r   c                 S   r   rp   r   r   r   r   r   r     r   z2TestCase.test_compare_subclasses.<locals>.<lambda>Fc                 S   r   rp   r   r   r   r   r   r     r   Tr   r   c                 S   r   rp   r   r   r   r   r   r     r   c                 S   r   rp   r   r   r   r   r   r     r   c                 S   r   rp   r   r   r   r   r   r     r   c                 S   r   rp   r   r   r   r   r   r     r   z.not supported between instances of 'B' and 'C')r!   r   r   r"   r<   rW   )r&   rS   r   r   r   expectedr   r   r   test_compare_subclasses~  s0   
z TestCase.test_compare_subclassesc              
   C   s  dD ]\}}}| j ||d |dkr7| td t||dG dd d}W d    n1 s1w   Y  nt||dG dd d}|dkrl| d	|j | d
|j | d|j | d|j | d|j nO|dkr| d	|j | d
|j | d|j | d|j | d|j n'|dkr| d	|j | d
|j | d|j | d|j | d|j W d    q1 sw   Y  qd S )N))FFneither)FT	exception)TFeq_only)TTboth)eqr   r   z eq must be true if order is truec                   @   r   z!TestCase.test_eq_order.<locals>.CNr   r   r   r   r   r     r   r   c                   @   r   r   r   r   r   r   r   r     r   r   rh   __lt____le____gt____ge__r   r   )r   r<   r=   r!   assertNotInr   assertIn)r&   r   r   resultr   r   r   r   test_eq_order  s<   

zTestCase.test_eq_orderc                 C   s\   t G dd d}| |djd | td |  W d    d S 1 s'w   Y  d S )Nc                   @   s   e Zd ZU e Zeed< dS )z)TestCase.test_field_no_default.<locals>.Cr.   Nr   r   r   r:   r.   r0   r1   r   r   r   r   r        
 r   r}   8__init__\(\) missing 1 required positional argument: 'x')r!   r"   r.   r<   rW   ru   r   r   r   test_field_no_default  s   "zTestCase.test_field_no_defaultc                    sf   t   tG  fddd}| |j  |d}| |jd |`| |j  | | j  d S )Nc                           e Zd ZU e dZeed< dS )z&TestCase.test_field_default.<locals>.Cr8   r.   N)r   r   r   r:   r.   r   r1   r   r   r   r   r        
 r   rs   )r   r!   assertIsr.   r"   r   r   r   r   test_field_default  s   zTestCase.test_field_defaultc                 C   s   t G dd d}| t |  W d    n1 sw   Y  |d}| t|d t G dd d}|dd}| t|d d S )Nc                   @       e Zd ZU eddZeed< dS )$TestCase.test_not_in_repr.<locals>.CFrA   r.   Nr   r   r   r   r   r     r   r   rs   z&TestCase.test_not_in_repr.<locals>.C()c                   @   s(   e Zd ZU eddZeed< eed< dS )r   Fr   r.   rK   Nr   r   r   r   r   r     s   
    z*TestCase.test_not_in_repr.<locals>.C(y=20))r!   assertRaisesrW   r"   rA   r   r   r   r   test_not_in_repr  s   
zTestCase.test_not_in_reprc                 C   sp   t G dd d}| | |dd | |dd|dd | |d|dd | |dd|dd d S )	Nc                   @   s.   e Zd ZU dZeed< edddZeed< dS )z'TestCase.test_not_in_compare.<locals>.Cr   r.   F   )comparer8   rK   N)r   r   r   r.   r0   r1   r:   rK   r   r   r   r   r     s   
 r   r   r   r6   rs   rN   r   r!   r"   r   ru   r   r   r   test_not_in_compare  s   zTestCase.test_not_in_comparec              	      s   dD ]L\ }| j  d8 tddG  fddd}|dkr/| t|dtd	 n|d
kr?| t|dtd W d    q1 sIw   Y  qd S )N))TFr:   )TTr:   )FFabsent)FTr   )NFr   )NTr:   )rt   r   Trl   c                       s$   e Zd ZU e ddZeed< dS )z)TestCase.test_hash_field_rules.<locals>.Cr}   )r   rt   r8   r.   Nr   r   r   Zhash_r   r   r        
 r   r:   r}   )r}   r   r   )r   r!   r"   rt   )r&   r   r   r   r   r   test_hash_field_rules  s   zTestCase.test_hash_field_rulesc                 C   sf   t G dd d}| d| j t G dd d}| d|dj | t|ddddd	 d S )
Nc                   @   r   ).TestCase.test_init_false_no_default.<locals>.CFr@   r.   Nr   r   r   r   r   r     r   r   r.   c                   @   s@   e Zd ZU eed< dZeed< eddZeed< dZeed< d	S )
r   r.   r   rK   Fr   rz   rs   tN)	r   r   r   r0   r1   rK   r:   rz   r   r   r   r   r   r     s
   
 rz   r   r}   rs   )r   r.   rK   )r!   r   r   r"   varsru   r   r   r   test_init_false_no_default  s    z#TestCase.test_init_false_no_defaultc                 C   s`  t G dd d}t|}| |t |D ]}| t|t | |j|j	 q| 
t|d | 
|d jd | 
|d jt | t|d | |d j | |d j | 
|d jd | 
|d jt | t|d | |d j | |d j | 
|d jd	 | 
|d jt | t|d	 | |d j | |d j d S )
Nc                   @   s<   e Zd ZU eed< edddZeed< eddZeed< dS )z%TestCase.test_class_marker.<locals>.Cr.   FNr@   r8   rK   r   rz   )	r   r   r   r0   r1   r:   rK   r   rz   r   r   r   r   r   %  s   
 r   rN   r   r.   r6   rK   r   rz   )r!   r$   assertIsInstancetupler   typeZFieldr   rC   r1   r"   r#   r0   assertFalsehasattrr   r@   rA   r   assertIsNoner   )r&   r   Z
the_fieldsfr   r   r   test_class_marker$  s.   zTestCase.test_class_markerc                 C   s   t G dd d}t G dd d|}| dd t|D g d t G dd	 d	|}| d
d t|D g d t G dd d|}| dd t|D g d d S )Nc                   @   s2   e Zd ZU dZeed< dZeed< dZeed< dS )z$TestCase.test_field_order.<locals>.BB:ar   B:br   B:cr   N)r   r   r   r   r   r1   r   r   r   r   r   r   rS   F     
 rS   c                   @   rQ   )z$TestCase.test_field_order.<locals>.CC:br   N)r   r   r   r   r   r1   r   r   r   r   r   L  rT   r   c                 S      g | ]}|j |jfqS r   rC   r8   r   r  r   r   r   r   P      z-TestCase.test_field_order.<locals>.<listcomp>)r   r	  )r   r  )r   r  c                   @   rQ   )z$TestCase.test_field_order.<locals>.DD:cr   N)r   r   r   r   r   r1   r   r   r   r   DU  rT   r  c                 S   r  r   r  r  r   r   r   r   Y  r  )r  r   r
  r   r  c                   @   ry   )z$TestCase.test_field_order.<locals>.EE:ar   E:ddN)r   r   r   r   r   r1   r  r   r   r   r   E^  rx   r  c                 S   r  r   r  r  r   r   r   r   c  r  ))r   r  r  r  )r  r  r!   r"   r$   )r&   rS   r   r  r  r   r   r   test_field_orderE  s"   zTestCase.test_field_orderc                    s\   t   tG  fddd}| t|d | t|d | |j  | |jd d S )Nc                       sF   e Zd ZU eed< eddZeed<  Zeed< eddZ	eed< d	S )
z$TestCase.test_class_attrs.<locals>.Cr.   Fr   rK   rz   rd   r   r   N)
r   r   r   r0   r1   r:   rK   rz   r   r   r   r   r   r   r   m  s
   
 r   r.   rK   rd   )r   r!   r  r  r   rz   r"   r   ru   r   r   r   test_class_attrsi  s   zTestCase.test_class_attrsc              
      s  t g dgfti ddiftt tdgffD ]\| jd | td d tG fddd}W d    n1 sBw   Y  | td d tG fd	dd}W d    n1 shw   Y  G d
d d | td tG  fddd}W d    n1 sw   Y  tG fddd}tG  fddd}W d    q1 sw   Y  qd S )Nr6   r   typzmutable default z for field x is not allowedc                          e Zd ZU  Zed< dS )8TestCase.test_disallowed_mutable_defaults.<locals>.Pointr.   N)r   r   r   r.   r1   r   )emptyr  r   r   Point  rT   r#  z for field y is not allowedc                       r   )r!  rK   N)r   r   r   rK   r1   r   )	non_emptyr  r   r   r#    rT   c                   @   r   )z;TestCase.test_disallowed_mutable_defaults.<locals>.SubclassNr   r   r   r   r   Subclass  r   r%  z7mutable default .*Subclass'> for field z is not allowedc                       s   e Zd ZU   Zed< dS )r!  rz   N)r   r   r   rz   r1   r   r%  r  r   r   r#    r   c                       s    e Zd ZU   Ze  ed< dS )4TestCase.test_disallowed_mutable_defaults.<locals>.Crz   N)r   r   r   rz   r   r1   r   r  r   r   r     r   r   c                       s    e Zd ZU   Ze ed< dS )r'  r.   N)r   r   r   r.   r   r1   r   r&  r   r   r     r   )listdictsetr   r<   r=   r!   r&   r#  r   r   )r%  r"  r$  r  r    test_disallowed_mutable_defaultsy  s<   

	
	z)TestCase.test_disallowed_mutable_defaultsc                    s   G dd d t G  fddd}  }||}||}| || |jjddg | || | |jjddg | |j|j d S )Nc                   @   rn   )z<TestCase.test_deliberately_mutable_defaults.<locals>.Mutablec                 S   s
   g | _ d S rp   lr`   r   r   r   r        
zETestCase.test_deliberately_mutable_defaults.<locals>.Mutable.__init__Nr   r   r   r   r   r   r   r   Mutable      r1  c                          e Zd ZU  ed< dS )z6TestCase.test_deliberately_mutable_defaults.<locals>.Cr.   Nr   r   r   r1   r   r1  r   r   r     r2   r   r6   r   )r!   r"   r.   r.  extendr   )r&   r   lstZo1Zo2r   r5  r   "test_deliberately_mutable_defaults  s   z+TestCase.test_deliberately_mutable_defaultsc                 C   s*   t  G dd d}| |djd d S )Nc                   @   r-   )z#TestCase.test_no_options.<locals>.Cr.   Nr/   r   r   r   r   r     r2   r   r3   r4   ru   r   r   r   test_no_options  s   zTestCase.test_no_optionsc                 C   sR   t G dd d}| |ddd t G dd d}| |dd|dd d S )	Nc                   @   rU   )z&TestCase.test_not_tuple.<locals>.Pointr.   rK   Nr/   r   r   r   r   r#    rV   r#  r6   r   r6   r   c                   @   rU   )z"TestCase.test_not_tuple.<locals>.Cr.   rK   Nr/   r   r   r   r   r     rV   r   rN   )r!   r   r+  r   r   r   test_not_tuple  s   zTestCase.test_not_tuplec                 C   s   t G dd d}t G dd d}| |ddd|ddd | |dd	dd
 | td |ddd\}}}W d    n1 sDw   Y  t G dd d}| |ddd|  d S )Nc                   @   &   e Zd ZU eed< eed< eed< dS )z2TestCase.test_not_other_dataclass.<locals>.Point3Dr.   rK   rz   Nr/   r   r   r   r   Point3D     
 r=  c                   @   r<  )z/TestCase.test_not_other_dataclass.<locals>.DateyearmonthdayNr/   r   r   r   r   Date  r>  rB  i     rN   r6   r   )r6   r   rN   unpackr   r}   c                   @   s2   e Zd ZU dZeed< dZeed< dZeed< dS )z4TestCase.test_not_other_dataclass.<locals>.Point3Dv1r   r.   rK   rz   N)r   r   r   r.   r0   r1   rK   rz   r   r   r   r   	Point3Dv1  r  rE  r   )r!   r   r<   rW   )r&   r=  rB  r.   rK   rz   rE  r   r   r   test_not_other_dataclass  s   z!TestCase.test_not_other_dataclassc                    sn   G dd d    fdd}t G  fddd}|| t dddG  fd	dd}|| d S )
Nc                   @   r   )z-TestCase.test_function_annotations.<locals>.FNr   r   r   r   r   F      rG  c                    s   | jd t  | jd t  | jd    | jd t  | jd t t| j}	|j
d  t|j }t|} |jd t|} |jd 	|jt  |jtjj  |jtjj t|} |jd 	|jt  |jtjj  |jtjj t|} |jd 	|j   |jtjj t|} |jd 	|jt  |jtjj tt| d S )Nr*   jkr.  rz   r&   )r"   r1   r0   r   floatcomplexr   r   r   r   Zreturn_annotationr   r   valuesr   rC   
annotationr8   Z	Parameterr"  kindZPOSITIONAL_OR_KEYWORDr   StopIteration)r   r   paramsZparam)rG  r&   r   r   validate_class  s:   z:TestCase.test_function_annotations.<locals>.validate_classc                       P   e Zd ZU eed< eed< Z ed< eddZe	ed< eddd	Z
eed
< dS z-TestCase.test_function_annotations.<locals>.Cr*   rI  rJ  Nr   r.  y      @      @Fr8   r@   rz   r   r   r   r0   r1   r   rJ  r:   r.  rK  rz   rL  r   rG  r  r   r   r   "     
 r   T)rZ   rm   c                       rS  rT  rV  r   rW  r   r   r   -  rX  )r!   )r&   rR  r   r   )rG  r  r&   r   test_function_annotations  s   +
z"TestCase.test_function_annotationsc                 C      t G dd d}| td |  W d    n1 sw   Y  | d|j t G dd d}| td |  W d    n1 sFw   Y  | d|j d S )Nc                   @       e Zd ZU eedZeed< dS )z(TestCase.test_missing_default.<locals>.Cr   r.   Nr   r   r   r:   rD   r.   r0   r1   r   r   r   r   r   :  r   r   3__init__\(\) missing 1 required positional argumentr.   c                   @   r-   )z(TestCase.test_missing_default.<locals>.Dr.   Nr/   r   r   r   r   r  C  r2   r  r!   r<   rW   r   r   r&   r   r  r   r   r   test_missing_default7  s    zTestCase.test_missing_defaultc                 C   rZ  )Nc                   @   r[  )z0TestCase.test_missing_default_factory.<locals>.Cr9   r.   Nr\  r   r   r   r   r   P  r   r   r]  r.   c                   @   s"   e Zd ZU eeedZeed< dS )z0TestCase.test_missing_default_factory.<locals>.Dr7   r.   Nr\  r   r   r   r   r  Y  r;   r  r^  r_  r   r   r   test_missing_default_factoryL  s    z%TestCase.test_missing_default_factoryc                 C   s   |  dtt d S )NzMISSING_TYPE object)r   rA   rD   r`   r   r   r   test_missing_reprb     zTestCase.test_missing_reprc                 C   sb   t G dd d}| t|jdg | |d d | |djd | |djd d S )Nc                   @   s6   e Zd ZU eed< defddZedefddZdS )z7TestCase.test_dont_include_other_annotations.<locals>.Cr*   returnc                 S   r]   Nr   r   r`   r   r   r   r   i  rb   z;TestCase.test_dont_include_other_annotations.<locals>.C.fooc                 S   r]   Nr}   r   r`   r   r   r   bark     z;TestCase.test_dont_include_other_annotations.<locals>.C.barN)r   r   r   r0   r1   r   propertyrh  r   r   r   r   r   f  s
   
 r   r*   rs   r   r}   )r!   r"   r(  r1   r   rh  r*   ru   r   r   r   #test_dont_include_other_annotationse  s   z,TestCase.test_dont_include_other_annotationsc                 C   s,  t G dd d}| t |  W d    n1 sw   Y  t G dd d}| t |  W d    n1 s=w   Y  |d t ddG dd d}|  t G dd d}| | jd	 | |d
jd t ddG dd d}| t |  W d    d S 1 sw   Y  d S )Nc                   @   rn   )"TestCase.test_post_init.<locals>.Cc                 S      t  rp   r   r`   r   r   r   __post_init__w     0TestCase.test_post_init.<locals>.C.__post_init__Nr   r   r   ro  r   r   r   r   r   u  rr   r   c                   @   "   e Zd ZU dZeed< dd ZdS )rl  rs   r*   c                 S   s   | j dkrt d S Nrs   )r*   r   r`   r   r   r   ro    s   
rq  N)r   r   r   r*   r0   r1   ro  r   r   r   r   r   |  rP   r}   Fr   c                   @   rn   )rl  c                 S   rm  rp   rn  r`   r   r   r   ro    rp  rq  Nrr  r   r   r   r   r     rr   c                   @   rs  )rl  r   r.   c                 S      |  j d9  _ d S Nr   rG   r`   r   r   r   ro       rq  Nr   r   r   r.   r0   r1   ro  r   r   r   r   r     rP   r   r   r   TrY   c                   @   rs  )rl  r   r.   c                 S   ru  rv  rG   r`   r   r   r   ro    rw  rq  Nrx  r   r   r   r   r     rP   )r!   r   r   r"   r.   FrozenInstanceErrorru   r   r   r   test_post_inits  s.   "zTestCase.test_post_initc                 C   s   G dd d}t G dd d|}| | jd t G dd d|}| t |  W d    n1 s6w   Y  t G dd d|}| t |  W d    d S 1 sYw   Y  d S )Nc                   @   rn   )z(TestCase.test_post_init_super.<locals>.Bc                 S   rm  rp   rn  r`   r   r   r   ro    rp  z6TestCase.test_post_init_super.<locals>.B.__post_init__Nrr  r   r   r   r   rS     r2  rS   c                   @   rn   )(TestCase.test_post_init_super.<locals>.Cc                 S   
   d| _ d S rg  rG   r`   r   r   r   ro    r/  6TestCase.test_post_init_super.<locals>.C.__post_init__Nrr  r   r   r   r   r     rr   r   r}   c                       s   e Zd Z fddZ  ZS )r{  c                    s   t    d S rp   )superro  r`   	__class__r   r   ro       r}  )r   r   r   ro  __classcell__r   r   r  r   r     s    c                   @   r   )r{  Nr   r   r   r   r   r     r   )r!   r"   r.   r   r   r&   rS   r   r   r   r   test_post_init_super  s   "zTestCase.test_post_init_superc                    sP   d t G  fddd}|   |dd}| |j|jfd |   d S )NFc                       s.   e Zd ZU eed< eed< e fddZdS )z/TestCase.test_post_init_staticmethod.<locals>.Cr.   rK   c                      s   d d S NTr   r   flagr   r   ro    s   z=TestCase.test_post_init_staticmethod.<locals>.C.__post_init__N)r   r   r   r0   r1   staticmethodro  r   r  r   r   r     s
   
 r   rN   r   rN   r   )r!   r  r"   r.   rK   r   r   r   r  r   test_post_init_staticmethod  s   

z$TestCase.test_post_init_staticmethodc                 C   sL   t G dd d}| |j |dd}| |j|jfd | |j d S )Nc                   @   s.   e Zd ZU dZeed< eed< edd ZdS )z.TestCase.test_post_init_classmethod.<locals>.CFr.   rK   c                 S   r|  r  r  r   r   r   r   ro    s   
z<TestCase.test_post_init_classmethod.<locals>.C.__post_init__N)r   r   r   r  r0   r1   classmethodro  r   r   r   r   r     s   
 r   rN   r   r  )r!   r  r  r"   r.   rK   r   r   r   r   r   test_post_init_classmethod  s   
z#TestCase.test_post_init_classmethodc                 C   s   t G dd d}|d}| t|d | tt|d | t|jd | |jd | |jd | |jd	 | |j	d
 | jd7  _| |jd |d}| |j
|jfd | |jd | |jd | |jd	 | |j	d
 d S )Nc                   @   s^   e Zd ZU eed< dZeed< dZee ed< dZee ed< dZ	ee ed	< d
Z
eed< dS )z"TestCase.test_class_var.<locals>.Cr.   rs   rK     rz     w  r     sN)r   r   r   r0   r1   rK   rz   r   r  r   r  r   r   r   r   r     s   
 r   r}   z-TestCase.test_class_var.<locals>.C(x=5, y=10)r   rC  r  r  r  r  r6     r   r   rs   )r!   r"   rA   r#   r$   r1   rz   r  r   r  r.   rK   r   r   r   r   test_class_var  s$   zTestCase.test_class_varc                 C   $   t G dd d}| d|j d S )Nc                   @      e Zd ZU ee ed< dS )z-TestCase.test_class_var_no_default.<locals>.Cr.   N)r   r   r   r   r0   r1   r   r   r   r   r     rT   r   r.   r!   r   r   ru   r   r   r   test_class_var_no_default     z"TestCase.test_class_var_no_defaultc                 C   R   |  td tG dd d}| d|j W d    d S 1 s"w   Y  d S )Ncannot have a default factoryc                   @   $   e Zd ZU eedZee ed< dS )z2TestCase.test_class_var_default_factory.<locals>.Cra  r.   Nr   r   r   r:   r0   r.   r   r1   r   r   r   r   r   	  r   r   r.   r<   rW   r!   r   r   ru   r   r   r   test_class_var_default_factory     "z'TestCase.test_class_var_default_factoryc                 C   D   t G dd d}| |jd t G dd d}| |jd d S )Nc                   @      e Zd ZU dZee ed< dS )/TestCase.test_class_var_with_default.<locals>.Crs   r.   N)r   r   r   r.   r   r0   r1   r   r   r   r   r        
 r   rs   c                   @   $   e Zd ZU eddZee ed< dS )r  rs   r   r.   N)r   r   r   r:   r.   r   r0   r1   r   r   r   r   r     r   r4   ru   r   r   r   test_class_var_with_default     z$TestCase.test_class_var_with_defaultc                 C   s   t ddG dd d}|d}| t|dd | tt|d | t|jd | |jd | |jd	 | |jd
 | jd7  _| |jd |d}| |j	|j
fd | |jd | |jd	 | |jd
 d S )NTrY   c                   @   sR   e Zd ZU eed< dZeed< dZee ed< dZee ed< dZ	ee ed	< d
S )z)TestCase.test_class_var_frozen.<locals>.Cr.   rs   rK   r  rz   r  r  r  r   N)
r   r   r   r0   r1   rK   rz   r   r  r   r   r   r   r   r     s   
 r   r}   z4TestCase.test_class_var_frozen.<locals>.C(x=5, y=10)r   r  r  r  r6   r  r   r  )r!   r"   rA   r#   r$   r1   rz   r  r   r.   rK   r   r   r   r   test_class_var_frozen  s    zTestCase.test_class_var_frozenc                 C   r  )Nc                   @   r  )z,TestCase.test_init_var_no_default.<locals>.Cr.   N)r   r   r   InitVarr0   r1   r   r   r   r   r   8  rT   r   r.   r  ru   r   r   r   test_init_var_no_default6  r  z!TestCase.test_init_var_no_defaultc                 C   r  )Nr  c                   @   r  )z1TestCase.test_init_var_default_factory.<locals>.Cra  r.   N)r   r   r   r:   r0   r.   r  r1   r   r   r   r   r   C  r   r   r.   r  ru   r   r   r   test_init_var_default_factory>  r  z&TestCase.test_init_var_default_factoryc                 C   r  )Nc                   @   r  ).TestCase.test_init_var_with_default.<locals>.Crs   r.   N)r   r   r   r.   r  r0   r1   r   r   r   r   r   K  r  r   rs   c                   @   r  )r  rs   r   r.   N)r   r   r   r:   r.   r  r0   r1   r   r   r   r   r   P  r   r4   ru   r   r   r   test_init_var_with_defaultI  r  z#TestCase.test_init_var_with_defaultc                 C   s.   t G dd d}|dd}| |jd d S )Nc                   @   s2   e Zd ZU dZeed< dZee ed< dd ZdS )z!TestCase.test_init_var.<locals>.CNr.   
init_paramc                 S   s   | j d u r|d | _ d S d S rv  rG   )r&   r  r   r   r   ro  [  s   
z/TestCase.test_init_var.<locals>.C.__post_init__)	r   r   r   r.   r0   r1   r  r  ro  r   r   r   r   r   V  s   
 r   rs   )r  r   r4   r   r   r   r   test_init_varU  s   
zTestCase.test_init_varc                 C   sB   |  tt jt |  ttt d |  tttt  d d S )Ndataclasses.InitVar[int]z%dataclasses.InitVar[typing.List[int]])r"   r  r0   r  rA   r   r`   r   r   r   test_init_var_preserve_typeb  s
   z$TestCase.test_init_var_preserve_typec                 C   sl   t G dd d}|dd}| t|ddi t G dd d|}|ddd	d
}| t|ddd d S )Nc                   @   s"   e Zd ZU eed< ee ed< dS )z0TestCase.test_init_var_inheritance.<locals>.Baser.   	init_baseN)r   r   r   r0   r1   r  r   r   r   r   rw   n  rM   rw   r   rs   r.   c                   @   *   e Zd ZU eed< ee ed< dd ZdS )z-TestCase.test_init_var_inheritance.<locals>.CrK   init_derivedc                 S   s   | j | | _ | j| | _d S rp   r.   rK   )r&   r  r  r   r   r   ro  }  s   z;TestCase.test_init_var_inheritance.<locals>.C.__post_init__Nr   r   r   r0   r1   r  ro  r   r   r   r   r   x     
 r      2   3      e   r  )r!   r"   r   )r&   rw   r   r   r   r   r   r   test_init_var_inheritancej  s   
z"TestCase.test_init_var_inheritancec                    s  t G dd d}|d}|d}| |jd | |jg  | || | |j|j | t|ddgddgf g  t G  fddd}|d}|d}| |jd | |jg  | || | |j|j | t|ddgddgf t G dd d}| t| d | | jg  t d	d
G dd d}| t| g f | t| td t G dd d}| t| g f t G dd d}| | |dg d S )Nc                   @   s(   e Zd ZU eed< eedZeed< dS )(TestCase.test_default_factory.<locals>.Cr.   ra  rK   N)r   r   r   r0   r1   r:   r(  rK   r   r   r   r   r        
 r   rN   r}   r6   c                       s0   e Zd ZU eed< e fdddZeed< dS )r  r.   c                      s    S rp   r   r   r-  r   r   r         z1TestCase.test_default_factory.<locals>.C.<lambda>ra  rK   N)r   r   r   r0   r1   r:   rK   r(  r   r-  r   r   r     s   
 c                   @   "   e Zd ZU eeddZeed< dS )r  F)r9   rA   r.   Nr   r   r   r:   r(  r.   r1   r   r   r   r   r     r;   z*TestCase.test_default_factory.<locals>.C()Trl   c                   @   r  )r  F)r9   rt   r.   Nr  r   r   r   r   r     r;   r   c                   @   r  )r  Fr9   r@   r.   Nr  r   r   r   r   r     r;   c                   @   r  )r  F)r9   r   r.   Nr  r   r   r   r   r     r;   )	r!   r"   r.   rK   assertIsNotastupler   rA   rt   )r&   r   Zc0c1r   r-  r   test_default_factory  sB   zTestCase.test_default_factoryc                    sL   t   tG  fddd}| j |  jd | j |  jd d S )Nc                       "   e Zd ZU e ddZeed< dS )z5TestCase.test_default_factory_with_no_init.<locals>.CFr  r.   N)r   r   r   r:   r.   r(  r1   r   factoryr   r   r     r;   r   r6   r   r   r!   r.   r"   
call_countru   r   r  r   !test_default_factory_with_no_init  s   z*TestCase.test_default_factory_with_no_initc                    sl   t   tG  fddd}| j |  jd | |djd |  jd | j |  jd d S )Nc                       r   )zBTestCase.test_default_factory_not_called_if_value_given.<locals>.Cra  r.   Nr   r   r  r   r   r     r   r   r6   rs   r   r  ru   r   r  r   .test_default_factory_not_called_if_value_given  s   z7TestCase.test_default_factory_not_called_if_value_givenc                 C   s~   t G dd d}t G dd d|}| | ji  | | ji  | | jd t G dd d|}| | ji  d S )Nc                   @       e Zd ZU eedZeed< dS )z2TestCase.test_default_factory_derived.<locals>.Foora  r.   N)r   r   r   r:   r)  r.   r1   r   r   r   r   Foo  r   r  c                   @   rQ   )z2TestCase.test_default_factory_derived.<locals>.Barr6   rK   Nr   r   r   rK   r0   r1   r   r   r   r   Bar  rT   r  r6   c                   @   r   )z2TestCase.test_default_factory_derived.<locals>.BazNr   r   r   r   r   Baz  r   r  )r!   r"   r.   rK   )r&   r  r  r  r   r   r   test_default_factory_derived  s   z%TestCase.test_default_factory_derivedc                 C   s   t G dd d}G dd d|}t G dd d|}|dd}| |j|jfd	 | td
 |j W d    n1 s>w   Y  G dd d|}|dd}| |j|jfd d S )Nc                   @   r-   )z3TestCase.test_intermediate_non_dataclass.<locals>.Ar.   Nr/   r   r   r   r   A  r2   r  c                   @   r-   )z3TestCase.test_intermediate_non_dataclass.<locals>.BrK   Nr/   r   r   r   r   rS        
 rS   c                   @   r-   )z3TestCase.test_intermediate_non_dataclass.<locals>.Crz   Nr/   r   r   r   r   r     r2   r   r6   rN   )r6   rN   zobject has no attributec                   @   r-   )z3TestCase.test_intermediate_non_dataclass.<locals>.Dr   Nr/   r   r   r   r   r    r  r  r   r}   )r   r}   )r!   r"   r.   rz   r<   AttributeErrorrK   )r&   r  rS   r   r   r  r  r   r   r   test_intermediate_non_dataclass  s   

z(TestCase.test_intermediate_non_dataclassc                 C   D   |  td tG dd d}W d    d S 1 sw   Y  d S )Nr  c                   @   r  )z1TestCase.test_classvar_default_factory.<locals>.Cra  r.   Nr  r   r   r   r   r     r   r   r<   rW   r!   ru   r   r   r   test_classvar_default_factory  s   "z&TestCase.test_classvar_default_factoryc                    s   G dd d}|  td |  tt |  t| |  t|  tG dd d tG  fddd} d}||d	}| t  | t| |  t|j | t|j |  t|j d S )
Nc                   @   r   )z0TestCase.test_is_dataclass.<locals>.NotDataClassNr   r   r   r   r   NotDataClass  rH  r  r   c                   @   r-   )z%TestCase.test_is_dataclass.<locals>.Cr.   Nr/   r   r   r   r   r     r2   r   c                       s   e Zd ZU  ed< eed< dS )z%TestCase.test_is_dataclass.<locals>.Dr  eNr   r   r   r1   r0   r   r   r   r   r  !  rV   r  rs   r   )r  is_dataclassr0   r!   r   r.   r  r  )r&   r  r  r   r  r   r  r   test_is_dataclass  s    
zTestCase.test_is_dataclassc              
   C   s(  G dd d}|  t| | }G dd d}| }g |_||fD ]o}| j|d_ |  t| | td t| W d    n1 sGw   Y  | td t| W d    n1 saw   Y  | td t|dd W d    n1 s}w   Y  W d    q"1 sw   Y  q"d S )	Nc                   @   rn   )zATestCase.test_is_dataclass_when_getattr_always_returns.<locals>.Ac                 S   r]   Nr   r   )r&   keyr   r   r   __getattr__2  rb   zMTestCase.test_is_dataclass_when_getattr_always_returns.<locals>.A.__getattr__N)r   r   r   r  r   r   r   r   r  1  r2  r  c                   @   r   )zATestCase.test_is_dataclass_when_getattr_always_returns.<locals>.BNr   r   r   r   r   rS   8  rH  rS   )objz'should be called on dataclass instancesr   rG   )	r  r  Z__dataclass_fields__r   r<   rW   asdictr  replace)r&   r  r   rS   r   r  r   r   r   -test_is_dataclass_when_getattr_always_returns/  s*   

z6TestCase.test_is_dataclass_when_getattr_always_returnsc                 C   s0   t G dd d}| t|t|dd d S )Nc                   @      e Zd ZU eed< eed< dS )z:TestCase.test_helper_fields_with_class_instance.<locals>.Cr.   rK   N)r   r   r   r0   r1   rK  r   r   r   r   r   L  rV   r   r   g        r  ru   r   r   r   &test_helper_fields_with_class_instanceI  s   z/TestCase.test_helper_fields_with_class_instancec                 C   s   |  td td W d    n1 sw   Y  G dd d}|  td t| W d    n1 s6w   Y  |  td t|  W d    d S 1 sRw   Y  d S )Nzdataclass type or instancer   c                   @   r   )z0TestCase.test_helper_fields_exception.<locals>.CNr   r   r   r   r   r   Y  r   r   )r<   rW   r$   ru   r   r   r   test_helper_fields_exceptionS  s   

"z%TestCase.test_helper_fields_exceptionc                 C   s   t G dd d}|dd}| t|ddd | t|t| | t|t| d|_| t|ddd | tt|t d S )Nc                   @   rU   )z&TestCase.test_helper_asdict.<locals>.Cr.   rK   Nr/   r   r   r   r   r   a  rV   r   r6   r   r  r3   )r!   r"   r  r  r.   r   r  r)  r   r   r   r   test_helper_asdict_  s   
zTestCase.test_helper_asdictc                 C      t G dd d}| td t| W d    n1 sw   Y  | td tt W d    d S 1 s9w   Y  d S )Nc                   @   rU   )z8TestCase.test_helper_asdict_raises_on_classes.<locals>.Cr.   rK   Nr/   r   r   r   r   r   p  rV   r   dataclass instance)r!   r<   rW   r  r0   ru   r   r   r   $test_helper_asdict_raises_on_classesn     

"z-TestCase.test_helper_asdict_raises_on_classesc                 C   sx   t G dd d}g }|d|}t|}| |d | | |d | |d}t|}|d d | |jg  d S )Nc                   @   ,   e Zd ZU eed< eedZee ed< dS )z2TestCase.test_helper_asdict_copy_values.<locals>.Cr.   ra  rK   N	r   r   r   r0   r1   r:   r(  rK   r   r   r   r   r   r   z     
 r   r6   rK   )r!   r  r"   r  appendrK   )r&   r   initialr   r  r   r   r   test_helper_asdict_copy_valuesy     
z'TestCase.test_helper_asdict_copy_valuesc                    s   t G dd d t G  fddd}|d dd}t|}| |ddddd	 | t|t| d
|j_| t|ddd
dd	 d S )Nc                   @   rU   )z2TestCase.test_helper_asdict_nested.<locals>.UserIdtokengroupNr/   r   r   r   r   UserId  rV   r  c                          e Zd ZU eed<  ed< dS )z0TestCase.test_helper_asdict_nested.<locals>.UserrC   rB   Nr   r   r  r   r   User  rV   r  Joe{   r6   )r  r  rC   rB   r   )r!   r  r"   r  rB   r  )r&   r  ur  r   r  r   test_helper_asdict_nested  s   z"TestCase.test_helper_asdict_nestedc           	         s  t G dd d t G  fddd}t G  fddd}t G  fddd} d	d
} dd}|d||g}|d||f}|d||d}| t|dd	d
ddddgd | t|dd	d
ddddfd | t|dd	d
dddddd d S )Nc                   @   r  )z<TestCase.test_helper_asdict_builtin_containers.<locals>.UserrC   rB   Nr   r   r   r   r1   r0   r   r   r   r   r    rV   r  c                       "   e Zd ZU eed< e  ed< dS )zATestCase.test_helper_asdict_builtin_containers.<locals>.GroupListrB   usersNr   r   r   r0   r1   r   r   r  r   r   	GroupList  rM   r	  c                       &   e Zd ZU eed< e df ed< dS )zBTestCase.test_helper_asdict_builtin_containers.<locals>.GroupTuplerB   .r  Nr   r   r   r0   r1   r   r   r  r   r   
GroupTuple     
 r  c                       &   e Zd ZU eed< ee f ed< dS )zATestCase.test_helper_asdict_builtin_containers.<locals>.GroupDictrB   r  Nr   r   r   r0   r1   r	   r   r   r  r   r   	GroupDict  r  r  Alicer6   Bobr   r   r   secondr  )rB   r  r!   r"   r  	r&   r	  r  r  r   r   Zglgtgdr   r  r   %test_helper_asdict_builtin_containers  s,   



z.TestCase.test_helper_asdict_builtin_containersc                    sx   t G dd d t G  fddd}| t| dgdddgii | t| ddiddddiii d S )	Nc                   @   r-   )zDTestCase.test_helper_asdict_builtin_object_containers.<locals>.Childr  Nr   r   r   r   r1   r   r   r   r   Child  r2   r  c                       r3  )zETestCase.test_helper_asdict_builtin_object_containers.<locals>.ParentchildNr4  r   r  r   r   Parent  r2   r  r6   r  r  r   r  r&   r  r   r  r   ,test_helper_asdict_builtin_object_containers  s   $,z5TestCase.test_helper_asdict_builtin_object_containersc                 C   s   t G dd d}|dd}t|td}| |tddg | |t|td d|_t|td}| |td	dg | t|t d S )
Nc                   @   rU   )z.TestCase.test_helper_asdict_factory.<locals>.Cr.   rK   Nr/   r   r   r   r   r     rV   r   r6   r   Zdict_factory)r.   r6   )rK   r   r3   )r.   r3   )r!   r  r   r"   r  r.   r   r  r&   r   r   r  r   r   r   test_helper_asdict_factory  s   
z#TestCase.test_helper_asdict_factoryc                    s   t dd tG  fddd}|d d|d dd	d
d}t|}| |d dd dd	d
ddd t|td}| |d dd dd	d
ddd | t|t | t|d d t d S )NTa b cc                       r  )z1TestCase.test_helper_asdict_namedtuple.<locals>.Cr.   rK   Nr   r   r$  r   r   r     rV   r   outerr6   innerr        r   r  r!  rK   )r   r!   r  r"   r   r   r  r"  r   r&  r   test_helper_asdict_namedtuple  s0   
 

	z&TestCase.test_helper_asdict_namedtuplec                 C   sN   t G dd d}tdd}||ddi}| t|d|dddii d S )	Nc                   @   r-   )z5TestCase.test_helper_asdict_namedtuple_key.<locals>.Cr  N)r   r   r   r)  r1   r   r   r   r   r     r2   r   r$  r   zan ar   r  r   )r!   r   r"   r  )r&   r   r$  r   r   r   r   !test_helper_asdict_namedtuple_key  s
   
"z*TestCase.test_helper_asdict_namedtuple_keyc                    s   G dd dt dd tG  fddd} d}||}t|}| |d dd	i | |d | | |d  d d S )
Nc                   @   rn   )z9TestCase.test_helper_asdict_namedtuple_derived.<locals>.Tc                 S      | j S rp   r,  r`   r   r   r   my_a   rp  z>TestCase.test_helper_asdict_namedtuple_derived.<locals>.T.my_aN)r   r   r   r/  r   r   r   r   r$    r2  r$  ZTbaser   c                       r3  )z9TestCase.test_helper_asdict_namedtuple_derived.<locals>.Cr  Nr4  r   r&  r   r   r     r2   r   rC  r  r,  )r   r!   r  r"   r  r/  )r&   r   r   r   r  r   r&  r   %test_helper_asdict_namedtuple_derived  s   z.TestCase.test_helper_asdict_namedtuple_derivedc                 C   s   t G dd d}|d}| t|d | t|t| | t|t| d|_| t|d | tt|t d S )Nc                   @   rI   )z'TestCase.test_helper_astuple.<locals>.Cr.   r   rK   NrL   r   r   r   r   r     rM   r   r6   )r6   r   r3   )r6   r3   )r!   r"   r  r  rK   r   r  r  r   r   r   r   test_helper_astuple  s   zTestCase.test_helper_astuplec                 C   r  )Nc                   @   rU   )z9TestCase.test_helper_astuple_raises_on_classes.<locals>.Cr.   rK   Nr/   r   r   r   r   r   !  rV   r   r  )r!   r<   rW   r  r0   ru   r   r   r   %test_helper_astuple_raises_on_classes  r  z.TestCase.test_helper_astuple_raises_on_classesc                 C   sx   t G dd d}g }|d|}t|}| |d | | |d | |d}t|}|d d | |jg  d S )Nc                   @   r  )z3TestCase.test_helper_astuple_copy_values.<locals>.Cr.   ra  rK   Nr  r   r   r   r   r   +  r  r   r6   )r!   r  r"   r  r  rK   )r&   r   r  r   r   r   r   r   test_helper_astuple_copy_values*  r  z(TestCase.test_helper_astuple_copy_valuesc                    s|   t G dd d t G  fddd}|d dd}t|}| |d | t|t| d	|j_| t|d
 d S )Nc                   @   rU   )z3TestCase.test_helper_astuple_nested.<locals>.UserIdr  r  Nr/   r   r   r   r   r  :  rV   r  c                       r  )z1TestCase.test_helper_astuple_nested.<locals>.UserrC   rB   Nr   r   r  r   r   r  >  rV   r  r  r   r6   )r  )r   r6   r   )r  )r   r   )r!   r  r"   r  rB   r  )r&   r  r  r   r   r  r   test_helper_astuple_nested9  s   z#TestCase.test_helper_astuple_nestedc           	         s   t G dd d t G  fddd}t G  fddd}t G  fddd} d	d
} dd}|d||g}|d||f}|d||d}| t|dddgf | t|d | t|ddddf d S )Nc                   @   r  )z=TestCase.test_helper_astuple_builtin_containers.<locals>.UserrC   rB   Nr  r   r   r   r   r  J  rV   r  c                       r  )zBTestCase.test_helper_astuple_builtin_containers.<locals>.GroupListrB   r  Nr  r   r  r   r   r	  N  rM   r	  c                       r
  )zCTestCase.test_helper_astuple_builtin_containers.<locals>.GroupTuplerB   .r  Nr  r   r  r   r   r  R  r  r  c                       r  )zBTestCase.test_helper_astuple_builtin_containers.<locals>.GroupDictrB   r  Nr  r   r  r   r   r  V  r  r  r  r6   r  r   r   r  r  r6   r  r   )r   )r5  r6  r!   r"   r  r  r   r  r   &test_helper_astuple_builtin_containersI  s    

z/TestCase.test_helper_astuple_builtin_containersc                    sp   t G dd d t G  fddd}| t| dgdgff | t| ddiddiff d S )Nc                   @   r-   )zETestCase.test_helper_astuple_builtin_object_containers.<locals>.Childr  Nr  r   r   r   r   r  d  r2   r  c                       r3  )zFTestCase.test_helper_astuple_builtin_object_containers.<locals>.Parentr  Nr4  r   r  r   r   r  h  r2   r  r6   r   r7  r  r   r  r   -test_helper_astuple_builtin_object_containersc  s    (z6TestCase.test_helper_astuple_builtin_object_containersc                    s   t G dd d}tdd  fdd}|dd}t||d	}| | dd | |t||d	 d
|_t||d	}| | d
d | t|  d S )Nc                   @   rU   )z/TestCase.test_helper_astuple_factory.<locals>.Cr.   rK   Nr/   r   r   r   r   r   p  rV   r   NTzx yc                    s    |  S rp   r   )r7  r:  r   r   ntu     z0TestCase.test_helper_astuple_factory.<locals>.ntr6   r   Ztuple_factoryr3   )r!   r   r  r"   r  r.   r   r  )r&   r   r<  r   r   r   r;  r   test_helper_astuple_factoryo  s   

z$TestCase.test_helper_astuple_factoryc                    s   t dd tG  fddd}|d d|d dd	d
d}t|}| |d dddf t|td}| |d dd dd	d
gdg d S )Nr$  r%  c                       r  )z2TestCase.test_helper_astuple_namedtuple.<locals>.Cr.   rK   Nr   r   r&  r   r   r     rV   r   r'  r6   r(  r  r)  r*  r   )r(  )r  r)  r*  r>  )r   r!   r  r"   r(  )r&   r   r   r   r   r&  r   test_helper_astuple_namedtuple  s   
 (z'TestCase.test_helper_astuple_namedtuplec                 C   sN   dt t di}tdd|}t|}| || | t|ddddd d S )Nr1   r  r   r   r6   r   )r0   r  r!   r"   r  r&   Zcls_dictr   Zcls1r   r   r   test_dynamic_class_creation  s
    z$TestCase.test_dynamic_class_creationc                 C   sT   t t dtddd}tdd|}t|}| || | t|dddd d S )Nr  r}   r   )r1   rK   r   r   r6   )r0   r:   r  r!   r"   r  rA  r   r   r   'test_dynamic_class_creation_using_field  s   z0TestCase.test_dynamic_class_creation_using_fieldc                    s   t G dd d}g   fdd}||_|dd}| d d  | d d  | d	g f d
  | dg f d  | d  | d d  d S )Nc                   @   sj   e Zd ZU eed< e Zeed< eeddZeed< eedZ	eed< eddd	Z
eed
< dZeed< dS )z&TestCase.test_init_in_order.<locals>.Cr   r   Fr  r   ra  r  r   rU  r  r  N)r   r   r   r0   r1   r:   r   r(  r   r  r  r  r   r   r   r   r     s   
 r   c                    s     ||f d S rp   )r  r&   rC   valueZcallsr   r   setattr  rw  z,TestCase.test_init_in_order.<locals>.setattrr   r6   )r   r   )r   r6   r   r   r  rN   )r  r   )r  r   r   )r!   __setattr__r"   r   )r&   r   rG  r   r   rF  r   test_init_in_order  s   
zTestCase.test_init_in_orderc                 C   s   t G dd d}|d}| d|j | d|j | d|j | d|j | |jd | d	|j | |jd | d|j | |jd | d|j | |jg  | d|j | |j	g  | d|j | d	|j | |jd d S )
Nc                   @   s\   e Zd ZU eed< eeddZeed< eedZeed< edddZ	eed	< d
Z
eed< dS )z'TestCase.test_items_in_dicts.<locals>.Cr   Fr  r   ra  r   r   rU  r  r   r  N)r   r   r   r0   r1   r:   r(  r   r   r  r  r   r   r   r   r     s   
 r   r   r   r   r   r  r   r  )
r!   r   r   r   r"   r  r  r   r   r   r   r   r   r   test_items_in_dicts  s&   zTestCase.test_items_in_dictsc                 C   s*   t G dd d}| |djd d S )Nc                   @   s"   e Zd ZU eed< edd ZdS )z:TestCase.test_alternate_classmethod_constructor.<locals>.Cr.   c                 S   s   d}| |S )Nr   r   )r   filenameZvalue_in_filer   r   r   	from_file  s   zDTestCase.test_alternate_classmethod_constructor.<locals>.C.from_fileN)r   r   r   r0   r1   r  rL  r   r   r   r   r     s   
 r   rK  r   )r!   r"   rL  r.   ru   r   r   r   &test_alternate_classmethod_constructor  s   	z/TestCase.test_alternate_classmethod_constructorc                 C   s   t G dd d}| t|d j | tt|d jd | td dt|d jd< W d    d S 1 s;w   Y  d S )Nc                   @   r-   )z/TestCase.test_field_metadata_default.<locals>.Cr*   Nr/   r   r   r   r   r     r2   r   r    does not support item assignmentrN   test)r!   r  r$   metadatar"   r#   r<   rW   ru   r   r   r   test_field_metadata_default  s   "z$TestCase.test_field_metadata_defaultc                    sF  |  t tG dd d}W d    n1 sw   Y  i  tG  fddd}| t|d j | tt|d jd d d< | tt|d jd | t|d jd d | td dt|d jd	< W d    n1 szw   Y  d
ddd tG  fddd}| tt|d jd | t|d jd	 d
 | t|d jd d | t|d jd d d d< | tt|d jd | t|d jd d |  t	 t|d jd  W d    n1 sw   Y  | td dt|d jd	< W d    d S 1 sw   Y  d S )Nc                   @   r   )/TestCase.test_field_metadata_mapping.<locals>.Cr   rP  r*   Nr   r   r   r:   r*   r0   r1   r   r   r   r   r     r   r   c                       r   rR  rS  r*   NrT  r   r  r   r   r     r   r   r6   r   rN  rN   rO  rs   Z42Zthree)rO  rh  rN   c                       r   rU  rT  r   rV  r   r   r     r   rh  r   Zbaz)
r   rW   r!   r  r$   rP  r"   r#   r<   KeyErrorru   r   rV  r   test_field_metadata_mapping  sF   $z$TestCase.test_field_metadata_mappingc                    s   G dd d t G  fddd}| tt|d jd | t|d jd d | t t|d jd	  W d    n1 sEw   Y  | t|d jd
 d d S )Nc                   @   $   e Zd Zdd Zdd Zdd ZdS )zDTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpacec                 [   s   | j | d S rp   )r   update)r&   kwr   r   r   r   )  s   zMTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpace.__init__c                 S   s   |dkrdS t | |S )Nxyzzyplugh)r   )r&   itemr   r   r   __getitem__,  s   
zPTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpace.__getitem__c                 S   s
   | j  S rp   )r   __len__r`   r   r   r   r`  1  r/  zLTestCase.test_field_metadata_custom_mapping.<locals>.SimpleNameSpace.__len__N)r   r   r   r   r_  r`  r   r   r   r   SimpleNameSpace(  s    ra  c                       s&   e Zd ZU e dddZeed< dS )z6TestCase.test_field_metadata_custom_mapping.<locals>.Crs   r,  rS  r*   NrT  r   ra  r   r   r   4     
 r   r   r6   r   rs   r   r\  r]  )r!   r"   r#   r$   rP  r   r  ru   r   rb  r   "test_field_metadata_custom_mapping&  s   z+TestCase.test_field_metadata_custom_mappingc                    sX   t d tG  fdddt  }|d}| |jd | |jd t|t  }d S )Nr$  c                       s"   e Zd ZU  ed< dZeed< dS )z5TestCase.test_generic_dataclasses.<locals>.LabeledBoxcontent	<unknown>labelN)r   r   r   r1   rg  r   r   r&  r   r   
LabeledBoxB  rM   rh  r3   rf  )r   r!   r
   r"   re  rg  r   r0   )r&   rh  ZboxAliasr   r&  r   test_generic_dataclasses?  s   z!TestCase.test_generic_dataclassesc                    s   t d t dtG  fdddt f }tG dd d|tf }|t }|ddd	}| t|d
 G dd d|tf }|t }|dd}| | d d S )NSr$  c                       s   e Zd ZU ed<  ed< dS )z-TestCase.test_generic_extending.<locals>.Baser.   rK   Nr4  r   rk  r$  r   r   rw   R  rV   rw   c                   @   r-   )z4TestCase.test_generic_extending.<locals>.DataDerivedZ	new_fieldNr   r   r   r   r   DataDerivedW  r2   rm  r   test1test2)r   rn  ro  c                   @   rn   )z7TestCase.test_generic_extending.<locals>.NonDataDerivedc                 S   r.  rp   rK   r`   r   r   r   
new_method_  rp  zBTestCase.test_generic_extending.<locals>.NonDataDerived.new_methodN)r   r   r   rq  r   r   r   r   NonDataDerived^  r2  rr  rs         ?)	r   r!   r
   r0   r   r"   r  rK  rq  )r&   rw   rm  ri  r   rr  r   rl  r   test_generic_extendingN  s    
zTestCase.test_generic_extendingc                    s   t d tG  fdddt  }tdd fdt  d fg|t t  fddid	}| |t d
djd  | |t d
ddjd | |t d
ddj	d |  }| |t d
dj
d
 | |j||ttf d S )Nr$  c                       r3  )z-TestCase.test_generic_dynamic.<locals>.Parentr.   Nr4  r   r&  r   r   r  h  r2   r  r  rK   rz   rg   r3   )bases	namespacer6   r   rN   )r   r!   r
   r   r   r0   r   rz   r"   rg   r.   __mro__r   )r&   r  r  ri  r   r&  r   test_generic_dynamice  s   zTestCase.test_generic_dynamicc              
   C   s6  t G dd dat G dd dat G dd datd}d|_tdtddtd|tdtdg d	g}|D ]^}ttjd D ]T}| j||d
C t	t
||}| |j|j | |j|j | || d|_t	t
||}| |j|j | |j|j W d    qC1 sw   Y  qCq:d S )Nc                   @   rI   )Pr.   r   rK   NrL   r   r   r   r   ry  x  rM   ry  c                   @   *   e Zd ZU eed< edddZeed< dS )Qr.   r   FrU  rK   Nr   r   r   r0   r1   r:   rK   r   r   r   r   r{  |     
 r{  c                   @   r  )Rr.   ra  rK   Nr  r   r   r   r   r~    r  r~  r6   r   )r   rN   r   )sampleprotor3   )r!   ry  r{  r~  rK   rangepickleHIGHEST_PROTOCOLr   loadsdumpsr"   r.   r  )r&   qZsamplesr  r  Z
new_sampleZanother_new_sampler   r   r   test_dataclassses_pickleablev  s.   ,z%TestCase.test_dataclassses_pickleablec                 C   s   t ddddG dd d}| |jjd dD ]}| t||jd|  q| td |  W d    d S 1 s=w   Y  d S )	NT)r   rm   rZ   c                   @   rU   )z.TestCase.test_dataclasses_qualnames.<locals>.Ar.   rK   Nr/   r   r   r   r   r    rV   r  r   )
rh   r   r   r   r   ra   r   __repr__rH  __delattr__z/TestCase.test_dataclasses_qualnames.<locals>.A.zA\.__init__\(\) missing)r!   r"   r   r   r   r   r<   rW   )r&   r  functionr   r   r   test_dataclasses_qualnames  s   "z#TestCase.test_dataclasses_qualnamesN)ar   r   r   r(   r+   r5   r?   rE   rH   rX   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r,  r8  r9  r;  rF  rY  r`  rb  rc  rk  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r   r#  r+  r-  r0  r1  r2  r3  r4  r8  r9  r?  r@  rB  rC  rI  rJ  rM  rQ  rX  rd  rj  rt  rx  r  r  r   r   r   r   r      s    ,5!6(!$-F/9
!+r   c                   @   rY  )TestFieldNoAnnotationc                 C   r  )N)'f' is a field but has no type annotationc                   @      e Zd Ze ZdS )z>TestFieldNoAnnotation.test_field_without_annotation.<locals>.CNr   r   r   r:   r  r   r   r   r   r         
r   r  ru   r   r   r   test_field_without_annotation  s   "z3TestFieldNoAnnotation.test_field_without_annotationc                 C   sX   t G dd d}| td t G dd d|}W d    d S 1 s%w   Y  d S )Nc                   @   r-   )zUTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base.<locals>.Br  Nr/   r   r   r   r   rS     r2   rS   r  c                   @   r  )zUTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base.<locals>.CNr  r   r   r   r   r     r  r   r!   r<   rW   r  r   r   r   4test_field_without_annotation_but_annotation_in_base  s   "zJTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_basec                 C   sT   G dd d}|  td tG dd d|}W d    d S 1 s#w   Y  d S )Nc                   @   r-   )zcTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base_not_dataclass.<locals>.Br  Nr/   r   r   r   r   rS     r  rS   r  c                   @   r  )zcTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base_not_dataclass.<locals>.CNr  r   r   r   r   r     r  r   r  r  r   r   r   Btest_field_without_annotation_but_annotation_in_base_not_dataclass  s   "zXTestFieldNoAnnotation.test_field_without_annotation_but_annotation_in_base_not_dataclassN)r   r   r   r  r  r  r   r   r   r   r    s    r  c                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )TestDocStringc                 C   s    |  |dd|dd d S )N  )r"   r  )r&   r   r   r   r   r   assertDocStrEqual  s    zTestDocString.assertDocStrEqualc                 C   $   t G dd d}| |jd d S )Nc                   @   s   e Zd ZU 	 eed< dS )z?TestDocString.test_existing_docstring_not_overridden.<locals>.Cr.   Nr/   r   r   r   r   r     s   
 r   zLorem ipsum)r!   r"   __doc__ru   r   r   r   &test_existing_docstring_not_overridden     z4TestDocString.test_existing_docstring_not_overriddenc                 C   r  )Nc                   @   r   )z1TestDocString.test_docstring_no_fields.<locals>.CNr   r   r   r   r   r     r   r   zC()r!   r  r  ru   r   r   r   test_docstring_no_fields     z&TestDocString.test_docstring_no_fieldsc                 C   r  )Nc                   @   r-   )z1TestDocString.test_docstring_one_field.<locals>.Cr.   Nr/   r   r   r   r   r     r2   r   zC(x:int)r  ru   r   r   r   test_docstring_one_field  r  z&TestDocString.test_docstring_one_fieldc                 C   r  )Nc                   @   rU   )z2TestDocString.test_docstring_two_fields.<locals>.Cr.   rK   Nr/   r   r   r   r   r     rV   r   zC(x:int, y:int)r  ru   r   r   r   test_docstring_two_fields  r  z'TestDocString.test_docstring_two_fieldsc                 C   r  )Nc                   @   s&   e Zd ZU eed< eed< eed< dS )z4TestDocString.test_docstring_three_fields.<locals>.Cr.   rK   rz   Nr   r   r   r0   r1   r   r   r   r   r   r     r>  r   zC(x:int, y:int, z:str)r  ru   r   r   r   test_docstring_three_fields  s   z)TestDocString.test_docstring_three_fieldsc                 C   r  )Nc                   @   rQ   )z>TestDocString.test_docstring_one_field_with_default.<locals>.CrN   r.   NrO   r   r   r   r   r     rT   r   z
C(x:int=3)r  ru   r   r   r   %test_docstring_one_field_with_default  r  z3TestDocString.test_docstring_one_field_with_defaultc                 C   r  )Nc                   @   s&   e Zd ZU dZeeedf ed< dS )zCTestDocString.test_docstring_one_field_with_default_none.<locals>.CNr.   )r   r   r   r.   r   r0   r  r1   r   r   r   r   r     rc  r   zC(x:Optional[int]=None)r  ru   r   r   r   *test_docstring_one_field_with_default_none  r  z8TestDocString.test_docstring_one_field_with_default_nonec                 C   r  )Nc                   @   r  )z2TestDocString.test_docstring_list_field.<locals>.Cr.   N)r   r   r   r   r0   r1   r   r   r   r   r     rT   r   zC(x:List[int])r  ru   r   r   r   test_docstring_list_field  r  z'TestDocString.test_docstring_list_fieldc                 C   r  )Nc                   @   s$   e Zd ZU eedZee ed< dS )zGTestDocString.test_docstring_list_field_with_default_factory.<locals>.Cra  r.   N)	r   r   r   r:   r(  r.   r   r0   r1   r   r   r   r   r     r   r   zC(x:List[int]=<factory>)r  ru   r   r   r   .test_docstring_list_field_with_default_factory  r  z<TestDocString.test_docstring_list_field_with_default_factoryc                 C   r  )Nc                   @   r-   )z3TestDocString.test_docstring_deque_field.<locals>.Cr.   N)r   r   r   r   r1   r   r   r   r   r     r2   r   zC(x:collections.deque)r  ru   r   r   r   test_docstring_deque_field  r  z(TestDocString.test_docstring_deque_fieldc                 C   r  )Nc                   @   r  )zHTestDocString.test_docstring_deque_field_with_default_factory.<locals>.Cra  r.   N)r   r   r   r:   r   r.   r1   r   r   r   r   r   !  r   r   z C(x:collections.deque=<factory>)r  ru   r   r   r   /test_docstring_deque_field_with_default_factory   r  z=TestDocString.test_docstring_deque_field_with_default_factoryN)r   r   r   r  r  r  r  r  r  r  r  r  r  r  r  r   r   r   r   r    s    	r  c                   @   ,   e Zd Zdd Zdd Zdd Zdd Zd	S )
TestInitc                 C   s   G dd d}t G dd d|}|d}| |jd | dt| t ddG d	d d|}| }| |jd | |jd
 d S )Nc                   @   rn   )z&TestInit.test_base_has_init.<locals>.Bc                 S   r|  )Nrd   rz   r`   r   r   r   r   +  s   z/TestInit.test_base_has_init.<locals>.B.__init__Nr0  r   r   r   r   rS   *  r2  rS   c                   @   rQ   )&TestInit.test_base_has_init.<locals>.Cr   r.   NrO   r   r   r   r   r   3  rT   r   rs   rz   Fr   c                   @   rQ   )r  rs   r.   NrO   r   r   r   r   r   <  rT   rd   )r!   r"   r.   r   r   rz   )r&   rS   r   r   r   r   r   test_base_has_init)  s   	zTestInit.test_base_has_initc                 C   sT   t dd G dd d}| | jd t dd G dd d}| | jd d S )NFr   c                   @   rQ   ) TestInit.test_no_init.<locals>.Cr   r*   N)r   r   r   r*   r0   r1   r   r   r   r   r   E  s   
 r   r   c                   @   rs  )r  r   r*   c                 S   r|  NrN   r*   r`   r   r   r   r   L  r/  z)TestInit.test_no_init.<locals>.C.__init__N)r   r   r   r*   r0   r1   r   r   r   r   r   r   J  s   
 rN   )r!   r"   r*   ru   r   r   r   test_no_initC  s   

zTestInit.test_no_initc                 C   s|   t G dd d}| |djd t ddG dd d}| |djd	 t d
dG dd d}| |djd d S )Nc                   @   r[   ))TestInit.test_overwriting_init.<locals>.Cr.   c                 S      d| | _ d S rv  rG   r&   r.   r   r   r   r   W  r  2TestInit.test_overwriting_init.<locals>.C.__init__Nr   r   r   r0   r1   r   r   r   r   r   r   T  rV   r   rN   rC  Tr   c                   @   r[   )r  r.   c                 S   r  rv  rG   r  r   r   r   r   ^  r  r  Nr  r   r   r   r   r   [  rV   r      Fc                   @   r[   )r  r.   c                 S   r  rv  rG   r  r   r   r   r   e  r  r  Nr  r   r   r   r   r   b  rV   r}   rs   r4   ru   r   r   r   test_overwriting_initP  s   zTestInit.test_overwriting_initc                 C   s`   G dd dt }tG dd d|}| |djd tG dd d|}| |djd d S )	Nc                   @   r-   )z.TestInit.test_inherit_from_protocol.<locals>.Pr   Nr/   r   r   r   r   ry  m  r  ry  c                   @   r-   )z.TestInit.test_inherit_from_protocol.<locals>.Cr   Nr/   r   r   r   r   r   p  r2   r   r}   c                   @   rn   )z.TestInit.test_inherit_from_protocol.<locals>.Dc                 S   s   |d | _ d S rv  r,  )r&   r   r   r   r   r   x  r  z7TestInit.test_inherit_from_protocol.<locals>.D.__init__Nr0  r   r   r   r   r  v  rr   r  rs   )r   r!   r"   r   )r&   ry  r   r  r   r   r   test_inherit_from_protocoli  s   z#TestInit.test_inherit_from_protocolN)r   r   r   r  r  r  r  r   r   r   r   r  (  s
    r  c                   @   rY  )TestReprc                 C   s   t G dd d}t G dd d|}|d}| t|d t G dd d|}| t| d	 t G d
d d}| t|dd | t| d d S )Nc                   @   r-   )zTestRepr.test_repr.<locals>.Br.   Nr/   r   r   r   r   rS     r2   rS   c                   @   rQ   )TestRepr.test_repr.<locals>.Crs   rK   Nr  r   r   r   r   r     rT   r   r   z(TestRepr.test_repr.<locals>.C(x=4, y=10)c                   @   rQ   )zTestRepr.test_repr.<locals>.Dr   r.   NrO   r   r   r   r   r    rT   r  z)TestRepr.test_repr.<locals>.D(x=20, y=10)c                   @   s0   e Zd ZeG dd dZeG dd dZdS )r  c                   @   r-   )zTestRepr.test_repr.<locals>.C.Dr*   Nr/   r   r   r   r   r    r2   r  c                   @   r   )zTestRepr.test_repr.<locals>.C.ENr   r   r   r   r   r    r   r  N)r   r   r   r!   r  r  r   r   r   r   r     s
    r   z$TestRepr.test_repr.<locals>.C.D(i=0)z!TestRepr.test_repr.<locals>.C.E())r!   r"   rA   r  r  )r&   rS   r   r'   r  r   r   r   	test_repr  s   zTestRepr.test_reprc                 C   sb   t ddG dd d}| t dt|d t ddG dd d}| t|dd d S )	NFr   c                   @   r-   ) TestRepr.test_no_repr.<locals>.Cr.   Nr/   r   r   r   r   r     r2   r   z+.TestRepr.test_no_repr.<locals>.C object atrN   c                   @   r[   )r  r.   c                 S   r]   )NC-classr   r`   r   r   r   r    rb   z)TestRepr.test_no_repr.<locals>.C.__repr__Nr   r   r   r0   r1   r  r   r   r   r   r     rV   r  )r!   r   r   rA   r"   ru   r   r   r   test_no_repr  s   
zTestRepr.test_no_reprc                 C   s   t G dd d}| t|dd t ddG dd d}| t|dd t ddG d	d d}| t|dd d S )
Nc                   @   r[   ))TestRepr.test_overwriting_repr.<locals>.Cr.   c                 S   r]   Nr.   r   r`   r   r   r   r    rb   2TestRepr.test_overwriting_repr.<locals>.C.__repr__Nr  r   r   r   r   r     rV   r   r   r.   Tr   c                   @   r[   )r  r.   c                 S   r]   r  r   r`   r   r   r   r    rb   r  Nr  r   r   r   r   r     rV   Fc                   @   r[   )r  r.   c                 S   r]   r  r   r`   r   r   r   r    rb   r  Nr  r   r   r   r   r     rV   r~   ru   r   r   r   test_overwriting_repr  s   zTestRepr.test_overwriting_reprN)r   r   r   r  r  r  r   r   r   r   r  ~  s    r  c                   @      e Zd Zdd Zdd ZdS )TestEqc                 C   sl   t ddG dd d}| |d|d |d}| || t ddG dd d}| |dd d S )	NFr   c                   @   r-   )TestEq.test_no_eq.<locals>.Cr.   Nr/   r   r   r   r   r     r2   r   r   rN   c                   @   r[   )r  r.   c                 S      |dkS rt  r   rf   r   r   r   rh     r=  z#TestEq.test_no_eq.<locals>.C.__eq__Nrj   r   r   r   r   r     rV   rs   )r!   r   r"   r   r   r   r   
test_no_eq  s   zTestEq.test_no_eqc                 C   s   t G dd d}| |dd | |dd t ddG dd d}| |dd | |dd t d	dG d
d d}| |dd | |dd d S )Nc                   @   r[   )%TestEq.test_overwriting_eq.<locals>.Cr.   c                 S   r  r  r   rf   r   r   r   rh     r=  ,TestEq.test_overwriting_eq.<locals>.C.__eq__Nrj   r   r   r   r   r     rV   r   r6   rN   Tr  c                   @   r[   )r  r.   c                 S   r  rf  r   rf   r   r   r   rh     r=  r  Nrj   r   r   r   r   r     rV   r   Fc                   @   r[   )r  r.   c                 S   r  rg  r   rf   r   r   r   rh     r=  r  Nrj   r   r   r   r   r     rV   r}   r   ru   r   r   r   test_overwriting_eq  s   zTestEq.test_overwriting_eqN)r   r   r   r  r  r   r   r   r   r    s    r  c                   @   rY  )TestOrderingc                 C   sZ   t tG dd d}| |dd | |dd | |dd | |dd d S )Nc                   @   r[   )z5TestOrdering.test_functools_total_ordering.<locals>.Cr.   c                 S   s
   | j |kS rp   rG   rf   r   r   r   r     s   
z<TestOrdering.test_functools_total_ordering.<locals>.C.__lt__Nr   r   r   r0   r1   r   r   r   r   r   r     s   
 r   r   r6   )r   r!   r   r   r   r   ru   r   r   r   test_functools_total_ordering  s   z*TestOrdering.test_functools_total_orderingc                 C   s   t ddG dd d}| d|j | d|j | d|j | d|j t ddG d	d d}| d|j | d|j | d|j d S )
NFr   c                   @   r-   )%TestOrdering.test_no_order.<locals>.Cr.   Nr/   r   r   r   r   r   	  r2   r   r   r   r   r   c                   @   r[   )r  r.   c                 S   r]   re   r   rf   r   r   r   r   	  rb   z,TestOrdering.test_no_order.<locals>.C.__lt__Nr  r   r   r   r   r   	  rV   r  ru   r   r   r   test_no_order	  s   zTestOrdering.test_no_orderc                 C   s  |  td tddG dd d}W d    n1 sw   Y  |  td tddG dd d}W d    n1 s?w   Y  |  td tddG d	d d}W d    n1 saw   Y  |  td
 tddG dd d}W d    d S 1 sw   Y  d S )NzACannot overwrite attribute __lt__.*using functools.total_orderingTr   c                   @   r[   ).TestOrdering.test_overwriting_order.<locals>.Cr.   c                 S   ro   rp   r   r`   r   r   r   r   "	  rb   z5TestOrdering.test_overwriting_order.<locals>.C.__lt__Nr  r   r   r   r   r   	  rV   r   zACannot overwrite attribute __le__.*using functools.total_orderingc                   @   r[   )r  r.   c                 S   ro   rp   r   r`   r   r   r   r   +	  rb   z5TestOrdering.test_overwriting_order.<locals>.C.__le__N)r   r   r   r0   r1   r   r   r   r   r   r   (	  rV   zACannot overwrite attribute __gt__.*using functools.total_orderingc                   @   r[   )r  r.   c                 S   ro   rp   r   r`   r   r   r   r   4	  rb   z5TestOrdering.test_overwriting_order.<locals>.C.__gt__N)r   r   r   r0   r1   r   r   r   r   r   r   1	  rV   zACannot overwrite attribute __ge__.*using functools.total_orderingc                   @   r[   )r  r.   c                 S   ro   rp   r   r`   r   r   r   r   =	  rb   z5TestOrdering.test_overwriting_order.<locals>.C.__ge__N)r   r   r   r0   r1   r   r   r   r   r   r   :	  rV   r  ru   r   r   r   test_overwriting_order	  s0   			"z#TestOrdering.test_overwriting_orderN)r   r   r   r  r  r  r   r   r   r   r    s    r  c                   @   <   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )TestHashc                 C   s6   t ddG dd d}| t|ddtd d S )NTrl   c                   @   r  )z$TestHash.test_unsafe_hash.<locals>.Cr.   rK   Nr  r   r   r   r   r   B	  rV   r   r6   r   )r6   r   r!   r"   rt   ru   r   r   r   test_unsafe_hashA	  s   zTestHash.test_unsafe_hashc           	         s   dd } fdd}t g ddD ]9\}\}}}}}|||||d| |||||d| ||||||||d| ||||||||d| qd S )	Nc                 S   s   | d u rd S | r
dS dS )N)rN   r   r   )rE  r   r   r   non_boolI	  s
   z*TestHash.test_hash_rules.<locals>.non_boolc              	      s   j | |||d |dkr-|rt|||dG dd d}nt|||dG dd d}|dkrA d|j  |jd  nR|d	krO|sN d|j nL|d
krc d|j  |jd  nH|dkr td t|||dG dd d}W d    n01 sw   Y  W d    d S W d    d S W d    d S W d    d S W d    d S W d    d S 1 sw   Y  d S )N)caserm   r   rZ   r   )rm   r   rZ   c                   @   rn   )1TestHash.test_hash_rules.<locals>.test.<locals>.Cc                 S   r]   r  r   r`   r   r   r   ra   X	  rb   :TestHash.test_hash_rules.<locals>.test.<locals>.C.__hash__Nrq   r   r   r   r   r   V	  rr   r   c                   @   r   )r  Nr   r   r   r   r   r   [	  r   r   ra   r  nonerk   c                   @   rn   )r  c                 S   r]   r  r   r`   r   r   r   ra   v	  rb   r  Nrq   r   r   r   r   r   t	  rr   )	r   r!   r   r   ZassertIsNotNoner   r  r<   rW   )r  rm   r   rZ   Z	with_hashr   r   r`   r   r   rO  Q	  sF   
 !"z&TestHash.test_hash_rules.<locals>.test))FFFr  r  )FFTr  r  )FTFr  r  )FTTr   r  )TFFr   r   )TFTr   r   )TTFr   r   )TTTr   r   r6   FT)r   )	r&   r  rO  r  rm   r   rZ   Zres_no_defined_hashZres_defined_hashr   r`   r   test_hash_rulesH	  s   1	
 zTestHash.test_hash_rulesc                 C   s   t G dd d}| |d|d | |d|d t ddG dd d}| |d|d | t|dt|d t ddd	G d
d d}| |d|d | |d|d | t|dt|d d S )Nc                   @   r[   ) TestHash.test_eq_only.<locals>.Cr*   c                 S      | j |j kS rp   r  rf   r   r   r   rh   	     'TestHash.test_eq_only.<locals>.C.__eq__Nrj   r   r   r   r   r   	  rV   r   r6   r   Trl   c                   @   r[   )r  r*   c                 S   r  rp   r  rf   r   r   r   rh   	  r  r  Nrj   r   r   r   r   r   	  rV   rs  )rm   r   c                   @   r[   )r  r*   c                 S   s   | j dko
| j |j kS r  r  rf   r   r   r   rh   	  s   r  Nrj   r   r   r   r   r   	  rV   rN   )r!   r"   r   rt   ru   r   r   r   test_eq_only	  s   
 zTestHash.test_eq_onlyc                 C   s`   t ddG dd d}| t| td t ddG dd d}| t| td d S )NTrY   c                   @   r   z%TestHash.test_0_field_hash.<locals>.CNr   r   r   r   r   r   	  r   r   r   rl   c                   @   r   r  r   r   r   r   r   r   	  r   r  ru   r   r   r   test_0_field_hash	  s   zTestHash.test_0_field_hashc                 C   s   t ddG dd d}| t|dtd | t|dtd t dd	G d
d d}| t|dtd | t|dtd d S )NTrY   c                   @   r-   z%TestHash.test_1_field_hash.<locals>.Cr.   Nr/   r   r   r   r   r   	  r2   r   r   )r   r3   r3   rl   c                   @   r-   r  r/   r   r   r   r   r   	  r2   r  ru   r   r   r   test_1_field_hash	  s   zTestHash.test_1_field_hashc                 C   s6  G dd d}d d t dfd d |dfd dt dfd d|dfd dt dfd d|dfdd t dfdd |dfddt dfdd|dfddt dfdd|dfdd t dfdd |dfddt dfdd|dfddt dfdd|dffD ]\}}}}| j||||d	 |d u r|d u rtG d
d d|}n2|d u rt|dG dd d|}n |d u rt|dG dd d|}nt||dG dd d|}|dkr|d}| td t| W d    n61 sw   Y  n-|dkr| t|dd n|dkr| |jt j n|dkr| t|dtd W d    qc1 sw   Y  qcd S )Nc                   @   rn   )z(TestHash.test_hash_no_args.<locals>.Basec                 S   r]   r^   r   r`   r   r   r   ra   	  rb   z1TestHash.test_hash_no_args.<locals>.Base.__hash__Nrq   r   r   r   r   rw   	  r2  rw   Z
unhashableFr   baseTr  )rZ   r   r  r   c                   @   r-   z%TestHash.test_hash_no_args.<locals>.Cr*   Nr/   r   r   r   r   r   	  r2   r   r  c                   @   r-   r  r/   r   r   r   r   r   	  r2   rY   c                   @   r-   r  r/   r   r   r   r   r   	  r2   )rZ   r   c                   @   r-   r  r/   r   r   r   r   r   
  r2   rs   unhashable typer_   r3   r  )	r   r   r!   r<   rW   rt   r"   r   ra   )r&   rw   rZ   r   r  r   r   r   r   r   r   test_hash_no_args	  s\   




















 zTestHash.test_hash_no_argsN)	r   r   r   r  r  r  r  r  r  r   r   r   r   r  @	  s    N#r  c                   @   s\   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd ZdS )
TestFrozenc                 C   sp   t ddG dd d}|d}| |jd | t d|_W d    n1 s*w   Y  | |jd d S )NTrY   c                   @   r-   )z!TestFrozen.test_frozen.<locals>.Cr*   Nr/   r   r   r   r   r   
  r2   r   rs   r}   )r!   r"   r*   r   ry  r   r   r   r   test_frozen
  s   zTestFrozen.test_frozenc                 C   s   t ddG dd d}t ddG dd d|}|dd}| t d	|_W d    n1 s1w   Y  | t d
|_W d    n1 sIw   Y  | |jd | |jd d S )NTrY   c                   @   r-   )z"TestFrozen.test_inherit.<locals>.Cr*   Nr/   r   r   r   r   r   )
  r2   r   c                   @   r-   )z"TestFrozen.test_inherit.<locals>.DrI  Nr/   r   r   r   r   r  -
  r2   r  r   rs   r}   rC  )r!   r   ry  r*   rI  r"   r&   r   r  r  r   r   r   test_inherit(
  s   
zTestFrozen.test_inheritc                 C   s^   t ddG dd d}| td t G dd d|}W d    d S 1 s(w   Y  d S )NTrY   c                   @   r   )z>TestFrozen.test_inherit_nonfrozen_from_empty_frozen.<locals>.CNr   r   r   r   r   r   :
  r   r   5cannot inherit non-frozen dataclass from a frozen onec                   @   r-   )z>TestFrozen.test_inherit_nonfrozen_from_empty_frozen.<locals>.DrI  Nr/   r   r   r   r   r  @
  r2   r  r  r_  r   r   r   (test_inherit_nonfrozen_from_empty_frozen9
  s   "z3TestFrozen.test_inherit_nonfrozen_from_empty_frozenc                 C   sL   t G dd d}t G dd d|}|d}| |jd | || d S )Nc                   @   r   )z7TestFrozen.test_inherit_nonfrozen_from_empty.<locals>.CNr   r   r   r   r   r   E
  r   r   c                   @   r-   )z7TestFrozen.test_inherit_nonfrozen_from_empty.<locals>.DrI  Nr/   r   r   r   r   r  I
  r2   r  rN   )r!   r"   rI  r  r  r   r   r   !test_inherit_nonfrozen_from_emptyD
  s   z,TestFrozen.test_inherit_nonfrozen_from_emptyc              
   C   s   dD ]Q}| j |dA tddG dd d}|r"G dd d|}n|}| td	 tG d
d d|}W d    n1 s?w   Y  W d    q1 sNw   Y  qd S )NTFintermediate_classTrY   c                   @   r-   )z8TestFrozen.test_inherit_nonfrozen_from_frozen.<locals>.Cr*   Nr/   r   r   r   r   r   V
  r2   r   c                   @   r   )z8TestFrozen.test_inherit_nonfrozen_from_frozen.<locals>.INr   r   r   r   r   I[
  r   r  r  c                   @   r   )z8TestFrozen.test_inherit_nonfrozen_from_frozen.<locals>.DNr   r   r   r   r   r  a
  r   r  r   r!   r<   rW   r&   r  r   r  r  r   r   r   "test_inherit_nonfrozen_from_frozenS
  s    z-TestFrozen.test_inherit_nonfrozen_from_frozenc              
   C   s   dD ]Q}| j |dA tG dd d}|rG dd d|}n|}| td tdd	G d
d d|}W d    n1 s?w   Y  W d    q1 sNw   Y  qd S )Nr  r  c                   @   r-   )z8TestFrozen.test_inherit_frozen_from_nonfrozen.<locals>.Cr*   Nr/   r   r   r   r   r   h
  r2   r   c                   @   r   )z8TestFrozen.test_inherit_frozen_from_nonfrozen.<locals>.INr   r   r   r   r   r  m
  r   r  z5cannot inherit frozen dataclass from a non-frozen oneTrY   c                   @   r   )z8TestFrozen.test_inherit_frozen_from_nonfrozen.<locals>.DNr   r   r   r   r   r  s
  r   r  r  r  r   r   r   "test_inherit_frozen_from_nonfrozene
  s    z-TestFrozen.test_inherit_frozen_from_nonfrozenc              	   C   s   dD ]U}| j |d) G dd d}|rG dd d|}n|}tddG d	d
 d
|}W d    n1 s6w   Y  |d}| t d|_W d    q1 sRw   Y  qd S )Nr  r  c                   @   r   )z4TestFrozen.test_inherit_from_normal_class.<locals>.CNr   r   r   r   r   r   z
  rH  r   c                   @   r   )z4TestFrozen.test_inherit_from_normal_class.<locals>.INr   r   r   r   r   r  ~
  r   r  TrY   c                   @   r-   )z4TestFrozen.test_inherit_from_normal_class.<locals>.Dr*   Nr/   r   r   r   r   r  
  r2   r  rs   r}   )r   r!   r   ry  r*   )r&   r  r   r  r  r  r   r   r   test_inherit_from_normal_classw
  s   z)TestFrozen.test_inherit_from_normal_classc                 C   s   t ddG dd d}G dd d|}|d}| |jd | |jd d|_| t d	|_W d    n1 s<w   Y  | t d	|_W d    n1 sTw   Y  | |jd | |jd | |jd d S )
NTrY   c                   @   rI   )z4TestFrozen.test_non_frozen_normal_derived.<locals>.Dr.   rs   rK   NrL   r   r   r   r   r  
  rM   r  c                   @   r   )z4TestFrozen.test_non_frozen_normal_derived.<locals>.SNr   r   r   r   r   rk  
  rH  rk  rN   rs   r}   )r!   r"   r.   rK   cachedr   ry  )r&   r  rk  r  r   r   r   test_non_frozen_normal_derived
  s    z)TestFrozen.test_non_frozen_normal_derivedc                 C   s   |  td tddG dd d}W d    n1 sw   Y  |  td tddG dd d}W d    n1 s?w   Y  tddG d	d d}| |d
jd d S )Nz&Cannot overwrite attribute __setattr__TrY   c                   @   r[   )-TestFrozen.test_overwriting_frozen.<locals>.Cr.   c                 S   ro   rp   r   r`   r   r   r   rH  
  rb   9TestFrozen.test_overwriting_frozen.<locals>.C.__setattr__Nr   r   r   r0   r1   rH  r   r   r   r   r   
  rV   r   z&Cannot overwrite attribute __delattr__c                   @   r[   )r  r.   c                 S   ro   rp   r   r`   r   r   r   r  
  rb   z9TestFrozen.test_overwriting_frozen.<locals>.C.__delattr__N)r   r   r   r0   r1   r  r   r   r   r   r   
  rV   Fc                   @   r[   )r  r.   c                 S   s   |d | j d< d S )Nr   r.   )r   rD  r   r   r   rH  
  rw  r  Nr  r   r   r   r   r   
  rV   rs   r   )r<   rW   r!   r"   r.   ru   r   r   r   test_overwriting_frozen
  s   z"TestFrozen.test_overwriting_frozenc                 C   sb   t ddG dd d}t|d | td t|i  W d    d S 1 s*w   Y  d S )NTrY   c                   @   r-   )z&TestFrozen.test_frozen_hash.<locals>.Cr.   N)r   r   r   r   r1   r   r   r   r   r   
  r2   r   rN   r  )r!   rt   r<   rW   ru   r   r   r   test_frozen_hash
  s   "zTestFrozen.test_frozen_hashN)r   r   r   r  r  r  r  r  r  r  r   r  r  r   r   r   r   r  
  s    r  c                   @   s^   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	dddG dd dZ
dd ZdS )	TestSlotsc                 C   s   t G dd d}| td |  W d    n1 sw   Y  |d}| |jd d|_| |jd | td d|_W d    d S 1 sLw   Y  d S )Nc                   @   rQ   )z TestSlots.test_simple.<locals>.CrG   r.   Nr   r   r   	__slots__r   r1   r   r   r   r   r   
     
 r   r   rs   r}   z'C' object has no attribute 'y')r!   r<   rW   r"   r.   r  rK   r   r   r   r   test_simple
  s   "zTestSlots.test_simplec                 C   sN   t G dd d}t G dd d|}|dd}| |j|jfd d|_d S )	Nc                   @   rQ   )z0TestSlots.test_derived_added_field.<locals>.BaserG   r.   Nr  r   r   r   r   rw   
  r	  rw   c                   @   rU   )z3TestSlots.test_derived_added_field.<locals>.Derivedr.   rK   Nr/   r   r   r   r   Derived
  rV   r  r6   r   r:  rs   )r!   r"   r.   rK   rz   )r&   rw   r  r  r   r   r   test_derived_added_field
  s   

z"TestSlots.test_derived_added_fieldc                 C   s   t ddG dd d}|dd}| |j|jfd d|_d	|_| |j|jfd
 | td d|_W d    d S 1 s@w   Y  d S )NTslotsc                   @   rU   )z)TestSlots.test_generated_slots.<locals>.Cr.   rK   Nr/   r   r   r   r   r   
  rV   r   r6   r   r:  rN   r   r  z'C' object has no attribute 'z'r}   )r!   r"   r.   rK   r<   r  rz   r   r   r   r   test_generated_slots
  s   
"zTestSlots.test_generated_slotsc                 C   sJ   |  td tddG dd d}W d    d S 1 sw   Y  d S )Nz^C already specifies __slots__$Tr  c                   @   rQ   )z5TestSlots.test_add_slots_when_slots_exists.<locals>.CrG   r.   N)r   r   r   r  r0   r1   r   r   r   r   r     r	  r   r  ru   r   r   r    test_add_slots_when_slots_exists  s   "z*TestSlots.test_add_slots_when_slots_existsc                 C   sv   t ddG dd d}| |jd t ddG dd d|}| |jd t G d	d
 d
|}| d|jv d S )NTr  c                   @   r-   )z2TestSlots.test_generated_slots_value.<locals>.Baser.   Nr/   r   r   r   r   rw     r2   rw   rG   c                   @   r-   )z7TestSlots.test_generated_slots_value.<locals>.DeliveredrK   Nr/   r   r   r   r   	Delivered  r2   r  r  c                   @   r-   )z>TestSlots.test_generated_slots_value.<locals>.AnotherDeliveredrz   Nr/   r   r   r   r   AnotherDelivered  r2   r  r  )r!   r"   r  r   r   )r&   rw   r  r  r   r   r   test_generated_slots_value  s   z$TestSlots.test_generated_slots_valuec                 C   sJ   G dd d}t |dd}| || | t|d | t|d d S )Nc                   @   r-   )z+TestSlots.test_returns_new_class.<locals>.Ar.   Nr/   r   r   r   r   r    r  r  Tr  r  )r!   r  r  r  r   )r&   r  rS   r   r   r   test_returns_new_class  s
   z TestSlots.test_returns_new_classT)rZ   r  c                   @   r  )zTestSlots.FrozenSlotsClassr   rh  Nr  r   r   r   r   FrozenSlotsClass)  rV   r  c                 C   s   t | dd}d S )Nr   r6   )r  r  r  )r&   pr   r   r   test_frozen_pickle.  s   zTestSlots.test_frozen_pickleN)r   r   r   r
  r  r  r  r  r  r!   r  r  r   r   r   r   r  
  s    
r  c                   @   r  )
TestDescriptorsc                    sn   G dd d t G  fddd}| |jjd t G  fddd}| |jjd | | jd d S )Nc                   @   r  )z(TestDescriptors.test_set_name.<locals>.Dc                 S      |d | _ d S r  rC   r&   ownerrC   r   r   r   __set_name__<  r  z5TestDescriptors.test_set_name.<locals>.D.__set_name__c                 S   s   |d urdS | S Nr6   r   )r&   instancer  r   r   r   __get__>  s   z0TestDescriptors.test_set_name.<locals>.D.__get__N)r   r   r   r  r   r   r   r   r   r  ;  s    r  c                       s   e Zd ZU   Zeed< dS )(TestDescriptors.test_set_name.<locals>.Cr   N)r   r   r   r   r0   r1   r   r  r   r   r   E  r   r   cxc                       $   e Zd ZU e  ddZeed< dS )r!  FrU  r   Nr   r   r   r:   r   r0   r1   r   r"  r   r   r   M  r   r6   r!   r"   r   rC   ru   r   r"  r   test_set_name7  s   
zTestDescriptors.test_set_namec                    s8   G dd d t G  fddd}| |jjd d S )Nc                   @   rn   )z.TestDescriptors.test_non_descriptor.<locals>.Dc                 S   r  r  r  r  r   r   r   r  X  r  z;TestDescriptors.test_non_descriptor.<locals>.D.__set_name__N)r   r   r   r  r   r   r   r   r  W  r2  r  c                       r$  )z.TestDescriptors.test_non_descriptor.<locals>.CFrU  r   Nr%  r   r"  r   r   r   [  r   r   r#  r&  ru   r   r"  r   test_non_descriptorS  s   z#TestDescriptors.test_non_descriptorc                    sF   G dd d}|  t   _tG  fddd}|  jjd d S )Nc                   @   r   )z2TestDescriptors.test_lookup_on_instance.<locals>.DNr   r   r   r   r   r  b  rH  r  c                       r  )z2TestDescriptors.test_lookup_on_instance.<locals>.CFrU  r*   NrT  r   rV  r   r   r   j  r;   r   r   r   r  r!   r"   r  )r&   r  r   r   rV  r   test_lookup_on_instance`  s   z'TestDescriptors.test_lookup_on_instancec                    s@   G dd d t   _tG  fddd}|  jjd d S )Nc                   @   r   )z/TestDescriptors.test_lookup_on_class.<locals>.DNr   r   r   r   r   r  r  rH  r  c                       r$  )z/TestDescriptors.test_lookup_on_class.<locals>.CFrU  r*   NrT  r   r"  r   r   r   w  r   r   r6   r)  ru   r   r"  r   test_lookup_on_classp  s
   z$TestDescriptors.test_lookup_on_classN)r   r   r   r'  r(  r*  r+  r   r   r   r   r  6  s
    r  c                   @   r  )TestStringAnnotationsc              	      sd   dD ]- | j  d tG  fddd}|  | d|j W d    q1 s*w   Y  qd S )N)zClassVar[int]zClassVar [int]z ClassVar [int]r   z
 ClassVar ztyping.ClassVar[int]ztyping.ClassVar[str]z typing.ClassVar[str]ztyping .ClassVar[str]ztyping. ClassVar[str]ztyping.ClassVar [str]ztyping.ClassVar [ str]ztyping.ClassVar.[int]ztyping.ClassVar+Ztypestrc                       r3  )z.TestStringAnnotations.test_classvar.<locals>.Cr.   Nr4  r   r-  r   r   r     r2   r   r.   )r   r!   r   r   ru   r   r-  r   test_classvar  s   z#TestStringAnnotations.test_classvarc              	      b   dD ], | j  d tG  fddd}| |djd W d    q1 s)w   Y  qd S )N)
CVz
t.ClassVarzt.ClassVar[int]ztyping..ClassVar[int]ZClassvarzClassvar[int]ztyping.ClassVarx[int]ztypong.ClassVar[int]zdataclasses.ClassVar[int]ztypingxClassVar[str]r-  c                       r3  )z3TestStringAnnotations.test_isnt_classvar.<locals>.Cr.   Nr4  r   r-  r   r   r     r2   r   rs   r   r!   r"   r.   ru   r   r-  r   test_isnt_classvar  s   z(TestStringAnnotations.test_isnt_classvarc              
      s   dD ]> | j  d. tG  fddd}| td |dj W d    n1 s,w   Y  W d    q1 s;w   Y  qd S )N)zInitVar[int]zInitVar [int] InitVar [int]r  z	 InitVar r  zdataclasses.InitVar[str]z dataclasses.InitVar[str]zdataclasses .InitVar[str]zdataclasses. InitVar[str]zdataclasses.InitVar [str]zdataclasses.InitVar [ str]zdataclasses.InitVar.[int]zdataclasses.InitVar+r-  c                       r3  )z-TestStringAnnotations.test_initvar.<locals>.Cr.   Nr4  r   r-  r   r   r     r2   r   zobject has no attribute 'x'r6   )r   r!   r<   r  r.   ru   r   r-  r   test_initvar  s   z"TestStringAnnotations.test_initvarc              	      r/  )N)IVz
dc.InitVarzxdataclasses.xInitVarztyping.xInitVar[int]r-  c                       r3  )z2TestStringAnnotations.test_isnt_initvar.<locals>.Cr.   Nr4  r   r-  r   r   r     r2   r   rs   r1  ru   r   r-  r   test_isnt_initvar  s   z'TestStringAnnotations.test_isnt_initvarc                 C   sR  ddl m} ddl m} ddl m} ddl m} ||||fD ]}| j|dx |jr0|d}n| }| |j	d |
dd	d
dd}dD ]7}| j|d' | td| d t|| W d    n1 siw   Y  W d    qF1 sxw   Y  qF|jr| d|j | |jd n| d|j W d    q1 sw   Y  qd S )Nr   )dataclass_module_1)dataclass_module_1_str)dataclass_module_2)dataclass_module_2_str)mrs   r   r6   r   rN   r   )Ziv0Ziv1Ziv2Ziv3)
field_namezobject has no attribute 'r   not_iv4)rO  r6  r7  r8  r9  r   ZUSING_STRINGSr0  r"   Zcv0r4  r<   r  r   r   r   r<  r   )r&   r6  r7  r8  r9  r:  r   r;  r   r   r   !test_classvar_module_level_import  s6   z7TestStringAnnotations.test_classvar_module_level_importc                 C   sH   ddl m} | t|jd|ji | t|jj|jtd d d S )Nr   )dataclass_textannor   )r   re  )rO  r>  r"   r   r  r  r   r  )r&   r>  r   r   r   test_text_annotations  s   
z+TestStringAnnotations.test_text_annotationsN)	r   r   r   r.  r2  r3  r5  r=  r?  r   r   r   r   r,  ~  s    $)r,  c                   @   s|   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd ZdS )TestMakeDataclassc                 C   sZ   t ddtfdttddfgddd id	}|d
}| |j|jfd | | d d S )Nr   r.   rK   r}   r   add_onec                 S   s
   | j d S r  rG   r`   r   r   r   r     s   
 z/TestMakeDataclass.test_simple.<locals>.<lambda>rv  rs   )rs   r}   r  )r   r0   r:   r"   r.   rK   rA  r   r   r   r   r
    s   
zTestMakeDataclass.test_simplec                 C   s6   i }t ddtfdttddfg|d}| |i  d S )Nr   r.   rK   r}   r   rB  )r   r0   r:   r"   )r&   nsr   r   r   r   test_no_mutate_namespace$  s   z*TestMakeDataclass.test_no_mutate_namespacec                 C   sd   G dd d}G dd d}t ddtfg||fd}|d}| || | || | || d S )	Nc                   @   r   )z*TestMakeDataclass.test_base.<locals>.Base1Nr   r   r   r   r   Base1.  rH  rE  c                   @   r   )z*TestMakeDataclass.test_base.<locals>.Base2Nr   r   r   r   r   Base20  rH  rF  r   r.   ru  r   )r   r0   r  r&   rE  rF  r   r   r   r   r   	test_base-  s   zTestMakeDataclass.test_basec                 C   s   t G dd d}G dd d}tddtfg||fd}| td |d	}W d    n1 s1w   Y  |d
d	}| || | || | || | |j|jfd d S )Nc                   @   r-   )z4TestMakeDataclass.test_base_dataclass.<locals>.Base1r.   Nr/   r   r   r   r   rE  ;  r2   rE  c                   @   r   )z4TestMakeDataclass.test_base_dataclass.<locals>.Base2Nr   r   r   r   r   rF  >  rH  rF  r   rK   rG  zrequired positionalr   r6   r:  )	r!   r   r0   r<   rW   r  r"   r.   rK   rH  r   r   r   test_base_dataclass:  s   

z%TestMakeDataclass.test_base_dataclassc                 C   s`   dd }t ddtfdtt fgd|id}|dd	}| t|dd
i | tt|d d S )Nc                 S      |  j |9  _ d S rp   rG   r&   rK   r   r   r   	post_initM  rw  z2TestMakeDataclass.test_init_var.<locals>.post_initr   r.   rK   ro  rB  r   rN   rC  r6   )r   r0   r  r"   r   r#   r$   )r&   rM  r   r   r   r   r   r  L  s   

zTestMakeDataclass.test_init_varc              	   C   s~   t ddtfdtt dfdtt tddfg}|d}| t|ddi | tt|d | |jd | |j	d d S )	Nr   r.   rK   rs   rz   r   r   r6   )
r   r0   r   r:   r"   r   r#   r$   rK   rz   r   r   r   r   r  Z  s   z TestMakeDataclass.test_class_varc              	   C   s   t ddtfdtt dfdtt tddfgdd	}| d
t| | dt| | td t dg dd}W d    d S 1 sBw   Y  d S )Nr   r.   rK   rs   rz   r   r   Fr   r   r  zunexpected keyword argument)Zxxinit)	r   r0   r   r:   r   r   r   r<   rW   ru   r   r   r   test_other_paramsf  s   "z#TestMakeDataclass.test_other_paramsc                 C   s   t dg d}|ddd}| t|dddd | |jdddd t dddtfd	g}|ddd}| t|dddd | |jdtdd d S )
Nr#  r.   rK   rz   r6   r   rN   z
typing.Anyr.   rK   rz   )r   r"   r   r1   r0   r   r   r   r   test_no_typesw  s   

zTestMakeDataclass.test_no_typesc              
   C   s   dD ]5}| j |d% | td tdd|g W d    n1 s#w   Y  W d    q1 s2w   Y  qtdd fD ]5}| j |d% | td tdd|g W d    n1 s_w   Y  W d    q>1 snw   Y  q>d S )	N)r   )r6   r   rN   r   )	bad_fieldzInvalid field: r   r   c                 S   s   | S rp   r   rG   r   r   r   r     r  zCTestMakeDataclass.test_invalid_type_specification.<locals>.<lambda>zhas no len\(\))r   r<   rW   r   rK  )r&   rQ  r   r   r   test_invalid_type_specification  s"   z1TestMakeDataclass.test_invalid_type_specificationc              
   C   sv   dD ]6}| j |d& | td td|d|g W d    n1 s$w   Y  W d    q1 s3w   Y  qd S )N)r   abr:   zField name duplicatedr   r   r   r<   rW   r   r&   r:   r   r   r   test_duplicate_field_names  s   z,TestMakeDataclass.test_duplicate_field_namesc              
   C      dD ]n}| j |d^ | td tdd|g W d    n1 s#w   Y  | td td|g W d    n1 s?w   Y  | td td|dg W d    n1 s\w   Y  W d    q1 skw   Y  qd S )N)forasyncawaitasrT  zmust not be keywordsr   r   rU  rV  r   r   r   test_keyword_field_names     z*TestMakeDataclass.test_keyword_field_namesc              
   C   rX  )N)()x,yr   2@3r  zlittle johnny tablesrT  zmust be valid identifiersr   r   rU  rV  r   r   r   test_non_identifier_field_names  r^  z1TestMakeDataclass.test_non_identifier_field_namesc                 C   s   t dg d d S )Nr   )_Z_aZa_aZa_)r   r`   r   r   r   test_underscore_field_names  s   z-TestMakeDataclass.test_underscore_field_namesc              	   C   sV   dD ]&}| j |d t|ddg}| |j| W d    q1 s#w   Y  qd S )N)r_  r`  r   ra  r  )	classnamer   r   )r   r   r"   r   )r&   re  r   r   r   r   test_funny_class_names_names  s   z.TestMakeDataclass.test_funny_class_names_namesN)r   r   r   r
  rD  rI  rJ  r  r  rN  rP  rR  rW  r]  rb  rd  rf  r   r   r   r   r@    s    
	

r@  c                   @   st   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd ZdS )TestReplacec                 C   sN   t ddG dd d}|dd}t|dd}| |jd | |jd d S )	NTrY   c                   @   rU   )zTestReplace.test.<locals>.Cr.   rK   Nr/   r   r   r   r   r     rV   r   r6   r   rN   rG   )r!   r  r"   r.   rK   r&   r   r   r  r   r   r   rO    s   
zTestReplace.testc                 C   s\  t ddG dd d}|dd}t|dd}| |j|j|j|jfd	 | |j|j|j|jfd
 | td t|dddd W d    n1 sLw   Y  | td t|dd t|dddd W d    n1 spw   Y  | t	d d|_W d    n1 sw   Y  | t
d t|ddd}W d    d S 1 sw   Y  d S )NTrY   c                   @   sF   e Zd ZU eed< eed< edddZeed< edddZeed< d	S )
z"TestReplace.test_frozen.<locals>.Cr.   rK   Frs   r   rz   rd   r   N)r   r   r   r0   r1   r:   rz   r   r   r   r   r   r     s
   
 r   r6   r   rN   rG   )r6   r   rs   rd   )rN   r   rs   rd   
init=Falser   r  )r.   rz   r   r  zcannot assign to field 'x'z3__init__\(\) got an unexpected keyword argument 'a'r}   )r.   r   )r!   r  r"   r.   rK   rz   r   r<   r=   ry  rW   rh  r   r   r   r    s&   
"zTestReplace.test_frozenc                 C   s`   t ddG dd d}|dd}| td t|dd	}W d    d S 1 s)w   Y  d S )
NTrY   c                   @   rU   )z.TestReplace.test_invalid_field_name.<locals>.Cr.   rK   Nr/   r   r   r   r   r     rV   r   r6   r   z3__init__\(\) got an unexpected keyword argument 'z'rN   r  r!   r<   rW   r  rh  r   r   r   test_invalid_field_name  s   
"z#TestReplace.test_invalid_field_namec                 C   s   t ddG dd d}| td t|dd W d    n1 s#w   Y  | td tddd W d    d S 1 s@w   Y  d S )	NTrY   c                   @   rU   )z*TestReplace.test_invalid_object.<locals>.Cr.   rK   Nr/   r   r   r   r   r     rV   r   r  rN   rG   r   rj  ru   r   r   r   test_invalid_object  s   "zTestReplace.test_invalid_objectc                 C   s   t G dd d}|d}d|_t|dd}| |j|jfd | td t|d	d
d W d    n1 s8w   Y  | td t|d
d W d    d S 1 sUw   Y  d S )Nc                   @   rz  )z#TestReplace.test_no_init.<locals>.Cr.   Frs   r   rK   Nr|  r   r   r   r   r     r}  r   r6   r   r}   rG   )r}   rs   ri  r      r  rp  )r!   rK   r  r"   r.   r<   r=   rh  r   r   r   r     s   "zTestReplace.test_no_initc                 C   s   t G dd d}|d}|d}| |j|j | |jd | td t|dd W d    n1 s7w   Y  t|d	d
 d S )Nc                   @   s&   e Zd ZU eed< dZee ed< dS )z$TestReplace.test_classvar.<locals>.Cr.   r  rK   N)r   r   r   r0   r1   rK   r   r   r   r   r   r     r  r   r6   r   r  z3__init__\(\) got an unexpected keyword argument 'y'rm  rp  r}   rG   )r!   r   rK   r"   r<   rW   r  r"  r   r   r   r.    s   zTestReplace.test_classvarc                 C   s   t G dd d}|dd}| |jd | td t|dd W d    n1 s,w   Y  t|ddd	}| |jd
 d S )Nc                   @   r  )z0TestReplace.test_initvar_is_specified.<locals>.Cr.   rK   c                 S   rK  rp   rG   rL  r   r   r   ro  -  rw  z>TestReplace.test_initvar_is_specified.<locals>.C.__post_init__Nr  r   r   r   r   r   (  r  r   r6   rs   z,InitVar 'y' must be specified with replace()rN   rG   r}   r  r{   )r!   r"   r.   r<   r=   r  r   r   r   r   test_initvar_is_specified'  s   
z%TestReplace.test_initvar_is_specifiedc                 C   sx   t G dd d}|dddd}| t||dd | t|dd	|ddd
d | t|ddd|dddd d S )Nc                   @   s>   e Zd ZU eed< dZee ed< dZee ed< dd ZdS )z6TestReplace.test_initvar_with_default_value.<locals>.Cr.   NrK   r3   rz   c                 S   s4   |d ur|  j |7  _ |d ur|  j |7  _ d S d S rp   rG   )r&   rK   rz   r   r   r   ro  ?  s
   zDTestReplace.test_initvar_with_default_value.<locals>.C.__post_init__)	r   r   r   r0   r1   rK   r  rz   ro  r   r   r   r   r   9  s
   
 r   r6   rs   rO  r)  rG   r   rp  r3   )rK   rz   )r!   r"   r  r   r   r   r   test_initvar_with_default_value8  s   $z+TestReplace.test_initvar_with_default_valuec                 C   s4   t G dd d}|d }||_| t|d d S )Nc                   @      e Zd ZU ded< dS )z*TestReplace.test_recursive_repr.<locals>.Cr   r  Nr4  r   r   r   r   r   K  r2   r   z1TestReplace.test_recursive_repr.<locals>.C(f=...)r!   r  r"   rA   r   r   r   r   test_recursive_reprJ  s
   zTestReplace.test_recursive_reprc                 C   s<   t G dd d}|d d }||_||_| t|d d S )Nc                   @   s   e Zd ZU ded< ded< dS )z4TestReplace.test_recursive_repr_two_attrs.<locals>.Cr   r  gNr4  r   r   r   r   r   T  rV   r   zBTestReplace.test_recursive_repr_two_attrs.<locals>.C(f=..., g=...))r!   r  rs  r"   rA   r   r   r   r   test_recursive_repr_two_attrsS  s   
z)TestReplace.test_recursive_repr_two_attrsc                 C   sT   t G dd d}t G dd d}|d }|d }||_||_| t|d d S )Nc                   @   rp  )z6TestReplace.test_recursive_repr_indirection.<locals>.Cr  r  Nr4  r   r   r   r   r   `  r2   r   c                   @   rp  )z6TestReplace.test_recursive_repr_indirection.<locals>.Dr   r  Nr4  r   r   r   r   r  d  r2   r  zwTestReplace.test_recursive_repr_indirection.<locals>.C(f=TestReplace.test_recursive_repr_indirection.<locals>.D(f=...))rq  )r&   r   r  r   r  r   r   r   test_recursive_repr_indirection_  s   z+TestReplace.test_recursive_repr_indirectionc                 C   st   t G dd d}t G dd d}t G dd d}|d }|d }|d }||_||_||_| t|d d S )Nc                   @   rp  )z:TestReplace.test_recursive_repr_indirection_two.<locals>.Cr  r  Nr4  r   r   r   r   r   q  r2   r   c                   @   rp  )z:TestReplace.test_recursive_repr_indirection_two.<locals>.Dr  r  Nr4  r   r   r   r   r  u  r2   r  c                   @   rp  )z:TestReplace.test_recursive_repr_indirection_two.<locals>.Er   r  Nr4  r   r   r   r   r  y  r2   r  zTestReplace.test_recursive_repr_indirection_two.<locals>.C(f=TestReplace.test_recursive_repr_indirection_two.<locals>.D(f=TestReplace.test_recursive_repr_indirection_two.<locals>.E(f=...)))rq  )r&   r   r  r  r   r  r  r   r   r   #test_recursive_repr_indirection_twop  s   z/TestReplace.test_recursive_repr_indirection_twoc                 C   s6   t G dd d}|d d}||_| t|d d S )Nc                   @   s   e Zd ZU ded< eed< dS )z5TestReplace.test_recursive_repr_misc_attrs.<locals>.Cr   r  rs  Nr  r   r   r   r   r     rV   r   r6   zATestReplace.test_recursive_repr_misc_attrs.<locals>.C(f=..., g=1)rq  r   r   r   r   test_recursive_repr_misc_attrs  s
   
z*TestReplace.test_recursive_repr_misc_attrsN)r   r   r   rO  r  rk  rl  r  r.  rn  ro  rr  rt  ru  rv  rw  r   r   r   r   rg    s     	rg  c                   @   r  )TestAbstractc                 C   s\   G dd dt j}tddG dd d|}| t| | |ddd	|dd
d d S )Nc                   @   s(   e Zd Zejdd Zejdd ZdS )z5TestAbstract.test_abc_implementation.<locals>.Orderedc                 S   ro   rp   r   rf   r   r   r   r     ri  z<TestAbstract.test_abc_implementation.<locals>.Ordered.__lt__c                 S   ro   rp   r   rf   r   r   r   r     ri  z<TestAbstract.test_abc_implementation.<locals>.Ordered.__le__N)r   r   r   abcabstractmethodr   r   r   r   r   r   Ordered  s
    
r{  Tr   c                   @   &   e Zd ZU eed< ded< ded< dS )z2TestAbstract.test_abc_implementation.<locals>.Dater?  Monthr@  r0   rA  Nr/   r   r   r   r   rB    r>  rB  i  r)     r     )ry  ABCr!   r  r   
isabstractr   )r&   r{  rB  r   r   r   test_abc_implementation  s
   	 z$TestAbstract.test_abc_implementationc                 C   sL   G dd dt j}tG dd d|}| t| d}| t|| d S )Nc                   @   s   e Zd Zejdd ZdS )z)TestAbstract.test_maintain_abc.<locals>.Ac                 S   ro   rp   r   r`   r   r   r   r     ri  z-TestAbstract.test_maintain_abc.<locals>.A.fooN)r   r   r   ry  rz  r   r   r   r   r   r    s    r  c                   @   r|  )z,TestAbstract.test_maintain_abc.<locals>.Dater?  r}  r@  r0   rA  Nr/   r   r   r   r   rB    r>  rB  z#class Date with abstract method foo)ry  r  r!   r   r   r  r<   rW   )r&   r  rB  r>   r   r   r   test_maintain_abc  s   zTestAbstract.test_maintain_abcN)r   r   r   r  r  r   r   r   r   rx    s    rx  c                   @   s4   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZdS )TestMatchArgsc                 C   s(   t G dd d}| |djd d S )Nc                   @   r-   )z(TestMatchArgs.test_match_args.<locals>.Cr   Nr/   r   r   r   r   r     r2   r   r3   r,  r!   r"   __match_args__ru   r   r   r   test_match_args  s   zTestMatchArgs.test_match_argsc                    s0   d t G  fddd}| |dj  d S )Nr   c                       s   e Zd ZU eed<  ZdS )z1TestMatchArgs.test_explicit_match_args.<locals>.Cr   Nr   r   r   r0   r1   r  r   Zmar   r   r        
 r   r3   )r!   r   r  ru   r   r  r   test_explicit_match_args  s   z&TestMatchArgs.test_explicit_match_argsc                 C   s.   t ddddG dd d}| |jd d S )NF)rA   r   r@   c                   @   r<  )z'TestMatchArgs.test_bpo_43764.<locals>.Xr   r   r   Nr/   r   r   r   r   X  r>  r  r   r   r   r  )r&   r  r   r   r   test_bpo_43764  s   zTestMatchArgs.test_bpo_43764c                 C   s   t ddG dd d}| d|j t ddG dd d}| |jd t ddG d	d
 d
|}| |jd t G dd d}t ddG dd d|}| |jd d S )NFZ
match_argsc                   @   r-   )z1TestMatchArgs.test_match_args_argument.<locals>.Xr   Nr/   r   r   r   r   r    r2   r  r  c                   @   s   e Zd ZU eed< dZdS )z1TestMatchArgs.test_match_args_argument.<locals>.Yr   r   Nr  r   r   r   r   Y  r  r  r  c                   @   r-   )z1TestMatchArgs.test_match_args_argument.<locals>.Zrz   Nr/   r   r   r   r   Z  r2   r  c                   @   rU   )z1TestMatchArgs.test_match_args_argument.<locals>.Ar   rz   Nr/   r   r   r   r   r    rV   r  c                   @   r-   )z1TestMatchArgs.test_match_args_argument.<locals>.Br   Nr/   r   r   r   r   rS     r2   rS   )r   rz   )r!   r   r   r"   r  )r&   r  r  r  r  rS   r   r   r   test_match_args_argument  s   z&TestMatchArgs.test_match_args_argumentc                 C   s   t ddtfdtfg}| |jd t ddtfdtfgdd}| |jd t ddtfdtfgdd}| d|j t ddtfdtfgd	d
id}| |jd
 d S )Nr   r.   rK   r  Tr  FZ__match__args__r  r  rB  )r   r0   r"   r  r   r   ru   r   r   r   test_make_dataclasses  s   z#TestMatchArgs.test_make_dataclassesN)r   r   r   r  r  r  r  r  r   r   r   r   r    s    r  c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestKeywordArgsc                 C   s   d}|  t| tG dd d}W d    n1 sw   Y  |  t| tG dd d}W d    n1 s;w   Y  |  t| tddG dd d}W d    d S 1 s^w   Y  d S )Nz+field a is a ClassVar but specifies kw_onlyc                   @   r  )1TestKeywordArgs.test_no_classvar_kwarg.<locals>.ATkw_onlyr   Nr   r   r   r:   r   r   r0   r1   r   r   r   r   r    r   r  c                   @   r  r  Fr  r   Nr  r   r   r   r   r    r   Tr  c                   @   r  r  r  r   r   r   r   r    r   r  )r&   r>   r  r   r   r   test_no_classvar_kwarg  s   "z&TestKeywordArgs.test_no_classvar_kwargc                 C   s~  t ddG dd d}| t|d j t ddG dd d}| t|d j t ddG dd d}| t|d j t ddG d	d d}| t|d j t ddG d
d d}| t|d j t ddG dd d}| t|d j t G dd d}| t|d j t G dd d}| t|d j t G dd d}| t|d j d S )NTr  c                   @   r-   6TestKeywordArgs.test_field_marked_as_kwonly.<locals>.Ar   Nr/   r   r   r   r   r    r2   r  r   c                   @   r   r  Tr  r   Nr   r   r   r:   r   r0   r1   r   r   r   r   r  !  r   c                   @   r   r  Fr  r   Nr  r   r   r   r   r  &  r   Fc                   @   r-   r  r/   r   r   r   r   r  -  r2   c                   @   r   r  r  r   r   r   r   r  2  r   c                   @   r   r  r  r   r   r   r   r  7  r   c                   @   r-   r  r/   r   r   r   r   r  >  r2   c                   @   r   r  r  r   r   r   r   r  C  r   c                   @   r   r  r  r   r   r   r   r  H  r   )r!   r   r$   r  r  )r&   r  r   r   r   test_field_marked_as_kwonly  s6   z+TestKeywordArgs.test_field_marked_as_kwonlyc                 C   sX   t ddG dd d}| |ddjd t G dd d}| |dd	d
jd d S )NTr  c                   @   r-   )*TestKeywordArgs.test_match_args.<locals>.Cr   Nr/   r   r   r   r   r   O  r2   r   r3   r,  r   c                   @   s(   e Zd ZU eed< eddZeed< dS )r  r   Tr  r   N)r   r   r   r0   r1   r:   r   r   r   r   r   r   T  r  rs   r  r  ru   r   r   r   r  M  s   zTestKeywordArgs.test_match_argsc                 C   s  t G dd d}|dddd d}| t| |ddd W d    n1 s)w   Y  t dd	G d
d d}|dddd d}| t| |ddd W d    n1 sZw   Y  t G dd d}|dddd}| |jd | |jd | |jd |dddd}| |jd | |jd | |jd |dddd}| |jd | |jd | |jd |dddd}| |jd | |jd | |jd d S )Nc                   @   .   e Zd ZU eed< eed< eed< eed< dS )z'TestKeywordArgs.test_KW_ONLY.<locals>.Ar   rc  r   r   Nr   r   r   r0   r1   KW_ONLYr   r   r   r   r  [  
   
 r  rN   r}   r   r   r   -takes 2 positional arguments but 4 were givenTr  c                   @   r  )z'TestKeywordArgs.test_KW_ONLY.<locals>.Br   rc  r   r   Nr  r   r   r   r   rS   g  r  rS   r  z,takes 1 positional argument but 4 were givenc                   @   8   e Zd ZU eed< eed< eed< eddZeed< dS )z'TestKeywordArgs.test_KW_ONLY.<locals>.Cr   rc  r   Fr  r   Nr   r   r   r0   r1   r  r:   r   r   r   r   r   r   s  
   
 r   r6   r   r  )r   r   )r   r   r   )r!   r<   rW   r"   r   r   r   )r&   r  r>   rS   r   r   r   r   r   test_KW_ONLYZ  s@   zTestKeywordArgs.test_KW_ONLYc                 C   sb   t G dd d}|dddd d}| t| |ddd W d    d S 1 s*w   Y  d S )Nc                   @   s.   e Zd ZU eed< ded< eed< eed< dS )z1TestKeywordArgs.test_KW_ONLY_as_string.<locals>.Ar   zdataclasses.KW_ONLYrc  r   r   Nr/   r   r   r   r   r    r  r  rN   r}   r   r  r  r  )r&   r  r>   r   r   r   test_KW_ONLY_as_string  s   "z&TestKeywordArgs.test_KW_ONLY_as_stringc                 C   sN  d}|  t| tG dd d}W d    n1 sw   Y  |  t| tG dd d}W d    n1 s;w   Y  |  t| tG dd d}W d    n1 sZw   Y  tG dd d}tG dd d}tG dd	 d	|}|  t| tG d
d d}tG dd	 d	|}W d    d S 1 sw   Y  d S )Nz6'Y' is KW_ONLY, but KW_ONLY has already been specifiedc                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )-TestKeywordArgs.test_KW_ONLY_twice.<locals>.Ar   r  r  r   r   Nr  r   r   r   r   r       
 r  c                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )r  r   r  r   r  r   Nr  r   r   r   r   r    r  c                   @   s6   e Zd ZU eed< eed< eed< eed< eed< dS )r  r   r  r   r   r  Nr  r   r   r   r   r    r  c                   @   r  )r  r   rc  r   Tr  r   Nr  r   r   r   r   r    r  c                   @   r  r  r   rc  r   r   Nr  r   r   r   r   r    r  c                   @   r  )-TestKeywordArgs.test_KW_ONLY_twice.<locals>.Brc  r  Nr   r   r   r  r1   r0   r   r   r   r   rS     rV   rS   c                   @   r  r  r  r   r   r   r   r    r  c                   @   s&   e Zd ZU eed< eed< eed< dS )r  r  r  r  Nr  r   r   r   r   rS     r>  r  )r&   r>   r  rS   r   r   r   test_KW_ONLY_twice  s2   		
"z"TestKeywordArgs.test_KW_ONLY_twicec                 C   s   t G dd d}| td |ddddd W d    n1 s"w   Y  t G d	d
 d
}|ddddd}| t|ddd d S )Nc                   @   F   e Zd ZU eed< eed< ee ed< eed< ee ed< dd ZdS )	z)TestKeywordArgs.test_post_init.<locals>.Ar   rc  r   r   r  c                 S   s   t d|d|)Nzb=z d=rn  r&   r   r  r   r   r   ro    rd  z7TestKeywordArgs.test_post_init.<locals>.A.__post_init__Nr   r   r   r0   r1   r  r  ro  r   r   r   r   r       
 r  zb=3 d=4r6   r   rN   r   )r   r   r  c                   @   r  )	z)TestKeywordArgs.test_post_init.<locals>.Br   rc  r   r   r  c                 S   s   || _ || _d S rp   r   r   r  r   r   r   ro    s   
z7TestKeywordArgs.test_post_init.<locals>.B.__post_init__Nr  r   r   r   r   rS     r  rS   r  )r!   r<   r   r"   r  )r&   r  rS   r   r   r   r   rz    s   	zTestKeywordArgs.test_post_initc                 C   s   t G dd d}|ddd}| |jd | |jd | |jd | |jd d}| t| t G d	d d}W d    d S 1 sHw   Y  d S )
Nc                   @   s>   e Zd ZU dZeed< eed< eed< dZeed< eed< dS )	(TestKeywordArgs.test_defaults.<locals>.Ar   r   rc  r   r6   r   r  Nr   r   r   r   r0   r1   r  r   r   r   r   r   r    s   
 r  r   rN   )r  r   r   r6   z1non-default argument 'z' follows default argumentc                   @   sF   e Zd ZU dZeed< eed< eed< eed< dZeed< eed< d	S )
r  r   r   rz   rc  r   r6   r   r  Nr  r   r   r   r   r    s   
 )r!   r"   r   r   r   r  r<   rW   )r&   r  r   Z	err_regexr   r   r   test_defaults  s   "zTestKeywordArgs.test_defaultsN)r   r   r   r  r  r  r  r  r  rz  r  r   r   r   r   r    s    40Ar  __main__)/Zdataclassesry  r  r   r   ZunittestZunittest.mockr   typingr   r   r   r   r   r	   r
   r   r   r   r   collectionsr   r   r   	functoolsr   	Exceptionr   r   r  r  r  r  r  r  r  r  r  r  r,  r@  rg  rx  r  r  r   mainr   r   r   r   <module>   sp   0               ##YVG/L ] /lH  % e%A  	