
    Ae7                     4   d dl mZ 	 d dlmZ 	 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d dlmZ e	j$                  j&                  Zg Zd Zd Zd Zd Zd	 Zd
 Zd Zd Zd Zed        Zed        Z ed        Z!ed        Z"d Z# ejH                  d      jJ                  Z&d Z'd Z(d'dZ)	 d'dZ*d Z+d Z,ed        Z-ed(d       Z.dde
j^                  dfdZ0 G d d       Z1 G d! d"e2      Z3d# Z4d$ Z5d% Z6d& Z7y# e$ r eZY w xY w# e$ r eZY w xY w))    )absolute_import)
basestringN)contextmanagerc                  :    t         D ]  } | j                           y N)_function_cachesclear)caches    ,lib/python3.12/site-packages/Cython/Utils.pyclear_function_cachesr      s    !     c                 j     i t         j                         t                fd} |_        |S )Nc                  H    j                  |       }|u r
 |  x}| <   |S r   )get)argsresr
   f
uncomputeds     r   wrapperz cached_function.<locals>.wrapper&   s2    iij)* !4(C%+
r   )r   appendobjectuncached)r   r   r
   r   s   ` @@r   cached_functionr   "   s1    EE"J
 GNr   c                 4     d j                   z   fd}|S )Nz
__%s_cachec                 r    t        | d       }|i }t        | |       ||v r||   S  | g| x}||<   |S r   )getattrsetattr)selfr   r
   r   
cache_namer   s       r   r   zcached_method.<locals>.wrapper0   sS    j$/=ED*e,5=;dNTN*eDk
r   )__name__)r   r   r   s   ` @r   cached_methodr!   .   s    

*J Nr   c                 P    t         j                  j                  |       \  }}||z   S r   )ospathsplitext)r$   newsufbase_s       r   replace_suffixr)   ;   s$    ggt$GD!&=r   c                     t         j                  j                  |       rt        j                  |        t	        j
                  | dd      S )Nwz
ISO-8859-1)encoding)r#   r$   existsunlinkcodecsopenr$   s    r   open_new_filer2   @   s4    	ww~~d 			$ ;;tS<88r   c                     	 t        |       }|j                  d       |j                          |r0t        j                  | |j
                  |j                  dz
  f       y y # t        $ r Y y w xY w)NzN#error Do not use this file, it is the result of a failed Cython compilation.
   )r2   writecloser#   utimest_atimest_mtimeEnvironmentError)r$   str   s      r   castrate_filer<   O   sg    
	9$ 	
]	_		HHTBKKQ78   s   A! !	A-,A-c                 "    t        |       }||kD  S r   )modification_time)r$   timeftimes      r   file_newer_thanrA   _   s    d#E4<r   c                     	 t        j                  |        y # t        $ r# t         j                  j	                  |       s Y y w xY wr   )r#   makedirsOSErrorr$   isdirr1   s    r   safe_makedirsrF   d   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#   r$   joinbasenamer>   rA   rD   rF   shutilcopy2)
sourcefiledestdirdestfiledesttimes       r   copy_file_to_dir_if_newerrP   l   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#   r$   dirnameis_package_dirfind_root_package_dir)	file_pathdirs     r   rT   rT      s9    
''//)
$CC
		$S))
