
    tAchj                        d dl Z d dlZd dlZd dlm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Zd dlmZmZmZ d dlmZmZmZmZ ddlmZmZmZmZm Z m!Z! dd	l"m#Z# erd d
l$m%Z% e G d d                      Z&	 	 	 d/dee'         dee(         de'fdZ) e&            Z* e            Z+ ed          Z,	 	 d0dee,         ddde'de'de&de
e,gee(e	f         f         fdZ-dedee(e.f         dee(e.f         fdZ/e
ee(e	f         e	ge,f         Z0	 	 	 	 d1dee,         ddde'de'de'd e'de&de0e,         fd!Z1e
ee	         ge	f         Z2	 d2de	ddd"e	de2fd#Z3e
ee	d$f         ge	f         Z4	 d2de	ddd"e	de4fd%Z5e
ee	e	f         ge	f         Z6	 	 d3de	ddd"e	d&ee
e	ee	         ge	f                  de6f
d'Z7e
ee	e	f         e	ge,f         Z8e9eedfdee,         ddd(ed)e'de8e,         f
d*Z:d4d+e	d,e(d-e'de(fd.Z;dS )5    N)is_dataclass)local)
TYPE_CHECKINGAnyCallableDictIterableMappingOptionalTupleTypeTypeVar)NOTHINGfrozenresolve_types)ClassValidationErrorForbiddenExtraKeysErrorIterableValidationErrorStructureHandlerNotFoundError   )adapted_fieldsget_args
get_originis_annotatedis_bare
is_generic)deep_copy_with)BaseConverterc                   R    e Zd ZU dZee         ed<   dZee         ed<   dZ	eed<   dS )AttributeOverrideNomit_if_defaultrenameFomit)
__name__
__module____qualname__r!   r   bool__annotations__r"   strr#        ,/usr/lib/python3/dist-packages/cattrs/gen.pyr    r    +   sJ         &*OXd^*** FHSM   D$r+   r    Fr!   r"   r#   c                 &    t          | ||          S )Nr!   r"   r#   )r    r.   s      r,   overrider/   2   s    
 _VRVWWWWr+   TTcl	converterr   _cattrs_omit_if_default_cattrs_use_linecachekwargsreturnc                 	   t          |           }t          |p|           }t          d |D                       rt          |            i }t	          |           rit          | |          }t          |dd          D ]E}t	          |          r4t          |                              d          st          ||          } nF|} | j	        }	d|	z   }
i }g }g }i }	 t          j        }n*# t          $ r t                      }|t          _        Y nw xY w| |v rt                      |                    |            	 |D ];}|j        }|                    |t$                    }|j        r-|j        |n|j        }|j        }d}|j        |j        }t/          |t0                    r|j	        |v r||j	                 }nE|j        }n=t	          |          r.t5          |          st7          |          st9          ||          }|3	 |j                            |          }n# t          $ r
 |j        }Y nw xY wn|j        }||j        k    }|sd| }|||<   |||<   | d| d	}nd
| }|t@          j!        ur|r	|j"        dus|j"        rd| }t/          |t@          j#                  rq|j$        ||<   |j$        ||<   |j%        r|&                    d| d| d           n|&                    d| d| d           |&                    d| d|            |||<   |||<   |&                    d| d| d           |&                    d| d|            |&                    d| d| d           =d'                    d |D                       }|rd| }|(                                D ]
\  }}|||<   d|
 d| dgdgz   d |D             z   dgz   |z   dgz   }d '                    |          }tS          | d!|"          } tU          tW          || d#          |           ||
         }!|r tY          |          d|| ftZ          j.        | <   |/                    |            n# |/                    |            w xY w|!S )$zc
    Generate a specialized dict unstructuring function for an attrs class or a
    dataclass.
    c              3   J   K   | ]}t          |j        t                    V  d S N
