
    +gd]                     h    d dl mZ ddlmZ  ee          Z G d d          Z G d d          ZdS )	    )import_module   )
get_loggerc                       e Zd ZdZddZdS )_PatchedModuleObjzMSet all the modules components as attributes of the _PatchedModuleObj object.Nc           	          |pg }|B|j         D ]:}||v s|                    d          st          | |t          ||                     ;t	          |t
                    r|j        n|| _        d S )N__)__dict__
startswithsetattrgetattr
isinstancer   _original_module)selfmoduleattrskeys       7lib/python3.11/site-packages/datasets/utils/patching.py__init__z_PatchedModuleObj.__init__   s     = =%<<s~~d';';<D#wvs';';<<<;EfN_;`;` l 7 7fl    N)__name__
__module____qualname____doc__r    r   r   r   r   	   s4        WWm m m m m mr   r   c                   <    e Zd ZdZg Zd	defdZd Zd Zd Z	d Z
dS )
patch_submoduleaF  
    Patch a submodule attribute of an object, by keeping all other submodules intact at all levels.

    Example::

        >>> import importlib
        >>> from datasets.load import dataset_module_factory
        >>> from datasets.streaming import patch_submodule, xjoin
        >>>
        >>> dataset_module = dataset_module_factory("snli")
        >>> snli_module = importlib.import_module(dataset_module.module_path)
        >>> patcher = patch_submodule(snli_module, "os.path.join", xjoin)
        >>> patcher.start()
        >>> assert snli_module.os.path.join is xjoin
    Ntargetc                     || _         || _        || _        |                    d          d         | _        i | _        |pg | _        d S )N.r   )objr   newsplitr   originalr   )r   r"   r   r#   r   s        r   r   zpatch_submodule.__init__(   sE    <<$$Q'[b


r   c                 J   | j                             d          ^ }}t          t          |                    D ]H}	 t	          d                    |d |dz                                }n# t          $ r Y >w xY w| j                                        D ]}t          | j        |          }||u st          |t                    r|j        |u r|| j        |<   t          | j        |t          || j                             t          | j        |          }||dz   d          D ]F}t          ||t          t          ||d           | j                             t          ||          }Gt          ||| j                   J|r	 t          t	          d                    |                    |          }	n# t"          t          f$ r Y d S w xY w| j                                        D ]Q}t          | j        |          |	u r8t          | j        |          | j        |<   t          | j        || j                   Rd S |t%                      d         v r?t%                      d         |         | j        |<   t          | j        || j                   d S t'          d| d          )Nr!   r   )r   __builtins__zTried to patch attribute z instead of a submodule.)r   r$   rangelenr   joinModuleNotFoundErrorr"   __dir__r   r   r   r   r%   r   r   r#   AttributeErrorglobalsRuntimeError)
r   
submodulestarget_attri	submoduleattrobj_attrpatchedr   
attr_values
             r   	__enter__zpatch_submodule.__enter__0   s   #';#4#4S#9#9 [ s:'' 	< 	<A)#((:gAg3F*G*GHH		&    ((** < <"48T22 y((*;<< )AIAZ^gAgAg*2DM$'DHd,=hdj,Y,Y,YZZZ%dh55G)!a%''2 8 8.?QTVZ@[@[cgcm.n.n.nooo")'3"7"7G[$(;;;!<.  	b$]388J3G3G%H%H+VV

"$78    ((** 6 6 48T**j88*1$(D*A*ADM$'DHdDH5556 6 GIIn555)0>)B;)ODM+&DHk4844444`;```aaas#   -A,,
A98A90F8 8GGc                     t          | j                  D ]0}t          | j        || j                            |                     1d S r   )listr%   r   r"   pop)r   exc_infor4   s      r   __exit__zpatch_submodule.__exit__f   sL    '' 	= 	=DDHdDM$5$5d$;$;<<<<	= 	=r   c                 b    |                                   | j                            |            dS )zActivate a patch.N)r8   _active_patchesappendr   s    r   startzpatch_submodule.startj   s/    ##D)))))r   c                     	 | j                             |            n# t          $ r Y dS w xY w|                                 S )zStop an active patch.N)r?   remove
ValueErrorr=   rA   s    r   stopzpatch_submodule.stopo   sS    	 ''---- 	 	 	44	 }}s    
++r   )r   r   r   r   r?   strr   r8   r=   rB   rF   r   r   r   r   r      s           O! !C ! ! ! !4b 4b 4bl= = =* * *
    r   r   N)	importlibr   loggingr   r   loggerr   r   r   r   r   <module>rK      s    # # # # # #       
H			m 	m 	m 	m 	m 	m 	m 	mb b b b b b b b b br   