
    ^(j2                         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mZmZmZmZ  G d d      Z G d d      Zdded	efd
Zy)    N)Enum)Optional
get_originget_argsget_type_hintsc                   2    e Zd ZdZd Zd Zdedee   fdZy)TypeTrackerzOTracks types discovered during stub generation for automatic import generation.c                 B    i | _         h d| _        t               | _        y )N>   AnySetintsetstrDictListNoneboolcastdictlisttypeTupleUnionbytesfloattupleobjectr   Sequence
NamedTuple)discovered_typesbuiltin_typesr   already_imported)selfs    J/Users/danicosta/Desktop/Flux2/ComfyUI/comfy_api/internal/async_to_sync.py__init__zTypeTracker.__init__   s#     "
2 E 	    c                    ||t        d      u ryt        |dd      }|r|| j                  v s|| j                  v ryt        |dd      }t        |d|xs d      }|dk(  ry|dk(  r|dv ry|r|d	vr|r||f| j                  |<   yyyy)
z:Track a type annotation and record its module/import info.N__name__
__module____qualname__ typingtypes)	UnionTypeGenericAlias)builtins__main__)r   getattrr!   r"   r    )r#   
annotation	type_namemodulequalnames        r$   
track_typezTypeTracker.track_type/   s    tDz!9 J
D9	+++yD<Q<Q/Q \48:~yBG X W.K!Kf$<<4:H3E%%i0  =6r&   main_module_namereturnc                    g }i }t        | j                  j                               D ]5  \  }\  }}|r||k(  r||vrg ||<   |||   vs"||   j                  |       7 t        |j                               D ]f  \  }}t	        |      dk(  r|j                  d| d|d           /|j                  d| ddj                  t        t        |                          h |S )z4Generate import statements for all discovered types.   from  import r   , )sortedr    itemsappendlenjoinr   )r#   r8   importsimports_by_moduler4   r5   r6   r-   s           r$   get_importszTypeTracker.get_importsL   s    -3D4I4I4O4O4Q-R)I)F.>$>..,.!&) 1& 99!&)00; .S $$5$;$;$=>MFE5zQvhhuQxjABvhhtyyE
AS7T6UVW	 ? r&   N)	r(   r)   r*   __doc__r%   r7   r   r   rF    r&   r$   r	   r	      s'    Y
<F:C DI r&   r	   c                      e Zd ZU dZdZeej                  j                     e	d<    e
j                         ZdZed!dej                  j                  fd       Zed        Zed"dedefd	       Ze	 d!d
ee   defd       Zed        Zedefd       Ze	 	 	 d#dej2                  dedee   d
ee   def
d       Ze	 	 d$deded
ee   defd       Zeded
edee   fd       Zededee eef      fd       Z!e	 	 d%dededed
ee   dee   f
d       Z"e	 d&dededee   fd       Z#edee   dee   fd       Z$edededdfd        Z%y)'AsyncToSyncConverterz]
    Provides utilities to convert async classes to sync classes with proper type hints.
    N_thread_poolFr9   c                 @   | j                   r| j                  J d       | j                  S | j                  5  | j                   s-t        j                  j                  |d      | _        d| _         ddd       | j                  J | j                  S # 1 sw Y   #xY w)zLGet or create the shared thread pool with proper thread-safe initialization.Nz!Thread pool should be initializedasync_to_sync_)max_workersthread_name_prefixT)_thread_pool_initializedrK   _thread_pool_lock
concurrentfuturesThreadPoolExecutor)clsrN   s     r$   get_thread_poolz$AsyncToSyncConverter.get_thread_pooln   s     ''##/T1TT/### ""//#-#5#5#H#H +@P $I $  04, # +++ #"s   :BBc                     t        j                         dddfd}| j                         }|j                  |      }|j	                          d   d   d   S )z
        Run an async function in a separate thread from the thread pool.
        Blocks until the async function completes.
        Properly propagates contextvars between threads and manages event loops.
        N)result	exceptionc            	         t        j                         } t        j                  |        	 	fd}j                  | j                   |             }|
