
    biM!                    P   U 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	m
Z
mZ d dlmZ d dlmZ d dlmZ d dlZd dl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! d Z" ej                   e#e$jJ                        e"        eejL                  ejN                        Z(ejR                  Z*d Z+ G d de,      Z-i Z.de/d<   ddZ0	 d dl1Z2e2jf                  ji                          d Z5d Z7dZ8d Z9	 	 	 	 	 	 	 d 	 	 	 d!dZ:d Z;ddZ<y# e6$ r
 d Z5ddZY -w xY w)"    )annotationsN)MappingSequence)ProcessPoolExecutor)partial)warn)config)MultiprocessingPoolExecutor	get_asyncreraise)cullfuse)	CPU_COUNT)Key)ensure_dictc                >    t         | j                  | j                  ffS N)getattr__objclass____name__)ms    O/home/cdr/jupyterlab/.venv/lib/python3.12/site-packages/dask/multiprocessing.py_reduce_method_descriptorr      s    Q^^QZZ000    )protocolc                 >    t        j                         j                  S r   )multiprocessingcurrent_processident r   r   _process_get_idr!   $   s    **,222r   c                  (    e Zd ZdZd Zd Zd Zd Zy)RemoteExceptionzXRemote Exception

    Contains the exception and traceback from a remotely run task
    c                     || _         || _        y r   )	exception	traceback)selfr%   r&   s      r   __init__zRemoteException.__init__;   s    ""r   c                L    t        | j                        dz   | j                  z   S )Nz

Traceback
---------
)strr%   r&   r'   s    r   __str__zRemoteException.__str__?   s     4>>"%AADNNRRr   c           	         t        t        t        t        |             t	        | j
                        z   t        | j                        z               S r   )sortedsetdirtypelist__dict__r%   r+   s    r   __dir__zRemoteException.__dir__B   s6    c#d4j/D,??#dnnBUUVWWr   c                z    	 t         j                  | |      S # t        $ r t        | j                  |      cY S w xY wr   )object__getattribute__AttributeErrorr   r%   )r'   keys     r   __getattr__zRemoteException.__getattr__E   s:    	0**455 	04>>3//	0s    ::N)r   
__module____qualname____doc__r(   r,   r4   r:   r    r   r   r#   r#   5   s    
#SX0r   r#   z&dict[type[Exception], type[Exception]]
exceptionsc                *   t        |       t        v rt        t        |          } || |      S 	 t        | j                  j                  t        t        |       fdt        |       i      }|t        t        |       <    || |      S # t
        $ r | cY S w xY w)z6Metaclass that wraps exception type in RemoteExceptionexception_type)r1   r>   	__class__r   r#   	TypeError)exctbtyps      r   remote_exceptionrF   O   s    CyJc#3|		&& $s),!49-C
 %(JtCy!sB< 	J	s   AB BBc                    | S r   r    rD   s    r   _pack_tracebackrI   f   s    	r   c                J    dj                  t        j                  |             S )N )joinr&   	format_tbrH   s    r   rI   rI   k   s    wwy**2.//r   c                    t        | |      } | r   )rF   )rC   rD   s     r   r   r   n   s    sB'	r   c                    t        j                         \  }}}t        |      }	  || |f      }|S # t        $ r8} t        j                         \  }}}t        |      } || |f      }Y d } ~ |S d } ~ ww xY wr   )sysexc_inforI   	Exception)edumpsexc_type	exc_valueexc_tracebackrD   results          r   pack_exceptionrY   s   sw    ),&Hi		'B 2w
 M	   -0\\^*)]]+2wM	 s   
1 	A2-A--A2zThe 'multiprocessing.context' configuration option will be ignored on Python 2
and on Windows, because they each only support a single context.
c                     t        j                  dd      } t        j                  dk(  r| dk7  rt	        t
        t               t        S t        j                  |       S )z+Return the current multiprocessing context.zmultiprocessing.contextspawnwin32)	r	   getrP   platformr   _CONTEXT_UNSUPPORTEDUserWarningr   get_context)context_names    r   ra   ra      sK     ::7AL
