
    ُkh&                        d dl Z d dlZd dlmZ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 d dlZddlmZmZmZmZmZmZmZmZmZmZmZ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(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z. ddl/m0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 erdd	l8m9Z9  G d
 de)e      Z:	 dde;dee;   ddfdZ<de,de	dee;   ddfdZ=de,de	ddfdZ>de:de	de	ddfdZ?de,de	ddfdZ@y)    N)ABCabstractmethod)Enum)TYPE_CHECKINGAnyClassVarDictListOptionalTupleUnion   )_DEFAULT_MARKER_	ValueKind_ensure_container
_get_value_is_interpolation_is_missing_value_is_none_is_special_resolve_optionalget_structured_config_dataget_type_hintget_value_kindget_yaml_loaderis_container_annotationis_dict_annotationis_list_annotationis_primitive_dictis_primitive_type_annotationis_structured_configis_tuple_annotationis_union_annotation)Box	ContainerContainerMetadataDictKeyTypeNodeSCMode	UnionNode)ConfigCycleDetectedExceptionConfigTypeErrorInterpolationResolutionErrorKeyValidationErrorMissingMandatoryValueOmegaConfBaseExceptionReadonlyConfigErrorValidationError
DictConfigc                   @    e Zd ZU i Zeeeef      ed<   de	e
   def fdZ	 	 	 	 d9dededed	ed
edee	e   ee	e      f   fdZefdeeef   dededefdZdefdZdefdZdeeef   fdZdeeef   ddfdZededdfd       ZdefdZd:dZdee   ddfdZdefdZe de!jD                  fde#dededed e!dedeeeeef   ee   f   fd!       Z$e d;d$       Z%e d"ed#eddfd%       Z&d&ed eeef   ee   e'ed'f   ef   ddfd(Z(d&ed eeef   ee   e'ed'f   ef   ddfd)Z)dededdfd*Z*ded+ed,eddfd-Z+e d.e#d/eeef   d0e#d1eeef   def
d2       Z,defd3Z-defd4Z.ed<dededdfd5       Z/edededdfd6       Z0defd7Z1deeee2df   defd8Z3 xZ4S )=BaseContainer
_resolversparentmetadatac                 b    |t        |t              st        d      t        |   ||       y )Nz Parent type is not omegaconf.Box)r8   r9   )
isinstancer$   r,   super__init__)selfr8   r9   	__class__s      S/var/www/teggl/fontify/venv/lib/python3.12/site-packages/omegaconf/basecontainer.pyr=   zBaseContainer.__init__;   s/    *VS"9!"DEE:    Fkeyvalidate_accessvalidate_keythrow_on_missing_valuethrow_on_missing_keyreturnc                     | j                  |||||      }t        |t              r?t        |      s4|j	                         }t        |t
              rt        |t              rJ |}|S )z=Like _get_node, passing through to the nearest concrete Node.)rB   rC   rD   rE   rF   )	_get_noder;   r*   r   _valuer(   )r>   rB   rC   rD   rE   rF   childvalues           r@   
