Ë
    ÿÍ:j2  ã                   óŠ  — d dl Z d dlZd dlmZ d dlmZmZ d dlmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZ deeeeef   ef      d	eeef   fd
„Zdeeef   d	eeef   fd„Zddeeef   deded	eeef   fd„Zdeeef   d	eeef   fd„Zdeeef   d	eeef   fd„Zded	efd„Zdeeeeef   f   deded	eeeeef   f   fd„Zy)é    N)Ú	Namespace)ÚMappingÚMutableMapping)ÚasdictÚis_dataclass)ÚAnyÚOptionalÚUnion)ÚTensor)Ú_NUMPY_AVAILABLEÚparamsÚreturnc                 óD   — t        | t        «      rt        | «      } | €i } | S )z²Ensure parameters are a dict or convert to dict if necessary.

    Args:
        params: Target to be converted to a dictionary

    Returns:
        params as a dictionary

    )Ú
isinstancer   Úvars)r   s    úv/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/lightning_fabric/utilities/logger.pyÚ_convert_paramsr      s&   € ô �&œ)Ô$Ü�f“ˆà€~Øˆà€Mó    c                 ó‚   — dt         dt         fd„}| j                  «       D ��ci c]  \  }}| ||«      “Œ c}}S c c}}w )zìSanitize callable params dict, e.g. ``{'a': <function_**** at 0x****>} -> {'a': 'function_****'}``.

    Args:
        params: Dictionary containing the hyperparameters

    Returns:
        dictionary with all callables sanitized

    Úvalr   c                 óØ   — t        j                  | «      r| j                  S t        | «      r!	  | «       }t        |«      r| j                  S |S | S # t        $ r t        | dd «      cY S w xY w)NÚ__name__)ÚinspectÚisclassr   ÚcallableÚ	ExceptionÚgetattr)r   Ú_vals     r   Ú_sanitize_callablez5_sanitize_callable_params.<locals>._sanitize_callable:   sh   € Ü�?‰?˜3Ôà—<‘<ÐÜ�CŒ=ð6Ù“u�Ü˜D”>ØŸ<™<Ð'Ø�ð ˆ
øô ò 6Ü˜s J°Ó5Ò5ð6ús   ®A ÁA ÁA)Á(A))r   Úitems)r   r   Úkeyr   s       r   Ú_sanitize_callable_paramsr"   /   sA   € ð¤ð ¬ó ð  :@¿¹»×H©X¨S°#ˆCÑ# CÓ(Ñ(ÓHÐHùÓHs   ¤;Ú	delimiterÚ
parent_keyc           	      óä  — i }| j                  «       D ]Ú  \  }}|r||z   t        |«      z   n
t        |«      }t        |«      rt        |t        «      st        |«      }nt        |t        «      rt        |«      }t        |t        «      ri |¥t        |||¬«      ¥}Œ‰t        |t        «      r=t        d„ |D «       «      r+t        |«      D ]  \  }}i |¥t        ||› d|› �|¬«      ¥}Œ ŒÖ|||<   ŒÜ |S )a�  Flatten hierarchical dict, e.g. ``{'a': {'b': 'c'}} -> {'a/b': 'c'}``.

    Args:
        params: Dictionary containing the hyperparameters
        delimiter: Delimiter to express the hierarchy. Defaults to ``'/'``.

    Returns:
        Flattened dict.

    Examples:
        >>> _flatten_dict({'a': {'b': 'c'}})
        {'a/b': 'c'}
        >>> _flatten_dict({'a': {'b': 123}})
        {'a/b': 123}
        >>> _flatten_dict({5: {'a': 123}})
        {'5/a': 123}
        >>> _flatten_dict({"dl": [{"a": 1, "c": 3}, {"b": 2, "d": 5}], "l": [1, 2, 3, 4]})
        {'dl/0/a': 1, 'dl/0/c': 3, 'dl/1/b': 2, 'dl/1/d': 5, 'l': [1, 2, 3, 4]}

    )r$   r#   c              3   ó<   K  — | ]  }t        |t        «      –— Œ y ­w)N)r   r   )Ú.0Úitems     r   ú	<genexpr>z _flatten_dict.<locals>.<genexpr>m   s   è ø€ Ò(XÈd¬°D¼.×)IÑ(Xùs   ‚ú/)r    Ústrr   r   Útyper   r   r   r   Ú_flatten_dictÚlistÚallÚ	enumerate)	r   r#   r$   ÚresultÚkÚvÚnew_keyÚir(   s	            r   r-   r-   M   sö   € ð*  €FØ—‘“ò  ‰ˆˆ1Ù5?�*˜yÑ(¬3¨q«6Ò1ÄSÈÃVˆÜ˜Œ?¤:¨a´Ô#6Ü�q“	‰AÜ˜œ9Ô%Ü�Q“ˆAä�aœÔ(Ø\˜Ð\¤-°¸gÐQZÔ"[Ð\‰Fä˜œ4Ô ¤SÑ(XÐVWÔ(XÔ%XÜ$ Q›<ò m‘��4Øl˜FÐl¤m°DÈÀyÐPQÐRSÐQTÐEUÐajÔ&kÐl‘ñmð  ˆF�7ŠOð ð €Mr   c                 ó*  — | D ]�  }t         rJddl}t        | |   |j                  |j                  |j
                  f«      r| |   j                  «       | |<   t        | |   «      t        t        t        t        t        fvsŒ}t        | |   «      | |<   Œ� | S )a­  Returns params with non-primitvies converted to strings for logging.

    >>> import torch
    >>> params = {"float": 0.3,
    ...           "int": 1,
    ...           "string": "abc",
    ...           "bool": True,
    ...           "list": [1, 2, 3],
    ...           "namespace": Namespace(foo=3),
    ...           "layer": torch.nn.BatchNorm1d}
    >>> import pprint
    >>> pprint.pprint(_sanitize_params(params))  # doctest: +NORMALIZE_WHITESPACE
    {'bool': True,
        'float': 0.3,
        'int': 1,
        'layer': "<class 'torch.nn.modules.batchnorm.BatchNorm1d'>",
        'list': '[1, 2, 3]',
        'namespace': 'Namespace(foo=3)',
        'string': 'abc'}

    r   N)r   Únumpyr   Úbool_ÚintegerÚfloatingr(   r,   ÚboolÚintÚfloatr+   r   )r   r2   Únps      r   Ú_sanitize_paramsr?   u   s�   € ð, ò 'ˆÝÛä˜& ™) b§h¡h°·
