§
    €zIf"©  ã                   óø	  — 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 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mZmZ d dl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 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„ Z)d„ Z*d„ Z+d„ Z,d„ Z-eed„ ¦   «         ¦   «         Z.e eej        dk    pdd¬¦  «        d„ ¦   «         ¦   «         Z/eed„ ¦   «         ¦   «         Z0ed„ ¦   «         Z1ee edeej2        gdd g¬!¦  «        d"„ ¦   «         ¦   «         ¦   «         Z3ee edeej2        gdd g¬!¦  «        d#„ ¦   «         ¦   «         ¦   «         Z4ee ed$dd g¦  «        d%„ ¦   «         ¦   «         ¦   «         Z5ee ed$dd g¦  «        d&„ ¦   «         ¦   «         ¦   «         Z6ee ed$dd g¦  «        d'„ ¦   «         ¦   «         ¦   «         Z7ee ed$dd g¦  «        d(„ ¦   «         ¦   «         ¦   «         Z8eed)„ ¦   «         ¦   «         Z9eed*„ ¦   «         ¦   «         Z:ee ed$dd g¦  «        d+„ ¦   «         ¦   «         ¦   «         Z;ee ed$dd g¦  «        d,„ ¦   «         ¦   «         ¦   «         Z<ee ed$dd g¦  «        d-„ ¦   «         ¦   «         ¦   «         Z=ee edeej2        gdd g¬!¦  «        d.„ ¦   «         ¦   «         ¦   «         Z>ee ed$ ej?        dej@         A                    d/¬¦  «        ¬0¦  «        d g¦  «        d1„ ¦   «         ¦   «         ¦   «         ZBee edeej2        gdd g¬!¦  «        d2„ ¦   «         ¦   «         ¦   «         ZCeee edeej2        gdd g¬!¦  «        d3„ ¦   «         ¦   «         ¦   «         ¦   «         ZDeee edeej2        gdd g¬!¦  «        d4„ ¦   «         ¦   «         ¦   «         ¦   «         ZEee edeej2        gdd g¬!¦  «        d5„ ¦   «         ¦   «         ¦   «         ZFd6„ ZGee edeej2        gdd g¬!¦  «        d7„ ¦   «         ¦   «         ¦   «         ZHd8„ ZIee ed9 eJ ejK        eej2        g eLd:¦  «        ¦  «        ¦  «        d;„  ejK        dd g eMeN eLd:¦  «        ¦  «        ¦  «        D ¦   «         ¬!¦  «        d<„ ¦   «         ¦   «         ¦   «         ZOd=„ ZPd>„ ZQe eej        dk    d?¬¦  «         ed@dAdBg¦  «        dC„ ¦   «         ¦   «         ¦   «         ZRedD„ ¦   «         ZSdE„ ZTeedF„ ¦   «         ¦   «         ZUdS )Gé    N)Úsleep)Ú
with_numpyÚnp)Úwith_multiprocessing)Úwith_dev_shm)ÚraisesÚparametrizeÚskipif)Úmake_memmap)ÚParallelÚdelayed)ÚMemmappingPool)Ú_TestingMemmappingExecutor©Úhas_shareable_memory)ÚArrayMemmapForwardReducer)Ú_strided_from_memmap)Ú_get_temp_dir)Ú_WeakArrayKeyMap©Ú_get_backing_memmapc                  ó2   — t          j        dd¬¦  «         d S )Ni,  T)ÚtimeoutÚexit)ÚfaulthandlerÚdump_traceback_later© ó    úO/var/www/piapp/venv/lib/python3.11/site-packages/joblib/test/test_memmapping.pyÚsetup_moduler    !   s   € ÝÔ%¨c¸Ð=Ñ=Ô=Ð=Ð=Ð=r   c                  ó,   — t          j        ¦   «          d S ©N)r   Úcancel_dump_traceback_laterr   r   r   Úteardown_moduler$   %   s   € ÝÔ,Ñ.Ô.Ð.Ð.Ð.r   c                 ó(   — t          | ¦  «        €J ‚| S r"   r   )Úarrays    r   Úcheck_memmap_and_send_backr'   )   s   € Ý˜uÑ%Ô%Ð1Ð1Ð1Ø€Lr   c                 ó^   — | \  }}}t           j                             ||         |¦  «         dS )z�Dummy helper function to be executed in subprocesses

    Check that the provided array has the expected values in the provided
    range.

    N©r   ÚtestingÚassert_array_equal©ÚargsÚdataÚpositionÚexpecteds       r   Úcheck_arrayr1   .   s2   € ð  $Ñ€Dˆ(�HÝ„J×!Ò! $ x¤.°(Ñ;Ô;Ð;Ð;Ð;r   c                 ó    — | \  }}}||         |k    sJ ‚||xx         dz  cc<   t           j                             ||         d|z  ¦  «         dS )zÜDummy helper function to be executed in subprocesses


    Check that the input array has the right values in the provided range
    and perform an inplace modification to double the values in the range by
    two.

    é   Nr)   r,   s       r   Úinplace_doubler4   9   sa   € ð  $Ñ€Dˆ(�HØ�Œ>˜XÒ%Ð%Ð%Ð%Øˆ€N€N„N�aÑ€N€N�NÝ„J×!Ò! $ x¤.°!°h±,Ñ?Ô?Ð?Ð?Ð?r   c                 óÔ  ‡— t           j        j        }|                      d¦  «        j        }t          j        |t           j        dd¬¦  «        }dt          j        |j        d         |j	        ¬¦  «        z  |dd…<   | 
                    ¦   «          t          j        |t           j        d	d
dd¬¦  «        }t          j        d¦  «                             |j        ¦  «        |dd…<   |dd…dd…dd…f         }t          j        |¦  «        }|j        }t          d| j        dd¦  «        Šˆfd„} ||¦  «        }	t          |	¦  «        sJ ‚t!          |	t           j        ¦  «        sJ ‚ ||	|¦  «          ||¦  «        }
t          |
¦  «        sJ ‚ ||
|¦  «          ||¦  «        }t!          |t           j        ¦  «        rJ ‚t          |¦  «        sJ ‚ |||¦  «          ||¦  «        }t!          |t           j        ¦  «        rJ ‚t          |¦  «        sJ ‚ |||¦  «         |dz  }t          |¦  «        rJ ‚ ||¦  «        }t          |¦  «        rJ ‚t!          |t           j        ¦  «        rJ ‚ |||dz  ¦  «         t          j        |¦  «        }t          |¦  «        rJ ‚ ||¦  «        }t!          |t           j        ¦  «        sJ ‚t          |¦  «        rJ ‚ |||¦  «         dS )z9Check that it is possible to reduce a memmap backed arrayú	test.mmapiô  úw+©ÚdtypeÚshapeÚmodeg      ð¿r   ©r9   N)é   é   é   úr+ÚFr?   )r9   r:   r;   ÚorderÚoffseté<   é   éÿÿÿÿr3   ÚcTc                 ó*   •—  ‰| ¦  «        \  }} ||Ž S r"   r   ©ÚxÚconsr-   Úreducers      €r   Úreconstruct_array_or_memmapzEtest_memmap_based_array_reducing.<locals>.reconstruct_array_or_memmapi   ó    ø€ Ø�W˜Q‘Z”Z‰
ˆˆdØˆt�Tˆ{Ðr   r=   )r   r*   r+   ÚjoinÚstrpathÚmemmapÚfloat64Úaranger:   r9   ÚflushÚreshapeÚasarrayÚTr   r   Ú
isinstanceÚndarray)Útmpdirr+   ÚfilenameÚbufferÚaÚbrG   ÚdrM   Úa_reconstructedÚb_reconstructedÚc_reconstructedÚd_reconstructedÚa3Úa3_reconstructedÚb3Úb3_reconstructedrL   s                    @r   Ú test_memmap_based_array_reducingrh   H   sD  ø€ õ œÔ6ÐØ�{Š{˜;Ñ'Ô'Ô/€Hõ ŒY�x¥r¤z¸À4ÐHÑHÔH€Fð �œ	 &¤,¨q¤/¸¼ÐFÑFÔFÑF€Fˆ1ˆ1ˆ1�IØ
‡L‚L�N„N€Nõ 	Œ	�(¥"¤*°IØ 3¨qð	2ñ 	2ô 	2€AåŒ9�R‰=Œ=× Ò  ¤Ñ)Ô)€A€a€a€a�Dð
 	
ˆ!ˆBˆ$��"��a˜�cˆ/Ô€Aõ 	Œ
�1‰Œ€AØ	Œ€Aõ (¨¨f¬n¸cÀ4ÑHÔH€Gðð ð ð ð ð
 2Ð1°!Ñ4Ô4€OÝ Ñ0Ô0Ð0Ð0Ð0Ý�o¥r¤yÑ1Ô1Ð1Ð1Ð1ØÐ�¨Ñ*Ô*Ð*ð 2Ð1°!Ñ4Ô4€OÝ Ñ0Ô0Ð0Ð0Ð0ØÐ�¨Ñ*Ô*Ð*ð 2Ð1°!Ñ4Ô4€OÝ˜/­2¬9Ñ5Ô5Ð5Ð5Ð5Ý Ñ0Ô0Ð0Ð0Ð0ØÐ�¨Ñ*Ô*Ð*à1Ð1°!Ñ4Ô4€OÝ˜/­2¬9Ñ5Ô5Ð5Ð5Ð5Ý Ñ0Ô0Ð0Ð0Ð0ØÐ�¨Ñ*Ô*Ð*ð 
ˆQ‰€BÝ# BÑ'Ô'Ð'Ð'Ð'Ø2Ð2°2Ñ6Ô6ÐÝ#Ð$4Ñ5Ô5Ð5Ð5Ð5ÝÐ*­B¬IÑ6Ô6Ð6Ð6Ð6ØÐÐ'¨¨Q©Ñ/Ô/Ð/õ 
Œ�B‰Œ€BÝ# BÑ'Ô'Ð'Ð'Ð'à2Ð2°2Ñ6Ô6ÐÝÐ&­¬
Ñ3Ô3Ð3Ð3Ð3Ý#Ð$4Ñ5Ô5Ð5Ð5Ð5ØÐÐ'¨Ñ,Ô,Ð,Ð,Ð,r   Úwin32r   z2PermissionError only easily triggerable on Windows)Úreasonc                 ó°  — |                       d¦  «        j        }d                     |¬¦  «        }t          j        t
          j        d|gt          j        t          j        ¬¦  «        }|                     ¦   «          | 	                    ¦   «         \  }}|j
        dk    sJ ‚|dk    sJ ‚d                     |¦  «        }||                     ¦   «         v sJ ‚d S )	Nr6   aæ  if 1:
    import os
    import numpy as np
    import time
    from joblib.externals.loky.backend import resource_tracker
    resource_tracker.VERBOSE = 1

    # Start the resource tracker
    resource_tracker.ensure_running()
    time.sleep(1)

    # Create a file containing numpy data
    memmap = np.memmap(r"{filename}", dtype=np.float64, shape=10, mode='w+')
    memmap[:] = np.arange(10).astype(np.int8).data
    memmap.flush()
    assert os.path.exists(r"{filename}")
    del memmap

    # Create a np.memmap backed by this file
    memmap = np.memmap(r"{filename}", dtype=np.float64, shape=10, mode='w+')
    resource_tracker.register(r"{filename}", "file")

    # Ask the resource_tracker to delete the file backing the np.memmap , this
    # should raise PermissionError that the resource_tracker will log.
    resource_tracker.maybe_unlink(r"{filename}", "file")

    # Wait for the resource_tracker to process the maybe_unlink before cleaning
    # up the memmap
    time.sleep(2)
    )r[   ú-c©ÚstderrÚstdoutr   r   z'tried to unlink {}, got PermissionError)rO   rP   ÚformatÚ
subprocessÚPopenÚsysÚ
executableÚPIPEÚwaitÚcommunicateÚ
returncodeÚdecode)rZ   r[   ÚcmdÚpÚoutÚerrÚmsgs          r   Ú2test_resource_tracker_retries_when_permissionerrorr   –   sÐ   € ð �{Š{˜;Ñ'Ô'Ô/€Hð÷: 	Š˜ˆÑ!Ô!ð; õ< 	Ô�#œ.¨$°Ð4½Z¼_Ý *¤ð	1ñ 	1ô 	1€Aà‡F‚F�H„H€HØ�}Š}‰Œ�H€CˆØŒ<˜1ÒÐÐÐØ�#Š:ˆ:ˆ:ˆ:Ø
3×
:Ò
:¸8Ñ
DÔ
D€CØ�#—*’*‘,”,ÐÐÐÐÐÐr   c                 ón  ‡— t           j        j        }|                      d¦  «        j        }t          j        |t           j        dd¬¦  «        }t          j        d¦  «                             |j	        ¦  «        |d d …<   |dd…         }|d d …dd…f         }|d d …d d …d d …df         }|d	d
d…         }t          d | j        dd¦  «        Šˆfd„} ||¦  «        }	t          |	¦  «        sJ ‚t          |	t           j        ¦  «        sJ ‚ ||	|¦  «          ||¦  «        }
t          |
¦  «        sJ ‚ ||
|¦  «          ||¦  «        }t          |¦  «        sJ ‚ |||¦  «          ||¦  «        }t          |¦  «        sJ ‚ |||¦  «          ||¦  «        }t          |¦  «        sJ ‚ |||¦  «         d S )Nr6   )éd   é   r‚   r=   r7   r8   i¬ r   é
   r>   rE   r=   r?   rG   Tc                 ó*   •—  ‰| ¦  «        \  }} ||Ž S r"   r   rI   s      €r   rM   zNtest_high_dimension_memmap_array_reducing.<locals>.reconstruct_array_or_memmapÚ   rN   r   )r   r*   r+   rO   rP   rQ   rR   rS   rU   r:   r   r   rX   )rZ   r+   r[   r]   r^   rG   r_   ÚerM   r`   ra   rb   rc   Úe_reconstructedrL   s                 @r   Ú)test_high_dimension_memmap_array_reducingr‡   Å   s#  ø€ õ œÔ6Ðà�{Š{˜;Ñ'Ô'Ô/€Hõ 	Œ	�(¥"¤*Ð4DØð	ñ 	ô 	€AåŒ9Ð&Ñ'Ô'×/Ò/°´Ñ8Ô8€A€a€a€a�Dð 	
