
    /;jik3                     L   d dl Z d dlZd dlZd dlmZ d dlmZmZ d dl	m
Z
 d Z ed          Z ed          Z ed          Z ed          Z ed	          Z ed
          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z ed          Z  ed          Z! ed          Z" ed          Z# ed          Z$ ed          Z% ed          Z& ed           Z' ed!          Z( ed"          Z) ed#          Z* ed$          Z+ ed%          Z, G d& d'          Z- G d( d)          Z. G d* d+e/          Z0 G d, d-e/          Z1d. Z2e j3        dd/         d0k    re2nej4        Z5 e0            Z6d1 Z7d2 Z8 G d3 d4e/          Z9 G d5 d6e/          Z:d7 Z;d8 Z< G d9 d:e/          Z=dS );    N)_decode_string_is_shutting_down)get_library_namec                 b    t          | t          j        fi           }t          j        |          S N)typectypes	StructurePOINTER)namenewclss     N/root/voice-cloning/.venv/lib/python3.11/site-packages/llvmlite/binding/ffi.py_make_opaque_refr   
   s)    $)+R00F>&!!!    LLVMContext
LLVMModule	LLVMValueLLVMTypeLLVMExecutionEngineLLVMPassManagerBuilderLLVMPassManagerLLVMTargetDataLLVMTargetLibraryInfo
LLVMTargetLLVMTargetMachineLLVMMemoryBufferLLVMAttributeListIteratorLLVMElementIteratorLLVMAttributeSetIteratorLLVMGlobalsIteratorLLVMFunctionsIteratorLLVMBlocksIteratorLLVMArgumentsIteratorLLVMInstructionsIteratorLLVMOperandsIteratorLLVMIncomingBlocksIteratorLLVMTypesIteratorLLVMObjectCacheLLVMObjectFileLLVMSectionIteratorLLVMOrcLLJITRefLLVMOrcDylibTrackerRefLLVMTimePassesHandlerLLVMPipeLineTuningOptionsLLVMModulePassManagerLLVMFunctionPassManagerLLVMPassBuilderc                   0    e Zd ZdZd Zd Zd Zd Zd ZdS )	_LLVMLocka6  A Lock to guarantee thread-safety for the LLVM C-API.

    This class implements __enter__ and __exit__ for acquiring and releasing
    the lock as a context manager.

    Also, callbacks can be attached so that every time the lock is acquired
    and released the corresponding callbacks will be invoked.
    c                 D    t          j                    | _        g | _        d S r   )	threadingRLock_lock_cblistselfs    r   __init__z_LLVMLock.__init__;   s     _&&
r   c                 >    | j                             ||f           dS )zRegister callbacks that are invoked immediately after the lock is
        acquired (``acq_fn()``) and immediately before the lock is released
        (``rel_fn()``).
        N)r8   appendr:   acq_fnrel_fns      r   registerz_LLVMLock.registerA   s%    
 	VV,-----r   c                 >    | j                             ||f           dS )z)Remove the registered callbacks.
        N)r8   remover>   s      r   
unregisterz_LLVMLock.unregisterH   s%     	VV,-----r   c                 f    | j                                          | j        D ]\  }} |             d S r   )r7   acquirer8   r>   s      r   	__enter__z_LLVMLock.__enter__M   sB    
"l 	 	NFFFHHHH	 	r   c                 f    | j         D ]\  }} |             | j                                         d S r   )r8   r7   release)r:   exc_detailsr?   r@   s       r   __exit__z_LLVMLock.__exit__S   s>    "l 	 	NFFFHHHH
r   N)	__name__
__module____qualname____doc__r;   rA   rD   rG   rK    r   r   r3   r3   2   si           . . .. . .
      r   r3   c                        e Zd Zd Zd Zd ZdS )_suppress_cleanup_errorsc                     || _         d S r   )_context)r:   contexts     r   r;   z!_suppress_cleanup_errors.__init__[   s    r   c                 4    | j                                         S r   )rT   rG   r9   s    r   rG   z"_suppress_cleanup_errors.__enter__^   s    }&&(((r   c                 ^    	 | j                             |||          S # t          $ r Y d S w xY wr   )rT   rK   PermissionError)r:   exc_type	exc_value	tracebacks       r   rK   z!_suppress_cleanup_errors.__exit__a   sC    	=))(IyIII 	 	 	DD	s    