±
¸B¿K¹KÐ%HÔIØ" 1™IŸN™NÓ,��q‘	Ü��q‘	‹?¤4¬¬e´S¼&Ð"AÒAÜ˜F 1™I›ˆF�1ŠIð'ð €Mr   c                 ó‚   — | j                  «       D ��ci c]  \  }}|t        |«      st        |«      n|“Œ  c}}S c c}}w )z5Convert non-serializable objects in params to string.)r    Ú_is_json_serializabler+   )r   r2   r3   s      r   Ú_convert_json_serializablerB   –   s3   € àIOÏÉË×XÁÀÀAˆAÔ2°1Ô5Œs�1Œv¸1Ñ<ÓXÐXùÓXs   ”#;Úvaluec           	      ó´   — | �*t        | t        t        t        t        t
        t        f«      ry	 t        j                  | «       y# t        t        f$ r Y yw xY w)z/Test whether a variable can be encoded as json.TF)r   r;   r<   r=   r+   r.   ÚdictÚjsonÚdumpsÚ	TypeErrorÚOverflowError)rC   s    r   rA   rA   ›   sK   € à€}œ
 5¬4´´e¼SÄ$ÌÐ*MÔNØðÜ�
‰
�5ÔØøÜ”}Ð%ò áðús   ¯A ÁAÁAÚmetricsÚprefixÚ	separatorc                 ój   — |s| S | j                  «       D ��ci c]  \  }}|› |› |› �|“Œ c}}S c c}}w )al  Insert prefix before each key in a dict, separated by the separator.

    Args:
        metrics: Dictionary with metric names as keys and measured quantities as values
        prefix: Prefix to insert before each key
        separator: Separates prefix and original key name

    Returns:
        Dictionary with prefix and separator inserted before each key

    )r    )rJ   rK   rL   r2   r3   s        r   Ú_add_prefixrN   §   s<   € ñ ØˆØ5<·]±]³_×E©T¨Q°ˆvˆh�y�k ! Ð% qÑ(ÓEÐEùÓEs   ˜/)r*   Ú )r   rF   Úargparser   Úcollections.abcr   r   Údataclassesr   r   Útypingr   r	   r
   Útorchr   Ú"lightning_fabric.utilities.importsr   rE   r+   r   r"   r-   r?   rB   r;   rA   r=   rN   © r   r   ú<module>rW      sc  ðó Û Ý ß 3ß ,ß 'Ñ 'å å ?ð˜H U¨4°°S°©>¸9Ð+DÑ%EÑFð È4ÐPSÐUXÐPXÉ>ó ð(I d¨3°¨8¡nð I¸¸cÀ3¸h¹ó Iñ<%˜.¨¨c¨Ñ2ð %¸sð %ÐVYð %ÐcgÐhkÐmpÐhpÑcqó %ðP˜T # s (™^ð °°S¸#°X±ó ðBY t¨C°¨H¡~ð Y¸$¸sÀC¸x¹.ó Yð
	 ð 	¨ó 	ðFØ�S˜% ¨ Ñ.Ð.Ñ/ðFØ9<ðFØILðFàˆS�%˜ ˜Ñ&Ð&Ñ'ôFr   