§
    OŠtjy&  ã            
       óÆ   — d Z ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
 dd	giZg d
¢Z G d„ d¦  «        Zedd„¦   «         Zd„ Zd„ Zddddedddddœ	d„Zd„ Zd„ Zddœd„ZdS )z,
Thin wrappers around `concurrent.futures`.
é    N)Úcontextmanager©Úlength_hinté   )Útqdm)ÚTqdmWarningzgithub.com/Ú	casperdcl)Ú
thread_mapÚprocess_mapÚinterpreter_mapc                   óJ   — e Zd ZdZddlmZ ddlmZ d„ Z	dd„Z
d	„ Zd
„ Zd„ ZdS )Ú_InterpreterLockz3Reentrant lock backed by a cross-interpreter queue.r   )Ú	get_ident)Ú	monotonicc                 óZ   — ddl m} || _         |¦   «         | _        d | _        d| _        d S )Nr   )ÚRLock)Ú	threadingr   Ú_queueÚ_lockÚ_ownerÚ_depth)ÚselfÚqueuer   s      úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/tqdm/contrib/concurrent.pyÚ__init__z_InterpreterLock.__init__   s:   € Ø#Ð#Ð#Ð#Ð#Ð#ØˆŒØ�U‘W”WˆŒ
ØˆŒØˆŒˆˆó    Téÿÿÿÿc                 óx  — ddl m} |                      ¦   «         }|dk    r| j                             |¦  «        }n| j                             ||¦  «        }|sdS | j        r| xj        dz  c_        dS 	 |s| j                             ¦   «          nc|dk    r| j                             ¦   «          nCt          d||                      ¦   «         |z
  z
  ¦  «        }| j                             |¬¦  «         n%# |$ r | j         
                    ¦   «          Y dS w xY w|                      ¦   «         | _        d| _        dS )Nr   )ÚEmptyr   Fé   T)Útimeout)r   r   Ú_timer   Úacquirer   r   Ú
get_nowaitÚgetÚmaxÚreleaser   r   )r   Úblockingr!   r   ÚstartÚacquiredÚ	remainings          r   r#   z_InterpreterLock.acquire   sS  € ØÐÐÐÐÐØ—
’
‘”ˆØ�bŠ=ˆ=Ø”z×)Ò)¨(Ñ3Ô3ˆHˆHà”z×)Ò)¨(°GÑ<Ô<ˆHØð 	Ø�5ØŒ;ð 	ØˆKŒK˜1ÑˆKŒKØ�4ð
	Øð 3Ø”×&Ò&Ñ(Ô(Ð(Ð(Ø˜B’�Ø”—’Ñ!Ô!Ð!Ð!å  7¨d¯jªj©l¬l¸UÑ.BÑ#CÑDÔD�	Ø”—’¨	�Ñ2Ô2Ð2øøØð 	ð 	ð 	ØŒJ×ÒÑ Ô Ð Ø�5�5ð	øøøð —n’nÑ&Ô&ˆŒØˆŒØˆts   Á5A?C5 Ã5DÄDc                 ó   — | j         |                      ¦   «         k    rt          d¦  «        ‚| xj        dz  c_        | j        s!d | _         | j                             d ¦  «         | j                             ¦   «          d S )Nzcannot release un-acquired lockr    )r   r   ÚRuntimeErrorr   r   Úputr   r'   ©r   s    r   r'   z_InterpreterLock.release6   sw   € ØŒ;˜$Ÿ.š.Ñ*Ô*Ò*Ð*ÝÐ@ÑAÔAÐAØˆŒ�qÑˆŒØŒ{ð 	"ØˆDŒKØŒK�OŠO˜DÑ!Ô!Ð!ØŒ
×ÒÑÔÐÐÐr   c                 ó.   — |                       ¦   «          | S ©N)r#   r/   s    r   Ú	__enter__z_InterpreterLock.__enter__?   s   € Ø�Š‰ŒˆØˆr   c                 ó.   — |                       ¦   «          d S r1   )r'   )r   Úexcs     r   Ú__exit__z_InterpreterLock.__exit__C   s   € Ø�Š‰Œˆˆˆr   N)Tr   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   Útimer   r"   r   r#   r'   r2   r5   © r   r   r   r      sŽ   € € € € € Ø=Ð=Ø#Ð#Ð#Ð#Ð#Ð#Ø'Ð'Ð'Ð'Ð'Ð'ðð ð ðð ð ð ð6ð ð ðð ð ðð ð ð ð r   r   Ú c              #   óæ   K  — t          | dd¦  «        }|€|p|                      ¦   «         }t          |||¦  «        }|                      |¦  «         |V — |€| `dS |                      |¦  «         dS )z>get (create if necessary) and then restore `tqdm_class`'s lockr   N)ÚgetattrÚget_lockÚset_lockr   )Ú
tqdm_classÚ	lock_nameÚlockÚold_locks       r   Úensure_lockrE   G   sŽ   è è € õ �z 7¨DÑ1Ô1€HØ€|ØÐ0˜:×.Ò.Ñ0Ô0ˆÝ�4˜ DÑ)Ô)€DØ×Ò˜ÑÔÐØ
€J€J€JØÐØÐÐÐà×Ò˜HÑ%Ô%Ð%Ð%Ð%r   c           	      ó‚   — dt           j        ›d| j        ›d| j                             d¦  «        ›d|›d�	}t
          |ffS )zGReturn an initializer which bootstraps the parent import path and lock.zimport sys
