
    ^h1                     @   % S r SSKrSSKrSSKrSSKrSSKrSSKJr  SSKJ	r	J
r
JrJrJrJrJr  SSKJrJr  SSKJrJrJrJrJrJrJrJr  SSKJr  \R<                  " \5      r 0 r!\	\"\
\RF                     4   \$S'   0 r%\	\"\
\RL                     4   \$S	'   \RN                  " SS
9 S.S\\(   S\\"   S\)S\\   4S jj5       r*S\
\\      S\\   4S jr+S\RL                  S\"S\)S\\\(   \)4   4S jr, S.S\RL                  S\)S\"S\)S\\   4
S jjr-S\RL                  S\)S\\   4S jr.S\RL                  S\
\"   4S jr/S\RF                  S\	\"\\   4   4S jr0S\
\Rb                     S\\"   4S jr2S\
\RF                     S\	\"\	\"\\   4   4   4S jr3S\
\RL                     S\	\"\\   4   4S  jr4S!\\Rj                  \Rl                  4   S"\"S\\\"      4S# jr7S$\"S"\"S\\"   4S% jr8S&\\"   SS4S' jr9 S.S"\"S(\)S\\"   4S) jjr:S*\SS4S+ jr;S,\"S\\"   4S- jr<g)/zH
Compiles the annotations in .pyi files into handlers for library code.
    N)
