
    q-Ph'                    0   d dl mZ d dlZd dlZd dlmZmZmZmZmZm	Z	m
Z
 d dlmZ 	 dZdZdZej        dk    Z ej        ej
                  d	k    ZddZddZg dZg dZg dZdZdZdZdZ G d dej                  Z G d d          Zd dZ d!dZ!dS )"    )annotationsN)	CFUNCTYPEPOINTERc_longc_size_tc_uint32c_ulongc_void_p)ClassVarzx86-64ze+sse3,+ssse3,+sse4.1,+sse4.2,+popcnt,+cmpxchg16b,+avx,+avx2,+fma,+bmi1,+bmi2,+lzcnt,+pclmulqdq,+movbeFnt   returnboolc                     t           S N)_POLARS_LTS_CPU     Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/polars/_cpu_check.pyget_lts_cpur   5   s    r   ctypes.CDLLc                    	 t          j                    j        dk    rt          j        dd          S t          j        dd          S # t
          $ r2 ddlm}  t          j        |                     d          d          cY S w xY w)	NDarwinz
libc.dylibT)	use_errnoz	libc.so.6r   )utilc)osunamesysnamectypesCDLL	Exceptionr   find_library)ctutils    r   _open_posix_libcr%   9   s    E8::));|t<<<<;{d;;;; E E E)))))){6..s33tDDDDDDEs   1A
 A
 
9BB)S         r'            r'      r'   _      r'   O   r   r'   W      [      )r&   r'      I   r'      D   r'      r*   r+   A   r'      r9   r'   Y   r.   r9   r'   r5   r   r9   r'   Q   r1   r2   r3   )r&   r0      |   $   r1   r=   r7   r?      r=   L   r?      r*   r+   r'   r,   r'   r-   r.   r'   r/   r   r'   r0   r1   r-   r2   r3          i   @   c                  2    e Zd ZU d dD             Zded<   dS )CPUID_structc                     g | ]}|t           fS r   )r   ).0rs     r   
<listcomp>zCPUID_struct.<listcomp>   s)     2 2 2H2 2 2r   )eaxebxecxedxz ClassVar[list[tuple[str, type]]]_fields_N)__name__
__module____qualname__rP   __annotations__r   r   r   rG   rG      sH         2 2;2 2 2H      r   rG   c                  (    e Zd ZddZddd	Zdd
ZdS )CPUIDr   Nonec                :   t           rFt          r!t          j        d          | _        t
          }n3t          j        j        | _        t          }nt          rt          nt          }t          |          }t          j        |z  | }t           rt          | j        j        _        t          j        t          j        t          j        t          j        g| j        j        _        | j                            d |t$          t&          z  t(                    | _        | j        sd}t-          |          t          j        | j        ||           ndd l}t3                      }|j        }t          j        t          j        t          j        f|_        t          j        |_        |                    d||j        |j        z  |j        |j        z            | _        t          j         t          j        !                    | j                            | _        | j        "                    |            || j        ||j        |j#        z            dk    rd}tI          |          tK          d tM          tN                    tP          tP                    } || j                  | _)        d S )Nzkernel32.dllz)could not allocate memory for CPUID checkr   z*could not execute mprotect for CPUID check)*_IS_WINDOWS	_IS_64BITr    r!   win_WINDOWS_64_OPCwindllkernel32_CDECL_32_OPC_POSIX_64_OPClenc_ubyter
   VirtualAllocrestyper   r	   argtypes_MEM_COMMIT_MEM_RESERVE_PAGE_EXECUTE_READWRITEaddrMemoryErrormemmovemmapr%   mprotectc_intMAP_PRIVATEMAP_ANONYMOUS	PROT_READ