ˆ!ˆBˆ$Œ€AØ	ˆ!ˆ!ˆ!ˆQˆrˆTˆ'Œ
€AØ	ˆ!ˆ!ˆ!ˆQˆQˆQ����1ˆ*Œ€AØ	ˆ!ˆAˆaˆ%Œ€Aõ (¨¨f¬n¸cÀ4ÑHÔH€Gðð ð ð ð ð 2Ð1°!Ñ4Ô4€OÝ Ñ0Ô0Ð0Ð0Ð0Ý�o¥r¤yÑ1Ô1Ð1Ð1Ð1ØÐ�¨Ñ*Ô*Ð*à1Ð1°!Ñ4Ô4€OÝ Ñ0Ô0Ð0Ð0Ð0ØÐ�¨Ñ*Ô*Ð*à1Ð1°!Ñ4Ô4€OÝ Ñ0Ô0Ð0Ð0Ð0ØÐ�¨Ñ*Ô*Ð*à1Ð1°!Ñ4Ô4€OÝ Ñ0Ô0Ð0Ð0Ð0ØÐ�¨Ñ*Ô*Ð*à1Ð1°!Ñ4Ô4€OÝ Ñ0Ô0Ð0Ð0Ð0ØÐ�¨Ñ*Ô*Ð*Ð*Ð*r   c                 ó˜  — |                       d¦  «        j        }dt          j        z  }t          j        dz   }t	          j        |d||z   ¬¦  «        }t          |dd|d|d d d	¬
¦	  «	        }t          |t          j        ¦  «        sJ ‚|j        |k    sJ ‚t          |dd|d|dz  fd|d	¬
¦	  «	        }t          |¦  «        j        |k    sJ ‚d S )Nr6   r>   rE   r7   )r;   r:   Úuint8ÚrÚCF)r9   r;   rC   rB   r:   ÚstridesÚtotal_buffer_lenÚunlink_on_gc_collectr3   )r3   )
rO   rP   ÚmmapÚALLOCATIONGRANULARITYr   rQ   r   rX   rC   r   )rZ   ÚfnameÚsizerC   Ú
memmap_objÚmemmap_backed_objs         r   Útest__strided_from_memmapr•   ô   sù   € à�KŠK˜Ñ$Ô$Ô,€EØ�tÔ)Ñ)€DÝÔ'¨!Ñ+€Få”˜5 t°4¸&±=ÐAÑAÔA€Jå% e°7ÀØ-3¸3ÀdØ.2ÀTØ;@ðBñ Bô B€Jõ �j¥"¤)Ñ,Ô,Ð,Ð,Ð,ØÔ Ò&Ð&Ð&Ð&Ý,Ø�W 3¨v¸SØ�q‰yˆl D¸4Ø"ðñ ô Ðõ
 Ð0Ñ1Ô1Ô8¸FÒBÐBÐBÐBÐBÐBr   ÚfactoryÚmultiprocessingÚloky)Úidsc           	      óØ  ‡‡‡— t           j        j        }|                     d¦  «        j        } | dd|¬¦  «        }	 |                     d¦  «        j        }t          j        |t           j        dd¬¦  «        Š‰                     d	¦  «         | 	                    t          ˆfd
