
    z%i0                         d dl Z d dlZd dlZd dlZd dlmZmZmZ d dlZd dl	Z	d dl
Z	d dlmZ d dlmZ d dlZd dlZd dlZd dlZ ej$                         Zde_        de_        dej,                  v rde_        dej,                  vrde_         ej$                         adt.        _        dt.        _        dt.        _        dt.        _        dt.        _        d Z e        d	 Zd$d
Zd$dZ d$dZ!dZ"ejF                  dvrBe$jK                         Z&e&e$k(  re$jO                         Z&e	j0                  jQ                  e&      sdZ" ed      d   Z) e*e jV                         e*e)jV                        dZ+d Z,d%dZ-d Z.ej^                  d        Z0ej^                  d%ddd       Z1ej^                  d        Z2 G d d      Z3 G d de3      Z4d Z5d Z6ej^                  d        Z7ej^                  d         Z8d! Z9 G d" d#      Z:y)&    N)	machineryutilinvalidate_caches)import_helper)	os_helpererrno	importlib_testsinglephasec                  Z   t         j                  D ]  } t        j                  D ]  }t        j
                  |z   }t        j                  j                  | |      }t        j                  j                  |      sV| t        _        |t        _	        |t        _
        |t        _          y   y N)syspathr   EXTENSION_SUFFIXES
EXTENSIONSnameosjoinexistsextfilename	file_path)r   r   r   r   s       L/home/uftp/.pyenv/versions/3.12.0/lib/python3.12/test/test_importlib/util.py_extension_detailsr       s}     	// 	C!,HT84Iww~~i("&
!$
&.
#'0
$		    c                 x    	 d| v rdnd}t        j                  |       }t        j                  | |d      }||dS )N.)r	    )_frozen_importlib_frozen_importlib_external)freshblockedFrozenSource)r   import_fresh_module)module_namer    frozensources       r   import_importlibr)   0   sF    K![0NbE..{;F..{%1dfF//r   c                 h   |t         j                  }nt        |t              s||   }dj	                  || j
                        }| |f}t        j                  ||      }| j                  |_        | j
                  |_	        ||_
        |j                         D ]  \  }}||   }	t        |||	        |S )Nz{}_{})unittestTestCase
isinstancetypeformat__name__types	new_class
__module___NAME_KINDitemssetattr)
clskindbasekwargsr   basesspecializedattrvaluesvalues
             r   specialize_classrA   9   s     |  d#Dz>>$-D$KE//$.K ^^KKK *ftT5)* r   c                 B    t        | d|fi |}t        | d|fi |}||fS )Nr#   r$   )rA   )r8   r:   r;   r'   r(   s        r   split_frozenrC   L   s2    c8T<V<Fc8T<V<F6>r   c                     t        | |fi |S r   )rC   )
test_classr:   r;   s      r   	test_bothrF   R   s    
D3F33r   T)win32cygwinFr$   r"   c                 F    	  t        j                  t         d      |       S )Nz&requires a case-insensitive filesystem)r+   skipIfCASE_INSENSITIVE_FS)tests    r   case_insensitive_testsrM   e   s1    F8??22DFFJL Lr   c                     t         j                  j                  ||dz         }t        |dd      5 }|j	                  |       d d d        dj                  | |      |fS # 1 sw Y   xY w)N.pywutf-8encodingz{}.{})r   r   r   openwriter/   )parentr   pkg_dircontentr   subfiles         r   	submodulerZ   l   s_    77<<.D	dC'	* gg>>&$'-- s   A  A)c                     	 t        | d      5 }|j                  d       t        j                  |      cd d d        S # 1 sw Y   y xY w)Nrb   )rT   seekmarshalload)pyc_pathpyc_fs     r   get_code_from_pycrc   s   sA     
h	 #

