
    7Thm                     Z    S r SSKJrJr  SSKJr  SqS r " S S\5      r " S S	\5      r	g)
zUtility function to construct a loky.ReusableExecutor with custom pickler.

This module provides efficient ways of working with data stored in
shared memory with numpy.memmap arrays without inducing any memory
copy between the parent and child processes.
   )TemporaryResourcesManagerget_memmapping_reducers)_ReusablePoolExecutorNc                 0    [         R                  " U 40 UD6$ N)MemmappingExecutorget_memmapping_executor)n_jobskwargss     G/var/www/auris/envauris/lib/python3.13/site-packages/joblib/executor.pyr	   r	      s    55fGGG    c                   \   ^  \ rS rSr\      SU 4S jj5       rSS jr\S 5       rSr	U =r
$ )r      c                   > UR                  5       n	U	R                  U(       a  UO0 5        U	R                  [        X#US95        [        SL =(       d	    [        U	:H  n
U	q[	        U5      n[        SSUR                  S.UD6u  p[        TU ]!  UUUU
UUUUS9u  pU(       d  Xl	        Ub  UR                  R                  U5        U$ )zOFactory for ReusableExecutor with automatic memmapping for large
numpy arrays.
)timeoutinitializerinitargsNT)unlink_on_gc_collecttemp_folder_resolver)job_reducersresult_reducersreuser   r   r   env )copyupdatedict_executor_argsr   r   resolve_temp_folder_namesuperget_reusable_executor_temp_folder_managerregister_new_context)clsr
   r   r   r   r   temp_folder
context_idbackend_argsexecutor_argsr   managerr   r   	_executorexecutor_is_reused	__class__s                   r   r	   *MemmappingExecutor.get_memmapping_executor   s    $ %))+CSR0HM	
 $&I.M*I&+K8 )@ )
!%!(!A!A)
 )
%
 ).(E%+# )F 	)
%	 "
 .5*! **??
Kr   c                     U R                  US9  U R                     U R                  R                  USS9  S S S 5        g ! , (       d  f       g = f)N)kill_workersT)forceallow_non_empty)shutdown_submit_resize_lockr"   _clean_temporary_resources)selfr/   s     r   	terminateMemmappingExecutor.terminateU   sF    <0 %%%%@@"D A  &%%s   A  
Ac                     [        U SS 5      b  U R                  $ U R                  R                  5       U l        U R                  $ )N_cached_temp_folder)getattrr9   r"   r   )r5   s    r   _temp_folderMemmappingExecutor._temp_folderf   sJ     4.5A+++ ))BBD $ +++r   )r9   )i,  Nr   NNN)F)__name__
__module____qualname____firstlineno__classmethodr	   r6   propertyr;   __static_attributes____classcell__r,   s   @r   r   r      sC     < <|" , ,r   r   c                   2   ^  \ rS rSrSrS rU 4S jrSrU =r$ )_TestingMemmappingExecutorv   zwWrapper around ReusableExecutor to ease memmapping testing with Pool
and Executor. This is only for testing purposes.

c                 N    U R                   " U/UQ76 nUR                  Ul        U$ )zSchedule a func to be run)submitresultget)r5   funcargsfutures       r   apply_async&_TestingMemmappingExecutor.apply_async|   s%    T)D)]]
r   c                 8   > [        [        TU ]  " U/UQ76 5      $ r   )listr    map)r5   frN   r,   s      r   rT   _TestingMemmappingExecutor.map   s    EGK)D)**r   r   )	r=   r>   r?   r@   __doc__rP   rT   rC   rD   rE   s   @r   rG   rG   v   s    
+ +r   rG   )
rW   _memmapping_reducerr   r    externals.loky.reusable_executorr   r   r	   r   rG   r   r   r   <module>rZ      s;    T CH^,. ^,B+!3 +r   