_get_childzBaseContainer._get_child@   sg     +%#9!5  
 eY'E0BLLNEeT*:eY3OOOErA   rL   default_valuec                     t        |      r|t        ur|S t        d      | j                  | ||d      }t	        |      S )zEreturns the value with the specified key, like obj.key and obj['key']z"Missing mandatory value: $FULL_KEYT)r8   rB   rL   throw_on_resolution_failure)r   r   r/   _maybe_resolve_interpolationr   )r>   rB   rL   rN   resolved_nodes        r@   _resolve_with_defaultz#BaseContainer._resolve_with_defaultV   sU     U#$44$$'(LMM99(,	 : 
 -((rA   c                 "    | j                         S N)__repr__r>   s    r@   __str__zBaseContainer.__str__k   s    }}rA   c                     | j                   d   y| j                         s| j                         r| j                   d   }d| dS | j                   d   j                         S )N_contentNone')__dict__r   _is_missingrV   )r>   vs     r@   rV   zBaseContainer.__repr__n   s^    ==$,##%)9)9);j)Aqc8O==,5577rA   c                    t        j                   | j                        }|j                  dd        t        j                   |d         |d<   | j                  j                  }t        |      r6t        |      rt        |d   _        nt        |      rt        |d   _        nJ t        j                  dk  r,| j                  j                  }t        |      rt        d      |S )N_flags_cache	_metadata)      zOSerializing structured configs with `Union` element type requires python >= 3.7)copyr]   poprb   ref_typer   r   r	   r   r
   sysversion_infoelement_typer#   r0   )r>   	dict_copyrg   rj   s       r@   __getstate__zBaseContainer.__getstate__x   s    IIdmm,	 	nd+!%9[+A!B	+>>**"8,!(+26	+&/#H-26	+&/uf$>>66L"<0,e  rA   dNc                    ddl m} ddlm}m} t        | |      r!|d   j                  }|t        }||d   _        |d   j                  }|t        }||d   _        |d   j                  }t        |      r8 ||      rt        |f   |d   _	        n ||      rt        |   |d   _	        nJ d |d<   | j                  j                  |       y )Nr   r3   )is_generic_dictis_generic_listrb   ra   )	omegaconfr4   omegaconf._utilsro   rp   r;   key_typer   rj   rg   r   r	   r
   r]   update)r>   rm   r4   ro   rp   rs   rj   rg   s           r@   __setstate__zBaseContainer.__setstate__   s    (EdJ'~..H *2+'~22 L*6AkN'[>**"8,x(*.x/E*F+' **.|*<+'u .QrA   c                      y rU    )r>   rB   s     r@   __delitem__zBaseContainer.__delitem__       rA   c                     | j                         s | j                         s| j                         ry| j                  d   }t	        |      S )Nr   rZ   )r   r^   r   r]   len)r>   contents     r@   __len__zBaseContainer.__len__   s<    ==?d..0D4J4J4L--
+7|rA   c                 L    t         j                  dd  }| j                  |       y )Nr   )rh   argvmerge_with_dotlist)r>   	args_lists     r@   merge_with_clizBaseContainer.merge_with_cli   s    HHQRL		*rA   dotlistc                 B   ddl m} dd}t        |t        t        f      s |        |D ]s  }t        |t
              s |        |j                  d      }|dk(  r|}d }n,|d| }||dz   d  }t        j                  |t                     }|j                  | ||       u y )	Nr   )	OmegaConfc                      t        d      )Nz/Input list must be a list or a tuple of strings)
ValueErrorrw   rA   r@   failz.BaseContainer.merge_with_dotlist.<locals>.fail   s    NOOrA   =r   )LoaderrG   N)rq   r   r;   listtuplestrfindyamlloadr   rt   )r>   r   r   r   argidxrB   rL   s           r@   r   z BaseContainer.merge_with_dotlist   s    '	P 'D%=1F 	/Cc3'((3-Cby!CjC!GI		%0ABT3.	/rA   c                 8    t        | j                  d         dk(  S )zreturn true if config is emptyrZ   r   )r{   r]   rW   s    r@   is_emptyzBaseContainer.is_empty   s    4==,-22rA   confresolvethrow_on_missingenum_to_strstructured_config_modec                     ddl m}m}m} dt        dt
        ffddt        t        t        f   dt
        f fd} j                         ry  j                         r"r j                  d d t        d      	       n8|S s4 j                         r$ j                         }	t        |	t               sJ |	S r$ j#                         }
t        |
t$              sJ |
 t         |      r j&                  j(                  t*        d fvrt,        j.                  k(  r S t,        j0                  k(  r/t3         j&                  j(                        r j5                         S i } j7                         D ].  } ||      }rt        |t8              r|j:                   }|||<   0 |S t         |      r6g }t=        t?                     D ]  } ||      }|jA                  |        |S J )
