
    iR                        d Z ddlZ ej                  eeeeeeeeeeeeeee       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ej                  dk  rddlmZmZ d Zd ZnddlmZ d	d
lmZ dZdj,                  Z ej0                  d      Zej4                  j6                  Zdez  Zej=                  d      Z G d d      Z d Z!	 ddlm"Z# g Z&d Z'd Z(d Z)d Z*d Z+d Z,d Z-d Z.dDdZ/d  Z0d! Z1d" Z2d# Z3e(d$        Z4e(d%        Z5e(d&        Z6d' Z7e(d(        Z8 ej0                  d)      jr                  Z:e( e; ejx                  d*d+e            fd,       Z=d- Z> ej0                  d.      j~                  Z@dEd/ZAd0 ZBdFd1ZC	 dFd2ZDd3 ZEd4 ZFd5 ZGe!dGd6       ZHd7 ZId8 ZJdHd9ZKdd:ej                  dfd;ZM G d< d=      ZNd> ZOd? ZPd@ ZQdA ZRdB ZSdC ZTy# e$$ r ddlm%Z%  e%d      Z#Y w xY w)Iz@
Cython -- Things that don't belong anywhere else in particular
    N)ossysreioglobshutiltempfileupdate_wrapperpartialwrapscython_version_cache_function_function_caches_parse_file_version_match_file_encoding)   	   )r
   r   c                 >    	 t        | |      S # t        $ r | cY S w xY wN)r
   AttributeError)wrapperwrappeds     7/usr/local/lib/python3.12/site-packages/Cython/Utils.py_update_wrapperr   "   s(    	!'733 	N	s    c                 $    t        t        |       S )Nr   )r   r   r   s    r   r   r   (   s    88    r      )__version__)z__init__.pyz__init__.pycz__init__.pyxz__init__.pxdz
__{}_cachez^__(.+)_cache$z/* Generated by Cython %s */zus-asciic                   "    e Zd ZdZd Zd Zd Zy)"_TryFinallyGeneratorContextManagerz_
    Fast, bare minimum @contextmanager, only for try-finally, not for exception handling.
    c                     || _         y r   )_gen)selfgens     r   __init__z+_TryFinallyGeneratorContextManager.__init__?   s	    	r   c                 ,    t        | j                        S r   )nextr$   r%   s    r   	__enter__z,_TryFinallyGeneratorContextManager.__enter__B       DIIr   c                 Z    	 t        | j                         y # t        t        f$ r Y y w xY wr   )r)   r$   StopIterationGeneratorExit)r%   exc_typeexc_valexc_tbs       r   __exit__z+_TryFinallyGeneratorContextManager.__exit__E   s)    	O}- 		s    **N)__name__
__module____qualname____doc__r'   r+   r3    r   r   r"   r"   ;   s    r   r"   c                 .     t                fd       }|S )Nc                  &    t         | i |      S r   )r"   )argskwargsgen_funcs     r   make_genz,try_finally_contextmanager.<locals>.make_genM   s    1(D2KF2KLLr   r   )r=   r>   s   ` r   try_finally_contextmanagerr?   L   s     
8_M MOr   cache)	lru_cache)maxsizec                  :    t         D ]  } | j                           y r   )r   cache_clearr@   s    r   clear_function_cachesrF   ]   s    ! "r   c                 T    t        |       }t        j                  |       | |_        |S r   )r   r   appenduncached)fcfs     r   cached_functionrL   b   s&    		BBBKIr   c              #      K   t        |       D ]/  }t        j                  |      }|||j                  d      f 1 yw)zThe function iterates over the attributes of the object and,
    if it finds the name of the cache, it returns it and the corresponding method name.
    The method may not be present in the object.
    Nr   )dir_CACHE_NAME_PATTERNmatchgroup)obj	attr_namerP   s      r   _find_cache_attributesrT   j   s?     
 X	#)))4U[[^++ s
   &AAc                 \    t        |       D ]  \  }}t        | |      st        | |         y)zbRemoves every cache found in the object,
    if a corresponding method exists for that cache.
    N)rT   hasattrdelattr)rR   