d<   	 t        j                  |       }|D ]  }|j                           |r$| j	                  t        j                  |ddi       | j                          t        j                  d        y # t
        $ r}|
d<   Y d }~d }~ww xY w# t
        $ r Y Lw xY w# 	 t        j                  |       }|D ]  }|j                           |r$| j	                  t        j                  |ddi       n# t
        $ r Y nw xY w| j                          t        j                  d        w xY w)Nc                  0   K     i  d {   S 7 wNrH   )args	coro_funckwargss   r$   run_with_contextzYAsyncToSyncConverter.run_async_in_thread.<locals>.run_in_thread.<locals>.run_with_context   s     !*D!;F!;;;;s   rX   rY   return_exceptionsT)
asyncionew_event_loopset_event_looprunrun_until_complete	Exception	all_taskscancelgatherclose)loopr`   rX   ependingtaskr]   contextr^   r_   result_containers         r$   run_in_threadz?AsyncToSyncConverter.run_async_in_thread.<locals>.run_in_thread   sc   ))+D""4(!-< !T%<%<>N>PQ-3 *%//5G ' !( //#NNGLtL 

 &&t,/  201 -2  ! %//5G ' !( //#NNGLtL !  

 &&t,sa   -C AC- 	C*C% C< %C**C< -	C98C9<F>AEF	EFE)FrY   rX   )contextvarscopy_contextrV   submitrX   )	rU   r^   r]   r_   rr   thread_poolfuturerp   rq   s	    ```   @@r$   run_async_in_threadz(AsyncToSyncConverter.run_async_in_thread   sw     **, -1t!D&	- &	-R ))+##M2 K(4";//))r&   async_classc                 2    d} j                  |       j                  j                  |d} fd}||d<   t        j                  t        j
                        D ]s  \  }}|j                  d      rt        j                  |      r$t        j                  |      |dd       }|||<   Qt        j                  |      |dd	       }	|	||<   u t        j                  d
       D ]  \  }}
d } |||
      ||<    t        |t        f|      }|S )a#  
        Creates a new class with synchronous versions of all async methods.

        Args:
            async_class: The async class to convert
            thread_pool_size: Size of thread pool to use

        Returns:
            A new class with sync versions of all async methods
        ComfyAPISyncStub)rG   r)   r*   __orig_class__c                 l    |i || _         	 t              }|j                         D ]_  \  }}t        | j                   |      rt        | j                   |      }t        |d      s@ddlm} t        ||      rF	 j                  |j                        }	t         j#                  |	      }
||
_         t%        | ||
       t%        | ||       t        |t&              st        |j(                        st        |j(                        }ddlm} 	 t+        ||      r|j-                         }n |       }j                  |      }	t         j#                  |	      }
||
_         t%        | ||
       t%        | j                   ||       b t	        j2                  | j                         D ]  \  }}|j5                  d      st        | |      r$t        |t               s5t        |t6        t8        t:        t<        t>        t@        tB        f      reddlm} t        ||      sx	 j                  |j                        }	t         j#                  |	      }
||
_         t%        | ||
        y # t        $ rQ i }t        t	        j
                              D ]*  }t        |d      s|j                  |j                         , Y w xY w# t        $ r t%        | ||       Y w xY w# t        $ r&}t/        j0                  d| d|        Y d }~d }~ww xY w# t        $ r t%        | ||       Y w xY w)N__annotations__	__class__r   )ProxiedSingletonzFailed to create instance for : _)"_async_instancer   rg   reversedinspectgetmrohasattrupdater~   r@   r2   comfy_api.internal.singletonr   
