
    8xd                    8   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mZmZ d dlmZ d dlmZmZmZ d dlmZ d dlZd dlZd dlmZ d dlmZmZmZ d dlmZ d d	l m!Z!m"Z" d d
l#m$Z$m%Z%m&Z& ddl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z- ddlm.Z.m/Z/ d Z0 ej1        e2ej3        j4        j5                    ej1        e6ej3        j4        j5                    ej1        ee0           d Z7d Z8d Z9	 	 	 d6dZ:d Z;d Z<d Z=	 d7d8d Z> ed!          d"             Z?d9d#Z@d$ ZAd% ZBd& ZCd' ZDd9d(ZEd7d)ZFd* ZG	 	 	 d:d+ZHd, ZI	 	 	 	 	 d;d-ZJg d.ZK G d/ d0eL          ZMd1 ZNd2 ZO G d3 d4ejP                  ZQ ej1        eMeN            ej1        eReO           dZSd9d5ZTdS )<    )annotationsN)OrderedDictdefaultdict)	lru_cache)abspathisdirisfile)Path)environ
exceptionsutils)DependencyNeedsBuildingError)MetaData&combine_top_level_metadata_with_output)filter_by_key_valueget_package_variantslist_of_dicts_to_dict_of_lists   )ProgressiveFetchExtractTemporaryDirectoryUnsatisfiableErrorexecute_actions	pkgs_dirsspecs_from_url)CONDA_PACKAGE_EXTENSION_V1CONDA_PACKAGE_EXTENSION_V2c                P    |                      |                                          S N)represent_dictitemsdumperdatas     2lib/python3.11/site-packages/conda_build/render.pyodict_representerr%   -   s      ...    c                ^   | j         s| j        rdn| j        j        }t	          | d          s| j        j        dk    rd}n
d}n| j        }|dk    rGt          j        	                    | j        j
        ||                                  t                     }n|dk    rGt          j        	                    | j        j
        ||                                  t                     }nI| j         d|                                  dt          j        	                    | j        j
        |           }|S )zI
    Returns path to built package's tarball given its ``Metadata``.
    noarchtype2conda_v2condaz
 file for z in: )r(   noarch_pythonconfighost_subdirhasattrconda_pkg_formatr)   ospathjoinoutput_folderdistr   r   name)msubdirpkg_typer3   s       r$   bldpkg_pathr;   6   s!    NQ_NXX!(:NF1f 8$++!HHHH6 7w||H"Fqvvxx,U9S,U,U
 
 
Z		w||H"Fqvvxx,U9S,U,U
 
 &aaAFFHHaa27<<@VX^3_3_aaKr&   c                2    d| v rd | d         D             S g S )NLINKc                    g | ]H}d                      |j                                        d                             dd                    IS ) r   -   )r4   	dist_namesplitrsplit.0specs     r$   
<listcomp>z#actions_to_pins.<locals>.<listcomp>T   sW     
 
 
 HHT^))++A.55c1==>>
 
 
r&    )actionss    r$   actions_to_pinsrK   R   s9    
 

 
 
 	
 Ir&   c           	     2   g }g }g }t          j        d          }|D ]u}|r|                    |          s0d}	|                                d         }
|                     d          D ][}|                    d          }||
k    r>|                    d                    ||                                 f                     d}	\|	s|                    |           |	                                D ]u\  }}|
                    d|          |
                    d|
          k    rBt          j        d	|
z  |          s*|                    d                    |
|f                     vK|                    |          r|                    |           w|||fS )
Nz[-_]Fr   outputsr7   r?   T z%s\s+[0-9a-zA-Z\_\.\<\>\=\*])recompilematchrC   get_sectiongetappendr4   versionr    subsearch)r8   specsexclude_patternvariantsubpackagesdependenciespass_through_depsdash_or_underrG   is_subpackage	spec_nameentryr7   keyvalues                  r$   _categorize_depsrd   [   s   KLJv&&M + + 	+o&;&;D&A&A 	+!M

QIy11 ) )yy((9$$&&sxxqyy{{0C'D'DEEE$(M  *##D)))%mmoo F F
U $$R--1B1B	2 2  )$Ci$OQUVV !'')U1C(D(DEEEF ""4(( 	+$$T***&777r&   FTc                   |                      |          }|dv r{g }|D ]t}d|v rY|                                d         }	|                    d                    |	|                    |	d          f                     _|                    |           u|}t          | |||          \  }
}}t          |          }d }d                    d t          d          D                       }t          d|	          5 }	 t          j
        |t          |          |t          | j        | d
          | j        j        | j        j        | j        j        t          | j        j                  | j        j        | j        j        | j        j        | j        j        t          | j        j                            }nV# t.          t0          f$ rB}t3          |d          rd                    |j                  }n|j        }|ri }n Y d }~nd }~ww xY wd d d            n# 1 swxY w Y   t9          |          }t;          j        ||
