
    xheY                       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
mZ d dlmZ d dlmZm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mZmZ ddlmZ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, 	 d dl-Z-n# e.$ r  ej/        d           Y nw xY w	 e-j0        Z1n# e2$ r
 e-j1        Z1Y nw xY w G d de1          Z3e34                    d           e34                    d           e35                    d           e35                    d           dddZ6dZ7 ej8        dej9        ej:        z            Z; ej8        d          Z< ej8        d          Z= ej8        d          Z>i a?dd!Z@dd"ZA ej8        d#          ZBd$ ZCd% ZDd& ZEd' ZFd( ZGd) ZHd* ZIdd,ZJdd-ZKd. ZLd/ ZMdd0ZNh d1ZOh d2ZPdeQd3i d4dd5dd6eQd7dd8dd9eQd:dd;eQd<eQd=eQd>eQd?dd@ddAddBeQdCddDdddddeRdEi dFddGeQdHeRdIeSdJddKeRdLeRdMeSdNddOeSdPeRdQeQdReSdSddTddUddVeSi dWeRdXddYddZeRd[dd\eSd]eQd^eQd_dd`eQdaeRdbeRdceRddeRdeeTdfeTdgeReRdeQeQeQdddg dh	ddddddddddddddddieReReReReRdjdddddeSdkeReReReReReRdldddddddddeReReRddddmi dn	ZUdoZVdp ZWdq ZXdr ZYds ZZdt Z[du Z\dv Z]dw Z^dx Z_ddyZ`	 	 	 dd{Zad| Zbdd}Zc ed~          d             Zdd Zed Zfd Zg G d d          ZhdS )    )annotationsN)OrderedDict)	lru_cache)isfilejoin)Literaloverload)UnicodeDammit   )
exceptionsutilsvariants)	MatchSpec	envs_dirsmd5_file)Configget_or_merge_config)feature_list)ensure_valid_license_family)DEFAULT_SUBDIRSHashableDictensure_listexpand_globsfind_recipeget_installed_packagesinsert_variant_versionson_winzPError: could not import yaml (required to read meta.yaml files of conda recipes)c                  :    e Zd Zed             Zed             ZdS )StringifyNumbersLoaderc                    d| j         vr(d | j                                        D             | _        t          | j                  D ]0}fd| j        |         D             }|r|| j        |<   (| j        |= 1d S )Nyaml_implicit_resolversc                *    i | ]\  }}||d d          S N .0kvs      4lib/python3.11/site-packages/conda_build/metadata.py
<dictcomp>zCStringifyNumbersLoader.remove_implicit_resolver.<locals>.<dictcomp>6   s3     + + + Aq1QQQ4+ + +    c                *    g | ]\  }}|k    ||fS r$   r$   )r&   trtags      r)   
<listcomp>zCStringifyNumbersLoader.remove_implicit_resolver.<locals>.<listcomp>:   s'    XXXDAqqTWxx!Qxxxr+   )__dict__r!   itemstuple)clsr/   ch	resolverss    `  r)   remove_implicit_resolverz/StringifyNumbersLoader.remove_implicit_resolver3   s    $CL88+ +$'$?$E$E$G$G+ + +C' 344 	4 	4BXXXXC,G,KXXXI 42;+B///33	4 	4r+   c                z    d| j         vr| j                                        | _        || j        v r
| j        |= d S d S )Nyaml_constructors)r1   r9   copy)r4   r/   s     r)   remove_constructorz)StringifyNumbersLoader.remove_constructor@   sM    cl22$'$9$>$>$@$@C!#'''%c*** ('r+   N)__name__
__module____qualname__classmethodr7   r;   r$   r+   r)   r   r   2   sH        
4 
4 [
4 + + [+ + +r+   r   ztag:yaml.org,2002:floatztag:yaml.org,2002:intx86x86_64)3264)pythongenericTz9^\ +-\ +(?:name|type):.+?(?=^\w|\Z|^\ +-\ +(?:name|type))flagszD(numpy\s*x\.x)|pin_compatible\([\'\"]numpy.*max_pin=[\'\"]x\.x[\'\"]z?pin_\w+\([\'\"]numpy[\'\"].*((?<=x_pin=[\'\"])[x\.]*(?=[\'\"]))zpin_\w+\([\'\"]numpy[\'\"]configr   returndict[str, bool]c                j	   | j         }t          t          |dk              t          |dk              |                    d          |                    d          t          |dk              t          |dk              t          t          j        t          t          t          j                            dd                              		  	        }t          t                    |gz   }d
 |D             }d |D             }d |D             }|D ]}|                    | d          ||<   |D ]V}t                              ||          }|                    d|           ||<   |dk    r|                    d          |d<   Wt          j        |           }	| j                            d|	d                   }
t          |
d          s|
d         }
|
                    d          d                             d          ^}}}t          | |           }
| j        |d<   |                    t          |
t          |dk              t          |dk              t          |
dk              t          |
dk              t          |
dk              t          |
dk              t          |
dk              t          |
dk              	  	                   | j                            d           }|sT|	d          }| j        rEt)          j        t,                                        d!                    |	d                               t          d"                    |                    d          d#d$                             |d%<   | j                            d&|	d&                   }||d'<   | j                            d(|	d(                   }||d(<   t          |d         dk              |d)<   t4          D ]
\  }}|||<   |                    t          j                   | j                                        D ]|\  }}||vrs	 t          |          ||<   # t8          t:          f$ rK t=          |t>                    r.|                                 d*v r|                                 d+k    }|||<   Y xw xY w}|S ),a4  Aggregates selectors for use in recipe templating.

    Derives selectors from the config and variants to be injected
    into the Jinja environment prior to templating.

    Args:
        config (Config): The config object

    Returns:
        dict[str, bool]: Dictionary of on/off selectors for Jinja
    zlinux-32zlinux-64z	linux-arm)zlinux-zosx-zemscripten-zwin-32zwin-64FEATURE_NOMKLF)	linux32linux64armunixwin32win64osenvironnomklc                    g | ]}d |v |	S )-r$   r&   subdirs     r)   r0   z!get_selectors.<locals>.<listcomp>   s    ===&sf}}v}}}r+   c                D    h | ]}|                     d           d         S )rW   r   splitrX   s     r)   	<setcomp>z get_selectors.<locals>.<setcomp>   s)    >>>F6<<$$Q'>>>r+   c                D    h | ]}|                     d           d         S )rW   r   r[   rX   s     r)   r]   z get_selectors.<locals>.<setcomp>   s)    ???VFLL%%a(???r+   rW   rB   )z-32z-64r@   rD   r\   r    .build_platform32      !   "   #   $   )	pypy3kpy2kpy26py27py33py34py35py36numpyzaNo numpy version specified in conda_build_config.yaml.  Falling back to default numpy value of {} N   npperlpllualuajit)falsetruer|   )!host_subdirdictbool
startswithrS   rT   intgetlistr   ARCH_MAPendswithr   get_default_variantvarianthasattrr\   build_subdirupdateverboser   
get_loggerr<   warnformatr   r   r2   	TypeError
ValueError
isinstancestrlower)rH   platdsubdirssubdir_osessubdir_archs	subdir_osarch	arch_fulldefaultsrj   py_majorpy_minor_rv   rx   ry   featurevaluer'   r(   s                        r)   get_selectorsr   m   s    DTZ'((TZ'((OOK((__>??48#$$48#$$
3rz~~ou==>>??
	 
	 
	A ?##tf,G >=G===G>>g>>>K??w???L  8 8	)77) 5 5LLt,,	}}ZZZ00)4<<}}^44AeH+F33H			Hhx&8	9	9B2w U  XXc]]1-33C88Hh	$($$	%	%B -AHHh#o&&h#o&&bBhbBhbBhbBhbBhbBh
	
 
	
 
	
   
		G	$	$B g> 	X&&++<<BF8GCT<U<U   "''"((3--+,,--AdG			FHV$4	5	5BAdG
.

UHUO
4
4CAeHs1v}%%AhK&  '

HHRZ
 $$&&  1A::1vv!z*   a%% ,!''))7H*H*H		V+A!  Hs    QAR/.R/c                T    t          j        dt                     t          |           S )Nz`conda_build.metadata.ns_cfg` is pending deprecation and will be removed in a future release. Please use `conda_build.metadata.get_selectors` instead.)warningsr   PendingDeprecationWarningr   rH   s    r)   ns_cfgr      s/    M	S!  
    r+   z+(.+?)\s*(#.*)?\[([^\[\]]+)\](?(2)[^\(\)]*)$c                    t          j        dt          |                     }t          |                                          dk    r|                    d          S dS )Nz'(.+?)'r   rt   )researchr   lengroupsgroup)errorms     r)   parseNameNotFoundr      sG    
	)SZZ((A
188::!wwqzzrr+   c                ,   	 t          | |i           S # t          $ rv}t          |          }|r4t          j        t
                    }|                    d|z   dz              |                     |d          }t          |||          cY d }~S d }~ww xY w)NzTreating unknown selector 'z' as if it was False.False)	eval	NameErrorr   r   r   r<   debugreplaceeval_selector)selector_string	namespacevariants_in_placeemissing_varlognext_strings          r)   r   r      s    H OY333 H H H'** 	"8,,CII-;>UU   &--k7CC[)5FGGGGGGGGHs    
BA+BBBc           
        g }t          |                                           D ]\  }}|                                }d}|r|d         dv r|d         }|                                                    d          rXt
                              |          }|r|                    d          }	 t          |||          r+|	                    |                    d          |z              # t          $ r5}	t          j        d|dz   |t          |	          fz             Y d }	~	d }	~	ww xY w|	                    |            d                    |          dz   S )	Nrt   )'"#   r   zOError: Invalid selector in meta.yaml line %d:
offending line:
%s
exception:
%s

)	enumerate
splitlinesrstriplstripr   sel_patmatchr   r   append	Exceptionsysexitr   r   )
datar   r   linesilinetrailing_quoter   condr   s
             r)   select_linesr   
  s|   ET__..//  4{{}} 	&DH
**!"XN;;==##C(( 	MM$ 	771::D y2CDD >LLn!<=== 
 
 
 1udCFF+,	 	 	 	 	 	 	 	
 LL99Ud""s   .<C++
D*5*D%%D*c                f   	 t          j        | t                    S # t           j        j        $ r}d| v r+	 dd l}| n## t          $ r t          j        |          w xY wt          dt          j                   t          | t          j                   t          j        |          d }~ww xY w)N)Loaderz{{r   )originalzProblematic recipe:file)yamlloadr   r   	YAMLErrorjinja2ImportErrorr   UnableToParseMissingJinja2printr   stderrUnableToParse)r   r   r   s      r)   yamlizer   -  s    3y&<====: 
3 
3 
34<<H H H H ;QGGGGH##*5555d$$$$&2222
3s)    B0B+=B+ AAB++B0c                    |                      di                                dd          }|r|dvrt          d| d          d S d S )Nbuildpin_dependsrt   )rt   recordstrictz6build/pin_depends must be 'record' or 'strict' - not 'r   )r   RuntimeError)metar   s     r)   ensure_valid_fieldsr   =  sh    ((7B''++M2>>K 
{*BBBS[SSS
 
 	

 
BBr+   c           	     j   t          j        t                    }|                                 D ]\  }}t	          |d          rt          |          | |<   )|rt	          |d          st          |t                    rt          |t                    rd|v rd n|| |<   qg }t	          t          t          |                    d          r,|D ](}t          |          }|r|
                    |           )nd |D             }|| |<   |                    d| dt          |                      | S )Nkeys__iter__Nonec                    g | ]}|d v|	S ))r   NoneTyper$   r&   r   s     r)   r0   z&_trim_None_strings.<locals>.<listcomp>W  s#    NNN!9M0M0MA0M0M0Mr+   z,found unrecognized data type in dictionary: z, type: )r   r   r<   r2   r   _trim_None_stringsr   r   nextiterr   r   type)	meta_dictr   keyr   keepr   trimmed_dicts          r)   r   r   E  si   

