
    ڏDjy                        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Ze
j                  Z	 d dlZej&                  ZdZdZd	Z e	ej0                  j2                        Ze	d
        Ze	d        Ze G d d             Z G d d      Zy# e$ r e
j"                  ZY pw xY w# e$ r eZdZY lw xY w)    )	dataclassN   )safe_makedirscached_function)__version__z.gz z.zipi  @c                    t         j                  j                  |       }dt        |      |fz  j	                  d      }t        j                  |      }t        |d      5 }|j                  d      }|r%|j                  |       |j                  d      }|r%d d d        |j                         S # 1 sw Y   |j                         S xY w)Nz%d:%sUTF-8rbi  )ospathnormpathlenencodehashlibsha256openreadupdate	hexdigest)filenamer   prefixmfdatas         VC:\Crop_Prediction\Backend\crop-ai-system\venv\Lib\site-packages\Cython/Build/Cache.py	file_hashr   "   s    77H%DTD))11':FvA	dD	 !Qvve}HHTN66%=D !
 ;;=!
 ;;=s    8B11C	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        | d      S t         j
                  j                  t        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namesysplatformr   
expandusergetisdir	join_path)parents    r   get_cython_cache_dirr.   /   s     RZZ'zz,--F	ww'<<8#WW''(:;F ZZ^^$45F"''--'** 77iY788    c                   >    e Zd ZU dZeed<   dZeed<   dZeed<   d Z	y)FingerprintFlagsclanguageFpy_limited_api
np_pythranc                 Z    t        | j                  | j                  | j                  f      S N)strr3   r4   r5   )selfs    r   get_fingerprintz FingerprintFlags.get_fingerprintT   s"    DMM4#6#6HIIr/   N)
__name__
__module____qualname__r3   r8   __annotations__r4   boolr5   r:    r/   r   r1   r1   N   s&    Hc ND JJr/   r1   c                   H    e Zd Zd	dZ e       fdZd Zd Zd Zd Z	d
dZ
y)CacheNc                     |t        t               d      | _        n|| _        ||nt        | _        t
        j                  j                  | j                        s t        j                  | j                         y y )Ncompiler)r,   r.   r   MAX_CACHE_SIZE
