
    .Ph-              	       h   U d dl Z d dl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	m
Z
 d dlmZmZmZmZmZmZmZmZmZ d dlmZmZmZmZ d dlmZ d dlmZmZmZm Z m!Z! d d	l"m#Z#  ej$        e%          Z&d
Z'e(Z)ee*d<    edd          5 Z+e+Z,ddd           n# 1 swxY w Y    G d de          Z- G d de-          Z. G d de          Z/de/fdZ0	 d-deed         e)f         de/fdZ1 G d de          Z2 G d de          Z3dede(de-fd Z4	 	 d.d"ej5        d#e6d$eed         e)f         de/fd%Z7e%d&k    ry ej8        ej9        '            ej5        e:          j;        j;        d(z  d)z  d*z  Z< e7e<          Z= e>e=            e>e=j?        d+z  d,z  @                                           dS dS )/    N)defaultdict)path)TracebackType)	DefaultDictDictIterableLiteralOptionalSetTupleTypeUnion)	BaseModel
ConfigDictFieldfield_validator)	TypeAlias)HashableVirtualPackage$HashableVirtualPackageRepresentationPackageNameStrPlatformSubdirStrSubdirMetadata)Channell   >VirtualPackageVersion
conda_lockzdefault-virtual-packages.yamlc                   v    e Zd ZU dZ ed          Zeed<   eed<   dZ	e
ed<   dd
Zdedee
ef         fdZdS )VirtualPackagea  A minimal representation of the required metadata for a virtual package.

    This is used by our specification. It's then converted to a FullVirtualPackage
    for computing the content hash. Then it's converted to a dict to be used in
    repodata.json.
    T)frozennameversion build_stringreturnFullVirtualPackagec                 D    t          | j        | j        | j                  S )Nr   r    r"   )r$   r   r    r"   selfs    Z/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/conda_lock/virtual_package.pyto_full_virtual_packagez&VirtualPackage.to_full_virtual_package=   s)    !L*
 
 
 	
    subdirc                    |                                  }|j        |j        |j        |j        |j        t          |j                  |j        |j	        |j
        |d
}| j         d| j         d|j
         d}||fS )N)
