o
    /ifL                     @  s   d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	m
Z
 d dlZd dlmZ d dlmZ d dlmZ eeZdd	d
Zdd ZG dd dejZe	G dd dZdS )    )annotationsN)	dataclassfield)tqdm)MaxRetriesExceeded)	RunConfigargsthreading.ExceptHookArgsc                 C  s   | j N)exc_type)r    r   G/var/www/html/corbot_env/lib/python3.10/site-packages/ragas/executor.pyrunner_exception_hook   s   r   c                   sz   t jd d dk rd| ini }|dkrtj|fi |S tj|fi |fdd  fdd|D }tj|fi |S )	N   )   
   loopc              	     sH    4 I d H  | I d H W  d   I d H  S 1 I d H sw   Y  d S r
   r   )coro)	semaphorer   r   	sema_coro#   s   0zas_completed.<locals>.sema_coroc                   s   g | ]} |qS r   r   ).0c)r   r   r   
<listcomp>'       z as_completed.<locals>.<listcomp>)sysversion_infoasyncioas_completed	Semaphore)r   corosmax_workersloop_arg_dict
sema_corosr   )r   r   r   r      s   r   c                      s8   e Zd Z			dd fddZdddZdd Z  ZS )RunnerTNjobs!t.List[t.Tuple[t.Coroutine, str]]descstrkeep_progress_barboolraise_exceptions
run_configt.Optional[RunConfig]c                   s^   t    || _|| _|| _|| _|pt | _t	 | _
t| j
dd | jD | jjd| _d S )Nc                 S  s   g | ]\}}|qS r   r   )r   r   _r   r   r   r   ?   r   z#Runner.__init__.<locals>.<listcomp>)r   r    r!   )super__init__r%   r'   r)   r+   r   r,   r   new_event_loopr   r   r!   futures)selfr%   r'   r)   r+   r,   	__class__r   r   r0   ,   s   

zRunner.__init__returnt.List[t.Any]c                   s   g }t | j| jt| j| jdD ]L}dtjf}z|I d H }W n8 ty: } zt	
d|j  W Y d }~n"d }~w tyW } z| jrF|t	jddd W Y d }~nd }~ww || q|S )N)r'   totalleaver   zmax retries exceeded for z&Runner in Executor raised an exceptionT)exc_info)r   r2   r'   lenr%   r)   npnanr   loggerwarning	evolution	Exceptionr+   errorappend)r3   resultsfuturerer   r   r   	_aresultsC   s0   

zRunner._aresultsc                 C  s>   g }z| j |  }W || _| j   d S || _| j   w r
   )r   run_until_completerH   rD   stop)r3   rD   r   r   r   run\   s   z
Runner.run)TTN)
r%   r&   r'   r(   r)   r*   r+   r*   r,   r-   r6   r7   )__name__
__module____qualname__r0   rH   rK   __classcell__r   r   r4   r   r$   +   s    
r$   c                   @  s~   e Zd ZU dZded< dZded< eeddZd	ed
< dZ	ded< ee
ddZded< dddZdddddZdddZdS )Executor
Evaluatingr(   r'   Tr*   r)   F)default_factoryreprr7   r%   r+   r-   r,   callable
t.Callablec                   s    fdd}|S )Nc                    s    | i |I d H fS r
   r   )r   kwargsrU   counterr   r   wrapped_callable_asyncn   s   zAExecutor.wrap_callable_with_index.<locals>.wrapped_callable_asyncr   )r3   rU   rY   rZ   r   rX   r   wrap_callable_with_indexm   s   z!Executor.wrap_callable_with_indexN)namer\   t.Optional[str]c                O  s0   |  |t| j}| j||i ||f d S r
   )r[   r;   r%   rC   )r3   rU   r\   r   rW   callable_with_indexr   r   r   submits   s   zExecutor.submitr6   c                 C  sz   t | j| j| j| j| jd}|  z|  W nw |jd u r-| jr&t	dt
d g S t|jdd d}dd |D S )	N)r%   r'   r)   r+   r,   zCExecutor failed to complete. Please check logs above for full info.z5Executor failed to complete. Please check logs above.c                 S  s   | d S )Nr   r   )xr   r   r   <lambda>   s    z"Executor.results.<locals>.<lambda>)keyc                 S  s   g | ]}|d  qS )   r   )r   rF   r   r   r   r      r   z$Executor.results.<locals>.<listcomp>)r$   r%   r'   r)   r+   r,   startjoinrD   RuntimeErrorr>   rB   sorted)r3   executor_jobsorted_resultsr   r   r   rD   y   s(   


zExecutor.results)rU   rV   )rU   rV   r\   r]   rL   )rM   rN   rO   r'   __annotations__r)   r   listr%   r+   r   r,   r[   r_   rD   r   r   r   r   rQ   e   s   
 
rQ   )r   r	   )
__future__r   r   loggingr   	threadingtypingtdataclassesr   r   numpyr<   	tqdm.autor   ragas.exceptionsr   ragas.run_configr   	getLoggerrM   r>   r   r   Threadr$   rQ   r   r   r   r   <module>   s"    

: