
    .h#&                    4   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 	 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j4                        Z G d d      ZddZddZy)    )annotationsN)	CFUNCTYPEPOINTERc_longc_size_tc_uint32c_ulongc_void_p)ClassVarnt   c                 &    dd l m}  | j                  S Nr   )polars._plr_plrRUNTIME_REPR)plrs    O/var/www/html/ai-service/venv/lib/python3.12/site-packages/polars/_cpu_check.pyget_runtime_reprr   +   s        c                    	 t        j                         j                  dk(  rt        j                  dd      S t        j                  dd      S # t
        $ r/ ddlm}  t        j                  | 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$   1   sn    E88:);;|t<<;;{d;; E){{6..s3tDDEs   7A A 5B	B	)S         r&            r&      r&   _      r&   O   r   r&   W      [      )r%   r&      I   r&      D   r&      r)   r*   A   r&      r8   r&   Y   r-   r8   r&   r4   r   r8   r&   Q   r0   r1   r2   )r%   r/      |   $   r0   r<   r6   r>      r<   L   r>      r)   r*   r&   r+   r&   r,   r-   r&   r.   r   r&   r/   r0   r,   r1   r2          i   @   c                  Z    e Zd ZU dD  cg c]
  }|t        f c}}} Zded<   yc c}}} w )CPUID_struct)eaxebxecxedxz ClassVar[list[tuple[str, type]]]_fields_N)__name__
__module____qualname__r   rK   __annotations__).0rr   s   000r   rF   rF   ~   s-    ;2 2H2H.  2s   &rF   c                  &    e Zd ZddZdddZddZy)CPUIDc                   t         rMt        r!t        j                  d      | _        t
        }n8t        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                  j                  d |t$        t&        z  t(              | _        | j*                  sd}t-        |      t        j.                  | j*                  ||       nAdd l}t3               }|j4                  }t        j                  t        j                  t        j6                  f|_        t        j6                  |_        |j1                  d||j8                  |j:                  z  |j<                  |j>                  z        | _        t        j@                  t        j                  jC                  | j0                              | _        | j0                  jE                  |        || j*                  ||j<                  |jF                  z        dk7  rd}tI        |      tK        d tM        tN              tP        tP              } || j*                        | _)        y )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   rF   r   func_ptr)	selfopcsizecodemsgri   libcrj   	func_types	            r   __init__zCPUID.__init__   s    ";;~6%
 "==11##,--C3x%,,4DHH!!)	.DHH!!* --dK,68ODI 99A!#&&NN499dD1 $%D}}H!'&//6<< PH%||H		  4#5#550	DI (()D)DTYY)OPDIIIOOD!		4$..)HIQNB"3''dGL$98XN	!$)),r   c                @    t               }| j                  |||       |S )N)rF   ru   )rv   rG   rI   structs       r   __call__zCPUID.__call__   s    fc3'r   c                    t         rut        | j                  j                  _        t
        t        t        g| j                  j                  _        | j                  j                  | j                  dt               y y r   )rV   r   rX   VirtualFreera   r
   r   r	   rb   rf   _MEM_RELEASE)rv   s    r   __del__zCPUID.__del__   sO    +1DHH  (-5x,IDHH  )HH  A|< r   N)returnNone)r   )rG   intrI   r   r   rF   )rL   rM   rN   r}   r   r    r   r   rS   rS      s    ;-z
=r   rS   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 )Nr9   r   r+   l       i   rB   rC   i   i   i  @ i      i   r          )sse3ssse3fma
cmpxchg16bzsse4.1zsse4.2movbepopcnt	pclmulqdqavxbmi1bmi2avx2lzcnt)rS   boolrI   rH   )cpuidcpuid1cpuid7cpuid81hs       r   _read_cpu_flagsr      s%   GE1a[F1a[FZ#H VZZ6*+fjjF+,FJJ'*+6::12vzzW-.vzzW-.fjjG,-vzzW-.&**/0FJJ'*+VZZ6*+VZZ6*+VZZ6*+hllf-. r   c                   | rt         j                  j                  d      ry | j                  d      D cg c]  }|j	                  d       }}t               }g }|D ]-  }||vrd|}t        |      ||   r|j                  |       / |r0dd l}|j                  ddj                  |       dt        d	
       y y c c}w )NPOLARS_SKIP_CPU_CHECK,+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.
r9   )
stacklevel)r   environgetsplitlstripr   rt   appendwarningswarnjoinRuntimeWarning)feature_flagsfexpected_cpu_flagssupported_cpu_flagsmissing_featuresrz   r   s          r   check_cpu_flagsr      s    BJJNN+BC1>1D1DS1IJA!((3-JJ)+ '''*1%0Cs##"1%##A&'  
YY ! "  	 	
  Ks   C)r   str)r   zctypes.CDLL)r   zdict[str, bool])r   r   r   r   )
__future__r   r   r   r   r   r   r   r   r	   r
   typingr   namerV   sizeofrW   r   r$   r]   rY   r\   rc   rd   r   re   	StructurerF   rS   r   r   r   r   r   <module>r      s   0 #  	 T T T  ggoFMM&//*a/	
E4$  6## G= G=T2"
r   