„t          ‰j        d         ¦  «        D ¦   «         ¦  «          |‰dt          j        ‰j        ¦  «        z  ¦  «         t          j        |t           j        dd¬¦  «        Š| 	                    t          ˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «         t          j        |¦  «        g k    sJ ‚ |‰dt          j        ‰j        ¦  «        z  ¦  «          |‰dt          j        ‰j        ¦  «        z  ¦  «         t          j        |t           j        ddd¬¦  «        Št!          t"          ¦  «        5  | 	                    t$          ˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «         ddd¦  «         n# 1 swxY w Y   t!          t&          t(          f¦  «        5  | 	                    t          ˆfd„t          ‰j        d         ¦  «        D ¦   «         ¦  «         ddd¦  «         n# 1 swxY w Y   |                     ¦   «          ~dS # |                     ¦   «          ~w xY w)z@Check that subprocess can access and update shared memory memmapÚpoolrƒ   r3   ©Ú
max_nbytesÚtemp_folderr6   ©r=   r>   r7   r8   ç      ð?c                 óX   •— g | ]&}t          ‰j        d          ¦  «        D ]	}‰||fdf‘Œ
Œ'S ©rE   r    ©Úranger:   )Ú.0ÚiÚjr]   s      €r   ú
<listcomp>z)test_pool_with_memmap.<locals>.<listcomp>  óW   ø€ ð ;ð ;ð ;Ø#$Ý(-¨a¬g°a¬jÑ(9Ô(9ð;ð ;à#$ð !" A q 6¨3Ð/ð ;ð ;ð ;ð ;r   r   )r>   r=   rG   c                 óX   •— g | ]&}t          ‰j        d          ¦  «        D ]	}‰||fdf‘Œ
Œ'S )rE   ç       @r£   )r¥   r¦   r§   r^   s      €r   r¨   z)test_pool_with_memmap.<locals>.<listcomp>#  r©   r   ©rƒ   rŠ   é   )r9   r:   r;   rC   c                 ó   •— g | ]}‰|d f‘ŒS )g      @r   ©r¥   r¦   rG   s     €r   r¨   z)test_pool_with_memmap.<locals>.<listcomp>4  s   ø€ ÐGÐGÐG°  A s ÐGÐGÐGr   Nc                 ó   •— g | ]}‰|d f‘ŒS )r«   r   r¯   s     €r   r¨   z)test_pool_with_memmap.<locals>.<listcomp>9  s   ø€ Ð"JÐ"JÐ"J°1 A q¨# ;Ð"JÐ"JÐ"Jr   )r   r*   r+   ÚmkdirrP   rO   rQ   Úfloat32ÚfillÚmapr4   r¤   r:   ÚonesÚosÚlistdirr   ÚAssertionErrorr1   ÚRuntimeErrorÚ
ValueErrorÚ	terminate)	r–   rZ   r+   Úpool_temp_folderr{   r[   r]   r^   rG   s	         @@@r   Útest_pool_with_memmapr½   
  sy  øøø€ õ œÔ6Ðð —|’| FÑ+Ô+Ô3ÐØˆ�˜qÐ.>Ð?Ñ?Ô?€Að(Ø—;’;˜{Ñ+Ô+Ô3ˆÝŒI�h¥b¤j¸ÀTÐJÑJÔJˆØ	�Šˆs‰Œˆà	�Š�nð ;ð ;ð ;ð ;Ý(-¨a¬g°a¬jÑ(9Ô(9ð;ñ ;ô ;ñ 	<ô 	<ð 	<ð 	Ð˜1˜a¥"¤'¨!¬'Ñ"2Ô"2Ñ2Ñ3Ô3Ð3õ ŒI�h¥b¤j¸ÀSÐIÑIÔIˆà	�Š�nð ;ð ;ð ;ð ;Ý(-¨a¬g°a¬jÑ(9Ô(9ð;ñ ;ô ;ñ 	<ô 	<ð 	<õ ŒzÐ*Ñ+Ô+¨rÒ1Ð1Ð1Ð1ð 	Ð˜1˜a¥"¤'¨!¬'Ñ"2Ô"2Ñ2Ñ3Ô3Ð3ØÐ˜1˜a¥"¤'¨!¬'Ñ"2Ô"2Ñ2Ñ3Ô3Ð3õ ŒI�h¥b¤j¸ÀCØ"ð$ñ $ô $ˆõ •NÑ#Ô#ð 	Ið 	IØ�EŠE•+ÐGÐGÐGÐGµU¸1¼7À1¼:Ñ5FÔ5FÐGÑGÔGÑHÔHÐHð	Ið 	Ið 	Iñ 	Iô 	Ið 	Ið 	Ið 	Ið 	Ið 	Ið 	Iøøøð 	Ið 	Ið 	Ið 	Iõ
 •\¥:Ð.Ñ/Ô/ð 	Lð 	LØ�EŠE•.Ð"JÐ"JÐ"JÐ"J½¸a¼gÀa¼jÑ8IÔ8IÐ"JÑ"JÔ"JÑKÔKÐKð	Lð 	Lð 	Lñ 	Lô 	Lð 	Lð 	Lð 	Lð 	Lð 	Lð 	Løøøð 	Lð 	Lð 	Lð 	Lð 	
�Š‰ŒˆØˆAˆAøð 	
�Š‰ŒˆØˆˆˆˆsV   ¾F4K Ç2A H>È2K È>IÉK ÉIÉK É$A J0Ê$K Ê0J4Ê4K Ê7J4Ê8K ËK)c                 óN  ‡‡— t           j        j        }|                     d¦  «        j        } | dd|¬¦  «        }	 |                     d¦  «        j        }t          j        |t           j        dd¬¦  «        Š‰                     d	¦  «         t          j	        ‰¦  «        Št          ‰t           j        ¦  «        rJ ‚t          ‰¦  «        sJ ‚|                     t          ˆˆfd
„t          ‰j        d         ¦  «        D ¦   «         ¦  «          |‰dt          j        ‰j        ¦  «        z  ¦  «          |‰dt          j        ‰j        ¦  «        z  ¦  «         t#          j        |¦  «        g k    sJ ‚	 |                     ¦   «          ~dS # |                     ¦   «          ~w xY w)z?Check that subprocess can access and update shared memory arrayr›   rƒ   r3   rœ   r6   rŸ   r7   r8   r    c                 óX   •— g | ]&}t          ‰j        d          ¦  «        D ]	}‰||fdf‘Œ
Œ'S r¢   r£   )r¥   r¦   r§   r]   Úa_views      €€r   r¨   z4test_pool_with_memmap_array_view.<locals>.<listcomp>V  sW   ø€ ð ;ð ;ð ;Ø#$Ý(-¨a¬g°a¬jÑ(9Ô(9ð;ð ;à#$ð !'¨¨A¨°Ð4ð ;ð ;ð ;ð ;r   r   N)r   r*   r+   r±   rP   rO   rQ   r²   r³   rV   rX   r   r´   r4   r¤   r:   rµ   r¶   r·   r»   )r–   rZ   r+   r¼   r{   r[   r]   rÀ   s         @@r   Ú test_pool_with_memmap_array_viewrÁ   @  s©  øø€ õ œÔ6Ðð —|’| FÑ+Ô+Ô3ÐØˆ�˜qÐ.>Ð?Ñ?Ô?€Aðà—;’;˜{Ñ+Ô+Ô3ˆÝŒI�h¥b¤j¸ÀTÐJÑJÔJˆØ	�Šˆs‰Œˆõ ”˜A‘”ˆÝ˜f¥b¤iÑ0Ô0Ð0Ð0Ð0Ý# FÑ+Ô+Ð+Ð+Ð+à	�Š�nð ;ð ;ð ;ð ;ð ;Ý(-¨a¬g°a¬jÑ(9Ô(9ð;ñ ;ô ;ñ 	<ô 	<ð 	<ð
 	Ð˜1˜a¥"¤'¨!¬'Ñ"2Ô"2Ñ2Ñ3Ô3Ð3ØÐ˜6 1¥r¤w¨q¬wÑ'7Ô'7Ñ#7Ñ8Ô8Ð8õ ŒzÐ*Ñ+Ô+¨rÒ1Ð1Ð1Ð1Ð1ð 	
�Š‰ŒˆØˆAˆAøð 	
�Š‰ŒˆØˆˆˆˆs   ½D8F ÆF$Úbackendc                 óv  — d                      | ¬¦  «        }t          j        t          j        d|gt          j        t          j        ¬¦  «        }|                     ¦   «          |                     ¦   «         \  }}|j        dk    s4J | 	                    ¦   «         dz   | 	                    ¦   «         z   ¦   «         ‚d S )Ná€  if 1:
        import numpy as np
        from joblib import Parallel, delayed


        data = np.random.rand(int(2e6)).reshape((int(1e6), 2))

        # Build a complex cyclic reference that is likely to delay garbage
        # collection of the memmapped array in the worker processes.
        first_list = current_list = [data]
        for i in range(10):
            current_list = [current_list]
        first_list.append(current_list)

        if __name__ == "__main__":
            results = Parallel(n_jobs=2, backend="{b}")(
                delayed(len)(current_list) for i in range(10))
            assert results == [1] * 10
    ©r^   rl   rm   r   ú

)
rp   rq   rr   rs   rt   ru   rv   rw   rx   ry   ©rÂ   rz   r{   r|   r}   s        r   Ú-test_permission_error_windows_reference_cyclerÈ   g  s£   € ð÷$ 	Š�ˆÑÔð% õ& 	Ô�#œ.¨$°Ð4½Z¼_Ý *¤ð	1ñ 	1ô 	1€Aà‡F‚F�H„H€HØ�}Š}‰Œ�H€CˆØŒ<˜1ÒÐÐ˜cŸjšj™lœl¨VÑ3°c·j²j±l´lÑBÑÔÐÐÐr   c                 ó  — d                      | ¬¦  «        }t          d¦  «        D ]ä}t          j                             ¦   «         }t          j                             t          ¦  «        |d<   t          j	        t          j        d|gt          j        t          j        |¬¦  «        }|                     ¦   «          |                     ¦   «         \  }}|j        dk    s
J |¦   «         ‚|dk    sJ ‚t          j        d d…         d	vrd
|vsJ ‚Œåd S )Nak  if 1:
        import os
        import time

        import numpy as np

        from joblib import Parallel, delayed
        from testutils import return_slice_of_data

        data = np.ones(int(2e6))

        if __name__ == '__main__':
            # warm-up call to launch the workers and start the resource_tracker
            _ = Parallel(n_jobs=2, verbose=5, backend='{b}')(
                delayed(id)(i) for i in range(20))

            time.sleep(0.5)

            slice_of_data = Parallel(n_jobs=2, verbose=5, backend='{b}')(
                delayed(return_slice_of_data)(data, 0, 20) for _ in range(10))
    rÅ   r=   Ú
PYTHONPATHrl   ©rn   ro   Úenvr   r   ©)r=   é   r   )r=   rÎ   rE   ó   resource_tracker)rp   r¤   r¶   ÚenvironÚcopyÚpathÚdirnameÚ__file__rq   rr   rs   rt   ru   rv   rw   rx   Úversion_info)rÂ   rz   Ú_rÌ   r{   r|   r}   s          r   Ú3test_permission_error_windows_memmap_sent_to_parentr×   Š  s	  € ð÷( 	Š�ˆÑÔð) õ, �1‰XŒXð 2ð 2ˆÝŒj�oŠoÑÔˆÝœGŸOšO­HÑ5Ô5ˆˆLÑÝÔ�cœn¨d°CÐ8Ý$.¤OÝ$.¤O¸ð>ñ >ô >ˆð 	
�Š‰ŒˆØ—=’=‘?”?‰ˆˆSØŒ|˜qÒ Ð Ð  #Ñ Ô Ð Ø�cŠzˆzˆzˆzÝÔ˜B˜Q˜BÔÐ'=Ð=Ð=ð
 '¨cÐ1Ð1Ð1Ð1øð2ð 2r   c                 ó¦  ‡— t          j        t          d¦  «        ¦  «        Š t          d| d¬¦  «        ˆfd„t	          d¦  «        D ¦   «         ¦  «        \  } t          d| d¬¦  «        ˆfd„t	          d¦  «        D ¦   «         ¦  «        \  }t
          j                             |¦  «        t
          j                             |¦  «        k    sJ ‚d S )Nç      Y@r3   rƒ   ©Ún_jobsrÂ   r�   c              3   óT   •K  — | ]"} t          t          ¦  «        ‰d ¦  «        V — Œ#dS ©r[   N©r   Úgetattr©r¥   rÖ   r&   s     €r   ú	<genexpr>z6test_parallel_isolated_temp_folders.<locals>.<genexpr>Ã  óQ   øè è € ð Fð FØ01Ð�•ÑÔ˜ 
