
    xhe                   
   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z
d dlZd dlZ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mZ d dlmZ d dlmZ d dlm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.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6Z7d dl8Z8d dl9Z9d dl:Z:d dl;m<Z<m=Z=m>Z>m?Z? d dl@mAZA d dlBmCZC d dlDmEZE ddlFmGZGmHZHmIZImJZJmKZKmLZLmMZMmNZNmOZOmPZPmQZQmRZRmSZSmTZTmUZUmVZV ddlFmWZX ddlYmZZZ ddl[m\Z\ ej]        dk    Z^ej]        dk    Z_ej]        dk    Z` e#            pdZae	jb        /                    eTe^rdnd          Zce^rd nejd        Zee^rd nejf        Zge^rd nejh        Zi eje?          Zkh dZldZmdZn ed           d!             Zod" Zpd# Zq G d$ d%          Zrd& Zs G d' d(          Ztd) Zud* Zvd+ Zwd, Zxd- Zyd. Zzej{        d/             Z|d0 Z}d1 Z~	 dd5Zd6 Zdd7Z	 dd8Ze	jb        /                    eTd9          e	jb        (                    e	jb        /                    d:d;                    fZdd<Zdd=Zd>Zdd@ZdA ZdB ZdC ZdD ZdddKZdL ZddMZdN ZdO ZdP ZdQ ZdR ZddVZddWZej{        dX             Zej{        ddY            Ze^rdndZ e
j        dZ          Zd[ Zd\ Zd] Zd^ Zi Zd_ Zd` ZddbZddcZdddZej{        de             Zdf Zdg Z G dh di          Zdj Zdk Z G dl dme          Zdn Z e:j        ee           ej{        do             Zej{        ddp            Zdq Zdr ZdduZ	 ddwZdx ZddyZW G dz d{ej                  Z G d| d}ej                  Z G d~ dej                  Z e            a eej                  Z eej                  Z ej        d          Z ej        d                              ej                    ej        d                              ej                    ej        d                              ej                    ej        d                              ej                   d Zej        d4d4fdZd Z	 ddZd Zd Zdd egeiz  dd fdZd ZddZ e
j        d          Z e
j        d          ZddZd ZddZd ZddZd Zi ad Z eZdd          dd            Zd ZddZddZdS )    )annotationsN)OrderedDictdefaultdict)	lru_cache)glob)filterfalse)JSONDecodeError)getpreferredencoding)walk)
abspathdirname
expanduser
expandvarsgetmtimegetsizeisdirisfileislinkjoin)Path)Thread)Iterable)CONDA_PACKAGE_EXTENSION_V1CONDA_PACKAGE_EXTENSION_V2CONDA_PACKAGE_EXTENSIONSKNOWN_SUBDIRS)
PrefixData)Dist)PrefixRecord   )CondaHTTPError	MatchSpecPackageRecordStringIOTemporaryDirectoryVersionOrdercc_conda_buildcontextdownloadget_conda_channelhashsum_filemd5_file	pkgs_dirsroot_dirunix_path_to_winwin_path_to_unix)rm_rf)
deprecated)BuildLockErrorwin32darwinlinuxzutf-8Scriptsbin>   weaknoarchstrongweak_constrainsstrong_constrainsz
# -*- coding: utf-8 -*-
import re
import sys

from %(module)s import %(import_name)s

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(%(func)s())
)z	meta.yamlzmeta.ymlz
conda.yamlz	conda.yml)maxsizec                *    t          j        |           S N)osstatpaths    1lib/python3.11/site-packages/conda_build/utils.py	stat_filerF   v   s    74==    c                6   d}t                      }t          |           D ]x\  }}}|D ]o}	 t          t          j                            ||                    }n# t          $ r Y =w xY w|j        |v rK|                    |j                   ||j	        z  }py|S )Nr   )
setr   rF   rA   rD   r   OSErrorst_inoaddst_size)rD   
total_sizeseenroot_filesfrB   s           rE   directory_size_slowrT   {   s    J55Dt** ' 'a 	' 	'A dA!6!677    {d""HHT[!!!$,&JJ	' s   -A
A&%A&c                   	 t           r,d}t          j        |                    |           d          }nGd}t          j        |                    |                                           t          j                  }t          |d          r9	 |                    d          }n!# t          t          f$ r t           rY d	S Y nw xY wt           r|
                                                    d
d          d         }d}t          j        ||
                                                              d          
                                }|                    dd                              dd                              dd          }n|                                d	         }n$# t          j        $ r t#          |           }Y nw xY w	 t%          |          S # t&          $ r Y d	S w xY w)Nzdir /s "{}"T)shellzdu -s {})stderrdecodeignore)errorsr   z
   z\s([\d\W]+).+r    , . )on_win
subprocesscheck_outputformatsplitPIPEhasattrrX   UnicodeDecodeError
IndexErrorstriprsplitresearchgroupreplaceCalledProcessErrorrT   int
ValueError)rD   commandoutpatterns       rE   directory_sizerv      s   ( 	#G)'..*>*>dKKKCC G)t$$**,,Z_  C 3!! 	jjj11&
3    11D	
  	!))++$$VQ//3C&G)GSYY[[1177::@@BBC++c2&&..sB77??RHHCC))++a.C( ( ( (!$''(3xx   qqsO   B
F" B$ #F" $C<F" ?F" CCF" "GGG 
G$#G$c                      e Zd Zd ZdS )DummyPsutilProcessc                    g S r@    selfargskwargss      rE   childrenzDummyPsutilProcess.children   s    	rG   N)__name__
__module____qualname__r   rz   rG   rE   rx   rx      s#            rG   rx   c                ^  	 t                      t          |                                 d d          D ]
\  }}||<   t          j                    \  }	t          j        |d          t          rdnd	fd}t          |          }d|_        |	                                 	S )	a  Rewrite values of env variables back to $ENV in stdout

    Takes output on the pipe and finds any env value
    and rewrites it as the env key

    Useful for replacing "~/conda/conda-bld/pkg_<date>/_h_place..." with "$PREFIX"

    Returns an FD to be passed to Popen(stdout=...)
    c                ,    t          | d                   S )Nr    )len)kvs    rE   <lambda>z%_setup_rewrite_pipe.<locals>.<lambda>   s    3r!u:: rG   T)keyreversertz%{}%z${}c                     	 	                                  } | s*                                 t          j                   d S                                 D ].\  }}|                     |                    |                    } /t          j                            |            nX# t          $ rK 	 t          j
        d          }t          j                            |pd           n# t          $ r Y nw xY wY nw xY w)NTi'  r^   )readlinecloserA   itemsro   rd   sysstdoutwriterh   read	TypeError)linesr   txtrreplacement_treplacementsw_fds       rE   rewriterz%_setup_rewrite_pipe.<locals>.rewriter   s   	zz|| GGIIIHTNNNF*0022 F FFAs<<=+?+?+D+DEEDD
  &&&&%   '!U++CJ$$SYB////    D		s<   >B' A"B' '
C<26C)(C<)
C63C<5C66C<;C<)target)
r   sortedr   rA   pipefdopenra   r   daemonstart)
envkvr_fdr   tr   r   r   r   s
         @@@@rE   _setup_rewrite_piper      s     ==Lsyy{{(=(=tLLL  1QJD$
	$A        & 	hAAHGGIIIKrG   c                       e Zd Zd Zd Zd ZdS )PopenWrapperc                    d | _         d| _        d| _        d | _        d| _        d| _         | j        |i |\  | _        | _        d S Nr   r    )	elapsedrssvms
returncodedisk	processes_executert   errr{   s      rE   __init__zPopenWrapper.__init__   sO    	*T]D;F;;$(((rG   c                   	 dd l }|j        |j        |j        f}nh# t          $ r[}d }t          t
          f}t          t                    }|                    d|            |                    d           Y d }~nd }~ww xY w|	                    dd          }|
                    dt          j                  }|r&|                    t          j                              nt!                      }	t#          t$                    }
t'          j                    }|r |j        |i |nt+          j        |i |}	 | j        d}d}d}|	                    d          D ]}|

                    |j        i           }	 |                                }||j        z  }||j        z  }|                                }|j        |d	<   |j        |d
<   ||
|j        <   n# |$ r Y w xY w|dz  }t=          || j                  | _        t=          || j                  | _        tA          d |
!                                D                       | _"        tA          d |
!                                D                       | _#        t=          || j$                  | _$        t=          tK          |          | j&                  | _&        t'          j'        |           t'          j                    |z
  | _(        |)                                | _        | j        n## tT          $ r |+                                  w xY wt=          tK          |          | j&                  | _&        t'          j                    |z
  | _(        |j,        |j-        fS )Nr   z!psutil import failed.  Error was zsonly disk usage and time statistics will be available.  Install psutil to get CPU time and memory usage statistics.time_intr[   cwdT	recursiver   userr    c              3  &   K   | ]}|d          V  dS )r   Nrz   .0childs     rE   	<genexpr>z(PopenWrapper._execute.<locals>.<genexpr><  s&      "P"PE5<"P"P"P"P"P"PrG   c              3  &   K   | ]}|d          V  dS )r   Nrz   r   s     rE   r   z(PopenWrapper._execute.<locals>.<genexpr>=  s&      #R#ReE&M#R#R#R#R#R#RrG   ).psutilNoSuchProcessAccessDeniedImportErrorrJ   rr   
get_loggerr   warnpopgetr   prefixProcessrA   getpidrx   r   dicttimePopenrb   r   r   pidmemory_infor   	cpu_timessystemr   maxr   sumvaluescpu_syscpu_userr   rv   r   sleepr   pollKeyboardInterruptkillr   rW   )r|   r}   r~   r   psutil_exceptionselogr   disk_usage_dirparent	cpu_usage
start_time_popenr   r   r   r   child_cpu_usagemem	cpu_statss                       rE   r   zPopenWrapper._execute   s   	MMM $#$!
  	 	 	F!(* 5X&&CHH<<<===HH<       	 ::j!,,E3:66 17P	,,,<N<P<P%%	 Y[[
 3LFL$)&)))!42622 	
