§
    dŠtjÓª  ã                   óö	  — 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Zd dlZd dl	Z	d dl
mZ d dlZd dlmZ d dlmZmZmZmZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZ d dl m!Z!m"Z"m#Z#m$Z$m%Z% d d	l&m'Z'm(Z(m)Z) d
„ Z*d„ Z+d„ Z,d„ Z-d„ Z.e%e$d„ ¦   «         ¦   «         Z/e%e$ e)ej        dk    d¬¦  «        d„ ¦   «         ¦   «         ¦   «         Z0e%e$d„ ¦   «         ¦   «         Z1e%d„ ¦   «         Z2e%e$ e'deej3        gddg¬¦  «        d„ ¦   «         ¦   «         ¦   «         Z4e%e$ e'deej3        g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$ e'dddg¦  «        d „ ¦   «         ¦   «         ¦   «         Z9e%e$d!„ ¦   «         ¦   «         Z:e%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j3        gddg¬¦  «        d&„ ¦   «         ¦   «         ¦   «         Z?e%e$ e'd ej@        dejA         B                    d'¬¦  «        ¬(¦  «        dg¦  «        d)„ ¦   «         ¦   «         ¦   «         ZCe%e$ e'deej3        gddg¬¦  «        d*„ ¦   «         ¦   «         ¦   «         ZDe%e$e# e'deej3        gddg¬¦  «        d+„ ¦   «         ¦   «         ¦   «         ¦   «         ZEe%e$e# e'deej3        gddg¬¦  «        d,„ ¦   «         ¦   «         ¦   «         ¦   «         ZFe%e$ e'deej3        gddg¬¦  «        d-„ ¦   «         ¦   «         ¦   «         ZGd.„ ZHe%e$ e'deej3        gddg¬¦  «        d/„ ¦   «         ¦   «         ¦   «         ZId0„ ZJe%e$ e'd1 eK ejL        eej3        g eMd2¦  «        ¦  «        ¦  «        d3„  ejL        ddg eNeO eMd2¦  «        ¦  «        ¦  «        D ¦   «         ¬¦  «        d4„ ¦   «         ¦   «         ¦   «         ZPd5„ ZQd6„ ZRe% e)ej        dk    d7¬¦  «         e'd8d9d:g¦  «        d;„ ¦   «         ¦   «         ¦   «         ZSe%d<„ ¦   «         ZTd=„ ZUe%e$d>„ ¦   «         ¦   «         ZVe%e$d?„ ¦   «         ¦   «         ZWdS )@é    N)Úsleep)ÚArrayMemmapForwardReducerÚ_get_backing_memmapÚ_get_temp_dirÚ_strided_from_memmapÚ_WeakArrayKeyMapÚhas_shareable_memory)Úmake_memmap)Ú_TestingMemmappingExecutor)ÚParallelÚdelayed)ÚMemmappingPool)ÚIS_GIL_DISABLEDÚnpÚwith_dev_shmÚwith_multiprocessingÚ
with_numpy)ÚparametrizeÚraisesÚskipifc                  ó2   — t          j        dd¬¦  «         d S )Ni,  T)ÚtimeoutÚexit)ÚfaulthandlerÚdump_traceback_later© ó    úY/var/www/html/CA-Chatbot/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_arrayr0   3   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_doubler3   >   sa   € ð  $Ñ€Dˆ(�HØ�Œ>˜XÒ%Ð%Ð%Ð%Øˆ€N€N„N�aÑ€N€N�NÝ„J×!Ò! $ x¤.°!°h±,Ñ?Ô?Ð?Ð?Ð?r   c                 óP  ‡— 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         }|                     dd¦  «        }t          j        |¦  «        }|j        }t          d| j        dd¦  «        Šˆfd„}	 |	|¦  «        }
t          |
¦  «        sJ ‚t!          |
t           j        ¦  «        sJ ‚ ||
|¦  «          |	|¦  «        }t          |¦  «        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   ©r8   N)é   é   é   úr+ÚFr>   )r8   r9   r:   ÚorderÚoffseté<   é   éÿÿÿÿr2   é
   é2   ÚcTc                 ó*   •—  ‰| ¦  «        \  }} ||Ž S r!   r   ©ÚxÚconsr,   Úreducers      €r   Úreconstruct_array_or_memmapzEtest_memmap_based_array_reducing.<locals>.reconstruct_array_or_memmaps   ó    ø€ Ø�W˜Q‘Z”Z‰