,,N)rL   rM   rN   r;   rG   rK   rP   r   r   rR   rR   Z   sA             ) ) )    r   rR   c                   n    e Zd ZdZg dZd Zd Zed             Zd Z	ed             Z
ed             Zd	S )
_lib_wrapperz{Wrap libllvmlite with a lock such that only one thread may access it at
    a time.

    This class duck-types a CDLL.
    )_lib_handle_fntabr7   c                 H    d | _         i | _        t                      | _        d S r   )r^   r_   r3   r7   r9   s    r   r;   z_lib_wrapper.__init__p   s     [[


r   c                    d}t                               d          d         }t                      }t          t	          ||                    5 }	 t          j        t          |                    | _         t          | j        |                       nG# t          $ r d| d| d}t          |          t          $ r d| d| d	}t          |          w xY w	 d d d            d S # 1 swxY w Y   d S )
NLLVMPY_GetVersionInfo.r   z(Could not find/load shared object file 'z' from resource location: 'z'. This could mean that the library literally cannot be found, but may also mean that the permissions are incorrect or that a dependency of/a symbol in the library could not be resolved.z-During testing of symbol lookup, the symbol 'z%' could not be found in the library '')rL   
rpartitionr   rR   _importlib_resources_pathr	   CDLLstrr^   getattrOSErrorAttributeError)r:   test_symmod_namelib_namelib_pathmsgs         r   	_load_libz_lib_wrapper._load_libu   s   *&&s++A.#%%%&?&.': ': ; ; 	#>F##);s8}}#=#= 3((335555 	# 	# 	##( # #3;# # # cll"! # # #'#' '#' ' ' cll"# 6	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	# 	#s,   C)ABC)ACC))C-0C-c                 F    | j         s|                                  | j         S r   )r^   rq   r9   s    r   _libz_lib_wrapper._lib   s(      	NNr   c                     	 | j         |         S # t          $ r Y nw xY wt          | j        |          }t	          | j        |          }|| j         |<   |S r   )r_   KeyErrorri   rs   _lib_fn_wrapperr7   )r:   r   cfnwrappeds       r   __getattr__z_lib_wrapper.__getattr__   si    	;t$$ 	 	 	D	 di&&!$*c22#Ds    
c                     | j         j        S )zgThe name of the library passed in the CDLL constructor.

        For duck-typing a ctypes.CDLL
        )rs   _namer9   s    r   r{   z_lib_wrapper._name   s     yr   c                     | j         j        S )z]The system handle used to access the library.

        For duck-typing a ctypes.CDLL
        )rs   _handler9   s    r   r}   z_lib_wrapper._handle   s     y  r   N)rL   rM   rN   rO   	__slots__r;   rq   propertyrs   ry   r{   r}   rP   r   r   r]   r]   h   s         
 322I! ! !