PROT_WRITE	addressoffrom_bufferwrite	PROT_EXECRuntimeErrorr   r   rG   r   func_ptr)	selfopcsizecodemsgrm   libcrn   	func_types	            r   __init__zCPUID.__init__   s    	@ $ ";~66%
 "=1##,?---C3xx%, $	(,4DH!)	.DH!* --dK,68O DI 9 'A!#&&&N49dD1111KKK $%%D}H!'&/6< PH%|H		 4#550	 DI ()D)DTY)O)OPPDIIOOD!!!x	4$.)HIIQNNB"3'''dGL$9$98XNN	!	$),,r   r   rL   intrN   rG   c                P    t                      }|                     |||           |S r   )rG   ry   )rz   rL   rN   structs       r   __call__zCPUID.__call__   s&    fc3'''r   c                    t           rat          | j        j        _        t
          t          t          g| j        j        _        | j                            | j	        dt                     d S d S )Nr   )rZ   r   r\   VirtualFreere   r
   r   r	   rf   rj   _MEM_RELEASE)rz   s    r   __del__zCPUID.__del__   sW     	=+1DH (-5x,IDH )H  A|<<<<<	= 	=r   Nr   rW   )r   )rL   r   rN   r   r   rG   )rQ   rR   rS   r   r   r   r   r   r   rV   rV      sV        ;- ;- ;- ;-z    
= = = = = =r   rV   dict[str, bool]c                    t                      }  | dd          } | dd          } | dd          }t          |j        dz            t          |j        dz            t          |j        dz            t          |j        dz            t          |j        dz            t          |j        d	z            t          |j        d
z            t          |j        dz            t          |j        dz            t          |j        dz            t          |j        dz            t          |j        dz            t          |j        dz            t          |j        dz            dS )Nr:   r   r,   l       i   rC   rD   i   i   i  @ i      i   r          )sse3ssse3fma
cmpxchg16bzsse4.1zsse4.2movbepopcnt	pclmulqdqavxbmi1bmi2avx2lzcnt)rV   r   rN   rM   )cpuidcpuid1cpuid7cpuid81hs       r   _read_cpu_flagsr      sG   GGEU1a[[FU1a[[FuZ##H VZ6*++fjF+,,FJ'*++6:122vzW-..vzW-..fjG,--vzW-..&*/00FJ'*++VZ6*++VZ6*++VZ6*++hlf-..  r   rW   c                    t           rt          j                            d          rd S d t                               d          D             } t                      }g }| D ]7}||vrd|}t          |          ||         s|                    |           8|r:dd l}|	                    dd
                    |           dt          d	
           d S d S )NPOLARS_SKIP_CPU_CHECKc                8    g | ]}|                     d           S )+)lstrip)rI   fs     r   rK   z#check_cpu_flags.<locals>.<listcomp>   s"    RRRA!((3--RRRr   ,zunknown feature flag: r   z[Missing required CPU features.

The following required CPU features were not detected:
    z, a  
Continuing to use this version of Polars on this processor will likely result in a crash.
Install the `polars-lts-cpu` package instead of `polars` to run Polars with better compatibility.

Hint: If you are on an Apple ARM machine (e.g. M1) this is likely due to running Python under Rosetta.
It is recommended to install a native version of Python that does not run under Rosetta x86-64 emulation.

If you believe this warning to be a false positive, you can set the `POLARS_SKIP_CPU_CHECK` environment variable to bypass this check.
r:   )
stacklevel)_POLARS_FEATURE_FLAGSr   environgetsplitr   rx   appendwarningswarnjoinRuntimeWarning)expected_cpu_flagssupported_cpu_flagsmissing_featuresr   r~   r   s         r   check_cpu_flagsr      s      BJNN3J$K$K RR1F1L1LS1Q1QRRR)++ ' ''''0100Cs###"1% 	'##A&&& 
 
YY      	 	
 	
 	
 	
 	

 
r   )r   r   )r   r   )r   r   r   )"
__future__r   r    r   r   r   r   r   r   r	   r
   typingr   _POLARS_ARCHr   r   namerZ   sizeofr[   r   r%   ra   r]   r`   rg   rh   r   ri   	StructurerG   rV   r   r   r   r   r   <module>r      s  0 # " " " " "  				 T T T T T T T T T T T T T T T T T T        @  goFM&/**a/	   
E 
E 
E 
E4      $      6#   G= G= G= G= G= G= G= G=T   2"
 "
 "
 "
 "
 "
r   