isinstancetyper)   .0as     r,   	<genexpr>z+make_dict_unstructure_fn.<locals>.<genexpr>M   .      
2
2q:afc""
2
2
2
2
2
2r+   __orig_bases__r*   typing.Genericunstructure_N
__c_unstr_z
(instance.)z	instance.F__c_def_z  if instance.z != z(instance):z():	    res[''] = :'z': ,, c                     g | ]	}| d | 
S =r*   r>   is     r,   
<listcomp>z,make_dict_unstructure_fn.<locals>.<listcomp>   s"    &N&N&Na!zzazz&N&N&Nr+   def z	(instance):	  res = {c                     g | ]}d | S z    r*   r>   lines     r,   rS   z,make_dict_unstructure_fn.<locals>.<listcomp>   s    :::}d}}:::r+   z  }  return res
unstructurereserveexec)0r   r   anyr   r   _generate_mappinggetattrr)   
startswithr$   _already_generatingworking_setAttributeErrorsetRecursionErroraddnamepop_neutralr#   r"   defaultr<   r;   r   r]   r   r   r   _unstructure_funcdispatch_unstructure_identityattrr   r!   Factoryfactory
takes_selfappendjoinitems_generate_unique_filenameevalcompilelen	linecachecacheremove)"r1   r2   r3   r4   r5   originattrsmappingbasecl_namefn_nameglobslinesinvocation_linesinternal_arg_partsrf   r?   	attr_namer/   kndhandlertis_identityunstruct_handler_nameinvokedef_nameinternal_arg_linekvtotal_linesscriptfnamefns"                                     r,   make_dict_unstructure_fnr   ?   s    ^^F6<R((E

2
2E
2
2
222 bG"~~ #B00F$4b99 	 	D$ D		(<(<=M(N(N +D'::kGw&GEE6)5 6 6 6ee*5'''6 
[^ A	> A	>AIzz)X66H} &o58?B	A
 Gv!Fa)) 3zW,,#AJ/"+"7]] 371:: 3l1oo 3&q'22A?8"+"="F"Fq"I"I) 8 8 8"+"78 # $/!Y%DDK 1(@Y(@(@%/6+,<C"#891IIYIII0Y00$$( %-5-EU-R-R+ .S 2i11a.. @&'iE(O349&x0| TQYQQHQQQ    %Ri%R%RX%R%R%RSSSLL!>R!>!>f!>!>????&'E(O34&x0LL!L)!L!L!L!L!LMMMLL!>R!>!>f!>!>???? !''(<B(<(<6(<(<(<==== II&N&N;M&N&N&NOO 	9 8%6 8 8&,,.. 	 	DAqE!HH <G;;&7;;;<m::)9:::; g 	
  	 ;'')'<
 
 
 	WVUF++U3337^  	K%([[$U%JIOE"22IsD   C% %$DD7C	Q' HQ' H0-Q' /H00H!Q' 'Q>old_mappingc                     i }t          t          |           dd           }||S t          |t          |                     D ]%\  }}t	          |t
                    r|||j        <   &|s|S |S )N__parameters__)rc   r   zipr   r;   r   r$   )r1   r   r   
parameterspr   s         r,   rb   rb      s    G B)94@@JJ--    1a!! 	
 Nr+   _cattrs_forbid_extra_keys _cattrs_prefer_attrib_converters_cattrs_detailed_validationc                 2   i }t          |           r!t          |           }t          | |          }|} t          | dd          D ]E}t          |          r4t	          |                              d          st          ||          } nFt          | t                    r|                    | j	        |           } | j	        }	d|	z   }