||w7"%{3**<88r   c	           
        |xs t        j                  dd      }|xs t        j                  dd      }|xs t        j                  dd      }|xs t        j                  dd      xs t        }|`t        j                  j                  d      dv rd	t        j                  d<   t               }
t        t        |
      }t        ||
|      }d}n>|t        d       t        |t        j                  j                        rt        |      }d}t        | d      r| j!                         } t#        |       } t%        | |      \  }}|rt'        |||      \  }}n|}|xs t        j                  dd      xs t(        }|xs t        j                  dd      xs t*        }	 t-        |j.                  |j0                  ||ft2        ||t4        t6        |d|	}|r|j9                          |S # |r|j9                          w w xY w)a   Multiprocessed get function appropriate for Bags

    Parameters
    ----------
    dsk : dict
        dask graph
    keys : object or list
        Desired results from graph
    num_workers : int
        Number of worker processes (defaults to number of cores)
    func_dumps : function
        Function to use for function serialization (defaults to cloudpickle.dumps)
    func_loads : function
        Function to use for function deserialization (defaults to cloudpickle.loads)
    optimize_graph : bool
        If True [default], `fuse` is applied to the graph before computation.
    pool : Executor or Pool
        Some sort of `Executor` or `Pool` to use
    initializer: function
        Ignored if ``pool`` has been set.
        Function to initialize a worker process before running any tasks in it.
    chunksize: int, optional
        Size of chunks to use when dispatching work.
        Defaults to 6 as some batching is helpful.
        If -1, will be computed to evenly divide ready work across workers.
    	chunksize   poolNzmultiprocessing.initializernum_workersPYTHONHASHSEED)N06640user_initializer)
mp_contextinitializerTzThe ``initializer`` argument is ignored when ``pool`` is provided. The user should configure ``pool`` with the needed ``initializer`` on creation.F__dask_graph__
func_loads
func_dumps)get_idrT   loadsrY   raise_exceptionrd   )r	   r]   r   osenvironra   r   initialize_worker_processr   r   
isinstancer   rf   Poolr
   hasattrro   r   r   r   _loads_dumpsr   submit_max_workersr!   rY   r   shutdown)dskkeysrg   rp   rq   optimize_graphrf   rn   rd   kwargscontextcleanupdsk2dependenciesdsk3rs   rT   rX   s                     r   r]   r]      s   L 7VZZQ7I+6::fd+DP,I4!PKMM4!@MIK| ::>>*+{: ,2BJJ'(-7+V"G
 "
 dO00556.t4Ds$%  "
c
Cc4D,!$l;l B&**\48BFEB&**\48BFE
KK	

 #)#
 
 MMOM MMO s   !6G+ +H c                 |    t         j                  j                  d      } | | j                  j	                          y y )Nnumpy)rP   modulesr]   randomseed)nps    r   default_initializerr      s.     
	!B	~
		 r   c                ,    t                |  |         yy)zE
    Initialize a worker process before running any tasks in it.
    N)r   rk   s    r   rw   rw     s     # $r   )rC   rR   returnrR   r   )NNNTNNN)r   r   r   zSequence[Key] | Key)=
__future__r   copyregr   multiprocessing.poolru   picklerP   r&   collections.abcr   r   concurrent.futuresr   	functoolsr   warningsr   cloudpickledaskr	   
dask.localr
   r   r   dask.optimizationr   r   dask.systemr   dask.typingr   
dask.utilsr   r   r1   r/   unionrT   HIGHEST_PROTOCOLr|   rs   r{   r!   rR   r#   r>   __annotations__rF   tblib.pickling_supporttblibpickling_supportinstallrI   ImportErrorrY   r_   ra   r]   r   rw   r    r   r   <module>r      s.   "    	  
  - 2     F F ( !  "1
 tCII 9 :	""V-D-D	E			3"0i 0. 68
2 7$!	""$	 9" 	i	i
iX}  0s   !D D%$D%