z   |z   p.| j                            di                               |g                     ||fS )N)buildhostz x.xr   r?   rN   c              3  l   K   | ]/}t          j        t          j        t          j        z             V  0d S r   )randomchoicestringascii_uppercasedigits)rF   _s     r$   	<genexpr>z'get_env_dependencies.<locals>.<genexpr>   sG        BCf,v}<==     r&   
   rn   )prefixsuffix_subdir)
r9   debugverboselockingbldpkgs_dirstimeoutdisable_pipmax_env_retryr5   channel_urlspackagesz, requirements) get_depends_top_and_outrC   rT   r4   rS   rd   setranger   r   get_install_actionstuplegetattrr.   rt   ru   rv   rw   rx   ry   rz   r5   r{   r   r   r0   r|   messagerK   r   ensure_listmeta)r8   envrZ   rY   permit_unsatisfiable_variants!merge_build_host_on_same_platformrX   no_xx_specsrG   pkg_namer[   r\   r]   unsatrandom_stringtmpdirrJ   es                     r$   get_env_dependenciesr   x   s    %%c**E
 	) 	)D~~::<<?""388Xw{{8R7P7P,Q#R#RSSSS""4((((3C	5/74 40K0 |$$LEGG  GLRyy    M 
3}	=	=	= 	1l##qxC99hn(("18#899(H0h4h4"18#899  GG #$@A 		 		 		q*%% "		!*--	,  		#              8 G$$E[ #44 ;vzz."--11#r::	
 	
 	 s=   9H;B8F43H4H8H=HHHHHc                    t          | d          r|                                 } d| v r|                     d          d         } | S )Ndecode:z::)r0   r   rC   )spec_strs    r$   strip_channelr      sG    x"" %??$$
h>>$''+Or&   c                ^   |                                 }|d         }d}t          |          dk    r|d         }d }|                    |          p| j        j                            |          }|r|| j        j                            di           v r|dk    r| j        st| j        sm||v ri| j        j        d         |         }t          |t                    rt          ||          }t          j        |                                 d         fi |}nl|                    d          rWd	|v rS|                    |          st          d
          t          j        |                                 d         d	d	          }|r*d                    |||f                                          }|S )Nr   rN      rA   pin_run_as_buildpythonmin_pinmax_pinnumpyx.xz9numpy x.x specified, but numpy not in build requirements.r?   )rC   lenrS   r.   rZ   r(   r-   
isinstancestrdictr   apply_pin_expressions
startswith
ValueErrorr4   strip)	r8   depbuild_dep_versions	dep_splitdep_namerf   pinrU   pin_cfgs	            r$   get_pin_from_buildr      s   		I|HE
9~~!
C $$X..P!(2B2F2Fx2P2PG
(,,-?DDDDX%%18%q%***("#56x@gs## 	=7G<<<G)'--//!*<HHHH		 	  
Uc\\!%%h// 	K   )MMOOAu
 
 
  7hh#u-..4466Jr&   c                   i }|                                  D ]f\  }}|D ]^t          d          r                                t          fd|D                       s|                    |g           gz   ||<   _g|S )Nr   c              3  `   K   | ](}|d k    p|k    p                     |dz             V  )dS )*r?   N)r   )rF   ignore_specrG   s     r$   ro   z&_filter_run_exports.<locals>.<genexpr>   sd          	  3& :{*:{S'899	     r&   )r    r0   r   anyrS   )rX   ignore_listfiltered_specsagent
specs_listrG   s        @r$   _filter_run_exportsr      s    N"[[]] O Oz 	O 	ODtX&& %{{}}     $/     O )7(:(:5"(E(E(Nu%	O r&   distributionr   r8   r   
files_onlyboolreturn
str | Nonec                   t          t          g t          |j        j        R           D ]M}|| t
          z   z  }|                                rt          |          c S || z  }|                                r|st          |          c S 	 t          j
        |dz  dz                                            d         }n## t          t          f$ r |j        j        }Y nw xY wt          |j        j        || t
          z             }t!          j        |d          5 }|                                D ]}|                    ||j                   	 d d d            n# 1 swxY w Y   t          |          c S Od S )Ninfoz