t          | dd          D ]w}	 ||j	                 }n(# t          $ r t          d|j	         d|          dw xY wt          |d	d          pt	          |          }t          j        d
d|          }|
d| z  }
xd| i}i }g }g }g }t          |           }t          |           }t!          d |D                       rt#          |            t%                      }|r||d<   t&          |d<   |r|                    d           |                    d           |                    d           t*          |d<   |D ]~}|j        }|                    |t.                    }|j        r-|j        }t          |t                    r|                    |j	        |          }n=t          |          r.t5          |          st7          |          st9          ||          }|j        |rd}nW|j        ,|s*|(|j                            |          }||j         k    rd}n$||j                            |          }n|j!        }d| }|||<   |s|d         dk    r|n	|dd         }|j"        |n|j"        }|#                    |           d}|j$        tJ          ur |                    | d| d           | d}|                    | d           | d}|ra||j&        k    r'|||<   |                    | d| d| d| d           nMd| }|||<   |                    | d| d| d| d | d!
           n|                    | d| d"| d#           |dd$         }|                    | d%           | d}|                    | d&| j'         d'| d(           |                    | d)           |r|g d*z  }|                    d+| j	        d,           d-gd.gz   d/ |D             z   d0gz   d1| j	        d2gz   } ng }!|D ]}|j        }|                    |t.                    }|j        r-|j$        tJ          ur|!                    |           Q|j        }t          |t                    r|                    |j	        |          }n=t          |          r.t5          |          st7          |          st9          ||          }|j        |rd}nW|j        ,|s*|(|j                            |          }||j         k    rd}n$||j                            |          }n|j!        }|j"        |n|j"        }|#                    |           |r9d| }|||<   ||j&        k    r|||<   | d| d3}"nd| }|||<   | d| d | d4}"nd5| d6}"|j(        r!|s|d         dk    r|n	|dd         }| d7|" }"|                    |"           |!r
|                    d           |                    d           |!D ]}|j        }|                    |t.                    }|j        }t          |t                    r|                    |j	        |          }n=t          |          r.t5          |          st7          |          st9          ||          }|j        |rd}nW|j        ,|s*|(|j                            |          }||j         k    rd}n$||j                            |          }n|j!        }d| }|||<   |s|d         dk    r|n	|dd         }|j"        |n|j"        }|#                    |           |                    d8| d           |r_||j&        k    r&|||<   |                    d9| d| d| d           d| }|||<   |                    d9| d| d| d | d!	           |                    d9| d"| d#           d:gd; |D             z   d<gz   } |r|g d=z  }d>)                    d? |D                       }#|*                                D ]
\  }$}%|%||$<   d@|
 dA|# dBg|z   |z   | z   }&tW          | dC|D          }'dE)                    |&          }(tY          t[          |(|'dF          |           |r t]          |(          d|&|'ft^          j0        |'<   ||
         S )GzDGenerate a specialized dict structuring function for an attrs class.rB   r*   rC   
structure_r   z"Missing type for generic argument z, specify it when structuring.Nr$   z
[\[\.\] ,]___clc              3   J   K   | ]}t          |j        t                    V  d S r9   r:   r=   s     r,   r@   z)make_dict_structure_fn.<locals>.<genexpr>  rA   r+   __c_a__c_fekez
  res = {}z  errors = []z**res,__c_cve__c_structure_r   r   z  zif 'z' in o:ztry:zres['rI   z(o['z'])	__c_type_z'], rF   z'] = o['z']zexcept Exception as e:z@e.__notes__ = getattr(e, '__notes__', []) + ["Structuring class z @ attribute z"]zerrors.append(e))(  unknown_fields = set(o.keys()) - __c_a  if unknown_fields:z5    errors.append(__c_feke('', __cl, unknown_fields))z2  if errors: raise __c_cve('While structuring ' + z, errors, __cl)z  try:z    return __cl(c                     g | ]}d | S )z      r*   rY   s     r,   rS   z*make_dict_structure_fn.<locals>.<listcomp>v  s    <<<4<<<r+       )z@  except Exception as exc: raise __c_cve('While structuring ' + z, [exc], __cl)z']),z),zo['z'],rP   z  if 'rH   z  return __cl(c                     g | ]}d | S rX   r*   rY   s     r,   rS   z*make_dict_structure_fn.<locals>.<listcomp>  s    !M!M!MD---!M!M!Mr+   z  ))r   r   z,    raise __c_feke('', __cl, unknown_fields)rM   c                     g | ]	}| d | 