ˆˆdØˆt�Tˆ{Ðr   r<   )r   r)   r*   ÚjoinÚstrpathÚmemmapÚfloat64Úaranger9   r8   ÚflushÚreshapeÚasarrayÚTr   r	   Ú
isinstanceÚndarray)Útmpdirr*   ÚfilenameÚbufferÚaÚbÚb2rH   ÚdrN   Úa_reconstructedÚb_reconstructedÚb2_reconstructedÚc_reconstructedÚd_reconstructedÚa3Úa3_reconstructedÚb3Úb3_reconstructedrM   s                      @r   Ú test_memmap_based_array_reducingrk   M   s˜  ø€ õ œÔ6ÐØ�{Š{˜;Ñ'Ô'Ô/€Hõ ŒY�x¥r¤z¸À4ÐHÑHÔH€Fð •r”y ¤¨a¤¸¼ÐEÑEÔEÑE€Fˆ1ˆ1ˆ1�IØ
‡L‚L�N„N€Nõ 	Œ	Ø�œ
¨)¸$ÀcÐRSð	ñ 	ô 	€Aõ Œ9�R‰=Œ=× Ò  ¤Ñ)Ô)€A€a€a€a�Dð
 	
ˆ!ˆBˆ$��"��a˜�cˆ/Ô€Að 
�Š˜˜BÑ	Ô	€Bõ 	Œ
�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ØÐ�¨Ñ*Ô*Ð*ð 3Ð2°2Ñ6Ô6ÐÝÐ 0Ñ1Ô1Ð1Ð1Ð1ØÐÐ'¨Ñ,Ô,Ð,ð 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   Úwin32z2PermissionError 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 )	Nr5   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)rP   rQ   ÚformatÚ
subprocessÚPopenÚsysÚ
executableÚPIPEÚwaitÚcommunicateÚ
returncodeÚdecode)r[   r\   ÚcmdÚpÚoutÚerrÚmsgs          r   Ú2test_resource_tracker_retries_when_permissionerrorr‚   ¥   sâ   € ð �{Š{˜;Ñ'Ô'Ô/€Hð÷: 	Š˜ˆÑ!Ô!ð; õ< 	ÔÝ	Œ˜˜sÐ#­J¬OÅJÄOð	ñ 	ô 	€Að ‡F‚F�H„H€HØ�}Š}‰Œ�H€CˆØŒ<˜1ÒÐÐ˜cŸjšj™lœlÑÔÐØ�#Š:ˆ:ˆ:ˆ:Ø
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 )Nr5   )éd   é   r…   r<   r6   r7   i¬ r   rF   r=   rD   r<   r>   rH   Tc                 ó*   •—  ‰| ¦  «        \  }} ||Ž S r!   r   rJ   s      €r   rN   zNtest_high_dimension_memmap_array_reducing.<locals>.reconstruct_array_or_memmapë   rO   r   )r   r)   r*   rP   rQ   rR   rS   rT   rV   r9   r   r	   rY   )r[   r*   r\   r^   r_   rH   ra   ÚerN   rb   rc   re   rf   Úe_reconstructedrM   s                 @r   Ú)test_high_dimension_memmap_array_reducingr‰   ×   s  ø€ õ œÔ6Ðà�{Š{˜;Ñ'Ô'Ô/€Hõ 	Œ	�(¥"¤*Ð4DÈ4ÐPÑPÔP€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 )Nr5   r=   rD   r6   )r:   r9   Úuint8ÚrÚCF)r8   r:   rB   rA   r9   ÚstridesÚtotal_buffer_lenÚunlink_on_gc_collectr2   )r2   )
rP   rQ   ÚmmapÚALLOCATIONGRANULARITYr   rR   r   rY   rB   r   )r[   ÚfnameÚsizerB   Ú
memmap_objÚmemmap_backed_objs         r   Útest__strided_from_memmapr—     s  € à�KŠK˜Ñ$Ô$Ô,€EØ�tÔ)Ñ)€DÝÔ'¨!Ñ+€Få”˜5 t°4¸&±=ÐAÑAÔA€Jå%ØØØØØØØØØ"ð
ñ 
ô 
€Jõ �j¥"¤)Ñ,Ô,Ð,Ð,Ð,ØÔ Ò&Ð&Ð&Ð&Ý,ØØØØØØ�q‰yˆlØØØ"ð
ñ 
ô 
Ðõ Ð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ÚpoolrF   r2   ©Ú
max_nbytesÚtemp_folderr5   ©r<   r=   r6   r7   ç      ð?c                 óX   •— g | ]&}t          ‰j        d          ¦  «        D ]	}‰||fdf‘Œ
Œ'S ©rD   r¢   ©Úranger9   )Ú.0ÚiÚjr^   s      €r   ú
<listcomp>z)test_pool_with_memmap.<locals>.<listcomp>=  ó@   ø€ ÐTÐTÐT !Å%ÈÌÐPQÌ
ÑBSÔBSÐTÐT¸Qˆa�!�Q�˜ÐÐTÐTÐTÐTr   r   )r=   r<   rH   c                 óX   •— g | ]&}t          ‰j        d          ¦  «        D ]	}‰||fdf‘Œ
Œ'S )rD   ç       @r¥   )r§   r¨   r©   r_   s      €r   rª   z)test_pool_with_memmap.<locals>.<listcomp>G  r«   r   ©rF   rŒ   é   )r8   r9   r:   rB   c                 ó   •— g | ]}‰|d f‘ŒS )g      @r   ©r§   r¨   rH   s     €r   rª   z)test_pool_with_memmap.<locals>.<listcomp>V  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>[  s   ø€ Ð"JÐ"JÐ"J°1 A q¨# ;Ð"JÐ"JÐ"Jr   )r   r)   r*   ÚmkdirrQ   rP   rR   Úfloat32ÚfillÚmapr3   r¦   r9   ÚonesÚosÚlistdirr   ÚAssertionErrorr0   ÚRuntimeErrorÚ
ValueErrorÚ	terminate)	r˜   r[   r*   Úpool_temp_folderr~   r\   r^   r_   rH   s	         @@@r   Útest_pool_with_memmapr¿   (  sU  øøø€ õ œÔ6Ðð —|’| FÑ+Ô+Ô3ÐØˆ�˜qÐ.>Ð?Ñ?Ô?€Að)Ø—;’;˜{Ñ+Ô+Ô3ˆÝŒI�h¥b¤j¸ÀTÐJÑJÔJˆØ	�Šˆs‰Œˆà	�ŠÝØTÐTÐTÐT¥u¨Q¬W°Q¬ZÑ'8Ô'8ÐTÑTÔTñ	
ô 	
ð 	
ð
 	Ð˜1˜a¥"¤'¨!¬'Ñ"2Ô"2Ñ2Ñ3Ô3Ð3õ ŒI�h¥b¤j¸ÀSÐIÑIÔIˆà	�ŠÝØTÐTÐTÐT¥u¨Q¬W°Q¬ZÑ'8Ô'8ÐTÑTÔTñ	
ô 	
ð 	
õ Œ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ÐPUÐVÑVÔVˆå•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�   rF   r2   rž   r5   r¡   r6   r7   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>|  sY   ø€ ð ð ð àÝ˜qœw qœzÑ*Ô*ðð ð ð ˜!˜Q˜ Ð%ðð ð ð r   r   N)r   r)   r*   r³   rQ   rP   rR   r´   rµ   rW   rY   r	   r¶   r3   r¦   r9   r·   r¸   r¹   r½   )r˜   r[   r*   r¾   r~   r\   r^   rÂ   s         @@r   Ú test_pool_with_memmap_array_viewrÃ   b  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Ñ+Ô+Ð+Ð+Ð+à	�ŠÝðð ð ð ð å˜qœw qœzÑ*Ô*ðñ ô ñ	
ô 	
ð 	
ð 	Ð˜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_   ro   rp   r   ú

)
rs   rt   ru   rv   rw   rx   ry   rz   r{   r|   ©rÄ   r}   r~   r   r€   s        r   Ú-test_permission_error_windows_reference_cyclerÊ   �  s¥   € ð÷$ 	Š�ˆÑÔð% õ& 	ÔÝ	Œ˜˜sÐ#­J¬OÅJÄOð	ñ 	ô 	€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 ‚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<   Ú
PYTHONPATHro   ©rq   rr   Úenvr   r   ó   resource_tracker)rs   r¦   r¸   ÚenvironÚcopyÚpathÚdirnameÚ__file__rt   ru   rv   rw   rx   ry   rz   r{   )rÄ   r}   Ú_rÎ   r~   r   r€   s          r   Ú3test_permission_error_windows_memmap_sent_to_parentrÖ   ´  só   € ð÷( 	Š�ˆÑÔð) õ, �1‰XŒXð .ð .ˆÝŒj�oŠoÑÔˆÝœGŸOšO­HÑ5Ô5ˆˆLÑÝÔÝŒ^˜T 3Ð'Ý”?Ý”?Øð	
ñ 
ô 
ˆð 	
�Š‰ŒˆØ—=’=‘?”?‰ˆˆSØŒ|˜qÒ Ð Ð  #Ñ Ô Ð Ø�cŠzˆzˆzˆzØ"¨#Ð-Ð-Ð-Ð-Ð-ð.ð .r   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@r2   rF   ©Ú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   rD   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   rT   Ú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Ø   r2   rF   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>û  ó8   øè è € ÐOÐOÀÐ)�¥Ñ)Ô)¨%°Ñ<Ô<ÐOÐOÐOÐOÐOÐOr   rD   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ì   ô  s  ø€ õ
 ŒI•c˜#‘h”hÑÔ€EÝ	˜ G¸Ð	;Ñ	;Ô	;ð P¸qØ�qÐOÐOÐOÐOÅeÈAÁhÄhÐOÑOÔOÑOÔO‰ˆØ�qÐOÐOÐOÐOÅeÈAÁhÄhÐOÑOÔOÑOÔO‰ˆðPð Pð Pñ Pô Pð Pð Pð Pð Pð Pð Pøøøð Pð Pð Pð Põ Œ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š   r2   rF   )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>  s8   øè è € ÐUÐUÀqÐ/�w¥wÑ/Ô/°°zÑBÔBÐUÐUÐUÐUÐUÐUr   rD   )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ÐUÐUÐUÐUÍEÐRSÉHÌHÐUÑUÔUÑUÔU‘