Ñ+Ô+ðFð Fð Fð Fð Fð Fr   rE   c              3   óT   •K  — | ]"} t          t          ¦  «        ‰d ¦  «        V — Œ#dS rÝ   rÞ   rà   s     €r   rá   z6test_parallel_isolated_temp_folders.<locals>.<genexpr>Æ  râ   r   ©r   rS   Úintr   r¤   r¶   rÒ   rÓ   )rÂ   Ú
filename_1Ú
filename_2r&   s      @r   Ú#test_parallel_isolated_temp_foldersrè   ¼  sü   ø€ õ ŒI•c˜#‘h”hÑÔ€EØE•8 1¨gÀ"ÐEÑEÔEð Fð Fð Fð FÝ5:¸1±X´XðFñ Fô Fñ ô �L€Zð F•8 1¨gÀ"ÐEÑEÔEð Fð Fð Fð FÝ5:¸1±X´XðFñ Fô Fñ ô �L€Zõ Œ7�?Š?˜:Ñ&Ô&­"¬'¯/ª/¸*Ñ*EÔ*EÒEÐEÐEÐEÐEÐEr   c                 óº  ‡— t          j        t          d¦  «        ¦  «        Št          d| d¬¦  «        5 } |ˆfd„t	          d¦  «        D ¦   «         ¦  «        \  } |ˆfd„t	          d¦  «        D ¦   «         ¦  «        \  }d d d ¦  «         n# 1 swxY w Y   t
          j                             |¦  «        t
          j                             |¦  «        k    sJ ‚d S )NrÙ   r3   rƒ   rÚ   c              3   óT   •K  — | ]"} t          t          ¦  «        ‰d ¦  «        V — Œ#dS rÝ   rÞ   rà   s     €r   rá   z9test_managed_backend_reuse_temp_folder.<locals>.<genexpr>Ó  óI   øè è € ð 
ð 
Ø45Ð�G•GÑÔ˜U JÑ/Ô/ð
ð 
ð 
ð 
ð 
ð 
r   rE   c              3   óT   •K  — | ]"} t          t          ¦  «        ‰d ¦  «        V — Œ#dS rÝ   rÞ   rà   s     €r   rá   z9test_managed_backend_reuse_temp_folder.<locals>.<genexpr>Ö  rë   r   rä   )rÂ   r{   ræ   rç   r&   s       @r   Ú&test_managed_backend_reuse_temp_folderrí   Ì  s6  ø€ õ
 ŒI•c˜#‘h”hÑÔ€EÝ	˜ G¸Ð	;Ñ	;Ô	;ð 
¸qØ�qð 
ð 
ð 
ð 
Ý9>¸q¹¼ð
ñ 
ô 
ñ 
ô 
‰ˆð �qð 
ð 
ð 
ð 
Ý9>¸q¹¼ð
ñ 
ô 
ñ 
ô 
‰ˆð	
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ Œ7�?Š?˜:Ñ&Ô&­"¬'¯/ª/¸*Ñ*EÔ*EÒEÐEÐEÐEÐEÐEs   µABÂBÂBc                  óê  — t          j        t          d¦  «        ¦  «        } t          ¦   «         }t          ¦   «         }d„ }t	          j        || |f¬¦  «        }t	          j        || |f¬¦  «        }|                     ¦   «          |                     ¦   «          |                     ¦   «          |                     ¦   «          t          |¦  «        dk    sJ ‚t          |¦  «        dk    sJ ‚||k    sJ ‚d S )NrÙ   c                 ó4  ‡ — t          ddd¬¦  «        5 }t          d¦  «        D ]Z} |ˆ fd„t          d¦  «        D ¦   «         ¦  «        \  }|                     t          j                             |¦  «        ¦  «         Œ[	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr˜   r3   rƒ   )rÂ   rÛ   r�   c              3   óT   •K  — | ]"} t          t          ¦  «        ‰d ¦  «        V — Œ#dS rÝ   rÞ   rà   s     €r   rá   z]test_memmapping_temp_folder_thread_safety.<locals>.concurrent_get_filename.<locals>.<genexpr>ì  sI   øè è € ð ð Ø<=Ð$•G�GÑ$Ô$ U¨JÑ7Ô7ðð ð ð ð ð r   rE   )r   r¤   Úaddr¶   rÒ   rÓ   )r&   Ú	temp_dirsr{   r¦   r[   s   `    r   Úconcurrent_get_filenamezJtest_memmapping_temp_folder_thread_safety.<locals>.concurrent_get_filenameé  s÷   ø€ Ý˜f¨Q¸2Ð>Ñ>Ô>ð 	9À!Ý˜2‘Y”Yð 9ð 9�Ø˜Qð ð ð ð ÝAFÀqÁÄðñ ô ñ ô ‘
�ð —’�bœgŸošo¨hÑ7Ô7Ñ8Ô8Ð8Ð8ð	9ð	9ð 	9ð 	9ñ 	9ô 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9ð 	9øøøð 	9ð 	9ð 	9ð 	9ð 	9ð 	9s   ”A+BÂBÂB)Útargetr-   rE   )	r   rS   rå   ÚsetÚ	threadingÚThreadÚstartrO   Úlen)r&   Útemp_dirs_thread_1Útemp_dirs_thread_2ró   Út1Út2s         r   Ú)test_memmapping_temp_folder_thread_safetyrþ   Ü  s  € õ ŒI•c˜#‘h”hÑÔ€Eå™œÐÝ™œÐð9ð 9ð 9õ 
Ô	Ø&¨eÐ5GÐ-Hð
ñ 
ô 
€Bõ 
Ô	Ø&¨eÐ5GÐ-Hð
ñ 
ô 
€Bð ‡H‚H�J„J€JØ‡H‚H�J„J€Jà‡G‚G�I„I€IØ‡G‚G�I„I€IåÐ!Ñ"Ô" aÒ'Ð'Ð'Ð'ÝÐ!Ñ"Ô" aÒ'Ð'Ð'Ð'àÐ!3Ò3Ð3Ð3Ð3Ð3Ð3r   c            	      ó¢  — d} g d¢}|D ]Å\  }}}t          j        t          j        d|                      ||¬¦  «        gt           j        t           j        ¬¦  «        }|                     ¦   «          |                     ¦   «         \  }}|j        |k    sJ | 	                    ¦   «         ¦   «         ‚d|vsJ | 	                    ¦   «         ¦   «         ‚ŒÆd S )Na>  if 1:
        import os
        import numpy as np
        from joblib import Parallel, delayed
        from joblib.externals.loky.backend import resource_tracker
        from concurrent.futures import ThreadPoolExecutor, wait

        resource_tracker.VERBOSE = 0

        array = np.arange(int(1e2))

        temp_dirs_thread_1 = set()
        temp_dirs_thread_2 = set()


        def raise_error(array):
            raise ValueError


        def parallel_get_filename(array, temp_dirs):
            with Parallel(backend="loky", n_jobs=2, max_nbytes=10) as p:
                for i in range(10):
                    [filename] = p(
                        delayed(getattr)(array, "filename") for _ in range(1)
                    )
                    temp_dirs.add(os.path.dirname(filename))


        def parallel_raise(array, temp_dirs):
            with Parallel(backend="loky", n_jobs=2, max_nbytes=10) as p:
                for i in range(10):
                    [filename] = p(
                        delayed(raise_error)(array) for _ in range(1)
                    )
                    temp_dirs.add(os.path.dirname(filename))


        executor = ThreadPoolExecutor(max_workers=2)

        # both function calls will use the same loky executor, but with a
        # different Parallel object.
        future_1 = executor.submit({f1}, array, temp_dirs_thread_1)
        future_2 = executor.submit({f2}, array, temp_dirs_thread_2)

        # Wait for both threads to terminate their backend
        wait([future_1, future_2])

        future_1.result()
        future_2.result()
    ))Úparallel_get_filenamer   r   )r   Úparallel_raiserE   )r  r  rE   rl   )Úf1Úf2rm   rÏ   )
rq   rr   rs   rt   rp   ru   rv   rw   rx   ry   )rz   Úfunctions_and_returncodesr  r  rx   r{   r|   r}   s           r   Ú?test_multithreaded_parallel_termination_resource_tracker_silentr    sá   € ð1€Cðd!ð !ð !Ðð 8ð <ð <ÑˆˆB�
ÝÔ�cœn¨d°C·J²JÀ"È°JÑ4LÔ4LÐMÝ$.¤O½J¼OðMñ Mô Mˆà	�Š‰ŒˆØ—=’=‘?”?‰ˆˆSØŒ|˜zÒ)Ð)Ð)¨3¯:ª:©<¬<Ñ)Ô)Ð)Ø"¨#Ð-Ð-Ð-¨s¯zªz©|¬|Ñ-Ô-Ð-Ð-ð<ð <r   c                 óú  — d                      | ¬¦  «        }t          j                             ¦   «         }t          j                             t          ¦  «        |d<   t          j        t          j
        d|gt          j        t          j        |¬¦  «        }|                     ¦   «          |                     ¦   «         \  }}|j        dk    s
J |¦   «         ‚|dk    sJ ‚t          j        d d…         d	vrd
|vsJ ‚d S d S )Na÷  if 1:
        import os
        import time

        import numpy as np

        from joblib import Parallel, delayed
        from testutils import return_slice_of_data

        data = np.ones(100)

        if __name__ == '__main__':
            for i in range(5):
                slice_of_data = Parallel(
                    n_jobs=2, max_nbytes=1, backend='{b}')(
                        delayed(return_slice_of_data)(data, 0, 20)
                        for _ in range(10)
                    )
    rÅ   rÊ   rl   rË   r   r   r=   rÍ   rÏ   )rp   r¶   rÐ   rÑ   rÒ   rÓ   rÔ   rq   rr   rs   rt   ru   rv   rw   rx   rÕ   )rÂ   rz   rÌ   r{   r|   r}   s         r   Ú'test_many_parallel_calls_on_same_objectr  L  sû   € ð÷$ 	Š�ˆÑÔð% õ& Œ*�/Š/Ñ