S rO   r*   rQ   s     r,   rS   z*make_dict_structure_fn.<locals>.<listcomp>  s"    "J"J"J!a::!::"J"J"Jr+   rT   z
(o, _, *, rU   	structurer^   r\   r`   )1r   r   rb   rc   r)   rd   r;   r   getr$   KeyErrorr   resubr   r   ra   r   rh   r   rv   r   rk   rm   r#   r<   r   r   r   r2   _structure_funcrp   _structure_errorr   r"   rj   rn   r   _structure_callr&   kw_onlyrw   rx   ry   rz   r{   r|   r}   r~   ))r1   r2   r   r4   r   r   r5   r   r   r   r   r   	name_baserk   r   r   r   
post_linesr   r   is_dcallowed_fieldsr?   anr/   r   r   struct_handler_nameianr   rR   	type_nameinstantiation_linesnon_requiredinvocation_liner   r   r   r   r   r   s)                                            r,   make_dict_structure_fnr      s    G"~~ "~~#B00,b11  d 	CII$8$89I$J$J 	'g66GE"g *[[b))kGW$G R)2..  	
+II 	 	 	/_QZ___  	
 y*d33Es9~~vmS$//:t:: "EEJ2EE

2
2E
2
2
222 bUUN  4'g3j" K\"""_%%%)))(<9% ;	1 ;	1ABzz"h//H} A!W%% /KK
A..A /wqzz /,q// /"1g..
 {&+K&'8 (M#3<<Q??i888"G#3<<Q??#-"72"7"76=23;"Q%3,,""RVC.HOBr"""Ay''22r222333HHHLLA$$$A =i777>?&':;LLA!V!VC!V!V6I!V!Vr!V!V!VWWWW 0B 0 0I45&y1LLZZ3ZZ-@ZZbZZiZZZ    ;;;;R;;;<<<#2#ALLA555666ALL||WYWf||uw|||   LLA///0000$ 	    J 	____	
 	
 	
 J!"#<<+;<<<= i
 qSUS^ppp	 	  3	5 3	5ABzz"h//H} y''##A&&&A!W%% /KK
A..A /wqzz /,q// /"1g..
 {&+K&'8 (M#3<<Q??i888"G#3<<Q??#-.HOBr""" 0&;r&;&;#:A"#67i777>?&':;)<&J&J"&J&J&JOO 0B 0 0I45&y1)<&W&W"&W&W)&W&W&WOO"/---y ="?besllbbABB%("<"<?"<"<##O4444  3	G##H---LL&&&! /G /GV!::b(33Fa)) 3AJ22AA]] 371:: 3l1oo 3&q'22A
 ;*/O*"GGK+< ,'7@@CCG)"<<<"&]'7@@CCGG'1G&;r&;&;#:A"#67"?besllbbABB#?2RR""2&&&!!"62"6"6"6777 G)";;;BC*+>?"))RRR2ERR2RRR    %5$4$4	89*95"))___2E__2__S\___    %%&E#&E&Er&E&E&EFFFF!M!M<L!M!M!MMQVPWW 	 % 	    J 		"J"J7I"J"J"JKK"((**  1a 
9	8	8#4	8	8	89
	
	 	  &b+?TUUUEYY{##F	'	'/// G!$VdK!F	>s   C((%Dunstructure_toc                    |j         }d}t          | dd          dvr<| j        d         }t          |t                    s|j                            |          }|p| |d}g }|                    d| d           |                    d	           |d
gz   }t          t          d
                    |          dd          |           ||         }	|	S )z<Generate a specialized unstructure function for an iterable.unstructure_iterable__args__N)Nr*   r   )__cattr_seq_cl	__cattr_urT   z(iterable):z8    res = __cattr_seq_cl(__cattr_u(i) for i in iterable)    return resr\    r`   )r]   rc   r   r;   r   ro   rp   rv   rz   r{   rw   )