r   r    r"   build_numbernoarchdepends	timestamppackage_typebuildr,   -z.tar.bz2)r*   r   r    r"   r.   r/   listr0   r1   r2   r3   )r(   r,   poutfnames        r)   to_repodata_entryz VirtualPackage.to_repodata_entryD   s     ((**FyNNhAINW'
 '
 9??t|??ag???czr+   N)r#   r$   )__name__
__module____qualname____doc__r   model_configr   __annotations__r   r"   strr*   r   r   r   r9    r+   r)   r   r   /   s           :T***L
""""L#
 
 
 
*	s**	+     r+   r   c                       e Zd ZU dZdZeed<   dZeed<    e	e
          Zeedf         ed<   eZeed	<   d
Zee         ed<   edefd            ZdS )r$   z4Everything necessary for repodata.json except subdirr   r.   r!   r/   default_factory.r0   r1   virtual_systemr2   r#   c                 F    | j         r| j         S t          | j                  S N)r"   r@   r.   r'   s    r)   r3   zFullVirtualPackage.builda   s'     	*$$t()))r+   N)r:   r;   r<   r=   r.   intr?   r/   r@   r   tupler0   r   DEFAULT_TIMEr1   r2   r
   propertyr3   rA   r+   r)   r$   r$   X   s         >>L#FC$uU;;;GU38_;;;!Is!!!"2L(3-222*s * * * X* * *r+   r$   c                      e Zd ZU ej        ed<    ed           Zee	e
e         f         ed<   h dZe
e         ed<   i Zeed<   dZee         ed	<   i Zeeee         f         ed
<   edefd            Zedefd            Zedefd            Z	 ddedee         ddfdZdedefdZddZddZ dee!e"                  dee"         dee#         ddfdZ$dS )FakeRepoData	base_pathc                  *    t          t                    S rG   )r   setrA   r+   r)   <lambda>zFakeRepoData.<lambda>l   s    C 0 0 r+   rC   packages_by_subdir>   win-64	osx-arm64linux-aarch64linux-ppc64ler/   osx-64linux-64all_subdirsall_repodataNhashold_env_varsr#   c                     t          | j        t          j                  r&t	          | j                                                  S d| j                                                                         S )Nfile://)
isinstancerN   pathlibWindowsPathr@   absoluteas_posixr'   s    r)   channel_urlzFakeRepoData.channel_url{   s^    dng&9:: 	Dt~..00111CT^4466??AACCCr+   c                 .    t          | j        d          S )NrA   )urlused_env_vars)r   rd   r'   s    r)   channelzFakeRepoData.channel   s     4+2>>>>r+   c                     t          | j        t          j                  r.d| j                                                                         S d| j                                                                         S )Nzfile:///r^   )r_   rN   r`   ra   rb   rc   r'   s    r)   channel_url_posixzFakeRepoData.channel_url_posix   sm    dng&9:: 	D Edn5577@@BBDDDCT^4466??AACCCr+   rA   packagesubdirsc                     t          |          }|st          dg          }| j        |                                                             |           d S )Nr/   )	frozensetrR   r*   update)r(   rk   rl   s      r)   add_packagezFakeRepoData.add_package   sV     G$$ 	,
++G ? ? A ABII'RRRRRr+   r,   c                 D   i }d|i|d}| j                                         D ](\  }}||vr
|                    |          \  }}|||<   )| j        |z                      d           t          j        |d          }| j        |z  dz                      |           |S )Nr,   )infopackages)r,   T)exist_ok)	sort_keysrepodata.json)rR   itemsr9   rN   mkdirjsondumps
write_text)	r(   r,   rs   r7   pkgrl   r8   	info_dictcontents	            r)   _write_subdirzFakeRepoData._write_subdir   s    AC(0&'9xPP 399;; 	( 	(LCW$$"44F4CCE9'HUOO	&	 '''666*SD111	&	 ?	2>>wGGG
r+   c                    | j                                         D ]}| j                            |           t	          | j                  D ]!}|                     |          }|| j        |<   "t                              d| j	                   dd l
}|                    t          | j	        dz            d          D ]}t                              |           t                              d| j                   d S )NzWrote fake repodata to %sr   z**T)	recursivezrepo: %s)rR   valuesrY   ro   sortedr   rZ   loggerdebugrN   globiglobr@   rd   )r(   rl   r,   repodatar   filenames         r)   writezFakeRepoData.write   s    .5577 	- 	-G##G,,,,T-.. 	1 	1F))&11H(0Df%%0$.AAA

3t~'<#=#=
NN 	# 	#HLL""""Z!122222r+   c                 h   t                      }| j        D ]`}|j                            d          rD|j                            d                                          }|                    d|            a|D ]8}t          j        	                    |          | j
        |<   dt          j        |<   9dS )z]Ensure that if glibc etc is set by the overrides we force the conda solver override variables___CONDA_OVERRIDE_r!   N)rP   rR   r   
startswithlstripupperaddosenvirongetr\   )r(   env_vars_to_clearrk   
upper_namees        r)   	__enter__zFakeRepoData.__enter__   s    EE. 	F 	FG|&&t,, F$\0055;;==
!%%&D
&D&DEEE" 	 	A#%:>>!#4#4Da BJqMM	 	r+   exc_typeexc	tracebackc                     | j                                         D ]$\  }}|t          j        |= |t          j        |<   %dS )zClear out old varsN)r\   rw   r   r   )r(   r   r   r   kvs         r)   __exit__zFakeRepoData.__exit__   sM     %++-- 	" 	"DAqyJqMM !
1		" 	"r+   )rA   r#   N)%r:   r;   r<   r`   Pathr?   r   rR   r   r$   r   r   rY   r   rZ   r   r[   r
   r@   r\   r   rK   rd   r   rh   rj   r   r   rp   r   r   r   r   r   BaseExceptionr   r   rA   r+   r)   rM   rM   i   s.        |OTu00P P P$6N8K$KL   + + +K&'    :<L6;;;D(3--/L$sHSM)*///DS D D D XD ? ? ? ? X?
 D3 D D D XD OQS S%S089J0KS	S S S S$5 .    3 3 3 3
 
 
 
"4./" m$" M*	"
 
" " " " " "r+   rM   r#   c                     dd l dd l} t          j                            d          }|                     |          |sdfd}t          j        |           t          j	                  }t          |          }|S )Nr   RUNNER_TEMP)dirr#   c                  6                          d           d S )NT)ignore_errors)rmtree)shutiltmp_dirs   r)   cleanz"_init_fake_repodata.<locals>.clean   s    MM'M66666r+   )rN   r   )r   tempfiler   r   r   mkdtempatexitregisterr`   r   rM   )r   
runner_tmpr   tmp_pathr   r   r   s        @@r)   _init_fake_repodatar      s    MMMOOO ..J:..G 	7 	7 	7 	7 	7 	7 	7 	|G$$Hh///HOr+   defaultcuda_version)r   r!   c                 6    	 t          t          | d          }|S )z9An empty cuda_version indicates that CUDA is unavailable.T)override_cuda_versionadd_duplicate_osx_package)'virtual_package_repo_from_specification"DEFAULT_VIRTUAL_PACKAGES_YAML_PATH)r   r   s     r)    default_virtual_package_repodatar      s,     b6**"&  H
 Or+   c                       e Zd ZU dZeeef         ed<    ed          e	deeef         deeef         fd                        Z