cache_namemethod_names      r   clear_method_cachesrZ   u   s,     $:##>
K3$C$ $?r   c                 @     t         j                         fd}|S )Nc                 r    t        | d       }|i }t        | |       ||v r||   S  | g| x}||<   |S r   )getattrsetattr)r%   r;   rA   resrX   rJ   s       r   r   zcached_method.<locals>.wrapper   sS    j$/=ED*e,5=;dNTN*eDk
r   )_build_cache_namer4   )rJ   r   rX   s   ` @r   cached_methodra      s    "1::.J Nr   c                 P    t         j                  j                  |       \  }}||z   S r   )r   pathsplitext)rc   newsufbase_s       r   replace_suffixrh      s$    ggt$GD!&=r   c                     t         j                  j                  |       rt        j                  |        t	        | dd      S )NwUTF-8)encoding)r   rc   existsunlinkopenrc   s    r   open_new_filerq      s0    	ww~~d 			$ cG,,r   c                     t        | dd      sy 	 t        |       }|j                  d       |j                          |r0t	        j
                  | |j                  |j                  dz
  f       y y # t        $ r Y y w xY w)NTF)allow_failedif_not_foundzN#error Do not use this file, it is the result of a failed Cython compilation.
r   )	is_cython_generated_filerq   writecloser   utimest_atimest_mtimeOSError)rc   strJ   s      r   castrate_filer}      sx    
 $Dt%P	9$ 	
]	_		HHTBKKQ78   s   A0 0	A<;A<Tc                 (   d}d }t         j                  j                  |       r0	 t        | d      5 }|j	                  t        |            }d d d        ||S |j                  d      xs |xr ||k(  xs | S # 1 sw Y   .xY w# t        $ r Y <w xY w)NsM   #error Do not use this file, it is the result of a failed Cython compilation.rbs   /* Generated by Cython )r   rc   rm   ro   readlenr{   
startswith)rc   rs   rt   failure_markerfile_contentrJ   s         r   ru   ru      s    eNL	ww~~d	dD!Q vvc.&9: "
  	 :; 			8,.8	  "! 		s(   B A9B 9B>B 	BBc                    d}t         j                  j                  |       r4	 t        | d      5 }|j	                  t        t                    }d d d        |xr |j                  t              S # 1 sw Y   "xY w# t        $ r Y 0w xY w)Nr   r   )	r   rc   rm   ro   r   r   GENERATED_BY_MARKER_BYTESr{   r   )rc   r   rJ   s      r   file_generated_by_this_cythonr      st    L	ww~~d	dD!Q vvc*C&DE " NL334MNN	 "! 		s(   A; A/A; /A84A; ;	BBc                 "    t        |       }||kD  S r   )modification_time)rc   timeftimes      r   file_newer_thanr      s    d#E4<r   c                     	 t        j                  |        y # t        $ r# t         j                  j	                  |       s Y y w xY wr   )r   makedirsr{   rc   isdirrp   s    r   safe_makedirsr      s:    
D ww}}T" #s    )AAc                    t         j                  j                  |t         j                  j                  |             }	 t	        |      }t        | |      syt        j                  | |       y# t        $ r t        |       Y -w xY w)z
    Copy file sourcefile to directory destdir (creating it if needed),
    preserving metadata. If the destination file exists and is not
    older than the source file, the copying is skipped.
    N)
r   rc   joinbasenamer   r   r{   r   r   copy2)
sourcefiledestdirdestfiledesttimes       r   copy_file_to_dir_if_newerr      sl     ww||GRWW%5%5j%ABH$X. z84
LLX&  gs   A. .BBc                 ~    t         j                  j                  |       }| |k(  r|S t        |      rt	        |      S |S r   )r   rc   dirnameis_package_dirfind_root_package_dir)	file_pathrN   s     r   r   r      s9    
''//)
$CC
		$S))
r   c                 |    d}|D ]2  }t         j                  j                  | |      } t        |       }|s1d}4 | |fS )NTF)r   rc   r   contains_init)dir_pathpackage_names	namespacer   has_inits        r   check_package_dirr     sD    I 77<<'2 *I	 !
 Yr   c                 t    t         D ]/  }t        j                  j                  | |      }t	        |      s/ y y Nr   )PACKAGE_FILESr   rc   r   path_exists)r   filenamerc   s      r   r   r     s+    !ww||Hh/t "r   c                     t        |       ryy r   )r   )r   s    r   r   r     s    X r   c                 T   t         j                  j                  |       ry	 t        }t	        |dd       }|rTt         j                  j                  |       }|j                  |      r$|t        |      dz   d  }	 |j                  |       yy# t        $ r Y yw xY w# t        $ r Y yw xY w)NTarchiver   F)r   rc   rm   
__loader__r]   normpathr   r   get_datar{   	NameError)rc   loaderarchive_pathr   arcnames        r   r   r     s     
ww~~d vy$7ww''-H""<0"3|#4Q#6#78!OOG,
 	  ! ! s0   AB 9B 	BB BB 	B'&B'z .*[.]cython-([0-9]+)[.][^./\\]+$z^([0-9]+)[.]([0-9]+).*z\1\2c                    |r
|dd dk(  sJ t         j                  j                  | |      }t        j                  t        j                  |      dz   |z         }||z   }t         j                  j                  |      sd}d|f}|D ]4  }t        |      }|st        |d         }	|d   |	cxk  r|k  s.n 1|	|f}6 |d   S )a?  
    Search a directory for versioned pxd files, e.g. "lib.cython-30.pxd" for a Cython 3.0+ version.

    @param directory: the directory to search
    @param filename: the filename without suffix
    @param suffix: the filename extension including the dot, e.g. ".pxd"
    @return: the file path if found, or None
    Nr   .z	.cython-*r   )r   rc   r   r   escaperm   r   int)
	directoryr   suffix_current_versionpath_prefixmatching_filesrc   
best_matchversionsint_versions
             r   find_versioned_filer   6  s     s***'',,y(3KYYt{{;7+ENOND77>>$dJ&t,hqk*K!}{>.>>)40
  a=r   c                     t        | t              r>	 t        j                         }|t        j                         }| j                  |      } | S | S # t        $ r Y | S w xY wr   )
isinstancebytesr   getfilesystemencodinggetdefaultencodingdecodeUnicodeDecodeError)r   filename_encodings     r   decode_filenamer   V  sh    (E"	 # 9 9 ; ($'$:$:$<!'89H O8O " 	O	s   ;A 	AAs   (\w*coding)[:=]\s*([-\w.]+)c                    d}d}t        |      dk  r9| j                  d      }||z  }|j                  d      }|snt        |      dk  r9t        |d         }|r4|j	                  d      dk7  r |j	                  d	      j                  d
      S t        |      dkD  r0t        |d         }|r |j	                  d	      j                  d
      S |S )Nr8   r   r   i     
r   r   s   c_string_encoding   z	iso8859-1)r   r   splitr   rQ   r   )rJ   defaultlinesstartdatams         r   detect_opened_file_encodingr   g  s     EE
e*q.vvc{E" e*q. 	U1X&AQWWQZ//wwqz  --	Ua q*771:$$[11Nr   c                 P    | j                  d      dk7  r| j                  d       yy)z
    Read past a BOM at the beginning of a source file.
    This could be added to the scanner, but it's *substantially* easier
    to keep it at this level.
    r   u   ﻿r   N)r   seek)rJ   s    r   skip_bomr   ~  s$     	vvayH	q	 r   c                    d }	 |At        | d      }t        |      }|j                  d       t        j                  |||      }nt        | ||      }|t        |       t!        |       |S # t
        $ ri t        j                  j                  |       r 	 t        }| j                  |j                        rt        || ||      }n# t        t        f$ r Y nw xY wY w xY w)Nr   r   rl   errors)ro   r   r   r   TextIOWrapperr{   r   rc   rm   r   r   r   open_source_from_loaderr   r   FileNotFoundErrorr   )source_filenamerl   error_handlingstreamrJ   r   s         r   open_source_filer     s    F_d+A215HFF1I%%a(>RF/H^TF ~00VM!  77>>/*	F))&..90On. >* 		s6   AA/ /)C!/C	C!	CC!CC! C!c                     t         j                  j                  |      }|t        | j                        dz   d  }| j                  |      }t        j                  t        j                  |      ||      S )Nr   r   )	r   rc   r   r   r   r   r   r   BytesIO)r   r   rl   r   nrmpathr   r   s          r   r   r     se     gg/Gc&..)!+,-G??7#DBJJt,%-#13 3r   c                 B   d}| d d dk(  rd}| dd  } t        |       dk  rt        | d      } nm| d   dk(  rY| d   }|dv rt        |       } t        | dd  d	      } nA|d
v rt        | dd  d      } n-|dv rt        | dd  d      } nt        | d      } nt        | d      } |r|  S | S )NFr   -Tr   r   0xX   oO   bB)r   r   strip_py2_long_suffix)valueis_negliteral_types      r   str_to_numberr     s     FRayCab	
5zA~E1	qSQx4)%0Eab	2&ET!ab	1%ET!ab	1%E qMEE1E6&&r   c                     | d   dv r| dd S | S )z~
    Python 2 likes to append 'L' to stringified numbers
    which in then can't process when converting them to numbers.
    r   lLNr8   )	value_strs    r   r   r     s"    
 }"~r   c                 \    t        | t              rt        |       } d| cxk  xr dk   S c  S )Ni   l        )r   strr   )r   s    r   long_literalr     s2    %e$&&&&&&&r   c              #     K   t        j                  |       }	 t        j                  d      5 dgffd	t        j                  j                         |        fd}| t        j                  ||                 d d d        t        j                  |       y # 1 sw Y   xY w# t        j                  |       w xY ww)Nza+b)moder   c                 n    j                   s$j                  d       j                         | d<   | d   S )Nr   )closedr   r   )_output	temp_files    r   read_outputz captured_fd.<locals>.read_output  s2     ''NN1%!*!1GAJqz!r   c                  <            } r| j                        S | S r   )r   )resultrl   r   s    r   
get_outputzcaptured_fd.<locals>.get_output  s     $2:v}}X.FFr   )r   dupr	   TemporaryFiledup2filenorw   )r   rl   orig_streamr  r   r   s    `  @@r   captured_fdr    s     &&.K##/9%(E " GGI$$&/G GGK(M 0" 	# 0/" 	s4   C
B0 AB$B0 C
$B-)B0 0CC
c                     t        j                         g} t         j                  t         j                  t         j                  t         j
                  fD ](  }t        |dd       }||| vs| j                  |       * | S )Nrl   )r   r   stdoutstdin