8
$
$Coo''  
U5&!! 	/66IcNN 	wuj11 	Zs5K5K 	%%% &)/5e	# 4U,,f55 O" 6 6'9!'<'<' 6 KK5556 ONuNNND!%	#II[u[[dSXkk[[    r+   c                    |                      di                                d          }|r |t          vrt          j        d|z            d S d S )Nr   noarchzInvalid value for noarch: %s)r   NOARCH_TYPESr   CondaBuildException)r   build_noarchs     r)   ensure_valid_noarch_valuer  `  sb    88GR((,,X66L 
L88,*\9
 
 	

 
88r+   hostr   runc                    g }|D ]D}|                     | j                            di                               |g                      E|S )Nrequirements)extendr   r   )metadataenvsreqs_envs       r)   _get_all_dependenciesr  h  sT    D I IHM%%nb99==dBGGHHHHKr+   c           	     Z   |r|j         |j        k    rd}nd}g }t          |                                           D ]\  }t	          |                                           |dz   d          D ]t          fdt          |          D                       ret          fdt          |          D                       r;|                                                                                    f           |r(d}|D ]}| dj	        | z  }t          j        |          d S )	N)r  r  r   r  r  r   c              3     K   | ]F}                                 |k    p)|                                                     d z             V  GdS r_   Nnamer   )r&   depr   s     r)   	<genexpr>z.check_circular_dependencies.<locals>.<genexpr>y  s`         CA3>>!&&((S.#A#A     r+   )r
  c              3     K   | ]F}                                 |k    p)|                                                     d z             V  GdS r  r  )r&   r  other_ms     r)   r  z.check_circular_dependencies.<locals>.<genexpr>|  sb         #%M8L)M)M     r+   z"Circular dependencies in recipe: 
z    {} <-> {}
)r}   r   r   valuesr   anyr  r   r  r   r   RecipeError)	render_orderrH   r
  pairsidxr   pairr   r  s	          @@r)   check_circular_dependenciesr  o  s    (&$(;;; 'EL//1122 	9 	9QL//11223799= 	9 	9G    0tDDD     9     0>>>    9 affhh7888	9  ,5 	5 	5D-&-t44EE$U+++	, ,r+   c                    d}| j         j                                        D ]+\  }}||j         j        v r||j         j        |         k    rd},|S )NTF)rH   r   r2   )r	  output_metadatar   r   vals        r)   _variants_equalr#    s]    EO+1133  S?)111-5c:::ELr+   c           
     z   d}g }|                                  D ]s\  }}|                                  D ]W\  }}||k    rJ|                    dg           }t          |d          r,g }t          j        D ]}||                    |g           z   }|}t          ||          |z   }	|	D ]}
|
                    |                                dz             rt          |

                    d                    dk    r|

                    d          d         |                                k    r_t          ||          rO|                    |                                |                                |
|                                f           Yu|r+d}|D ]}| dj        | z  }t          j        d	|z             d S )
Nr  zbuild/run_exportsr   r_   r   r   rt   z?Mismatching package: {} (id {}); dep: {}; consumer package: {}
zMismatching hashes in recipe. Exact pins in dependencies that contribute to the hash often cause this. Can you change one or more exact pins to version bound constraints?
Involved packages were:
)r  	get_valuer   r   RUN_EXPORTS_TYPESr   r  r   r  r   r\   build_idr#  r   r   r   r  )r!  r
  	problemosr   r   omrun_exportsrun_exports_listexport_typedepsr  r   probs                r)   ensure_matching_hashesr/    s    !DI&&(( S S1$++-- 	S 	SEArBww ll+>CC;// 3')$','>  +;koo'? ? ,(( #3K,R66D S SCqvvxx#~66S		#//144IIcNN2.!**,,>>+Ar22 ? "((!&&((AJJLL#rwwyy)QRRR%	S(  
 	 	D^W^ EE $( +00
 
 	

 
r+   c           
        t          | t          |          t          |j                            } t	          |           }|i }t
          D ]}||vr||         si ||<   |t          v rvt          ||         t                    sZt          ||         d          rt          ||         t                    r)t          d| d||         j        j         d| d          t          ||         t                    s)t          d| d||         j        j         d| d          t          |           t          |           t!          |           t#          |          S )Nr   r   zThe z. field should be a dict or list of dicts, not z	 in file r`   z field should be a dict, not )r   r   r   r   r   FIELDSOPTIONALLY_ITERABLE_FIELDSr   r~   r   r   r   	__class__r<   r   r   r  sanitize)r   rH   pathresfields        r)   parser9    s   fv~..  D
 $--C
{  5z 	CJ...3u:t,,CJ
33<Fs5zSV<W<W #G5 G G5z+4G G?CG G G  
 c%j$// "G5 G G5z+4G G?CG G G   $$$c"""C==r+   >   yonyesr|   >   nnooffr{   )r  versionfnurlmd5sha1sha256r6  path_via_symlinkgit_urlgit_tag
git_branchgit_rev	git_depthhg_urlhg_tagsvn_urlsvn_revsvn_ignore_externals)svn_usernamesvn_passwordfolderno_hoistpatchesnumberstringentry_points
osx_is_appdisable_pipfeaturestrack_featurespreserve_egg_dirno_linkbinary_relocationscriptr   noarch_pythonhas_prefix_filesbinary_has_prefix_filesignore_prefix_filesdetect_binary_files_with_prefixskip_compile_pycrpathsrpaths_patcher
script_envalways_include_filesskipmsvc_compilerr   include_recipepreferred_envpreferred_env_executable_pathsr*  ignore_run_exportsignore_run_exports_fromrequires_featuresprovides_featuresforce_use_keys)	force_ignore_keysmerge_build_hostzpre-linkz	post-linkz
pre-unlinkmissing_dso_whitelisterror_overdependingerror_overlinkingoverlinking_ignore_patterns)r  r@  rV  rX  r`  script_interpreterr   r  testaboutextrafilesr   r*  target)r   r  r  	conflictsrun_constrained)entryiconsummaryr   cli_optsown_environment)requirescommandsr  importssource_filesdownstreams)homedev_urldoc_urldoc_source_urllicense_urllicenser  descriptionlicense_familyidentifierstagskeywordslicense_fileprelink_messagereadme)	packagesourcer   outputsr  appr|  r}  r~  )r  r  c                    t           gt          gt          gd}|                                D ]E\  }}|| v r<|D ]9| |         }t          |d          r |          }nfd|D             }|| |<   :F| S )zE
    Sanitize the meta-data to remove aliases/handle deprecation
    )r  r  r   r   c                &    g | ]} |          S r$   r$   )r&   _dfuncs     r)   r0   zsanitize.<locals>.<listcomp>  s!    #D#D#DDDHH#D#D#Dr+   )
_git_clean_str_versionr2   r   )r   sanitize_funssectionfunssection_datar  s        @r)   r5  r5  s  s    
 , > M
 ',,.. 
- 
-d?? - -#G}<00 E#'4#5#5LL $E#D#D#D|#D#D#DL ,WKr+   c                    d}d}|f|z   }t           fd|D                       }t          |          dk    rFd}|d                    d t          ||          D                       z  }t	          j        |                                            }t          |dd         |dd                   D ].\  }}|r||         ||d	         <   |                    |d           /|S )
z
    Reduce the redundancy in git specification by removing git_tag and
    git_branch.

    If one is specified, copy to git_rev.

    If more than one field is used to specified, exit
    and complain.
    )rI  rH  rJ  c              3  ^   K   | ]'}t                              |d                     V  (dS )rt   N)r   r   )r&   r/   source_metas     r)   r  z_git_clean.<locals>.<genexpr>  s9      PPCkooc26677PPPPPPr+   r   zError: multiple git_revs:z, c              3  &   K   | ]\  }}|| V  d S r#   r$   )r&   r   hass      r)   r  z_git_clean.<locals>.<genexpr>  sA       
 
!c
H
 
 
 
 
 
r+   Nr   )r3   sumr   zipr   r   r:   pop)	r  git_rev_tags_oldrJ  git_rev_tagshas_rev_tagsmsgret_metar   r  s	   `        r)   r  r    s    1G: 00LPPPP<PPPPPL
<1)tyy 
 
%(|%D%D
 
 
 
 
 	
 	 !!HQRR(,qrr*:;;    S 	6(0H\!_%S$Or+   c                    d| v r&t          |                     dd                    | d<   d| v r&t          |                     dd                    | d<   | S )Nr@  rt   rl  )r   r   )package_metas    r)   r  r    sb    L  "%l&6&6y"&E&E"F"FY,&&(+L,<,<_b,Q,Q(R(R_%r+   c           	     ~    d}|dv r|dz  }|dk    r|dz  }|D ]#}|| v rt          j        d| d| d|             $d S )	Nz=@#$%^&*:;"'\|<>?/ )package/versionbuild/stringrW   r  !Error: bad character 'z' in z: )r   r   )sr8  bad_chrscs       r)   check_bad_chrsr    s    &H333C!!!C D D66HBaBBeBBqBBCCCD Dr+   c                    d}| D ]_}|                                 d         |k    r?t          |                                           dk    r|                                 d         }`|S )Nrt   r   r   )r\   r   )
build_reqsr  r@  specs       r)   get_package_version_pinr    s^    G & &::<<?d""s4::<<'8'81'<'<jjll1oGNr+   c           
        | j                             di                               d          r|                     d          }ng }| j        rdnd}d |                     |          D             }| j                             di                               |g           }dD ]r\  }}}|                     d          D ]T}	t          |          D ]@}
|	j        |
k    r1|
|v r,|
d	k    r| j        s"| j        |
k    s|                     d
          r|
dk    r|	                    |           ^t          t          |                    }|                    d t          |          D                        |D ]J}t          ||          p3| j        j                            |                    dd          d          }|r nKd                    |g|                    d          d |         z             }||vr|	                    |           BVtt          |                     dg                     }|r|	                    d           |r*|                    d                    |          df           |	                    t%          |                                                      d                    |          }|S )Nr   rW  r  r  c                    g | ]	}|j         
S r$   r  r&   mss     r)   r0   z.build_string_from_metadata.<locals>.<listcomp>  s    PPPr27PPPr+   r  ))rv   rs   ru   )rj   rD   ru   )rx   rw   r   )ry   ry   ru   )r.   )r.   r-baseru   )mromro-baser   )r  zmro-base_implr   r  rs   build/noarch_pythonrD   c                B    g | ]}d |v |                     d d          S )rW   r   r   )r&   _ns     r)   r0   z.build_string_from_metadata.<locals>.<listcomp>  s7     !" !" !"(*'*byy %'JJsC$8$8'0yyr+   rW   r   rt   r`   build/features)r   r   r%  is_cross
ms_dependsr   r  numpy_xxr   r   r   r  r  rH   r   r   r   r\   r   build_number)r	  	build_strr7  build_or_hostbuild_pkg_names
build_depsr  namesplacesr  r  	pkg_namesr  variant_versionr  r[  s                   r)   build_string_from_metadatar    s   }"%%))(33 9!&&~66		"*"3@PPX-@-@-O-OPPP]&&~r::>>}bQQ
!
 '	2 '	2Auf ))%00 2 2'.. 2 2Dw$4?+B+B7??83D?$#?d22$../DEE 3 $ 0 0JJqMMMM(,[-?-?(@(@I%,,!" !".9%.@.@!" !" !"   '0 * *2I$.3" 3" 3"%-_%<%@%@$&JJsC$8$8"&" &" !0
 $3 !*$)E!*$&GGQC/2G2G2L2LWfW2U,U$V$VE$C// #

5 1 1 1;22@ x112BBGGHH 	JJsOOO 	2JJ**C0111

3x,,..//000GGCLL	r+   c                   t           j                            |           sot          t                    t          j                    gz   D ]E}t           j                            ||           }t           j                            |          r|}  nFt           j                            | d          }t           j                            |          s&t          d| z             t          j	        d           | S )Nz
conda-metaz$Bootstrap environment '%s' not foundr   )
rS   r6  isdirr   r   getcwdr   r   r   r   )env_name_or_pathenvs_dirr6  bootstrap_metadirs       r)   _get_env_pathr  
  s    7==)** Y29;;-7 	 	H7<<*:;;Dw}}T"" #'  %5|DD7==*++ 47GGHHHr+   c           	         t          |           }t          |          }g }|                                D ];\  }}|                    d                    ||d         |d                              <dd|iiS )Nz{} {} {}r@  r   r  )r  r   r2   r   r   )r  r6  bootstrap_metadatabootstrap_requirementsr  r   s         r)   "_get_dependencies_from_environmentr    s    )**D 055+1133 
 
%%gtIWFF	
 	
 	
 	
 W&<=>>r+   c                    ddl m} d  D             }t                      }t                      }t                      }t	                                                     D ]\  }\  }}|                    dd                              d          r|                    dg           |                    dg           z   }	|j	        s)|	
                    |                    dg                      |d	         }
|||
<   t                      ||
<   |	D ]=}|                    d
          d         }||v r||
                             |f           >|                    |           t           ||                    } fd|D             }|
                     fd|D                        t                      }|D ]} |         ||<   |S )a  This function is used to work out the order to run the install scripts
    for split packages based on any interdependencies. The result is just
    a re-ordering of outputs such that we can run them in that order and
    reset the initial set of files in the install prefix after each. This
    will naturally lead to non-overlapping files in each package and also
    the correct files being present during the install and test procedures,
    provided they are run in this order.r   )	_toposortc                p    g | ]3}|                     d d                              d          +|d         4S )r   condar  )r   r   )r&   output_ds     r)   r0   ztoposort.<locals>.<listcomp>1  sO       <<((33G<<  r+   r   r  requirements/runzrequirements/hostrequirements/buildr  r_   r   c                b    g | ]+}                                 D ]}d |v |d          |k    |,S r  r   r&   pkgnamer'   output_metadata_maps      r)   r0   ztoposort.<locals>.<listcomp>L  s]       $))++  Q;;1V9// 	
 0///r+   c                j    g | ]/}                                 D ]}d |v r|d          |k    sd |v|0S r  r  r  s      r)   r0   ztoposort.<locals>.<listcomp>U  sc     	
 	
 	