�Ø—’�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,   rD   )	r   rT   rä   ÚsetÚ	threadingÚThreadÚstartrP   Ú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_raiserD   )r   r   rD   ro   )Úf1Úf2rp   rÏ   )
rt   ru   rv   rw   rs   rx   ry   rz   r{   r|   )r}   Úfunctions_and_returncodesr  r  r{   r~   rÕ   r€   s           r   Ú?test_multithreaded_parallel_termination_resource_tracker_silentr  &  sâ   € ð1€Cðd!ð !ð !Ðð 8ð 	<ð 	<ÑˆˆB�
ÝÔÝŒ^˜T 3§:¢:°¸ :Ñ#;Ô#;Ð<Ý”?Ý”?ð
ñ 
ô 
ˆð
 	
�Š‰ŒˆØ—’‘”‰ˆˆ3ØŒ|˜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 |                     ¦   «         ¦   «         ‚d|vsJ ‚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Ì   ro   rÍ   r   r   rÏ   )rs   r¸   rÐ   rÑ   rÒ   rÓ   rÔ   rt   ru   rv   rw   rx   ry   rz   r{   r|   )rÄ   r}   rÎ   r~   r   r€   s         r   Ú'test_many_parallel_calls_on_same_objectr  q  sí   € ð÷$ 	Š�ˆÑÔð% õ& Œ*�/Š/Ñ
Ô
€CÝœŸš­Ñ1Ô1€CˆÑÝÔÝ	Œ˜˜sÐ#ÝŒÝŒØð		ñ 	ô 	€Að ‡F‚F�H„H€HØ�}Š}‰Œ�H€CˆØŒ<˜1ÒÐÐ˜cŸjšj™lœlÑÔÐØ�#Š:ˆ:ˆ:�s—z’z‘|”|‰:Œ:ˆ:Ø cÐ)Ð)Ð)Ð)Ð)Ð)r   c                 óØ   ‡— t          j        t          d¦  «        ¦  «        Š t          d| d¬¦  «        ˆfd„t	          d¦  «        D ¦   «         ¦  «        \  }t          |¦  «        �J ‚d S )Ng     @�@r2   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>¢  sP   øè è € ð Cð CØ67Ð+�Õ*Ñ+Ô+¨DÑ1Ô1ðCð Cð Cð Cð Cð Cr   rD   )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ð Cð Cð CÝ;@À¹8¼8ðCñ Cô Cñ ô �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Ç   ro   rp   r   rÈ   Úresource_tracker)rv   ÚplatformÚ
startswithÚpytestÚxfailrs   rt   ru   rw   rx   ry   rz   r|   r{   rÉ   s        r   Ú2test_resource_tracker_silent_when_reference_cyclesr  ¨  s  € ð" �&ÒÐ�Sœ\×4Ò4°UÑ;Ô;Ðõ 	Œð,ñ	
ô 	
ð 	
ð
÷$ 	Š�ˆÑÔð% õ& 	ÔÝ	Œ˜˜sÐ#­J¬OÅJÄOð	ñ 	ô 	€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<   é(   r2   )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   rD   ÚabcÚobjectrF   çš™™™™™¹?z#temporary folder {} was not deletedN)r¸   r¹   rQ   rÒ   ÚexistsÚ_temp_folderr   r·   r´   Únbytesr¶   r0   r¦   r9   rS   Úisdirrø   r%   r	   r½   r   rº   rs   )	r˜   r[   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Ý�#‰JŒJˆJÝ”7—>’> !¤.Ñ1Ô1ð Ø�ðõ !Ø5×<Ò<¸Q¼^ÑLÔLñô ð ð ˆAˆAøð 	
�Š‰ŒˆÝ�r‘”ð 	ð 	ˆAÝ�#‰JŒJˆJÝ”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Ì   ro   rÍ   ú
r   Ú )rs   r¸   rÐ   rÑ   rÒ   rÓ   rÔ   rt   ru   rv   rw   rx   ry   rz   r|   Úsplitr{   r!  )rÄ   r}   rÎ   r~   r   r€   r\   s          r   Ú&test_child_raises_parent_exits_cleanlyr.    s  € ð:-÷Z 	Š�ˆÑÔð[ õ\ Œ*�/Š/Ñ
Ô
€CÝœŸš­Ñ1Ô1€CˆÑÝÔÝ	Œ˜˜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   )rQ   r¸   r¹   r   r·   rS   r#  r¶   r0   r¦   r9   r½   )r˜   r[   r~   r  s      @r   Ú.test_memmapping_pool_for_large_arrays_disabledr1  w  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<   rF   ©rŸ   z"/dev/shm/joblib_memmapping_folder_r„   r;   r  rD   r2   r   z(temporary folder of pool was not deletedN)ÚjmrÚSYSTEM_SHARED_MEM_FS_MIN_SIZErä   r"  r  r¸   rÒ   r!  r   r·   rS   r#  r¶   Úidrø   r¹   r½   r¦   r   rº   )r˜   Ú	orig_sizer~   r¾   Úfolder_prefixr^   r_   r¨   s           r   Ú'test_memmapping_on_large_enough_dev_shmr9  ”  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ð Ø�Ý�#‰JŒJˆJˆJå Ð!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<   rF   r3  z/dev/shm)	r4  r5  rä   r"  r  r½   r¸   rÒ   r!  )r˜   r7  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<   rF   rž   )éè  ©r,   r=  N)	r   r)   r*   rQ   Úapply_asyncr·   Úgetr	   r½   )r˜   r[   r*   r~   Úresr  s         r   Ú/test_memmapping_pool_for_large_arrays_in_returnrB  í  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 subprocess)r	   )r^   Ún_timess     r   Ú_worker_multiplyrE  
  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<   rF   rž   ip  )r=  r2   r<   r@   )rA   NrD   r>  )r   r)   r*   rQ   rW   rT   rV   r?  rE  r@  r	   r½   )r˜   r[   r*   r~   r^   r_   s         r   Ú6test_workaround_against_bad_memmap_with_copied_buffersrG    sô   € õ œÔ6Ðàˆ�˜b¨f¬nÐ=Ñ=Ô=€Aðõ ŒJ•r”y ‘”×.Ò.¨|Ñ<Ô<ÀCÐHÑHÔHÈÈÈÈBÈQÈBÐPQÐPQÐPQÈÔRˆð �MŠMÕ*°!°Q°ˆMÑ8Ô8×<Ò<Ñ>Ô>ˆÝ'¨Ñ*Ô*Ð*Ð*Ð*ØÐ˜1˜a !™eÑ$Ô$Ð$à	�Š‰ŒˆØˆAˆAøð 	
�Š‰ŒˆØˆˆˆˆs   ¦BC ÃC.c                 ó   — | S r!   r   )Úargs    r   ÚidentityrJ  /  s   € Ø€Jr   zfactory,retry_nor<   c                 ó@   — g | ]\  }}d                       ||¦  «        ‘ŒS )z{}, {})rs   )r§   rK   Úys      r   rª   rª   <  s:   € ð 	ð 	ð 	áˆAˆqð 	�Š˜˜1ÑÔð	ð 	ð 	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 )
Nr5   r=   rD   r6   r‹   )r:   r9   r8   rB   r2   ©r    r>  )rP   rQ   r‘   r’   r
   r?  rJ  r@  rY   r   rR   rB   r)   r*   r½   )	r˜   Úretry_nor[   r“   r”   rB   Úobjr~   r	  s	            r   Ú test_pool_memmap_with_big_offsetrQ  3  s×   € ð& �KŠK˜Ñ$Ô$Ô,€EØ�tÔ)Ñ)€DÝÔ'¨!Ñ+€FÝ