__stdout__	__stdin__r]   rH   )
candidatesr   rl   s      r   get_encoding_candidatesr    sh    ((*+J::syy#..#--H6:t4HJ$>h'	 I
 r   c                     | j                         }|sy t               D ]  }	 |j                  |      c S  |j                  d      S # t        $ r Y 4w xY w)Nzlatin-1)stripr  r   r   )capturedcaptured_bytesrl   s      r   prepare_capturedr    s^    ^^%N+-	!((22 .   ++ " 		s   A	AAc                 h    t        |       } | r%|r|j                  |       |j                  |        y y r   )r  rv   )r  outputheader_lines      r   print_capturedr    s/    )HLL%X r   r   c                     |r|j                  |       |j                          |j                  }|j                  |        |r|j                  |       |r|j                          y y r   )rv   flushbuffer)sheader_textendfiler  outs         r   print_bytesr!    sM    

;JJL
++CIIaL
		#		 r   c                   0    e Zd ZddZd Zd Zd Zd ZeZy)
OrderedSetc                 R    g | _         t               | _        | j                  |       y r   )_listset_setupdate)r%   elementss     r   r'   zOrderedSet.__init__#  s    
E	Hr   c                 ,    t        | j                        S r   )iterr%  r*   s    r   __iter__zOrderedSet.__iter__(  s    DJJr   c                 4    |D ]  }| j                  |        y r   )add)r%   r)  es      r   r(  zOrderedSet.update+  s    AHHQK r   c                     || j                   vr7| j                  j                  |       | j                   j                  |       y y r   )r'  r%  rH   r.  )r%   r/  s     r   r.  zOrderedSet.add/  s5    DIIJJa IIMM! r   c                 ,    t        | j                        S r   )boolr'  r*   s    r   __bool__zOrderedSet.__bool__4  r,   r   N)r8   )	r4   r5   r6   r'   r,  r(  r.  r3  __nonzero__r8   r   r   r#  r#  "  s"    
 
 Kr   r#  c                       fd}|S )z6Class decorator for creating a class with a metaclass.c                 8   | j                   j                         }|j                  d      }|+t        |t              r|g}|D ]  }|j                  |        |j                  dd        |j                  dd         | j                  | j                  |      S )N	__slots____dict____weakref__)r8  copygetr   r   popr4   	__bases__)cls	orig_varsslots	slots_var	metaclasss       r   r   zadd_metaclass.<locals>.wrapper>  s    LL%%'	k*%%"	i( #j$'mT*s}}i@@r   r8   )rB  r   s   ` r   add_metaclassrC  <  s    