(--//	
 	
 !&	W 4 4q  :Ir+   )conda_interfacer  r~   setr   r2   r   r   r%  r  r  r\   r   addr   r   )r  r  these_packagestopodictorderendorderr  r  output_mr-  r  r  
topo_orderr   resultr   s   `               r)   toposortr  %  s:    +***** +  N
 vvHFFEuuH%./B/H/H/J/J%K%K  !!h<<((33G<< 	%%&8"==@R@R#RA A D $ JH../CRHHIIIF#DE$K UUHTN 2 2iinnQ'.((TN))3&1112
 LLii))**J   !  D 	KK	
 	
 	
 	
#	
 	
 	
   ]]F / /)#.sMr+   c                    |p                      d          }|sd                                 ig}nqt          |d          r
J d             j        rPt	           fd|D                       s5|                    t                                                                |D ]S}d                                 v r;|                    d                                           k    rt           |           T|S )Nr  r  r   zoutputs specified as dictionary, but must be a list of dictionaries.  YAML syntax is: 

outputs:
    - name: subpkg

(note the - before the inner dictionary)c              3  p   K   | ]0}                                 |                    d d          k    V  1dS )r  rt   N)r  r   )r&   outr	  s     r)   r  z1get_output_dicts_from_metadata.<locals>.<genexpr>q  sO       0
 0
7:HMMOOswwvr2220
 0
 0
 0
 0
 0
r+   r  package:)
get_sectionr  r   uses_subpackager  r   r   get_recipe_textr   &combine_top_level_metadata_with_output)r	  r  r  s   `  r)   get_output_dicts_from_metadatar
  b  s+   8--i88G >HMMOO,-7F++ 	
 	
7	
 	
 	
 # 	>C 0
 0
 0
 0
>E0
 0
 0
 -
 -
 	> NN;HMMOO<<<=== B B(2244448==??2228SAAANr+   Fc           
        ddl m} t                      }|                                D ]\  }                                r	 t          j        t                    }| j        j	        r*|
                    d                                            |                                 }	j        |	_        j        j        |	j        _        |	                                }
|	j                            |           d|	_        |	                                                              pd                                i}|	                    |          }	d }d|
j        j        v r|
j        j        d         }|
j        j        d= |
                                 |r||
j        j        d<   |s ||	|
|          n|	|                    d          r(|                    d                              d	          rF|f|                                t-          fd
                                D                       f<   # t0          j        $ r}|s t          j        t                    }|                    d|j                    |f|                                t-          fd                                D                       f<   Y d }~d }~ww xY w|| _        d| _        t                      }|                                D ]N\  }\  }|f|                                t-          fd                                D                       f<   O|S )Nr   )finalize_metadataz$Attempting to finalize metadata for Fr  replacements)parent_metadatapermit_unsatisfiable_variantsr   r  c                Z    i | ]'}|t          j        j        j        |                   (S r$   r:   deepcopyrH   r   )r&   r'   fms     r)   r*   z)finalize_outputs_pass.<locals>.<dictcomp>  s?       $% !"4=1B11E#F#F  r+   z9Could not finalize metadata due to missing dependencies: c                Z    i | ]'}|t          j        j        j        |                   (S r$   r  )r&   r'   r	  s     r)   r*   z)finalize_outputs_pass.<locals>.<dictcomp>  s?       $% !"4=1H1K#L#L  r+   c                Z    i | ]'}|t          j        j        j        |                   (S r$   r  r&   r'   r   s     r)   r*   z)finalize_outputs_pass.<locals>.<dictcomp>  s/    VVVqQah&6q&9::VVVr+   )renderr  r   r  rk  r   r   r<   rH   r   infor  r:   other_outputsr   r   finalget_rendered_outputget_output_metadataparse_until_resolvedr   r   r   get_used_varsr   DependencyNeedsBuildingErrorr   packagesr2   )base_metadatar  pass_nor  r  bypass_env_checkr  r  r   r)  r  r  r   final_outputsr'   out_dr  r   r	  s                   @@@r)   finalize_outputs_passr&  ~  s    *)))))mmG +1133 L) L)(==?? 	I	)"8,,C #+ SQQQRRR##%%B  (5B ( 7BI ggiiO##G,,,BH --hmmoo>> CH ''11BL!7!???.5=nM#*2>B00222 NAM&.~># &&$32O   <<'' #8<<+?+?+J+J7+S+S # rN 		$   )+)9)9););   
 6 	) 	) 	)0 )&x00$z$ $   x(  $   )1)?)?)A)A   
 
 
 
 
 
	)* #*MMMMM   :E1 AJ 	VVVVAOODUDUVVV 	
 	
 s   G6I  KA?KKc                j      }d v r+ fd|D             }t          |          dk    sJ |d         }|S )Nr  c                @    g | ]}d |v |d          d          k    |S r  r$   )r&   r  original_dicts     r)   r0   zBget_updated_output_dict_from_reparsed_metadata.<locals>.<listcomp>  s?     
 
 
}}Vf0E!E!E !E!E!Er+   r   r   )r   )r)  new_outputsr  	output_dss   `   r)   .get_updated_output_dict_from_reparsed_metadatar,    sb    H
 
 
 
"
 
 
	
 9~~""""Q<Or+   c                    |rct          j        || t           j        t           j        z            }|r1d                    d |                                D                       nd} | S )NrF   r   c                    h | ]}||S r$   r$   )r&   rW  s     r)   r]   z&_filter_recipe_text.<locals>.<setcomp>  s    EEE&fEvEEEr+   rt   )r   r   	MULTILINEDOTALLr   r   )textextract_patternr   s      r)   _filter_recipe_textr3    sf     
	/4r|bi7OPPPJOWDIIEEELLNNEEEFFFUW 	 Kr+   )maxsizec                    t          | d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   t	          |d          r|                                }|S )Nrbdecode)openr
   readunicode_markupr   r7  )	meta_pathfrecipe_texts      r)   read_meta_filer>    s    	i		 =!#AFFHH--<= = = = = = = = = = = = = = ={H%% +!((**s   'AAAc                >   d}|D ]}| j                             |i           pi }|                    |i           pi }|dk    r(t          j        |                    |i                     }|                                D ]\  }}||vr|||<   |||<   || j         |<   dS )zJMerge top-level metadata into output when output is same name as top-level)r  r   r}  r  N)r   r   r   expand_reqsr2   )r	  outputsectionsr  metadata_sectionoutput_sectionr'   r(   s           r)   r	  r	    s    1H 
0 
0#=,,Wb99?RGR006Bn$$".vzz'2/F/FGGN$**,, 	& 	&DAq&&$%q!(w!/g
0 
0r+   c                   t          j        | j                            di                     }t          j        |                    dg                     }t          j        |                    dg                     }|                    dg           }d |D             }d |D             }t                      }t          t          j        | j        j                            dg                               }|D ]M}||v r"||vr||vr||v r|	                    |           (||v r!||vr||v r||v r|	                    |           N||z
  S )zthings can be used as dependencies or elsewhere in the recipe.  If it's only used
    elsewhere, keep it. If it's a dep-related thing, only keep it if
    it's in the build deps.r  r   r  r  c                n    h | ]2}||                                 d                              dd          3S r   rW   r   r\   r   r&   reqs     r)   r]   z'trim_build_only_deps.<locals>.<setcomp>"  s9    PPPsCP#))++a.((c22PPPr+   c                n    h | ]2}||                                 d                              dd          3S rG  rH  rI  s     r)   r]   z'trim_build_only_deps.<locals>.<setcomp>#  s9    NNNc#NQ''S11NNNr+   ignore_build_only_deps)
r   r@  r   r   r   r  sortedrH   r   r  )	r	  requirements_usedoutput_reqsr  	host_reqsrun_reqs	to_removerL  r  s	            r)   trim_build_only_depsrS    sv    #HM$5$5nb$I$IJJK";??7B#?#?@@J!+//&""="=>>Iub))HPPjPPPJNNYNNNII#(/1556NPRSSTT  ! # #(??:%%y((,,,c""" z!!y((,,,111c"""y((r+   c                    t          j        t          j        | d                                                    }d|                                 d |dz            S )NT)	sort_keyshr   )hashlibrD  jsondumpsencode	hexdigest)hashing_dependencieshash_lengthhash_s      r)   _hash_dependenciesr_  ?  sV    L$8DIIIPPRRSSE #u  ""#4[1_#455r+   c                       e Zd ZdpdZedqd            Zedqd            Zej        drd	            Zedqd
            Zej        drd            Z	 dsdZ	edtd            Z
	 	 	 dudZd Zd Z	 dvdZedp fd	            Zedp fd	            Zedwd            Zedxd            Zd ZdydZd  Zdtd!Zdtd"Zd# Zd$ Zdzd&Zd' Zd( Zd) Zd* Zd+ Zd, Z d- Z!d. Z"d/ Z#d0 Z$d1 Z%d2 Z&d3 Z'dqd4Z(d5 Z)dqd6Z*	 	 	 	 	 	 d{d7Z+d8 Z,d9 Z-d: Z.ed;             Z/ed<             Z0ed=             Z1ed>             Z2ed?             Z3ed@             Z4ed|dB            Z5ed|dC            Z6	 d}dDZ7dsdEZ8d~dFZ9dG Z:dH Z;	 d~dIZ<edqdJ            Z=eddL            Z>edM             Z?edN             Z@dO ZAdP ZBedQ             ZCeCj        ddS            ZCedqdT            ZDeDj        drdU            ZDedV             ZEedW             ZFedX             ZGdY ZHdZ ZId[ ZJd\ ZK	 	 	 dud]ZLd^ ZMdvd_ZN	 dd`ZOddaZPddbZQedc             ZRedd             ZSdvdeZT	 dudfZUdvdgZVdh ZWdi ZXdj ZYdk ZZedqdl            Z[edqdm            Z\dn Z]do Z^ xZ_S )MetaDataNc                0   g | _         t          ||          | _        t          |          rP|| _        t
          j                            |          | _        t
          j        	                    |          | _        nDt          |          | _        d| _        t
          j        	                    | j                  | _        t          | j        d          | _        t                      | _        |                     dd           | j        | j        _        d S )Nr   z	meta.yamlzrequirements.txtT)permit_undefined_jinjaallow_no_other_outputs)undefined_jinja_varsr   rH   r   