Nr   )MISSINGr4   
ListConfigvalrG   c                 f    | j                         }rt        |t              r|j                   }|S rU   )rJ   r;   r   name)r   rL   r   s     r@   convertz*BaseContainer._to_content.<locals>.convert   s*    JJLEz%6 ::,LrA   rB   c                    	 j                  | 	      }t        t              sJ r	 |j                         }t        |t              rt        j                  |	      }|S  |      }|S # t        $ r}j                  | d |       Y d }~}d }~ww xY w# t        $ r}j                  | d |       Y d }~d }~ww xY w)N)rE   rB   rL   cause)r   r   r   r   )
rM   r/   _format_and_raiser;   r(   _dereference_noder-   r%   r6   _to_content)
rB   nodeerL   r   r   r   r   r   r   s
       r@   get_node_valuez1BaseContainer._to_content.<locals>.get_node_value   s    EsCST dD)))I113D $	*%11#%5 ++A 2  L  L' ) E&&3d!&DDE 4 I**s$a*HHIs.   A1 B 1	B:BB	C$B==CzMissing mandatory valuer   )!rq   r   r4   r   r(   r   r   r'   intr   r^   r   r/   r   rJ   r;   r   r   r%   rb   object_typedictr)   DICT_CONFIGINSTANTIATEr!   
_to_objectkeysr   r   ranger{   append)r   r   r   r   r   r   r4   r   r   inter_confretdictrB   rL   retlistindexitemr   s   `````            @r@   r   zBaseContainer._to_content   s    	>=	 	# 		k3&6 7 	C 	 	0 ==?&&/0IJ '  T335KKMEeS)))L**,EeY///DdJ'**4,>*f.@.@@%););;@T**A ((.0Gyy{ %&s+:c4#8 XXJC$	%
 Nj)!#Gs4y) %%e,t$% NurA   destsrcc                 B	   ddl m}mm} t	        |       sJ t	        |      sJ |j
                  j                  }t        |      }|J |j                         s|j                         r.| j                  |j                                t        | ||       y| j                  |       dt        ddffd}|j                         r.| j                         st!        |      r|J |}t#        ||	      }| j                         s| j                         r|j                         s ||        |j                         st%        |      ng }|D ]  }|j'                  |d
      }	| j'                  |d
      }
t	        |	t(              sJ |
t	        |
t(              sJ t+        |	      }t-        |	      }|t.        j0                  u }t	        |
      r|
j                  |	       t	        |
t              r'|
j                         r|st        |	d      s ||
       |
F|
j                         r6|
j3                         }t	        |t              r|| |<   | j'                  |      }
t5        | j
                  j6                        \  }}|
-t!        |      r"|s  || ||      | |<   | j'                  |      }
|
t	        |
t8              r;t	        |	t8              r|
j;                  |	       |r| j=                  ||	       t	        |	t8              r| j=                  ||	       t	        |
|t>        f      sJ t	        |	|t>        f      sJ 	 t	        |
|      rL|r5tA        j@                  |	      }|j                  |
j                                n|	}| j=                  ||       n|s|
j                  |       nddl m$} t!        |      r' ||       5  |j'                  |      | |<   ddd       |j'                  |      | |<    t        | ||       |j
                  jJ                  }|J |jM                         D ]  \  }}|	| jO                  ||        y# tB        tD        f$ r}| jG                  |||       Y d}~<d}~ww xY w# 1 sw Y   NxY w)zBmerge src into dest and return a new copy, does not modified inputr   )AnyNoder4   	ValueNodeNr   rg   r   )rL   r   rG   c                     | j                   j                  }|t        ur*t        |      ri }n-t	        |      st        |      rg }n|}nt        |       ri }nJ | j                  |       y rU   )rb   rg   r   r   r   r"   r;   
_set_value)r   rtr   r4   s      r@   expandz(BaseContainer._map_merge.<locals>.expandG  s`    ((B}%b)C'+/B2/FCCD*-uOOC rA   )rg   r   F)rC   Tr   )r8   rg   is_optionalr   )	open_dict)(rq   r   r4   r   r;   rb   r   r   r   r   r   rJ   _update_types_validate_merger%   r^   r!   &_create_structured_with_missing_fieldsr   rI   r(   r   r   r   MANDATORY_MISSING_maybe_dereference_noder   rj   r6   _merge_with__setitem__r*   re   r2   r1   r   r   flagsitems	_set_flag)r   r   r   r   src_typesrc_ref_typer   	src_itemsrB   src_node	dest_node	src_valuesrc_vksrc_node_missingtarget_noder   etr   r   r   r   flagrL   r4   s                          @r@   
_map_mergezBaseContainer._map_merge2  s@    	=<$
+++#z***==,,$S)'''
 <<>S224OOCJJL)tlQ3'	! 	!t 	!$ OO$$&$\2 ####H8%8C ""$(8(8(:COODU4L%(__%6DIB	 G	3C}}S%}@HsEBIh---$