Ô
€CÝœŸš­Ñ1Ô1€CˆÑÝÔÝ	Œ˜˜sÐ#ÝŒÝŒØð		ñ 	ô 	€Að ‡F‚F�H„H€HØ�}Š}‰Œ�H€CˆØŒ<˜1ÒÐÐ˜cÑÔÐØ�#Š:ˆ:ˆ:ˆ:Ý
Ô˜˜˜ÔÐ#9Ð9Ð9ð
 #¨#Ð-Ð-Ð-Ð-ð :Ð9ð
 .Ð-r   c                 óØ   ‡— t          j        t          d¦  «        ¦  «        Š t          d| d¬¦  «        ˆfd„t	          d¦  «        D ¦   «         ¦  «        \  }t          |¦  «        �J ‚d S )Ng     @�@r3   r�   rÚ   c              3   óR   •K  — | ]!} t          t          ¦  «        ‰¦  «        V — Œ"d S r"   )r   r'   )r¥   rÖ   r.   s     €r   rá   z8test_memmap_returned_as_regular_array.<locals>.<genexpr>‚  sX   øè è € ð CEð CEØ67Ð+�Õ*Ñ+Ô+¨DÑ1Ô1ðCEð CEð CEð CEð CEð CEr   rE   )r   rµ   rå   r   r¤   r   )rÂ   Úresultr.   s     @r   Ú%test_memmap_returned_as_regular_arrayr  |  s’   ø€ õ Œ7•3�s‘8”8ÑÔ€DàB�x˜q¨'¸cÐBÑBÔBð CEð CEð CEð CEÝ;@À¹8¼8ðCEñ CEô CEñ Eô E�H€Vå˜vÑ&Ô&Ð.Ð.Ð.Ð.Ð.r   c                 ó  — | dk    r3t           j                             d¦  «        rt          j        d¦  «         d                     | ¬¦  «        }t          j        t           j        d|gt          j	        t          j	        ¬¦  «        }| 
                    ¦   «          |                     ¦   «         \  }}|                     ¦   «         }|                     ¦   «         }|j        dk    sJ |d	z   |z   ¦   «         ‚d
|vs
J |¦   «         ‚d S )Nr˜   ÚwinzVThe temporary folder cannot be deleted on Windows in the presence of a reference cyclerÄ   rÅ   rl   rm   r   rÆ   Úresource_tracker)rs   ÚplatformÚ
startswithÚpytestÚxfailrp   rq   rr   rt   ru   rv   rw   ry   rx   rÇ   s        r   Ú2test_resource_tracker_silent_when_reference_cyclesr  ‡  s  € ð" �&ÒÐ�Sœ\×4Ò4°UÑ;Ô;Ðõ 	Œð,ñ	
ô 	
ð 	
ð
÷$ 	Š�ˆÑÔð% õ& 	Ô�#œ.¨$°Ð4½Z¼_Ý *¤ð	1ñ 	1ô 	1€Aà‡F‚F�H„H€HØ�}Š}‰Œ�H€CˆØ
�*Š*‰,Œ,€CØ
�*Š*‰,Œ,€CØŒ<˜1ÒÐÐ˜c F™l¨SÑ0ÑÔÐØ SÐ(Ð(Ð(¨#Ñ(Ô(Ð(Ð(Ð(r   c                 ó*  ‡‡— t          j        |j        ¦  «        g k    sJ ‚ | dd|j        d¬¦  «        }	 t          j        |j        ¦  «        g k    sJ ‚t           j                             |j        ¦  «        rJ ‚t          j        dt          j        ¬¦  «        Š‰j	        dk    sJ ‚| 
                    t          ˆfd„t          ‰j        d	         ¦  «        D ¦   «         ¦  «         t          j        |j        ¦  «        g k    sJ ‚t          j        d
t          j        ¬¦  «        Š‰j	        dk    sJ ‚| 
                    t          ˆfd„t          ‰j        d	         ¦  «        D ¦   «         ¦  «         t           j                             |j        ¦  «        sJ ‚t          j        |j        ¦  «        }t!          |¦  «        dk    sJ ‚t          j        dgd
z  d¬¦  «        }| 
                    t$          |g¦  «        }|d	         rJ ‚	 |                     ¦   «          t          d¦  «        D ]7}t)          d¦  «         t           j                             |j        ¦  «        s n(Œ8t+          d                     |j        ¦  «        ¦  «        ‚~dS # |                     ¦   «          t          d¦  «        D ]7}t)          d¦  «         t           j                             |j        ¦  «        s n(Œ8t+          d                     |j        ¦  «        ¦  «        ‚~w xY w)z0Check that large arrays are not copied in memoryr=   é(   r3   )r�   rž   Úverboser>   r<   r­   c                 ó   •— g | ]}‰|d f‘ŒS ©r    r   )r¥   r¦   Úsmalls     €r   r¨   z9test_memmapping_pool_for_large_arrays.<locals>.<listcomp>Ò  ó   ø€ ÐKÐKÐK°˜U A s˜OÐKÐKÐKr   r   r�   é   c                 ó   •— g | ]}‰|d f‘ŒS r  r   ©r¥   r¦   Úlarges     €r   r¨   z9test_memmapping_pool_for_large_arrays.<locals>.<listcomp>Ú  r  r   rE   ÚabcÚobjectrƒ   çš™™™™™¹?z#temporary folder {} was not deletedN)r¶   r·   rP   rÒ   ÚexistsÚ_temp_folderr   rµ   r²   Únbytesr´   r1   r¤   r:   rR   Úisdirrù   r&   r   r»   r   r¸   rp   )	r–   rZ   r{   Údumped_filenamesÚobjectsÚresultsr¦   r  r  s	          @@r   Ú%test_memmapping_pool_for_large_arraysr)  ¾  sô  øø€ õ Œ:�f”nÑ%Ô%¨Ò+Ð+Ð+Ð+ð 	ˆ�˜b¨f¬nÀaÐHÑHÔH€Að(åŒz˜&œ.Ñ)Ô)¨RÒ/Ð/Ð/Ð/Ý”7—>’> !¤.Ñ1Ô1Ð1Ð1Ð1å”˜¥¤Ð,Ñ,Ô,ˆØŒ|˜rÒ!Ð!Ð!Ð!Ø	�Š�kÐKÐKÐKÐKµU¸5¼;Àq¼>Ñ5JÔ5JÐKÑKÔKÑLÔLÐLõ Œz˜&œ.Ñ)Ô)¨RÒ/Ð/Ð/Ð/õ ”˜¥2¤:Ð.Ñ.Ô.ˆØŒ|˜sÒ"Ð"Ð"Ð"Ø	�Š�kÐKÐKÐKÐKµU¸5¼;Àq¼>Ñ5JÔ5JÐKÑKÔKÑLÔLÐLõ Œw�}Š}˜Qœ^Ñ,Ô,Ð,Ð,Ð,Ýœ: a¤nÑ5Ô5ÐÝÐ#Ñ$Ô$¨Ò)Ð)Ð)Ð)õ ”(˜E˜7 S™=°Ð9Ñ9Ô9ˆØ—%’%Õ,¨w¨iÑ8Ô8ˆØ˜1”:ÐÐÐÐð 	
�Š‰ŒˆÝ�r‘”ð 	ð 	ˆAÝ�"‰IŒIˆIÝ”7—>’> !¤.Ñ1Ô1ð Ø�ðõ !Ø5×<Ò<¸Q¼^ÑLÔLñô ð ð ˆAˆAøð 	
�Š‰ŒˆÝ�r‘”ð 	ð 	ˆAÝ�"‰IŒIˆIÝ”7—>’> !¤.Ñ1Ô1ð Ø�ðõ !Ø5×<Ò<¸Q¼^ÑLÔLñô ð ð ˆˆˆˆs   ·GJ ÊBLz,https://github.com/joblib/joblib/issues/1086)Úmarksc                 óŠ  — d                      | ¬¦  «        }t          j                             ¦   «         }t          j                             t          ¦  «        |d<   t          j        t          j
        d|gt          j        t          j        |¬¦  «        }|                     ¦   «          |                     ¦   «         \  }}|                     ¦   «         |                     ¦   «         }}|                     d¦  «        d         }|j        dk    sJ |p|¦   «         ‚|dk    sJ ‚t          j                             |¦  «        rJ ‚d S )	Naï  if 1:
        import os
        from pathlib import Path
        from time import sleep

        import numpy as np
        from joblib import Parallel, delayed
        from testutils import print_filename_and_raise

        data = np.random.rand(1000)

        def get_temp_folder(parallel_obj, backend):
            if "{b}" == "loky":
                return Path(parallel_obj._backend._workers._temp_folder)
            else:
                return Path(parallel_obj._backend._pool._temp_folder)


        if __name__ == "__main__":
            try:
                with Parallel(n_jobs=2, backend="{b}", max_nbytes=100) as p:
                    temp_folder = get_temp_folder(p, "{b}")
                    p(delayed(print_filename_and_raise)(data)
                              for i in range(1))
            except ValueError as e:
                # the temporary folder should be deleted by the end of this
                # call but apparently on some file systems, this takes
                # some time to be visible.
                #
                # We attempt to write into the temporary folder to test for
                # its existence and we wait for a maximum of 10 seconds.
                for i in range(100):
                    try:
                        with open(temp_folder / "some_file.txt", "w") as f:
                            f.write("some content")
                    except FileNotFoundError:
                        # temp_folder has been deleted, all is fine
                        break

                    # ... else, wait a bit and try again
                    sleep(.1)
                else:
                    raise AssertionError(
                        str(temp_folder) + " was not deleted"
                    ) from e
    rÅ   rÊ   rl   rË   ú