A Nr   c                 F    | dk(  s| j                  d      rt        d      y )Ncythonzcython.z;cython is a special module, cannot be used as a module name)r   
ValueError)full_module_names    r   $raise_error_if_module_name_forbiddenrH  L  s*    8#'7'B'B9'MVWW (Nr   c                    g }d}t        j                  d|       D ]@  }|dv rdddd|   }|ddgz   dd	 }|d
v r n"|dk7  s'|j                  t        |             B |dgd	z  z   dd }|d	xx   |z  cc<   d}|D ]
  }|dz  |z   } d|z  S )z
    Parse and translate public version identifier like '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX).

    SEE: https://peps.python.org/pep-0440/#public-version-identifiers
       z(\D+))abrc         r   Nr   )z.devz.prez.postr      r   z0x%08X)r   r   rH   r   )version_stringdigitsrelease_statussegment
hexversiondigits         r   build_hex_versionrX  R  s     FN88Hn5&&#'d$?HN1vor*F11^MM#g,' 6 sQw#F
1II J Ao.
  j  r   c                 ~   t         j                  j                  |      }t        j                         }|j	                  t         j
                        s|t         j
                  z  }g }|D ]4  }	 t         j                  j                  ||      }|j                  |       6 t         j                  j                  | |      dz   }|dj                  |      dz   z  }t        | dz   d      5 }	|	j                  |       d d d        y # t        $ r" t         j                  j                  |      }Y w xY w# 1 sw Y   y xY w)Nz: \
  z \
  
