
    2Vh#                     n    d dl Z d dlZ	 d dlZd dlmZ  ed       G d d             Zy# e$ r dZY %w xY w)    N)keras_exportzkeras.utils.Configc                       e Zd ZdZdZd Zed        Zd Zd Z	d Z
d Zd	 Zd
 Zd Zd Zd Zd ZddZd Zd Zd Zd Zd Zd Zd Zd Zd Zy)Configa  A Config is a dict-like container for named values.

    It offers a few advantages over a plain dict:

    - Setting and retrieving values via attribute setting / getting.
    - Ability to freeze the config to ensure no accidental config modifications
        occur past a certain point in your program.
    - Easy serialization of the whole config as JSON.

    Examples:

    ```python
    # Create a config via constructor arguments
    config = Config("learning_rate"=0.1, "momentum"=0.9)

    # Then keep adding to it via attribute-style setting
    config.use_ema = True
    config.ema_overwrite_frequency = 100

    # You can also add attributes via dict-like access
    config["seed"] = 123

    # You can retrieve entries both via attribute-style
    # access and dict-style access
    assert config.seed == 100
    assert config["learning_rate"] == 0.1
    ```

    A config behaves like a dict:

    ```python
    config = Config("learning_rate"=0.1, "momentum"=0.9)
    for k, v in config.items():
        print(f"{k}={v}")

    print(f"keys: {list(config.keys())}")
    print(f"values: {list(config.values())}")
    ```

    In fact, it can be turned into one:

    ```python
    config = Config("learning_rate"=0.1, "momentum"=0.9)
    dict_config = config.as_dict()
    ```

    You can easily serialize a config to JSON:

    ```python
    config = Config("learning_rate"=0.1, "momentum"=0.9)

    json_str = config.to_json()
    ```

    You can also freeze a config to prevent further changes:

    ```python
    config = Config()
    config.optimizer = "adam"
    config.seed = 123

    # Freeze the config to prevent changes.
    config.freeze()
    assert config.frozen

    config.foo = "bar"  # This will raise an error.
    ```
    Nc                 R    || _         d| _        t        t        |             | _        y NF)_config_frozensetdir	__attrs__)selfkwargss     F/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/utils/config.py__init__zConfig.__init__U   s    SY    c                     | j                   S )z%Returns True if the config is frozen.r	   r   s    r   frozenzConfig.frozenZ   s     ||r   c                     d| _         y)zAMarks the config as frozen, preventing any ulterior modification.TNr   r   s    r   freezezConfig.freeze_   s	    r   c                     d| _         y r   r   r   s    r   unfreezezConfig.unfreezec   s	    r   c                 2    | j                   rt        d      y )Nz8Cannot mutate attribute(s) because the config is frozen.)r	   
ValueErrorr   s    r   _raise_if_frozenzConfig._raise_if_frozenf   s    <<J  r   c                 @    t        j                   | j                        S N)copyr   r   s    r   as_dictzConfig.as_dictl   s    yy&&r   c                 @    t        j                  | j                        S r   )jsondumpsr   r   s    r   to_jsonzConfig.to_jsono   s    zz$,,''r   c                 6    | j                   j                         S r   )r   keysr   s    r   r&   zConfig.keysr   s    ||  ""r   c                 6    | j                   j                         S r   )r   valuesr   s    r   r(   zConfig.valuesu   s    ||""$$r   c                 6    | j                   j                         S r   )r   itemsr   s    r   r*   zConfig.itemsx   s    ||!!##r   c                 T    | j                           | j                  j                  | S r   )r   r   pop)r   argss     r   r,   z
Config.pop{   s%    t||&&r   c                 Z    | j                           | j                  j                  |i |S r   )r   r   update)r   r-   r   s      r   r/   zConfig.update   s*    "t||""D3F33r   c                 :    | j                   j                  ||      S r   )r   get)r   keynamevalues      r   r1   z
Config.get   s    ||//r   c                     t         j                  | d      }|||v rt         j                  | ||      S | j                          || j                  |<   y )Nr   )object__getattribute____setattr__r   r   )r   namer3   attrss       r   r7   zConfig.__setattr__   sN    ''k:=DEM%%dD%88"Tr   c                 L   t         j                  | d      }|||v rt         j                  | |      S || j                  v r| j                  |   S d| d}t        ?t        j                  || j                  j                         dd      }|r|d|d    d	z  }t        |      )
Nr   zUnknown attribute: 'z'.   gffffff?)ncutoffz Did you mean 'r   z'?)r5   r6   r   difflibget_close_matchesr&   AttributeError)r   r8   r9   msgclosest_matchess        r   __getattr__zConfig.__getattr__   s    ''k:=DEM**4664<<<<%%$TF"-%77dll'')QsO );(<B??S!!r   c                 B    | j                          || j                  |<   y r   r   r   )r   keyitems      r   __setitem__zConfig.__setitem__   s     Sr   c                      | j                   |   S r   r   r   rF   s     r   __getitem__zConfig.__getitem__   s    ||C  r   c                 "    d| j                    dS )Nz<Config >rJ   r   s    r   __repr__zConfig.__repr__   s    $,,q))r   c              #   h   K   t        | j                  j                               }|D ]  }|  y wr   )sortedr   r&   )r   r&   ks      r   __iter__zConfig.__iter__   s1     dll'')* 	AG	s   02c                 ,    t        | j                        S r   )lenr   r   s    r   __len__zConfig.__len__   s    4<<  r   c                 >    | j                          | j                  |= y r   rE   rK   s     r   __delitem__zConfig.__delitem__   s    LLr   c                     || j                   v S r   rJ   )r   rG   s     r   __contains__zConfig.__contains__   s    t||##r   r   )__name__
__module____qualname____doc__r   r   propertyr   r   r   r   r    r$   r&   r(   r*   r,   r/   r1   r7   rC   rH   rL   rO   rS   rV   rX   rZ    r   r   r   r      s    CJ I(
  '(#%$'40#""!!*
!$r   r   )r   r"   r>   ImportErrorkeras.src.api_exportr   r   r`   r   r   <module>rc      sP      . "#i$ i$ $i$  Gs   * 44