r   Ú )rp   r¶   rÐ   rÑ   rÒ   rÓ   rÔ   rq   rr   rs   rt   ru   rv   rw   ry   Úsplitrx   r"  )rÂ   rz   rÌ   r{   r|   r}   r[   s          r   Ú&test_child_raises_parent_exits_cleanlyr/  ö  s  € ð:-÷Z 	Š�ˆÑÔð[ õ\ Œ*�/Š/Ñ
Ô
€CÝœŸš­Ñ1Ô1€CˆÑÝÔ�#œ.¨$°Ð4½Z¼_Ý *¤°Sð	:ñ 	:ô 	:€Aà‡F‚F�H„H€HØ�}Š}‰Œ�H€CˆØ�zŠz‰|Œ|˜SŸZšZ™\œ\ˆ€CØ�yŠy˜‰Œ˜qÔ!€HØŒ<˜1ÒÐÐ˜c˜j SÑÔÐØ�"Š9ˆ9ˆ9ˆ9ÝŒw�~Š~˜hÑ'Ô'Ð'Ð'Ð'Ð'Ð'r   c                 óä  ‡—  | dd|j         ¬¦  «        }	 t          j        |j         ¦  «        g k    sJ ‚t          j        dt          j        ¬¦  «        Š‰j        dk    sJ ‚|                     t          ˆfd„t          ‰j
        d         ¦  «        D ¦   «         ¦  «         t          j        |j         ¦  «        g k    sJ ‚	 |                     ¦   «          ~dS # |                     ¦   «          ~w xY w)	z2Check that large arrays memmapping can be disabledr=   Nrœ   r�   r<   r  c                 ó   •— g | ]}‰|d f‘ŒS r  r   r  s     €r   r¨   zBtest_memmapping_pool_for_large_arrays_disabled.<locals>.<listcomp>^  r  r   r   )rP   r¶   r·   r   rµ   rR   r$  r´   r1   r¤   r:   r»   )r–   rZ   r{   r  s      @r   Ú.test_memmapping_pool_for_large_arrays_disabledr2  N  sö   ø€ ð 	ˆ�˜d°´Ð?Ñ?Ô?€Aðõ Œz˜&œ.Ñ)Ô)¨RÒ/Ð/Ð/Ð/õ ”˜¥2¤:Ð.Ñ.Ô.ˆØŒ|˜sÒ"Ð"Ð"Ð"Ø	�Š�kÐKÐKÐKÐKµU¸5¼;Àq¼>Ñ5JÔ5JÐKÑKÔKÑLÔLÐLõ Œz˜&œ.Ñ)Ô)¨RÒ/Ð/Ð/Ð/Ð/ð 	
�Š‰ŒˆØˆAˆAøð 	
�Š‰ŒˆØˆˆˆˆs   –B*C ÃC/c                 ó  — t           j        }	 t          d¦  «        t           _         | dd¬¦  «        }	 |j        }d}|                     |¦  «        sJ ‚t
          j                             |¦  «        sJ ‚t          j	        dt          j
        ¬¦  «        }|j        dk    sJ ‚|                     t          |gdz  ¦  «         t          t          j        |¦  «        ¦  «        d	k    sJ ‚t          j	        dt          j
        ¬¦  «        d
z  }|j        dk    sJ ‚|                     t          |gdz  ¦  «         t          t          j        |¦  «        ¦  «        d
k    sJ ‚	 |                     ¦   «          ~n# |                     ¦   «          ~w xY wt#          d¦  «        D ]2}t
          j                             |¦  «        s nt%          d¦  «         Œ3t'          d¦  «        ‚	 |t           _        dS # |t           _        w xY w)z1Check that memmapping uses /dev/shm when possibleg    €„~Ar=   rƒ   ©r�   z"/dev/shm/joblib_memmapping_folder_r�   r<   r  rE   r3   r!  z(temporary folder of pool was not deletedN)ÚjmrÚSYSTEM_SHARED_MEM_FS_MIN_SIZErå   r#  r  r¶   rÒ   r"  r   rµ   rR   r$  r´   Úidrù   r·   r»   r¤   r   r¸   )r–   Ú	orig_sizer{   r¼   Úfolder_prefixr]   r^   r¦   s           r   Ú'test_memmapping_on_large_enough_dev_shmr:  i  sù  € õ Ô1€Ið+6õ -0°©I¬I�Ô)ØˆG�A "Ð%Ñ%Ô%ˆð	ð  !œ~ÐØ@ˆMØ#×.Ò.¨}Ñ=Ô=Ð=Ð=Ð=Ý”7—>’>Ð"2Ñ3Ô3Ð3Ð3Ð3õ ”˜¥2¤:Ð.Ñ.Ô.ˆAØ”8˜s’?�?�?�?Ø�EŠE•"�q�c˜B‘hÑÔÐõ •r”zÐ"2Ñ3Ô3Ñ4Ô4¸Ò9Ð9Ð9Ð9õ
 ”˜¥2¤:Ð.Ñ.Ô.°Ñ2ˆAØ”8˜s’?�?�?�?Ø�EŠE•"�q�c˜B‘hÑÔÐå•r”zÐ"2Ñ3Ô3Ñ4Ô4¸Ò9Ð9Ð9Ð9Ð9ð �KŠK‰MŒMˆMØ�øð �KŠK‰MŒMˆMØˆEˆEˆEˆEå�s‘”ð 	Mð 	MˆAå”7—>’>Ð"2Ñ3Ô3ð Ø�Ý�"‰IŒIˆIˆIå Ð!KÑLÔLÐLð ð
 -6�Ô)Ð)Ð)ø¨I�Ô)Ð5Ð5Ð5Ð5s$   Ž&G0 µD*E6 Å G0 Å6FÆAG0 Ç0G>c                 óŠ  — t           j        }	 t          d¦  «        t           _         | dd¬¦  «        }	 |j        }|                     d¦  «        rJ ‚	 |                     ¦   «          ~n# |                     ¦   «          ~w xY wt          j                             |¦  «        rJ ‚	 |t           _        d S # |t           _        w xY w)Ng@³ËËï6Dr=   rƒ   r4  z/dev/shm)	r5  r6  rå   r#  r  r»   r¶   rÒ   r"  )r–   r8  r{   r¼   s       r   Ú$test_memmapping_on_too_small_dev_shmr<  Ÿ  sÒ   € õ Ô1€Ið6õ -0°©J¬J�Ô)àˆG�A "Ð%Ñ%Ô%ˆð	ð  !œ~ÐØ'×2Ò2°:Ñ>Ô>Ð>Ð>Ð>Ð>ð �KŠK‰MŒMˆMØ�øð �KŠK‰MŒMˆMØˆEˆEˆEˆEõ ”7—>’>Ð"2Ñ3Ô3Ð3Ð3Ð3Ð3à,5�Ô)Ð)Ð)ø¨I�Ô)Ð5Ð5Ð5Ð5s"   Ž&B4 µA* ÁB4 Á*BÂ$B4 Â4Cc                 óv  — t           j        j        } | dd|j        ¬¦  «        }	 |                     t           j        d¬¦  «        }|                     ¦   «         }t          |¦  «        rJ ‚ ||t          j        d¦  «        ¦  «         |                     ¦   «          ~dS # |                     ¦   «          ~w xY w)z:Check that large arrays are not copied in memory in returnr=   rƒ   rœ   )éè  ©r-   r>  N)	r   r*   r+   rP   Úapply_asyncrµ   Úgetr   r»   )r–   rZ   r+   r{   Úresr  s         r   Ú/test_memmapping_pool_for_large_arrays_in_returnrC  ¼  s°   € õ œÔ6Ðð 	ˆ�˜b¨f¬nÐ=Ñ=Ô=€AðØ�mŠm�BœG¨'ˆmÑ2Ô2ˆØ—’‘	”	ˆÝ'¨Ñ.Ô.Ð.Ð.Ð.ØÐ˜5¥"¤'¨$¡-¤-Ñ0Ô0Ð0à	�Š‰ŒˆØˆAˆAøð 	
�Š‰ŒˆØˆˆˆˆs   ¦A$B! Â!B8c                 ó.   — t          | ¦  «        sJ ‚| |z  S )z4Multiplication function to be executed by subprocessr   )r]   Ún_timess     r   Ú_worker_multiplyrF  Ö  s    € å Ñ"Ô"Ð"Ð"Ð"Øˆw‰;Ðr   c                 óâ  — t           j        j        } | dd|j        ¬¦  «        }	 t          j        t          j        d¦  «                             d¦  «        d¬¦  «        dd…dd	…dd…f         }|                     t          |df¬
¦  «         	                    ¦   «         }t          |¦  «        rJ ‚ ||d|z  ¦  «         |                     ¦   «          ~dS # |                     ¦   «          ~w xY w)zÏCheck that memmaps with a bad buffer are returned as regular arrays

    Unary operations and ufuncs on memmap instances return a new memmap
    instance with an in-memory buffer (probably a numpy bug).
    r=   rƒ   rœ   ip  )r>  r3   r=   rA   )rB   NrE   r?  )r   r*   r+   rP   rV   rS   rU   r@  rF  rA  r   r»   )r–   rZ   r+   r{   r]   r^   s         r   Ú6test_workaround_against_bad_memmap_with_copied_buffersrH  Ü  sû   € õ œÔ6Ðàˆ�˜b¨f¬nÐ=Ñ=Ô=€Aðõ ŒJ•r”y ‘”×.Ò.¨|Ñ<Ô<Ø ð"ñ "ô "Ø"# ! ! R a R¨¨¨ (ô,ˆð
 �MŠMÕ*°!°Q°ˆMÑ8Ô8×<Ò<Ñ>Ô>ˆÝ'¨Ñ*Ô*Ð*Ð*Ð*ØÐ˜1˜a !™eÑ$Ô$Ð$à	�Š‰ŒˆØˆAˆAøð 	