9d(CCC"8,I#H-F%)D)DD)Z0)))9 9i0&&(( 48y!$)D)D)F'??Ak95 +DI $s 3I/0K0KLOK %9"%=FV&tbkS	 !NN3/	$i7!(M:!--h7-((h7!(M:((h7))i5KLLL)(Y	4JKKKV))W=#3+/99X+>D %)OOI4D4D4F$G+3D $ 0 0d ;'7$-$8$8$C
 0'1"4 7$'MM#$6S	7 7 !$c 2DIOG	3R 	4,HM ##    ;;= 	,KD% tU+	,# !01DE V 22s)ST2UUV7 7s%   A+Q#R#R2RRR	c                 B   ddl m}m}m} t	        | |      sJ t	        ||      sJ |j                         r| j                  d        n|j                         rD| j                  j                  t        u rb|j                  j                  | j                  _	        n;|j                         r!| j                  |j                                n
 |g | j                               }t        j                  | j                   d         |j                   d<   t#        | j                  j                        \  }}t%        |      rR ||||      }|j'                  d      D ]1  }	t	        |	|      r|j)                  ||	      }	|j+                  |	       3 n(|j'                  d      D ]  }	|j+                  |	        |j                   d   | j                   d<   |j                  j,                  }
|
J |
j/                         D ]  \  }}|	| j1                  ||        y )	Nr   )r4   r   r   )r|   r8   rb   )rg   r   Fr   rZ   )rq   r4   r   r   r;   r   r   r^   rb   rj   r   r   rJ   _get_parentre   deepcopyr]   r   r!   _iter_exmerger   r   r   r   )r   r   r4   r   r   temp_targetr   r   	prototyper   r   r   rL   s                r@   _list_mergezBaseContainer._list_merge  s   ??$
+++#z***<<>OOD!__~~**c1.1mm.H.H+""$OOCJJL)$R8H8H8JKK04k*1K  - 00K0KLOK#B'&rBKP	LLL7 -D!$
3(y$?&&t,-
  LLL7 -D&&t,- )4(<(<Z(HDMM*% ##    ;;= 	,KD% tU+	,rA   others.c                 x    	  | j                   |  y # t        $ r}| j                  d d |       Y d }~y d }~ww xY w)Nr   )r   	Exceptionr   )r>   r   r   s      r@   
merge_withzBaseContainer.merge_with  sB    	BDf% 	B""t4q"AA	Bs    	949c                    ddl m} ddlm} 	 |D ]  }|t	        d      i }| j                  d      du rddi}t        ||      }t        | |      r#t        ||      rt        j                  | |       et        | |      r#t        ||      rt        j                  | |       t        d       | j                          y )	Nr   r3   r   zCannot merge with a None configallow_objectsT)r   z'Cannot merge DictConfig with ListConfig)
dictconfigr4   
listconfigr   r   	_get_flagr   r;   r6   r   r   	TypeError
_re_parent)r>   r   r4   r   othermy_flagss         r@   r   zBaseContainer._merge_with  s     	+*V 	KE} !BCCH~~o.$6+T2%e8<E$
+
5*0M((u5D*-*UJ2O))$6 IJJ	K" 	rA   c                 L    ddl m}m} t        |t              r j                  d       }|s2t        |t              r" j                         |j                         u rd}|rt        j                  |      }|j                  d       	 |j                         }|j                          j                  |       |j                  |       n j                  |        j                  d      rt        d      t        |t              } j                        }|t        |t              sJ t        ||      xr t        ||       }	dt         d	t         f fd
}
 |