sys.path[:] = z™
from concurrent import interpreters
from importlib import import_module
from tqdm.contrib.concurrent import _InterpreterLock
tqdm_class = import_module(z)
for name in ú.z…:
    tqdm_class = getattr(tqdm_class, name)
tqdm_class.monitor_interval = 0
tqdm_class.set_lock(_InterpreterLock(interpreters.Queue(z))))ÚsysÚpathr7   r8   ÚsplitÚexec)rA   Úlock_queue_idÚcodes      r   Ú_get_interpreter_initrN   V   s{   € ð		XÝœð		Xð 		Xð
 '1Ô&;ð		Xð 		Xð "Ô.×4Ò4°SÑ9Ô9ð		Xð 		Xð DQð		Xð 		Xð 		Xð 	õ �$�ˆ=Ðr   c                 ó:   ‡— t          ˆfd„| D ¦   «         ¦  «        S )z min(map(length_hint, iterables))c              3   óH   •K  — | ]}t          |d ¦  «        xŠdk    ¯‰V — ŒdS )r   r   Nr   )Ú.0ÚitÚns     €r   ú	<genexpr>z_min_map_len.<locals>.<genexpr>h   s<   øè è € ÐHÐH�R­k¸"¸bÑ.AÔ.AÐ)A¨ÀaÒ(GÐ(GˆqÐ(GÐ(GÐ(GÐ(GÐHÐHr   )Úmin)Ú	iterablesrS   s    @r   Ú_min_map_lenrW   f   s&   ø€ åÐHÐHÐHÐH˜9ÐHÑHÔHÑHÔHÐHr   r    g        )	Úmax_workersr!   Ú	chunksizerB   rA   Ú	smoothingr   Ú_initializerÚ	_initargsc       	         óD  ‡‡— |                      ¦   «         }d|vrt          |¦  «        |d<   i }d|v r|                     d¦  «        |d<   i }dD ]}||v r|                     |¦  «        ||<   Œd}|d         rTd|vrP	 ddlm} n# t
          $ r	 ddlm} Y nw xY w|pt          d	 |¦   «         pd
dz   ¦  «        }|d         |k    r||d<   d}t          |||¬¦  «        5 }|	€
|j	        }	|f}
 | d||	|
dœ|¤Ž5 } |dd|i|¤Ž5 Š|�d‰_
        |j        Šˆˆfd„}||_        t           |j        |g|¢R ||dœ|¤Ž¦  «        cddd¦  «         cddd¦  «         cddd¦  «         S # 1 swxY w Y   	 ddd¦  «         n# 1 swxY w Y   ddd¦  «         dS # 1 swxY w Y   dS )a  
    Implementation of `thread_map`, `process_map` and `interpreter_map`.

    Parameters
    ----------
    max_workers  : int
    timeout  : int
    buffersize  : int
        Requires Python>=3.14.
    thread_name_prefix  : str
    max_tasks_per_child  : int
    mp_context  : str
    ÚtotalÚ