_meta_pathrS   r6  basename
_meta_namedirnamer   r;  r   requirements_pathr~   r   parse_againrZ  )selfr6  rH   r   s       r)   __init__zMetaData.__init__H  s    $&!)&'BBB$<< 	8"DO g..t44DO--DII)$//DO)DO77DI!%di1C!D!D FF	 	TRRR"&"2r+   rI   r   c                t    t          |                     d          pd|                     d          v           S )Nr  r  )r   get_depends_top_and_outr  rm  s    r)   r  zMetaData.is_crossc  s@    ((00 :)).999
 
 	
r+   c                F    t          |                     d                    S )Nzextra/finalr   r%  rq  s    r)   r  zMetaData.finalj  s    DNN=11222r+   r   r   c                \    t          |          | j                            di           d<   d S )Nr~  r  )r   r   
setdefaultrm  r   s     r)   r  zMetaData.finaln  s*    59%[[	Wb))'222r+   c                ^    t          | j        j        p|                     d                    S )Nzbuild/disable_pip)r   rH   rZ  r%  rq  s    r)   rZ  zMetaData.disable_pipr  s'    DK+Rt~~>Q/R/RSSSr+   c                    t          |          | j        _        t          |          | j                            di           d<   d S )Nr   rZ  )r   rH   rZ  r   ru  rv  s     r)   rZ  zMetaData.disable_pipv  s:    "&u++;?;;	Wb))-888r+   Fc                   t          |d          r|}nOt          |          5 }t          |                                | j                  }ddd           n# 1 swxY w Y   t          j        | j        || j        ||           dS )ai  Append to or replace subsections to meta.yaml

        This is used to alter input recipes, so that a given requirement or
        setting is applied without manually altering the input recipe. It is
        intended for vendors who want to extend existing recipes without
        necessarily removing information. pass merge=False to replace sections.
        r   r   N)mergeraise_on_clobber)	r   r8  r9  r9  rH   r   merge_or_update_dictr   r6  )rm  sections_file_or_dictrz  r{  build_config
configfiles         r)   append_metadata_sectionsz!MetaData.append_metadata_sections{  s     (&11 	L0LL+,, L
$Z__%6%6t{KKKL L L L L L L L L L L L L L L"II-	
 	
 	
 	
 	
 	
s   )AAAr   c                    |                      di                               d          }|o||                                 k    S )Nextra/parent_reciper  )r%  r   r  )rm  parent_names     r)   	is_outputzMetaData.is_output  s<    nn%:B??CCFKK9{diikk99r+   c                   | j         r
J d            t          j        t                    }|r|                    d           d}d}| j        rt          |                     |||          | j        | j                  | _	        t          j                            | j        d          }t          j                            | j        d          }| j        j        p|}|r7t          j                            |          s|                    d|           d}| j        j        p|}|r7t          j                            |          s|                    d	|           d}|r|                     |d
           |r|                     |d           | j        j        r0t'          | j        j                  }|                     |d
           d|                     d          v r| j	        d         d         | j        _        d|                     d          v r| j	        d         d         | j        _        |                                  |                                  dS )a  Redo parsing for key-value pairs that are not initialized in the
        first pass.

        config: a conda-build Config object.  If None, the config object passed at creation
                time is used.

        permit_undefined_jinja: If True, *any* use of undefined jinja variables will
                                evaluate to an emtpy string, without emitting an error.
        z%modifying metadata after finalizationzjusing unsupported internal conda-build function `parse_again`.  Please use conda_build.api.render instead.Nre  r#  rH   r6  zrecipe_append.yamlzrecipe_clobber.yamlz,input append sections file did not exist: %sz-input clobber sections file did not exist: %sT)rz  Fry  r   rx  )r  r   r   r<   r   r;  r9  _get_contentsrH   r   rS   r6  r   append_sections_filer   r   clobber_sections_filer  	bootstrapr  r  ry  rx  validate_featuresensure_no_pip_requirements)	rm  rd  re  r#  kwr   r  r  dependenciess	            r)   rl  zMetaData.parse_again  s     :FFFFFFx(( 	HH2  
  $ $> 	S""*+A%5 #  
 {^  DI $&7<<	;O#P#P $&GLL<Q$R$R!#{?WCW 	(7K(L(L 	(II>@T   $( K-F1F 	 ! 	)8M)N)N 	)II?AV   %)! 	L))*>d)KKK  	N))*?u)MMM;  	D=dk>STTL)),d)CCC$"2"27";";;;,0Ig,>?R,SDK) D$4$4W$=$===.2i.@AV.WDK+   '')))))r+   c                    dD ]?}t          d |                     |          pg D                       rt          d          @d S )N)r  r  test/requiresc              3  6   K   | ]}t          |d           V  dS )r   N)r   )r&   items     r)   r  z6MetaData.ensure_no_pip_requirements.<locals>.<genexpr>  s,      QQT74((QQQQQQr+   zDictionaries are not supported as values in requirements sections.  Note that pip requirements as used in conda-env environment.yml files are not supported by conda-build.)r  r%  r   )rm  r   s     r)   r  z#MetaData.ensure_no_pip_requirements  sh    N 	 	CQQdnnS6I6I6ORQQQQQ  N  	 	r+   c                    | j                             di                               dg           }|                     dd          r+| j        j        dk    rd|vr|                    d           dS dS dS dS )zFFor dynamic determination of build or run reqs, based on configurationr  r  zbuild/osx_is_appFosxz
python.appN)r   ru  r%  rH   platformr   )rm  rQ  s     r)   append_requirementszMetaData.append_requirements  s    9'';;FFubQQNN-u55	*$--H,,OOL)))))	* 	*--,,r+   c                   d}| j         }|                     d||           || _         t          |          t          | j                  k    rK| j        }|                     d||           || _         t          |          t          | j                  k    K|r5|                     d||           t	          j        d| j         d           |                     d||           || _         dS )zcvariant contains key-value mapping for additional functions and values
        for jinja2 variablesr$   Trd  re  r#  Fz#Undefined Jinja2 variables remain (z3).  Please enable source downloading and try again.N)r  rl  r  rf  r   r   )rm  re  r#  rf  r  s        r)   r  zMetaData.parse_until_resolved  sN     " 
#'#9- 	 	
 	
 	

 
&''3t/H+I+III#'#< '+'=!1    
 DJ &''3t/H+I+III   		','=!1    
 H4d6O 4 4 4   	#(#9- 	 	
 	
 	

 


r+   c                    t                                          |           }d|_        d|_        d|_        |pt          |          }t          ||d          |_        ||_        |	                    d           |S )Nrt   rc  r  Trd  )
super__new__r6  rg  rk  r   r9  r   rH   rl  r4   r	  rH   r   r   r4  s        r)   
fromstringzMetaData.fromstring   sy    GGOOC   26'222xR888	T222r+   c                    t                                          |           }d|_        d|_        d|_        t          |          |_        |pt          |          |_        g |_	        d|_
        |S )zG
        Create a MetaData object from metadata dict directly.
        rt   rc  F)r  r  r6  rg  rk  r5  r   r   rH   rf  r  r  s        r)   fromdictzMetaData.fromdict,  sj    
 GGOOC   (##4VG444!#r+   r  Literal['source', 'outputs']
list[dict]c                    d S r#   r$   rm  r  s     r)   r  zMetaData.get_section;  s    r+   LLiteral['package', 'build', 'requirements', 'app', 'test', 'about', 'extra']r~   c                    d S r#   r$   r  s     r)   r  zMetaData.get_section?  s	     	r+   c                .   | j                             |          }|t          v rE|sg S t          |t                    r|gS t          |t
                    st          d| d          n,|si S t          |t                    st          d| d          |S )N	Expected z to be a list to be a dict)r   r   r3  r   r~   r   r   )rm  r  r  s      r)   r  zMetaData.get_sectionN  s    )--%%--- B	GT** By .. B !@T!@!@!@AAAB  B	.. B !@T!@!@!@AAAr+   Tc                   |                     d          }t          |          dv sJ d|z               t          |          dk    r|\  }}d}n>t          |          dk    r+|\  }}}|t          v sJ d|z               t          |          }|rJ|Ht                              |i                               |          rt	          |         |                     }|                     |          }t          |t                    r|rJ d| d	| d
            n~t          |t                    ri|4t          j        t                    }	|	                    d| d           d}|si }n.||         }t          |t                    sJ d| d| d            |                    ||          }
t          |
t                    r;|
                                t           v rd}
n|
                                t"          v rd}
|
|}
|
S )a  
        Get a value from a meta.yaml.
        :param field: Field to return, e.g. 'package/name'.
                      If the section might be a list, specify an index,
                      e.g. 'source/0/git_url'.
        :param default: Default object to return if field doesn't exist
        :param autotype: If True, return the default type of field if one exists.
                         False will return the default object.
        :return: The named value from meta.yaml
        /)ru   r   zBad field name: ru   Nr   zSection is not a list: zGot non-zero index (z), but section z is not a list.z!No index specified in get_value('z'). Assuming index 0.r   r  r  TF)r\   r   r3  r   r2  r   r  r   r~   r   r   r   r<   r   r   r   TRUESFALSES)rm  r  defaultautotyper  r  r   indexr  r   r   s              r)   r%  zMetaData.get_value^  sa    

35zzV###%7$%>###u::?? LGSEEZZ1__"'GUC8888)G3 988 JJE  	-FJJw,C,C,G,G,L,LWoc*,,G''00lD)) 	>U UTeTTGTTTU U U U d++ 	> }&x00SSSS    >!+E2! $  > >=w=====> > >   g.. eS!! 	{{}}%%&((=Er+   c                4   d }| j                                         D ]z\  }}|dk    r|t          vrt          d|z            |D ]P}|t          v r9t          |t                    r$|                                D ]} |||           D |||           Q{dS )Nc                N    | t           |         vrt          d|d|           d S )Nzin section z: unknown key )r2  r   )r   r  s     r)   check_fieldz*MetaData.check_fields.<locals>.check_field  s8    &/)) !Ow!O!O!O!OPPP *)r+   r~  zunknown section: %sT)r   r2   r2  r   r3  r   r~   r   )rm  r  r  submetakey_or_dictr   s         r)   check_fieldszMetaData.check_fields  s    	Q 	Q 	Q !%	 1 1 	6 	6GW'!!f$$ !6!@AAA& 6 6888Z> >8  +//11 2 2#C11112  KW55556 tr+   c                   |                      dd          }|s#| j        rt          j        d| j        z             t          |          }||                                k    rt          j        d|z             t          |d           |S )Npackage/namert   z"Error: package/name missing in: %rz.Error: package/name must be lowercase, got: %r)r%  r  r   r   r;  r   r   r  )rm  r  s     r)   r  zMetaData.name  s    ~~nb11 	L
 	LH9DNJKKK4yy4::<<HELMMMt^,,,r+   c                <   |                      dd          }|s8|                     d          s#| j        rt          j        d| j        z             t          |          }t          |d           | j        r%|                    d          rt          d|          |S )Nr  rt   r  z%Error: package/version missing in: %rr`   z8Fully-rendered version can't start with period -  got %s)
r%  r  r  r   r   r;  r   r  r   r   )rm  r@  s     r)   r@  zMetaData.version  s    ..!2B77 	Ot//	:: 	Otz 	OH<t~MNNNg,,w 1222: 	',,S11 	JG   r+   c                    |                      d          }|sdS 	 t          |          S # t          t          f$ r t          d| d          w xY w)Nzbuild/numberr   z Build number was invalid value 'z'. Must be an integer.)r%  r   r   r   )rm  rV  s     r)   r  zMetaData.build_number  ss    //  	1	v;;I& 	 	 	Q6QQQ  	s	   * %Ac                    t                               d|z   g                     d d          }d |D             g } j        ss fd                     d          D             }|rPt	          j        |d                             dg                                         |g           }fd|D             }d t          |          t          |          z  D             }|S )	Nrequirements/c                F    h | ]}||                                 d          S r   r[   rI  s     r)   r]   z3MetaData.get_depends_top_and_out.<locals>.<setcomp>  s)    HHHCHSYY[[^HHHr+   c                j    g | ]/}|                     d                                           k    -|0S r  r   r  r&   r  rm  s     r)   r0   z4MetaData.get_depends_top_and_out.<locals>.<listcomp>  s@       776??diikk11 111r+   r  r   r  c                L    g | ] }|                                 d          v|!S r  r[   )r&   r  	req_namess     r)   r0   z4MetaData.get_depends_top_and_out.<locals>.<listcomp>  s6       Qy1P1PC1P1P1Pr+   c                    g | ]}||S r$   r$   rI  s     r)   r0   z4MetaData.get_depends_top_and_out.<locals>.<listcomp>  s-     
 
 


 
 
r+   )r   r%  r  r  r   r@  r   r  )rm  typmeta_requirements
extra_reqsmatching_outputr  s   `    @r)   rp  z MetaData.get_depends_top_and_out  s3   '7Lb(Q(QRRSTSTSTUHH/@HHH	
 ~ 	   ++I66  O
  ".#A&**>2>> #c2,,    #-  

 
 122S__D
 
 
 ! r+   r  c           	         d} fd|D             } j         j                            d          r;|                    d j         j        d         fd j         j        d         fg           t	                      }t                               d|z   g                     D ]}|s	 t          |          }nS# t          $ r t          d|z            t          t          f$ r$}t          dt          |          z             d }~ww xY w|j                                         k    rD|d	k    r j         j         j         j        k    s$t          d
                                 z            |D ]\  }}	|j        |k    r j        rdD ]+}
|
|j        v r t#          j        d|
 d|j         d           ,|                                }t)          |          dk    rd|d         dv rZd|d          d|j         d}t)          |          dk    r|d|j         d|d          |d          dz  }t#          j        |           |||<   t+          |                                          S )N)rD   rs   rw   ry   c                v    g | ]5}j         j                            |          !|j         j        |         f6S r$   )rH   r   r   )r&   r  rm  s     r)   r0   z'MetaData.ms_depends.<locals>.<listcomp>  sQ     
 
 
{"&&t,,
4;&t,-
 
 
r+   r_baser.   r  r  z!Invalid package specification: %rzuReceived dictionary as spec.  Note that pip requirements are not supported in conda-build meta.yaml.  Error message: r   z%s cannot depend on itselfz=!@#$%^&*:;"'\|<>?/r  z' in package name dependency 'r   ru   r   >   !=<===>=<=>z!' in package version dependency 'r   z
Perhaps you meant 'r_   )rH   r   r   r  r   r   r%  r   AssertionErrorr   AttributeErrorr   r   r  r}   r   r   r   r   r\   r   r   r  )rm  r  r  name_ver_listspecsr  r  r   r  verr  partsr  s   `            r)   r  zMetaData.ms_depends  s   2
 
 
 

 
 

 ;""8,, 	  $+-h78t{28<=   /Db I IJJ %	 %	D t__! O O O"#F#MNNN"J/   "OQTUVQWQWX  
 w$))++%%w4;#:dk>V#V#V"#?$))++#MNNN* ! !	c7d??{ ! ,  <<H2 2 2')w2 2 2   JJLLE5zzQ8FFF2q 2 2')w2 2 2  5zzQVrwVVqV5QR8VVVVHSMMME$KKELLNN###s   'B77,D#DDc                    t                                                     }t           |           g d}|                    t	           j        j                            dg                                d|v r* j        \  }} j	        s|r|s|
                    d           |r@t          j        d                    d |D                                  fd|D             }|dgk    ri }n fd|D             } j                            d	i                               d
