Ñò
muLc        )   @   s½  d  d d d g Z  d d k Z d d k Z d d k Z d d k Z d d k Z d d k Z d d k l Z d d k	 l
 Z
 l Z l Z l Z l Z l Z d d k l Z d d	 k l Z l Z l Z l Z d d
 k l Z l Z y d d k l Z Wn# e j
 o d d k l Z n Xd „  Z e i e i e ƒ g  Z  d d d f D] Z! e  e" e# h  e! ƒ ƒ  ƒ qJ[  Z$ d e% f d „  ƒ  YZ& f  h  d „ Z' d „  Z( d e) f d „  ƒ  YZ* d „  Z+ d „  Z, d e% f d „  ƒ  YZ- d e% f d „  ƒ  YZ. h e i/ e i0 f d 6e i1 e i2 f d 6Z3 d  e% f d „  ƒ  YZ4 d e5 f d „  ƒ  YZ6 d e% f d  „  ƒ  YZ7 d! „  Z8 h  d" „ Z9 e: e: e: e; d# „ Z< d$ e% f d% „  ƒ  YZ= d& e% f d' „  ƒ  YZ> e; d( „ Z? d) e7 f d* „  ƒ  YZ@ d+ e7 f d, „  ƒ  YZA d- eA f d. „  ƒ  YZB d/ e7 f d0 „  ƒ  YZC d1 e7 f d2 „  ƒ  YZD d3 e7 f d4 „  ƒ  YZE e9 d5 d6 d7 d8 d9 d: d; d< d= d> d? d@ dA dB dC dD dE dF dG dH dI dJ dK f ƒ ZF dL eF f dM „  ƒ  YZG e9 dN d7 d8 d: d< d@ dO dP dQ dR d d dG dS dT dU d f ƒ ZH e9 dV d< d: d@ d; dA f ƒ ZI e9 dW dX dY dZ d[ d\ d] d^ d_ d` f	 ƒ ZJ h da dY 6da d_ 6db d[ 6db d\ 6eJ _K d e4 f dc „  ƒ  YZL eL i dd e i ƒ eL i de e i ƒ eL i df e iM eC ƒ eL i dg e iN eA ƒ eL i dh e iO eA ƒ eL i di e iP eA ƒ eL i dj e iQ eA ƒ eL i dk e iR eB ƒ eL i dl e eJ ƒ eL i dm eS eG ƒ eL i dn eT eH ƒ eL i d& e> eE ƒ eL i do e? eI ƒ eL i d$ e= eD ƒ eL i db dp e@ dq eU ƒeL i da dq eU ƒd S(r   t   BaseManagert   SyncManagert	   BaseProxyt   TokeniÿÿÿÿN(   t
   format_exc(   t   Processt   current_processt   active_childrent   Poolt   utilt
   connection(   t   AuthenticationString(   t   exitt   Popent   assert_spawningt   ForkingPickler(   t   Finalizet   info(   t   PicklingErrorc         C   s   t  i  |  i |  i ƒ  f f S(   N(   t   arrayt   typecodet   tostring(   t   a(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   reduce_array&   s    t   itemst   keyst   valuesc           B   s8   e  Z d  Z d Z d „  Z d „  Z d „  Z d „  Z RS(	   s4   
    Type to uniquely indentify a shared object
    t   typeidt   addresst   idc         C   s!   | | | |  _  |  _ |  _ d  S(   N(   R   R   R   (   t   selfR   R   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __init__6   s    c         C   s   |  i  |  i |  i f S(   N(   R   R   R   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __getstate__9   s    c         C   s   | \ |  _  |  _ |  _ d  S(   N(   R   R   R   (   R   t   state(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __setstate__<   s    c         C   s   d |  i  |  i |  i f S(   Ns#   Token(typeid=%r, address=%r, id=%r)(   R   R   R   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __repr__?   s    (   s   typeids   addresss   id(   t   __name__t
   __module__t   __doc__t	   __slots__R   R    R"   R#   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   0   s   			c         C   sP   |  i  | | | | f ƒ |  i ƒ  \ } } | d j o | St | | ƒ ‚ d S(   sL   
    Send a message to manager using connection `c` and return response
    s   #RETURNN(   t   sendt   recvt   convert_to_error(   t   cR   t
   methodnamet   argst   kwdst   kindt   result(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   dispatchG   s
    c         C   sˆ   |  d j o | S|  d j o% t  | ƒ t j p t ‚ t | ƒ S|  d j o) t  | ƒ t j p t ‚ t d | ƒ St d ƒ Sd  S(   Ns   #ERRORs
   #TRACEBACKs   #UNSERIALIZABLEs   Unserializable message: %s
s   Unrecognized message type(   t   typet   strt   AssertionErrort   RemoteErrort
   ValueError(   R/   R0   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR*   Q   s    R5   c           B   s   e  Z d  „  Z RS(   c         C   s)   d d d d t  |  i d ƒ d d S(   Ns   
t   -iK   i    (   R3   R-   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __str__^   s    (   R$   R%   R8   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR5   ]   s   c         C   sQ   g  } xD t  |  ƒ D]6 } t |  | ƒ } t | d ƒ o | i | ƒ q q W| S(   s4   
    Return a list of names of methods of `obj`
    t   __call__(   t   dirt   getattrt   hasattrt   append(   t   objt   tempt   namet   func(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   all_methodse   s     c         C   s:   g  } t  |  ƒ D]" } | d d j o | | q q ~ S(   sP   
    Return a list of names of methods of `obj` which do not start with '_'
    i    t   _(   RB   (   R>   t   _[1]R@   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   public_methodsp   s    t   Serverc        	   B   sÚ   e  Z d  Z d d d d d d d d d	 g	 Z d
 „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 h e	 d 6e
 d 6e d 6Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z RS(   sM   
    Server class which runs in a process controlled by a manager object
    t   shutdownt   createt   accept_connectiont   get_methodst
   debug_infot   number_of_objectst   dummyt   increft   decrefc         C   s¡   t  | t ƒ p t ‚ | |  _ t | ƒ |  _ t | \ } } | d | d d ƒ |  _ |  i i |  _ h d  d f d 6|  _
 h  |  _ t i ƒ  |  _ d |  _ d  S(   NR   t   backlogi   i    (    (   t
   isinstancet   bytesR4   t   registryR   t   authkeyt   listener_clientt   listenerR   t   Nonet	   id_to_objt   id_to_refcountt	   threadingt   RLockt   mutext   stop(   R   RS   R   RT   t
   serializert   Listenert   Client(    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   �   s    		c         C   s·   |  t  ƒ  _ z� ym xf y |  i i ƒ  } Wn t t f j
 o
 q n Xt i d |  i d | f ƒ } t	 | _
 | i ƒ  q Wn t t f j
 o n XWd d |  _ |  i i ƒ  Xd S(   s(   
        Run the server forever
        t   targetR-   Niç  (   R   t   _manager_serverRV   t   acceptt   OSErrort   IOErrorRZ   t   Threadt   handle_requestt   Truet   daemont   startt   KeyboardInterruptt
   SystemExitR]   t   close(   R   R+   t   t(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   serve_forever�   s    			c         C   s†  d } } } yu t i | |  i ƒ t i | |  i ƒ | i ƒ  } | \ } } } } | |  i j p t d | ‚ t |  | ƒ } Wn" t	 j
 o d t
 ƒ  f }	 nI Xy | | | | Ž } Wn" t	 j
 o d t
 ƒ  f }	 n Xd | f }	 y | i |	 ƒ Wnu t	 j
 oi }
 y | i d t
 ƒ  f ƒ Wn t	 j
 o n Xt i d |	 ƒ t i d | ƒ t i d |
 ƒ n X| i ƒ  d S(   s)   
        Handle a new connection
        s   %r unrecognizeds
   #TRACEBACKs   #RETURNs   Failure to send message: %rs    ... request was %rs    ... exception was %rN(   RW   R
   t   deliver_challengeRT   t   answer_challengeR)   t   publicR4   R;   t	   ExceptionR   R(   R	   R   Rm   (   R   R+   t   funcnameR0   t   requestt   ignoreR-   R.   RA   t   msgt   e(    (    s.   scripts/common/Lib/multiprocessing/managers.pyRg   ¥   s4    c         C   s  t  i d t i ƒ  i ƒ | i } | i } |  i } xÇ|  i p¼y$d } } | ƒ  } | \ } } }	 }
 | | \ } } } | | j o# t
 d | t | ƒ | f ƒ ‚ n t | | ƒ } y | |	 |
 Ž  } Wn! t j
 o } d | f } nt X| o | i | d ƒ } | oF |  i | | | ƒ \ } } t | |  i | ƒ } d | | f f } n d | f } Wné t
 j
 o„ | d j o d t ƒ  f } qQy8 |  i | } | |  | | | |	 |
 Ž } d | f } WqQt j
 o d t ƒ  f } qQXn[ t j
 o- t  i d t i ƒ  i ƒ t i d ƒ n# t j
 o d t ƒ  f } n Xy@ y | | ƒ Wn+ t j
 o } | d	 t | ƒ f ƒ n XWq7 t j
 oY } t  i d
 t i ƒ  i ƒ t  i d | ƒ t  i d | ƒ | i ƒ  t i d ƒ q7 Xq7 Wd S(   sQ   
        Handle requests from the proxies in a particular process/thread
        s$   starting server thread to service %rs+   method %r of %r object is not in exposed=%rs   #ERRORs   #PROXYs   #RETURNs
   #TRACEBACKs$   got EOF -- exiting thread serving %ri    s   #UNSERIALIZABLEs   exception in thread serving %rs    ... message was %rs    ... exception was %ri   N(   R	   t   debugRZ   t   current_threadR@   R)   R(   RX   R]   RW   t   AttributeErrorR2   R;   Rs   t   getRH   R   R   R   t   fallback_mappingt   EOFErrort   sysR   t   reprR   Rm   (   R   t   connR)   R(   RX   R,   R>   Ru   t   identR-   R.   t   exposedt	   gettypeidt   functiont   resRx   Rw   R   t   ridentt   rexposedt   tokent   fallback_funcR0   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   serve_clientÇ   sn    				 

			
c         C   s   | S(   N(    (   R   R�   R‚   R>   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   fallback_getvalue  s    c         C   s
   t  | ƒ S(   N(   R3   (   R   R�   R‚   R>   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   fallback_str  s    c         C   s
   t  | ƒ S(   N(   R€   (   R   R�   R‚   R>   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   fallback_repr  s    R8   R#   s	   #GETVALUEc         C   s   d  S(   N(    (   R   R+   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRM      s    c         C   sª   |  i  i ƒ  zˆ g  } |  i i ƒ  } | i ƒ  xU | D]M } | d j o: | i d | |  i | t |  i | d ƒ d  f ƒ q6 q6 Wd i | ƒ SWd |  i  i	 ƒ  Xd S(   sO   
        Return some info --- useful to spot problems with refcounting
        i    s     %s:       refcount=%s
    %siK   s   
N(
   R\   t   acquireRX   R   t   sortR=   RY   R3   t   joint   release(   R   R+   R0   R   R‚   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRK   #  s    
 	(c         C   s   t  |  i ƒ d S(   s*   
        Number of shared objects
        i   (   t   lenRX   (   R   R+   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRL   5  s    c         C   s
  zø yÔ t  i d ƒ | i d	 ƒ t i t i j o) t  i d ƒ t i t _ t i t _ n t  i	 d ƒ x( t
 ƒ  D] } t  i d ƒ | i ƒ  qs Wx( t
 ƒ  D] } t  i d ƒ | i ƒ  qž Wt  i	 ƒ  t  i d ƒ Wn d d k } | i ƒ  n XWd t d ƒ Xd S(
   s'   
        Shutdown this process
        s!   manager received shutdown messages   #RETURNs   resetting stdout, stderri    s&   terminating a child process of managers   manager exiting with exitcode 0iÿÿÿÿN(   s   #RETURNN(   R	   Ry   R(   RW   R   t   stdoutt
   __stdout__t
   __stderr__t   stderrt   _run_finalizersR   t	   terminateR‘   R   t	   tracebackt	   print_excR   (   R   R+   t   pRš   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRG   ;  s.    
 
 
c         O   si  |  i  i ƒ  zG|  i | \ } } } } | d j o0 t | ƒ d j o | p t ‚ | d }	 n | | | Ž  }	 | d j o t |	 ƒ } n | d j	 o4 t | ƒ t j p t ‚ t	 | ƒ t	 | ƒ } n d t
 |	 ƒ }
 t i d | |
 ƒ |	 t | ƒ | f |  i |
 <|
 |  i j o d |  i |
 <n |  i | |
 ƒ |
 t | ƒ f SWd |  i  i ƒ  Xd S(   s>   
        Create a new shared object and return its id
        i   i    s   %xs&   %r callable returned object with id %rN(   R\   R�   RS   RW   R“   R4   RE   R2   t   dictt   listR   R	   Ry   t   setRX   RY   RN   t   tupleR’   (   R   R+   R   R-   R.   t   callableRƒ   t   method_to_typeidt	   proxytypeR>   R‚   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRH   [  s(    "c         C   s   t  |  i | i d ƒ S(   sL   
        Return the methods of the shared object indicated by token
        i   (   R    RX   R   (   R   R+   R‰   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRJ   �  s    c         C   s-   | t  i ƒ  _ | i d ƒ |  i | ƒ d S(   s=   
        Spawn a new thread to serve this connection
        s   #RETURNN(   s   #RETURNN(   RZ   Rz   R@   R(   RW   R‹   (   R   R+   R@   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRI   ‡  s    c         C   s9   |  i  i ƒ  z |  i | c d 7<Wd  |  i  i ƒ  Xd  S(   Ni   (   R\   R�   RY   R’   (   R   R+   R‚   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRN   �  s    c         C   s�   |  i  i ƒ  zn |  i | d j p t ‚ |  i | c d 8<|  i | d j o( |  i | =|  i | =t i d | ƒ n Wd  |  i  i ƒ  Xd  S(   Ni   i    s   disposing of obj with id %r(   R\   R�   RY   R4   RX   R	   Ry   R’   (   R   R+   R‚   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRO   –  s    (   R$   R%   R&   Rr   R   Ro   Rg   R‹   RŒ   R�   RŽ   R}   RM   RK   RL   RG   RH   RJ   RI   RN   RO   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRF   z   s.   			"	J			
				 	&			t   Statec           B   s#   e  Z d  g Z d Z d Z d Z RS(   t   valuei    i   i   (   R$   R%   R'   t   INITIALt   STARTEDt   SHUTDOWN(    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR¤   ¥  s   	t   picklet	   xmlrpclibc           B   sÔ   e  Z d  Z h  Z e Z d d d d „ Z d „  Z d „  Z	 d „  Z
 d „  Z e d „  ƒ Z d „  Z d d	 „ Z d
 „  Z d „  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d d d d e d „ ƒ Z RS(   s!   
    Base class for managers
    R©   c         C   ss   | d  j o t ƒ  i } n | |  _ t | ƒ |  _ t ƒ  |  _ t i |  i _	 | |  _
 t | \ |  _ |  _ d  S(   N(   RW   R   RT   t   _addressR   t   _authkeyR¤   t   _stateR¦   R¥   t   _serializerRU   t	   _Listenert   _Client(   R   R   RT   R^   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   ¿  s    		c         C   s%   t  |  ƒ i |  i |  i |  i f f S(   N(   R2   t   from_addressR«   R¬   R®   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt
   __reduce__É  s    c         C   s<   |  i  i t i j p t ‚ t |  i |  i |  i |  i	 ƒ S(   sX   
        Return server object with serve_forever() method and address attribute
        (
   R­   R¥   R¤   R¦   R4   RF   t	   _registryR«   R¬   R®   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt
   get_serverÍ  s    c         C   sN   t  |  i \ } } | |  i d |  i ƒ} t | d d ƒ t i |  i _	 d S(   s>   
        Connect manager object to the server process
        RT   RM   N(
   RU   R®   R«   R¬   R1   RW   R¤   R§   R­   R¥   (   R   R_   R`   R�   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   connectÕ  s    c      	   C   s8  |  i  i t i j p t ‚ t i d t ƒ \ } } t d t	 |  ƒ i
 d |  i |  i |  i |  i | f ƒ |  _ d i d „  |  i i Dƒ ƒ } t	 |  ƒ i d | |  i _ |  i i ƒ  | i ƒ  | i ƒ  |  _ | i ƒ  t i |  i  _ t i |  t	 |  ƒ i d |  i |  i |  i |  i  |  i f d d ƒ|  _ d	 S(
   s@   
        Spawn a server process for this manager object
        t   duplexRa   R-   t   :c         s   s   x |  ] } t  | ƒ Vq Wd  S(   N(   R3   (   t   .0t   i(    (    s.   scripts/common/Lib/multiprocessing/managers.pys	   <genexpr>í  s   	 R7   t   exitpriorityi    N(   R­   R¥   R¤   R¦   R4   R
   t   Pipet   FalseR   R2   t   _run_serverR³   R«   R¬   R®   t   _processR‘   t	   _identityR$   R@   Rj   Rm   R)   R§   R	   R   t   _finalize_managerR°   RG   (   R   t   readert   writerR‚   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRj   Þ  s$    

c         C   sS   |  i  | | | | ƒ } | i | i ƒ | i ƒ  t i d | i ƒ | i ƒ  d S(   s@   
        Create a server, report its address and run it
        s   manager serving at %rN(   t   _ServerR(   R   Rm   R	   R   Ro   (   t   clsRS   R   RT   R^   RÂ   t   server(    (    s.   scripts/common/Lib/multiprocessing/managers.pyR½   ÿ  s
    
c      	   O   s‹   |  i  i t i j p
 t d ‚ |  i |  i d |  i ƒ} z) t | d d | f | | ƒ \ } } Wd | i
 ƒ  Xt | |  i | ƒ | f S(   sP   
        Create a new shared object; return the token and exposed tuple
        s   server not yet startedRT   RH   N(   R­   R¥   R¤   R§   R4   R°   R«   R¬   R1   RW   Rm   R   (   R   R   R-   R.   R�   R   Rƒ   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   _create  s     )c         C   s   |  i  i | ƒ d S(   sC   
        Join the manager process (if it has been spawned)
        N(   R¾   R‘   (   R   t   timeout(    (    s.   scripts/common/Lib/multiprocessing/managers.pyR‘     s    c         C   sA   |  i  |  i d |  i ƒ} z t | d d ƒ SWd | i ƒ  Xd S(   sS   
        Return some info about the servers shared objects and connections
        RT   RK   N(   R°   R«   R¬   R1   RW   Rm   (   R   R�   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   _debug_info!  s    c         C   sA   |  i  |  i d |  i ƒ} z t | d d ƒ SWd | i ƒ  Xd S(   s5   
        Return the number of shared objects
        RT   RL   N(   R°   R«   R¬   R1   RW   Rm   (   R   R�   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   _number_of_objects+  s    c         C   s   |  S(   N(    (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt	   __enter__5  s    c         C   s   |  i  ƒ  d  S(   N(   RG   (   R   t   exc_typet   exc_valt   exc_tb(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __exit__8  s    c         C   s'  |  i  ƒ  oæ t i d ƒ y8 | | d | ƒ} z t | d d ƒ Wd | i ƒ  XWn t j
 o n X|  i d d ƒ |  i  ƒ  oj t i d ƒ t |  d ƒ oI t i d	 ƒ |  i	 ƒ  |  i d d
 ƒ |  i  ƒ  o t i d ƒ që qï qó n t
 i | _ y t i | =Wn t j
 o n Xd S(   sQ   
        Shutdown the manager process; will be registered as a finalizer
        s#   sending shutdown message to managerRT   RG   NRÇ   gš™™™™™É?s   manager still aliveR™   s'   trying to `terminate()` manager processgš™™™™™¹?s#   manager still alive after terminate(   t   is_aliveR	   R   R1   RW   Rm   Rs   R‘   R<   R™   R¤   R¨   R¥   R   t   _address_to_localt   KeyError(   t   processR   RT   R!   R°   R�   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRÀ   ;  s.    
c         C   s   |  i  S(    (   R«   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   <lambda>[  s    c   
         s,  d |  i  j o |  i i ƒ  |  _ n ˆ d j o
 t ‰ n | p t ˆ d d ƒ } | p t ˆ d d ƒ } | oc x` | i ƒ  D]N \ } } t | ƒ t j p t	 d | ‚ t | ƒ t j p t	 d | ‚ qƒ Wn | | | ˆ f |  i ˆ  <| o/ ‡  ‡ f d †  }	 ˆ  |	 _
 t |  ˆ  |	 ƒ n d S(   s9   
        Register a typeid with the manager type
        R³   t	   _exposed_t   _method_to_typeid_s   %r is not a stringc      	      sŠ   t  i d ˆ  ƒ |  i ˆ  | | Ž \ } } ˆ | |  i d |  d |  i d | ƒ} |  i | i d |  i ƒ} t | d  d | i	 f ƒ | S(   Ns)   requesting creation of a shared %r objectt   managerRT   Rƒ   RO   (
   R	   Ry   RÆ   R®   R¬   R°   R   R1   RW   R   (   R   R-   R.   R‰   t   expt   proxyR�   (   R   R£   (    s.   scripts/common/Lib/multiprocessing/managers.pyR?   x  s    N(   t   __dict__R³   t   copyRW   t	   AutoProxyR;   R   R2   R3   R4   R$   t   setattr(
   RÄ   R   R¡   R£   Rƒ   R¢   t   create_methodt   keyR¥   R?   (    (   R   R£   s.   scripts/common/Lib/multiprocessing/managers.pyt   register]  s"    
 !)
	N(   R$   R%   R&   R³   RF   RÃ   RW   R   R²   R´   Rµ   Rj   t   classmethodR½   RÆ   R‘   RÈ   RÉ   RÊ   RÎ   t   staticmethodRÀ   t   propertyR   Rh   Rß   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR    ¸  s(   
					!		
	
		 	t   ProcessLocalSetc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   t  i |  d „  ƒ d  S(   Nc         S   s
   |  i  ƒ  S(    (   t   clear(   R>   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRÓ   ‹  s    (   R	   t   register_after_fork(   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   Š  s    c         C   s   t  |  ƒ d f S(   N(    (   R2   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR²   Œ  s    (   R$   R%   R   R²   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRã   ‰  s   	c           B   s›   e  Z d  Z h  Z e i ƒ  Z d d d e d „ Z	 d „  Z
 d h  d „ Z d „  Z d „  Z e d „  ƒ Z d „  Z d „  Z d	 „  Z d
 „  Z d „  Z RS(   s.   
    A base for proxies of shared objects
    c         C   sC  t  i i ƒ  zR t  i i | i d  ƒ } | d  j o) t i ƒ  t	 ƒ  f } | t  i | i <n Wd  t  i i
 ƒ  X| d |  _ | d |  _ | |  _ |  i i |  _ | |  _ | |  _ t | d |  _ | d  j	 o t | ƒ |  _ n3 |  i d  j	 o |  i i |  _ n t ƒ  i |  _ | o |  i ƒ  n t i |  t  i ƒ d  S(   Ni    i   (   R   t   _mutexR�   RÐ   R|   R   RW   R	   t   ForkAwareLocalRã   R’   t   _tlst   _idsett   _tokenR   t   _idt   _managerR®   RU   R°   R   R¬   R   RT   t   _increfRå   t   _after_fork(   R   R‰   R^   RÖ   RT   Rƒ   RN   t	   tls_idset(    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   š  s,    			c         C   sŽ   t  i d ƒ t ƒ  i } t i ƒ  i d j o | d t i ƒ  i 7} n |  i |  i i d |  i	 ƒ} t
 | d  d | f ƒ | |  i _ d  S(   Ns   making connection to managert
   MainThreadt   |RT   RI   (   R	   Ry   R   R@   RZ   Rz   R°   Rê   R   R¬   R1   RW   Rè   R
   (   R   R@   R�   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   _connectÀ  s    c         C   s;  y |  i  i } WnB t j
 o6 t i d t i ƒ  i ƒ |  i ƒ  |  i  i } n X| i	 |  i
 | | | f ƒ | i ƒ  \ } } | d j o | S| d j o† | \ } } |  i i | i d }	 |	 | |  i d |  i d |  i d | ƒ}
 |  i | i d |  i ƒ} t | d	 d | i f ƒ |
 St | | ƒ ‚ d	 S(
   sW   
        Try to call a method of the referrent and return a copy of the result
        s#   thread %r does not own a connections   #RETURNs   #PROXYiÿÿÿÿRÖ   RT   Rƒ   RO   N(   Rè   R
   R{   R	   Ry   RZ   Rz   R@   Rò   R(   Rë   R)   Rì   R³   R   R®   R¬   R°   R   R1   RW   R   R*   (   R   R,   R-   R.   R�   R/   R0   Rƒ   R‰   R£   RØ   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   _callmethodÉ  s*    	
c         C   s   |  i  d ƒ S(   s9   
        Get a copy of the value of the referent
        s	   #GETVALUE(   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt	   _getvalueæ  s    c      
   C   s¿   |  i  |  i i d |  i ƒ} t | d  d |  i f ƒ t i d |  i i	 ƒ |  i
 i |  i ƒ |  i o
 |  i i } t i |  t i d |  i |  i | |  i |  i
 |  i  f d d ƒ|  _ d  S(   NRT   RN   s	   INCREF %rR-   Rº   i
   (   R°   Rê   R   R¬   R1   RW   Rë   R	   Ry   R   Ré   t   addRì   R­   R   R   t   _decrefRè   t   _close(   R   R�   R!   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRí   ì  s    c         C   s   | i  |  i ƒ | d  j p | i t i j oq yE t i d |  i ƒ | |  i d | ƒ} t	 | d  d |  i f ƒ Wq´ t
 j
 o } t i d | ƒ q´ Xn t i d |  i ƒ | o@ t | d ƒ o0 t i d t i ƒ  i ƒ | i i ƒ  | ` n d  S(   Ns	   DECREF %rRT   RO   s   ... decref failed %ss%   DECREF %r -- manager already shutdownR
   s-   thread %r has no more proxies so closing conn(   t   discardR   RW   R¥   R¤   R§   R	   Ry   R   R1   Rs   R<   RZ   Rz   R@   R
   Rm   (   R‰   RT   R!   t   tlst   idsetR°   R�   Rx   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRö   ü  s     	c         C   sD   d  |  _ y |  i ƒ  Wn& t j
 o } t i d | ƒ n Xd  S(   Ns   incref failed: %s(   RW   Rì   Rí   Rs   R	   R   (   R   Rx   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRî     s
    	c         C   s‡   h  } t  i ƒ  o |  i | d <n t |  d t ƒ o* |  i | d <t t |  i |  i	 | f f St t
 |  ƒ |  i |  i	 | f f Sd  S(   NRT   t   _isautoRƒ   (   R   t   thread_is_spawningR¬   R;   R¼   RÔ   t   RebuildProxyRÛ   Rê   R®   R2   (   R   R.   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR²     s    c         C   s
   |  i  ƒ  S(   N(   Rô   (   R   t   memo(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __deepcopy__*  s    c         C   s*   d t  |  ƒ i |  i i d t |  ƒ f S(   Ns   <%s object, typeid %r at %s>s   0x%x(   R2   R$   Rê   R   R   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR#   -  s    c         C   s:   y |  i  d ƒ SWn" t j
 o t |  ƒ d  d SXd S(   sV   
        Return representation of the referent (or a fall-back if that fails)
        R#   iÿÿÿÿs   ; '__str__()' failed>N(   Ró   Rs   R€   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR8   1  s    N(    (   R$   R%   R&   RÐ   R	   t   ForkAwareThreadLockRæ   RW   Rh   R   Rò   Ró   Rô   Rí   Rá   Rö   Rî   R²   Rÿ   R#   R8   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   “  s   %								c         C   s…   t  t ƒ  d d ƒ } | o& | i | i j o | i | i d S| i d t ƒ o t  t ƒ  d t ƒ } |  | | d | | �Sd S(   s‚   
    Function used for unpickling proxy objects.

    If possible the shared object is returned, or otherwise a proxy for it.
    Rb   i    RN   t   _inheritingN(	   R;   R   RW   R   RX   R   t   popRh   R¼   (   RA   R‰   R^   R.   RÅ   RN   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRý   >  s    c      	   B   s�   e  | ƒ } y | |  | f SWn e j
 o n Xh  } x  | D] } d | | f | UqA We |  e f | ƒ } | | _ | | |  | f <| S(   sC   
    Return an proxy type whose methods are given by `exposed`
    sL   def %s(self, *args, **kwds):
        return self._callmethod(%r, args, kwds)(   R    RÑ   R2   R   RÔ   (   R@   Rƒ   t   _cachet   dict   metht	   ProxyType(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   MakeProxyTypeS  s     	c   
      C   sæ   t  | d } | d j oC | |  i d | ƒ} z t | d d |  f ƒ } Wd | i ƒ  Xn | d j o | d j	 o | i } n | d j o t ƒ  i } n t d |  i	 | ƒ } | |  | d | d | d | ƒ}	 t
 |	 _ |	 S(   s*   
    Return an auto-proxy for `token`
    i   RT   RJ   Ns   AutoProxy[%s]RÖ   RN   (   RU   RW   R   R1   Rm   R¬   R   RT   R  R   Rh   Rû   (
   R‰   R^   RÖ   RT   Rƒ   RN   R°   R�   R  RØ   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRÛ   i  s    		t	   Namespacec           B   s   e  Z d  „  Z d „  Z RS(   c         K   s   |  i  i | ƒ d  S(   N(   RÙ   t   update(   R   R.   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   ‡  s    c         C   su   |  i  i ƒ  } g  } x? | D]7 \ } } | i d ƒ p | i d | | f ƒ q q W| i ƒ  d t i d | ƒ S(   NRC   s   %s=%rs   Namespace(%s)s   , (   RÙ   R   t
   startswithR=   R�   R3   R‘   (   R   R   R?   R@   R¥   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR#   ‰  s     
(   R$   R%   R   R#   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  †  s   	t   Valuec           B   s>   e  Z e d  „ Z d „  Z d „  Z d „  Z e e e ƒ Z RS(   c         C   s   | |  _  | |  _ d  S(   N(   t	   _typecodet   _value(   R   R   R¥   t   lock(    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   “  s    	c         C   s   |  i  S(   N(   R  (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR|   –  s    c         C   s   | |  _  d  S(   N(   R  (   R   R¥   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRŸ   ˜  s    c         C   s    d t  |  ƒ i |  i |  i f S(   Ns
   %s(%r, %r)(   R2   R$   R  R  (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR#   š  s    (	   R$   R%   Rh   R   R|   RŸ   R#   Râ   R¥   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  ’  s
   			c         C   s   t  i  |  | ƒ S(   N(   R   (   R   t   sequenceR  (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   Arrayž  s    t   IteratorProxyc           B   sD   e  Z d Z d „  Z d „  Z d „  Z d „  Z d	 „  Z d
 „  Z RS(   t   __next__t   nextR(   t   throwRm   c         C   s   |  S(   N(    (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __iter__¨  s    c         G   s   |  i  d | ƒ S(   NR  (   Ró   (   R   R-   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  ª  s    c         G   s   |  i  d | ƒ S(   NR  (   Ró   (   R   R-   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  ¬  s    c         G   s   |  i  d | ƒ S(   NR(   (   Ró   (   R   R-   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR(   ®  s    c         G   s   |  i  d | ƒ S(   NR  (   Ró   (   R   R-   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  °  s    c         G   s   |  i  d | ƒ S(   NRm   (   Ró   (   R   R-   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRm   ²  s    (   s   __next__s   nexts   sends   throws   close(	   R$   R%   RÔ   R  R  R  R(   R  Rm   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  ¥  s   					t   AcquirerProxyc           B   s5   e  Z d Z e d „ Z d „  Z d „  Z d „  Z RS(   R�   R’   c         C   s   |  i  d | f ƒ S(   NR�   (   Ró   (   R   t   blocking(    (    s.   scripts/common/Lib/multiprocessing/managers.pyR�   ¸  s    c         C   s   |  i  d ƒ S(   NR’   (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR’   º  s    c         C   s   |  i  d ƒ S(   NR�   (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRÊ   ¼  s    c         C   s   |  i  d ƒ S(   NR’   (   Ró   (   R   RË   RÌ   RÍ   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRÎ   ¾  s    (   s   acquires   release(   R$   R%   RÔ   Rh   R�   R’   RÊ   RÎ   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  ¶  s
   		t   ConditionProxyc           B   s,   e  Z d Z d	 d „ Z d „  Z d „  Z RS(
   R�   R’   t   waitt   notifyt
   notify_allc         C   s   |  i  d | f ƒ S(   NR  (   Ró   (   R   RÇ   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  Å  s    c         C   s   |  i  d ƒ S(   NR  (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  Ç  s    c         C   s   |  i  d ƒ S(   NR  (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  É  s    (   s   acquires   releases   waits   notifys
   notify_allN(   R$   R%   RÔ   RW   R  R  R  (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  Â  s   	t
   EventProxyc           B   s5   e  Z d Z d „  Z d „  Z d „  Z d	 d „ Z RS(
   t   is_setRŸ   Rä   R  c         C   s   |  i  d ƒ S(   NR  (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  Î  s    c         C   s   |  i  d ƒ S(   NRŸ   (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRŸ   Ð  s    c         C   s   |  i  d ƒ S(   NRä   (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRä   Ò  s    c         C   s   |  i  d | f ƒ S(   NR  (   Ró   (   R   RÇ   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  Ô  s    (   s   is_sets   sets   clears   waitN(   R$   R%   RÔ   R  RŸ   Rä   RW   R  (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  Ì  s
   			t   NamespaceProxyc           B   s)   e  Z d Z d „  Z d „  Z d „  Z RS(   t   __getattribute__t   __setattr__t   __delattr__c         C   sD   | d d j o t  i |  | ƒ St  i |  d ƒ } | d | f ƒ S(   Ni    RC   Ró   R  (   t   objectR  (   R   RÞ   t
   callmethod(    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __getattr__Ù  s    c         C   sJ   | d d j o t  i |  | | ƒ St  i |  d ƒ } | d | | f ƒ S(   Ni    RC   Ró   R   (   R"  R   R  (   R   RÞ   R¥   R#  (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR   Þ  s    c         C   sD   | d d j o t  i |  | ƒ St  i |  d ƒ } | d | f ƒ S(   Ni    RC   Ró   R!  (   R"  R!  R  (   R   RÞ   R#  (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR!  ã  s    (   s   __getattribute__s   __setattr__s   __delattr__(   R$   R%   RÔ   R$  R   R!  (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR  ×  s   		t
   ValueProxyc           B   s/   e  Z d Z d „  Z d „  Z e e e ƒ Z RS(   R|   RŸ   c         C   s   |  i  d ƒ S(   NR|   (   Ró   (   R   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR|   ì  s    c         C   s   |  i  d | f ƒ S(   NRŸ   (   Ró   (   R   R¥   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyRŸ   î  s    (   s   gets   set(   R$   R%   RÔ   R|   RŸ   Râ   R¥   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR%  ê  s   		t   BaseListProxyt   __add__t   __contains__t   __delitem__t   __delslice__t   __getitem__t   __getslice__t   __len__t   __mul__t   __reversed__t   __rmul__t   __setitem__t   __setslice__R=   t   countt   extendt   indext   insertR  t   removet   reverseR�   t   __imul__t	   ListProxyc           B   s   e  Z d  „  Z d „  Z RS(   c         C   s   |  i  d | f ƒ |  S(   NR4  (   Ró   (   R   R¥   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   __iadd__û  s    c         C   s   |  i  d | f ƒ |  S(   NR9  (   Ró   (   R   R¥   (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR9  þ  s    (   R$   R%   R;  R9  (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR:  ú  s   	t	   DictProxyRä   RÚ   R|   t   has_keyt   popitemt
   setdefaultR	  t
   ArrayProxyt	   PoolProxyt   applyt   apply_asyncRm   t   imapt   imap_unorderedR‘   t   mapt	   map_asyncR™   t   AsyncResultt   Iteratorc           B   s   e  Z d  Z RS(   s(  
    Subclass of `BaseManager` which supports a number of shared object types.

    The types registered are those intended for the synchronization
    of threads, plus `dict`, `list` and `Namespace`.

    The `multiprocessing.Manager()` function creates started instances of
    this class.
    (   R$   R%   R&   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyR     s   	t   Queuet   JoinableQueuet   Eventt   LockR[   t	   Semaphoret   BoundedSemaphoret	   ConditionR   Rž   R�   R  R£   RÝ   (V   t   __all__t   osR   t   weakrefRZ   R   RJ  Rš   R   t   multiprocessingR   R   R   R   R	   R
   t   multiprocessing.processR   t   multiprocessing.forkingR   R   R   R   t   multiprocessing.utilR   R   t   cPickleR   t   ImportErrorR©   R   Rß   RD   R@   R2   R;   t
   view_typesR"  R   R1   R*   Rs   R5   RB   RE   RF   R¤   R_   R`   t   XmlListenert	   XmlClientRU   R    RŸ   Rã   R   Rý   R  RW   Rh   RÛ   R  R  R  R  R  R  R  R  R%  R&  R:  R<  R@  RA  RÕ   R   RL  RM  R[   RN  RO  RP  Rž   R�   R¼   (    (    (    s.   scripts/common/Lib/multiprocessing/managers.pyt   <module>
   sª   ."	<
			
ÿ ,
Ñ
«	
		