|      }t#        |      \  }}dt         dt        d	df fd}|	rt%        |      s
 ||       yt'        |      }|duxr+ |j)                         xs t        ||      xr t+        |      }|rD|r t        |t              r|j-                         } j.                  d      j1                  |       y|rW|rt3        |      s!t5        |      st+        |      st%        |      rt7        |      } j9                  ||       y ||       y j9                  ||       y# |j                         w xY w)z
        Changes the value of the node key with the desired value. If the node key doesn't
        exist it creates a new one.
        r   )r   r   no_deepcopy_set_nodesTNreadonlyz(Cannot change read-only config containerr   rG   c                     t        |       sj                  j                  }|S j                        }|j                  j                  }|S t	        |t
              sJ |j                  j                  }|S rU   )r!   rb   rj   rI   r;   r(   	type_hint)r   r   targetrB   r>   s      r@   get_target_type_hintz:BaseContainer._set_item_impl.<locals>.get_target_type_hint2  sw    ', NN77	  ,> $ ; ;I  &fd333 & 0 0 : :IrA   	value_keyc                     |j                         J |}|j                         |j                  |        t        |j                  j
                         |j                  d   | <   y )N)r   r   rZ   )r   _set_parent_set_key_deep_update_type_hintrb   rj   r]   )r   r   r_   r>   s      r@   assignz,BaseContainer._set_item_impl.<locals>.assignA  sZ    ??$,,,AMM$JJy!"T^^5P5PQ34DMM*%i0rA   rZ   )nodesr   r   r;   r(   r   r$   	_get_rootre   r   r   _keyr   _validate_setr1   rI   r   r   r#   r   _has_ref_typer    rJ   r]   r   r   r!   r   _wrap_value_and_set)r>   rB   rL   r   r   do_deepcopyoldinput_is_nodetarget_node_refinput_is_typed_vnoder   target_type_hint_target_ref_typer   special_valueshould_set_values   ``               r@   _set_item_implzBaseContainer._set_item_impl  sp   
 	.eT""nn-DEEK:eS#9>>#u'88"&Ke,d#$jjls#""3.s#sE*>>*%%&PQQ"5$/..-&*_d*KKK)%;  
J7E
 A

	c 
	c 
	 06./?@?	5c 	5 	5 	5  (;O(L3 (.M  /d:  --/ 8 <4U;	    Zt%<!LLNEj)#.99%@!/@/@3OD*?;&u-E,,S%9IJ3&((e5EFS s#s   
3J J#r   r   c                     ddl m} t        |      \  }}	  ||||||       }| j
                  d   |<   y # t        $ r}| j	                  |||       Y d }~5d }~ww xY w)Nr   )_maybe_wrap)rg   rB   rL   r   r8   r   rZ   )omegaconf.omegaconfr  r   r2   r   r]   )	r>   rB   r   r   r  r   rg   wrappedr   s	            r@   r  z!BaseContainer._wrap_value_and_setn  st    3 1) <X		@!!'G *1j!#&  	@""s#Q"??	@s   6 	AAAc1k1c2k2c                    | j                  |      }|j                  |      }||J t        |t              sJ t        |t              sJ |j                         r|j                         ry|j	                         r|j	                         ry|j                         }|j                         }|}|}	|r|j                         }|r|j                         }	|rL|rJ||	||k(  S t        |t              rt        |	t              r||	k7  ryt        |      }t        |	      }	||	k(  S |s1|s/t        |      }t        |      }||k(  }
t        |
t              sJ |
S t        |      }t        |	      }	||	k(  }
t        |
t              sJ |
S )NTF)
rM   r;   r(   r   r^   r   r   r%   r   bool)r  r  r  r  v1v2v1_interv2_interdv1dv2rets              r@   _item_eqzBaseContainer._item_eq  sx    ]]2]]2~".00"d###"d###;;=R[[]>> 0'')'')  ,,.C,,.C{ckRx c9-*S)2Lcz$ o ocz!(BBBB(Cc4(((JS/CS/C*Cc4(((JrA   c                 8    | j                   d   j                  du S )Nrb   T)r]   optionalrW   s    r@   _is_optionalzBaseContainer._is_optional  s    }}[)22d::rA   c                 2    t        | j                  d         S NrZ   )r   r]   rW   s    r@   r   zBaseContainer._is_interpolation  s     z!:;;rA   c                      y rU   rw   r>   rB   rL   s      r@   _validate_getzBaseContainer._validate_get  ry   rA   c                      y rU   rw   r*  s      r@   r  zBaseContainer._validate_set  ry   rA   c                      | j                   d   S r(  )r]   rW   s    r@   rJ   zBaseContainer._value  s    }}Z((rA   c                   	 ddl m ddlm} t	        |t
        t        t        t        t        t        t        t        d       f      sydt        dt        fd	dt        d	t        d
