a
    d                     @   s
  d dl mZ d dlmZmZmZmZmZmZ d dl	Z
d dlmZ eeeeef ef  eeef dddZeeef eeef ddd	Zdeeef eeeeef dddZeeef eeef dddZeeeeef f eeeeeeef f dddZdS )    )	Namespace)AnyDictMappingMutableMappingOptionalUnionN)Tensor)paramsreturnc                 C   s"   t | trt| } | du ri } | S )zEnsure parameters are a dict or convert to dict if necessary.

    Args:
        params: Target to be converted to a dictionary

    Returns:
        params as a dictionary
    N)
isinstancer   varsr
    r   j/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/lightning_fabric/utilities/logger.py_convert_params   s
    

r   c                    s&   t t ddd  fdd|  D S )zSanitize 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                 S   sH   t | rDz|  }t |r | jW S |W S  tyB   t| dd  Y S 0 | S )N__name__)callabler   	Exceptiongetattr)r   Z_valr   r   r   _sanitize_callable3   s    z5_sanitize_callable_params.<locals>._sanitize_callablec                    s   i | ]\}}| |qS r   r   ).0keyr   r   r   r   
<dictcomp>@       z-_sanitize_callable_params.<locals>.<dictcomp>)r   itemsr   r   r   r   _sanitize_callable_params)   s    
r   / )r
   	delimiter
parent_keyr   c                 C   sr   i }|   D ]`\}}|r(|| t| nt|}t|trBt|}t|trdi |t|||d}q|||< q|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}
    )r"   r!   )r   strr   r   r   r   _flatten_dict)r
   r!   r"   resultkvZnew_keyr   r   r   r$   C   s    


r$   c                 C   sh   |   D ]Z}t| | tjtjtjfr8| |  | |< qt| | tt	t
ttfvrt| | | |< q| 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'}
    )keysr   npZbool_integerZfloatingitemtypeboolintfloatr#   r	   )r
   r&   r   r   r   _sanitize_paramsa   s    r0   )metricsprefix	separatorr   c                    s     r fdd|   D } | S )ak  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
    c                    s"   i | ]\}}   | |qS r   r   )r   r&   r'   r2   r3   r   r   r      r   z_add_prefix.<locals>.<dictcomp>)r   )r1   r2   r3   r   r4   r   _add_prefix   s    r5   )r   r    )argparser   typingr   r   r   r   r   r   numpyr)   Ztorchr	   r#   r   r   r$   r0   r/   r5   r   r   r   r   <module>   s    , & 