2||E"# # #s	   &>Ac               '   N  K   	 | D ]2  }|dv rt        dj                  |            	 t        j                  |= 4 	 d  | D ]  }	 t        j                  |=  y # t        $ r Y _w xY w# t        $ r Y 2w xY w# | D ]#  }	 t        j                  |= # t        $ r Y !w xY w w xY ww)N)r   r_   zcannot uncache {})
ValueErrorr/   r   modulesKeyError)namesr   s     r   uncacheri   }   s       %%077=>>	D!	 	DKK%	  		    	DKK% 	s   %B%AB%A8  B%A)B%	A&#B%%A&&B%)	A52B%4A55B%8B"?BB"	B	B"B	B""B%)pkgc          	   #     K   t         j                  D cg c]  }|j                  d      d   | k(  s| }}t        j                  d       5 }t        | g| 5  t        j                  |      5  t                t        j                  j                  ||       }|r6t        j                  j                  |d      }t        j                  |        n	|dz   }|d}|(t        |dd      5 }|j                  |       d d d        | d d d        d d d        d d d        y c c}w # 1 sw Y   +xY w# 1 sw Y   +xY w# 1 sw Y   /xY w# 1 sw Y   y xY ww)	Nr   r   z__init__.pyrO    rP   rQ   rR   )r   rf   	partitionr   temp_cwdri   r   DirsOnSysPathr   r   r   r   mkdirrT   rU   )	r   rX   rj   n	conflictscwdlocationmodpathmodfiles	            r   temp_modulerw      s0    KKGq1;;s+;A+>$+FGIG			D	! ST&I& 	,,S1 !#77<<T2 ggll8]CGHHTN&.G"$&gsW= /g./!	  H"/ / 	 	 su   ED#D#EEE 0A<D4,D(	>D4
E EE(D1-D44D=9E  E		EEEc               +     K   	 i }	 dg fdg fdg fdi ffD ]8  \  }}t        t        |      ||<   || v r	| |   }| |= n|}t        t        ||       : t        |       rt	        dj                  |             d  |j                         D ]  \  }}t        t        ||        y # |j                         D ]  \  }}t        t        ||        w xY ww)N	meta_pathr   
path_hookspath_importer_cachezunrecognized arguments: {})getattrr   r7   lenre   r/   r6   )r;   	originalsr>   default	new_valuer@   s         r   import_stater      s      I&*B/&"+R04b9; 		*MD' &c40IdOv~"4L	4L#	Cy)		* v;9@@HII$??, 	&KD%Cu%	&9??, 	&KD%Cu%	&s   CA2B# 9*C#+CCc                   ,    e Zd Z	 i ddZd Zd Zd Zy)_ImporterMock)module_codec                   i | _         i | _        |D ]  }|j                  d      s|}n|d t        d        }d|vrd }n||k(  r|j	                  dd      d   }n|}t        j                  |      }| |_        d|_        ||_	        ||_
        ||k7  rdg|_        || j                   |<   ||v s||   | j                  |<    y )N	.__init__r      r   z<mock __file__>z<mock __path__>)rf   r   endswithr}   rsplitr1   
ModuleType
__loader____file____package__r>   __path__)selfr   rh   r   import_namepackagemodules          r   __init__z_ImporterMock.__init__   s     	ID==-""#5S%5$56$$++c1-a0%%%k2F $F/FO!(FFKd"#4"5(.DLL%k)0;K0H  -)	Ir   c                      | j                   |   S r   )rf   )r   r   s     r   __getitem__z_ImporterMock.__getitem__   s    ||D!!r   c                     t        | j                  j                          | _        | j                  j	                          | S r   )ri   rf   keys_uncache	__enter__)r   s    r   r   z_ImporterMock.__enter__   s0    !2!2!45!r   c                 >    | j                   j                  d d d        y r   )r   __exit__)r   exc_infos     r   r   z_ImporterMock.__exit__   s    tT40r   N)r0   r3   __qualname__r   r   r   r   r   r   r   r   r      s    :+- I2"
1r   r   c                   "    e Zd Z	 ddZd Zd Zy)	mock_specNc           
          	 | j                   |   }t        j                  ||j                  | t        |dd             }|S # t        $ r Y y w xY w)Nr   )loadersubmodule_search_locations)rf   rg   r   spec_from_file_locationr   r|   )r   fullnamer   rV   r   specs         r   	find_speczmock_spec.find_spec   sZ    	\\(+F ++&//$+26:t+LN   		s   A 	AAc                 p    |j                   | j                  vrt        | j                  |j                      S r   )r   rf   ImportError)r   r   s     r   create_modulezmock_spec.create_module  s+    99DLL(||DII&&r   c                 t    	  | j                   |j                  j                             y # t        $ r Y y w xY wr   )r   __spec__r   rg   )r   r   s     r   exec_modulezmock_spec.exec_module  s6    	2DV__1124 		s   (+ 	77)NN)r0   r3   r   r   r   r   r   r   r   r   r      s    +'