t        dt        t        t         t
        t        f      dt        f
	fd}||dk7  rt	        | t"              sJ  || t        |      dd      \  }}|`| } |dt        |      d |      }|j%                          ||t        |j'                               t        |      |j%                               }n] |dt        |j'                               t        |      |j%                               }n#| }|j%                         y| j%                         }|J t)        |      h}|j'                         |j'                         }t)        |      |v rt+        d|d      |j-                  t)        |             |J |j%                         9 ||t        |j'                               t        |      |j%                               }|j'                         |S )Nr   r   )_select_one xrG   c                     | j                   (| j                   d| j                   d| j                    S | j                   d| j                   S )N:)stepstartstop)r1  s    r@   _slice_to_strz2BaseContainer._get_full_key.<locals>._slice_to_str  sH    vv!''!AFF81QVVH55''!AFF8,,rA   full_keyparent_typecur_typerB   c                 p   || S t        |t              r	 |      }n(t        |t              r|j                  }nt	        |      }t        |t              sJ t        |      r-| dk7  r t        |      r
d| d|  } | S d| d|  } | S d| d} | S | dk(  r|} | S t        |      r| |  } | S | d|  } | S )Nr0  []z]..)r;   slicer   r   r   
issubclass)r8  r9  r:  rB   r   r7  s       r@   prepandz,BaseContainer._get_full_key.<locals>.prepand  s    {#u%#C(C&hh#hc3'''+z2r>!(J7%&se1XJ#7 O &'se2hZ#8 O "#3%qzH O r>"H O	 "(J7&)U8*#5 O '*U!H:#6OrA   F)crB   r   throw_on_type_errorz*Cycle when iterating over parents of key ``)r   r   rq   r/  r;   r   r   r   floatr  r?  bytestyper   r   r   r'   r%   r  r   idr+   add)
r>   rB   r/  rA  curr  r8  memor   r7  s
           @@r@   _get_full_keyzBaseContainer._get_full_key  s   **#S$tUE4PT:VW	-U 	-s 	-"	"	"	 "	 %S% 789	"	
 "	H ?sbydI... CHuRWFC {"2tCy$<88:)& $s'8"949chhj H #2tCOO,='>S	388:VCxxz!yy{H3yoo+//#C#w$2@qI  HHRW?"?xxz%"d3??#45tCy#((* oo+ rA   )TTFFr   )r   r6   r   r6   rG   NrU   )5__name__
__module____qualname__r7   r   r	   r   r   __annotations__r   r$   r&   r=   r  r   r(   r
   rM   r   r'   r   rS   rX   rV   rl   ru   r   rx   r}   r   r   r   staticmethodr)   DICTr%   r   r   r   r   r   r   r  r  r#  r&  r   r+  r  rJ   r?  rL  __classcell__)r?   s   @r@   r6   r6   8   s   +-Jc3h(-;x} ;8I ; !%!',%*  	
 !% # 
x~tHTN33	44 .	);#$) ) 	)
 
)* 8# 8d38n 0 d38n    > s t   +/$s) / /03$ 3 
 ")/VVV V 	V
 !'V 
tS#tK$45tCy@	AV Vp F, F,P %,# %,C %,D %, %,N	BT#s(^T#Yc3hL
	B
 
	BT#s(^T#Yc3hL

 
<`G# `Gc `Gd `GD1s 1 1 1 1" 33+s"#3 3 +s"#	3
 