r   c                 n    |D ]/  }t         j                  j                  | |      } t        |       r/ y  | S r   )r#   r$   rH   rS   )rV   package_namesrR   s      r   check_package_dirrY      s7      ggll3(c" Jr   c                 l    dD ]/  }t         j                  j                  | |      }t        |      s/ y y )N)z__init__.pyz__init__.pycz__init__.pyxz__init__.pxdr4   )r#   r$   rH   path_exists)dir_pathfilenamer$   s      r   rS   rS      s4    %  ww||Hh/t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archiver4   F)r#   r$   r-   
__loader__r   normpath
startswithlenget_dataIOError	NameError)r$   loaderarchive_pathra   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'c                     t        | t              r>	 t        j                         }|t        j                         }| j                  |      } | S | S # t        $ r Y | S w xY wr   )
isinstancebytessysgetfilesystemencodinggetdefaultencodingdecodeUnicodeDecodeError)r]   filename_encodings     r   decode_filenamers      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 y)N r      i     
r   r4   s   c_string_encoding   z	iso8859-1zUTF-8)rc   readsplit_match_file_encodinggrouprp   )r   linesstartdatams        r   detect_opened_file_encodingr      s     EE
e*q.vvc{E" e*q. 	U1X&AQWWQZ//wwqz  --	Ua q*771:$$[11r   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.
    r4   u   ﻿r   N)ry   seek)r   s    r   skip_bomr      s$     	vvayI	q	 r   c                    d }	 |Kt        j                  | d      }t        |      }|j                  d       t        j                  |||      }nt        j                  | ||      }|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)Nrbr   r,   errors)ior0   r   r   TextIOWrapperrD   r#   r$   r-   r`   rb   r_   open_source_from_loaderrf   AttributeErrorFileNotFoundErrorr   )source_filenamer,   error_handlingstreamr   rg   s         r   open_source_filer      s    F.A215HFF1I%%a(>RFWW_xWF ~00VM!  77>>/*	F))&..90On. >* 		s6   A%B )C5-/CC5C/,C5.C//C54C5c                     t         j                  j                  |      }|t        | j                        dz   d  }| j                  |      }t        j                  t        j                  |      ||      S )Nr4   r   )	r#   r$   ra   rc   r_   rd   r   r   BytesIO)rg   r   r,   r   nrmpathri   r   s          r   r   r     se     gg/Gc&..)!+,-G??7#DBJJt,%-#13 3r   c                 ,   d}| d d dk(  rd}| dd  } t        |       dk  rt        | d      } nb| d   dk(  rN| d   }|dv r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 )NFr4   -Trx   r   0xX   oO   bB)rc   int)valueis_negliteral_types      r   str_to_numberr     s     FRayCab	
5zA~E1	qSQx4ab	2&ET!ab	1%ET!ab	1%E qMEE1E6&&r   c                 \    t        | t              rt        |       } d| cxk  xr dk   S c  S )Ni   l        )rk   r   r   )r   s    r   long_literalr   +  s2    %$e$&&&&&&&r   c                     dt         j                  v rt         j                  d   S d} t         j                  dk(  rRt        j                  dk(  r t         j
                  j                  d      } nt         j                  j                  d      } | r?t         j
                  j                  |       r t         j
                  j                  | d      S t         j
                  j                  t         j
                  j                  dd	            S )
z
    Return the base directory containing Cython's caches.

    Priority:

    1. CYTHON_CACHE_DIR
    2. (OS X): ~/Library/Caches/Cython
       (posix not OS X): XDG_CACHE_HOME/cython if XDG_CACHE_HOME defined
    3. ~/.cython

    CYTHON_CACHE_DIRNposixdarwinz~/Library/CachesXDG_CACHE_HOMEcython~z.cython)
r#   environnamerm   platformr$   
expanduserr   rE   rH   )parents    r   get_cython_cache_dirr   1  s     RZZ'zz,--F	ww'<<8#WW''(:;F ZZ^^$45F"''--'ww||FH-- 77bggll3	:;;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 # t        j                  ||                 w xY w# 1 sw Y   Ax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   ry   )_output	temp_files    r   read_outputz captured_fd.<locals>.read_outputU  s2     ''NN1%!*!1GAJqz!r   c                  <            } r| j                        S | S r   )rp   )resultr,   r   s    r   
get_outputzcaptured_fd.<locals>.get_output]  s     (]F6>6==2JFJr   )r#   duptempfileTemporaryFiledup2filenor6   )r   r,   orig_streamr   r   r   s    `  @@r   captured_fdr   P  s     &&.K##/ 	9%(E " GGI$$&/K ! V,!	$ 	 V,!	 	$ 	sK   C.C -C 
B&*CC C.&CCCC C++C.rw   Tc                     |r|j                  |       |j                          	 |j                  }|j                  |        |r|j                  |       |r|j                          y y # t        $ r |}Y Ew xY wr   )r5   flushbufferr   )sheader_textendfiler   outs         r   print_bytesr   i  sj    