g           }d |D             }|                    d |D                        |S )a  
        # A hash will be added if all of these are true for any dependency:
        #
        # 1. package is an explicit dependency in build, host, or run deps
        # 2. package has a matching entry in conda_build_config.yaml which is a pin to a specific
        #    version, not a lower bound
        # 3. that package is not ignored by ignore_version
        #
        # The hash is computed based on the pinning value, NOT the build
        #    dependency build string. This means hashes won't change as often,
        #    but it also means that if run_exports is overly permissive,
        #    software may break more often.
        #
        # A hash will also ALWAYS be added when a compiler package is a build
        #    or host dependency. Reasoning for that is that the compiler
        #    package represents compiler flags and other things that can and do
        #    dramatically change compatibility. It is much more risky to drop
        #    this info (by dropping the hash) than it is for other software.

        # used variables - anything with a value in conda_build_config.yaml that applies to this
        #    recipe.  Includes compiler if compiler jinja2 function is used.
        )rD   r  rw   ry   ignore_versionrs   |c              3      K   | ]	}| d V  
dS )z[\s$]?.*Nr$   )r&   excs     r)   r  z-MetaData.get_hash_contents.<locals>.<genexpr>P  s+      LLsS***LLLLLLr+   c                f    g | ]-}                     |          rd j        j        |         v +|.S )r_   )r   rH   r   )r&   rJ  exclude_patternrm  s     r)   r0   z.MetaData.get_hash_contents.<locals>.<listcomp>R  sQ       &,,S11 69DK<OPS<T5T5T 5T5T5Tr+   target_platformc                6    i | ]}|j         j        |         S r$   )rH   r   )r&   r   rm  s     r)   r*   z.MetaData.get_hash_contents.<locals>.<dictcomp>^  s%    SSSsS$+"5c":SSSr+   r  r  c                <    g | ]}|                     d           |S )__)r   rI  s     r)   r0   z.MetaData.get_hash_contents.<locals>.<listcomp>b  s)    HHH3>>$3G3GHHHHr+   c                F    i | ]}|                     d           d         |S )r_   r   r[   )r&   pkgs     r)   r*   z.MetaData.get_hash_contents.<locals>.<dictcomp>e  s)    MMMciinnQ/MMMr+   )r  r  rS  r  r   rH   r   r   $uses_numpy_pin_compatible_without_xxr  r   r   compiler   r   r   )	rm  r  build_string_excludespin_compatiblenot_xxhash_contentsrQ  virtual_pkgsr  s	   `       @r)   get_hash_contentszMetaData.get_hash_contents'  s   . 4--//00T<000 !D C C$$+//0@"EEFF	
 	
 	
 l""%)%N"NF } 6 6 6%,,W555  	 jLL6KLLLLL O    '  L -...MMSSSSlSSSM 9==4488CCHHxHHH 	MMMMMNNNr+   c                j    d}|                                  }|rt          || j        j                  S |S )al  With arbitrary pinning, we can't depend on the build string as done in
        build_string_from_metadata - there's just too much info.  Instead, we keep that as-is, to
        not be disruptive, but we add this extra hash, which is just a way of distinguishing files
        on disk.  The actual determination of dependencies is done in the repository metadata.

        This was revised in conda-build 3.1.0: hashing caused too many package
            rebuilds. We reduce the scope to include only the pins added by conda_build_config.yaml,
            and no longer hash files that contribute to the recipe.
        rt   )r  r_  rH   r]  )rm  r^  r\  s      r)   hash_dependencieszMetaData.hash_dependenciesh  s?     #5577 	U%&:DK<STTTr+   c                   |                      d          }|                                 }|s'|s%t          d|                                  d          |                                 }t	          j        d|          }|r0|rt	          j        d|j                  st          |d           |}n;t          |           }| j
        j        r| j        r|                                 }t	          j        d| j
        j        z  |          s|                    dd          }	 t!          |d	                    |r*d                    |t%          |d	                   f          nt%          |d	                   }n# t&          $ r |d	         |z   }Y nw xY wt)          |          dk    r!d                    |g|dd          z             }n#t	          j        d| j
        j        z  ||          }|S )
Nr  z%Couldn't extract raw recipe text for z outputz
\s*string:zh\{\{\s*PKG_HASH\s*\}\}zh[0-9a-f]{%s}r   r   r   )r%  extract_package_and_build_textr   r  r   r   findallrW  r  r  rH   filename_hashingr  r  r]  rsplitr   r   r   r   r   sub)rm  manual_build_stringraw_recipe_textraw_manual_build_stringr  r^  rets          r)   r'  zMetaData.build_idx  s   "nn^<< ==??" 	? 	L		LLL   ==??"$)M?"K"K 	X#	X
57N7UVV	X .???%CC -T22C{+ X
 X..00z/DK4K"KSQQ 
X**S!,,C-CF@EVchhs3q6{{';<<<3sSTv;;% - - -!!fun-3xx!||!hhus122w77&4;3J!JESVWWC
s   AE6 6FFc                    |                                   d|                                  d|                                  S )NrW   )r  r@  r'  rq  s    r)   distzMetaData.dist  s6    ))++BBBBBBBr+   c                0    d|                                  z  S )Nz
%s.tar.bz2)r  rq  s    r)   pkg_fnzMetaData.pkg_fn  s    diikk))r+   c                F    t          |                     d                    S )N	app/entryrs  rq  s    r)   is_appzMetaData.is_app  s    DNN;//000r+   c           	         ddi}|                      d          r;dt          t          | j        |                      d                              z  |d<   dD ]!\  }}|                      |          }|r|||<   "|S )Nr   r  zapp/iconz%s.pngr  ))r   	app_entry)zapp/typeapp_type)zapp/cli_optsapp_cli_opts)zapp/summaryr  )zapp/own_environmentapp_own_environment)r%  r   r   r6  )rm  r   r8  r   r   s        r)   app_metazMetaData.app_meta  s    UO>>*%% 	Y 8DDNN:<V<V,W,W#X#XXAfI
 		 		JE3 NN5))E #r+   c                   | j         j        dk    rdn| j         j        }t          |                                 |                                 |                                 |                                 | j         j        dk    r|dk    r| j         j        nd t          
                    ||          | j         j        t          d |                                 D                       t          t          j                    dz            	  	        }dD ]!}|                     d|z             }|r|||<   "|                     d          }|r||d<   t!          |                     d	                    }d
 |D             }|r||d<   |                     d          r+d                    |                     d                    |d<   |                     d          r+d                    |                     d                    |d<   |                     d          r|                     d          |d<   |                     d          r|                     d          |d<   | j        r+d x|d<   |d<   d|d<   |                     d          }|r||d<   |                                 r'|                    |                                            |S )Nr   c              3  n   K   | ]0}d                      |j                                                  V  1dS r  )r   r  r\   r  s     r)   r  z&MetaData.info_index.<locals>.<genexpr>  s8      QQ388BGMMOO44QQQQQQr+   i  )	r  r@  r   r  r  r   rY   depends	timestamp)r  r  zabout/zbuild/preferred_envrn  zrequirements/run_constrainedc                    g | ]}||S r$   r$   )r&   r(   s     r)   r0   z'MetaData.info_index.<locals>.<listcomp>  s    111Aq1a111r+   
constrainsr  r_   r[  zbuild/track_featuresr\  zbuild/provides_featuresrs  zbuild/requires_featuresrr  r  r   rY   build/noarch)rH   target_subdir	host_archr~   r  r@  r'  r  host_platformr   r   rM  r  r   timer%  r   r   r   r  r   r  )rm  r   r   r   r   rn  r  r  s           r)   
info_indexzMetaData.info_index  s   1X==HH4;CX 	 LLNN--//**,,)X55$(:J:J [..dD));,QQt?P?PQQQQQ$)++,--
 
 
 1 	 	CNN8c>22E #'<== 	/!.Ao !0N!O!OPP
11111
 	)(AlO>>*++ 	GHHT^^4D%E%EFFAjM>>011 	S"%((4>>:P+Q+Q"R"RA>>344 	O%)^^4M%N%NA!">>344 	O%)^^4M%N%NA!"; 	+(,,AjMAfI"AhK  >>.99L +*(;;== 	&HHT]]__%%%r+   c                "   t          |                     dg                     }t          |t                    st	          d          t
          r(t          d |D                       rt	          d          t          || j        j	                  S )Nzbuild/has_prefix_filesz0build/has_prefix_files should be a list of pathsc              3     K   | ]}d |v V  	dS \Nr$   r   s     r)   r  z,MetaData.has_prefix_files.<locals>.<genexpr>  &      **419******r+   zHbuild/has_prefix_files paths must use / as the path delimiter on Windows
r   r%  r   r   r   r   r  r   rH   host_prefixrm  r  s     r)   rb  zMetaData.has_prefix_files  s    $..)A2FFGG#t$$ 	SQRRR 	**c***** "7   C!8999r+   c                n   |                      dd          }t          |t          t          f          st	          d          t
          r=t          |t                    r(t          d |D                       rt	          d          t          |t                    rt          || j        j	                  n|S )Nzbuild/ignore_prefix_filesFzQbuild/ignore_prefix_files should be boolean or a list of paths (optionally globs)c              3     K   | ]}d |v V  	dS r  r$   r   s     r)   r  z/MetaData.ignore_prefix_files.<locals>.<genexpr>  &      ,D,D1TQY,D,D,D,D,D,Dr+   zKbuild/ignore_prefix_files paths must use / as the path delimiter on Windows
r%  r   r   r   r   r   r  r   rH   r  r  s     r)   rd  zMetaData.ignore_prefix_files  s    nn8%@@#d|,, 	%    	#t$$ ,D,D,D,D,D)D)D "7  
 ;ES$:O:OXLdk5666UX	
r+   c                    t          |                     dg                     }t          d |D                       rt          d          t          rd |D             }t          || j        j                  S )Nzbuild/always_include_filesc              3     K   | ]}d |v V  	dS r  r$   r   s     r)   r  z0MetaData.always_include_files.<locals>.<genexpr>
  s&      ((Qtqy((((((r+   zLbuild/always_include_files paths must use / as the path delimiter on Windowsc                :    g | ]}|                     d d          S )r  r  r  )r&   r<  s     r)   r0   z1MetaData.always_include_files.<locals>.<listcomp>  s&    999aQYYsD))999r+   )r   r%  r  r   r   r   rH   r  )rm  r  s     r)   rj  zMetaData.always_include_files  s    DNN+GLLMM((%((((( 	3    	:995999EE4;#:;;;r+   c                H    t          |                     dg                     S )Nzbuild/ignore_verify_codesr   r%  rq  s    r)   ignore_verify_codeszMetaData.ignore_verify_codes  s    4>>*ErJJKKKr+   c                n   |                      dd          }t          |t          t          f          st	          d          t
          r=t          |t                    r(t          d |D                       rt	          d          t          |t                    rt          || j        j	                  n|S )Nzbuild/binary_relocationTzObuild/binary_relocation should be boolean or a list of paths (optionally globs)c              3     K   | ]}d |v V  	dS r  r$   r   s     r)   r  z-MetaData.binary_relocation.<locals>.<genexpr>  r  r+   zIbuild/binary_relocation paths must use / as the path delimiter on Windowsr  r  s     r)   r_  zMetaData.binary_relocation  s    nn6==#d|,, 	%    	#t$$ ,D,D,D,D,D)D)D "7  
 ;ES$:O:OXLdk5666UX	
r+   c                H    t          |                     dd                    S )Nzbuild/include_recipeTrs  rq  s    r)   rm  zMetaData.include_recipe(  s    DNN#94@@AAAr+   c                "   t          |                     dg                     }t          |t                    st	          d          t
          r(t          d |D                       rt	          d          t          || j        j	                  S )Nzbuild/binary_has_prefix_filesz7build/binary_has_prefix_files should be a list of pathsc              3     K   | ]}d |v V  	dS r  r$   r   s     r)   r  z3MetaData.binary_has_prefix_files.<locals>.<genexpr>2  r  r+   zObuild/binary_has_prefix_files paths must use / as the path delimiter on Windowsr  r  s     r)   rc  z MetaData.binary_has_prefix_files+  s    $..)H"MMNN#t$$ 	I    	**c***** "7   C!8999r+   c                H    t          |                     dd                    S )Nz
build/skipFrs  rq  s    r)   rk  zMetaData.skip9  s    DNN<77888r+   c                   	 ddl }n# t          $ r{ t          dt          j                   t          dt          j                   t          | j                  5 }	|	                                cddd           cY S # 1 swxY w Y   Y nw xY wddlm	}
m
}m} t          j                            | j                  \  }}|                    d          |                    |          g}t          j                            d	          }|rt          j                            |          rtt          j                            |          }|                    d
d          }|                    |          }|                    |                    d|i                     |j        }|r	g |_        |} |
|                    |          | j                  }|                    ||          }ddlm} |j                            tA          | j                             |j                             || |                     |j                            ddi           |j                             || || j        |||||                     |r|j                            d|i           	 |r|!                    |          }n-|r|"                    |          }n|!                    d          }dt          j        d<   |#                    |          }|r|j        | _$        ng | _$        nV# |j%        $ rI}dtM          |          v rd}t          j'        d| j         dtM          |                      Y d}~nd}~ww xY wdt          j        v rt          j        d= n # dt          j        v rt          j        d= w xY w|S )ao  
        Get the contents of our [meta.yaml|conda.yaml] file.
        If jinja is installed, then the template.render function is called
        before standard conda macro processors.

        permit_undefined_jinja: If True, *any* use of undefined jinja variables will
                                evaluate to an emtpy string, without emitting an error.
        r   Nz$There was an error importing jinja2.r   zBPlease run `conda install jinja2` to enable jinja template supportr   )FilteredLoaderUndefinedNeverFailcontext_processorconda_buildCONDA_DEFAULT_ENVr  r  z$CONDA_DEFAULT_ENVr   )loader	undefined)get_dict)r   skip_build_idCONDA_BUILD_STATERENDER)rH   rd  re  r#  r5  r   PKG_NAMErt   )environmentz'None' has not attributez$Failed to run jinja context functionz*Error: Failed to render jinja template in z:
)(r   r   r   r   r   r8  r;  r9  jinja_contextr-  r.  r/  rS   r6  r\   PackageLoaderFileSystemLoaderrT   r   r  abspathr   r   PrefixLoaderStrictUndefinedall_undefined_namesChoiceLoaderrH   Environmentr4  globalsr   r   from_stringget_or_select_templater  rf  TemplateErrorr   r   )rm  rd  re  r#  template_stringr5  alt_namer   r   fdr-  r.  r/  r6  filenameloadersconda_env_path
env_loaderundefined_typer2  envr4  templaterenderedexs                            r)   r  zMetaData._get_contents<  s   $		!MMMM 	! 	! 	!8szJJJJTZ    dn%% !wwyy! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !	!	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 t~66h  //##D))
 
 
  	TbgmmN;; 	TW__^<<N+33D#>>N00@@JNN6..0Dj/QRRSSS/! 	0 682/N 3 3G < <T[QQQ  . II%%%%%%=5566688d-HHHIII/:;;;{'='=!1+	 	 		
 	
 	
  	7K
H5666	4 /???;; /55h????2...6BJ*+377H% /,>,R)),.)# 	 	 	)SWW44;HYT^YYPSTVPWPWYY       	 #bj00J23 #bj00J233333se    ABA>/B>B	BB	BB.B L/ .N! /
N9?M=8N! =NN! !N>c                *    t          | j                  S z8
        String representation of the MetaData.
        )r   r1   rq  s    r)   __unicode__zMetaData.__unicode__  s     4=!!!r+   c                *    |                                  S r#   )rU  rq  s    r)   __str__zMetaData.__str__  s    !!!r+   c                *    |                                  S rT  )rW  rq  s    r)   __repr__zMetaData.__repr__  s     ||~~r+   c                   | j         p)|                     di                               dd          }|rMt          j                            |          | j        k    r%t          j                            || j                  }|S )Nr  r6  rt   )rg  r%  r   rS   r6  rh  ri  r   )rm  r;  s     r)   r;  zMetaData.meta_path  sz     O I~~3R88<<VRHH 	
  	A)))44GGY@@Ir+   c                    d}| j         rSt          | j         d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   d|v pd|v S )Nrt   r6  load_setup_py_dataload_setuptoolsr;  r8  r
   r9  r:  rm  	meta_textr<  s      r)   uses_setup_py_in_metazMetaData.uses_setup_py_in_meta  s    	> 	Cdnd++ Cq)!&&((33B	C C C C C C C C C C C C C C C#y0R4E4RR   'AAAc                    d}| j         rSt          | j         d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   d|v S )Nrt   r6  load_file_regexr^  r_  s      r)   uses_regex_in_metazMetaData.uses_regex_in_meta  s    	> 	Cdnd++ Cq)!&&((33B	C C C C C C C C C C C C C C C I--rb  c                    d}| j         rSt          | j         d          5 }t          |                                          j        }d d d            n# 1 swxY w Y   d|v S )Nrt   r6  load_file_datar^  r_  s      r)   uses_load_file_data_in_metaz$MetaData.uses_load_file_data_in_meta  s    	> 	Cdnd++ Cq)!&&((33B	C C C C C C C C C C C C C C C9,,rb  c                :    | j         p| j        p| j        p| j        S r#   )uses_vcs_in_metara  re  rh  rq  s    r)   needs_source_for_renderz MetaData.needs_source_for_render  s2     ! 0)0&0 /		
r+   c                
   | j         sdS t          | j         d          5 }t          |                                          j        }t          j        d|          }d d d            n# 1 swxY w Y   t          |          dk    S )NFr6  z{{.*}}r   )r;  r8  r
   r9  r:  r   r  r   )rm  r<  r`  matchess       r)   