ModuleType)DictListOptionalSetTupleTypeUnion)MutateUpsertSymbol)REGISTERED_HANDLER_BY_FUNCTIONREGISTERED_HANDLER_BY_METHODCallerMutationCallerUpsertExternalCallHandlerModuleMutationModuleUpsertexternal_call_handler_by_name)subscript_to_sliceREGISTERED_CLASS_SPECSREGISTERED_FUNCTION_SPECS)maxsizeposname	overwritereturnc                 V   ^ ^^ T c  Tc  [        S5      e " UUU 4S jS[        5      nU$ )Nz pos and name cannot both be Nonec                   *   > \ rS rSrSU UU4S jjrSrg)(_mutate_argument.<locals>.MutateArgument(   Nc                 D  > Tb#  TU R                   ;   a  U R                   T   S   nO3Tb/  T[        U R                  5      :  a  U R                  T   S   OS 1nOg [        U5      S:X  a  g [        [	        U5      5      nUc  g UR                  [        5       TT(       + S9  g )N   r   )r   mutated)kwargslenargsnextiterupdate_depsset)selfsymssymr   r   r   s      V/home/james-whalen/.local/lib/python3.13/site-packages/ipyflow/annotations/compiler.pyhandle/_mutate_argument.<locals>.MutateArgument.handle)   s    DDKK$7{{4(+,/#dii.,@tyy~a(tf4yA~tDz"C{OOCEYION     r   N__name__
__module____qualname____firstlineno__r/   __static_attributes__)r   r   r   s   r.   MutateArgumentr   (   s    	O 	Or1   r:   )
ValueErrorr   )r   r   r   r:   s   ``` r.   _mutate_argumentr<   !   s7     {t|;<<O O, O r1   handlersc                 ,   ^   " U 4S jS[         5      nU$ )Nc                   &   > \ rS rSrSU 4S jjrSrg))_make_multi_handler.<locals>.MultiHandler=   Nc                 :   > T H  nUR                  U 5        M     g N)r/   )r+   handlerr=   s     r.   r/   0_make_multi_handler.<locals>.MultiHandler.handle>   s    #t$ $r1   r2   r3   r4   )r=   s   r.   MultiHandlerr@   =   s    	% 	%r1   rF   )r   )r=   rF   s   ` r.   _make_multi_handlerrG   :   s    %* %
 r1   funcarg_name	is_methodc                    [        U R                  S/ 5      n[        X0R                  R                  -   U R                  R                  -   5       HZ  u  pEUR                  U:X  d  M  U[        U5      [        U R                  R                  5      -   :  a  S OXB-
  U[        U5      :  4s  $    [        SU< S[        R                  " U 5      < 35      e)Nposonlyargszarg z! not found in function signature )	getattrr&   	enumerate
kwonlyargsargr%   r;   astdump)rH   rI   rJ   rL   irP   s         r.   _arg_position_in_signaturerT   E   s     $))]B7KK))..8499;O;OOP77hS-DIINN0CCC3{##$ $ Q
 7?$P r1   c                     US:X  a  U(       a  [         $ [        $ US:X  a  U(       a  U(       a  [        $ [        $ g [	        XUS9u  pE[        UU(       a  S US9$ UUS9$ )Nr6   r+   rJ   )r   r   r   )r   r   r   r   rT   r<   )rH   rJ   r   r   r   
is_posonlys         r.   _make_mutate_name_handlerrX   S   sq     |!!	##%%	  5T9U#
 	
)-
 	
r1   c           
         U R                   nUc  [        SU R                   35      e[        U[        R
                  5      (       a3  [        R                  " UR                  5      nUc  [        SU 35      eU$ [        U[        R                  5      (       GaY  UR                  n[        U5      n[        U[        R
                  5      (       Ga!  UR                  [        R                  :X  d  UR                  [        R                  :X  a  UR                  [        R                  :H  n[        U[        R
                  5      (       a  [!        U UUR                  US9$ [        U[        R"                  5      (       af  / nUR$                   HI  n[        U[        R
                  5      (       d    O4UR'                  [!        U UUR                  US95        MK     [)        U5      $ [        SU 35      eg [        SU SU R                   35      e)Nz9unable to handle null return type when trying to compile z!No known handler for return type )rJ   r   r   zunable to handle return type z when trying to compile )returns	TypeErrorr   
isinstancerQ   Namer   getidr;   	Subscriptvaluer   r   r5   r   rX   r   eltsappendrG   )	rH   rJ   rethandler_type	sub_valueslice_valuer   r=   elts	            r.   compile_function_handlerri   j   s    ,,C
{G		{S
 	
 #sxx  488@@FGG	C	'	'II	(-i**||v.),,,BWBW2W%LLL,A,AA	k388444"+(^^"+	   SYY77!H*//)#sxx88! 5 $*3%(VV*3	  0  38<<@FGG3 +6 +C50HT
 	
r1   c                    / nU R                    H  n[        U[        R                  5      (       d  M$  UR                  n[        U[        R
                  5      (       a  UR                  S:w  a  Ma  UR                   H?  n[        U[        R                  5      (       d  M$  UR                  UR                  5        MA     M     [        U5      S:  a  U$ U R                  /$ )Nhandler_forr   )decorator_listr\   rQ   CallrH   r]   r_   r&   Strrc   sr%   r   )rH   names	decorator	deco_funcrP   s        r.   get_names_for_functionrs      s    E((	)SXX..NN	)SXX..),,-2O>>C#sww''SUU# " ) 5zA~		{r1   clsc                     0 nU R                    HE  n[        U[        R                  5      (       d  M$   [	        USS9n[        U5       H  nX1U'   M	     MG     U$ ! [        [        4 a     M^  f = f)NTrV   )bodyr\   rQ   FunctionDefri   rs   r;   r[   )rt   r=   rH   func_handlerr   s        r.   compile_class_handlerry      sr    H$00		3DDIL.t4!- 5  O I& 	
 	s    AA.-A.
decoratorsc                    / nU  H  n[        U[        R                  5      (       d  M$  UR                  n[        U[        R                  5      (       a)  UR
                  S:w  d  [        UR                  5      S:w  a  Mz  UR                   H?  n[        U[        R                  5      (       d  M$  UR                  UR                  5        MA     M     [        U5      $ )Nmoduler"   )r\   rQ   rm   rH   r]   r_   r%   r&   rn   rc   ro   r*   )rz   modulesrq   rH   rP   s        r.   get_modules_from_decoratorsr~      s    G	)SXX..~~4**ww("9>>"a'>>C#sww''suu% "   w<r1   classesc                 J    0 nU  H  n[        U5      XR                  '   M     U$ rC   )ry   r   )r   handlers_by_classclazzs      r.   compile_classesr      s,     (=e(D**% r1   	functionsc                     0 nU  H$  n [        USS9n[        U5       H  nX1U'   M	     M&     U$ ! [        [        4 a     M=  f = f)NFrV   )ri   rs   r;   r[   )r   function_handlersrH   rx   r   s        r.   compile_functionsr      s_     	3DEJL.t4*6$' 5   I& 	 		s    /AAnodefilenamec                    [        U [        R                  5      (       a7  [        U R                  [        R                  5      (       a  U R                  n Og U R
                  R                  SS5      u  p#USS  n[        R                  " USS9R                  n[        U[        R                  5      (       d  g UR                  /UR                  -    GH  n[        U[        R                  [        R                  [        R                  45      (       d    g [        U[        R                  5      (       a[  [        UR                  [        R                  5      (       d    g UR                  R                   S:w  a    g UR"                  S:w  a    g M  [        U[        R                  5      (       d  M  UR$                   H%  n[        U[        R                  5      (       a  M$      g    GM     ['        U5      (       a  [)        X15      $ g )N
r"   eval)modesysversion_info)r\   rQ   Exprra   rn   ro   splitparserv   Compareleftcomparators	Attributer   Numr]   r_   attrrb   r    register_annotations_from_source)r   r   headercontentsparsed_header
comparatorrh   s          r.   handle_string_annotationr      sf    $!!djj#''**::Dvv||D!,FABZFIIf6277MmS[[11$))*]-F-FF
*s}}cii&IJJj#--00j..99""e+.0 1
CII..!!#sww// ' G F||/CCr1   sourcec                    [        5       n[        R                  " U 5      R                   GH  n[	        U[        R
                  [        R                  [        R                  [        R                  45      (       d  MS  [        [        US/ 5      5      =(       d@    [        R                  R                  [        R                  R                  U5      5      S   / H  nUR                  U5        [	        U[        R
                  5      (       a'  [         R#                  U/ 5      R%                  U5        MZ  [	        U[        R                  5      (       a'  [&        R#                  U/ 5      R%                  U5        M  [	        U[        R                  [        R                  45      (       d  M  U[)        X15      =(       d
    [        5       -  nM     GM     U$ )Nrl   r   )r*   rQ   r   rv   r\   ClassDefrw   r   rn   r~   rM   ospathsplitextbasenameaddr   
setdefaultrc   r   r   )r   r   regisered_modulesr   r|   s        r.   r   r     s?   		&!&&$s#'' RSS1D*B/
 ?ggrww//9:1=>?F !!&)$--&11&"=DDTJD#//22)44VR@GGMD388SWW"566!%=d%M%VQTQVV!? ' r1   r}   c                 t    U  H2  n[         R                  R                  U5      nUc  M'  [        U5        M4     g rC   )r   r}   r^   (compile_and_register_handlers_for_module)r}   module_namer|   s      r.   -compile_handlers_for_already_imported_modulesr      s,    -4V< r1   4should_compile_handlers_for_already_imported_modulesc                     [        U S5       nUR                  5       nSSS5        [        WU 5      nU(       a  [        U5        U$ ! , (       d  f       N.= f)zk
Transforms the annotations in .pyi files into specs for later compilation into handlers for library code.
rN)openreadr   r   )r   r   fr   r}   s        r.   register_annotations_filer   '  sE     
h	 
.vx@G;5g>N 
	s   A
Ar|   c                    [        [        R                  U R                  / 5      5      n[	        [
        R                  U R                  / 5      5      nUR                  5        HS  u  p4[        XS 5      nUc  M  UR                  5        H)  u  pgU[        XV4'   [        XVS 5      nUc  M   U[        U'   M+     MU     UR                  5        H  u  p[        X	S 5      n
U
c  M  U[        U
'   M!     g rC   )
r   r   r^   r5   r   r   itemsrM   r   r   )r|   compiled_class_handlerscompiled_function_handlers	classnamecompiled_class_method_handlersr   method_namerD   method_functionfunction_namefunctions              r.   r   r   5  s    -""6??B7 "3!%%foor:" 6M5R5R5T1	40=$B$H$H$J K?F();<%e$?O*BI.?	 %K	 6U #="B"B"D6$77>*84 #Er1   dirnamec                    [        5       n/ n[        R                  " U 5       Hf  n[        R                  R	                  U5      S   S:X  d  M+  UR                  U5        U[        [        R                  R                  X5      SS9-  nMh     U H2  n[        R                  R                  U5      nUc  M'  [        U5        M4     U$ )Nr"   z.pyiF)r   )r*   r   listdirr   r   rc   r   joinr   r}   r^   r   )r   registered_modulesannotation_filesr   r   r|   s         r.   register_annotations_directoryr   K  s    JJw'77H%a(F2##H-";W/EJ#  ( *-4V< * r1   )F)=__doc__rQ   	functoolsloggingr   r   typesr   typingr   r   r   r   r   r	   r
   ipyflow.annotations.annotationsr   r   ,ipyflow.tracing.external_calls.base_handlersr   r   r   r   r   r   r   r   ipyflow.utils.ast_utilsr   	getLoggerr5   loggerr   strr   __annotations__r   rw   	lru_cacheintboolr<   rG   rT   rX   ri   rs   ry   exprr~   r   r   r   rn   r   r   r   r   r   r   r2   r1   r.   <module>r      s&      	 
  @ @ @ @	 	 	 7			8	$ 9; S$s||"445 :>@ 4T#//%: :; @ T"?D	#&sm8<	
 #04+,-	

//%(59
8C=$ JO

//
&*
25
BF
	

.0

//0
&*0
	
0
f T#Y "s|| S$?R:S5S0T $DN s3x $#,,	#tC1223
34COO$	#t'(
()"
#''!
".1c#hDS C CH $=3s8 = = QVIMX?Z ?D ?,C CH r1   