,	/)
 	#__t_<< # #E&/mmEIr&B&BO!#//11swsw %*OO$5$5	1:1A.2;.//>	%),,, ! ! ! ! NII sDH--sDH--""P"PY=M=M=O=O"P"P"PPP ##R#Ry?O?O?Q?Q#R#R#R R R!$Y!?!?  ~ > >	JJ	
8$$$#y{{Z7"(++--O /)R ! 	 	 	KKMMM	 ~66	BB	y{{Z/}fm++sH    
B AA;;B 7AL 9AGL GL GD.L  L+c                    t          | j        | j        | j        | j        | j        | j        | j        | j        d          S )N)r   r   r   r   r   r   r   r   )	strr   r   r   r   r   r   r   r   r|   s    rE   __repr__zPopenWrapper.__repr__O  sF    <xx	!^ M<"o	 	
 
 	
rG   N)r   r   r   r   r   r   rz   rG   rE   r   r      sE        < < <T, T, T,l
 
 
 
 
rG   r   c           
        d|vrI|                                 }t          j                                         }|                    d|i           d |d                                         D             |d<   g }d|vrt
          j        |d<   |D ]}t          j        j	        dk     r+t          |d          r|                    t                    }n?t          j        j	        dk    r*t          |d          r|                    t                    }|                    t          |                     |                    d          }d|v r|d= |                    dd           }|rt%          |          |d	<   d }|t'          |fi |}	| d
k    r|	j                                        }|	j        dk    rt          j        |	j        |          |                    |	j        |	j        |	j        |	j        |	j        |	j        |	j        d           n2| dk    rt          j        |fi | nd	|v r|d	= t          j         |fi |}|S )Nr   c                N    i | ]"\  }}t          |          t          |          #S rz   )r   )r   r   values      rE   
<dictcomp>z6_func_defaulting_env_to_os_environ.<locals>.<dictcomp>c  s*    RRRjc5SXXs5zzRRRrG   stdin   encoderX   statsrewrite_stdout_envr   outputr   )r   r   r   r   r   r   r   call)!copyrA   environupdater   rb   rf   r   version_infomajorrg   r   codecrX   appendr   r   r   r   r   rt   r   r   rp   r   r   r   r   r   r   r   
check_callrc   )
func	popenargsr~   env_copy_argsargr   r   rt   procs
             rE   "_func_defaulting_env_to_os_environr  ^  sa   F:??$$uh'(((RRF5M<O<O<Q<QRRRF5MEf$/w  !A%%'#x*@*@%**U##CC#q((WS(-C-C(**U##CSXXJJwE&7O$8$?? C./ABBx
CE,,V,,8(--//C?a/GGG<	!^ M<xx 
	
 
	
 
	
 
	
 6>>!%22622226!!8$)%::6::CJrG   c                "    t          dg| R i |S )Nr   )r  r   r~   s     rE   check_call_envr    s     -fKyKKKFKKKrG   c                ^    t          dg| R dt          j        i|                                S )Nr   r   )r  rb   rf   rstripr  s     rE   check_output_envr
    sD    -+4  #8> fhhrG   c                    d}i }t          |          D ]\  }}d|dz   dz  z  ||<   t          |          D ]/}| ||         k    r!t          |           ||         z  }|d| c S 0d| z  S )N)KMGTPEZYr    
   z.1fz%sB)	enumeratereversedfloat)nsymbolsr   ir   r   s         rE   bytes2humanr    s     7GF'"" & &1!a%2%q		g % %q	>>!HHvay(E$$$$$$$  19rG   c                    t          | d          \  }} t          t          |          d          \  }}|dd|dd| dS )N<   d:02dz04.1f)divmodrq   )r   mhs      rE   seconds2humanr$    sQ    !R==DAq#a&&"DAq%%%A%%%A%%%%rG   c                   t          |           r<|                                                     t                    s,|                                                     t                    rt          j                    }|                                                     t                    r ddl}|j        	                    | |           nt          | |           t          j                            |dd          }t          |          r.t          |t          j                            |d                     d}nTt          d| z             dS t          t          j                            t          j                    |                     }d}t          j                            |          st%          d	| d
          ||fS )a  resolve recipe dir as absolute path.  If recipe is a tarball rather than a folder,
    extract it and return the extracted directory.

    Returns the absolute path, and a boolean flag that is true if a tarball has been extracted
    and needs cleanup.
    r   Ninfoz
recipe.tarTzIgnoring non-recipe: %s)NNFzPackage or recipe at path z does not exist)r   lowerendswithdecompressible_extsr   tempfilemkdtempconda_package_handling.apiapiextracttar_xfrA   rD   r   printr   getcwdexistsrr   )recipe
recipe_dirconda_package_handlingrecipe_tarfileneed_cleanups        rE   get_recipe_abspathr8    s    f~~ <<>>""#677 	 6<<>>;R;R$<
 <
 	  ")++J||~~&&'?@@ +1111&*226:FFFFvz***W\\*flKKNn%% I~rw||J'G'GHHHLL+f4555<RW\\")++v>>??
7>>*%% SQjQQQRRR|##rG   c              #    K   t          j                     }t          j                     |z
  |k     rf	 | D ]}|                    d           	 nW# t          j        $ r | D ]}|                                 Y nw xY wt          j                     |z
  |k     ft          d          	 dV  | D ]}|                                 dS # | D ]}|                                 w xY w)a2  Try to acquire all locks.

    If any lock can't be immediately acquired, free all locks.
    If the timeout is reached withou acquiring all locks, free all locks and raise.

    http://stackoverflow.com/questions/9814008/multiple-mutex-locking-strategies-and-why-libraries-dont-use-address-comparison
    g?timeoutzFailed to acquire all locksN)r   acquirefilelockTimeoutreleaser3   )locksr;  r   locks       rE   try_acquire_locksrB    s+      		A
)++/G
#
#	 * *S))))*   	 	 	    	 )++/G
#
#0 :;;; 	 	DLLNNNN	 	E 	 	DLLNNNN	s   A (A98A9&C C c           	        d}t           j        t           j        t           j        fD ])}	  || |           d} n# t          t
          f$ r Y &w xY w|s	 t          j        d|  d| dt          j        t          j                   d S # t          j	        $ rB}t          j                            |          st	          d|  d| d|           Y d }~d S d }~ww xY wd S )	NFTzcp -a r`   )rV   rW   r   zFailed to copy  to z.  Error was: )shutilcopy2r   copyfilerJ   PermissionErrorrb   r   rf   rp   rA   rD   r   )srcdst	is_copiedr   r   s        rE   _copy_with_shell_fallbackrL    sO   Iv{FO<  	DcNNNIE) 	 	 	H	 
Q		Q!$$$s$$!!	      , 	Q 	Q 	Q7>>#&& QOOOOOAOOPPPQ Q Q Q Q Q	Q
Q 
Qs'   9AA2B C7CCc                :   |                      t          j        j                  }|                     t          j        j                  }|r,|d         |d         k    r|d= |d= |r|d         |d         k    t          j        j        | t          j        j        | fS )N)re   rA   rD   sepr   )rI  rJ  ssplitdsplits       rE   get_prefix_replacement_pathsrR    s    YYrw{##FYYrw{##F
 VBZ6":--2J2J  VBZ6":-- 7< "',"777rG     FTc           	        t          t                    }|r%t          |           r	 t          j        t          j                            |                     n# t          $ r Y nw xY wt          j                            |          rt          j	        |           t          | |          \  }}	t          j        |           }
|
                    ||	          }t          j        ||           	 t          j        |           }t          j        |j                  }t          j        ||           dS #  Y dS xY wt'          |           rt)          | ||||||           dS t'          |          r>t          j                            |t          j                            |                     }n|}t          j                            |           r t          j                            |           }nyt          j        j        |v rSt          j                            |          }t          j                            |          st          j        |           nt          j                    }t          j                            |           rTt          j                            t          j                            |                     s|                    d|            dS |s|rt;          ||          }|r|gng }t=          ||          5  t          j                            |          }|rEt          j                            |          s&	 t          j        |           n# t          $ r Y nw xY w	 t?          | |           nI# t@          j!        $ r7 |"                    dt          j                            |           |           Y nw xY wddd           dS # 1 swxY w Y   dS )z>Copy all the files and directories in src to the directory dst)r;  rA  lockingclobberz+path %s is a broken symlink - ignoring copyNr:  z"skipping %s - already exists in %s)#r   r   r   rA   makedirsrD   r   rJ   lexistsremoverR  readlinkro   symlinklstatrB   S_IMODEst_modelchmodr   
merge_treer   basenameisabsrO  r1  r2  realpathr   get_lockrB  rL  rE  Errordebug)rI  rJ  r;  symlinksrA  rU  rV  r   src_basedst_base
src_targetsrc_replacedstmodedst_fn
src_folderr@  
dst_folders                     rE   	copy_intorq  %  s    X

C @F3KK @	K,,---- 	 	 	D	7??3 	IcNNN9#sCC([%%
!))(H==

<%%%	#B<
++DIc4     	DD	s /	
 	
 	
 	
 	
 	
 :: 	W\\#rw'7'7'<'<==FFF7== 	)--JJw{f$$W__V44
w}}Z00 ,K
+++Y[[
7>># 	rw~~bg6F6Fs6K6K'L'L 	HHBCHHHF 	9 	9J888D!)rug.. 	 	--J "'.."<"< K
++++   D)#v6666<   		8"':J:J3:O:OQT    	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	sz   1A 
A('A(1AD5 5D:
AOM! O!
M.+O-M..O2NOAO	OO		OO Oc           	     "   	 t          j        | |           d S # t          $ rk 	 t          | |           t	          j        |            Y d S # t          $ r5 t          t                    }|                    d|  d| d           Y Y d S w xY ww xY w)Nz Failed to copy/remove path from rD  z due to permission error)	rE  moverH  rq  rA   unlinkr   r   rf  )rI  rJ  r   s      rE   move_with_fallbackru  m  s    
C   	c3IcNNNNNN 	 	 	X&&CIIY3YYCYYY      		s&    
B$A:B
B	B

Bc                   t           j                                      s)t          j                   t	          j        |            t          j        |           }|r || |          fd|D             }d|v r|                    d           fd|D             }|sHt          |          D ]7\  }}t           j        	                    | |          }	||         }
|rt           j        
                    |	          rt           j                            |
          rt          j        |
           t          j        t          j        |	          |
           	 t          j        |	          }t          j        |j                  }t          j        |