index.jsonr9   zw:bz2)arcname)mapr
   r   r.   rw   r   is_filer   is_dirjsonloads	read_textFileNotFoundErrorKeyErrorr/   croottarfileopeniterdiraddr7   )	r   r8   r   cachepackage	directoryr9   archivera   s	            r$   !find_pkg_dir_or_file_in_pkgs_dirsr      s    T?Y?)>??@@    <*DDE?? 	 w<<L(	 	  &9~~%%%.Y%7,%F$Q$Q$S$STT &x0 . . .-. 7Q(Q G gw// ;7&..00 ; ;EKKuzK::::;; ; ; ; ; ; ; ; ; ; ; ; ; ; ; w<<)	    s$   2B??CC4EE	"E	)maxsizec                   i }| rht           j                            |           rHt           j                            | d          }t           j                            |          rHt          |          5 }dd |                                D             i}d d d            n# 1 swxY w Y   nt           j                            |dz             r?t          |dz             5 }t          j        |          }d d d            n# 1 swxY w Y   n`t           j                            |dz             r>t          |dz             5 }t          j
        |          }d d d            n# 1 swxY w Y   |s| rt           j                            |           rxt          j        | d          }t          j        | d          }t          |d          r|                    d	          }|rt          j        |          }n|rt          j        |          }nt          j        | d          }|rt!                      }t          |d          r|                    d	          }|                                D ]}}	t          |	d          r|	                    d	          }	|	                    |                    d
d          d                   s'|                    |	                                           ~dt-          t/          |                    i}|S )Nzinfo/run_exportsweakc                6    g | ]}|                                 S rI   )rstriprE   s     r$   rH   z,_read_specs_from_package.<locals>.<listcomp>  s     !J!J!JD$++--!J!J!Jr&   .yamlz.jsonzinfo/run_exports.yamlzinfo/run_exports.jsonr   zutf-8r@   rA   r   )r2   r3   r   r4   r	   r   	readlinesyaml	safe_loadr   loadr   package_has_filer0   r   r   r   
splitlinesr   rD   r   r   sortedlist)
pkg_locpkg_distrX   downstream_filef
specs_yaml
specs_jsonlegacy_specs
weak_specsrG   s
             r$   _read_specs_from_packager     s   E %27==)) %',,w0BCC7>>/** 		%o&& L!!J!JAKKMM!J!J!JKL L L L L L L L L L L L L L L W^^Og566 	%o/00 *Aq))* * * * * * * * * * * * * * *W^^Og566 	%o/00 %A	!% % % % % % % % % % % % % % % ;W ;!8!8 ;+G5LMM
+G5LMM
:x(( 	4#**733J 	;Jz**EE 	;N:..EE 1';MNNL 	; UU
8X.. 8'w77H(3355 6 6DtX.. 4#{{733??8??3+B+B1+EFF 6"t{{}}555Z(8(8!9!9:Ls6   4!B!!B%(B%!DD	DE##E'*E'c                   t          | j        | d          }t          j                            || j        j        | j        j        dd| j        j        | j        j        | j        j	        | j        j
        | j        j        
  
        \  }}}d |                                D             }d|v sd|v rt          ||| j        j                   i }	|                    dg           }
t          j        |          }t#                      }|rr|D ]m}t%          |d	          r||
v r|                    |           ,|                                d
         }|
D ]$}||j        k    r|                    |            n%n|}
|
D ]F}t%          |d          r|j        n*t/          |          }|                    d          d
         t1          | |          }|s	 fd|D             d
         }t3          ||         f          }n"# t4          $ r t3          |g|          }Y nw xY wt          j                    5  |                                 d d d            n# 1 swxY w Y   t:          D ]P}t<          j                             |||         j!                  }t<          j        "                    |          r|} nQ|f|	|<   H|	S )Nrs   F)
r9   bldpkgs_dirr5   clear_cacheomit_defaultsr{   rt   ru   rv   rx   c                "    i | ]\  }}|d v 	||S ))FETCHEXTRACTPREFIXrI   )rF   kvs      r$   
<dictcomp>z,execute_download_actions.<locals>.<dictcomp>Q  s0       AA1O,O,O1,O,O,Or&   r   r   )ru   r=   r7   r   rB   r?   )r   c                *    g | ]}|j         k    |S rI   )rB   )rF   rn   r   s     r$   rH   z,execute_download_actions.<locals>.<listcomp>y  s%    JJJA!+2I2Ia2I2I2Ir&   )
link_prefs)
link_distsindex)#r   r.   conda_buildr   get_build_indexr   r5   r{   rt   ru   rv   rx   r    r   rS   r   r   r   r0   r   rC   r7   rB   r   r   r   	TypeErrorLoggingContextexecuter   r2   r3   r4   fnr	   )r8   rJ   r   package_subsetrequire_filesr9   r   rn   download_actions	pkg_filesr|   selected_packagespkgr   link_pkgr   
pkg_recordpfepkg_dir_locr   s                       @r$   execute_download_actionsr
  @  sb   QX#//F#33H(h,X*hn    4  KE1a     'Y'11(%HHHHI{{62&&H&~66N %! 		 		CsF## (??%))#...99;;q> (  H8=00)--h777 1 % + +3$$ 	)}HH$$Cyy~~a(H3aM
 
 
  	MJJJJJJJ1M
 .%
:K9MNNN M M M-#eLLLM %''                $  w||GU3Z];;7>>$'' "GE !(*	#s$   +HH$#H$:II	"I	c                R   | j                             di                               |g           }|rd |D             ng |                    dg           }fd|D             }t          j        |                     d                    }t          j        |                     d                    }i }|D ]t          fd|D                       rd}| j        j        rmt          j        j	                  }	d	|	v rP|	d	                             j
        i           }
|
                    d