�Š‰ŒˆØˆˆˆˆs   ¦BC ÃC.c                 ó   — | S r"   r   )Úargs    r   ÚidentityrK  ù  s   € Ø€Jr   zfactory,retry_nor=   c                 ó@   — g | ]\  }}d                       ||¦  «        ‘ŒS )z{}, {})rp   )r¥   rJ   Úys      r   r¨   r¨     s6   € ð 	:ð 	:ð 	:¡4 1 aˆ�Š˜˜AÑ	Ô	ð 	:ð 	:ð 	:r   c                 óÚ  — |                      d¦  «        j        }dt          j        z  }t          j        dz   }t	          |d|d|¬¦  «        } | d|j        ¬¦  «        }|                     t          |f¬	¦  «                             ¦   «         }t          |t          j
        ¦  «        sJ ‚|j        |k    sJ ‚t          j                             ||¦  «         |                     ¦   «          d S )
Nr6   r>   rE   r7   r‰   )r;   r:   r9   rC   r3   ©rž   r?  )rO   rP   r�   r�   r   r@  rK  rA  rX   r   rQ   rC   r*   r+   r»   )	r–   Úretry_norZ   r‘   r’   rC   Úobjr{   r
  s	            r   Ú test_pool_memmap_with_big_offsetrR  ý  sà   € ð �KŠK˜Ñ$Ô$Ô,€EØ�tÔ)Ñ)€DÝÔ'¨!Ñ+€FÝ
�e $¨d¸'Ø#ð%ñ %ô %€Cð 	ˆ�˜vœ~Ð.Ñ.Ô.€AØ�]Š]�8¨3¨&ˆ]Ñ1Ô1×5Ò5Ñ7Ô7€FÝ�f�bœiÑ(Ô(Ð(Ð(Ð(ØŒ=˜FÒ"Ð"Ð"Ð"Ý„J×!Ò! # vÑ.Ô.Ð.Ø‡K‚K�M„M€M€M€Mr   c                 ó&  — d}t          || j        ¦  «        \  }}|du sJ ‚||                      d¦  «        j        k    sJ ‚t          |d ¬¦  «        \  }}t          j                             d¦  «        r|du sJ ‚|                     |¦  «        sJ ‚d S )Nútest.tmpdirFrO  r  )r   rP   rO   rs   r  r  Úendswith)rZ   Úpool_folder_nameÚpool_folderÚ
shared_mems       r   Útest_pool_get_temp_dirrY    s²   € Ø$ÐÝ+Ð,<¸f¼nÑMÔMÑ€K�Ø˜ÐÐÐÐØ˜&Ÿ+š+ mÑ4Ô4Ô<Ò<Ð<Ð<Ð<å+Ð,<È$ÐOÑOÔOÑ€K�Ý
„|×Ò˜uÑ%Ô%ð #Ø˜UÐ"Ð"Ð"Ð"Ø×ÒÐ 0Ñ1Ô1Ð1Ð1Ð1Ð1Ð1r   c                 ó&  — d}ddl }t          |j        j        d¦  «        r |                     |j        j        d¦  «         t          |d¬¦  «        \  }}t          j                             d¦  «        r|du sJ ‚| 	                    |¦  «        sJ ‚dS )z`Check that _get_temp_dir works when os.statvfs is not defined

    Regression test for #902
    rT  r   NÚstatvfsrO  r  F)
Újoblib._memmapping_reducerÚhasattrÚ_memmapping_reducerr¶   Údelattrr   rs   r  r  rU  )rZ   ÚmonkeypatchrV  ÚjoblibrW  rX  s         r   Ú!test_pool_get_temp_dir_no_statvfsrb  $  s­   € ð
 %ÐØ%Ð%Ð%Ð%ÝˆvÔ)Ô,¨iÑ8Ô8ð Fà×Ò˜FÔ6Ô9¸9ÑEÔEÐEå+Ð,<È$ÐOÑOÔOÑ€K�Ý
