
    h[                     T    S SK Jr  SSKJr  \" \5      r " S S5      r " S S5      rg)	    )import_module   )
get_loggerc                   "    \ rS rSrSrSS jrSrg)_PatchedModuleObj	   zMSet all the modules components as attributes of the _PatchedModuleObj object.Nc           	         U=(       d    / nUbE  UR                    H5  nX2;   d  UR                  S5      (       a  M   [        X[        X5      5        M7     [	        U[
        5      (       a  UR                  U l        g UU l        g )N__)__dict__
startswithsetattrgetattr
isinstancer   _original_module)selfmoduleattrskeys       Q/home/james-whalen/.local/lib/python3.13/site-packages/datasets/utils/patching.py__init___PatchedModuleObj.__init__   sg    <s~~d';';Dwv';< ' <FfN_;`;` 7 7fl    )r   N)__name__
__module____qualname____firstlineno____doc__r   __static_attributes__ r   r   r   r   	   s    Wmr   r   c                   F    \ rS rSrSr/ rSS\4S jjrS rS r	S r
S	 rS
rg)patch_submodule   a  
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                     Xl         X l        X0l        UR                  S5      S   U l        0 U l        U=(       d    / U l        g )N.r   )objr$   newsplitr   originalr   )r   r'   r$   r(   r   s        r   r   patch_submodule.__init__(   s8    <<$Q'[b
r   c                 (   U R                   R                  S5      Gt p[        [        U5      5       GH+  n [	        SR                  US US-    5      5      nU R                  R                  5        H  n[        U R                  U5      nXdL d(  [        U[        5      (       d  M4  UR                  UL d  ME  X`R                  U'   [        U R                  U[        X`R                  S95        [        U R                  U5      nXS-   S   H6  n[        Xx[        [        XxS 5      U R                  S95        [        Xx5      nM8     [        XrU R                   5        M     GM.     U(       a   [        [	        SR                  U5      5      U5      n	U R                  R                  5        Ha  n[        U R                  U5      U	L d  M  [        U R                  U5      U R                  U'   [        U R                  XPR                   5        Mc     g U[%        5       S   ;   a>  [%        5       S   U   U R                  U'   [        U R                  X R                   5        g ['        SU S35      e! [         a     GMH  f = f! ["        [        4 a     g f = f)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__patch_submodule.__enter__0   s    #';;#4#4S#9  s:'A)#((:gA3F*GH	 ((*"488T2 (x):;;@Y@Y]f@f*2MM$'DHHd,=hjj,YZ%dhh5G)a%'2.?VZ@[cgcmcm.no")'"7  3 G$((;! + (: $]388J3G%H+V
 ((* 488T*j8*1$((D*ADMM$'DHHdHH5 + GIn55)0>)B;)ODMM+&DHHk884!:;-G_`aaU ' : #$78 s#    I,*$I> ,
I;:I;>JJc                     [        U R                  5       H2  n[        U R                  X R                  R	                  U5      5        M4     g r   )listr*   r   r'   pop)r   exc_infor:   s      r   __exit__patch_submodule.__exit__f   s2    'DDHHdMM$5$5d$;< (r   c                 Z    U R                  5         U R                  R                  U 5        g)zActivate a patch.N)r>   _active_patchesappendr   s    r   startpatch_submodule.startj   s     ##D)r   c                 z     U R                   R                  U 5        U R                  5       $ ! [         a     gf = f)zStop an active patch.N)rG   remove
ValueErrorrD   rI   s    r   stoppatch_submodule.stopo   s=    	  ''-
 }}	  		s   - 
::)r   r   r(   r'   r*   r$   r   )r   r   r   r   r   rG   strr   r>   rD   rJ   rO   r   r    r   r   r"   r"      s0      O!C !4bl=*
r   r"   N)	importlibr   loggingr   r   loggerr   r"   r    r   r   <module>rU      s/    #  
H		m 	mb br   