isinstancecreate_sync_classr   r   __new__setattrr   r(   
issubclassget_instanceloggingwarning
getmembers
startswithr   r   r   r   r   r   r   )r#   r]   r_   all_annotations
base_class	attr_name	attr_typeattrr   sync_attr_class	sync_attrinner_classasync_instancerm   namery   rU   s                  r$   r%   z8AsyncToSyncConverter.create_sync_class.<locals>.__init__   s   #.#?#?D 
K #1"= )8(=(=(?$	94//;"4#7#7CDt[1Q%d,<=?252G2G2W,2NN?,K	<@	 9 'i C $D)T: ")T2";	0B0BC*1+y?Q?Q*RKU"#-k;K#L5@5M5M5ON5@]N 362G2G2T,2NN?,K	<J	 9 'i C '(<(<i X[ )@h &001E1EF
d??3'74+> dF+J3UD$eD5 N!$(896.1.C.CDNN.SO(.(GI8<I5#D$	:% G{  K #%"*7>>++F"GJz+<='..z/I/IJ #H	K2 $- ? 'i >?< $- " '&DYKrRSQT$U!" !""2  ) 6#D$56sV   I- >AK
A5K'&AL-8K&KK
K$#K$'	L0LLL32L3r%   	predicater   )_method_namec                `    t        | j                  |      }t        j                  |g|i |S r\   )r2   r   rJ   rx   )r#   r   r]   r_   async_methods        r$   sync_methodz;AsyncToSyncConverter.create_sync_class.<locals>.sync_methodD  s:    #*4+?+?#NL/CC$'+/5 r&   c                >    t        | j                  |      } ||i |S r\   )r2   r   )r#   r   r]   r_   methods        r$   proxy_methodz<AsyncToSyncConverter.create_sync_class.<locals>.proxy_methodO  s$    $T%9%9<HF!42622r&   c                 "    t        | t              S r\   r   propertyxs    r$   <lambda>z8AsyncToSyncConverter.create_sync_class.<locals>.<lambda>Y  s    :a#:r&   c                 T      fd} fd}t        ||j                  r|      S d       S )Nc                 n    t        | j                        t        j                        rfd}|S S )Nc                  6    t        j                  g| i |S r\   )rJ   rx   )r]   r_   values     r$   sync_fnz^AsyncToSyncConverter.create_sync_class.<locals>.make_property.<locals>.getter.<locals>.sync_fna  s)    #7#K#K %$(,$06$ r&   )r2   r   r   iscoroutinefunction)r#   r   r   r   s     @r$   getterzMAsyncToSyncConverter.create_sync_class.<locals>.make_property.<locals>.getter]  s4    #D$8$8$?E2259
  ' Lr&   c                 4    t        | j                  |       y r\   )r   r   )r#   r   r   s     r$   setterzMAsyncToSyncConverter.create_sync_class.<locals>.make_property.<locals>.setteri  s    D00$>r&   )r   fset)r   prop_objr   r   s   `   r$   make_propertyz=AsyncToSyncConverter.create_sync_class.<locals>.make_property\  s*    
!?  (--JJTJJr&   )rV   rG   r)   r   r   
isfunctionr   r   	functoolswrapsr   r   )rU   ry   thread_pool_sizesync_class_namesync_class_dictr%   r   r   r   r   propr   
sync_classs   ``           r$   r   z&AsyncToSyncConverter.create_sync_class   s<    -,- #**%00+)	
[	6z '/
# $..7#5#5
LD& s# **62(:>  ) )4% (;? 3 )3
 )5%5
