
    .Ph                         d dl Z d dlmZmZmZmZ d dlZd dlZd dlm	Z	 d dl
mZmZ d dlmZ d dlmZ  G d dej                  Zd	e j        d
ee         defdZd	e j        dedee         fdZdS )    N)AnyDictListOptionalget_in)
DependencyLockSpecification)conda_spec_to_versioned_dep)filter_platform_selectorsc                      e Zd ZU dZg Zeee                  ed<   de	j
        j        de	j        j        f	 ddZd xZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZxZ xZ!xZ"xZ#xZ$Z%dedd fdZ&d	 xZ'Z(d
 Z)d Z*d Z+d Z,dedd fdZ-ddZ.dS )UndefinedNeverFailaJ  
    Copied from https://github.com/conda/conda-build/blob/master/conda_build/jinja_context.py

    A class for Undefined jinja variables.
    This is even less strict than the default jinja2.Undefined class,
    because it permits things like {{ MY_UNDEFINED_VAR[:2] }} and
    {{ MY_UNDEFINED_VAR|int }}. This can mask lots of errors in jinja templates, so it
    should only be used for a first-pass parse, when you plan on running a 'strict'
    second pass later.
    Note:
        When using this class, any usage of an undefined variable in a jinja template is recorded
        in the (global) all_undefined_names class member.  Therefore, after jinja rendering,
        you can detect which undefined names were used by inspecting that list.
        Be sure to clear the all_undefined_names list before calling template.render().
    all_undefined_namesNreturnc                 L    t           j                            | ||||           d S N)jinja2	Undefined__init__)selfhintobjnameexcs        _/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/conda_lock/src_parser/meta_yaml.pyr   zUndefinedNeverFail.__init__!   s)     	!!$c4=====    c                 6    |                      | j                  S r   )_return_undefined_undefined_name)r   argskwargss      r   <lambda>zUndefinedNeverFail.<lambda>2   s    d&<&<T=Q&R&R r   kc                     	 t                               | |          S # t          $ r, | j        J |                     | j        dz   |z             cY S w xY w)N.)object__getattr__AttributeErrorr   r   )r   r#   s     r   r'   zUndefinedNeverFail.__getattr__7   ss    	J%%dA... 	J 	J 	J'333))$*>*Dq*HIIIII	Js    3AAc                 ,    |                      d          S N _return_valuer   s    r   r"   zUndefinedNeverFail.<lambda>@   s    d&8&8&<&< r   c                 ,    |                      d          S r*   r,   r.   s    r   r"   zUndefinedNeverFail.<lambda>A   s    t11"55 r   c                 ,    |                      d          S )Nr   r,   r.   s    r   r"   zUndefinedNeverFail.<lambda>B   s    4--a00 r   c                 ,    |                      d          S )Ng        r,   r.   s    r   r"   zUndefinedNeverFail.<lambda>C   s    T//44 r   c                 ,    |                      d          S )NFr,   r.   s    r   r"   zUndefinedNeverFail.<lambda>D   s    t11%88 r   result_namec                     t           j                            | j                   t          | j        | j        || j                  S )N)r   r   r   r   )r   r   appendr   _undefined_hint_undefined_obj_undefined_exception)r   r3   s     r   r   z$UndefinedNeverFail._return_undefinedF   sH    .55d6JKKK!%#)	
 
 
 	
