
    ˀh'                    @   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!y)    )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   c                     t         S N)_POLARS_LTS_CPU     m/var/www/html/wine-match-dev/backend/winematch-backend/venv/lib/python3.12/site-packages/polars/_cpu_check.pyget_lts_cpur   5   s    r   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"   9   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$      r6   r$   Y   r+   r6   r$   r2   r   r6   r$   Q   r.   r/   r0   )r#   r-      |   $   r.   r:   r4   r<      r:   L   r<      r'   r(   r$   r)   r$   r*   r+   r$   r,   r   r$   r-   r.   r*   r/   r0          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   rI   __annotations__).0rr   s   000r   rD   rD      s-    ;2 2H2H.  2s   &rD   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   rD   r   func_ptr)	selfopcsizecodemsgrg   libcrh   	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 r   )rD   rs   )rt   rE   rG   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 )Nr   )rT   r   rV   VirtualFreer_   r
   r   r	   r`   rd   _MEM_RELEASE)rt   s    r   __del__zCPUID.__del__   sO    +1DHH  (-5x,IDHH  )HH  A|< r   NreturnNone)r   )rE   intrG   r   r   rD   )rJ   rK   rL   r{   r~   r   r   r   r   rQ   rQ      s    ;-z
=r   rQ   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 )Nr7   r   r)   l       i   r@   rA   i   i   i  @ i      i   r          )sse3ssse3fma
cmpxchg16bzsse4.1zsse4.2movbepopcnt	pclmulqdqavxbmi1bmi2avx2lzcnt)rQ   boolrG   rF   )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                    t         rt        j                  j                  d      ry t         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.
r7   )
stacklevel)_POLARS_FEATURE_FLAGSr   environgetsplitlstripr   rr   appendwarningswarnjoinRuntimeWarning)fexpected_cpu_flagssupported_cpu_flagsmissing_featuresrx   r   s         r   check_cpu_flagsr      s     BJJNN3J$K1F1L1LS1QRA!((3-RR)+ '''*1%0Cs##"1%##A&'  
YY ! "  	 	
  Ss   C	)r   r   )r   zctypes.CDLL)r   zdict[str, bool]r   )"
__future__r   r   r   r   r   r   r   r   r	   r
   typingr   _POLARS_ARCHr   r   namerT   sizeofrU   r   r"   r[   rW   rZ   ra   rb   r   rc   	StructurerD   rQ   r   r   r   r   r   <module>r      s   0 #  	 T T T   @  ggoFMM&//*a/	
E4$  6## G= G=T2"
r   