
    j                     h   d dl Z d dlZd dlmZmZmZmZmZmZm	Z	 ddl
mZ  ej                  e      Z	 ddeeef   dededeeef   fd	Z ed
      Zdeeef   de	e   deeef   fdZ	 ddeeef   deeef   dedeeef   fdZdeeee   f   deeef   fdZdededeeef   fdZdedefdZy)    N)AnyDictOptionalListTupleTypeVarType   )logging_messagesd
parent_keydelimreturnc                    g }| j                         D ]`  \  }}|r| | | n|}t        |t              r,|j                  t	        |||      j                                N|j                  ||f       b t        |      S )zh
    The current implementation does not have max depth restrictions or cyclic references handling!
    )r   r   )items
isinstancedictextendflatten_dictappend)r   r   r   r   keyvaluenew_keys          h/Users/manta/Documents/Projects/TheRoad-I1/backend/.venv/lib/python3.12/site-packages/opik/dict_utils.pyr   r   
   sx     Eggi
U1;ZLu-eT"LLeuMSSUVLL'5)*   ;    
_ValueType
value_typec                 p    | j                         D ci c]  \  }}t        ||      s|| c}}S c c}}w N)r   r   )r   r   r   r   s       r   keep_only_values_of_typer       s3     *+T:3j
6SCJTTTs   22dict1dict2	max_depthc                 8   t        j                   |       }|j                         D ]q  \  }}||v r6t        ||         r(t        |      r|dkD  rt        ||   ||dz
        ||<   @||v r)t        j                  t        j                  |||   |       |||<   s |S )Nr   r
   )r#   )copyr   _is_dict	deepmergeLOGGERdebugr   'METADATA_KEY_COLLISION_DURING_DEEPMERGE)r!   r"   r#   mergedr   r   s         r   r'   r'   %   s     YYuFkkm
U6M%A#F3K)a-PF3Kf}$LL3K	  F3K! $$ Mr   originalc                 J    i }| j                         D ]  \  }}|	|||<    |S r   r   )r,   newr   r   s       r   remove_none_from_dictr0   ?   s2    Cnn&
UCH ' Jr   
input_dictkeysc                     |D ci c]  }|| v s|| |    }}| j                         D ci c]  \  }}||vs|| }}}||fS c c}w c c}}w r   r.   )r1   r2   r   subset_dictr   remaining_dicts         r   split_dict_by_keysr6   I   ss    37M4C3*;L3
3'4KM%/%5%5%7%7zsE3k;QU
%7   &&	 Ns   	AAA
A
itemc                 "    t        | t              S r   )r   r   )r7   s    r   r&   r&   Q   s    dD!!r   ).)
   )r%   loggingtypingr   r   r   r   r   r   r	    r   	getLogger__name__r(   strr   r   r    intr'   r0   r6   boolr&    r   r   <module>rD      sI     B B B 			8	$ 69CH~#&/2	#s(^$ \"
UCH~U#'
#3U	#z/U DFS>"&sCx.=@	#s(^4Dhsm);$< c3h '4 't 'dDj8I '"3 "4 "r   