
     Ti                    v    S r SSKJr  SSKJrJr  SSKr\\\/\4   r	S
S jr
SS jr\" S5      r " S S	5      rg)zMerging metadata_props    )annotations)CallableIterableNc                    U$ N )_news     _/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/onnxscript/utils/metadata_merger.py	overwriter      s    J    c                   ^  SU 4S jjnU$ )zCreates a StringMerger that joins two strings with the given separator.

Args:
    separator (str): The separator to use when joining the strings.

Returns:
    StringMerger: A function that joins two strings with the specified separator.
c                   > U  T U 3$ r   r   )firstsecond	separators     r   mergerjoin.<locals>.merger"   s    F8,,r   )r   strr   r   returnr   r   )r   r   s   ` r   joinr      s    - Mr   z, c                  R    \ rS rSrSr S     S	S jjrS
S jr      SS jrSrg)MetadataMerger+   ah  Merges metadata properties using specified merging logic.

Attributes:
    mergers: A mapping from metadata property keys to their corresponding merging functions.
    default: The default merging function to use when a specific key does not have a defined merger.
       If None, the first value is used. (Specify `overwrite` to always use the second value.)
Nc                    Xl         X l        g r   )mergersdefault)selfr   r   s      r   __init__MetadataMerger.__init__4   s     r   c                    UR                  5        HV  u  p4US:X  a  M  X1;   a@  X   =nS:w  a6  U R                  R                  X0R                  5      nUb  U" XT5      X'   MP  MR  XAU'   MX     g)zUpdates the first metadata property dictionary with values from the second.

Args:
    updated: The metadata dictionary to be updated.
    updates: The updates metadata dictionary.
 N)itemsr   getr   )r   updatedupdateskey	new_valueupdated_valuer   s          r   update_dictMetadataMerger.update_dict:   sk     &mmoNCBw|&Cm%J))#||<%#)-#CGL &  ) .r   c                   [        U[        R                  5      (       a1  UR                  nU H  nU R	                  X4R                  5        M      g[        U5      S:X  aE  [        [        U5      5      nUR                  nU H  nU R	                  X4R                  5        M      g0 nU H  nU R	                  XdR                  5        M      U H  nU R	                  UR                  U5        M!     g)zMerges metadata from multiple nodes and assigns it to one or more target nodes.

Args:
    from_nodes: The source nodes from which to merge metadata.
    to: The target node(s) to which the merged metadata will be assigned.
   N)
isinstanceirNodemetadata_propsr*   lennextiter)r   
from_nodestor%   nodetarget_nodemerged_metadatas          r   copy_merged_metadata#MetadataMerger.copy_merged_metadataK   s     b"''""''G"  *=*=> #W\tBx.K!00G"  *=*=> # /1O"  2E2EF #!  !;!;_M  "r   )r   r   r   )r   zdict[str, StringMerger]r   zStringMerger | Noner   None)r%   dict[str, str]r&   r=   r   r<   )r5   zIterable[ir.Node]r6   zir.Node | Iterable[ir.Node]r   r<   )	__name__
__module____qualname____firstlineno____doc__r   r*   r:   __static_attributes__r   r   r   r   r   +   sQ     PT.9L	)"N+N1LN	Nr   r   )r	   r   r
   r   r   r   )r   r   r   StringMerger)rB   
__future__r   typingr   r   onnx_irr/   r   rD   r   r   comma_separator_mergerr   r   r   r   <module>rI      sI     " %  c
C(  d 8N 8Nr   