r   c                 N    t           j                            | j                   |S r   )r   r   r5   r   )r   values     r   r-   z UndefinedNeverFail._return_valueP   s!    .55d6JKKKr   )r   Nr   )/__name__
__module____qualname____doc__r   r   r   str__annotations__r   utilsmissing
exceptionsUndefinedErrorr   __add____radd____mul____rmul____div____rdiv____truediv____rtruediv____floordiv____rfloordiv____mod____rmod____pos____neg____call____getitem____lt____le____gt____ge____complex____pow____rpow__r'   __str____repr____unicode____int__	__float____nonzero__r   r-    r   r   r   r      s           02hsm,111 L ,> 
> > > >" 	SRSG Sh S S8 Sg S SSS!-S0=SSS S#*S-5S S S "S %+S .4S 	S HJS J%9 J J J J =<<Gh55K00G44I88K
S 
5I 
 
 
 
     r   r   meta_yaml_file	platformsr   c                2                                      st            d                               d          5 }t          j        |                                t                    }|                                }t          j	        |          }ddd           n# 1 swxY w Y   t          ddg|g           }	 |                    d           n# t          $ r Y nw xY wt          ddg|g           } fd	|D             }t          ||| g
          S )aL  Parse a simple meta-yaml file for dependencies assuming the target platforms.

    * This will emit one dependency set per target platform. These may differ
      if the dependencies depend on platform selectors.
    * This does not support multi-output files and will ignore all lines with
      selectors other than platform.
    z
 not foundr	undefinedNextrachannels
nodefaultszpip-repositoriesc                 2    i | ]}|t          |          S rb   )"_parse_meta_yaml_file_for_platform).0platformrc   s     r   
<dictcomp>z(parse_meta_yaml_file.<locals>.<dictcomp>u   s6        	4^XNN  r   )dependenciesrj   pip_repositoriessources)existsFileNotFoundErroropenr   Templatereadr   renderyaml	safe_loadr   remove
ValueErrorr
   )	rc   rd   fotrenderedmeta_yaml_datarj   rr   dep_maps	   `        r   parse_meta_yaml_filer   V   s      "" ?> = = =>>>			S	!	! 2ROBGGII1CDDD88::112 2 2 2 2 2 2 2 2 2 2 2 2 2 2
 w
+^R@@H%%%%    w(:;^RPP   !  G
 ) 	   s$   ABB#&B#>C 
C! C!ro   c                   	
 |                      d          5 }d                    t          |                                |                    }t	          j        |t                    }|                                }t          j	        |          }ddd           n# 1 swxY w Y   g 
dt          dt          ddf
fd		d
t          t          t          f         ddf	fd} ||           t          dg|g           D ]} ||           
S )zParse a simple meta-yaml file for dependencies, assuming the target platform.

    * This does not support multi-output files and will ignore all lines with selectors other than platform
    rf   
)ro   rg   Nspeccategoryr   c                 Z    | d S t          | |          }                    |           d S r   )r   r5   )r   r   deprq   s      r   add_specz4_parse_meta_yaml_file_for_platform.<locals>.add_spec   s6    <F)$99C     r   	yaml_datac                     t          ddg| g           D ]} |d           t          ddg| g           D ]} |d           t          ddg| g           D ]} |d           d S )Nrequirementshostmainruntestrequiresdevr   )r   sr   s     r   &add_requirements_from_recipe_or_outputzR_parse_meta_yaml_file_for_platform.<locals>.add_requirements_from_recipe_or_output   s    0)R@@ 	  	 AHQ/B?? 	  	 AHQ,i<< 	 	AHQ	 	r   outputs)rv   joinr   rx   r   rw   r   ry   rz   r{   r?   r   r   r   )rc   ro   r~   filtered_reciper   r   r   r   outputr   rq   s            @@r   rm   rm      s    
		S	!	! 2R))%bggii(CCC
 
 OO7IJJJ88::112 2 2 2 2 2 2 2 2 2 2 2 2 2 2 &(L!s !c !d ! ! ! ! ! !$sCx. T       +*>:::)nb99 7 7..v6666s   A:BB"%B")pathlibtypingr   r   r   r   r   rz   conda_lock.commonr   conda_lock.models.lock_specr	   r
   "conda_lock.src_parser.conda_commonr   conda_lock.src_parser.selectorsr   r   r   Pathr?   r   rm   rb   r   r   <module>r      s>    , , , , , , , , , , , ,   $ $ $ $ $ $ E E E E E E E E J J J J J J E E E E E EE E E E E) E E EP)L) Cy) 	) ) ) )X'L'' 
*' ' ' ' ' 'r   