i                               j        i           }|,t          | ||                   \  }}t          ||          }t          ||          }|rt          j        ||          }|S )zDownload packages from specs, then inspect each downloaded package for additional
    downstream dependency specs.  Return these additional specs.r}   c                D    g | ]}|                     d           d         S )r?   r   rC   )rF   reqs     r$   rH   z%get_upstream_pins.<locals>.<listcomp>  s'    ===CciinnQ'===r&   r=   c                &    g | ]}|j         v |S rI   r7   )rF   r  explicit_specss     r$   rH   z%get_upstream_pins.<locals>.<listcomp>  s%    TTTs^9S9Ss9S9S9Sr&   zbuild/ignore_run_exports_fromzbuild/ignore_run_exportsc              3  \   K   | ]&}j         |                    d           d         v V  'dS )r?   r   N)r7   rC   )rF   r  r  s     r$   ro   z$get_upstream_pins.<locals>.<genexpr>  s9      IIsx399S>>!,,IIIIIIr&   Nr|   run_exports)r   r   )r   rS   r   r   	get_valuer   r.   use_channeldatadownload_channeldatachannelr7   rU   r
  r   r   merge_dicts_of_lists)r8   rJ   r   	env_specslinked_packagesignore_pkgs_listr   additional_specsr  channeldatapkg_datalocr6   rX   r  r  s                 @@r$   get_upstream_pinsr     s    

>2..223;;IAJR==9====PRNkk&"--OTTTToTTTO(5T)U)UVV#AKK0J$K$KLLK S SIIII8HIIIII 	8# 	S4S[AAK [((&z266sxDD&ll="==AA#+rRR07C  IC 33==K#K== 	S$9:JERRr&   c                   t          | || j        j        ||          \  }}}t          | ||          }t	          t          |                    p.| j                            di                               |g           ||fS )Nr   r}   )r   r.   rZ   r   r   r   r   rS   )r8   r   r   rY   depsrJ   r   extra_run_specss           r$   _read_upstream_pin_filesr%    s    /		&C  D'5 (7C88OSYYF16::nb99==c2FF r&   c                     j                             di           }t           d||          \  }}} j        rt	          j                             d                    } j                             di           }||d<   |sx fd j                             dg           D             }|rOt	          j        |d                             di                     }||d         d<   |                    dg           }|	                    |                    dg                      t           d||          \  }	}
} j
        s j        r3t          |                    d	g                     }t                      }nQt          |                    dg           |                    d
g           z   |                    dg           z             }t          |                    dg           |                    dg           z   |                    dg           z             }ng }	g }
 j
        s j        r j        rkt          |                    d	g                     }t                      }t          |pg                               |                    d	g                     }n)t                      }t                      }t          |pg           }nt          |                    dg                     }t          |                    dg                     } j        r|                    |                    d
g                      |                    |                    dg                      t          |pg                               |                    d
g                     }n#t          |                    dg                     }	|t          t	          j        |                    d                              z  }|t          t	          j        |                    d                              z  }d|fd|	fd|fd|ffD ]\  }}|rt          |          ||<   | j         d<   ||
fS )z@Applies run_exports from any build deps to host and run sectionsr}   rf   zrequirements/hostrg   c                j    g | ]/}|                     d                                           k    -|0S r  )rS   r7   )rF   outr8   s     r$   rH   z%add_upstream_pins.<locals>.<listcomp>  s<       CGGFOOqvvxx<W<W<W<W<Wr&   rM   r   strongr(   r   strong_constrainsweak_constrainsrunrun_constrained)r   rS   r%  is_crossr   r   r  
setdefaultexpand_reqsextendr(   r-   r   build_is_hostupdater   )r8   r   rY   r}   
build_depsbuild_unsatextra_run_specs_from_build	host_reqsmatching_output	host_deps
host_unsatextra_run_specs_from_hostr$  extra_run_constrained_specsrun_depsrun_constrained_depssectionr#  s   `                 r$   add_upstream_pinsr@    s    6::nb11L:R	71?; ;7J7
 	z BN %akk2E&F&FGG	v((<<(V 		@    vzz)R88  O  @$0#A&**>2>>    6B">2(33FB??	377"EEFFF;Sv4o<
 <
8	:8 8 	q 	!";"?"?""M"MNNO*-%%''!)--h;;+//;;<,002>>? O
 +.)--.A2FF+//0A2FFG,001DbIIJ+ +'' 	
8 	Nq 	N 	3"%&@&D&DXr&R&R"S"S.1ee+ !1r2299.228R@@ 

 #&%%.1ee+ !1r22

!"<"@"@2"N"NOOO*-*../BBGG+ +'  	N&&'A'E'Efb'Q'QRRR+22.223DbII   !!1r2299.2262>> 

   : > >x L LMM	U%6|7G7G7N7N%O%O!P!PPH6,**+<==>>: : 
 
*			01	 / /  	/$(JJL!)AF>
""r&   c           	     d  
 | j                             di           }dD ]}t          j        |                    |g                     }t	          t
                    }|D ]}t          j        |                                          }|d         t          |          dk    r$|         	                    |dd                    g|         	                    g            g }|
                                D ]\  }g 