: ",,:
JD$K$ %2$$=OD!-
2 /F9oF
r&   type_trackerc                    |t         j                  j                  u s|t         j                  j                  u ry|t	        d      u ry|r|j                  |       	 t        |      }t        |      }||r|j                  |       t        |dt        |            }d|v r|j                  d      d   }t        |      dk(  s|dk(  rd	}|rTg }|D ]6  }|r|j                  |       |j                  | j                  ||             8 | d
dj                  |       dS |S 	 t!        |d      rt!        |d      r|j"                  }t!        |d      r|j$                  nt        |      j                  d      d   }g }|j&                  D ]#  }|j                  | j                  ||             % | d
dj                  |       dS t!        |d      r|j$                  S t!        |d      rt!        |d      r|j(                  S t        |      }|j+                  d      r|j-                  d      r|dd }dD ]"  }	|j+                  |	      s|t/        |	      d }$ |dv ry|dk(  ry|S # t        t        f$ r Y Xw xY w)zFConvert a type annotation to its string representation for stub files.r   Nr   r(   .z<class 'types.UnionType'>r.   r   [r>   ]
__origin____args__'r;   r)   r*   z<class 'z'>   )ztyping.z	builtins.ztypes.)_emptyzinspect._emptyNoneType)r   	Parameterempty	Signaturer   r7   r   r   r2   r   splitrA   _format_type_annotationrC   AttributeError	TypeErrorr   r   r(   r   r*   r   endswithrB   )
rU   r3   r   originr]   origin_nameformatted_argsargtype_strprefixs
             r$   r   z,AsyncToSyncConverter._format_type_annotationu  s    '++111W..444 d# ##J/ 	
+FJ'D! ++F3 &fj#f+F+%"-"3"3C"8"<K v;"==P[A[")K %'N#'(33C8&--c.I.I#|.\]	  $
 *]!DIIn,E+FaHH&&3 "> :|,Z1P**F 6:. [&&s+A.  D!**C77\JK + "]!DIIdO#4A66 :z*&&& :|,^1T*** z? z*x/@/@/F"~H 9F""6*#CKM2 9
 33 z!c 	* 		s   CI)  I) )I<;I<c                 l    t        |d      r't        |j                        dkD  r|j                  d   S |S )z;Extract the actual return type from a Coroutine annotation.r      )r   rB   r   )rU   r3   s     r$   _extract_coroutine_return_typez3AsyncToSyncConverter._extract_coroutine_return_type  s7     :z*s:3F3F/G!/K&&q))r&   c                     |t         j                  j                  u ry|yt        |t              rd| S |i k(  ry|g k(  ryd| S )z2Format a parameter's default value for stub files.r+   z = Nonez = z = {}z = [])r   r   r   r   r   )rU   default_values     r$   _format_parameter_defaultz.AsyncToSyncConverter._format_parameter_default  s^     G--333"t,((b b ((r&   sig	skip_self
type_hintsc                    g }|i }t        |j                  j                               D ]  \  }\  }}|dk(  r|dk(  r|r|j                  d       '|j	                  ||j
                        }	| j                  |	|      }
| j                  |j                        }|	t        j                  j                  u r|j                  | d|        |j                  | d|
 |         dj                  |      S )z(Format method parameters for stub files.r   r#   z: Anyr   r>   )	enumerate
parametersr@   rA   getr3   r   r   defaultr   r   r   rC   )rU   r   r   r   r   paramsi
param_nameparamr3   r   default_strs               r$   _format_method_parametersz.AsyncToSyncConverter._format_method_parameters  s     J&/0D0D0F&G"A"
EAv*.9f% (^^J8H8HI
66z<P ";;EMMJ !2!2!8!88MMZLk]"CDMMZL8*[M"JK 'H" yy  r&   method_nameis_asyncc                    t        j                  |      }	 ddlm}  ||      }|j                  d|j                        }|r&t        j                  |      r| j                  |      }| j                  |||      }	| j                  ||      }
|t         j                  j                  u rd}
d| d|	 d|
 d	S # t        $ r i }Y w xY w)