# # #:     X 	 	 	   X ! ! X! ! !r   r]   c                       e Zd ZdZddgZd Zed             Zej        d             Zed             Z	e	j        d             Z	d	 Z
d
S )rv   zWraps and duck-types a ctypes.CFUNCTYPE to provide
    automatic locking when the wrapped function is called.

    TODO: we can add methods to mark the function as threadsafe
          and remove the locking-step on call when marked.
    r7   _cfnc                 "    || _         || _        d S r   r7   r   )r:   lockrw   s      r   r;   z_lib_fn_wrapper.__init__   s    
			r   c                     | j         j        S r   r   argtypesr9   s    r   r   z_lib_fn_wrapper.argtypes   s    y!!r   c                     || j         _        d S r   r   )r:   r   s     r   r   z_lib_fn_wrapper.argtypes   s    %	r   c                     | j         j        S r   r   restyper9   s    r   r   z_lib_fn_wrapper.restype   s    y  r   c                     || j         _        d S r   r   )r:   r   s     r   r   z_lib_fn_wrapper.restype   s    #	r   c                 ^    | j         5   | j        |i |cd d d            S # 1 swxY w Y   d S r   r   )r:   argskwargss      r   __call__z_lib_fn_wrapper.__call__   s    Z 	. 	.49d-f--	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	. 	.s   "&&N)rL   rM   rN   rO   r~   r;   r   r   setterr   r   rP   r   r   rv   rv      s          &!I   " " X" _& & _& ! ! X! ^$ $ ^$. . . . .r   rv   c                 T    t          j        t          j        |           |z            S )a  Replacement implementation of `import.resources.path` to avoid
    deprecation warning following code at importlib_resources/_legacy.py
    as suggested by https://importlib-resources.readthedocs.io/en/latest/using.html#migrating-from-legacy

    Notes on differences from importlib.resources implementation:

    The `_common.normalize_path(resource)` call is skipped because it is an
    internal API and it is unnecessary for the use here. What it does is
    ensuring `resource` is a str and that it does not contain path separators.
    )_impresas_filefiles)packageresources     r   _importlib_resources_path_replr      s#     ?7=11H<===r      )   
   c                 F    t           j                            | |           dS )z~Register callback functions for lock acquire and release.
    *acq_fn* and *rel_fn* are callables that take no arguments.
    N)libr7   rA   r?   r@   s     r   register_lock_callbackr      s"     Ivv&&&&&r   c                 F    t           j                            | |           dS )zRemove the registered callback functions for lock acquire and release.
    The arguments are the same as used in `register_lock_callback()`.
    N)r   r7   rD   r   s     r   unregister_lock_callbackr      s"     I(((((r   c                       e Zd ZdZdS )_DeadPointerz:
    Dummy class to make error messages more helpful.
    N)rL   rM   rN   rO   rP   r   r   r   r      s           r   r   c                       e Zd ZdZ e            Zed             ZddZd Z	d Z
