
ݲk^c           @` s5  d  d l  m Z m Z m Z m Z d  d l m Z d  d l m Z m	 Z	 m
 Z
 m Z m Z m Z d  d l m 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 Z e j d  d
 k r d  d l m Z n  d  d l m Z d  d	 l  Z  d  d	 l! Z! d  d l! m" Z" m# Z# m$ Z$ m% Z% m& Z& m' Z' d  d	 l( Z( d  d l) m* Z* m+ Z+ m, Z, m- Z- d  d	 l. Z. d  d l/ m0 Z0 m1 Z1 m2 Z2 d  d l3 m4 Z4 m3 Z3 d d l5 m6 Z6 m7 Z7 m8 Z8 m9 Z9 d d l: m; Z; d d l< m= Z= d
 d l> m? Z? d
 d l@ mA ZA d
 d lB mC ZC d
 d lD mE ZE e' eF  ZG d e# f d     YZH eC e( jI jJ d   r{eH d  ZK n e# d  ZK d
 d  ZL d eM f d      YZN d! eN f d"     YZO eO   ZP d# e f d$     YZQ e d	 d	 d	 d%   ZS e d	 d	 d&   ZT e d	 d'   ZU e eQ jV eQ jV d(   ZW e d)    ZX e d*    ZY e d+    ZZ e d	 d,   Z[ e& d	 e\ d	 d-  Z] d.   Z^ d/ eM f d0     YZ_ d1 eM f d2     YZ` d3 e
 f d4     YZa d5 e	 f d6     YZb e Z d7   Zc d8 eN f d9     YZd d:   Ze eF d; k r1ee   n  d	 S(<   i    (   t   absolute_importt   divisiont   print_functiont   unicode_literals(   t   defaultdict(   t   ProcessPoolExecutort   ThreadPoolExecutort   Executort   Futuret   _baset   as_completed(   t	   _WorkItem(   t   contextmanager(   t   Enum(   t   EPIPEt	   ESHUTDOWN(   t   partialt   wrapsNi   (   t   BytesIO(   t   cycle(   t   CRITICALt	   Formattert   NOTSETt   StreamHandlert   WARNt	   getLogger(   t   dirnamet   isdirt   isfilet   join(   t   Eventt   Threadt   Lock(   t   sleept   timei   (   t   StringIOt	   iteritemst   on_wint   encode_environment(   t   NULL(   t   expand(   t   memoizemethod(   t   NullHandler(   t   boolify(   t   tqdmt   DeltaSecondsFormatterc           B` s&   e  Z d  Z d d d  Z d   Z RS(   uw  
    Logging formatter with additional attributes for run time logging.

    Attributes:
      `delta_secs`:
        Elapsed seconds since last log/format call (or creation of logger).
      `relative_created_secs`:
        Like `relativeCreated`, time relative to the initialization of the
        `logging` module but conveniently scaled to seconds as a `float` value.
    c         C` s/   t    |  _ t t |   j d | d |  d  S(   Nt   fmtt   datefmt(   R"   t	   prev_timet   superR-   t   __init__(   t   selfR.   R/   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR2   1   s    c         C` sZ   t    } |  j } t |  j |  |  _ | | | _ | j d | _ t t |   j |  S(   Ni  (	   R"   R0   t   maxt
   delta_secst   relativeCreatedt   relative_created_secsR1   R-   t   format(   R3   t   recordt   nowR0   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR8   5   s    		N(   t   __name__t
   __module__t   __doc__t   NoneR2   R8   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR-   &   s   
u   CONDA_TIMED_LOGGINGum   %(relative_created_secs) 7.2f %(delta_secs) 7.2f %(levelname)s %(name)s:%(funcName)s(%(lineno)d): %(message)su<   %(levelname)s %(name)s:%(funcName)s(%(lineno)d): %(message)sc         ` s   d j    f d   |  D  S(   Nu    c         3` s+   |  ]! } d  d   d t  |  Vq d S(   u   
u    u   - N(   t   str(   t   .0t   x(   t   indent(    s.   lib/python2.7/site-packages/conda/common/io.pys	   <genexpr>J   s    (   R   (   t   iterableRB   (    (   RB   s.   lib/python2.7/site-packages/conda/common/io.pyt   dashlistI   s    t   ContextDecoratorc           B` s   e  Z d  Z d   Z RS(   uy   Base class for a context manager class (implementing __enter__() and __exit__()) that also
    makes it a decorator.
    c         ` s"   t        f d    } | S(   Nc          ` s       |  |   SWd  QXd  S(   N(    (   t   argst   kwds(   t   fR3   (    s.   lib/python2.7/site-packages/conda/common/io.pyt	   decoratedU   s    (   R   (   R3   RH   RI   (    (   RH   R3   s.   lib/python2.7/site-packages/conda/common/io.pyt   __call__T   s    (   R;   R<   R=   RJ   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRE   M   s   t   SwallowBrokenPipec           B` s   e  Z d    Z d   Z RS(   c         C` s   d  S(   N(    (   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt	   __enter__`   s    c         C` sD   | r@ t  | t  r@ t | d d   r@ | j t t f k r@ t Sd  S(   Nu   errno(   t
   isinstancet   EnvironmentErrort   getattrR>   t   errnoR   R   t   True(   R3   t   exc_typet   exc_valt   exc_tb(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   __exit__c   s
    (   R;   R<   RL   RU   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRK   \   s   	t   CaptureTargetc           B` s   e  Z d  Z d Z d Z RS(   u   Constants used for contextmanager captured.

    Used similarly like the constants PIPE, STDOUT for stdlib's subprocess.Popen.
    ii(   R;   R<   R=   t   STRINGt   STDOUT(    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRV   n   s   c         c` s  |  d  k r i  }  n  t |   } i  } x@ t |  D]2 \ } } t j j | t  | | <| t j | <q4 Wz, | r} |   n  | r | t  n  d  VWd  x@ t |  D]2 \ } } | t k r t j | =q | t j | <q W| r |   n  | r | t  n  Xd  S(   N(	   R>   R&   R$   t   ost   environt   getR'   RQ   t   False(   t   var_mapt   callbackt   stack_callbackt   new_var_mapt
   saved_varst   namet   value(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   env_varsw   s*    	
	
c         c` s7   i | |  6} t  | d | d |  } | VWd  QXd  S(   NR^   R_   (   Rd   (   Rb   Rc   R^   R_   t   dt   es(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   env_var   s    c         c` s!   t  d |    } | VWd  QXd  S(   NR^   (   Rd   (   R^   Rf   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   env_unmodified   s    c   	      c` s  d   } d t  f d     Y} t j t j } } |  t j k rt t   } | j | _ t	 | |  | _ | t _ n |  } | d k	 r | t _ n  | t j k r t   } | j | _ t	 | |  | _ | t _ n= | t j k r | t _ } n | } | d k	 r| t _ n  |   } t j d  z	 | VWd |  t j k rT| j   | _ n	 | | _ | t j k r~| j   | _ n$ | t j k rd | _ n	 | | _ | | t _ t _ t j d  Xd S(   u  Capture outputs of sys.stdout and sys.stderr.

    If stdout is STRING, capture sys.stdout as a string,
    if stdout is None, do not capture sys.stdout, leaving it untouched,
    otherwise redirect sys.stdout to the file-like object given by stdout.

    Behave correspondingly for stderr with the exception that if stderr is STDOUT,
    redirect sys.stderr to stdout target and set stderr attribute of yielded object to None.

    Args:
        stdout: capture target for sys.stdout, one of STRING, None, or file-like object
        stderr: capture target for sys.stderr, one of STRING, STDOUT, None, or file-like object

    Yields:
        CapturedText: has attributes stdout, stderr which are either strings, None or the
            corresponding file-like function argument.
    c         S` s   t  |  d  r' d |  j k r' t } nM t j d d k rR t |  t  rR t } n" t j d d k rn t } n t } t | |  s t  | d  r | j	 d  } |  j
 |  q t  | d  r | j d  } |  j
 |  q n |  j
 |  d  S(	   Nu   modeu   bi    i   i   u   decodeu   utf-8u   encode(   t   hasattrt   modet   bytest   syst   version_infoRM   R   t   unicodeR?   t   decodet	   old_writet   encode(   R3   t   to_writet   wantedt   decodedt   b(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   write_wrapper   s    	"		t   CapturedTextc           B` s   e  Z RS(    (   R;   R<   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRw      s   u   overtaking stderr and stdoutNu   stderr and stdout yielding back(   t   objectRl   t   stdoutt   stderrRV   RW   R#   t   writeRp   R   R>   RX   t   logt   infot   getvalue(	   Ry   Rz   Rv   Rw   t   saved_stdoutt   saved_stderrt   outfilet   errfilet   c(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   captured   sF    "							c         c` s,   t  j } |  t  _ z	 d  VWd  | t  _ Xd  S(   N(   Rl   t   argv(   t	   args_listt
   saved_args(    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s
    			c           c` s%   t  j   z	 d  VWd  t  j   Xd  S(   N(   t   loggingt   _acquireLockt   _releaseLock(    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   _logger_lock  s    
	c         c` s   t  |   } | j | j | j } } } t   } t   6 | j |  | j t d  t	 t
 | _ | _ Wd  QXz	 d  VWd  t   . | j |  | | | _ | _ | | _ Wd  QXXd  S(   Ni   (   R   t   levelt   disabledt	   propagateR*   R   t
   addHandlert   setLevelR   RQ   R\   t   removeHandler(   t   logger_namet   logrt   _lvlt   _dsbldt   _prpgtt   null_handler(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   disable_logger  s    	
	
c         c` s  t  |  } | j | j | j | j f \ } } } } t t j  } d | _ | j	 |   | j
 t  t   I | j	 |   g  t t | _ | _ | _ | j |  | j	 |   Wd  QXz	 d  VWd  t   + | | | | _ | _ | _ | | _ Wd  QXXd  S(   Nu   stderr(   R   t   handlersR   R   R   R   Rl   Rz   Rb   R   t   setFormattert
   _FORMATTERR   R\   R   (   R   R   R   t   _hndlrsR   R   R   t   handler(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   stderr_log_level-  s     *	
	
c         C` s   t  |  } t d   | j D d   } t t j  } d | _ | j t	  | j
 | p\ t  t   > | r | j |  n  | j |  | j |   | | _ Wd  QXd  S(   Nc         s` s$   |  ] } | j  d  k r | Vq d S(   u   stderrN(   Rb   (   R@   R   (    (    s.   lib/python2.7/site-packages/conda/common/io.pys	   <genexpr>E  s    u   stderr(   R   t   nextR   R>   R   Rl   Rz   Rb   R   R   R   R   R   R   R   R   (   R   R   R   t	   formatterR   t   old_stderr_handlert   new_stderr_handler(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   attach_stderr_handlerB  s    		
c         ` s   | j  d d  } t rA y | | |   SWq t k
 r= | SXn d t f d     Y    f d   } t j t j |  t j |   y$ | | |   } t j d  | SWn   t f k
 r | SXd S(   u[   Enforce a maximum time for a callable to complete.
    Not yet implemented on Windows.
    u   default_returnt   TimeoutExceptionc           B` s   e  Z RS(    (   R;   R<   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR   d  s   c         ` s        d  S(   N(    (   t   signumt   frame(   R   (    s.   lib/python2.7/site-packages/conda/common/io.pyt	   interruptg  s    i    N(   t   popR>   R%   t   KeyboardInterruptt	   Exceptiont   signalt   SIGALRMt   alarm(   t   timeout_secst   funcRF   t   kwargst   default_returnR   t   ret(    (   R   s.   lib/python2.7/site-packages/conda/common/io.pyt   timeoutW  s     t   Spinnerc           B` s_   e  Z d  Z e d  Z e e d d  Z d   Z d   Z	 d   Z
 e d    Z d   Z RS(	   u  
    Args:
        message (str):
            A message to prefix the spinner with. The string ': ' is automatically appended.
        enabled (bool):
            If False, usage is a no-op.
        json (bool):
           If True, will not output non-json to stdout.

    u   /-\|u   failed
c         C` s   | |  _  | |  _ | |  _ t   |  _ t d |  j  |  _ t t	 |  j
   d |  _ t j |  _ | o | o t |  j d  o |  j j   |  _ | |  _ d  S(   Nt   targeti   u   isatty(   t   messaget   enabledt   jsonR   t   _stop_runningR   t   _start_spinningt   _spinner_threadt   lenR   t   spinner_cyclet   _indicator_lengthRl   Ry   t   fhRi   t   isattyt	   show_spint   fail_message(   R3   R   R   R   R   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR2     s    			1c         C` sF   |  j  r |  j j   n) |  j sB |  j j d  |  j j   n  d  S(   Nu   ...working... (   R   R   t   startR   R   R{   t   flush(   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s
    		c         C` s3   |  j  r/ |  j j   |  j j   t |  _  n  d  S(   N(   R   R   t   setR   R   R\   (   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   stop  s    	c         C` s   ye x^ |  j  j   sc |  j j t |  j  d  |  j j   t d  |  j j d |  j  q WWn8 t	 k
 r } | j
 t t f k r |  j   q   n Xd  S(   Nu    g?u   (   R   t   is_setR   R{   R   R   R   R!   R   RN   RP   R   R   R   (   R3   t   e(    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s    
c         C` s>   |  j  s0 t j j d |  j  t j j   n  |  j   d  S(   Nu   %s: (   R   Rl   Ry   R{   R   R   R   (   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRL     s    	c         C` sf   |  j    |  j sb t D | s& | r< t j j |  j  n t j j d  t j j   Wd  QXn  d  S(   Nu   done
(   R   R   t   swallow_broken_pipeRl   Ry   R{   R   R   (   R3   RR   RS   RT   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRU     s    
	(   R;   R<   R=   R   R   RQ   R\   R2   R   R   R   R   RL   RU   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR   u  s   
			t   ProgressBarc           B` s8   e  Z e e d   Z d   Z d   Z e d    Z RS(   c         C` s   | |  _  | |  _ | |  _ | r$ nz | r d } y1 t d | d | d t d d d t j  |  _ Wq t k
 r } | j	 t
 t f k r t |  _ q   q Xn  d S(	   u  
        Args:
            description (str):
                The name of the progress bar, shown on left side of output.
            enabled (bool):
                If False, usage is a no-op.
            json (bool):
                If true, outputs json progress to stdout rather than a progress bar.
                Currently, the json format assumes this is only used for "fetch", which
                maintains backward compatibility with conda 4.3 and earlier behavior.
        u!   {desc}{bar} | {percentage:3.0f}% t   desct
   bar_formatt   asciit   totali   t   fileN(   t   descriptionR   R   R,   RQ   Rl   Ry   t   pbarRN   RP   R   R   R\   (   R3   R   R   R   R   R   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR2     s    			c         C` s   y\ |  j  r5 |  j r5 t j j d |  j | f  n& |  j r[ |  j j | |  j j  n  Wn7 t	 k
 r } | j
 t t f k r t |  _ q   n Xd  S(   Nu:   {"fetch":"%s","finished":false,"maxval":1,"progress":%f}
 (   R   R   Rl   Ry   R{   R   R   t   updatet   nRN   RP   R   R   R\   (   R3   t   fractionR   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt	   update_to  s    	!c         C` s   |  j  d  d  S(   Ni   (   R   (   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   finish  s    c         C` sV   |  j  r9 |  j r9 t j j d |  j  t j j   n |  j  rR |  j j   n  d  S(   Nu8   {"fetch":"%s","finished":true,"maxval":1,"progress":1}
 (	   R   R   Rl   Ry   R{   R   R   R   t   close(   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s    	(	   R;   R<   RQ   R\   R2   R   R   R   R   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s   		t   DummyExecutorc           B` s/   e  Z d    Z d   Z d   Z e d  Z RS(   c         C` s   t  |  _ t   |  _ d  S(   N(   R\   t	   _shutdownR    t   _shutdownLock(   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR2     s    	c      	   O` s|   |  j  m |  j r" t d   n  t   } y | | |   } Wn  t k
 r` } | j |  n X| j |  | SWd  QXd  S(   Nu*   cannot schedule new futures after shutdown(   R   R   t   RuntimeErrorR   t   BaseExceptiont   set_exceptiont
   set_result(   R3   t   fnRF   R   RH   t   resultR   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   submit  s    
		c         g` s1   x* | D]" } x | D] } | |  Vq Wq Wd  S(   N(    (   R3   R   t	   iterablesRC   t   thing(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   map
  s    c         C` s   |  j   t |  _ Wd  QXd  S(   N(   R   RQ   R   (   R3   t   wait(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   shutdown  s    
(   R;   R<   R2   R   R   RQ   R   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s   			t   ThreadLimitedThreadPoolExecutorc           B` s   e  Z d  d  Z d   Z RS(   i
   c         C` s   t  t |   j |  d  S(   N(   R1   R   R2   (   R3   t   max_workers(    (    s.   lib/python2.7/site-packages/conda/common/io.pyR2     s    c      	   O` s   |  j   |  j r" t d   n  t j   } t | | | |  } |  j j |  y |  j   Wn, t k
 r t	 |  j
  d k r q   n X| SWd QXd S(   u  
        This is an exact reimplementation of the `submit()` method on the parent class, except
        with an added `try/except` around `self._adjust_thread_count()`.  So long as there is at
        least one living thread, this thread pool will not throw an exception if threads cannot
        be expanded to `max_workers`.

        In the implementation, we use "protected" attributes from concurrent.futures (`_base`
        and `_WorkItem`). Consider vendoring the whole concurrent.futures library
        as an alternative to these protected imports.

        https://github.com/agronholm/pythonfutures/blob/3.2.0/concurrent/futures/thread.py#L121-L131  # NOQA
        https://github.com/python/cpython/blob/v3.6.4/Lib/concurrent/futures/thread.py#L114-L124
        u*   cannot schedule new futures after shutdowni    N(   t   _shutdown_lockR   R   R	   R   R   t   _work_queuet   putt   _adjust_thread_countR   t   _threads(   R3   R   RF   R   RH   t   w(    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s    
	(   R;   R<   R2   R   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR     s   c          C` s+   t  d d d  }  t t j j d |    S(   Nu   ~u   .condau   instrumentation-record.csvu!   CONDA_INSTRUMENTATION_RECORD_FILE(   R   R(   RY   RZ   R[   (   t   default_record_file(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   get_instrumentation_record_file?  s    t   time_recorderc           B` s   e  Z e   Z d Z e e  Z e e	  Z
 d d d   Z d   Z d   Z d   Z d   Z e d    Z e d    Z RS(   c         C` s   | |  _  | |  _ d  S(   N(   t
   entry_namet   module_name(   R3   R   R   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR2   J  s    	c         C` sk   |  j  d  k rg t | d  r* | j } n d | j } |  j r[ d j |  j | f  } n  | |  _  n  d  S(   Nu   __qualname__u   :u   .(   R   R>   Ri   t   __qualname__R;   R   R   (   R3   RH   R   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   _set_entry_nameN  s    	c         C` s#   |  j  |  t t |   j |  S(   N(   R   R1   R   RJ   (   R3   RH   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRJ   X  s    c         C` s7   t  j j d  } | r3 t |  r3 t   |  _ n  |  S(   Nu   CONDA_INSTRUMENTATION_ENABLED(   RY   RZ   R[   R+   R"   t
   start_time(   R3   R   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRL   \  s    c         C` s   |  j  r |  j } t   } | |  j  } |  j | c d 7<|  j | c | 7<|  j   t |  j d   } | j d | | f  Wd  QXn  d  S(   Ni   u   au   %s,%f
(	   R   R   R"   t   total_call_numt   total_run_timet   _ensure_dirt   opent   record_fileR{   (   R3   RR   RS   RT   R   t   end_timet   run_timeR   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyRU   b  s    			
c         C` s}   t  j j d  } | o! t |  s( d  St j d  xA t |  j j    D]* } t j d |  j | |  j	 | |  qK Wd  S(   Nu   CONDA_INSTRUMENTATION_ENABLEDu*   === time_recorder total time and calls ===u   TOTAL %9.3f % 9d %s(
   RY   RZ   R[   R+   R|   R}   t   sortedR   t   keysR   (   t   clsR   R   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt
   log_totalsp  s    

c         C` s2   t  t |  j   s. t j t |  j   n  d  S(   N(   R   R   R   RY   t   makedirs(   R3   (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR   ~  s    N(   R;   R<   R   R   R>   R   R   t   intR   t   floatR   R2   R   RJ   RL   RU   t   classmethodR  R)   R   (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyR   D  s   		
			c    
      C` s  t    }  t t  } i  } t |   s+ d  St |   J } x@ | D]8 } | j   j d  \ } } | | j t |   qA WWd  QXx_ t	 |  D]Q } | | } t
 |  } t |  } | | }	 i | d 6| d 6|	 d 6| | <q Wt t j | d t d d d d
  d  S(   Nu   ,u   countsu
   total_timeu   average_timet	   sort_keysRB   i   t
   separatorsu   : (   u   ,u   : (   R   R   t   listR   R   t   stript   splitt   appendR  R   R   t   sumt   printR   t   dumpsRQ   (
   R   t   grouped_datat
   final_dataR   t   lineR   t
   total_timet	   all_timest   countst   average_time(    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   print_instrumentation_data  s&    	!

u   __main__(f   t
   __future__R    R   R   R   t   collectionsR   t   concurrent.futuresR   R   R   R   R	   R
   t   concurrent.futures.threadR   t
   contextlibR   t   enumR   RP   R   R   t	   functoolsR   R   Rl   Rm   t   ioR   t	   itertoolsR   R   R   R   R   R   R   R   R   RY   t   os.pathR   R   R   R   R   t	   threadingR   R   R    R"   R!   t   compatR#   R$   R%   R&   t	   constantsR'   t   pathR(   t   _vendor.auxlib.decoratorsR)   t   _vendor.auxlib.logzR*   t   _vendor.auxlib.type_coercionR+   t   _vendor.tqdmR,   R;   R|   R-   RZ   R[   R   RD   Rx   RE   RK   R   RV   R>   Rd   Rg   Rh   RW   R   R   R   R   R   R\   R   R   R   R   R   R   R   R   R  (    (    (    s.   lib/python2.7/site-packages/conda/common/io.pyt   <module>   s~   "..""				d
		G:)	@	