z.deprj   )r   rc   r   getcwdendswithseprelpathrF  abspathrH   r   ro   rv   )
targetsourcedependenciessrc_base_dircwdpathsfnamenewpathdeplineoutfiles
             r   write_depfilerj  p  s    77??6*L
))+C  (E	-ggooeS1G
 	W  ggoofc*Z7Gy~~e$t++G	fVmS	!Wg 
"	!  	-ggooe,G	- 
"	!s   . D*D3(D0/D03D<c                  L   t        dt        z         t        j                  j	                         s!t        j
                  t        j                  k(  ry t        j                  d      t        j                  d      k(  ry t        j                  j                  dt        z         y )NzCython version %sr   r   zCython version %s
)	printr   r   stderrisattyr
  r   fstatrv   r8   r   r   print_versionrp    si    	

./ zzcjjCJJ6	xx{bhhqk! 	JJ*^;<r   c                    | j                         j                  d      }d}d|v sd|v r&|j                  d|v rdndd      \  }}t        |      }d|v r |j	                  d      }|d| ||dz   d z   }nt        |      }||z  }|d| d|t        |      z
  z  z   dz   d| z  z   ||d z   j                  d      }|dk7  r|S dS )	z
    Generate a 'normalised', simple digits string representation of a float value
    to allow string comparisons.  Examples: '.123', '123.456', '123.'
    r   r   Er/  r   r   Nz.0)lowerlstripr   r   indexr   rstrip)	float_str	str_valueexpnum_int_digitsr  s        r   normalise_float_reprr{    s   
 !((-I
C
i3)+"y0@c1M	3#h
i"-o~.>A;M;N1OO	Y>C 	$3
s9~%
&	'
	 *	 CD/		
 fSk  s]6,,r   )FT)rk   )NN)r   Nr   )Ur7   rE  declareobjectlistr   r   r   r   r   r   r	   version_info	functoolsr
   r   r   r    r    r   r   formatr`   compilerO   rc   getmtimer   GENERATED_BY_MARKERencoder   r"   r?   rA   r   ImportErrorrB   r   rF   rL   rT   rZ   ra   rh   rq   r}   ru   r   r   r   r   r   r   r   r   r   findallr   r   subr   r   searchr   r   r   r   r   r   r   r   r  r  r  r  r
  r!  r#  rC  rH  rX  rj  rp  r{  r8   r   r   <module>r     s  
  6ffVV\6Tvdj 
 
 	 	    f 29   ,O ''  bjj!23 GG$$ 4~E /66zB  ".2  
,% 
-9(0O
'&      
  0 !bjj!DEMM  ),VRVV4MwXf-g)h >	 "rzz"ABII .B ;?3':'  .
,  $SZZt 	 4 X!<.
=-  .#-O.s   G G+*G+