cache_sizer   existsmakedirs)r9   r   rF   s      r   __init__zCache.__init__Y   sW    <!"6"8*EDIDI(2(>*Nww~~dii(KK		" )r/   c                 X   	 t        j                  t        j                  d            }|j	                  t        |      j                  d             t        |      D ]P  }t        j                  j                  |      d   dvs(|j	                  t        |      j                  d             R |j	                  |j                         j                  d             |j	                  |j                         j                  d             |j                         S # t        $ r Y yw xY w)a;  
        Return a fingerprint of a cython file that is about to be cythonized.

        Fingerprints are looked up in future compilations. If the fingerprint
        is found, the cythonization can be skipped. The fingerprint must
        incorporate everything that has an influence on the generated code.
        r
      )z.cz.cppz.hN)r   r   r   r   r   r   sortedr   r   splitextr:   r   OSError)r9   r   dependenciescompilation_optionsflagsr   xs          r   transitive_fingerprintzCache.transitive_fingerprintb   s    	{11':;AHHYx(//89L) ;77##A&q)1EEHHYq\009:; HHU**,33G<=HH(88:AA'JK;;=  		s   BD BD 	D)(D)c                 x    t        | j                  t        j                  j                  |      d|      |z   S )N-)r,   r   r   basename)r9   cfilefingerprintexts       r   fingerprint_filezCache.fingerprint_file}   s/    diiBGG,<,<U,C[!QRUXX	
r/   c                 `   t         j                  j                  | j                        st        | j                         | j	                  ||t
              }t         j                  j                  |      r|S | j	                  ||t              }t         j                  j                  |      r|S y r7   )r   r   rG   r   rZ   gzip_extzip_ext)r9   c_filerX   gz_fingerprint_filezip_fingerprint_files        r   lookup_cachezCache.lookup_cache   s     ww~~dii($))$"33FKR77>>-.&&#44V['R77>>./''r/   c                 t   t         j                  j                  |      d   }|t        k(  rWt        j                  |d        t        |d      5 }t        |d      5 }t        j                  ||       d d d        d d d        y |t        k(  r|t        j                  |d        t         j                  j                  |      }t        j                  |      5 }|j                         D ]  }|j                  ||        	 d d d        y t        d|       # 1 sw Y   xY w# 1 sw Y   y xY w# 1 sw Y   y xY w)NrK   r   wbz"Unsupported cache file extension: )r   r   rM   r\   utime	gzip_openr   shutilcopyfileobjr]   dirnamezipfileZipFilenamelistextract
ValueError)	r9   r^   cachedrY   gr   rh   zartifacts	            r   load_from_cachezCache.load_from_cache   s   ggv&q)(?HHVT"64( -A&$' -1&&q!,-- - G^HHVT"ggoof-G( 1A !

 1HIIh011 1 A#GHH- -- -1 1s0   D"D2D"(D.D	D""D+.D7c                 Z   |j                         }t        |      dk(  r[| j                  ||t              }t	        |d      5 }t        |dz   d      5 }t        j                  ||       d d d        d d d        nu| j                  ||t              }t        j                  |dz   dt              5 }|D ]1  }	|j                  |	t        j                  j                  |	             3 	 d d d        t        j                   |dz   |       y # 1 sw Y   xY w# 1 sw Y   /xY w# 1 sw Y   ;xY w)NrK   r   z.tmprc   w)get_generated_source_filesr   rZ   r\   r   re   rf   rg   r]   ri   rj   zipfile_compression_modewriter   r   rV   rename)
r9   r^   rX   compilation_result	artifactsrZ   r   ro   ziprq   s
             r   store_to_cachezCache.store_to_cache   s   &AAC	y>Q#44V[(Sfd# -q/&8$? -1&&q!,-- -  $44V['R 6)30H D ) DHIIh(8(8(BCDD
 			"V+-=>- -- -
D Ds0   DD	)D/7D!	D	DD!D*c                 J   	 t        j                  dddt        j                  j	                  | j                        gt         j
                        }|j                  }|j                  dk(  r=dt        |j                         j                         d         z  }|| j                  k  ry d}g }t        j                  | j                        D ]d  }t        | j                  |      }t        j                   |      }||j"                  z  }|j%                  |j&                  |j"                  |f       f || j                  kD  rLt)        t+        |            D ]4  \  }	}
}t        j,                  |       ||
z  }|| j                  |z  k  s4 y  y y # t        t        f$ r Y w xY w)Nduz-sz-k)stdoutr   i   )
subprocessrunr   r   abspathPIPEr   
returncodeintstripsplitrF   rN   rm   listdirr,   statst_sizeappendst_atimereversedrL   unlink)r9   ratiocompleted_processr   
total_sizeallfiler   stimesizes              r   cleanup_cachezCache.cleanup_cache   sh   
	 *tT277??499#=>z! '--F ++q0!C(<(<(>q(A$BB
/ 
JJtyy) 	6DTYY-DA!))#JJJ

AIIt45		6
 '$,VC[$9  dD		$d"
% 77	 ( $ 		s   B'F F"!F"r7   )g333333?)r;   r<   r=   rI   r1   rS   rZ   ra   rr   r|   r   r@   r/   r   rB   rB   X   s0    # BRAS6

I ? r/   rB   )dataclassesr   r'   r   r   rf   r   Utilsr   r   ri   r   r   zlibZIP_DEFLATEDrv   ImportError
ZIP_STOREDgzipr   re   r\   r]   rE   r   joinr,   r   r.   r1   rB   r@   r/   r   <module>r      s    ! 
 	    2  2&33		IH
 "BGGLL)	 	 	 9 9< J J Jo oS  2&112  IHs"   B B2 B/.B/2	B>=B>