buffersize)Úthread_name_prefixÚmax_tasks_per_childÚ
mp_contextNÚminitersr   )Úprocess_cpu_count)Ú	cpu_counté    r    é   T)rB   rC   )rX   ÚinitializerÚinitargsrZ   c                  óH   •—  ‰| i |¤Ž}|                      ˆfd„¦  «         |S )Nc                 ó,   •— ‰                      ¦   «         S r1   )Úupdate)Ú_Úpbars    €r   ú<lambda>z4_executor_map.<locals>.patchsubmit.<locals>.<lambda>    s   ø€ °D·K²K±M´M€ r   )Úadd_done_callback)ÚargsÚkwargsÚfutÚ	orisubmitrn   s      €€r   Úpatchsubmitz"_executor_map.<locals>.patchsubmitž   s:   ø€ Ø#˜) TÐ4¨VÐ4Ð4�CØ×)Ò)Ð*AÐ*AÐ*AÐ*AÑBÔBÐBØ�Jr   )r!   rY   r;   )ÚcopyrW   ÚpopÚosrd   ÚImportErrorre   rU   rE   r@   Údynamic_minitersÚsubmitÚlistÚmap)ÚPoolExecutorÚfnrX   r!   rY   rB   rA   rZ   r   r[   r\   rV   Útqdm_kwargsrr   Ú
map_kwargsÚpool_kwargsÚkrz   re   Ú	rough_maxÚlkÚexru   rt   rn   s                          @@r   Ú_executor_mapr‡   k   sÊ  øø€ ð$ ×ÒÑÔ€FØ�fÐÐÝ& yÑ1Ô1ˆˆw‰Ø€JØ�vÐÐØ#)§:¢:¨lÑ#;Ô#;ˆ
�<Ñ Ø€KØHð +ð +ˆØ�ˆ;ˆ;Ø#ŸZšZ¨™]œ]ˆK˜‰NøØÐØˆg„ð 	$˜:¨VÐ3Ð3ð	%Ø9Ð9Ð9Ð9Ð9Ð9Ð9øÝð 	%ð 	%ð 	%Ø$Ð$Ð$Ð$Ð$Ð$Ð$Ð$ð	%øøøð  ÐB¥3 r¨I¨I©K¬KÐ,<¸1ÀÑ+AÑ#BÔ#Bˆ	Ø�'Œ?˜YÒ&Ð&Ø!*ˆF�:ÑØ#ÐÝ	�Z¨9¸5Ð	AÑ	AÔ	Að YÀRàÐØ%Ô.ˆLØ˜ˆIØˆ\ð ) k¸|ÐV_ð )ð )Ø'ð)ð )ð 	YØ,.Ø�Ð:Ð: iÐ:°6Ð:Ð:ð Y¸dØ#Ð/Ø,0�DÔ)ØœI�	ðð ð ð ð ð ð (�”	Ý˜F˜BœFØðXØ"ðXð XØ,3¸yðXð XØLVðXð Xñ Yô YðYð Yð Yð Yñ Yô Yð Yð	Yð 	Yð 	Yð 	Yñ 	Yô 	Yð 	YðYð Yð Yð Yñ Yô Yð Yð YðYð Yð Yð Yøøøð Yð Yð Yð Yð Yð	Yð 	Yð 	Yñ 	Yô 	Yð 	Yð 	Yð 	Yð 	Yð 	Yð 	Yøøøð 	Yð 	Yð 	Yð 	YðYð Yð Yñ Yô Yð Yð Yð Yð Yð Yð Yð Yøøøð Yð Yð Yð Yð Yð Ysr   Á=B ÂBÂBÃFÃ7E=Ä>E%Å E=ÅFÅ%E)Å)E=Å,E)Å-E=Å1FÅ=F	ÆFÆF	ÆFÆFÆFc                 ó0   — ddl m} t          || g|¢R i |¤ŽS )a°  
    Equivalent of `list(map(fn, *iterables))`
    driven by `concurrent.futures.ThreadPoolExecutor`.

    Parameters
    ----------
    max_workers  : int, optional
        Maximum number of workers to spawn; passed to `concurrent.futures.ThreadPoolExecutor`.
    thread_name_prefix  : str, optional
        Passed to `concurrent.futures.ThreadPoolExecutor` [default: ''].
    timeout  : int or float, optional
        Seconds to wait before raising `TimeoutError` if `__next__` is called and the
        result isn't available. [default: None].
    buffersize  : int, optional
        Requires Python>=3.14 [default: None].
    tqdm_class  : optional
        `tqdm` class to use for bars [default: tqdm.auto.tqdm].
    smoothing  : float, optional
        Passed to `tqdm_class`; the [default: 0] is average (due to erratic update frequency).
    lock_name  : str, optional
        Member of `tqdm_class.get_lock()` to use [default: ''].
    r   )ÚThreadPoolExecutor)Úconcurrent.futuresr‰   r‡   )r   rV   r€   r‰   s       r   r
   r
   §   s7   € ð. 6Ð5Ð5Ð5Ð5Ð5ÝÐ+¨RÐK°)ÐKÐKÐK¸{ÐKÐKÐKr   c                 ó  — ddl m} ddlm} |                     ¦   «         }|                     d¦  «         |                     dt          ¦  «        }t          ||j	        ¦  «        \  }}t          || g|¢R t          |¦  «        ||dœ|¤ŽS )aj  
    Equivalent of `list(map(fn, *iterables))`
    driven by `concurrent.futures.InterpreterPoolExecutor` (Python 3.14+).

    Parameters
    ----------
    Same as `thread_map`.

    Notes
    -----
    `fn`, its arguments, and its return values must be pickleable.
    Worker progress bars using the same `tqdm_class` share a cross-interpreter write lock.
    r   )Úinterpreters)ÚInterpreterPoolExecutorNrA   )r   r[   r\   )Ú