z4Generate a complete method signature for stub files.r   r   r9   r   r   r   def () -> : ...)r   	signaturer,   r   rg   r   return_annotationr   r   r   r   r   r   )rU   r   r   r   r   r   r   r   r   
params_strreturn_types              r$   _generate_method_signaturez/AsyncToSyncConverter._generate_method_signature  s     '	-'/J 'NN8S5J5JK33F; # B BCT U 223:\h2i
 112C\R 1 1 7 77 Kk]!J<u[MGG#  	J	s   B9 9CCc                 x   g }|j                  d       |j                  dk7  rlt        j                  |      }g }|rt	        |dd      }t        t        j                  |            D ]  \  }}t        |t              s|||vr||j                  vr,t        |t              r9t        |d      r-|j                  |       |j                  j                  |       ut        |t              s|dk7  s|j                  |       |j                  j                  |        |rAdj!                  |j"                  g|z         }	|j                  d|j                   d	|	        n+|j                  d|j                   d	|j"                          |j%                  |j'                  |j                  
             t        t        j                  |      d      r_t        j                  |      j"                  }
d|
v r<|
j)                  d      d   t+        fd|D              s|j                  d        |S )z-Generate import statements for the stub file.z[from typing import Any, Dict, List, Optional, Tuple, Union, Set, Sequence, cast, NamedTupler0   __all__N_fieldsr   r>   r<   r=   )r8   r(   r   r   c              3   F   K   | ]  }|j                  d          yw)r<   N)r   ).0impbase_modules     r$   	<genexpr>z9AsyncToSyncConverter._generate_imports.<locals>.<genexpr>q  s"     TGS3>>E+*?@Gs   !import )rA   r)   r   	getmoduler2   r?   r   r   r   r    r   r   r   r"   addr   rC   r(   extendrF   r   any)rU   ry   r   rD   r5   additional_types
module_allr   objtype_importsmodule_namer  s              @r$   _generate_importsz&AsyncToSyncConverter._generate_imports4  s   
  	i	

 !!Z/&&{3F!$VY=
!'(:(:6(B!CID#!#t, &1d*6L#<+H+HH ( &c51gc96M,33D9(99==dC'T2tv~,33D9(99==dC% "D(  #yy+*>*>)?BR)RS{'='=&>h|nUVK2238K<P<P;QR 	$$k6L6L$M	

 7$$[1:>!++K8AAKk!)//4Q7TGTTNNW[M#:;r&   c                 V   g }	 t        |      }t        t        j                  |            D ]h  \  }}t        |t              r%|j                  d      s|j                  ||f       ;||v s@||   }t        |t              sV|j                  ||f       j |S # t        $ r i }Y w xY w)z5Extract class attributes that are classes themselves.r   )	r   rg   r?   r   r   r   r   r   rA   )rU   ry   class_attributesr   r   r   r3   s          r$   _get_class_attributesz*AsyncToSyncConverter._get_class_attributesv  s     	'4J
 !!3!3K!@AJD$$%dooc.B ''t5#'-
j$/$++T:,>? B    	J	s   B B('B(r   r   indentc                    g }|j                  | d| d       t        |d      r:|j                  r.|j                  | j	                  |j                  | d             t        |d      r	 t        |d      }t        j                  |      }	 ddlm	}  ||      }	| j                  ||	|      }
t        |d      r:|j                  r.|j                  | j	                  |j                  | d             |j                  | d	|
 d
       d}t        t        j                  |t        j                               D ]  \  }}|j#                  d      rd}	 |j                  r.|j                  | j	                  |j                  | d             | j%                  ||d|      }|j                  | d|         |s|j                  | d       |S # t        $ r i }	Y Iw xY w# t        t        f$ r |j                  | d       Y w xY w# t        t        f$ r |j                  | d| d       Y w xY w)z!Generate stub for an inner class.class zSync:rG       r%   r   r   r       def __init__() -> None: ...4    def __init__(self, *args, **kwargs) -> None: ...Fr   r   Tr   r       def (self, *args, **kwargs): ...z    pass)rA   r   rG   r	  _format_docstring_for_stubr2   r   r   r,   r   rg   r   