„|×Ò˜uÑ%Ô%ð #Ø˜UÐ"Ð"Ð"Ð"Ø×ÒÐ 0Ñ1Ô1Ð1Ð1Ð1Ð1Ð1r   z1This test fails with a PermissionError on WindowsÚ	mmap_moder@   r7   c                 ó  ‡— d„ Šd„ t          d¦  «        D ¦   «         } t          | dd¬¦  «        ˆfd„t          |¦  «        D ¦   «         ¦  «        }t          |¦  «        D ]%\  }}t          j                             ||¦  «         Œ&d S )Nc                 ó   — || d d …<   | S r"   r   )ÚarrÚvalues     r   Úfuncz4test_numpy_arrays_use_different_memory.<locals>.func:  s   € ØˆˆAˆAˆA‰Øˆ
r   c                 ó:   — g | ]}t          j        d d¬¦  «        ‘ŒS ))rƒ   rƒ   rR   r<   )r   Úzeros)r¥   r¦   s     r   r¨   z:test_numpy_arrays_use_different_memory.<locals>.<listcomp>>  s'   € ÐEÐEÐE°a�bŒh�x yÐ1Ñ1Ô1ÐEÐEÐEr   rƒ   r   r3   )rc  r�   rÛ   c              3   óP   •K  — | ] \  }} t          ‰¦  «        ||¦  «        V — Œ!d S r"   ©r   )r¥   r¦   rf  rh  s      €r   rá   z9test_numpy_arrays_use_different_memory.<locals>.<genexpr>@  sR   øè è € ð D?ð D?Ù"( ! Sˆ��‰Œ�c˜1ÑÔðD?ð D?ð D?ð D?ð D?ð D?r   )r¤   r   Ú	enumerater   r*   r+   )rc  Úarraysr(  r¦   rf  rh  s        @r   Ú&test_numpy_arrays_use_different_memoryro  5  sÅ   ø€ ð
ð ð ð FÐE½5À¹9¼9ÐEÑEÔE€FàC�h °qÀÐCÑCÔCð D?ð D?ð D?ð D?Ý,5°fÑ,=Ô,=ðD?ñ D?ô D?ñ ?ô ?€Gõ ˜GÑ$Ô$ð .ð .‰ˆˆ3Ý
Œ
×%Ò% c¨1Ñ-Ô-Ð-Ð-ð.ð .r   c                  ó€  ‡‡— dd„} t          j        d¦  «        }t          ¦   «         Š‰                     |d¦  «         ‰                     |¦  «        dk    sJ ‚|}‰                     |¦  «        dk    sJ ‚‰                     |d¦  «         ‰                     |¦  «        dk    sJ ‚~t          j        ¦   «          t          ‰j        ¦  «        dk    sJ ‚‰                     |¦  «        dk    sJ ‚~ | ‰j        ¦  «         t          j        d¦  «        }‰                     |d¦  «         t          ‰j        ¦  «        dk    sJ ‚‰                     |¦  «        dk    sJ ‚t          t          ¦  «        5  ‰                     t          j        d¦  «        ¦  «         d d d ¦  «         n# 1 swxY w Y   ~ | ‰j        ¦  «         d„ Št          ˆˆfd	„t          d
¦  «        D ¦   «         ¦  «        }t          j        ¦   «         dk    r4t          t          j        dd¦  «        rdnd}t          |¦  «        |k     sJ ‚d S d S )Nr�   c                 óÄ   — t          |¦  «        D ]:}t          | ¦  «        dk    r d S t          j        ¦   «          t	          d¦  «         Œ;t          | ¦  «        dk    sJ ‚d S )Nr   r!  )r¤   rù   ÚgcÚcollectr   )Ú	containerÚretriesr¦   s      r   Úassert_empty_after_gc_collectz>test_weak_array_key_map.<locals>.assert_empty_after_gc_collectJ  sd   € Ý�w‘”ð 	ð 	ˆAÝ�9‰~Œ~ Ò"Ð"Ø��ÝŒJ‰LŒLˆLÝ�"‰IŒIˆIˆIÝ�9‰~Œ~ Ò"Ð"Ð"Ð"Ð"Ð"r   é*   r]   r^   rE   rG   c                 ó,  — t          j        d¦  «        }t          t          ¦  «        5  |                      |¦  «         d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «         |                      |¦  «        |k    sJ ‚t          |¦  «        S )Nrw  )r   rµ   r   ÚKeyErrorrA  rõ   r7  )Úmr¦   r]   s      r   Úget_set_get_collectz4test_weak_array_key_map.<locals>.get_set_get_collectq  s´   € ÝŒG�B‰KŒKˆÝ•HÑÔð 	ð 	Ø�EŠE�!‰HŒHˆHð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	à	�Šˆa�‰ŒˆØ�uŠu�Q‰xŒx˜1Š}ˆ}ˆ}ˆ}Ý�!‰uŒuˆs   ©AÁAÁAc                 ó(   •— g | ]} ‰‰|¦  «        ‘ŒS r   r   )r¥   r¦   r{  rz  s     €€r   r¨   z+test_weak_array_key_map.<locals>.<listcomp>y  s'   ø€ ÐEÐEÐE°AÐ)Ð)¨!¨QÑ/Ô/ÐEÐEÐEr   r>  ÚCPythonÚnogilFi�  )r�   )r   rµ   r   rõ   rA  rr  rs  rù   Ú_datar   ry  r¤   r  Úpython_implementationrß   rs   Úflags)rv  r]   r^   rG   Ú
unique_idsÚmax_len_unique_idsr{  rz  s         @@r   Útest_weak_array_key_mapr„  G  sl  øø€ ð#ð #ð #ð #õ 	Œ�‰Œ€AÝÑÔ€AØ‡E‚Eˆ!ˆS�M„M€MØ�5Š5�‰8Œ8�sŠ?ˆ?ˆ?ˆ?à	€AØ�5Š5�‰8Œ8�sŠ?ˆ?ˆ?ˆ?Ø‡E‚Eˆ!ˆS�M„M€MØ�5Š5�‰8Œ8�sŠ?ˆ?ˆ?ˆ?à	Ý„J�L„L€LÝˆqŒw‰<Œ<˜1ÒÐÐÐØ�5Š5�‰8Œ8�sŠ?ˆ?ˆ?ˆ?à	Ø!Ð! !¤'Ñ*Ô*Ð*å
Œ�‰Œ€AØ‡E‚Eˆ!ˆS�M„M€MÝˆqŒw‰<Œ<˜1ÒÐÐÐØ�5Š5�‰8Œ8�sŠ?ˆ?ˆ?ˆ?å	•Ñ	Ô	ð ð Ø	�Š�bŒg�b‰kŒkÑÔÐðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð ð 	
Ø!Ð! !¤'Ñ*Ô*Ð*ðð ð õ ÐEÐEÐEÐEÐE½¸t¹¼ÐEÑEÔEÑFÔF€JÝÔ%Ñ'Ô'¨9Ò4Ð4õ %,­C¬I°wÀÑ$FÔ$FÐO˜S˜SÈCÐÝ�:‰ŒÐ!3Ò3Ð3Ð3Ð3ð 5Ð4ð 4Ð3s   Å5(F)Æ)F-Æ0F-c                  ó®   — t          ¦   «         } t          t          j        ¦  «        5  t          j        | ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S r"   )r   r   ÚpickleÚPicklingErrorÚdumps)rz  s    r   Ú#test_weak_array_key_map_no_picklingr‰  „  s�   € ÝÑÔ€AÝ	•Ô$Ñ	%Ô	%ð ð ÝŒ�Q‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ¨A
Á
AÁAc                 ó^  ‡‡‡‡— t          |                      d¦  «        ¦  «        Št          j        dd¬¦  «        }|                     ‰¦  «         ˆfd„Šd„ Š ‰¦   «         } t          d¬¦  «        ˆfd	„|fD ¦   «         ¦  «        } t          d¬¦  «        ˆfd
„|fD ¦   «         ¦  «        }t          j                             ||¦  «         ˆfd„Š t          d¬¦  «        ˆfd„t          d¦  «        D ¦   «         ¦  «        }t          j                             |d         |¦  «         d S )Nzarr.datrƒ   r‰   r<   c                  óþ   •— t          ‰¦  «        5 } t          j        |                      ¦   «         dt          j        d¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t	          j        dt          j        |d¬¦  «        S )Nr   )ÚaccessrC   r¬   )r9   r\   rC   )Úopenr�   ÚfilenoÚACCESS_READr   rY   r‰   )ÚfdÚmmÚtestfiles     €r   Ú_read_arrayz%test_direct_mmap.<locals>._read_array‘  s¯   ø€ Ý�(‰^Œ^ð 	N˜rÝ”˜2Ÿ9š9™;œ;¨µ$Ô2BÈ1ÐMÑMÔMˆBð	Nð 	Nð 	Nñ 	Nô 	Nð 	Nð 	Nð 	Nð 	Nð 	Nð 	Nøøøð 	Nð 	Nð 	Nð 	NåŒz˜%¥r¤x¸À1ÐEÑEÔEÐEs   ‘5AÁAÁAc                 ó   — | dz  S )Nr3   r   )rJ   s    r   rh  ztest_direct_mmap.<locals>.func–  s   € Ø�!‰tˆr   r3   )rÛ   c              3   óH   •K  — | ]} t          ‰¦  «        |¦  «        V — Œd S r"   rl  ©r¥   rJ   rh  s     €r   rá   z#test_direct_mmap.<locals>.<genexpr>œ  s3   øè è € Ð;Ð;°!˜]�W T™]œ]¨1Ñ-Ô-Ð;Ð;Ð;Ð;Ð;Ð;r   c              3   óH   •K  — | ]} t          ‰¦  «        |¦  «        V — Œd S r"   rl  r–  s     €r   rá   z#test_direct_mmap.<locals>.<genexpr>Ÿ  s3   øè è € Ð AÐ A°a ¥¨¡¤¨qÑ!1Ô!1Ð AÐ AÐ AÐ AÐ AÐ Ar   c                  ó   •—  ‰ ¦   «         S r"   r   )r“  s   €r   Úworkerz test_direct_mmap.<locals>.worker£  s   ø€ Øˆ{‰}Œ}Ðr   c              3   óF   •K  — | ]} t          ‰¦  «        ¦   «         V — Œd S r"   rl  )r¥   rÖ   r™  s     €r   rá   z#test_direct_mmap.<locals>.<genexpr>¦  s1   øè è € Ð EÐ E°q ¥¨¡¤Ñ!2Ô!2Ð EÐ EÐ EÐ EÐ EÐ Er   rE   r   )	ÚstrrO   r   rS   Útofiler   r*   r+   r¤   )	rZ   r]   rf  Úrefr(  r“  rh  r’  r™  s	        @@@@r   Útest_direct_mmaprž  Š  sq  øøøø€ õ �6—;’;˜yÑ)Ô)Ñ*Ô*€HÝ
Œ	�"˜GÐ$Ñ$Ô$€AØ‡H‚HˆXÑÔÐðFð Fð Fð Fð Fð
ð ð ð ˆ+‰-Œ-€Cð �(˜!Ð
Ñ
Ô
Ð;Ð;Ð;Ð;¸°sÐ;Ñ;Ô;Ñ
;Ô
;€Cð !�h˜aÐ Ñ Ô Ð AÐ AÐ AÐ A¸C¸5Ð AÑ AÔ AÑAÔA€GÝ„J×!Ò! '¨3Ñ/Ô/Ð/ðð ð ð ð ð !�h˜aÐ Ñ Ô Ð EÐ EÐ EÐ E½EÀ!¹H¼HÐ EÑ EÔ EÑEÔE€GÝ„J×!Ò! '¨!¤*¨cÑ2Ô2Ð2Ð2Ð2r   )Vr¶   r�   rs   r  rr  r†  Ú	itertoolsÚtimer   rq   rö   r   r  Újoblib.test.commonr   r   r   r   Újoblib.testingr   r	   r
   Újoblib.backportsr   Újoblib.parallelr   r   Újoblib.poolr   Újoblib.executorr   ÚTestExecutorr\  r   r   r   r   r   r   r^  r5  r    r$   r'   r1   r4   rh   r   r‡   r•   Úget_memmapping_executorr½   rÁ   rÈ   r×   rè   rí   rþ   r  r  r  r  r)  ÚparamÚmarkr  r/  r2  r:  r<  rC  rF  rH  rK  ÚlistÚproductr¤   r´   r›  rR  rY  rb  ro  r„  r‰  rž  r   r   r   ú<module>r­     s
  ðØ 	€	€	€	Ø €€€Ø 
€
€
€
Ø €€€Ø 	€	€	€	Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð Ø Ð Ð Ð à €€€à -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø +Ð +Ð +Ð +Ð +Ð +Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø (Ð (Ð (Ð (Ð (Ð (Ø -Ð -Ð -Ð -Ð -Ð -Ð -Ð -à &Ð &Ð &Ð &Ð &Ð &Ø FÐ FÐ FÐ FÐ FÐ FØ ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø @Ð @Ð @Ð @Ð @Ð @Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø 4Ð 4Ð 4Ð 4Ð 4Ð 4Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø :Ð :Ð :Ð :Ð :Ð :Ø (Ð (Ð (Ð (Ð (Ð (ð>ð >ð >ð/ð /ð /ðð ð ð
<ð <ð <ð@ð @ð @ð ØðI-ð I-ñ Ôñ „ðI-ðX Ø€ˆŒ˜Ò	 Ð' RØCðEñ Eô Eð)ð )ñEô Eñ Ôð)ðX Øð*+ð *+ñ Ôñ „ð*+ðZ ðCð Cñ „ðCð* ØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ð/ð /ñ.ô .ñ Ôñ „ð/ðd ØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ð ð  ñ.ô .ñ Ôñ „ð ðF ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ðCð Cñ 5Ô4ñ Ôñ „ðCð@ ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð,2ð ,2ñ 5Ô4ñ Ôñ „ð,2ð^ ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð
Fð 
Fñ 5Ô4ñ Ôñ „ð
Fð ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð
Fð 
Fñ 5Ô4ñ Ôñ „ð
Fð Øð#4ð #4ñ Ôñ „ð#4ðL ØðC<ð C<ñ Ôñ „ðC<ðL ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð*.ð *.ñ 5Ô4ñ Ôñ „ð*.ðZ ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð/ð /ñ 5Ô4ñ Ôñ „ð/ð ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð1.ð 1.ñ 5Ô4ñ Ôñ „ð1.ðh ØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ð1ð 1ñ.ô .ñ Ôñ „ð1ðh ØØ€ØàˆŒØØ”+×#Ò#ØEð $ñ ô ð	
ñ 	
ô 	
ð 	ðñô ðG(ð G(ñô ñ Ôñ „ðG(ðT ØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ðð ñ.ô .ñ Ôñ „ðð. ØØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ð.6ð .6ñ.ô .ñ „ñ Ôñ „ð
.6ðb ØØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ð6ð 6ñ.ô .ñ „ñ Ôñ „ð
6ð0 ØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ðð ñ.ô .ñ Ôñ „ðð,ð ð ð ØØ€ˆY˜¨Ô)MÐNØ# VÐ,ð.ñ .ô .ðð ñ.ô .ñ Ôñ „ðð2ð ð ð ØØ€ØØ€DÐ	ˆÔ	Ø	˜Ô=Ð>ÀÀÀaÁÄñ
Jô 
Jñ Kô Kð	:ð 	:Ð+<¨9Ô+<Ø	˜FÐ# S S¨¨e¨e°A©h¬hÑ%7Ô%7ñ,9ô ,9ð 	:ñ 	:ô 	:ð	;ñ ;ô ;ðð ñ;ô ;ñ Ôñ „ðð&	2ð 	2ð 	2ð2ð 2ð 2ð" Ø€ˆŒ˜Òð )%ð &ñ &ô &à€ˆ[˜4 ˜,Ñ'Ô'ð.ð .ñ (Ô'ñ&ô &ñ „ð.ð ð94ð 94ñ „ð94ðxð ð ð Øð3ð 3ñ Ôñ „ð3ð 3ð 3r   