ó
Ý²k^c           @@ sÂ  d  d l  m Z m Z d  d l m Z d  d l m Z d  d l Z d  d l Z d  d l	 Z	 d  d l
 m Z d  d l m Z d  d l m Z d  d l m Z d  d	 l m Z d  d
 l m Z d  d l m Z d  d l m Z d d l m Z m Z m Z d  d l m Z y d  d l  m! Z! m" Z" Wn' e# k
 rId  d l$ m! Z! m" Z" n Xd Z% d „  Z& d „  Z' e( e( e( d „ Z) d „  Z* d „  Z+ d e f d „  ƒ  YZ, d d „ Z. d e/ f d „  ƒ  YZ0 d S(    i    (   t   absolute_importt   print_function(   t   OrderedDict(   t   chainN(   t   context(   t   common(   t   yaml_load_standard(   t
   PrefixData(   t   PackageType(   t	   MatchSpec(   t   PrefixGraph(   t   dumpi   (   t   compatt
   exceptionst   yaml(   t   History(   t   concatvt   groupbyt   namet   dependenciest   prefixt   channelsc   
      @ s‘  g  } |  r |  j  ƒ  n i  } x= |  j ƒ  D]/ } | t k r+ | j | ƒ | j | ƒ q+ q+ W| r| j d ƒ } t | ƒ d k r‹ d n d } t | ƒ d k r© d n d } t d j d | d | d	 | ƒ ƒ x! | D] } t d
 j | ƒ ƒ qØ Wt d ƒ n  |  j d g  ƒ } t	 j
 d ƒ ‰  xg | D]_ }	 t |	 t ƒ r*d |	 k r*t ‡  f d †  | Dƒ ƒ r*t d ƒ | d j d d ƒ q*q*W| S(   s8   Check for unknown keys, remove them and print a warning.t   filenamei   t   aret   ist   st    sn   
EnvironmentSectionNotValid: The following section{plural} on '{filename}' {verb} invalid and will be ignored:t   pluralt   verbs    - {}R   s   [<>~\s=]t   pipc         3@ s7   |  ]- } t  | d  ƒ s ˆ  j | ƒ d d k Vq d S(   t   keysi    R   N(   t   hasattrt   split(   t   .0t   _(   t   depsplit(    s,   lib/python2.7/site-packages/conda_env/env.pys	   <genexpr>8   s    sE  Warning: you have pip-installed dependencies in your environment file, but you do not list pip itself as one of your conda dependencies.  Conda may not use the correct pip to install your packages, and they may end up in the wrong place.  Please add an explicit pip dependency.  I'm adding one for you, but still nagging you.i    (   t   copyR   t
   VALID_KEYSt   appendt   popt   gett   lent   printt   formatt   ret   compilet
   isinstancet   dictt   anyt   insert(
   t   datat   kwargst   invalid_keyst   new_datat   keyR   R   R   t   depst   dep(    (   R#   s,   lib/python2.7/site-packages/conda_env/env.pyt   validate_keys    s.    
c         C@ s   d d g } xw t  r… xB | D]: } y t t j j |  | ƒ ƒ SWq t j k
 rU q Xq W|  } t j j |  ƒ }  |  | k r Pq q Wt j | d ƒ ‚ d S(   s=   Load and return an ``Environment`` from a given ``directory``s   environment.ymls   environment.yamli    N(   t   Truet	   from_filet   ost   patht   joinR   t   EnvironmentFileNotFoundt   dirname(   t	   directoryt   filest   ft   old_directory(    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   load_from_directoryB   s    	c      	   C@ s[  | re t  | ƒ j ƒ  } g  | j ƒ  D] } t | ƒ ^ q% } t d |  d | d t t j ƒ d | ƒ St | d t	 ƒ} t
 t | j ƒ  ƒ j ƒ }	 t d „  |	 ƒ }
 t t |
 j d d ƒ |
 j t j d ƒ |
 j t j d ƒ ƒ d d „  ƒ} t t |
 j t j d ƒ |
 j t j d ƒ |
 j t j d ƒ ƒ d d	 „  ƒ} | rtg  | D]! } d
 j | j | j f ƒ ^ qJ} n4 g  | D]' } d
 j | j | j | j f ƒ ^ q{} | rè| j i g  | D] } d | j | j f ^ q¾d 6ƒ n  t t j ƒ } | s<x< | D]1 } | j j } | | k r| j  d | ƒ qqWn  t d |  d | d | d | ƒ S(   sf  
        Get environment object from prefix
    Args:
        name: The name of environment
        prefix: The path of prefix
        no_builds: Whether has build requirement
        ignore_channels: whether ignore_channels
        from_history: Whether environment file should be based on explicit specs in history

    Returns:     Environment object
    R   R   R   R   t   pip_interop_enabledc         S@ s   |  j  S(   N(   t   package_type(   t   x(    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   <lambda>h   s    R6   c         S@ s   |  j  S(   N(   R   (   RH   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyRI   m   s    c         S@ s   |  j  S(   N(   R   (   RH   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyRI   t   s    t   =s   %s==%sR   i    N(    (    (    (    (    (    (!   R   t   get_requested_specs_mapt   valuest   strt   Environmentt   listR   R   R   R:   t   tupleR
   t   iter_recordst   graphR   t   sortedR   R(   t   NoneR   t   NOARCH_GENERICt   NOARCH_PYTHONt   VIRTUAL_PYTHON_WHEELt   VIRTUAL_PYTHON_EGG_MANAGEABLEt   VIRTUAL_PYTHON_EGG_UNMANAGEABLER>   R   t   versiont   buildR&   t   channelt   canonical_nameR1   (   R   R   t	   no_buildst   ignore_channelst   from_historyt   historyt   packageR7   t   pdt   precst   grouped_precst   conda_precst	   pip_precst   aR   R   t   precR]   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   from_environmentS   s<    %!14:c         K@ s[   t  |  ƒ } t | | ƒ } | d k	 rQ x' | j ƒ  D] \ } } | | | <q4 Wn  t |   S(   s>   Load and return a ``Environment`` from a given ``yaml string``N(   R   R9   RT   t   itemsRN   (   t   yamlstrR3   R2   R6   t   value(    (    s,   lib/python2.7/site-packages/conda_env/env.pyt	   from_yaml†   s    c         C@ s\   t  j j |  ƒ s$ t j |  ƒ ‚ n  t |  d ƒ # } | j ƒ  } t | d |  ƒSWd  QXd  S(   Nt   rR   (   R<   R=   t   existsR   R?   t   opent   readRn   (   R   t   fpRl   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyR;   ’   s
    t   Dependenciesc           B@ s#   e  Z d  „  Z d „  Z d „  Z RS(   c         O@ s0   t  t |  ƒ j | | Ž  | |  _ |  j ƒ  d  S(   N(   t   superRt   t   __init__t   rawt   parse(   t   selfRw   t   argsR3   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyRv   œ   s    	c         C@ sÃ   |  j  s d  S|  j i g  d 6ƒ xJ |  j  D]? } t | t ƒ rP |  j | ƒ q+ |  d j t j | ƒ ƒ q+ Wd |  k r¿ |  d sŽ |  d =n  t d „  |  d Dƒ ƒ s¿ |  d j d ƒ q¿ n  d  S(   Nt   condaR   c         s@ s$   |  ] } t  | ƒ j d  k Vq d S(   R   N(   R	   R   (   R!   R   (    (    s,   lib/python2.7/site-packages/conda_env/env.pys	   <genexpr>°   s    (   Rw   t   updateR.   R/   R&   R   t   arg2specR0   (   Ry   t   line(    (    s,   lib/python2.7/site-packages/conda_env/env.pyRx   ¡   s    	

c         C@ s   |  j  j | ƒ |  j ƒ  d  S(   N(   Rw   R&   Rx   (   Ry   t   package_name(    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   add´   s    (   t   __name__t
   __module__Rv   Rx   R€   (    (    (    s,   lib/python2.7/site-packages/conda_env/env.pyRt   ›   s   		c         c@ s   t  ƒ  } | j } | d k rP xj |  D]$ } | | k r% | | ƒ | Vq% q% Wn; x8 |  D]0 } | | ƒ } | | k rW | | ƒ | VqW qW Wd S(   s   Return only unique elements of a sequence
    >>> tuple(unique((1, 2, 3)))
    (1, 2, 3)
    >>> tuple(unique((1, 2, 1, 3)))
    (1, 2, 3)
    Uniqueness can be defined by key keyword
    >>> tuple(unique(['cat', 'mouse', 'dog', 'hen'], key=len))
    ('cat', 'mouse')
    N(   t   setR€   RT   (   t   seqR6   t   seent   seen_addt   itemt   val(    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   unique¹   s    
		

RN   c           B@ sS   e  Z d d d d d d  „ Z d „  Z d „  Z d d „ Z d d „ Z d „  Z RS(   c         C@ sL   | |  _  | |  _ | |  _ t | ƒ |  _ | d  k r? g  } n  | |  _ d  S(   N(   R   R   R   Rt   R   RT   R   (   Ry   R   R   R   R   R   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyRv   Ó   s    				c         C@ s+   t  t t j | |  j f ƒ ƒ ƒ |  _ d  S(   N(   RO   R‰   R   t   from_iterableR   (   Ry   R   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   add_channelsÞ   s    c         C@ s   g  |  _  d  S(   N(   R   (   Ry   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   remove_channelsá   s    c         C@ s“   t  j d |  j f g ƒ } |  j r4 |  j | d <n  |  j rP |  j j | d <n  |  j ri |  j | d <n  | d  k ry | S| j t	 j
 | ƒ ƒ d  S(   NR   R   R   R   (   R   R/   R   R   R   Rw   R   RT   t   writet   jsont   dumps(   Ry   t   streamt   d(    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   to_dictä   s    			c         C@ sQ   |  j  ƒ  } t j t | ƒ ƒ } | d  k r1 | S| j t j | d d ƒƒ d  S(   Nt   encodings   utf-8(   R’   R   t   uR   RT   R   t   b(   Ry   R   R‘   t   out(    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   to_yamlð   s
    c         C@ s/   t  |  j d ƒ  } |  j d | ƒ Wd  QXd  S(   Nt   wbR   (   Rq   R   R—   (   Ry   Rs   (    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   save÷   s    N(	   R   R‚   RT   Rv   R‹   RŒ   R’   R—   R™   (    (    (    s,   lib/python2.7/site-packages/conda_env/env.pyRN   Ò   s   	
		(   R   R   R   R   (1   t
   __future__R    R   t   collectionsR   t	   itertoolsR   R<   R,   RŽ   t   conda.base.contextR   t	   conda.cliR   t   conda.common.serializeR   t   conda.core.prefix_dataR   t   conda.models.enumsR   t   conda.models.match_specR	   t   conda.models.prefix_graphR
   t   conda_env.yamlR   R   R   R   R   t   conda.historyR   t   cytoolz.itertoolzR   R   t   ImportErrort   conda._vendor.toolz.itertoolzR%   R9   RE   t   FalseRj   Rn   R;   Rt   RT   R‰   t   objectRN   (    (    (    s,   lib/python2.7/site-packages/conda_env/env.pyt   <module>   s8   	"	3			