|D ]V}t          |          dk    rA|dd         \  }	t          fddD                       sd	|	v s
	                    |           Wt          |          dk    r%t          |          s|	                               
r`t          
fd

D                       st          d
           |	                    d                    g
d         z                        |                    fd|D                        ||v r|r|||<   || j         d<   dS )zr
    For metapackages that are pinned exactly, we want to bypass all dependencies that may
    be less exact.
    r}   )rf   rg   r,  r   r   NrA   c              3      K   | ]}|v V  	d S r   rI   )rF   crU   s     r$   ro   z1_simplify_to_exact_constraints.<locals>.<genexpr>7  s'      FFWFFFFFFr&   )><r   r   c              3  0   K   | ]}|d          k    V  dS )r   NrI   )rF   r   
exact_pinss     r$   ro   z1_simplify_to_exact_constraints.<locals>.<genexpr><  s,      FFC3*Q-/FFFFFFr&   zConflicting exact pins: r?   c              3  N   K   | ]}|d                      g|z             V   dS )r?   N)r4   )rF   r   r7   s     r$   ro   z1_simplify_to_exact_constraints.<locals>.<genexpr>A  s:       Q QCS Q4&3,!7!7 Q Q Q Q Q Qr&   )r   rS   r   r   r   r   ensure_valid_specrC   r   rT   r    r   allr   r4   r1  )metadatar}   r?  r#  	deps_dictr   
spec_parts	deps_listvaluesrf   rG  r7   rU   s             @@@r$   _simplify_to_exact_constraintsrP    sx   
 =$$^R88L) . . !1!1'2!>!>??%%	 	+ 	+C055;;==Ja=D:""$&&z!""~6666$&&r****	%OO-- 	R 	RLD&J / /s88a<<%(!WNGUFFFFoFFFFF /#QV,,"))#...6{{aF  &&&& RFFFF:FFFFF G$%L
%L%LMMM$$SXXtfz!}.D%E%EFFFF   Q Q Q Q6 Q Q QQQQQl""y"$-L!$0HM.!!!r&   c                    |s }                                  r	d _        n!d}t           j        j                            dg                     } j        j                            di                                           D ]}||v r|                    |           t                      }t           d          r#d  j	                                        D             }|s|r4t          j        d                    d ||z  D                                 } j                            d	i                               d
i           }|                                                      j        j                  }d}	|rd|v sd|vrd                                 i}nd}	|r|d                                          k    rt!           |           t#          j        |                    di                     }
|
 j        d<    j                            d          rVt#          j         j        d          j        j        d           t#          j         j        d          j        j        d           |                                                                                               t+           ||          \  }} j                            di           }
|r1t          j        d                    d |D                                 } j        rdnd}|
                    |g           }|rLd|v rH|                    d                     j        j        d                              | j        d         |<   t3           | j        j        ||          \  }}}d |D             t5           j                  r,|
                    d          st9           j                  |
d<   |
                    dg           } fd|D             }d |D             }||
|<   ||
d<   |
 j        d<                                      j        dk    r#t?          j          d           j        d         d<    !                    d          }|r8tE           fd|D                       }d |D             }| j        d         d<    j                            d	i           } j        j#        |d <   | j        d	<    j                            d!          rgd" j        d!         v rW j        d!         d"         }tH          j%        &                    |           tH          j%        '                    |          sQtH          j%        (                    tH          j%                             j%        |                     j        d!         d"<   nd# j        d!         v rtH          j%        '                     j        d!         d#                   svd$ j        d!         d#         v satH          j%        (                    tH          j%                             j%         j        d!         d#                              j        d!         d#<    j                            d          s
i  j        d<   tS                      |s|rd _        t#          j*        tV                    }|,                    d%                     -                                                     |r|,                    d&|            |r|,                    d'|            nd _        |	r } S )(zEFully render a recipe.  Fill in versions for build/host dependencies.TNignore_versionr   other_outputsc                    h | ]\  }}|S rI   rI   )rF   r7   rZ   s      r$   	<setcomp>z$finalize_metadata.<locals>.<setcomp>W  s    RRRwtRRRr&   |c              3  "   K   | ]
}d | dV  dS z(?:^z(?:\s|$|\Z))NrI   rF   excs     r$   ro   z$finalize_metadata.<locals>.<genexpr>[  s?        25-C---     r&   extraparent_recipe)rZ   r   r7   Fr}   rf   rg   c              3  "   K   | ]
}d | dV  dS rX  rI   rY  s     r$   ro   z$finalize_metadata.<locals>.<genexpr>  s.      OO3#333OOOOOOr&   r   z	python {})rY   r   c                    i | ]J}|                                 d          d                    |                                 dd                   KS )r   r?   r   N)rC   r4   )rF   r   s     r$   r   z%finalize_metadata.<locals>.<dictcomp>  sO     #
 #
 #
:=CIIKKNCHHSYY[[_55#
 #
 #
r&   r,  c                2    g | ]}t          |          S rI   r   rF   r   full_build_dep_versionsr8   s     r$   rH   z%finalize_metadata.<locals>.<listcomp>  s4     
 
 
DGq#'>??
 
 
r&   c                :    g | ]}t          j        |d           S T)warnr   rI  rE   s     r$   rH   z%finalize_metadata.<locals>.<listcomp>  s5     
 
 
9=E#Dt444
 
 
r&   strictztest/requiresc                2    h | ]}t          |          S rI   r`  ra  s     r$   rU  z$finalize_metadata.<locals>.<setcomp>  s6        'q#/FGG  r&   c                :    g | ]}t          j        |d           S rd  rf  rE   s     r$   rH   z%finalize_metadata.<locals>.<listcomp>  s5     # # #=A'4888# # #r&   testrequirescopy_test_source_filessourcer3   git_urlr   zNReturning non-final recipe for {}; one or more dependencies was unsatisfiable:zBuild: zHost: ).skipfinalr   r.   rZ   rS   keysremover0   rS  rO   rP   r4   r   get_rendered_outputr7   r   r   r0  insert_variant_versionsget_output_metadatar@  r.  rT   formatr   r	   requirements_pathr   append_requirementspin_dependsr   get_pinned_depsr  r   rl  r2   r3   
expanduserisabsnormpathrP  
get_logger__name__re  r6   )r8   parent_metadatar   rY   excludesrb   output_excludesr\  outputis_top_levelr}   r5  r:  pinning_env
build_reqsfull_build_depsrn   r=  versioned_run_deps	test_depsversioned_test_depsr[  source_pathlogrb  s   `                       @r$   finalize_metadatar  G  s    vvxx _qx'++,<bAABB8#''(:B??DDFF 	% 	%Ch$$$%%1o&& 	SRR1?;O;O;Q;QRRRO 	 	 j		  9AO9S     O 

7B//33ORHH
 !44QVVXXqxGW4XX 
	2F""fF&:&: !&&((+$  BM&$9QVVXX$E$E6q&AAA ,VZZ-K-KLLL%1AF>"6::n%% 	)~&(8'   )~&(8&   //0E0Eaffhh0O0OPP"3,o#
 #
Z
 vzz."55
  	 j		OOOOOOO O !"
7ff!%%k266
  	=(j00k001A(1KLLMMM2<AF>";/ 4H+*G!
 !
 !
A#
 #
AP#
 #
 #
 !%&& 	F|/?/?/F/F 	F"01D"E"EL##E2..
 
 
 
 
KS
 
 

 
AS
 
 
 %4[!0U!-~ 	
=H$$,3,CAu,M,MAF>"5)KK00	 
	="&    (  # ## #EX# # # *=AF6N:&

7B''*+(*I&'w
 6::h 	)))fX.v6"";///w}}[11 /1w/?/?QV[990 0AF8$V,, !&"222GMM!&"29"=>> 3
 16(+I66624'2B2BQVQVH-=i-HII3 3AF8$Y/ vzz'"" 	! AF7O&q))) 	* 	AG"8,,CHH%%+VAFFHH%5%5    20;00111 0.*..///AG Hr&   c                ,   | j         sa|s_	 t          j        |            nI# t          j        $ r7}t          d           t          d           t          |           Y d }~nd }~ww xY w| j         s"|rt          d          |rt          d          d S d S )NzgWarning: failed to download source.  If building, will try again after downloading recipe dependencies.zError was: zno_download_source specified, but can't fully render recipe without downloading source.  Please fix the recipe, or don't use no_download_source.zBFailed to download or patch source. Please see build log for info.)source_providedrm  provide
subprocessCalledProcessErrorprintr   RuntimeError)rK  no_download_sourceraise_errorerrors       r$   try_downloadr    s    # ,> 	N8$$$$, 	 	 	?   -   %LLLLLLLL	 # 
 		&  
  	T  
 
	 	s     A&-A!!A&c                   d| _         t          j                            d| j        j                   t          j                            d| j        j                   d                    | j        j        d         	                    d          dd                   }t          j                            dt          j        | j        j        |                     |                                  t          |           } | S )zcSome things need to be parsed again after the build environment has been created
    and activated.Fr   .r   NrA   )rp  sysr3   insertr.   build_prefixhost_prefixr4   rZ   rC   r   get_site_packagesparse_until_resolvedr  )rK  py_vers     r$   reparser    s     HNHOOAx3444HOOAx2333XXho-h7==cBB2A2FGGFHOOAu.x/JFSSTTT!!### **HOr&   c           
     n   i }d}| j         s| j        rddlm t	          |                     d| j        j                            }g |D ]'}d|v r!|d         }	|	vr                    |	           (t          t          t                              fd          }
|dk     rd}n(|t                    dz
  k    rt                    dz
  }|
t                    dz
  |z
                    }t          |d|d	          }|| j        _        || j        _        |                                 }|                                 }||z   }t#          |d
          r|                                }|d         | j        _        |                     d          }|                     |          }|D ]d}ddlm}  ||           |                                 |j        _        |                    di           }j        rd|vrddd|d<   i }|D ]}||         ||<   |                                D ]7\  }}t          j        j        ||d          pj        j        j        _        8 |j        j                   |                    di           }j        rd|vrddd|d<   g }j        j        D ]}||d<   |                    |           |j        _        t9          j        j                  j        _        j        raj        rZ                                  tC          j"        j        j#                   tI          j%                                                     	 &                    ||           n# tN          $ r Y nw xY wj         pj(         }|d f|)                                j        j                            dj        j*                  tW          fd,                                D                       f<   ft[          |.                                          S )NTr   )VersionOrderzbuild/noarch_python_build_ager   c                X     |                               d          d                   S )Nr?   r   r  )r   r  versionss    r$   <lambda>z%distribute_variants.<locals>.<lambda>4  s)    Xa[=N=Ns=S=STU=V0W0W r&   )rb   r   noarch_python_reductionr   F)force_globalget_all_replacementsr   r   r   r   distribute_variants_reduction)allow_no_other_outputsbypass_env_checktarget_platformc              3  Z   K   | ]%}|j         j                            |          fV  &d S r   )r.   rZ   rS   )rF   varmvs     r$   ro   z&distribute_variants.<locals>.<genexpr>  s;      VVCsBI-11#667VVVVVVr&   )/r(   r-   conda_interfacer  intr  r.   noarch_python_build_agerT   r   r   r   r   variantsinput_variantsextract_requirements_textextract_package_and_build_textr0   r   rZ   get_used_loop_varsget_reduced_variant_setconda_build.buildr  copyrS   numpy_xxr    r   squished_variantsneeds_source_for_rendervariant_in_sourceparse_againr   rm_rfwork_dirrm  r  r  
SystemExitr  r6   r9   r   get_used_varsr   rO  )rK  r  r   r  r  rendered_metadataneed_source_downloadagerZ   voversion_indices	build_verrecipe_requirementsrecipe_package_and_build_textrecipe_textused_variablestop_loopr  r   conform_dictrb   rO  numpy_pinned_variants_variantr  r  r  s                           @@@r$   distribute_variantsr    s     
  
(0 
111111/1X 
 

  	( 	(G7""X&X%%OOB''' #h--  &W&W&W&W&W
 
 
 77CC3x==1$$$h--!#C_S]]Q->-DEF	&h	+D
 

  (HO &.HO""<<>>$,$K$K$M$M!/2EEK{H%% +!((**&qkHO00e0DDN//??H ;- ;-::::::W%%%]]__#	";;'92>>; 	M7*:::49e(L(LW%! 	- 	-C !(L'--// 	 	KC#I&V5T  & 9%	 I 	RY/000";;'92>>; 	M7*:::49e(L(LW% "	* 	3 	3H+;H'(!((22222	&DRYEW&X&X	#% 	"*> 	NNK	*+++N2NN	##'=!1 $      	 	 	D	#%#==WREWAW %t, 				!%%&79IJJVVVV2CSCSCUCUVVVVV	
 	
 !((**+++s   ,N
NNc                F   t                      }| D ]p\  }}}ddlm}  ||j                   ddlm}  ||                              d          D ].\  }} ||j                   ||f||                                <   /qt          |	                                          S )zVObtain all metadata objects for all outputs from recipe.  Useful for outputting paths.r   r  )deepcopyFr"  )
r   r  r  r.   r  r  get_output_metadata_setr6   r   rO  )	metadata_tuplesexpanded_outputs_mdownloadr  r  r  output_dictr8   s	            r$   expand_outputsr    s    "}}!0 
: 
:Hg::::::RY'''!!!!!!&hrllBB*/ C 
 
 	: 	:NK ! ****5q)9QVVXX&&		:
  ''))***r&   c                   | }t          |          r|                    d          rUt          j                    }t	          j        |d          }	|	                    |           |	                                 d}
n\|                    d          r"t          j	        
                    |          }d}
n%t          d|z             dS t          |          }d}
t          |          st          j        d	|z             	 t!          ||
          }na# t"          j        $ rO}t          j                            |                                           t          j        d           Y d}~nd}~ww xY wi }|j        rA|j                            |                                |                                |           |j        r|j        st;          ||           |j        rt?          |j        d          r|j        j         sd|j        _!        t          j	                             t          j	        "                    |j	        d                    r0t          j	        "                    |j	        d          g|j        _#        tI          ||          |j        _%        |j        j%        d         |j        _         |ddfg}n%tI          ||          }tM          |||d|          }|
rtO          j(        |           |S )zReturns a list of tuples, each consisting of

    (metadata-object, needs_download, needs_render_in_env)

    You get one tuple per variant.  Outputs are not factored in here (subpackages won't affect these
    results returned here.)
    )z.tarz.tar.gzz.tgzz.tar.bz2zr:*)r3   Tr   FzIgnoring non-recipe: %s)NNzError: no such directory: %s)r.   r   N)reset)r  r  zconda_build_config.yaml)r  r   )r   r  r  ))r	   endswithtempfilemkdtempr   r   
extractallcloser2   r3   dirnamer  r   r   r  exitr   r   YamlParsingErrorstderrwrite	error_msgset_build_idr.   compute_build_idr7   rU   r  r  r  rp  r0   rZ   ignore_system_variantsr4   variant_config_filesr   r  r  r   r  )recipe_pathr.   r  r  r   reset_build_idr  arg
recipe_dirtneed_cleanupr8   r   r  s                 r$   render_reciper    s     Cc{{ <<?@@ 	!)++JS%((ALLjL)))GGIIILL\\'"" 	--J LL+c1222:S\\
 >/*<===Z///&   
'''   O	!!!&&((AIIKK~!NNN 	  ?): ?Q+=>>>>w 
qx,, 	4AH4D 	4.2AH+w~~bgll163LMMNN GLL)BCC1- !5Q J J JAH x03AHu

 (H=== 0*G#'-
 
 
   Js   ?D E/ AE**E/)	r   rm  rf   r}   rj  apprM   aboutr[  c                      e Zd ZeZd ZdS )	_MetaYamlc                4      fdt           j        D             S )Nc                ,    g | ]}|v ||         fS rI   rI   )rF   fieldselfs     r$   rH   z%_MetaYaml.to_omap.<locals>.<listcomp>  s'    TTTetmmU$mmmr&   )r  fields)r  s   `r$   to_omapz_MetaYaml.to_omap  s     TTTT)2BTTTTr&   N)r  