;JJLkk IIaL
		#		   s   A) )A76A7c                   *    e Zd Zd Zd Zd Zd Zd Zy)LazyStrc                     || _         y r   callback)r   r   s     r   __init__zLazyStr.__init__x  s	     r   c                 "    | j                         S r   r   r   s    r   __str__zLazyStr.__str__z      }}r   c                 "    | j                         S r   r   r   s    r   __repr__zLazyStr.__repr__|  r   r   c                 (    | j                         |z   S r   r   )r   rights     r   __add__zLazyStr.__add__~  s    }}&&r   c                 (    || j                         z   S r   r   )r   lefts     r   __radd__zLazyStr.__radd__  s    dmmo%%r   N)r    
__module____qualname__r   r   r   r   r   ru   r   r   r   r   w  s    !'&r   r   c                   &    e Zd ZddZd Zd Zd Zy)
OrderedSetc                 R    g | _         t               | _        | j                  |       y r   )_listset_setupdate)r   elementss     r   r   zOrderedSet.__init__  s    DJDIKKr   c                 ,    t        | j                        S r   )iterr   r   s    r   __iter__zOrderedSet.__iter__  s    

r   c                 4    |D ]  }| j                  |        y r   )add)r   r   es      r   r   zOrderedSet.update  s     
hhqkr   c                     || j                   vr7| j                  j                  |       | j                   j                  |       y y r   )r   r   r   r   )r   r   s     r   r   zOrderedSet.add  s5    		
jj
iimmA r   N)ru   )r    r   r   r   r   r   r   ru   r   r   r   r     s    r   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__)r   copyr   rk   strpopr    	__bases__)cls	orig_varsslots	slots_var	metaclasss       r   r   zadd_metaclass.<locals>.wrapper  s    LL%%'	k*%%" )	i()j$'mT*s}}i@@r   ru   )r   r   s   ` r   add_metaclassr     s    
A Nr   c                 F    | dk(  s| j                  d      rt        d      y )Nr   zcython.z;cython is a special module, cannot be used as a module name)rb   
ValueError)full_module_names    r   $raise_error_if_module_name_forbiddenr     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
k7  s!|j                  t        |             < |dgd	z  z   dd }|d	xx   |z  cc<   d}|D ]
  }|dz  |z   } d|z  S )zn
    Parse and translate '4.3a1' into the readable hex representation '0x040300A1' (like PY_VERSION_HEX).
       z
([.abrc]+))abrc         r   Nrv   .   r   z0x%08X)rerz   r   r   )version_stringdigitsrelease_statusdigit
hexversions        r   build_hex_versionr    s    
 FN,7 &$$#'d$?FN1vor*Fc\MM#e*%& sQw#F
1II J / Ao.
/ j  r   c                    t         j                  j                  |      }t        j                         }|j	                  t         j
                        s|t         j
                  z  }g }|D ]g  }t         j                  j                  |      }|j                  |      r"	 t         j                  j                  ||      }n|}|j                  |       i t         j                  j                  | |      dz   }|dj                  |      dz   z  }t        | dz   d      5 }	|	j                  |       d d d        y # t        $ r |}Y w xY w# 1 sw Y   y xY w)Nz: \
  z \
  
z.depr+   )r#   r$   rR   getcwdendswithsepabspathrb   relpathr   r   rH   r0   r5   )
targetsourcedependenciessrc_base_dircwdpathsfnamenewpathdeplineoutfiles
             r   write_depfiler#    s   77??6*L
))+C  (E 
&L) ''//%5
 GW
 ggoofc*Z7Gy~~e$t++G	fVmS	! Wg      s    D8E	8EE	E)NN)rx   N)8
__future__r   __builtin__r   ImportErrorr   r   rf   rD   r#   rm   r  r   r/   rJ   r   
contextlibr   r$   getmtimer>   r   r   r   r!   r)   r2   r<   rA   rF   rP   rT   rY   rS   r[   rs   compilesearchr{   r   r   r   r   r   r   r   r   stdoutr   r   r   r   r   r   r  r#  ru   r   r   <module>r,     s   '&  
 
 	 	    %GG$$  

99 
'&        2	 "rzz"ABII ,B ;?3'8' < <<  0  $SZZt 
& 
& $ X!0u  J
    s"   C? D ?D	D	DD