r   r   c                      	 t         j                  r t        j                  d             S t	        j
                          fd       }|S )Nzrelies on writing bytecodec                      t         j                  }dt         _        	  | i |}|t         _        |S # |t         _        w xY w)NF)r   dont_write_bytecode)argsr;   original	to_returnfxns       r   wrapperz&writes_bytecode_files.<locals>.wrapper  sD    **"'	/T,V,I&.C# '/C#s	   3 A )r   r   r+   skip	functoolswraps)r   r   s   ` r   writes_bytecode_filesr     sJ    1
:x}}9:3??__S  Nr   c                     	 	 t        j                  t         j                  j                  |              y # t        $ r(}|j
                  t
        j                  k7  r Y d }~y d }~ww xY wr   )r   rp   r   dirnameOSErrorr   EEXIST)bytecode_patherrors     r   ensure_bytecode_pathr      sM    
/0 ;;%,,& 's   26 	A'A""A'c              #      K   	 t         j                  }| t         _        	 d  |t         _        y # |t         _        w xY wwr   )r   pycache_prefix)prefix_orig_prefixs     r   temporary_pycache_prefixr   ,  s4     0%%LC*)\s   A 0 A =A c               '     K   	 d}g }i }d }d }	 t        j                         }||d<   t               }| D ]P  }|j                  d      s|}	n|d t	        d        }	|j                  |	       |	t        j                  v rt        j                  |	= |j                  d      }
|}|
d d D ]h  }t        j                  j                  ||      }t        j                  j                  |      rCt        j                  |       |j                  |       j t        j                  j                  ||
d   dz         }t        |dd	
      5 }|j!                  |j#                  |             d d d        |j                  |       |||<   S t%        | }|j'                          t)        |g      }|j'                          | ||j+                  d d d        ||j+                  d d d        t-        j.                  |       y # 1 sw Y   xY w# ||j+                  d d d        ||j+                  d d d        t-        j.                         w xY ww)Nzattr = {0!r}z.rootr   r   r   rO   rP   rQ   rR   )r   )tempfilemkdtempsetr   r}   addr   rf   splitr   r   r   r   rp   appendrT   rU   r/   ri   r   r   r   r   rmtree)rh   r(   created_pathsmappingstate_manageruncache_managertemp_dirimport_namesr   r   
name_partsr   	directoryfiles                 r   create_modulesr   7  s+     FMGMO"###%#u 	&D==,""#5S%5$56[)ckk)KK,CJ I'_ 4	GGLLI>	ww~~i0HHY'!((3	4
 Y
20FGIiw7 04

6==./0  +%GDM'	&( "<0!!#$8*5!$""4t4&$$T46"0 0 $""4t4&$$T46"s?   ICH *AH !H'AH A IH
	H AIIc                      	  fd}|S )Nc                     | vrt         S r   )r   )entryentriesimporters    r   hookzmock_path_hook.<locals>.hooks  s    r   r   )r   r   r   s   `` r   mock_path_hookr   q  s    & Kr   c                       e Zd Zd Zy)CASEOKTestBasec                \     d}t         fd|D              |k7  r j                  d       y y )N)s   PYTHONCASEOKPYTHONCASEOKc              3   v   K   | ]0  }|j                   j                  j                  j                  v  2 y wr   )r	   _bootstrap_external_osenviron).0xr   s     r   	<genexpr>z4CASEOKTestBase.caseok_env_changed.<locals>.<genexpr>~  s4      , DNN66::BBB ,s   69z/os.environ changes not reflected in _os.environ)anyskipTest)r   should_existpossibilitiess   `  r   caseok_env_changedz!CASEOKTestBase.caseok_env_changed|  s7    7 ,*, ,/;<MMKL<r   N)r0   r3   r   r   r   r   r   r   r   z  s    Mr   r   r   )rl   );builtins
contextlibr   r   r	   r   r   r   r_   r   os.pathtest.supportr   r   r+   r   r   r1   SimpleNamespaceBUILTINS	good_namebad_namebuiltin_module_namesr   r   r   r   r   r   r   r)   rA   rC   rF   rK   platformr   upperchanged_namelowerr   source_importlibstaticmethod
__import__rM   rZ   rc   contextmanagerri   rw   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s$       8 8  	  & "  
   !5  "  
c&&& Hc...#H"U""$



 
 $
  0&4   <<**>>#Lx~~'77>>,'##K0: $X%8%89$%5%@%@AC
L.#  0   . & &:&1 &1R 4"	 * * 6# 6#rM Mr   