__module____qualname__FIELDSr  r   rI   r&   r$   r  r  	  s-        FU U U U Ur&   r  c                R    |                      d|                                          S )Nztag:yaml.org,2002:map)represent_mappingr   r!   s     r$   _represent_omapr    s!    ##$;T\\^^LLLr&   c                2    t          j        d|          }|S )Nztag:yaml.org,2002:str)tagrc   )r   
ScalarNode)r"   uninodes      r$   _unicode_representerr    s    ?6cBBBDKr&   c                  &     e Zd Zd fd	Zd Z xZS )_IndentDumperFc                H    t                                          |d          S NF)superincrease_indent)r  flow
indentless	__class__s      r$   r  z_IndentDumper.increase_indent  s    ww&&tU333r&   c                    dS )NTrI   )r  r#   s     r$   ignore_aliasesz_IndentDumper.ignore_aliases  s    tr&   )FF)r  r  r  r  r  __classcell__)r  s   @r$   r  r    sL        4 4 4 4 4 4      r&   r  c                   |                                  }|r|j        rd|j        v r|j        d= t          j        t          |j                  t          dd          }rt          fddD                       rC	 t          j	        t          j
                                                 n# t          $ r Y nw xY wt          d          5 }|                    |           d d d            n# 1 swxY w Y   dz  S |S )	NrM   FrA   )Dumperdefault_flow_styleindentc              3      K   | ]}|v V  	d S r   rI   )rF   sepfilenames     r$   ro   zoutput_yaml.<locals>.<genexpr>5  s'      663sh666666r&   )\/wzWrote yaml to %s)r  	is_outputr   r   dumpr  r  r   r2   makedirsr3   r  OSErrorr   r  )rK  r  suppress_outputslocal_metadatar  r   s    `    r$   output_yamlr)  &  sa   ]]__N+$+ ,,,	*Y.%&& 	  F  