|           #  Y xY wt           j                            |	          rt)          |	|
||           't+          |	|
           9|S )Nc                    g | ]}|v|	S rz   rz   )r   xexcls     rE   
<listcomp>zcopytree.<locals>.<listcomp>  s    ///Q$qrG   z.conda_lockc                P    g | ]"}t           j                            |          #S rz   rA   rD   r   )r   itemrJ  s     rE   rz  zcopytree.<locals>.<listcomp>  s)    7774rw||C&&777rG   )rA   rD   r2  rW  rE  copystatlistdirrY  r  r   r   rX  r[  rZ  r\  rB   r]  r^  r_  r   copytreerL  )rI  rJ  rg  rY   dry_runlstdst_lstidxr}  r   r  rl  rm  ry  s    `           @rE   r  r  |  s   7>># "
CS!!!
*S//C 0vc3////#/// 

=!!!77773777G 0"3 	0 	0ICS$''AA 0BGNN1-- 07??1%% !IaLLL
2;q>>1---!B<
33DIa&&&&Dq!! 0Ax0000)!Q////Ns   AF!!F%c           	     l   t           j                            t           j                            |                    }t           j                            t           j                            |                     } |                    |           rJ d|  d|             t          | ||d          }d |D             }|r |st          d|  d| d|d	                    g }	|r|st          | |
          }|g}	t          |	|          5  t          | ||           ddd           dS # 1 swxY w Y   dS )z
    Merge src into dst recursively by copying all files from src into dst.
    Return a list of all files copied.

    Like copytree(src, dst), but raises an error if merging the two trees
    would overwrite any files.
    zmCan't merge/copy source into subdirectory of itself.  Please create separate spaces for these things.
  src: z
  dst: T)rg  r  c                0    g | ]}t          |          |S rz   )r   )r   rS   s     rE   rz  zmerge_tree.<locals>.<listcomp>  s#    222aq		2222rG   zCan't merge z into z: file exists: r   r:  )rg  N)	rA   rD   normpathnormcase
startswithr  rJ   rd  rB  )
rI  rJ  rg  r;  rA  rU  rV  	new_filesexistingr@  s
             rE   r`  r`    s    '

27++C00
1
1C
'

27++C00
1
1C~~c""  		 	 	 	   cHdCCCI229222H S SQSQQQQHQKQQRRRE  	2C111D	5'	*	* . .cH----. . . . . . . . . . . . . . . . . .s   	D))D-0D-r@  ~z.conda_build_locksc                D   d }	 t           j                            t           j                            |                     }n# t          $ r | }Y nw xY w|}t          |d          r|                                }t          j        |          	                                }t          |d          r|
                                }t          D ]}	 t           j                            |          st          j        |           t           j                            ||          }t          |d          5 }|                    d           d d d            n# 1 swxY w Y   t#          j        ||          } n,# t          $ r Y w xY wt'           dj        t                     |S )Nr   rX   wr^   z\Could not write locks folder to either system location ({})or user location ({}).  Aborting.)rA   rD   r   r  rJ   rg   r   hashlibsha256	hexdigestrX   _lock_foldersr   rW  r   openr   r=  FileLockRuntimeErrorrd   )	folderr;  fllocation
b_locationlock_filename	locks_dir	lock_filerS   s	            rE   rd  rd    s   	B7??27#3#3F#;#;<<   Jz8$$ )&&((
 N:..88::M}h'' /%,,.." 
 
			7==++ 'I&&&Y>>Ii%%               "9g66BE 	 	 	H	 7 006G
 
 	
 IsH   <A AAA#E40EE4E	E4E	E44
F Fc                r   g }t          |          }| rt          d d         }|t          |          z   }|D ][}t          j                            |          st          j        |           t          ||          }|                    |           \|                    t          d|                     |S )Nr    r:  zconda-operation)	ensure_listr-   listrA   rD   r   rW  rd  r   )rU  bldpkgs_dirsr;  r@  
_pkgs_dirslocked_foldersr  rA  s           rE   get_conda_operation_locksr    s    E|,,L 	Crr]
#d<&8&88$ 	 	F7==(( $F###FG444DLLX/AAABBBLrG   )z.7z.tar.tar.bz2.tar.gzz	.tar.lzma.tar.xz.tar.zz.tar.zst.tgzz.whlz.zipz.rpmz.debr:*c                0   ddl m} |                                                     d          rJ |d          }|s |d          }|st	          j        d           t          |d| g           | d d         } t          j        | |          }|	                                }t          |d	          D ]9\  }}t          j                            |j                  r*t          j                            |j        d
          |_        t          j                            t          j                              }	t          j                            |j                                      |	          s |j                            dd          |_        t          j                            |j                                      |	          s"t	          j        d|j        z   dz   |	z              |||<   ;|                    |           |                                 d S )Nr    find_executabler  
uncompressgunzipzAuncompress (or gunzip) is required to unarchive .z source files.
z-fr\   r   /z../r^   ztarball contains unsafe path: z	 cwd is: rC   )os_utils.externalr  r'  r(  r   exitr  tarfiler  
getmembersr  rA   rD   rb  namerelpathrc  r1  r  ro   
extractallr   )
tarballdir_pathrm  r  r  r   membersr  memberr   s
             rE   _tar_xf_fallbackr    s   222222}})) $_\22
 	3(22J 	H  
 	
D'2333#2#,Wd##AllnnGw**  	67==%% 	<'//&+s;;FKgry{{++w,,77<< 	9 +--eR88FKw,,77<< 	YH5CkQTWWXXX

LLhLGGIIIIIrG   c                   t          |          }t          j                            |           s1t          j                            t          j                    |           } d }d}t          j        |           5 }|D ]@}|j        |v r5|dz  }|	                                D ]}|t          |          }||z  } nAd d d            n# 1 swxY w Y   |t          |          k    rt                      |S r   )r  rA   rD   rb  r   r1  
libarchivefile_readerr  
get_blocksbytesr   KeyError)r  entriesresultn_foundarchiveentryblocks          rE   tar_xf_filer  2  s6   '""G7==!! 5',,ry{{G44FG			(	( 	G 	 	EzW$$1"--// ( (E~!&u% %	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 #g,,jjMs   8ACCCc                B   t           j                            |           s1t           j                            t          j                    |           } g }t          j        |           5 }|D ]}|                    |j                   	 d d d            n# 1 swxY w Y   |S r@   )	rA   rD   rb  r   r1  r  r  r   r  )r  r  r  r  s       rE   tar_xf_getnamesr  G  s    7==!! 5',,ry{{G44F			(	( &G 	& 	&EMM%*%%%%	&& & & & & & & & & & & & & & & Ms   ' BBBc                   t           j        j        t           j        j        z  t           j        j        z  t           j        j        z  t           j        j        z  }t          j        	                    |           s1t          j        
                    t          j                    |           } 	 t          t          j                            |                    5  t          j        | |           d d d            d S # 1 swxY w Y   d S # t           j        j        $ r< |                                                     d          rt'          | |           Y d S  w xY w)N)r  r  r  r  r  r  )r  r.  EXTRACT_TIMEEXTRACT_PERMEXTRACT_SECURE_NODOTDOTEXTRACT_SECURE_SYMLINKSEXTRACT_SECURE_NOABSOLUTEPATHSrA   rD   rb  r   r1  	tmp_chdirrc  extract_file	exceptionArchiveErrorr'  r(  r  )r  r  flagss      rE   r/  r/  Q  s}   '


)	*


4	5 

4	5 

;		< 
 7==!! 5',,ry{{G44rw''1122 	4 	4#GU333	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4 	4, 	 	 	 ==??##H
 
 	 Wh//////	s7   +,D C:-D :C>>D C>D AEEc                z    t          |           t          |           t          | d          t          |           dS )Nr  )sizemd5r  mtime)r   r,   r+   r   rC   s    rE   	file_infor  j  s9    ~~tX..$	  rG   andr   Iterable[str]conjunctionr   returnc                    t          |           } t          |           dk    r| d          d| d| d          S d                    | dd                    d| d| d          S )z
    Like ', '.join(items) but with and

    Examples:

    >>> comma_join(['a'])
    'a'
    >>> comma_join(['a', 'b'])
    'a and b'
    >>> comma_join(['a', 'b', 'c'])
    'a, b, and c'
    r[   r   r`   r    , NrN  )tupler   r   )r   r  s     rE   
comma_joinr  s  sv     %LLE
5zzQ(55[5558555iicrc
##@@{@@U2Y@@@rG   c                 J   |                     dd          }|                     dd          }|                     dd          }t          j        j        j        }|                    |           |z   }t          j        j        pd} ||                    ||                     dS )	aG  
    prints unicode strings to stdout using configurable `errors` handler for
    encoding errors

    :param args: unicode strings to print to stdout
    :param sep: separator (defaults to ' ')
    :param end: ending character (defaults to '
')
    :param errors: error handler for encoding errors (defaults to 'replace')
    rO  r`   end
rZ   ro   utf8N)r   r   r   bufferr   r   encodingr   )r}   r~   rO  r  rZ   r   r   r  s           rE   safe_print_unicoder    s     **UC
 
 C