3 3j;d ;<4 <  S D    S T  ) )T{C'D!E T# TrA   r6   rg   r   rG   r4   c                    ddl m}m} t        |       }|j	                         D ]  }|j                  |         ||      }t        |       \  |j                  _        |j                  _	        ||j                  _
        |S )Nr   )r   r4   )r0  r   r4   r   valuesr   r   rb   r%  rg   r   )rg   r   r   r4   cfg_datar_   cfgs          r@   r   r     sm     &)(3H__ 	W X
C5Fx5P2CMMCMM2 +CMMJrA   r   c                     |t        |      s|| j                  _        | j                  j                  t        u rt        | |       y y rU   )r   rb   r   rg   r   r   r   s      r@   r   r   -  s=    '8'E%0"~~#%tX. &rA   r   c           	         ddl m}m} ddlm}m} |t        u ryt        | |       t        |      \  }}|| j                  _
        || j                  _        t        |      rVt        | |      rJ ||      }|| j                  _        t        |       s&t!        t#        |             D ]  }	t%        | |	|        t'        |      rt        | |      r ||      \  }
}|
| j                  _        || j                  _        t        |       s_| D ]Y  }|
t        urBt        ||
      s6t+        d|dt-        |      j.                   dd	|
j.                   d
z         t%        | ||       [ yyyy)z@Ensure node is compatible with type_hint, mutating if necessary.r   )r4   r   r   )get_dict_key_value_typesget_list_element_typeNzKey  (z) is incompatiblez with key type hint 'r\   )rq   r4   r   _utilsrZ  r[  r   _shallow_validate_type_hintr   rb   rg   r%  r   r;   rj   r   r   r{   _deep_update_subnoder   rs   r.   rG  rM  )r   r   r4   r   rZ  r[  new_is_optionalnew_ref_typenew_element_typeinew_key_typerB   s               r@   r   r   5  sa   0GCi0$5i$@!O\*DNN-DNN,'JtZ,H0>&6#4 3t9% @$T1.>?@ ,'JtZ,H)A,)O&&".&6#4  Bs*:c<3P,sgRS	(:(:';;LM1,2G2G1HJK  %T30@AB !	 -I'rA   rB   value_type_hintc                     | j                  |      }t        |t              sJ t        |      rD| j	                  ||j                         |       | j                  |      }t        |t              sJ t        ||       y)zVGet node[key] and ensure it is compatible with value_type_hint, mutating if necessary.N)rI   r;   r(   r   r  rJ   r   )r   rB   re  subnodes       r@   r_  r_  Y  sk    nnS!Ggt$$$7 	  gnn&6H..%'4(((7O4rA   c                    ddl m}m}m} t	        |      \  }}t        |       }| j                         rD|sAt        |       }t        d|dt        |      j                   dd|j                   dz         y|t        j                  t        j                  fv ry|t        j                  k(  r#t        |      r^t!        | |      rR| j#                         }t!        ||      st        d|dt        |      j                   dd|j                   dz         t%        |      rt!        | |      ryt'        |      rt!        | |      ryt)        |      rt!        | |      ryt!        | |      r<| j#                         }t        d|dt        |      j                   dd| dz         t        dt        |       j                   d	d
| dz         yJ )zMError if node's type, content and metadata are not compatible with type_hint.r   )r4   r   r   zValue r\  )z! is incompatible with type hint 'r\   Nz' is incompatiblez with type hint ')rq   r4   r   r   r   r   r   r   r2   rG  rM  r   r   INTERPOLATIONVALUEr    r;   rJ   r!   r   r   )	r   r   r4   r   r   r   rg   vkrL   s	            r@   r^  r^  f  s   ;;-i8K		B}}t$E!	DK$8$8#9;5h6G6G5HJK  			++Y-D-DE	E	y	'1jy6QKKMEeX.%UIRU(<(<'=Q?9(:K:K9LANO  "(+
40L)jz.J)jz.J$	*%UIRU(<(<'=Q?9(1EF 
 &T
++,,=>)(156 ' /2 	urA   rU   )Are   rh   abcr   r   enumr   typingr   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#   baser$   r%   r&   r'   r(   r)   r*   errorsr+   r,   r-   r.   r/   r0   r1   r2   r   r4   r6   rG  r   r   r   r_  r^  rw   rA   r@   <module>rr     s    
 #  S S S      .  	 	 	 &bIs bL 37!)$ / / /(4. /T /!B !B# !B$ !BH
5} 
53 
5 
5QU 
5.d .s .t .rA   