�e $¨d¸'È&Ð
QÑ
QÔ
Q€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.tmpdirFrN  r  )r   rQ   rP   rv   r  r  Úendswith)r[   Úpool_folder_nameÚpool_folderÚ
shared_mems       r   Útest_pool_get_temp_dirrX  S  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
    rS  r   NÚstatvfsrN  r  F)
Újoblib._memmapping_reducerÚhasattrÚ_memmapping_reducerr¸   Údelattrr   rv   r  r  rT  )r[   ÚmonkeypatchrU  ÚjoblibrV  rW  s         r   Ú!test_pool_get_temp_dir_no_statvfsra  _  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?   r6   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>.funcw  s   € ØˆˆAˆAˆA‰Øˆ
r   c                 ó:   — g | ]}t          j        d d¬¦  «        ‘ŒS ))rF   rF   rS   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   rF   r   r2   )rb  rŸ   rÚ   c              3   óP   •K  — | ] \  }} t          ‰¦  «        ||¦  «        V — Œ!d S r!   ©r   )r§   r¨   re  rg  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*   )rb  Úarraysr'  r¨   re  rg  s        @r   Ú&test_numpy_arrays_use_different_memoryrn  q  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                  óX  ‡‡— 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    r t          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_collect‡  sd   € Ý�w‘”ð 	ð 	ˆAÝ�9‰~Œ~ Ò"Ð"Ø��ÝŒJ‰LŒLˆLÝ�#‰JŒJˆJˆJÝ�9‰~Œ~ Ò"Ð"Ð"Ð"Ð"Ð"r   é*   r^   r_   rD   rH   c                 ó,  — t          j        d¦  «        }t          t          ¦  «        5  |                      |¦  «         d d d ¦  «         n# 1 swxY w Y   |                      ||¦  «         |                      |¦  «        |k    sJ ‚t          |¦  «        S )Nrv  )r   r·   r   ÚKeyErrorr@  rô   r6  )Úmr¨   r^   s      r   Úget_set_get_collectz4test_weak_array_key_map.<locals>.get_set_get_collect®  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¨   rz  ry  s     €€r   rª   z+test_weak_array_key_map.<locals>.<listcomp>¶  s'   ø€ ÐEÐEÐE°AÐ)Ð)¨!¨QÑ/Ô/ÐEÐEÐEr   r=  ÚCPythoni�  )r„   )r   r·   r   rô   r@  rq  rr  rø   Ú_datar   rx  r¦   r  Úpython_implementationr   )ru  r^   r_   rH   Ú
unique_idsÚmax_len_unique_idsrz  ry  s         @@r   Útest_weak_array_key_mapr�  …  s^  øø€ ð#ð #ð #ð #õ 	Œ�‰Œ€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õ %4Ð<˜S˜S¸ÐÝ�:‰ŒÐ!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)ry  s    r   Ú#test_weak_array_key_map_no_picklingr†  Á  s�   € ÝÑÔ€AÝ	•Ô$Ñ	%Ô	%ð ð ÝŒ�Q‰Œˆðð ð ñ ô ð ð ð ð ð ð ð øøøð ð ð ð ð ð s   ¨A
Á
AÁAc                 óR  ‡‡‡— t          |                      d¦  «        ¦  «        Št          j        dd¬¦  «        }|                     ‰¦  «         ˆfd„Šd„ Š ‰¦   «         } t          d¬¦  «        ˆfd	„|fD ¦   «         ¦  «        } t          d¬¦  «        ˆfd
„|fD ¦   «         ¦  «        }t          j                             ||¦  «          t          d¬¦  «        ˆfd„t          d¦  «        D ¦   «         ¦  «        }t          j                             |d         |¦  «         d S )Nzarr.datrF   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   )ÚaccessrB   r®   )r8   r]   rB   )Úopenr‘   ÚfilenoÚACCESS_READr   rZ   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 ©Nr2   r   ©rK   s    r   rg  ztest_direct_mmap.<locals>.funcÓ  ó   € Ø�!‰tˆr   r2   ©rÚ   c              3   óH   •K  — | ]} t          ‰¦  «        |¦  «        V — Œd S r!   rk  ©r§   rK   rg  s     €r   rà   z#test_direct_mmap.<locals>.<genexpr>Ù  ó3   øè è € Ð;Ð;°!˜]�W T™]œ]¨1Ñ-Ô-Ð;Ð;Ð;Ð;Ð;Ð;r   c              3   óH   •K  — | ]} t          ‰¦  «        |¦  «        V — Œd S r!   rk  r—  s     €r   rà   z#test_direct_mmap.<locals>.<genexpr>Ü  ó3   øè è € Ð AÐ A°a ¥¨¡¤¨qÑ!1Ô!1Ð AÐ AÐ AÐ AÐ AÐ Ar   c              3   óF   •K  — | ]} t          ‰¦  «        ¦   «         V — Œd S r!   rk  ©r§   rÕ   r�  s     €r   rà   z#test_direct_mmap.<locals>.<genexpr>à  ó4   øè è € Ð JÐ J¸AÐ!5¥¨Ñ!5Ô!5Ñ!7Ô!7Ð JÐ JÐ JÐ JÐ JÐ Jr   rD   r   )	ÚstrrP   r   rT   Útofiler   r)   r*   r¦   ©r[   r^   re  Úrefr'  r�  rg  r�  s        @@@r   Útest_direct_mmapr¢  Ç  sW  øøø€ õ �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Ð Ñ Ô Ð JÐ JÐ JÐ JÅÀqÁÄÐ JÑ JÔ JÑJÔJ€GÝ„J×!Ò! '¨!¤*¨cÑ2Ô2Ð2Ð2Ð2r   c                 ó¤  ‡‡‡— t          |                      d¦  «        ¦  «        Št          j        dd¬¦  «                             dd¦  «        }|                     ‰¦  «         ˆfd„Šd„ Š ‰¦   «         } t          d¬	¦  «        ˆfd
„|fD ¦   «         ¦  «        } t          d¬	¦  «        ˆfd„|fD ¦   «         ¦  «        }|d         j        d         rJ ‚t          j         	                    ||¦  «          t          d¬	¦  «        ˆfd„t          d¦  «        D ¦   «         ¦  «        }t          j         	                    |d         |¦  «         d S )Nzarr2.datrF   r‹   r;   r=   r2   c                  óX   •— t          j        ‰¦  «        } |                      dd¦  «        S )Nr=   r2   )r   rR   rV   )rŽ  r�  s    €r   r�  z=test_parallel_memmap2d_as_memmap_1d_base.<locals>._read_arrayí  s&   ø€ ÝŒY�xÑ Ô ˆØ�zŠz˜!˜QÑÔÐr   c                 ó   — | dz  S r’  r   r“  s    r   rg  z6test_parallel_memmap2d_as_memmap_1d_base.<locals>.funcñ  r”  r   r•  c              3   óH   •K  — | ]} t          ‰¦  «        |¦  «        V — Œd S r!   rk  r—  s     €r   rà   z;test_parallel_memmap2d_as_memmap_1d_base.<locals>.<genexpr>÷  r˜  r   c              3   óH   •K  — | ]} t          ‰¦  «        |¦  «        V — Œd S r!   rk  r—  s     €r   rà   z;test_parallel_memmap2d_as_memmap_1d_base.<locals>.<genexpr>ú  rš  r   r   ÚF_CONTIGUOUSc              3   óF   •K  — | ]} t          ‰¦  «        ¦   «         V — Œd S r!   rk  rœ  s     €r   rà   z;test_parallel_memmap2d_as_memmap_1d_base.<locals>.<genexpr>ÿ  r�  r   rD   )rž  rP   r   rT   rV   rŸ  r   Úflagsr)   r*   r¦   r   s        @@@r   Ú(test_parallel_memmap2d_as_memmap_1d_baser«  ä  sz  øøø€ õ
 �6—;’;˜zÑ*Ô*Ñ+Ô+€HÝ
Œ	�"˜GÐ$Ñ$Ô$×,Ò,¨Q°Ñ2Ô2€AØ‡H‚HˆXÑÔÐð ð  ð  ð  ð  ðð ð ð ˆ+‰-Œ-€Cð �(˜!Ð
Ñ
Ô
Ð;Ð;Ð;Ð;¸°sÐ;Ñ;Ô;Ñ
;Ô
;€Cð !�h˜aÐ Ñ Ô Ð AÐ AÐ AÐ A¸C¸5Ð AÑ AÔ AÑAÔA€GØ�qŒzÔ Ô/Ð/Ð/Ð/Ý„J×!Ò! '¨3Ñ/Ô/Ð/ð !�h˜aÐ Ñ Ô Ð JÐ JÐ JÐ JÅÀqÁÄÐ JÑ JÔ JÑJÔJ€GÝ„J×!Ò! '¨!¤*¨aÑ0Ô0Ð0Ð0Ð0r   )Xr   rq  Ú	itertoolsr‘   r¸   rƒ  r  rt   rv   rõ   Útimer   r  r[  r]  r4  r   r   r   r   r   r	   Újoblib.backportsr
   Újoblib.executorr   ÚTestExecutorÚjoblib.parallelr   r   Újoblib.poolr   Újoblib.test.commonr   r   r   r   r   Újoblib.testingr   r   r   r   r#   r&   r0   r3   rk   r‚   r‰   r—   Úget_memmapping_executorr¿   rÃ   rÊ   rÖ   rç   rì   rý   r  r  r
  r  r(  ÚparamÚmarkr  r.  r1  r9  r;  rB  rE  rG  rJ  ÚlistÚproductr¦   r¶   rž  rQ  rX  ra  rn  r�  r†  r¢  r«  r   r   r   ú<module>rº     s2
  ðØ Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€à (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð )Ð (Ð (Ð (Ð (Ð (Ø FÐ FÐ FÐ FÐ FÐ FØ -Ð -Ð -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð ð ð 7Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6ð>ð >ð >ð/ð /ð /ðð ð ð
<ð <ð <ð@ð @ð @ð ØðS-ð S-ñ Ôñ „ðS-ðl ØØ€Ø„L�GÒÐ$Xðñ ô ð*ð *ñô ñ Ôñ „ð
*ðZ Øð)+ð )+ñ Ôñ „ð)+ðX ðCð Cñ „ðCðD ØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
0ð 0ñô ñ Ôñ „ð0ðf ØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
$ð $ñô ñ Ôñ „ð$ðN ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ðCð Cñ 5Ô4ñ Ôñ „ðCðB ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð*.ð *.ñ 5Ô4ñ Ôñ „ð*.ðZ ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð
Fð 
Fñ 5Ô4ñ Ôñ „ð
Fð ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ðFð Fñ 5Ô4ñ Ôñ „ðFð Øð!4ð !4ñ Ôñ „ð!4ðH ØðF<ð F<ñ Ôñ „ðF<ðR ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð%*ð %*ñ 5Ô4ñ Ôñ „ð%*ðP ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð/ð /ñ 5Ô4ñ Ôñ „ð/ð ØØ€ˆYÐ*¨FÐ3Ñ4Ô4ð2.ð 2.ñ 5Ô4ñ Ôñ „ð2.ðj ØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
1ð 1ñô ñ Ôñ „ð1ðh ØØ€ØàˆŒØØ”+×#Ò#ØEð $ñ ô ð	
ñ 	
ô 	
ð 	ðñô ðK(ð K(ñô ñ Ôñ „ðK(ð\ ØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
ð ñô ñ Ôñ „ðð, ØØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
.6ð .6ñô ñ „ñ Ôñ „ð.6ðb ØØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
6ð 6ñô ñ „ñ Ôñ „ð6ð0 ØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
ð ñô ñ Ôñ „ðð,ð ð ð ØØ€ØØ�\Ô9Ð:Ø	˜FÐ#ðñ ô ð
ð ñô ñ Ôñ „ðð0ð ð ð ØØ€ØØ€DØˆ	ÔØ˜\ÔAÐBÀEÀEÈ!ÁHÄHñ	
ô 	
ñô ð
	ð 	à%�IÔ%Ð'8¸&Ð&AÀ3À3ÀsÈEÈEÐRSÉHÌHÑCUÔCUÑVÔVð	ñ 	ô 	ðñ ô ðð ñô ñ Ôñ „ðð$	2ð 	2ð 	2ð2ð 2ð 2ð$ Ø€Ø„L�GÒÐ$Wðñ ô ð €ˆ[˜4 ˜,Ñ'Ô'ð.ð .ñ (Ô'ñô ñ „ð
.ð ð84ð 84ñ „ð84ðvð ð ð Øð3ð 3ñ Ôñ „ð3ð6 Øð1ð 1ñ Ôñ „ð1ð 1ð 1r   