
    j'                    r   d dl mZ d dl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 	 ej        dk    Z ej        ej                  dk    Z ej                                                    dv 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)ClassVarnt   >   i686-64x64x86i368i686amd64x86_64returnstrc                     dd l m}  | j        S Nr   )polars._plr_plrRUNTIME_REPR)plrs    V/home/longshao/multi-rider-rag/.venv/lib/python3.11/site-packages/polars/_cpu_check.pyget_runtime_reprr   5   s        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.   ;   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         r0            r0      r0   _      r0   O   r   r0   W      [      )r/   r0      I   r0      D   r0      r3   r4   A   r0      rB   r0   Y   r7   rB   r0   r>   r   rB   r0   Q   r:   r;   r<   )r/   r9      |   $   r:   rF   r@   rH      rF   L   rH      r3   r4   r0   r5   r0   r6   r7   r0   r8   r   r0   r9   r:   r6   r;   r<          i   @   c                  2    e Zd ZU d dD             Zded<   dS )CPUID_structc                     g | ]}|t           fS  )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__rZ   __annotations__rR   r   r   rP   rP      sH         2 2;2 2 2H      r   rP   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   rP   r   func_ptr)	selfopcsizecodemsgrw   libcrx   	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   rV   intrX   rP   c                P    t                      }|                     |||           |S )N)rP   r   )r   rV   rX   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 r   )rd   r   rf   VirtualFreero   r
   r   r	   rp   rt   _MEM_RELEASE)r   s    r   __del__zCPUID.__del__   sW     	=+1DH (-5x,IDH )H  A|<<<<<	= 	=r   N)r   ra   )r   )rV   r   rX   r   r   rP   )r[   r\   r]   r   r   r   rR   r   r   r`   r`      sV        ;- ;- ;- ;-z    
= = = = = =r   r`   dict[str, bool]c                    t           si S 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 )NrC   r   r5   l       i   rL   rM   i   i   i  @ i      i   r          )sse3ssse3fma
cmpxchg16bzsse4.1zsse4.2movbepopcnt	pclmulqdqavxbmi1bmi2avx2lzcnt)_SUPPORTS_CPUIDr`   boolrX   rW   )cpuidcpuid1cpuid7cpuid81hs       r   _read_cpu_flagsr      sV    	 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   feature_flagsra   c                   d |                      d          D             }d |D             }|rt          j                            d          rd S t	                      }g }|D ]7}||vrd|}t          |          ||         s|                    |           8|r:dd l}|                    dd	                    |           d	t          d
           d S d S )Nc                b    g | ],}|                     d           |                    d          -S )-+)
startswithlstriprS   fs     r   rU   z#check_cpu_flags.<locals>.<listcomp>   sC       q||C?P?P	  r   ,c                "    g | ]}|r|d k    
|S )z
ctr-staticrR   r   s     r   rU   z#check_cpu_flags.<locals>.<listcomp>   s7        l"" 	
"""r   POLARS_SKIP_CPU_CHECKz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 `polars[rtcompat]` 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.
rC   )
stacklevel)splitr&   environgetr   r   appendwarningswarnjoinRuntimeWarning)r   expected_cpu_flagssupported_cpu_flagsmissing_featuresr   r   r   s          r   check_cpu_flagsr      sK    ,22377   #    0G!H!H )++ ' ''''0100Cs###"1% 	'##A&&& 
 
YY      	 	
 	
 	
 	
 	

 
r   )r   r   )r   r    )r   r   )r   r   r   ra   )#
__future__r   r)   r&   platformr   r   r   r   r   r	   r
   typingr   namerd   sizeofre   machinelowerr   r   r.   rk   rg   rj   rq   rr   r   rs   	StructurerP   r`   r   r   rR   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/	"("$$**,, 1    
E 
E 
E 
E4      $      6#   G= G= G= G= G= G= G= G=T   8*
 *
 *
 *
 *
 *
r   