concurrentrŒ   rŠ   r�   Úcreate_queuer.   r%   Ú	tqdm_autorN   Úidr‡   r   )	r   rV   r€   rŒ   r�   Ú
lock_queuerA   rh   ri   s	            r   r   r   Â   sÂ   € ð (Ð'Ð'Ð'Ð'Ð'Ø:Ð:Ð:Ð:Ð:Ð:Ø×*Ò*Ñ,Ô,€JØ‡N‚N�4ÑÔÐØ—’ ­yÑ9Ô9€JÝ1°*¸j¼mÑLÔLÑ€K�ÝØ ðEØ&/ðEð EÝ7GÈ
Ñ7SÔ7SØ ¨HðEð Eà8CðEð Eð Er   Úmp_lock)rB   c                ó¢   — ddl m} |r5d|vr1t          |¦  «        }|dk    rddlm}  |d|z  t
          d¬¦  «         t          || g|¢R d	|i|¤ŽS )
aI  
    Equivalent of `list(map(fn, *iterables))`
    driven by `concurrent.futures.ProcessPoolExecutor`.

    Parameters
    ----------
    max_workers  : int, optional
        Maximum number of workers to spawn; passed to `concurrent.futures.ProcessPoolExecutor`.
    timeout  : int or float, optional
        Seconds to wait before raising `TimeoutError` if `__next__` is called and the
        result isn't available. [default: None].
    chunksize  : int, optional
        Approximate size of chunks sent to worker processes; passed to
        `concurrent.futures.ProcessPoolExecutor.map`. [default: 1].
    buffersize  : int, optional
        Requires Python>=3.14 [default: None].
    max_tasks_per_child  : int, optional
        Maximum number of tasks a worker process can complete before being replaced
        with a new process; passed to `concurrent.futures.ProcessPoolExecutor`.
    mp_context  : multiprocessing.BaseContext, optional
        Multiprocessing context to use, e.g. `multiprocessing.get_context('fork')`.
    lock_name  : str, optional
        Member of `tqdm_class.get_lock()` to use [default: mp_lock].
    tqdm_class  : optional
        `tqdm` class to use for bars [default: tqdm.auto.tqdm].
    smoothing  : float, optional
        Passed to `tqdm_class`; the [default: 0] is average (due to erratic update frequency).
    r   )ÚProcessPoolExecutorrY   iè  )Úwarnz…Iterable length %d > 1000 but `chunksize` is not set. This may seriously degrade multiprocess performance. Set `chunksize=1` or more.r   )Ú
stacklevelrB   )rŠ   r•   rW   Úwarningsr–   r   r‡   )r   rB   rV   r€   r•   Úshortest_iterable_lenr–   s          r   r   r   Û   s¬   € ð: 7Ð6Ð6Ð6Ð6Ð6Øð 	,�[¨Ð3Ð3õ !-¨YÑ 7Ô 7ÐØ  4Ò'Ð'Ø%Ð%Ð%Ð%Ð%Ð%ØˆDð /à1FñGõ ¨ð,ñ ,ô ,ð ,õ Ð,¨bÐa°9ÐaÐaÐaÈ	ÐaÐU`ÐaÐaÐar   )r<   N)r9   rH   Ú
contextlibr   Úoperatorr   Úautor   r�   Ústdr   Ú
__author__Ú__all__r   rE   rN   rW   r‡   r
   r   r   r;   r   r   ú<module>r       sm  ððð ð €
€
€
Ø %Ð %Ð %Ð %Ð %Ð %Ø  Ð  Ð  Ð  Ð  Ð  à $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð à˜k˜]Ð+€
Ø
:Ð
:Ð
:€ð5ð 5ð 5ð 5ð 5ñ 5ô 5ð 5ðp ð&ð &ð &ñ „ð&ðð ð ð Ið Ið Ið /3¸DÈAÐY[Ø C¨tÀ$ÐRVð9Yð 9Yð 9Yð 9Yð 9YðxLð Lð Lð6Eð Eð Eð2 +4ð (bð (bð (bð (bð (bð (bð (br   