ValueErrorr   r?   r   r   r   r   )rU   r   r   r  r   
stub_linesinit_methodinit_sigr   
init_hintsr   has_methodsr   r   
method_sigs                  r$   _generate_inner_class_stubz/AsyncToSyncConverter._generate_inner_class_stub  so    
VHF4&67 4#..t||xt_M
 4$%dJ7",,[9$5!/!<J
 !::, ; 
 ;	2{7J7J%%66'//F84
 !!h/
|>J #)tw/A/AB$
K %%c*K>>%%66v~~&QUW !;;$\ < 
 !!VHD"=>#$
. 12e ! $!#J$" 	* !!hRS2 	* !!hh{m3OPsJ   -!G* G A1G* A%HG'#G* &G''G* *#HH&H=<H=	docstringc                 F   |sg S t        j                  |      j                         }|j                  d      }g }|j	                  | d       |D ]9  }|j                         r|j	                  | |        )|j	                  d       ; |j	                  | d       |S )zHFormat a docstring for inclusion in a stub file with proper indentation.
z"""r+   )textwrapdedentstripr   rA   )rU   r'  r  dedentedlinesrX   lines          r$   r  z/AsyncToSyncConverter._format_docstring_for_stub  s    
 I ??9-335 t$ n%Dzz|/0b!	  	n%r&   stub_contentc                 (   g }|D ]  }|j                  d      r|j                  |       &|j                         j                  d      r5|j                         j                  d      rd|vr|j	                  dd      }|j                  |        |S )z6Post-process stub content to fix any remaining issues.)r<   r  r   r   r   z -> None: ...)r   rA   r,  r   replace)rU   r0  	processedr/  s       r$   _post_process_stub_contentz/AsyncToSyncConverter._post_process_stub_content  s     	 D34  & 

''/JJL))'24' ||G_=T" !" r&   r   c           	      N   	 |j                   dk(  ryt        j                  |      }|sy|j                  }|syt        j
                  j                  |      }t        j
                  j                  |d      }t	        j                  |d       t        j
                  j                  |      }|j                  d      r|dd }t        j
                  j                  ||j                   d      }t               }	g }
t        |
      }|
j                  d	       |
j                  d
|j                   d       |j                  r+|
j!                  | j#                  |j                  d             	 |j$                  }t        j&                  |      }	 ddlm}  ||      }| j/                  |||	      }t1        |d      r7|j                  r+|
j!                  | j#                  |j                  d             |
j                  d| d       |
j                  d	       | j7                  |      }|D ];  \  }}| j9                  |||	      }|
j!                  |       |
j                  d	       = t;               }t=        t        j>                  |t        j@                              D ]  \  }}|jC                  d      s||v r|jE                  |       	 | jG                  ||d|	      }|j                  r+|
j!                  | j#                  |j                  d             |
j                  d|        |
j                  d	        t=        t        j>                  |d             D ]r  \  }}|
j                  d       |
j                  d| d       |jH                  r*|
j                  d| d       |
j                  d| d       |
j                  d	       t i }	  |      }t=        |jS                               D ]K  \  }}|D ]A  \  }}||k(  s2t1        |d!      r|j                  |k(  stU        |tV              s7||k(  s=|||<   C M |D ]/  \  }}|jY                  ||      }|
j                  d| d"| d#       1 |
j                  d	       | j[                  ||	      } t;               }!g }"| D ]A  }#|#|!vr#|!jE                  |#       |"j                  |#       *t]        j^                  d$|#        C |"|
||d%z    | ja                  |
      }
tc        |d&      5 }$|$je                  d'j                  |
             ddd       t]        jf                  d(|        y# t,        $ r i }Y w xY w# t2        t4        f$ r |
j                  d       Y w xY w# t2        t4        f$ r* |
j                  d| d       |
j                  d	       Y )w xY w# t,        $ rQ i }tK        t        jL                  |            D ]*  }t1        |d       s|jO                  |jP                         , Y Ew xY w# 1 sw Y   xY w# t,        $ r_}%t]        jh                  d)|j                   d"tW        |%              ddl5}&t]        jh                  |&jm                                Y d}%~%yd}%~%ww xY w)*z_
        Generate a .pyi stub file for the sync class to help IDEs with type checking.
        r1   N	generatedT)exist_okz.pyz.pyir+   r  :r  r   r   r   rG   r  r  r  )r   r   r   r  r  r  c                 "    t        | t              S r\   r   r   s    r$   r   z9AsyncToSyncConverter.generate_stub_file.<locals>.<lambda>  s    *Q:Qr&   z    @propertyz(self) -> Any: ...z    @z.setterz(self, value: Any) -> None: ...r~   r(   r   SynczDuplicate import detected: r;   wr)  zGenerated stub file: zError generating stub file for )7r)   r   r  __file__ospathdirnamerC   makedirsbasenamer   r(   r	   rB   rA   rG   r	  r  r%   r   r,   r   rg   r   r   r  r   r  r&  r   r?   r   r   r   r  r   r   r   r   r   r~   r@   r   r   r   r  r   r   r4  openwriteinfoerror	traceback
format_exc)'rU   ry   r   r5   module_path
module_dirstub_dirr  sync_stub_pathr   r0  imports_placeholder_indexr!  init_signaturer   r#  r   r  r   r   inner_class_stubprocessed_methodsr   r%  r   attribute_mappingsr   r   r   r   
class_name
class_typerD   seenunique_importsr  frm   rG  s'                                          r$   generate_stub_filez'AsyncToSyncConverter.generate_stub_file  s}   
G	2%%3&&{3F //K 5Jww||J<H KK40''**;7K##E*)#2.WW\\(z7J7J6K44PQN '=LL ),L(9%# &)<)<(=Q ?@ ""##22;3F3FO
)22!(!2!2;!?$5!/!<J
 !::"z ; 
 ;	2{7J7J ''66{7J7JFS ##&7
|>$RS #  #88E /
d#&#A#A$\ $B $  ##$45##B' / !$ &"";':L:LM!f ??3'43D+D!%%d+,!$!?!?ft, "@ "J
 ~~$++::6>>6R !''$zl(;< ''++!: %"";0QR
d ##O4##htf4F$GH99 ''%vW(=> ''"4&(GH ##B' "$K"0"= )//D/D/F(G$	9.>*J
 "Z/#Iz:y?Q?QU_?_&y#69
;R9B*:6 /? )H +;&
J.22:zJ	 ##d9+R
|4$HI +; # ++KFG 5DNd?HHSM"))#.OO&A#$GH   25NQR5RS
 99,GL nc*a		,/0 + LL00@ABQ ! $!#J$ 	* ##JV #I. , ''(4&8T(UV ''+,4  K"$"*7>>++F"GJz+<='..z/I/IJ #HKf +*
  	2MM1*2E2E1FbQQ MM)..011	2s   X< X< X< D6X< 0!U0 U  A,U0 CX< A1VBX< W 'AX< ?X< CX< !X0= X< U-)U0 ,U--U0 0 VX< VX< 5WX< WX< 8X-X-)X< ,X--X< 0X95X< <	Z$AZZ$r\   
   )TNN)FN)r  N)r  )&r(   r)   r*   rG   rK   r   rR   rS   rT   r~   	threadingLockrQ   rP   classmethodrV   rx   r   r   r	   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r&  r  r4  rW  rH   r&   r$   rJ   rJ   e   s    EIL(:--@@AH&	($ *2D2D2W2W    & >* >*@ oD o$ o ob ?Cb'/'<b	b bH   ) ) )  %).2!! ! TN	!
 {+! 
! !> 
 .2HH 	H
 {+H 
H HB ??.9?	c? ?B    eCI>N9O    , 
 .2MM M 	M
 {+M 
cM M^ +1%(	c 4 d3i DI  . K2T K2t K2 K2 K2r&   rJ   ry   r9   c                 .    t         j                  | |      S )z
    Creates a sync version of an async class

    Args:
        async_class: The async class to convert
        thread_pool_size: Size of thread pool to use

    Returns:
        A new class with sync versions of all async methods
    )rJ   r   )ry   r   s     r$   r   r     s      11+?OPPr&   rX  )rb   concurrent.futuresrR   rs   r   r   r   r>  r*  rZ  enumr   r,   r   r   r   r   r	   rJ   r   r   rH   r&   r$   <module>r`     sY          	    A AT Tnw2 w2tQ4 Q Qr&   