uses_jinjazMetaData.uses_jinja  s    ~ 	5$.$'' 	71%affhh//>IjI66G	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 	7 7||as   <A''A+.A+)Literal['git', 'svn', 'mercurial'] | Nonec                   d}g d}| j         rt          | j         d          5 }t          |                                          j        }|D ]d}t          j        |                                 d|          }t          |          dk    r%|| 	                    d          k    r|dk    rd}|} neddd           n# 1 swxY w Y   |S )	zreturns name of vcs used if recipe contains metadata associated with version control systems.
        If this metadata is present, a download/copy will be forced in parse_or_try_download.
        Ngitsvnhgr6  z_[^\.\s\'\"]+r   r  rt  	mercurial)
r;  r8  r
   r9  r:  r   r  upperr   r%  )rm  vcs	vcs_typesr<  r`  _vcsrm  s          r)   rj  zMetaData.uses_vcs_in_meta  s   
 (((	> 		dnd++ q)!&&((33B	%  D jTZZ\\)H)H)H)TTG7||a''DDNN>4R4R,R,R4<<#.D"               
s   BB==CCc                J   t           rdnd}t          j                            | j        |          }|| j        fD ]}t          j                            |          rg d}t          | j        d          5 }t          |                                          j	        }|D ]l}t          j        | d|t          j                  }t          |          dk    r3||                     d          k    r|d	k    rd
}|c cd d d            c S m	 d d d            n# 1 swxY w Y   d S )Nbld.batbuild.shrq  r6  z"(?:\.exe)?(?:\s+\w+\s+[\w\/\.:@]+)rF   r   r  rt  ru  )r   rS   r6  r   r;  r   r8  r
   r9  r:  r   r  
IGNORECASEr   r%  )rm  build_scriptrecipe_filerx  r<  rw  rm  s          r)   uses_vcs_in_buildzMetaData.uses_vcs_in_build
  s    %+:yy
w||DI|<<($.9 	' 	'Kw~~k** '000	$.$// '1#0#:#:#IL( ' '
 #%* #GGG("$-# # #
 w<<!++t~~n7U7U0U0U"d{{&1#&JJ' ' ' ' ' ' ' ' ' ''' ' ' ' ' ' ' ' ' ' ' ' ' ' '  ts   4BD	DD	D	c                   | j         }|rPt          |          }| j        r9|s7|                     |                                 t          | dd                     }nddlm}  ||           }t          ||          }|r;t          |t          | j                  t          | j        j                            }|                                S )Nr   r   )output_yamlr1  )r;  r>  r  extract_single_output_textr  getattrr  r  r3  r   r   rH   r   r   r   )rm  r2  force_top_levelapply_selectorsr;  r=  r  s          r)   r  zMetaData.get_recipe_text$  s     N	 		,(33K~ o "==IIKKvt!<!<  ,+++++%+d++K)+GG 	&dk**"&t{':";";  K
 !!###r+   c                h    d}d|                      |          v rd}|                      ||          S )NzT(^\s*requirements:.*?)(?=^\s*test:|^\s*extra:|^\s*about:|^\s*-\s+name:|^outputs:|\Z)r  r  z:(^requirements:.*?)(?=^test:|^extra:|^about:|^outputs:|\Z)r  )rm  r  r<  s      r)   extract_requirements_textz"MetaData.extract_requirements_text;  sD    c--o-NNNN NA##A#GGGr+   c                2    |                      dd|          S )Nz+(^outputs:.*?)(?=^test:|^extra:|^about:|\Z)Tr  r  r  )rm  r  s     r)   extract_outputs_textzMetaData.extract_outputs_textH  s(    ##: + $ 
 
 	
r+   c                ,    |                      d          S )NzM(\s*source:.*?)(?=^build:|^requirements:|^test:|^extra:|^about:|^outputs:|\Z)r  rq  s    r)   extract_source_textzMetaData.extract_source_textO  s    ##\
 
 	
r+   c                ,    |                      d          S )Nz<(^.*?)(?=^requirements:|^test:|^extra:|^about:|^outputs:|\Z)r  rq  s    r)   r  z'MetaData.extract_package_and_build_textT  s    ##K
 
 	
r+   c                                          |          }t                              |          } j                            d          pt           d          r j        nd }|sd                                 ig}	 |r& fd|D             }|                    ||f          }n# fd|D             }|                    |          }|r||         nd}	n# t          $ r~  j
        s` j                            di                               d	          r2t          j        t                                        d
|            d}	n                                 }	Y nw xY w|	S )Nr  r  parent_outputsr  c                    g | ]R}|                     d                                           |                     dj        j        dk    rdnd          fSS )r  r   rc   conda_v2r  )r   r  rH   conda_pkg_formatr  s     r)   r0   z7MetaData.extract_single_output_text.<locals>.<listcomp>h  st     ! ! !  		44"#{;sBB 'J!(	 ! ! !r+   c                `    g | ]*}|                     d                                           +S r  r  r  s     r)   r0   z7MetaData.extract_single_output_text.<locals>.<listcomp>v  s/     Q Q Q#!=!= Q Q Qr+   rt   r~  parent_recipez<Didn't match any output in raw metadata.  Target value was: )r  	output_rer  r   r   r   r  r  r  r   r6  r   r   r<   r   )
rm  output_nameoutput_typer  r=  output_matchesr  output_tuplesoutput_indexrA  s
   `         r)   r  z#MetaData.extract_single_output_textY  s   
 ///PP"**;77)--	** 
#*41A#B#BLD 	  	.		,-G	% @! ! ! !  '! ! !  -22K3MNN Q Q Q Q Q Q Q,22;??5CK^L11FF 	% 	% 	%9 %w!;!;!?!?!P!P % **//`S^``   	% s   ?AC BEEc                x    |                                  }t          t                              |                    S )zThis is legacy syntax that we need to support for a while.  numpy x.x means
        "pin run as build" for numpy.  It was special-cased to only numpy.)r  r   numpy_xx_rer   rm  r1  s     r)   r  zMetaData.numpy_xx  s1     --//K&&t,,---r+   tuple[bool, bool]c                   |                                  }t                              |          }d }|rt                              |          }t	          |          |r,|                    d                              d          dk    ndfS )Nr   xru   T)r  numpy_compatible_rer   numpy_compatible_x_rer   r   count)rm  r1  compatible_searchmax_pin_searchs       r)   r  z-MetaData.uses_numpy_pin_compatible_without_xx  s    --///66t<< 	@299$??N
 "##7EON  ##))#..!334
 	
r+   c                   |                      d          }d}|D ]e}d|v r_t          j        d                    |d                             t	          fd|                     d          D                       }|r nfd}|s4| j        r-|                     d          }|rt          j        d	|          }|pt          |          S )
Nr  Fr  z^{}(\s|\Z|$)c              3  B   K   | ]}                     |          V  d S r#   r   )r&   rJ  name_res     r)   r  z+MetaData.uses_subpackage.<locals>.<genexpr>  s@        +.GMM#&&     r+   r  Tr  z{{\s*pin_subpackage\(.*\)\s*}})
r  r   r  r   r  rp  r;  r  r   r   )rm  r  in_reqsr  subpackage_pinr   r  s         @r)   r  zMetaData.uses_subpackage  s   ""9-- 	 	C}}*_%;%;CK%H%HII    262N2Nu2U2U      E 	T4> 	T11$1GGD T!#+Ld!S!S.$~...r+   c                n    |                                  }t          t          j        d|                    S )Nz\{\{\s*compiler\(.*\)\s*\}\})r  r   r   r   r  s     r)   "uses_new_style_compiler_activationz+MetaData.uses_new_style_compiler_activation  s.    --//BI=tDDEEEr+   c                    t          d t          |                     d                    D                       rt          d          d S )Nc              3     K   | ]}d |v V  	dS )rW   Nr$   )r&   r   s     r)   r  z-MetaData.validate_features.<locals>.<genexpr>  s7       
 
&C7N
 
 
 
 
 
r+   r  zV- is a disallowed character in features.  Please change this character in your recipe.)r  r   r%  r   rq  s    r)   r  zMetaData.validate_features  sh     
 
*5dnnEU6V6V*W*W
 
 
 
 
 	 ,  	 	r+   c                F   t          j         |           }| j                                         |_        t          j        | j        j                  |j        _        t          j        | j                  |_        t          | d| j        j        dk    rdnd          |_        |S )Nr   rc   r  r  )r:   rH   r  r   r   r  r  r   )rm  news     r)   r:   zMetaData.copy  s    ioo[%%''
!]4;+>??
=++&(D(K(K**QX
 
 
r+   c                ,    |                      d          S )Nr  )r%  rq  s    r)   r   zMetaData.noarch  s    ~~n---r+   
str | Nonec                    || j                             di           d<   | j        s|s| j                                         d S |rd| j        _        d S d S )Nr   r   )r   ru  ra  rH   reset_platformr  rv  s     r)   r   zMetaData.noarch  sl    6;	Wb))(3! 	1% 	1K&&((((( 	1(0DK%%%	1 	1r+   c                F    t          |                     d                    S )Nr  rs  rq  s    r)   ra  zMetaData.noarch_python  s    DNN#899:::r+   c                    || j                             di           d<   | j        s|s| j                                         d S |rd| j        _        d S d S )Nr   ra  r   )r   ru  r   rH   r  r  rv  s     r)   ra  zMetaData.noarch_python  sk    =B	Wb))/:{ 	15 	1K&&((((( 	1(0DK%%%	1 	1r+   c                N   | j         j        }i | j         _        |                     ddd           t          | j                  }|| j         _        |t          |                                          z  D ]/}t          j        d|z  |                                           r dS 0dS )NTr  z\s*\{\{\s*%s\s*(?:.*?)?\}\}F)	rH   r   rl  r  rf  r   r   r   r  )rm  r   vars_in_reciper   s       r)   variant_in_sourcezMetaData.variant_in_source  s    +% #'#'! 	 	
 	
 	

 T677%!C$7$77 	 	C y.4d6N6N6P6P   tt ur+   c                R    |                      dd                                          S )Nzbuild/pin_dependsrt   )r%  r   rq  s    r)   r   zMetaData.pin_depends  s#    ~~1266<<>>>r+   c                    |                      d           pFt          j                            | j        j                  ot          j        | j        j                  S )Nr  )r  rS   r6  r  rH   work_dirlistdirrq  s    r)   source_providedzMetaData.source_provided  sJ    ##H--- 
GMM$+.//TBJt{?S4T4T	
r+   c                   |                     d|                                           |j        d         d<   |j                             di           }|                     d          |                                 k    s*|                     d          s#|                     d          sd|v r|d= d|v r|d= |j                             di           }d	}|D ]}||v r||         ||<   ||v r||= ||j        d<   d
|_        d S )Nr  r  r|  r`  r  r  r  r   )rX  r*  r`  rt   )r   r  r   rg  )rm  r!  output_dictr|  r   transfer_keysr   s          r)   #reconcile_metadata_with_output_dictz,MetaData.reconcile_metadata_with_output_dict  s)   2=//&$))++2V2VY'/ #''33??6""diikk11OOH%% 2)4)A)A 2 T!!$D  O  $(("55?  	 	Ck!!(-c

#J(-W% &("""r+   c                	   |                     d          |                                 k    rC|                                 }|                     d| j        j        dk    rdnd          |_        n|                                 }t          j        |                     di                     }|                     dg           }|                     dg           }|                     d	g           }|                     d
g           }d |                                D             }|                     d          r|d         |j        _	        |                                 |                     d          k    s*|                     d          s|                     d          r| 
                    ||           |                     d| j        j        dk    rdnd          |_        d|v r]t          j        d                    |d                             |rfd|D             }|rfd|D             }|rfd|D             }i }	|r|	                    d|i          nd  |r|	                    d|i          nd  |r|	                    d	|i          nd  |r|	                    d
|i          nd  |	                    |           |	|j        d<   |                     d          p|                                 |j        d         d<   d|_        |                     dd          |_        |                     dd          |_        |j        s7|j        s0| j        j        |j        j        k    r| j        j        |j        _        |j                             di           }
d|v r|d         |
d<   d|v r|d         |
d<   d|v r|d         r|d         |
d<   d|v r|d         r|d         |
d<   d|v r|d         r|d         |
d<   d|v r;|d         }
|
i }
d|
vr+|                     d|                                          |
d<   |
|j        d<   d|v r|d         |j        d<   d|v r|d         |j        d<   |                     |           |S )Nr  r   rc   r  r  r  r   r  r  r  c                "    i | ]\  }}|d v	||S ))r   r  r  r  r$   r%   s      r)   r*   z0MetaData.get_output_metadata.<locals>.<dictcomp>%	  s4       AqGGG 1GGGr+   r  r`  r  z(?:^{}(?:\s|$|\Z))c                >    g | ]}                     |          |S r$   r  r&   rJ  subpackage_patterns     r)   r0   z0MetaData.get_output_metadata.<locals>.<listcomp>?	  s>     " " " #9K9Q9QRU9V9V"" " "r+   c                >    g | ]}                     |          |S r$   r  r  s     r)   r0   z0MetaData.get_output_metadata.<locals>.<listcomp>C	  s>     ! ! ! #8J8P8PQT8U8U!! ! !r+   c                >    g | ]}                     |          |S r$   r  r  s     r)   r0   z0MetaData.get_output_metadata.<locals>.<listcomp>G	  s>           #7I7O7OPS7T7T      r+   r@  r  Fr   ra  rV  rW  r*  r\  r[  r|  r}  )r   r  r:   rH   r  r   r   r@  r2   r  r  r   r  r   r   r   r@  r  r   ra  r  r  append_parent_metadata)rm  rA  r!  rO  r  rP  rQ  constrain_reqs
other_reqsr  r   r  s              @r)   r  zMetaData.get_output_metadata	  sQ   ::f,,"iikkO#)::dk&Bc&I&I

w$ $O  
 #iikkO+FJJ~r,J,JKKK$"55J#33I"ub11H(__->CCN '--//  J zz(## H7=h7G&4yy{{fjj0000

8$$ 1(.

7(;(; 1 88&QQQ#)::dk&Bc&I&I

w$ $O   &(Z)00@@& &"  " " " "'1" " "J  ! ! ! !'0! ! !I         '/     H L:DNL* 5666$8AKL 3444t6>HL 1222D  *L"N3  %)
+++3?O 0 

9%%7  +I6 %*O!%+ZZ%%@%@O",2JJ,N,NO) %+G/>/LGK(O,B,KKK26+2F&/#(,,Wb99E 6!!"("2h6!!"("2h&&6-+@&'-m'<m$6))f5E.F)*01A*B&'V##z(:#$*:$6j! &  w=E5((&,jj /">">"@"@' 'E(O -2O )/5f~$V,&  06w$W-''888r+   c                    | j                             di           }| j        |                                 |                                 d|d<   ||j         d<   d S )Nr~  )r6  r  r@  r  )r   r   r6  r  r@  )rm  out_metadatar~  s      r)   r  zMetaData.append_parent_metadata	  sX    	gr**IIIKK||~~"
 "
o
 &+'"""r+   c                  	
 t          j        | j        j                   }|                                }t	          | j        j         d                                                   t	                    z
  }| j        j                            dg           }|rt          |d         t                    r|gn|}fd|D             
|                    dg           		
fd|D             }|D ]o}|                    |          }|Vt          |          rGt          |d          s7|dk    r1t          j        t          t          |                              ||<   pt          j        |          }|S )Nr   zip_keysc                l    g | ]0}t          t          |          t                    z            .|1S r$   )r  r  )r&   r   used_variabless     r)   r0   z4MetaData.get_reduced_variant_set.<locals>.<listcomp>	  sI     
 
 
SZZ#nBUBU5U1V1V

 
 
r+   extend_keysc                T    g | ]#t          fd D                       sv!$S )c              3      K   | ]}|v V  	d S r#   r$   )r&   r   r   s     r)   r  z>MetaData.get_reduced_variant_set.<locals>.<listcomp>.<genexpr>	  s'      EEse|EEEEEEr+   )r  )r&   r   r  used_zip_key_groupss    @r)   r0   z4MetaData.get_reduced_variant_set.<locals>.<listcomp>	  sY     
 
 
EEEE1DEEEEE
 ;&&  '&&r+   r   )r   list_of_dicts_to_dict_of_listsrH   r:   r  r   r   r   r   r   r   r   r   r   r   r   dict_of_lists_to_list_of_dicts)rm  r  full_collapsed_variantsreduced_collapsed_variantsreduce_keyszip_key_groupsr   r  r  r  r  s    `       @@r)   get_reduced_variant_setz MetaData.get_reduced_variant_set	  s   "*"IK #
 #
 &=%A%A%C%C"$+.q1668899C<O<OO,00R@@  ",^A->"D"D ^ 	

 
 
 
-
 
 
 .11-DD
 
 
 
 
"
 
 
  		X 		XC,0055F"KK #// # :%% 382CDfDVDV2W2W*3/56PQQ
r+   c           
     	   ddl m} i }| j        rt          |           d         }|| fg}nt	                      }|                     d          }	|                     |	          p| j        j        d d         }
t          | j        d          r| j        j        r|
n| j        j
        gD ]}|                                 }||j        _
        |j        rX| j        rQ|                                 t          j        |j        j                    ||           |                                 	 |                    dd           n# t&          $ r Y nw xY wt          |          }	 |D ]}|                    d          }|r/t          j        |          }d	D ]}t-          |||           ||d<   |                    |          |f|                                t3          fd
                                D                       f<   |t3          |          <   |x|_        _        Đ# t&          $ r	 |s i }Y w xY w|s
J d            t9          |          }t;          || j                   t	                      }g }|                                D ]\  }|                    d          r
|d         dv rG|f|                                t3          fd                                D                       f<   l|                    d          dk    r|                    di                               d          r%t?          d |d         d         D                       s|                    di                               dg           }|                     dd!                    j        j
        d                   g           |                    di           |d<   ||d         d<   "                    d          j#        d<   |j#        d         d<   |$                    |f           |$                    |f           |s7|%                                s#tM          ||d||          }tO          |           g }|(                                D ]#\  }d_        |$                    |f           $||z   }|S )Nr   )provider   T)force_globalr   r  r  r  c                Z    i | ]'}|t          j        j        j        |                   (S r$   r  )r&   r'   r  s     r)   r*   z4MetaData.get_output_metadata_set.<locals>.<dictcomp>	  sA     %& %& %&,- )*4=9L9TUV9W+X+X%& %& %&r+   zError: output metadata set is empty.  Please file an issue on the conda-build tracker at https://github.com/conda/conda-build/issuesr   r   )r  r  c                Z    i | ]'}|t          j        j        j        |                   (S r$   r  r  s     r)   r*   z4MetaData.get_output_metadata_set.<locals>.<dictcomp>
  s?       $% !"4=1A!1D#E#E  r+   wheelr   c              3     K   | ]}d |v V  	dS )pipNr$   rI  s     r)   r  z3MetaData.get_output_metadata_set.<locals>.<genexpr>
  s?       T T),T T T T T Tr+   r  z	python {}rD   )r"  r  r#  ))r  r  r  r
  r   get_used_loop_varsr  rH   r   r   r   r:   rk  r  rl  r   rm_rfr  r  