r1   r2   r   r   r   type_argr   r   r   r   s
             r,   make_iterable_unstructure_fnr     s     #G$G
 r:t$$J66;q> (G,, 	E1::8DDG-3'JJEE	LL,,,,---	LLKLLL+,,K;''V	4	4e<<<	wBIr+   .c                    d}t          |           }fd|D             }d t          |          D             }|t          ur|p| |d<   g }|                    d| d           |t          ur|                    d           n|                    d           t	          t          |                    D ]I}||         j        k    r|                    d	| d
           -|                    d| d| d           J|t          ur|                    d           n|                    d           |dgz   }	t          t          d	                    |	          dd          |           ||         }
|
S )zEGenerate a specialized unstructure function for a heterogenous tuple.unstructure_tuplec                 D    g | ]}j                             |          S r*   )ro   rp   )r>   r   r2   s     r,   rS   z4make_hetero_tuple_unstructure_fn.<locals>.<listcomp>9  s7       ;C	#,,X66  r+   c                      i | ]\  }}d | |S )
__cattr_u_r*   )r>   rR   hs      r,   
<dictcomp>z4make_hetero_tuple_unstructure_fn.<locals>.<dictcomp>=  s'    AAATQ!qAAAr+   r   rT   z(tup):z    res = __cattr_seq_cl((z    res = (z        tup[z],z        __cattr_u_z(tup[z]),z    ))r   r   r\   r   r`   )
r   	enumeratetuplerv   ranger|   rq   rz   r{   rw   )r1   r2   r   r   	type_argshandlersr   r   rR   r   r   s    `         r,    make_hetero_tuple_unstructure_fnr   0  s    "GI   GP  H BAYx-@-@AAAEU"""0"6BE	LL''''(((U""12222]###3x==!! > >A;)999LL----....LL<a<<a<<<====U""XW+,,K;''V	4	4e<<<	wBIr+   key_handlerc                 d   |p|j         }|j         }d}t          | dd          t          |           }t          |          dk    r|\  }}	n	|t          }	}|p|j                            |          }||j        k    rd}|j                            |	          }||j        k    rd}|p| ||d}
|dnd}|dnd	}g }|                    d
| d           |                    d| d| d           |dgz   }t          t          d                    |          dd          |
           |
|         }|S ):Generate a specialized unstructure function for a mapping.unstructure_mappingr   N   )__cattr_mapping_cl__cattr_k_u__cattr_v_uz__cattr_k_u(k)r   z__cattr_v_u(v)r   rT   z
(mapping):z    res = __cattr_mapping_cl((rM   z) for k, v in mapping.items())r   r\   r   r`   )r]   rc   r   r|   r   ro   rp   rq   rv   rz   r{   rw   )r1   r2   r   r   khval_handlerr   argskey_argval_argr   k_uv_ur   r   r   s                   r,   make_mapping_unstructure_fnr   ^  s    
	-	-B'K#G r:t$$0||t99>>#GWW  $SWGII7@@II000B1::7CC)999K -2" E !n

#C)5

3CE	LL++++,,,	LLSSSSSS   +,,K;''V	4	4e<<<	wBIr+   structure_todetailed_validationc                    d}d|i}g }|                     d| d           t          |           st          |           }	t          |	          dk    r|	\  }
}|t          u r|
}|t          u r|}n9|t          ur|t          u r|	\  }n"|t          u r|t          ur|	\  }n|	\  }t
          }|t
          u o|t
          u }|sv|j                            |          }||j        k    r|}|j                            |          }||j        k    r|}||d<   ||d<   ||d<   ||d	<   ||k    rd