**UD
!
!CZZ),,F:"D88D>>CDz",fHDXv	&	&'''''rG   c              #  T  K   t          |          }t          |          }t          |           D ]w\  } }}|D ]/}t          j        ||          D ]}|                    |           0|D ]<}t          j        ||          D ]$}t
          j                            | |          V  %=xdS )a)  
    Recursively searches path for filename patterns.

    :param path: path within to search for files
    :param patterns: list of filename patterns to search for
    :param ignore: list of directory patterns to ignore in search
    :return: list of paths in path satisfying patterns/ignore
    N)r  r   fnmatchfilterrY  rA   rD   r   )	rD   patternsignoresdirsrR   rY   r  ru   rS   s	            rE   rec_globr    s       8$$H'""G!$ZZ 	, 	,dE 	 	F^D&11  A   	, 	,G^E733 , ,gll4++++++,	,	, 	,rG   c                z    ddl m}  |d          rd|  }t          j        |          } nt	          |           } | S )Nr    r  cygpathzcygpath -w )r  r  rb   	getoutputr/   rD   r  cmds      rE   convert_unix_path_to_winr    Y    222222y!! &"D""#C((  %%KrG   c                z    ddl m}  |d          rd|  }t          j        |          } nt	          |           } | S )Nr    r  r  zcygpath -u )r  r  rb   r  r0   r  s      rE   convert_win_path_to_unixr    r  rG   c                P    t          j        dt          j        |                     S )Nzfile:)urlparseurljoinurllibpathname2urlrC   s    rE   path2urlr     s     GV%8%>%>???rG   c                   t           r!t          j                            | d          }nt          j                            | d          }t	          t          j                            |d          d          }t          t          t          |                    }|r't          j                            ||d                   }n#t          j                            |d|           }|S )NLiblibz	python?.*Tr   r   python)ra   rA   rD   r   r   r   r   r   )r   py_verlib_dirpython_folders       rE   get_stdlib_dirr    s     	?',,vu--',,vu--RW\\';??4PPP{6=AABB 	?gll7M!,<==GGgll7,=V,=,=>>GNrG   c                ^    t           j                            t          | |          d          S )Nsite-packages)rA   rD   r   r  )r   r  s     rE   get_site_packagesr    s"    7<<vv66HHHrG   crootstr | os.PathLike | Path	list[str]c                `    t          t          j                            | d          d          S )Nz4*[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]*Tr   )r   rA   rD   r   )r  s    rE   get_build_foldersr    s&    U$<==NNNNrG   c                   t          |d          t          j        z   | d         z   | d<   t          rt          |ddd          t          j        z   t          |ddd          z   t          j        z   t          |dd          z   t          j        z   t          |d          z   t          j        z   | d         z   | d<   d}|r|t          j        z   | d         z   | d<   | S )Nr8   PATHLibraryz	mingw-w64usrr7   T)r   rA   pathsepra   )r   r   prepend_prefixs      rE   prepend_bin_pathr    s    vu%%
2S[@CK K77j69eU334 j 69e,,	-
 j 69%%& j &k 	F  8rz)CK7FJrG   c              #  2  K   t           j        d d          }t          r@t           j                            dt          j                            | dd                     nt          j                            | d          }t          t          j                            |d          d          }|rF|d         }t           j                            dt          j                            |d                     	 d V  |t           _        d S # |t           _        w xY w)Nr    r  r
  zpython[0-9\.]*Tr   r   )r   rD   ra   insertrA   r   r   )r   path_backupr  
python_dirs       rE   sys_path_prependedr    s      (111+K J27<<GGHHHH',,vu--"',,w0ABBdSSS
 	J#AJHOOArw||JHHIII;s   6D Dc              #     K   t           j        d         }t          t           j                                        | |          d         t           j        d<   	 d V  |t           j        d<   d S # |t           j        d<   w xY w)Nr  )rA   r   r  r   )r   r  old_paths      rE   path_prependedr    sx       z&!H)"*//*;*;V^TTBJv&%
6X
6%%%%s   A+ +A<z*\s*([\w\-\.]+)\s*=\s*([\w.]+):([\w.]+)\s*$c              #     K   | D ]K}t                               |          }|t          j        d|z             |                                V  Ld S )Nz%Error cound not match entry point: %r)	entry_patmatchr   r  groups)r   r}  r"  s      rE   iter_entry_pointsr$     sb        OOD!!9H<tCDDDhhjj	 rG   c           
        |                     d          d         }t          |||dz  }t          rt          | dz   d          5 }t          j                            t          j                            |j        d                    r|	                    d           |	                    |           t          t          t          t                    dt          |j                   d	          | d	z   |j                   d d d            d S # 1 swxY w Y   d S t          j                            |           rt	          j        |            t          | d          5 }|j        s|	                    d
|j        z             |	                    |           d d d            n# 1 swxY w Y   t	          j        | d           d S )Nr_   r   )moduler   import_namez
-script.pyr  zpython_d.exez#!python_d
zcli-.exez#!%s
i  )re   PY_TMPLra   r  rA   rD   r   r   host_prefixr   rq  r   __file__r   	host_archr;  r   rY  r:   host_pythonchmod)rD   r&  r   configr'  pyscriptfos          rE   create_entry_pointr2  (  s   **S//!$KFDUUUH $%s++ 	rw~~bgll6+=~NNOO )(((HHXWX&&(Js63C/D/D(J(J(JKKv  		 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 7>>$ 	IdOOO$__ 	= 8F$66777HHX	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	us%   B<DDD:F##F'*F'c                    | sd S t          |j        t                    }t          |          st	          j        |           t          |           D ]&\  }}}t          t          ||          |||           'd S r@   )r   r*  bin_dirnamer   rA   mkdirr$  r2  )r   r/  bin_dirr  r&  r   s         rE   create_entry_pointsr7  ?  s     6%{33G>> 
.u55 E EVT4--vtVDDDDE ErG   c              #     K   t          |           D ]B\  }}}|D ]9}|                    |          r"t          j                            ||          V  :Cd S r@   )r   r(  rA   rD   r   )
start_pathru   rP   rQ   rR   rS   s         rE   get_ext_filesr:  J  sr      z** , ,a 	, 	,Azz'"" ,gll4+++++	,, ,rG   c                
   t           s|S | t          vr_t          | d          5 }|                                }t	          j        d|          }|rdndt          | <   ddd           n# 1 swxY w Y   t          |          r	 t          dd|g                                          d                             t                                }n9# t          $ r, t          t                    }|                    d	           Y nw xY w|S )
zKIf exe is a Cygwin or MSYS2 executable then filters it through `cygpath -u`rbs   (cygwin1.dll|msys-2.0.dll)TFNr  z-ur   zJcygpath executable not found.  Passing native path.  This is OK for msys2.)ra   _posix_exes_cacher  r   rl   findallr
  
splitlinesrX   r
   rJ   r   r   rf  )exerD   exe_file
exe_binarymsys2_cygwinr   s         rE    convert_path_for_cygwin_or_msys2rD  T  sc    
####t__ 	E!J:&CZPPL-9%DTTuc"	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E 	E  
	 )T4!899a!,..// D
  	 	 	X&&CII\    	
 Ks$   8A''A+.A+ A	C
 
3D ?D c                     d                                                       j         fd                                 D                       S )NzCSkipped: {} from {} defines build/skip for this configuration ({}).c                6    i | ]}|j         j        |         S rz   )r/  variant)r   r   r"  s     rE   r   z$get_skip_message.<locals>.<dictcomp>n  s%    MMMa1ah.q1MMMrG   )rd   r  rD   get_used_vars)r"  s   `rE   get_skip_messagerI  l  sK    PWW	!&MMMM1??;L;LMMM  rG   modifiedc                   t                      5 }|                    d          r#t          j                            | |d           n"t          j                            | ||           t
          j                            ||          }t
          j                            |          r	 t          |          5 }|
                                }d d d            n# 1 swxY w Y   nN# t          $ r? t          |d          5 }|
                                }d d d            n# 1 swxY w Y   Y nw xY wd}|cd d d            S # 1 swxY w Y   d S )Nr&  )dest_dir
componentsr<  F)r%   r  r5  r-  r.  rA   rD   r   r2  r  r   rh   )package_path	file_pathrefresh_modetdresolved_file_pathrS   contents          rE   package_has_filerT  r  s   			 '' 	"&..rf /     #&..ri /     W\\"i887>>,-- 		',-- 'ffhhG' ' ' ' ' ' ' ' ' ' ' ' ' ' '% ' ' ',d33 'qffhhG' ' ' ' ' ' ' ' ' ' ' ' ' ' '' G)                 s~   BE*C&9CC&C	C&!C	"C&%E&D/ D!D/!D%%D/(D%)D/,E.D//EE	Ec                P    | g S t          | |          rt          |           S | gS )a  
    Ensure the object is a list. If not return it in a list.

    :param arg: Object to ensure is a list
    :type arg: any
    :param include_dict: Whether to treat `dict` as a `list`
    :type include_dict: bool, optional
    :return: `arg` as a `list`
    :rtype: list
    N)include_dict)islistr  )r  rV  s     rE   r  r    s6     {		,	/	/	/ CyyurG   c                   t          | t                    st          | t                    sdS |st          | t                    rdS sdS du rCt	          |           } 	 t          t          |                     n# t          $ r Y dS w xY wfd	 t          fd| D                       S # t          t          f$ r Y dS w xY w)af  
    Check whether `arg` is a `list`. Optionally determine whether the list elements
    are all uniform.

    When checking for generic uniformity (`uniform=True`) we check to see if all
    elements are of the first element's type (`type(arg[0]) == type(arg[1])`). For
    any other kinds of uniformity checks are desired provide a uniformity function:

    .. code-block:: pycon
        # uniformity function checking if elements are str and not empty
        >>> truthy_str = lambda e: isinstance(e, str) and e
        >>> islist(["foo", "bar"], uniform=truthy_str)
        True
        >>> islist(["", "bar"], uniform=truthy_str)
        False
        >>> islist([0, "bar"], uniform=truthy_str)
        False

    .. note::
        Testing for uniformity will consume generators.

    :param arg: Object to ensure is a `list`
    :type arg: any
    :param uniform: Whether to check for uniform or uniformity function
    :type uniform: bool, function, optional
    :param include_dict: Whether to treat `dict` as a `list`
    :type include_dict: bool, optional
    :return: Whether `arg` is a `list`
    :rtype: bool
    FTc                *    t          |           k    S r@   )type)r   etypes    rE   r   zislist.<locals>.<lambda>  s    DGGu, rG   c              3  .   K   | ]} |          V  d S r@   rz   )r   r   uniforms     rE   r   zislist.<locals>.<genexpr>  s+      ++!771::++++++rG   )
isinstancer   r   r   iterrZ  nextStopIterationallrr   r   )r  r]  rV  r[  s    ` @rE   rW  rW    s   > #s :c8#<#< u jd33 u t
 $3ii	cOOEE 	 	 	44	 -,,,++++s++++++	"   uus$    A= =
B
BB/ /CCc              #     K   t          j                    }	 t          j        |            d V  t          j        |           d S # t          j        |           w xY wr@   )rA   r1  chdir)destcurdirs     rE   r  r    sX      Y[[F

s   A Ac           	     ~  	
 g }t          |           D ]}t          j                            |          s t          j                            ||          }t          j                            |          r|                    |           wt          j                            |          r|                    |           t          j                            |          rt          |          D ]\  
}}|
                    
fd|D                        |D ]r}t          j                            t          j                            
|                    r3|                    t          j                            
|                     syt          |d          }|s/t          t                    }|                    d| d|            |
                    t          |                     t!          j        dt!          j        | t          j        j                   z             		fd|D             }|S )Nc              3  X   K   | ]$}t           j                            |          V  %d S r@   r|  )r   rS   rP   s     rE   r   zexpand_globs.<locals>.<genexpr>  s3      ??qRW\\$22??????rG   Tr   zGlob z did not match in root_dir ^c                >    g | ]}                     d |d          S )r^   r    )sub)r   rS   prefix_path_res     rE   rz  z expand_globs.<locals>.<listcomp>  s+    999a^Aq))999rG   )r  rA   rD   rb  r   r   r   r   r   r   extendr   r   r   errorr   rl   compileescaperO  )	path_listr.   rR   rD   dirnamesfsr  
glob_filesr   rl  rP   s            @@rE   expand_globsru    s   EI&& - -w}}T"" 	07<<$//D7>>$ 	-LLW^^D!! 	-LLW]]4   	-&*4jj A A"h????B??????& A AFw~~bgll4&@&@AA ARW\\$%?%?@@@AA dd333J O **		M$MM8MMNNN LL
++,,,,Zbi80JRW[0J0J&K&K KLLN99995999ELrG   c                P    t           j                                       sNt           j                            t           j                            t          j                                          t           j                                       rct           j                                       t          v r S t          d
                     d                    t                                        t          t           t          d                    }|s;t          d
                    d                    t                                         t          |          dk    r|d         S  fdt          D             }t          |          dk    rZt          t                                        d	|d          d
  d           t           j                             |d                   S t          d
                    d                    t                                         )a  recurse through a folder, locating valid meta files (see VALID_METAS).  Raises error if more than one is found.

    Returns full path to meta file to be built.

    If we have a base level meta file and other supplemental (nested) ones, use the base level.
    z {} is not a valid meta file ({})r  )z.AppleDouble)r  zNo meta files ({}) found in {}r    r   c                    g | ]A}t           j                            t           j                            |                    ?|BS rz   )rA   rD   r   r   )r   r"  rD   s     rE   rz  zfind_recipe.<locals>.<listcomp>#  s<    MMM1rw~~bgll46K6K'L'LMQMMMrG   zMultiple meta files found. The z file in the base directory (z) will be used.z)More than one meta files ({}) found in {})rA   rD   rb  r  r   r1  r   ra  VALID_METASrJ   rd   r  r  r   r   r   r   )rD   resultsmetass   `  rE   find_reciper{    s    7== AwRY[[$ ? ?@@	w~~d 
7D!![00K.55dDIIk<R<RSS
 
 	
 8D+7HIIIJJG 
,33DIIk4J4JDQQ
 
 	
 7||qqz
 NMMMMMME
5zzQ8!!8 :>  	
 	
 	

 w||D%(+++
3::499[;Q;QSWXX  rG   c                  <    e Zd Zg dZej        dddfdZd Zd ZdS )LoggingContext)condabinstarinstallzconda.installfetchzconda.instructionszfetch.progressr0  progress	dotupdate	stdoutlogrequestszconda.core.package_cachez
conda.planconda.gateways.disk.deleteconda_buildzconda_build.indexzconda_build.noarch_pythonzurllib3.connectionpoolconda_indexzconda_index.indexzconda_index.index.convert_cacheNTc                    || _         i | _        || _        || _        t          j        | _        |st          j        | _        d S || _        d S r@   )	level
old_levelshandlerr   r(   quietr}  default_loggersloggers)r|   r  r  r   r  s        rE   r   zLoggingContext.__init__K  sH    

]
 	#)9DLLL"DLLLrG   c                h   | j         D ]w}t          |t                    rt          j        |          }|j        | j        |<   |                    d|vs| j        t          j        k     r| j        n	| j        dz              x| j	        r| j
                            | j	                   dt          _        d S )Nr  r  T)r  r^  r   logging	getLoggerr  r  setLevelINFOr  logger
addHandlerr(   r  )r|   r  r   s      rE   	__enter__zLoggingContext.__enter__V  s    l 	 	F&#&& 0'//&)iDOF#LLV++tzGL/H/H 

Z"_   
 < 	1K""4<000rG   c                N   | j                                         D ],\  }}t          j        |                              |           -| j        r| j                            | j                   | j        r | j        r| j                                         | j	        t          _	        d S r@   )r  r   r  r  r  r  r  removeHandlerr   r  r(   )r|   etevtbr  r  s         rE   __exit__zLoggingContext.__exit__e  s    !_2244 	6 	6MFEf%%..u5555< 	4K%%dl333< 	!DJ 	!L   
rG   )	r   r   r   r  r  WARNr   r  r  rz   rG   rE   r}  r}  1  sd          O2 %\4tT 	# 	# 	# 	#  # # # # #rG   r}  c                   t                      }t          t          j                            | dd          d          D ]H}t          |          5 }t          j        |          }|||d         <   ddd           n# 1 swxY w Y   I|S )z
    Scan all json files in 'path' and return a dictionary with their contents.
    Files are assumed to be in 'index.json' format.
    
conda-metaz*.jsonTr   r  N)r   r   rA   rD   r   r  jsonload)rD   	installedfilenamefiledatas        rE   get_installed_packagesr  r  s    
 IdL(CCtTTT + +(^^ 	+t9T??D&*Id6l#	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ 	+ s    A<<B 	B 	c                   |                                  D ]\  }}t          |d          r t          t          |                    | |<   5t          |d          r|t	          |t
                    sg	 t          t          t          |                              | |<   # t          $ r, t          t          d |D                                 | |<   Y w xY w| S )Nkeys__iter__c                ,    h | ]}t          |          S rz   )r  )r   rQ   s     rE   	<setcomp>z)_convert_lists_to_sets.<locals>.<setcomp>  s    '<'<'<Qa'<'<'<rG   )
r   rg   HashableDict_convert_lists_to_setsr^  r   r   r  rI   r   )_dictr   r   s      rE   r  r    s     ? ?11f 	?#$:1$=$=>>E!HHQ
## 	?Jq#,>,> 	??!$s1vv,,//a ? ? ?!$'<'<!'<'<'<"="=>>a?Ls   0,B3CCc                  (     e Zd ZdZ fdZd Z xZS )r  z]use hashable frozen dictionaries for resources and resource types so that they can be in setsc                X     t                      j        |i | t          |           } d S r@   )superr   r  )r|   r}   r~   	__class__s      rE   r   zHashableDict.__init__  s0    $)&)))%d++rG   c                H    t          t          j        | d                    S )NT)	sort_keys)hashr  dumpsr   s    rE   __hash__zHashableDict.__hash__  s    DJtt444555rG   )r   r   r   __doc__r   r  __classcell__r  s   @rE   r  r    sM        gg, , , , ,6 6 6 6 6 6 6rG   r  c                    g }|                                 D ]F\  }}|                     |          }|                     |          }|                    ||f           Gt          j                            d|          S )Nztag:yaml.org,2002:map)r   represent_datar   yamlnodesMappingNode)dumperr  r   item_key
item_valuenode_key
node_values          rE   represent_hashabledictr    s|    E $

 - -*((22**:66
h
+,,,,:!!"95AAArG   c               #    K   dd l } | j        | j        }}	 t                      t                      g}|\  | _        | _        |V  ||c| _        | _        |d                                         |d<   |d                                         |d<   d S # ||c| _        | _        |d                                         |d<   |d                                         |d<   w xY wr   )r   r   rW   r$   getvalue)r   oldoutolderrrt   s       rE   capturer    s      JJJZFF#zz8::&!$
CJ			!'
CJQ""AQ""A "(
CJQ""AQ""A""""s   /B ACc              #    K   t          |           t          |          }} t          j                            |           }	 |t          j        | <   |r
 |             d V  |r|t          j        | <   nt          j        | = |r |             d S d S # |r|t          j        | <   nt          j        | = |r |             w w xY wr@   )r   rA   r   r   )r  r   callbacksaved_env_vars       rE   env_varr    s       d))SZZ%DJNN4((M 
4 	HJJJ 	!,BJt
4  	HJJJJJ	 		  	!,BJt
4  	HJJJJ	s   B .B=c                   t                      }d}|                                 D ]\  }}t          |d          rt          |           |t	                      k    s|dk    s||t                      k    r|                    |           |s||v r|                    |           d| v r4t          d | d         D                       s|                    d           |D ]}| |= d S )N)finalnoarch_pythonzip_keysr  r^   r  c              3     K   | ]}|V  d S r@   rz   r   r   s     rE   r   z"trim_empty_keys.<locals>.<genexpr>  s"      &D&DQq&D&D&D&D&D&DrG   )rI   r   rg   trim_empty_keysr  r   rL   any)dict_	to_removenegative_means_emptyr   r   s        rE   r  r    s   IA 	 	11f 	A;;!r''QY!tvv++MM!  	Q...MM!U3&D&D%
2C&D&D&D#D#Dj!!!  !HH rG   c                    	 |rd}nd}t          t          |           dz             |z   }n/# t          $ r" t          t	          |           dz             }Y nw xY w|S )Naz.0a0r    )r   rq   rr   chrord)version	alpha_versuffixlast_versions       rE   
_incrementr    sw    - 	FFF3w<<!+,,v5 - - -3w<<!+,,-s   ), )AAx.x.x.x.x.x.xrx  c                .   d ||fD             }t          |           j        dd          }d }g }t          |          D ]G\  }}t          |t                    r|}|                    |           2|                    |           H|rEt          |                    d                    t          |          k    rt          |          |d<   ddg}	t          |          D ]\  }
}|rt          |d |                   D ]\  }}|
dk    r^||dz
  k    rUt          |t          |t          |          dz
                                                               }t          ||          }|	|
xx         t          |          z  cc<   ||k    r|	|
xx         dz  cc<   |	|
         d         dk    r|	|
         d d         |	|
<   |	d         r|                     d          rt          | d d                   }n<|                     d	          rt          | d d                   }nt          |           }|t          |	d                   k     r	d
| z   |	d<   nd
|	d         z   |	d<   |	d         rd|	d         z   |	d<   d                    d |	D                       S )Nc                Z    g | ](}|r"t          |                    d                     nd)S )r_   N)r   re   )r   ps     rE   rz  z)apply_pin_expressions.<locals>.<listcomp>  s4    III,CIIIrG   r    r_   r^   rN  r   .*r\   *z>=<r]   c                    g | ]}||S rz   rz   r  s     rE   rz  z)apply_pin_expressions.<locals>.<listcomp>  s    ...1A.Q...rG   )r&   r  r  r^  r  rm  r   r   re   r   minisalphar  r(  r   )r  min_pinmax_pinpinsparsed_versionnesting_position	flat_listr  r}  versionsp_idxpinv_idxr   r  version_orders                   rE   apply_pin_expressionsr    s   IIw6HIIID!'**21226NI~.. # #	TdD!! 	#"T""""T"""" !3w}}S))**S^^;;i..QBxH  oo 7 7
s 	7%io66 + +qA::%37"2"2 #Ic#s9~~7I.J.J$K L L T T V VI"1i00A3q66),,,UOOOs*OOOr"c))"*5/#2#"6{ -D!! 	2("66MMc"" 	2("66MM(11M<4444 .HQKK!,HQK{ (HQK'88.....///rG   z(.*[\\/])?\.git[\\/].*z(.*[\\/])?\.git$z(.*)?\.DS_Store.*z.*\.la$zconda-meta.*z.*\.conda_trash(?:_\d+)*$c                    |D ]H}t          j        |          }t          |           t          t          |j        |                     z
  } Ifd| D             S )zIRemove things like the .git directory from the list of files to be copiedc                   g | ]~}t           j                            t           j                            |                    r=t           j                            t           j                            |                    ||S rz   )rA   rD   r   r   r   )r   rS   r   s     rE   rz  z filter_files.<locals>.<listcomp>)  su       w}}RW\\&!4455 7>>"',,vq1122		  rG   )rl   ro  rI   r  r"  )
files_listr   filter_patternsru   r   s    `   rE   filter_filesr    sv     # H HJw__s6!':+F+F'G'GG

      rG   c                &    t          | |d          S )N)zinfo[\\/]index.jsonzinfo[\\/]fileszinfo[\\/]paths.jsonzinfo[\\/]about.jsonzinfo[\\/]has_prefixzinfo[\\/]hash_input_fileszinfo[\\/]hash_input.jsonzinfo[\\/]run_exports.yamlzinfo[\\/]run_exports.jsonzinfo[\\/]gitzinfo[\\/]recipe[\\/].*zinfo[\\/]recipe_log.jsonzinfo[\\/]recipe.tarzinfo[\\/]test[\\/].*zinfo[\\/]LICENSE.txtzinfo[\\/]licenses[\\/]*zinfo[\\/]prelink_messages[\\/]*zinfo[\\/]requireszinfo[\\/]metazinfo[\\/]platformzinfo[\\/]no_linkzinfo[\\/]link.jsonzinfo[\\/]icon.png)r  )r  )r  r   s     rE   filter_info_filesr  1  s$    
   rG   c                     t          |           S r@   )_rm_rf)rD   r/  s     rE   r1   r1   Q  s    $<<rG   c                  &     e Zd Zd fd	Zd Z xZS )LessThanFilterr^   c                X    t                                          |           || _        d S r@   )r  r   	max_level)r|   exclusive_maximumr  r  s      rE   r   zLessThanFilter.__init__W  &    *rG   c                *    |j         | j        k     rdndS Nr    r   )levelnor  r|   records     rE   r  zLessThanFilter.filter[      NT^33qq:rG   r^   r   r   r   r   r  r  r  s   @rE   r  r  V  L        + + + + + +; ; ; ; ; ; ;rG   r  c                  &     e Zd Zd fd	Zd Z xZS )GreaterThanFilterr^   c                X    t                                          |           || _        d S r@   )r  r   	min_level)r|   exclusive_minimumr  r  s      rE   r   zGreaterThanFilter.__init__a  r	  rG   c                *    |j         | j        k    rdndS r  )r  r  r  s     rE   r  zGreaterThanFilter.filtere  r  rG   r  r  r  s   @rE   r  r  `  r  rG   r  c                      e Zd Zd Zd ZdS )DuplicateFilterc                ,    t                      | _        d S r@   )rI   msgsr   s    rE   r   zDuplicateFilter.__init__l  s    EE			rG   c                z    |j         | j        v}| j                            |j                    t          |          S r@   )msgr  rL   rq   )r|   r  r   s      rE   r  zDuplicateFilter.filtero  s1    j	)	fj!!!3xxrG   N)r   r   r   r   r  rz   rG   rE   r  r  k  s2              rG   r  z%(levelname)s: %(message)sr=  zconda.core.linked_datar  zconda.gateways.disk.testc                 "    t                      adS )zMost of the time, we want the deduplication.  There are some cases (tests especially)
    where we want to be able to control the duplication.N)r  dedupe_filterrz   rG   rE   reset_deduplicatorr!    s     $%%MMMrG   c           	        d }t          j        d          r;t          t          t	          t          j        d                                        }|rt          |          5 }t          j        |          }d d d            n# 1 swxY w Y   t          j	        
                    |           |                    di                               | i                               d|          }t          j        |           }|                    |           |r|                    t                     |                     d          d         }|dk    r%dt           j        v t          j        |          _        |r|j        st          j        t*          j                  }	t          j        t*          j                  }
|	                    t0                     |
                    t2                     |
                    t6                     |	                    |           |
                    |           |                    |	           |                    |
           |S )Nlog_config_filer  r  r_   r   r  PYTEST_CURRENT_TEST)r'   r   r   r   r   r  r  	safe_loadr  r/  
dictConfigr  r  	addFilterr   re   rA   r   	propagatehandlersStreamHandlerr   r   rW   info_debug_stdout_filterwarning_error_stderr_filtersetFormatterlevel_formatterr  )r  r  dedupeadd_stdout_stderr_handlersconfig_filerS   config_dictr   top_pkgstdout_handlerstderr_handlers              rE   r   r     sJ   K+,, 
z."45F"G"GHHII
 

  Q+ 	,!.++K	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	, 	,!!+...	2..224<<@@%PP

D
!
!CLL %m$$$ jjooa G- 0E
/R'"",! 	'#, 	' .sz:: .sz::  !9:::  !<===##O444&&&&&&~&&&~&&&Js   #BBBc                ^   || k    }t          |t                    rt          | t                    rt          j                            |           sZt          j                            t          j                            t          j                            ||                               } t          j                            |          sZt          j                            t          j                            t          j                            ||                              }|| |k    z  }|S r@   )r^  r   rA   rD   rb  r   r  r   )
base_valuer   rD   
equivalents       rE   _equivalentr9    s    *$J% **Z"="= *w}}Z(( 	  dJ!?!?@@ J w}}U## 	QGOOBG$4$4RW\\$5N5N$O$OPPEjE))
rG   r^   c           	        | |k    r| S t          t                    }|                                D ]\  }}|| v s|r|                     ||          }	t	          |d          rt          |	||||          }	|	| |<   Mt	          |d          r|t          |t                    sg|r_|	|k    r0	 |	                    |           n# t          t          f$ r |}	Y nw xY w	 t          |	          | |<   # t          $ r |	| |<   Y w xY w|| |<   |	r3|r1t          |	||          s |r|                    d| d|	 d|            |	|| v r| |= || |<    | S )Nr  )raise_on_clobberr  zclobbering key z (original value z) with value )r   r   r   r   rg   merge_or_update_dictr^  r   rm  r   AttributeErrorr  r9  rf  )
basenewrD   merger;  add_missing_keysr   r   r   r7  s
             rE   r<  r<    s    s{{
X

Ciikk "& "&
U$;;*;#u--Juf%% &1tUEU  
 'S		
++ &Juc4J4J & &!U**/&--e4444 )>: / / /).JJJ//$($4$4S		$ / / /$.S			/ !&DII  (
E4@@ )	 II`#``
``Y^``   =SD[[S		 %DIKs$   ,CCCC//D Dc                p     t                                                   }g  fd|D             S )zI
    From Alex Martelli: https://stackoverflow.com/a/1495821/3257826
    c                l    i | ]0}|                     |                               |          z   1S rz   )r   )r   r   dol1dol2nos     rE   r   z(merge_dicts_of_lists.<locals>.<dictcomp>  s8    ???QAtxx2!R0???rG   )rI   union)rD  rE  r  rF  s   `` @rE   merge_dicts_of_listsrH    sC     t99??4  D	B??????$????rG   c           	        t                      }| t          j        j        z   }t	          |           D ]\  }}}|D ]:}|                    t          ||                              |dd                     ;|D ]o}t          ||          }t          |          rN|                    |                    |dd                     |	                    t          |f|                      p|S )z/
    Returns a set of all files in prefix.
    r^   r    )rI   rA   rD   rO  r   rL   r   ro   r   r   ru  )	r   res
prefix_reprP   r  rR   fndnrD   s	            rE   prefix_filesrN    s     %%C"'+%J!&\\ : :dE 	? 	?BGGDrNN**:r1==>>>> 	: 	:Bb>>Dd|| :ZQ77888

<88999		:
 JrG   c                    t           r2|rt          j        | ||||          S t          j        | ||          S |rt          j        | |||||          S t          j        | |||          S )a;  
    Hides the differences between mmap.mmap on Windows and Unix.
    Windows has `tagname`.
    Unix does not, but makes up for it with `flags` and `prot`.
    On both, the default value for `access` is determined from how the file
    was opened so must not be passed in at all to get this default behaviour.
    )tagnameaccessoffset)rP  )r  protrQ  rR  )r  rS  )ra   mmap)filenolengthrP  r  rS  rQ  rR  s          rE   	mmap_mmaprW    s       E 	>9v    9VVW==== 	E9e$vf    9VV5tDDDDrG   c                   t           r!t          j                            | d          }n t          j                            | d          }t          j                            |          rt          j        |          D ]}t          j                            ||          }t          j                            |          r8|                    t          j                  dk    rt          j	        |           yt          j        
                    |          r)|                    d          rt          j        |           dS dS )z9Remove pip created pycache directory from bin or Scripts.r7   r8   __pycache__z.pycN)ra   rA   rD   r   r   r  rj   rO  rE  rmtreer   r(  rY  )build_prefixscripts_pathr  
entry_paths       rE   remove_pycache_from_scriptsr^  #  s    9w||L)<<w||L%88	w}}\"" &Z-- 	& 	&ElE::Jw}}Z(( &U[[-@-@M-Q-Qj))))
++ &
0C0CF0K0K &	*%%%& &	& 	&rG   c                `   |                                  D ]\  }}t          |t                    r|                                D ]}| |         |         }t          |t                    rt	          |           5t          |t
                    r6| d| |vr-t          d |D                       r|                                 t          |t
                    rQ|D ]&}t          |t                    rt	          |           '	 |                                 # t          $ r Y w xY wdS )a6  Recurse through a nested dictionary and sort any lists that are found.

    If the list that is found contains anything but strings, it is skipped
    as we can't compare lists containing different types. The omissions argument
    allows for certain sections of the dictionary to be omitted from sorting.
    r  c              3  @   K   | ]}t          |t                    V  d S r@   )r^  r   )r   r}  s     rE   r   z0sort_list_in_nested_structure.<locals>.<genexpr>D  s,      FFdJtS11FFFFFFrG   N)	r   r^  r   r  sort_list_in_nested_structurer  rb  sortr   )
dictionary	omissionsfieldr   r   sectionelements          rE   ra  ra  4  sd    #((**  ueT"" 	zz|| 	# 	#$U+C0gt,, #1'::::w--# ((3((	99FFgFFFFF : LLNNN	# t$$ 	  ; ;gt,, ;1':::

   	 s   D
D)(D)zD([\w\d\.\-\_]+)\s+((?<![><=])[\w\d\.\-\_]+?(?!\*))(\s+[\w\d\.\_]+)?$z^([0-9a-zA-Z\.]+)$c                   t          | t                    rt          | d          r| j        r|                     dd          st
                              t          | j                            rxt          | j                  dvst          | j                  dk    rJt          d	                    t          | j                  t          | j                  dz                       } nt                              |           }|r|                    d          s|                    d	          dv r5|                    d
          dk    rt                              d|           } ned| vra|                    d	          dvr/|r-t          t                    }|                    d|  d           t                              d|           } | S )Nr  buildr^   )r  numpyzx.xz{} {}r  r   r    r[   z\1 \2r  )r  vczAdding .* to spec 'aK  ' to ensure satisfiability.  Please consider putting {{{{ var_name }}}}.* or some relational operator (>/</>=/<=) on this spec in meta.yaml, or if req is also a build req, using {{{{ pin_compatible() }}}} jinja2 function instead.  See https://conda.io/docs/user-guide/tasks/build-packages/variants.html#pinning-at-the-variant-levelz\1 \2.*)r^  r"   rg   r  r   spec_ver_needing_star_rer"  r   r  rd   spec_needing_star_rern   rk  r   r   r   )specr   r"  r   s       rE   ensure_valid_specro  b  s   $	"" FD)$$				 XXgr**		 )..s4</@/@AA			 49~~%888C<M<MQV<V<V NN3ty>>3t|3D3Dt3KLL  %**400 	FQ 	F{{1~~!444Q59P9P+//$??d??{{1~~-===$=(22$      033JEEDKrG   c                `  
 t          |                     d                    t          |                     d                    z   }t          |                     |                    }|                                D ]\  }}t          j        d|                    dd          z            

fd|D             }t          |          rt          |          D ]\  }}	|	r|dv s|	                    d          |v rk||= t          |t                    s|d	         }|                    |t          d
                    |	                    d          |f                               t          j        d          fd|D             }t          |          rt          |          D ]{\  }}	|	rt||= |                    |t          d
                    |	                    d          |                    |	                    d                    f                               ||r|| |<   d S d S )Nri  hostz^(%s)(?:\s*$)rQ   z[-_]c                :    g | ]}                     |          S rz   r"  )r   pkgregexs     rE   rz  z+insert_variant_versions.<locals>.<listcomp>  s%    4445;;s##444rG   )ri  rq  r    r   r`   z([0-9a-zA-Z\.\-\_]+)\s+x\.xc                :    g | ]}                     |          S rz   rs  )r   rt  xx_res     rE   rz  z+insert_variant_versions.<locals>.<listcomp>  s%    000Cu{{3000rG   )r  r   r   rl   ro  ro   r  r  rn   r^  r   r  ro  r   )requirements_dictrG  r   
build_depsreqsr   valmatchesr  rx  ru  rw  s             @@rE   insert_variant_versionsr}    sH   .227;;<<{f%%@ @ J (,,S1122DMMOO 	S 	SS
+ckk#v.F.FFGG4444t444w<< 	S!'** S S1 S#!222aggajjJ6N6NQ%c3// %!!fKK#4SXXqwwqzz3>O5P5P#Q#QRRRJ566E00004000G
7|| g&& 	 	DAq G%chh

GKKPQ

<S<S/T&U&UVV    &!%#& &rG   c           	        |                                 |                                d}}}|                     t          ||||                                                    }d}|rX|                                }|                                D ]/}	|	|v r)||j        j        |	         |j        j        |	         k    z  }0|o|S )a  target_matchspec comes from the recipe.  target_variant is the variant from the recipe whose
    deps we are matching.  m is the peer job, which must satisfy conda and also have matching keys
    for any keys that are shared between target_variant and m.config.variantr^   )r  r  ri  build_numberT)r  r  r"  r#   r  get_used_loop_varsr/  rG  )
target_matchspecother_mthis_mr  r  ri  matchspec_matchesvariant_matchesother_m_used_varsr   s
             rE   match_peer_jobr    s     #<<>>7??+<+<b5'D(.. --//		
 	
 	
  O Y#6688**,, 	Y 	YA%%%6=#8#;w~?UVW?X#XX00rG   c                    t          | d          s;t          |           d d          }|rt          |          t          |          dni } n| D ]}t          | |                   | |<   | S )Nr  )rq  run)rg   r  )
reqs_entryoriginalsecs      rE   expand_reqsr    s    :v&& 	;z**111- [**;x3H3HIII 	
  	; 	;C)*S/::JsOOrG      c                `   t          |           rt          |           sdS t          |           sd S t          j                    }t	          | d          5 t          fdd          D ]}|                    |           	 d d d            n# 1 swxY w Y   |                                S )N@e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855r<  c                 .                                    S r@   )r   )
buffersizerS   s   rE   r   z!sha256_checksum.<locals>.<lambda>  s    !&&"4"4 rG   rG   )r   r   r  r  r  r_  r   r  )r  r  r  r  rS   s    `  @rE   sha256_checksumr    s   h Rx 0 0 R RQ( t^F	h		 !44444c:: 	! 	!EMM%    	!! ! ! ! ! ! ! ! ! ! ! ! ! ! ! s   -BBBc           	         ddl m} |                     dt           d           |j        rt          |j        j        dd          }t          |          s_t          t          |                    s!t          j        t          |                     t          |d                                           |                     dt           d|j        j         d	           |                     dt           d
|j        j         d	            |d|j        j        d          }|rt!          |t"                    r|d         }i }d|d<   d|d<   d|d<   t%          |j        d          rd||j        j        <   |                                D ]q\  }}|rf|dk    r3|                     d| d           |                     d| d           B|dk    rt          |j        j        d          }|                     d| d           |                     d| d           dD ]o}	|                     d|	 d| d           |                     d|	 d| d           |                     d|	 d| d           |                     d |	 d| d           |                     d!|	 d| d           |                     d"|	 d| d           |                     d#|	 d| d           |                     d$|	 d| d           |                     d%|	 d| d           |                     d&|	 d| d           |                     d'|	 d| d           |                     d(|	 d| d           |                     d)|	 d| d           q|                     d*           |                     d+| d,t          j        
                    |           d-           X|dk    r`t-          d.           qd S d S )/Nr    r  zcall "z\..\condabin\conda_hook.bat"
r  historyr  z"\..\condabin\conda.bat" activate "z"
z*\..\condabin\conda.bat" activate --stack "ccacheFr   env_varsrg  nativeccache_methodTzset "CC=z %CC%"
z	set "CXX=z %CXX%"
zccache-ln-binzmkdir r  zpushd )r(  r^   z	mklink clr`   zmklink linkz
mklink gccz
mklink g++z	mklink ccz
mklink c++z	mklink asz	mklink arz	mklink nmzmklink ranlibzmklink gcc-arzmklink gcc-nmzmklink gcc-ranlibzpopd
z	set PATH=;z;%PATH%
z ccache method {} not implemented)r  r  r   root_script_diris_crossr   r/  r*  r   r   r   rA   rW  r  r   r[  r^  r  rg   r  r   rD   r0  )
file_handler"  r  history_filer  ccache_methodsmethodr   dirname_ccache_ln_binexts
             rE   write_bat_activation_textr    s   222222QQQQRRRz 
" AH0,	JJl## 	,..// 3GL11222s##))+++d_dd18K_ddd	
 	
 	

 iiiqxOdiii   _Xqx'<eDDF *>fd## 	AYF%*z"%*z"#(x 18_-- 	:59N1812+1133 !	> !	>MFE  >Z''%%&A&A&A&ABBB%%&C&&C&C&CDDDDz)),01F,X,X)%%&H/D&H&H&HIII%%&H/D&H&H&HIII+ P P#))*Fc*F*FF*F*F*FGGG#))*H*H*Hf*H*H*HIII#))*Gs*G*GV*G*G*GHHH#))*Gs*G*GV*G*G*GHHH#))*Fc*F*FF*F*F*FGGG#))*Gs*G*GV*G*G*GHHH#))*Fc*F*FF*F*F*FGGG#))*Fc*F*FF*F*F*FGGG#))*Fc*F*FF*F*F*FGGG#))*J#*J*J*J*J*JKKK#))*J#*J*J*J*J*JKKK#))*J#*J*J*J*J*JKKK#))*Nc*N*NF*N*N*NOOOO%%h///%%^$9^^BGOOF<S<S^^^    x''<===U*> *>!	> !	>rG   c                X   |                      d          s	| t          vrt          |                                           }d |D             }i }|D ]}t	                      5 }t
          j                            |d          }	 t          |dz   |           t          |          5 }t          j        |          }d d d            n# 1 swxY w Y   n# t          t          f$ r i }Y nw xY wd d d            n# 1 swxY w Y   t          ||           |t          | <   nt          |          }|S )Nzfile://c                F    h | ]}|                     d d          d         S )r  r    r   )rk   )r   urls     rE   r  z'download_channeldata.<locals>.<setcomp>/  s+    666#

3""1%666rG   zchanneldata.jsonz/channeldata.json)r  channeldata_cacher*   urlsr%   rA   rD   r   r)   r  r  r  r	   r!   r<  )channel_urlr  r  r  rQ  tfrS   new_channeldatas           rE   download_channeldatar  +  s   i(( .K?P,P,P --224466666 		8 		8C#%% )W\\"&899)S#66;;;b 7Q*.)A,,7 7 7 7 7 7 7 7 7 7 7 7 7 7 7'8 ) ) )&(OOO)) ) ) ) ) ) ) ) ) ) ) ) ) ) ) !7777)-+&& -KsZ    !C6"C$C9CC		CC	CC6C'$C6&C''C66C:	=C:	z24.1.0z24.3.0r   dict[Dist, PrefixRecord]c                    t          |           } d t          t          |                                                     D             S )zt
    Return a dictionary of the linked packages in prefix, with correct channels, hopefully.
    cc @kalefranz.
    c                Z    i | ](}t          j        |j        |j        j                   |)S ))channel_override)r   from_stringrL  channelr  )r   precs     rE   r   z0linked_data_no_multichannels.<locals>.<dictcomp>J  sA        	4<3DEEEt  rG   )r   r   r   iter_records)r   s    rE   linked_data_no_multichannelsr  A  sJ     &\\F s6{{++88::   rG   c                j   t          t                    }|                    d| d|  d| d           d}|dk    rt          j                            |          rt          |           	 |                    d| d|  d	| d
           t          j        | |           |dk    r$|	                    d| d|  d	| dd|z
              d}n#  |dz
  }Y nxY w|dk    r.|	                    d| d           dd l
} |j        d           n|dk    r|                    d| d           |dk    d S d S )Nz	Renaming z directory 'z' to ''   r   zshutil.move(z)=z, dest=)=z) succeeded on attempt number    rN  r    zFailed to rename zY directory, check with strace, struss or procmon. Will sleep for 3 seconds and try again!r   z) directory despite sleeping and retrying.)r   r   r&  rA   rD   r2  r1   rE  rs  warningr   r   rn  )rI  re  
debug_namer   attempts_leftr   s         rE   shutil_move_more_retryingr  P  s   
X

CHHCCCCCDCCCDDDM
!

7>>$ 	$KKK		.HHEJEE#EEdEEEFFFKT"""!!s:ssssDss`adq`qss   MM	.)A-MMM1KK:J : : :   KKKDJqMMMMb  IIYJYYY  - !





s   +A C Cpkg_pathboolc                    t          |                                           ot          fdt          D                       S )zD
    Determines whether string is pointing to a valid conda pkg
    c              3  L   K   | ]}j                             |          V  d S r@   )r  r(  )r   r  rD   s     rE   r   zis_conda_pkg.<locals>.<genexpr>w  s3      HHDIs##HHHHHHrG   )r   is_filer  r   )r  rD   s    @rE   is_conda_pkgr  p  sF     >>D<<>> HHHH/GHHHHHrG   r  r#   c                4    | j          d| j         d| j         S )Nr`   )r  r  ri  )r  s    rE   package_record_to_requirementr  {  s$    i55$,55555rG   )rS  FNTF)FNF)FrS  NTF)rS  )TNrS  )r  )r  )r   r  r  r   r  r   r@   )r  r  r  r  )F)T)rJ  )FT)r  rx  )r  )r^   TFTr  )r  )r   r  r  r  )r  r   r  r  )r  r#   r  r   )
__future__r   
contextlibr  r  r  r  logging.configrT  rA   rl   rE  rB   rb   r   r  r*  r   urllib.parseparser  urllib.requestrequestr  collectionsr   r   	functoolsr   r   	itertoolsr   json.decoderr	   localer
   r   os.pathr   r   r   r   r   r   r   r   r   r   pathlibr   	threadingr   typingr   r,  r5  r=  r  r  conda.base.constantsr   r   r   r   conda.core.prefix_datar   conda.models.distr   conda.models.recordsr   conda_interfacer!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r  deprecationsr2   
exceptionsr3   platformra   on_macon_linuxr   rD   r  MAP_PRIVATEmmap_MAP_PRIVATE	PROT_READmmap_PROT_READ
PROT_WRITEmmap_PROT_WRITErI   DEFAULT_SUBDIRSRUN_EXPORTS_TYPESr)  rx  rF   rT   rv   rx   r   r   r  r  r
  r  r$  r8  contextmanagerrB  rL  rR  rq  ru  r  r`  r  rd  r  r)  r  r  r  r/  r  r  r  r  r  r  r   r  r  r  r  r  r  r4  ro  r!  r$  r2  r7  r:  r=  rD  rI  rT  r  rW  r  ru  r{  r}  r  r  r   r  r  add_representerr  r  r  r  r  r  r  Filterr  r  r  r   WARNINGr+  r  r,  	Formatterr.  r  r  r  r!  r   r9  r<  rH  rN  rW  r^  ra  rm  rl  ro  r}  r  r  r  r  r  r  r  r  r  r  rz   rG   rE   <module>r     s^   # " " " " "              				 				       



                0 0 0 0 0 0 0 0             ! ! ! ! ! ! ( ( ( ( ( ( ' ' ' ' ' '                                                ! ! ! !                  . - - - - - " " " " " " - - - - - -                                   $ - , , , , , $ $ $ $ $ $ & & & & & &		 		!<7")'',,xf)G%HH411D$4 0$.2!!4?#m$$   
 C 4    (" " "J       
/ / /dp
 p
 p
 p
 p
 p
 p
 p
f4 4 4nL L L    "& & &$ $ $D ' ' 'ZQ Q Q,8 8 8 MRE E E EP  " " " "L MR. . . .L GLL7##Grw||C)=>>??   D   & "   @  *    2  A A A A A&( ( (&, , , ,0	 	 		 	 	@ @ @  I I IO O O O
   .     	& 	& 	& 	& ",iiuBJDEE	    .E E E, , ,    0     2   &: : : :z     <+ + +\<# <# <# <# <# <# <# <#B
 
 
	 	 	6 6 6 6 64 6 6 6	B 	B 	B  \#9 : : : # # #    &  &	 	 	-0 -0 -0 -0f   0  @   
; ; ; ; ;W^ ; ; ;; ; ; ; ; ; ; ;    gn     !!)>'/:: //== #'#$@AA  *   & &w| 4 4 4  * + + 4 4W\ B B B  . / / 8 8 F F F  , - - 6 6w| D D D& & & #<QU " " " "J
 
 
 NR) ) ) )X@ @ @  * 
	/	)E E E E@& & &"   P "rzK   &2:&;<<    D& & &>1 1 1 1.     O> O> O>d    , Hh      @   6 6 6 6 6 6rG   