SystemExitr   r@  r   r  r  r   r  r  r  r  r2   r  r  r   r  r   r   rk  r&  r/  r  )rm  rd  r  r#  r  out_metadata_mapr  r  all_output_metadatar  top_loopr   ref_metadatar  r  rO  r  conda_packagesnon_conda_packagesr  r  final_conda_packagesr%  r   r  s                          @@r)   get_output_metadata_setz MetaData.get_output_metadata_set	  s    	$#####: G	F4T::1=G%t_-MM"---!44$4GGN,,^<<X@TUWVWUW@X  DK44+9=9M+k)*5* 5*
  $yy{{.5#+7 /D<R / ,,...K 3 <===GL))) ,,... 55/3d 6     "   D8FF!*& 0 0'*ww~'>'>' ?+0+<\+J+JL'? T T 7gs S S S S2>C/'3'G'G'L'L" !,/ , , 1 1 3 3 ,%& %& %& %&1=1K1K1M1M%& %& %&!" !"
 ?K(c):):; 002(6670: " * * *1 ')$$$*
 $  ]   $$455L'T[IIII(]]N!#+1133 != !=!||F++  =x/? D 0 0 "1 #$   )*):):     \\&))W44#<<;;??HH 
EPS T T080H0QT T T Q Q 
E &.\\."%E%E%I%I'SU%V%V
"))"K$6$6qx7G7Q$R$RS   4<<<PR3S3S0<F0912~1N1N~.:D~.w7&--xm<<<< '--xm<<<< * 
7,2C2C2E2E 
7!6 "2O%5" " " '~666#% *1133 8 8q $++UAJ777703EEMs%   .E
EE&CH..I Ic                    t          | j        d          r| j        j        n| j        j        }t          j        |d          S )Ninput_variantsT)	loop_only)r   rH   r  r   get_vars)rm  	_variantss     r)   get_loop_varszMetaData.get_loop_varsF
  sH     t{$455&DK&&% 	
  d;;;;r+   c                J      fd                      ||          D             S )Nc                @    h | ]}|                                 v |S r$   )r  )r&   varrm  s     r)   r]   z.MetaData.get_used_loop_vars.<locals>.<setcomp>O
  s>     
 
 
 d((****	  +**r+   r  r  )r  )rm  r  r  s   `  r)   r  zMetaData.get_used_loop_varsN
  sH    
 
 
 
)) /l *  
 
 
 	
r+   c                    |                      |d                                          }t          j        |                     ||d                    pi S )NTr2  r  F)rd  rG  r5  )r  r   r   	safe_loadr  )rm  rd  r2  rG  s       r)   get_rendered_recipe_textz!MetaData.get_rendered_recipe_textW
  sp     ..+T / 
 

&(( 	
 N""+A$3"' #     		
r+   c           	     L   d}d                     |                     |d          |                                 f                                          }t	          j        |                     ||d||                    pi                     dg           }t          | |          S )	Nz(.*)package:r   Tr  F)rd  rG  r5  re  r   r  )r  )	r   r  r  r   r   r  r  r   r
  )rm  rd  r   r2  rG  r  s         r)   get_rendered_outputs_sectionz%MetaData.get_rendered_outputs_sectioni
  s    )))$$$3T %  
 ))++	
 	
 &(( 	 N""+A$3"'+A# #    	 
#i

 	 .dGDDDDr+   c                x    d}|                      ||          D ]}|                    d          |k    r|} n |S )a1  This is for obtaining the rendered, parsed, dictionary-object representation of an
        output. It's not useful for saying what variables are used. You need earlier, more raw
        versions of the metadata for that. It is useful, however, for getting updated, re-rendered
        contents of outputs.N)rd  r   r  )r  r   )rm  r  rd  r   rA  output_s         r)   r  zMetaData.get_rendered_output
  sa    
 88#97 9 
 
 	 	G {{6""d**  + r+   c                F    t          |                     d                    S )Nzbuild/force_ignore_keysr$  rq  s    r)   ru  zMetaData.force_ignore_keys
  s    4>>*CDDEEEr+   c                F    t          |                     d                    S )Nzbuild/force_use_keysr$  rq  s    r)   rt  zMetaData.force_use_keys
  s    4>>*@AABBBr+   c                   | j         }t          t          j        | j        j                            }t          | j        d          r| j        j        }nl|                                 |||| j        j	        |ft          v r1t          |                                 |||| j        j	        |f         }n|                     ||          }d|                                 v}|r|                                 }n|                                 }||z  }d| j        j        v r| j        s|                    d           d| j        j        v r|                    d           | j        s| j        r,|t'          | j                  z
  t'          | j                  z  }|t          |                                 |||| j        j	        |f<   |S )N	used_varsr  r  r  channel_targets)r6  r   r:   r  rH   r   r   r  r  rY   used_vars_cache_get_used_vars_meta_yamlr  _get_used_vars_output_script_get_used_vars_build_scriptsr   r  rt  ru  r  )	rm  r  r  
recipe_dirhashed_variantsr  meta_yaml_reqsr  script_reqss	            r)   r  zMetaData.get_used_vars
  s   Y
 't}T[5H'I'IJJ4;,, 5	-IIIIKKK
   (IIKK# K&#	II ":: /l ;  N #$*>*>*@*@@I B"??AA"??AA&4I DK$7777/000 DK$777/000" d&< &T-C)D)DD'I I 	  IIKK# K&#	 r+   c           	        |r|                      ||          }|}n(| j        r<|s:|                     |                                 t	          | dd           |          }n|                      ||                              |                     |                                          d          |                     |                                 t	          | dd           |          z   }t          j	        dt          j
        t          j        z            }|                    |          }|r|                                nd}||fS )Nr  r   r  rt   z/requirements:.+?(?=^\w|\Z|^\s+-\s(?=name|type))rF   )r  r  r  r  r  r   r  stripr   r  MSr   r   )rm  r  r  r  r=  	reqs_textreqs_res          r)   _get_used_vars_meta_yaml_helperz(MetaData._get_used_vars_meta_yaml_helper
  sk     	?.. / /  K
 $II~ o "==IIKKD&$//$3 >   #22$3_ 3  '--o-NNTTVV  33IIKKD&$//$3 4  	 jB"$QSQU+  G  {33I-6>	)))BI+%%r+   c                   t          t          | j        j                                                            }|                     ||d          \  }}t          j        ||d          }|                     ||d          \  }}t          j        ||d          }|                    |          }|r|}	n/t          j        ||          }
||
z
  }t          | |
          }
||
z  }	|	S )NF)r  r  r  T)selectors_only)
r3   rM  rH   r   r   r  r   find_used_variables_in_textunionrS  )rm  r  r  variant_keysr  r=  all_used_selectorsall_used_reqsall_usedusedrN  outside_reqs_useds               r)   r  z!MetaData._get_used_vars_meta_yaml
  s+   VDK$7$<$<$>$>??@@!%!E!E+%! "F "
 "
	; &A+d
 
 
 "&!E!E+%  "F "
 "
	;
 !<+e
 
 
 !&&'9::  		9DD ( Di! ! !)+< < 4T;L M M$'88Dr+   c                   t                      }t          j                            | j        d          }t          j                            |          r2|                    t          j        | j        j	        |                     t          j                            | j        d          }| j        j
        dk    rQt          j                            |          r2|                    t          j        | j        j	        |                     |S )Nr|  r{  win)r  rS   r6  r   r   r   r   #find_used_variables_in_shell_scriptrH   r   r  #find_used_variables_in_batch_script)rm  r  buildshbldbats       r)   r  z%MetaData._get_used_vars_build_scripts'  s    EE	',,ty*557>>'"" 	<K'   
 di33;5((RW^^F-C-C(<K'   
 r+   c                   |                      |                                 d          pi }t                      }d|v rt          j                            | j        |d                   }t          j                            |          d         dk    r3|                    t          j	        | j
        j        |                     nt          j                            |          d         dk    r3|                    t          j        | j
        j        |                     n2t          j        t                    }|                    d| d           |S )	NTr  r`  r   z.shz.batz.Not detecting used variables in output script zD; conda-build only knows how to search .sh and .bat files right now.)r  r  r  rS   r6  r   splitextr   r   r(  rH   r   r)  r   r   r<   r   )rm  this_outputr  r`  r   s        r)   r  z%MetaData._get_used_vars_output_script9  sW   $$TYY[[$NNTRT 	 EE	{""W\\$)[-BCCFw''*e33  @+V    
 !!&))!,66  @+V     &x00BV B B B   r+   c                >    t          j        | j        j                   S r#   )r   r  rH   rq  s    r)   get_variants_as_dict_of_listsz&MetaData.get_variants_as_dict_of_listsT  s    6t{7KLLLr+   c                8    | j                                          dS )z;This ensures that clean is called with the correct build idN)rH   cleanrq  s    r)   r2  zMetaData.cleanW  s    r+   c                b    t          | j        j        o|                     d          du          S )Nzbuild/activate_in_scriptF)r   rH   activater%  rq  s    r)   activate_build_scriptzMetaData.activate_build_script[  s7    K  H9::%G
 
 	
r+   c                    |                      d          du p| j        j        }|                      d          du }|p3| j        j        o'| o$d| j                            di           vo| j         S )Nzbuild/merge_build_hostTFr  r  )r%  rH   build_is_hostsubdirs_samer   r   r  )rm  manual_overridesmanually_disableds      r)   r7  zMetaData.build_is_hostb  s     NN344< ){( 	 !NN+CDDM 
K$ <%%<dimmNB???< ;;		
r+   c                ^   |                      d                              |                                 d          }i }| j                            di                               di           }| j        r|d         nd }|r*t          j        |                     d||                    }|pi S )	NTr  rt   r~  r  r  F)rG  rH  )	r  r   r  r   r   r  r   r  r  )rm  recipe_no_outputstop_no_outputsr  rH  s        r)   $get_top_level_recipe_without_outputsz-MetaData.get_top_level_recipe_without_outputsp  s     000FFNN%%''
 
 
 	gr2266KK,0ND=(( 	!^""+<x #   N
 ##r+   c                   |                                   d|                                  d|                                  g}|                    d |                     d          D                        |t          j        |                     dg                     z  }|r|dgz  }|r|dgz  }|r|dgz  }|rt          d |D                       s|d	gz  }|                    t          j        | j	        j
                             |S )
Nr_   c              3  $   K   | ]}|j         V  d S r#   )r  r  s     r)   r  z)MetaData.get_test_deps.<locals>.<genexpr>  s$      >>RW>>>>>>r+   r  r  rD   rw   ry   c              3  N   K   | ] }|                                 d          dv V  !dS )r   )r  r  Nr[   )r&   r  s     r)   r  z)MetaData.get_test_deps.<locals>.<genexpr>  s4      UU!qwwyy|/EEUUUUUUr+   r  )r  r@  r'  r  r  r   r   r%  r  rH   
extra_deps)rm  py_filespl_files	lua_filesr_filesr  s         r)   get_test_depszMetaData.get_test_deps  s!   IIKKDD$,,..DD4==??DDE 	>>tu'='=>>>>>>"4>>/2#F#FGGG 	  hZE 	fXE 	eWE 	 3UUuUUUUU 	 hZEU&t{'=>>???r+   )NN)rI   r   )r   r   rI   r   )F)rI   r   )FFF)FF)r  r  rI   r  )r  r  rI   r~   )NT)r  )FFNFNN)rI   ro  )NFT)T)rI   r  )r   r  rI   r   )FN)`r<   r=   r>   rn  propertyr  r  setterrZ  r  r  rl  r  r  r  r?   r  r  r	   r  r%  r  r  r@  r  rp  r  r  r  r'  r  r  r  r  r  rb  rd  rj  r%  r_  rm  rc  rk  r  rU  rW  rY  r;  ra  re  rh  rk  rn  rj  r  r  r  r  r  r  r  r  r  r  r  r  r:   r   ra  r  r   r  r  r  r  r  r  r  r  r  r  r  ru  rt  r  r  r  r  r  r0  r2  r5  r7  r>  rG  __classcell__)r4  s   @r)   ra  ra  G  s       3 3 3 36 
 
 
 X
 3 3 3 X3 \A A A \A T T T XT G G G G
 >C
 
 
 
. : : : X:  %$	G* G* G* G*R  * * * >C+ + + +Z 	 	 	 	 	 [	      [    X    X   > > > >@  *   
 
 
 
  ! ! !06$ 6$ 6$ 6$p? ? ?B   " " "HC C C* * *1 1 1  "3 3 3j
: 
: 
:
 
 
"
< 
< 
<L L L
 
 
"B B B B: : :9 9 9 9  %t t t tl" " "" " "     X S S XS . . X. - - X- 
 
 X
     X     X&    X4 LP$ $ $ $.H H H H
 
 
 

 
 


 
 
 9=( ( ( (T . . . X. 
 
 
 X
 / / X/$ F F XF     . . X. ]1 1 1 ]1 ; ; ; X; 1 1 1 1   X* ? ? X? 
 
 X

( ( (4k k kZ+ + +% % %R  %&+	Q Q Q Qf< < <
 
 
 
 =A
 
 
 
$E E E E6    F F XF C C XC? ? ? ?D JO"& "& "& "&H& & & &P  $  6M M M   
 
 
 X
 
 
 
 X
$ $ $&      r+   ra  )rH   r   rI   rJ   )r  r#   )NFF)i
__future__r   r:   rW  rX  rS   r   r   r  r   collectionsr   	functoolsr   os.pathr   r   typingr   r	   bs4r
   rt   r   r   r   r  r   r   r   rH   r   r   r[  r   r  r   r   r   r   r   r   r   r   r   r   r   r   CLoaderr   r  r   r7   r;   r   r   r  r  r  r  r  r  r  r  r   r   r   r   r   r   r   r   r   r  r  r  r#  r/  r9  r  r  r   r   r   r~   r2  r3  r5  r  r  r  r  r  r  r  r  r
  r&  r,  r3  r>  r	  rS  r_  ra  r$   r+   r)   <module>rR     s	   # " " " " "    				 				 



   # # # # # #                       $ $ $ $ $ $ $ $       ) ) ) ) ) ) ) ) ) ) ; ; ; ; ; ; ; ; ; ; / / / / / / / / " " " " " " 7 7 7 7 7 7	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	KKKK   CH	"    \FF   [FFF+ + + + +V + + +,  / /0I J J J  / /0G H H H  ) )*C D D D  ) )*A B B B x((* BJ@rt  	 bjK 
 #
F   !bj!>??  g g g gT! ! ! !$ "*C
D
D  H H H  #  #  #F3 3 3 
 
 
  6
 
 
   , , , ,2  #
 #
 #
L$ $ $ $N 	#""	$	$	$  dt 	s 		
 	$ 	 	D 	3 	3 	c 	3 	T 	$ 	$ 	3  	4!" 	#$ -  0,$,#, 	, 	d	,
 	t, 	D, 	$, 	D, 	4, 	T, 	$, 	#, 	, 	D, 	"4,  	t!," 	*4#, ,$ 	D%,& 	$',( 	$),* 	d+,, 	-,. 	/,0 	1,2 	s3,4 	$5,6 	7,8 	)$9,: 	t;,< 	d=,> 	"4?,@ 	TA,B 	TC,D 	$E, ,F " !%#!')W, , ,\ " $       ' * OH
 H
V 3   ." " "J  D D D  ; ; ;@  
? 
? 
?: : :z   @ "'g g g gT
 
 
    4  0 0 0 %) %) %)P6 6 6S S S S S S S S S Ss$   B B#"B#'B/ /B>=B>