d Zefd	Zd
 Zd ZeZed             ZdS )OutputStringz<
    Object for managing the char* output of LLVM APIs.
    c                 T     | t          j        |t           j                            S )a%  Constructing from a pointer returned from the C-API.
        The pointer must be allocated with LLVMPY_CreateString.

        Note
        ----
        Because ctypes auto-converts *restype* of *c_char_p* into a python
        string, we must use *c_void_p* to obtain the raw pointer.
        )init)r	   castc_char_p)clsptrs     r   from_returnzOutputString.from_return  s%     sC99::::r   TNc                     ||nt          j        d           | _        t          j        | j                  | _        || _        d S r   )r	   r   _ptrbyref_as_parameter__owned)r:   ownedr   s      r   r;   zOutputString.__init__  s;     ,DD&/$2G2G	$l4955r   c                 v    | j         1| j        rt                              | j                    d | _         | `d S d S r   )r   r   r   LLVMPY_DisposeStringr   r9   s    r   closezOutputString.close  sE    9 { 4((333DI###	 ! r   c                     | S r   rP   r9   s    r   rG   zOutputString.__enter__  s    r   c                 .    |                                   d S r   r   r:   rY   exc_valexc_tbs       r   rK   zOutputString.__exit__"      

r   c                 X     |            s| j         |                                   d S d S d S r   r   r:   r   s     r   __del__zOutputString.__del__%  s>     ! "" 	z%

	 	%%r   c                 R    | j         dS | j         j        }|J t          |          S )Nz<dead OutputString>)r   valuer   )r:   ss     r   __str__zOutputString.__str__,  s0    9((IO}}}a   r   c                 *    t          | j                  S r   boolr   r9   s    r   __bool__zOutputString.__bool__3      DIr   c                     | j         j        S )z:Get the raw bytes of content of the char pointer.
        )r   r   r9   s    r   byteszOutputString.bytes8  s     yr   )TN)rL   rM   rN   rO   r   r   classmethodr   r;   r   rG   rK   r   r   r   r   __nonzero__r   r   rP   r   r   r   r     s          "\^^N	; 	; [	;   
$ $ $     ):    ! ! !   K  X  r   r   c                 X    | 't          t                              |                     S dS )z,To wrap string return-value from C-API.
    N)rh   r   r   r   s    r   
ret_stringr   ?  s,     <++C00111 r   c                 H    | t                               |           j        S dS )z+To wrap bytes return-value from C-API.
    N)r   r   r   r   s    r   	ret_bytesr   F  s'     '',,22 r   c                       e Zd ZdZdZ e            ZdZd Zd Z	d Z
d Zed             Zd Zd	 Zefd
Zd Zd ZeZd ZdS )	ObjectRefzJ
    A wrapper around a ctypes pointer to a LLVM object ("resource").
    Fc                 \    |t          d          || _        || _        t          | _        d S )NzNULL pointer)
ValueErrorr   r   r   _capi)r:   r   s     r   r;   zObjectRef.__init__V  s/    ;^,,,	!


r   c                     	 | j         s| j        s|                                  |                                  dS # |                                  w xY w)zI
        Close this object and do any required clean-up actions.
        N)_closedr   _disposedetachr9   s    r   r   zObjectRef.close]  sJ    	<    KKMMMMMDKKMMMMs	   ": Ac                 8    | j         s| `d| _         d| _        dS dS )zN
        Detach the underlying LLVM resource without disposing of it.
        TN)r   r   r   r9   s    r   r   zObjectRef.detachg  s0     | 	#DLDIII	 	r   c                     dS )z
        Dispose of the underlying LLVM resource.  Should be overriden
        by subclasses.  Automatically called by close(), __del__() and
        __exit__() (unless the resource has been detached).
        NrP   r9   s    r   r   zObjectRef._disposep  s      r   c                     | j         S )zf
        Whether this object has been closed.  A closed object can't
        be used anymore.
        )r   r9   s    r   closedzObjectRef.closedw  s     |r   c                 f    t          | d          sJ | j        rt          | j        d          | S )Nr   z instance already closed)hasattrr   RuntimeError	__class__r9   s    r   rG   zObjectRef.__enter__  s?    tW%%%%%< 	Qt~~~OPPPr   c                 .    |                                   d S r   r   r   s       r   rK   zObjectRef.__exit__  r   r   c                 X     |            s| j         |                                   d S d S d S r   r   r   s     r   r   zObjectRef.__del__  s<      "" 	z%

	 	%%r   c                 *    t          | j                  S r   r   r9   s    r   r   zObjectRef.__bool__  r   r   c                     t          |d          sdS t          j        | j        d                   t          j        |j        d                   k    S )Nr   Fr   )r   r	   	addressofr   )r:   others     r   __eq__zObjectRef.__eq__  sK    uf%% 	5	!--UZ]++, 	,r   c                 n    t          t          j        | j        t          j                  j                  S r   )hashr	   r   r   c_void_pr   r9   s    r   __hash__zObjectRef.__hash__  s#    FK	6?;;ABBBr   N)rL   rM   rN   rO   r   r   r   r   r;   r   r   r   r   r   rG   rK   r   r   r   r   r   r   rP   r   r   r   r   M  s          G!\^^NF           X     ):    
  , , , KC C C C Cr   r   )>sysr	   r5   importlib.resources	resourcesr   llvmlite.binding.commonr   r   llvmlite.utilsr   r   LLVMContextRefLLVMModuleRefLLVMValueRefLLVMTypeRefLLVMExecutionEngineRefLLVMPassManagerBuilderRefLLVMPassManagerRefLLVMTargetDataRefLLVMTargetLibraryInfoRefLLVMTargetRefLLVMTargetMachineRefLLVMMemoryBufferRefr   r   r   r    r!   r"   r#   r$   r%   r&   r'   LLVMObjectCacheRefLLVMObjectFileRefLLVMSectionIteratorRefr+   r,   LLVMTimePassesHandlerRefLLVMPipelineTuningOptionsRefLLVMModulePassManagerRefLLVMFunctionPassManagerRefLLVMPassBuilderRefr3   rR   objectr]   rv   r   version_infopathrf   r   r   r   r   r   r   r   r   rP   r   r   <module>r
     s   



      % % % % % % E E E E E E E E + + + + + +" " "
 "!-00  ..,,z**))*?@@ ,,-EFF %%&788 $$%566 ++,CDD   ..''(;<< &&'9:: ,,-HII &&'<== ++,FGG &&'<== (()@AA %%&:;; (()@AA ++,FGG ''(>?? --.JKK $$%899 %%&788 $$%566 ))*?@@ ""#455))*BCC ++,CDD //0KLL ++,CDD --.GHH %%&788 % % % % % % % %P       J! J! J! J! J!6 J! J! J!Z. . . . .f . . .D> > > !$ 0! 4 ? ? <;"), 
 lnn' ' ') ) )    6   ; ; ; ; ;6 ; ; ;|2 2 23 3 3MC MC MC MC MC MC MC MC MC MCr   