6666+66666 	BGOOH556666   (C   	AGGFOOO	 	 	 	 	 	 	 	 	 	 	 	 	 	 	!H,,s$   =1B/ /
B<;B<C11C58C5)NFT)F)r   r   r8   r   r   r   r   r   r  )FFF)FNTTF)U
__future__r   r   r2   ri   rO   rk   r  r  r   r  collectionsr   r   	functoolsr   os.pathr   r   r	   pathlibr
   r   conda_build.indexr   conda_build.sourcerm  r   r   r   conda_build.exceptionsr   conda_build.metadatar   r   conda_build.variantsr   r   r   r  r   r   r   r   r   r   r   r   r%   add_representerr   representerSafeRepresenterrepresent_listr   r;   rK   rd   r   r   r   r   r   r   r
  r   r%  r@  rP  r  r  r  r  r  r  r  r   r  r  r  r  r  r   unicoder)  rI   r&   r$   <module>r9     s   # " " " " "  				  				      



   0 0 0 0 0 0 0 0       * * * * * * * * * *            # # # # # # 2 2 2 2 2 2 2 2 2 2 ? ? ? ? ? ? Q Q Q Q Q Q Q Q                         J I I I I I I I
/ / /  S$*:I J J J  UD,<K L L L  ["3 4 4 4  8  8 8 8B "'&*A A A AH    @  & 8=         @ 4& & &RI I I IX  D  $\# \# \#~%1 %1 %1Pf f f fR   6
 
 
  #( v, v, v, v,r+ + +* "&S S S Sn

 

 

U U U U U U U UM M M  
    DK     Y 0 0 0  S. / / /
     r&   