nd}||k    rdnd}nd}|r|                     d           n|r|t          |d<   t          |d<   |                     d           |                     d           |                     d           |                     d|            |                     d           |                     d           |                     d           |                     d           |                     d           |                     d|            |                     d           |                     d           |                     d           |                     d           |                     d           |                     dt          |           d           n|                     d | d!| d"           |t          ur|                     d#           |d$gz   }d%                    |          }t          t          |d&d'          |           ||         }|S )(r   structure_mappingr   rT   z(mapping, _):r   __cattr_k_t__cattr_v_t__cattr_k_s__cattr_v_sz__cattr_k_s(k, __cattr_k_t)z__cattr_k_s(k)z__cattr_v_s(v, __cattr_v_t)z__cattr_v_s(v)Tz  res = dict(mapping)r   r   z  res = {}; errors = []z/  for ix, (k, v) in enumerate(mapping.items()):z    try:z      value = z    except Exception as e:z`      e.__notes__ = getattr(e, '__notes__', []) + ['Structuring mapping value @ key ' + repr(k)]z      errors.append(e)z      continuez      key = z      res[key] = valuez^      e.__notes__ = getattr(e, '__notes__', []) + ['Structuring mapping key @ key ' + repr(k)]z  if errors:z9    raise IterableValidationError('While structuring ' + z, errors, __cattr_mapping_cl)rV   z: z for k, v in mapping.items()}z  res = __cattr_mapping_cl(res)r[   r\   r   r`   )rv   r   r   r|   r   r   r   rp   r   r   r   reprdictrw   rz   r{   )r1   r2   r   key_typeval_typer   r   r   r   r   key_arg_candval_arg_candis_bare_dictr   r   k_sv_sr   r   r   s                       r,   make_mapping_structure_fnr    s    "G2LAEE	LL..../// 2;; ,||t99>>)-&L,7""'7""'w&&8w+>+>"W$$)@)@" #3:8s? 	#3<<XFFKi777&#3<<XFFKi777&#+E- #+E- #.E- #.E-  (** .-%  (** .-%   R,---- 	R!*E+/FE+,LL2333LLJKKKLL$$$LL/#//000LL5666LLr   LL1222LL)***LL$$$LL---...LL1222LL5666LLp   LL1222LL(((LLuDQSHHuuu    LLPcPPSPPPQQQ46777>**KYY{##FV	$	$e,,,	wBIr+   cls	func_namer_   c           	      F   t          j                    }d}d}	 d                    || j        t	          | d| j                  |          }|s|S ddt          |          f|f}t          j        	                    ||          |k    r|S |dz  }d                    |          })zF
    Create a "filename" suitable for a function being generated.
    r   r   Tz!<cattrs generated {0} {1}.{2}{3}>r&   Nz-{0})
uuiduuid4formatr%   rc   r$   r)   r}   r~   
setdefault)r  r  r_   	unique_idextracountunique_filename
cache_lines           r,   ry   ry     s     
IEE%=DDs~wsNCL'Q'QSX
 
  	#"" I0/B
?%%ozBBjPP"" 	
e$$%r+   )NNF)FT)FTFTr9   )NN)T)<r}   r   r  dataclassesr   	threadingr   typingr   r   r   r   r	   r
   r   r   r   r   rr   r   r   r   cattrs.errorsr   r   r   r   _compatr   r   r   r   r   r   	_genericsr   cattr.convertersr   r    r'   r)   r/   rm   re   r0   r   r<   rb   DictStructureFnr   IterableUnstructureFnr   HeteroTupleUnstructureFnr   MappingUnstructureFnr   MappingStructureFnr   r  ry   r*   r+   r,   <module>r     s       				  $ $ $ $ $ $                               / / / / / / / / / /                           & % % % % % /......         '+ X Xd^XSMX X X X X egg GCLL %*"&	O OQOO "O  	O
  O qc4S>!"O O O Od$ T#t)_ c4i    . GCH-s3Q67 ',"&-2(,[ [Q[[  $[  	[
 '+[ "&[  [ Q[ [ [ [| !(3-#!56  @D '9<   B $U38_$5s$:;  @D( (('(9<(( ( ( (V  c!2 3S 89  AE	3 333 3 (C##7#<=>	3
 3 3 3 3l wsCx0#69:   $h hQhh h h h h h hV% %3 %3 % %QT % % % % % %r+   