dS )VirtualPackageSpecSubdirzFVirtual packages for a specific subdir in a virtual-packages.yaml filers   r   r#   c                 ^    |D ])}|                     d          st          | d          *|S )Nr   z is not a virtual package!)r   
ValueError)clsr   package_names      r)   validate_packagesz*VirtualPackageSpecSubdir.validate_packages   sN    
  	N 	NL**400 N L!L!L!LMMMNr+   N)r:   r;   r<   r=   r   r   r   r?   r   classmethodr   rA   r+   r)   r   r      s         PP>#889999_Z  ^%::;	n33	4   [ !   r+   r   c                   .    e Zd ZU dZeeef         ed<   dS )VirtualPackageSpecz:Virtual packages specified in a virtual-packages.yaml filerl   N)r:   r;   r<   r=   r   r   r   r?   rA   r+   r)   r   r     s0         DD#%==>>>>>>r+   r   virtual_package_nameversion_specc                     |                     dd          }t          |          dv sJ t          |          dk    r|d}}n|\  }}t          | ||          S )a  Parse a virtual package specification into a VirtualPackage object.

    Args:
        virtual_package_name: The name of the virtual package (should start with '__')
        version_spec: The version specification string, optionally including a build string
            separated by a space

    Returns:
        A VirtualPackage object with the parsed name, version, and build string

    Examples:
        >>> _parse_virtual_package_spec("__unix", "0")
        VirtualPackage(name='__unix', version='0', build_string='')
        >>> _parse_virtual_package_spec("__archspec", "1 x86_64")
        VirtualPackage(name='__archspec', version='1', build_string='x86_64')
        )r      r!   r&   )splitlenr   )r   r   version_partsparsed_versionr"   s        r)   _parse_virtual_package_specr     sz    & !&&sA..M}''''
=Q'3R'4$!!   r+   Fvirtual_package_spec_filer   r   c                    dd l }|                     d          5 }|                    |          }d d d            n# 1 swxY w Y   t          j        d|           t
                              |          }t                      }|j        	                                D ]a\  }}	|	j
        	                                D ]B\  }
}|
dk    r|dk    r	|dk    r|}t          |
|          }|                    ||g           Cb|r)t          dd	
          }|                    |dg           |                                 |S )Nr   rzVirtual package spec: %s__cudar   r!   )rl   __osxz10.15)r   r    rW   )yamlopen	safe_loadloggingr   r   model_validater   rl   rw   rs   r   rp   r   r   )r   r   r   r   fpdatavirtual_package_specr   r,   subdir_specr   r   virtual_packagerk   s                 r)   r   r   '  s    KKK	"	'	'	,	, "~~b!!" " " " " " " " " " " " " " "M,d333-<<TBB"$$H3;AACC D D2=2F2L2L2N2N 
	D 
	D. ,#x//4IY4V4V(B..49$l O   6( CCCC
	D ! : !gw???Wxj999NNOs   <A A __main__)leveltestsz	test-cudazvirtual-packages.yamlrX   rv   )r   )Fr   )Ar   ry   r   r   r`   collectionsr   importlib.resourcesr   typesr   typingr   r   r   r	   r
   r   r   r   r   pydanticr   r   r   r   typing_extensionsr   conda_lock.content_hash_typesr   r   r   r   r   conda_lock.models.channelr   	getLoggerr:   r   rJ   r@   r   r?   r6   r   r   r$   rM   r   r   r   r   r   r   boolr   basicConfigDEBUG__file__parentfilrdprintrN   	read_textrA   r+   r)   <module>r      ss      				  # # # # # # $ $ $ $ $ $      
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 C B B B B B B B B B B B ' ' ' ' ' '              . - - - - - 
	8	$	$ #& y & & & 
T,788 +A)*&+ + + + + + + + + + + + + + +& & & & &Y & & &R* * * * * * * *"d" d" d" d" d"9 d" d" d"N\    * JS
 
.0EEF

 
 
 
    y    ? ? ? ? ? ? ? ?(8;   D ', 	( (&|(#( ! 55( ( ( ( (V zGgm,,,,X%,
	
	 "	"  
1	0	5	5B	E"III	E2<*$6
A
A
C
CDDDDD s   	BBB