
    ljM                    @   d Z ddlmZ g dZddlZddlmZmZm	Z	m
Z
 ddlmZ ddlmZ dd
ZddZ G d d          Z eddd          Z G d de	          Z G d dee                   Z edde          Z G d de	          Z G d dee                   ZdS ) z>Utilities that might be useful for configuration dictionaries.    )annotations)merge_dicts_recursivelyupdate_dict_recursivelyDictAsObjectN)AnyGenericProtocolcast)TypeVardictsdict[Any, Any]returnc                     i }t          j        d | D              }|D ]X\  }}||v rJt          ||         t                    r/t          |t                    rt	          ||         |          ||<   S|||<   Y|S )a  
    Creates a dict whose keyset is the union of all the
    input dictionaries.  The value for each key is based
    on the first dict in the list with that key.

    dicts later in the list have higher priority

    When values are dictionaries, it is applied recursively
    c              3  >   K   | ]}|                                 V  d S N)items).0ds     Q/home/agentuser/manim-venv/lib/python3.11/site-packages/manim/utils/config_ops.py	<genexpr>z*merge_dicts_recursively.<locals>.<genexpr>   s*      4417799444444    )itchain
isinstancedictr   )r   result	all_itemskeyvalues        r   r   r      s     F44e4445I    
U&==ZsT::=z%QU?V?V=1&+uEEF3KKF3KKMr   current_dictothersNonec                J    t          | g|R  }|                     |           d S r   )r   update)r    r!   updated_dicts      r   r   r   '   s3     +<A&AAAL%%%%%r   c                      e Zd ZddZdS )r   dictindict[str, Any]c                    || _         d S r   )__dict__)selfr'   s     r   __init__zDictAsObject.__init__3   s    r   N)r'   r(   )__name__
__module____qualname__r,    r   r   r   r   2   s(             r   r   _Data_Tznpt.NDArray[Any])bounddefaultc                      e Zd ZU ded<   dS )_HasDatazdict[str, npt.NDArray[Any]]dataNr-   r.   r/   __annotations__r0   r   r   r5   r5   :   s         %%%%%%r   r5   c                  *    e Zd ZdZddZddZddZdS )_DatazDescriptor that allows _Data variables to be grouped and accessed from self.data["attr"] via self.attr.
    self.data attributes must be arrays.
    objr5   namestrr   r"   c                    || _         d S r   r<   r+   r;   r<   s      r   __set_name__z_Data.__set_name__C       			r   ownerr   r1   c                P    t          t          |j        | j                           }|S r   )r
   r1   r6   r<   )r+   r;   rC   r   s       r   __get__z_Data.__get__F   s    Wchty122r   arrayc                $    ||j         | j        <   d S r   )r6   r<   )r+   r;   rF   s      r   __set__z_Data.__set__J   s    #r   N)r;   r5   r<   r=   r   r"   )r;   r5   rC   r   r   r1   )r;   r5   rF   r1   r   r"   r-   r.   r/   __doc__rA   rE   rH   r0   r   r   r:   r:   >   sZ               $ $ $ $ $ $r   r:   _Uniforms_Tzfloat | tuple[float, ...]c                      e Zd ZU ded<   dS )_HasUniformsz$dict[str, float | tuple[float, ...]]uniformsNr7   r0   r   r   rM   rM   Q   s         222222r   rM   c                  *    e Zd ZdZddZddZddZdS )	_UniformszDescriptor that allows _Uniforms variables to be grouped from self.uniforms["attr"] via self.attr.
    self.uniforms attributes must be floats or tuples of floats.
    r;   rM   r<   r=   r   r"   c                    || _         d S r   r?   r@   s      r   rA   z_Uniforms.__set_name__Z   rB   r   rC   r   rK   c                P    t          t          |j        | j                           }|S r   )r
   rK   rN   r<   )r+   r;   rC   vals       r   rE   z_Uniforms.__get__]   s    ;TY 788
r   numc                $    ||j         | j        <   d S r   )rN   r<   )r+   r;   rT   s      r   rH   z_Uniforms.__set__a   s    "%TYr   N)r;   rM   r<   r=   r   r"   )r;   rM   rC   r   r   rK   )r;   rM   rT   rK   r   r"   rI   r0   r   r   rP   rP   U   sZ               & & & & & &r   rP   )r   r   r   r   )r    r   r!   r   r   r"   )rJ   
__future__r   __all__	itertoolsr   typingr   r   r	   r
   numpy.typingnpttyping_extensionsr   r   r   r   r1   r5   r:   floatrK   rM   rP   r0   r   r   <module>r^      s   D D " " " " " "       / / / / / / / / / / / /       % % % % % %   (& & & &       
 ')#5?Q
R
R
R& & & & &x & & &$ $ $ $ $GG $ $ $  gm+FPUVVV3 3 3 3 38 3 3 3& & & & &$ & & & & &r   