
    shr#                     :    S SK r S SKJrJrJrJr   " S S\5      rg)    N)contextvaluestypes_utilsc                       \ rS rSrS\R
                  4S jrS rS rS r	SS jr
SS	 jrS
 r\S 5       r\S 5       rS rS rSS jrSS jrS rS rS rS rS rS rSrg)Module    c                     X l         Xl        SU l        [        R                  " 5       U l        SU l        [        R                  " 5       U l	        / U l
        0 U l        0 U l        g )Nr
   zunknown-unknown-unknown)r   namedata_layoutr   	NameScopescopetriplecollectionsOrderedDictglobalsmetadatanamedmetadata_metadatacache)selfr   r   s      f/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/llvmlite/ir/module.py__init__Module.__init__   sR    	%%'
/"..0     c                 ,   / nU H  nUc  [         R                  " 5       " S 5      nOX[        U[        5      (       a  [        R
                  " X5      nO,[        U[        [        45      (       a  U R                  U5      nUR                  U5        M     U$ N)
r   MetaDataType
isinstancestrr   MetaDataStringlisttupleadd_metadataappend)r   operands	fixed_opsops       r   _fix_metadata_operandsModule._fix_metadata_operands   s}    	Bz'')$/B$$**44Bu..&&r*R   r   c                     / nU HC  u  p4[        U[        [        45      (       a  U R                  U5      nUR	                  X445        ME     U$ r   )r   r"   r#   r$   r%   )r   r&   r'   r   r(   s        r   _fix_di_operandsModule._fix_di_operands$   sL    	 HD"tUm,,&&r*dZ(	 !
 r   c                 T   [        U[        [        45      (       d  [        SU< 35      eU R	                  U5      n[        U5      nX R
                  ;  aC  [        U R                  5      n[        R                  " X[        U5      S9nX@R
                  U'   U$ U R
                  U   nU$ )z
Add an unnamed metadata to the module with the given *operands*
(a sequence of values) or return a previous equivalent metadata.
A MDValue instance is returned, it can then be associated to
e.g. an instruction.
z1expected a list or tuple of metadata values, got r   )r   r"   r#   	TypeErrorr)   r   lenr   r   MDValuer    )r   r&   keynmds        r   r$   Module.add_metadata-   s     (T5M22(03 4 4..x8Ho)))DMM"ASV<B')$ 	 $$S)B	r   c           	      4   [        [        U R                  UR                  5       5      5      5      nXU4nX@R                  ;  aD  [        U R                  5      n[        R                  " XX[        U5      S9nX`R                  U'   U$ U R                  U   nU$ )a3  
Add debug information metadata to the module with the given
*operands* (a dict of values with string keys) or return
a previous equivalent metadata.  *kind* is a string of the
debug information kind (e.g. "DICompileUnit").

A DIValue instance is returned, it can then be associated to e.g.
an instruction.
r/   )
r#   sortedr,   itemsr   r1   r   r   DIValuer    )r   kindr&   is_distinctr3   r4   dis          r   add_debug_infoModule.add_debug_infoA   s      5 5hnn6F GHI{+)))DMM"A4AOB')$ 	 $$S)B	r   Nc                    XR                   ;   a  U R                   U   nO$[        R                  " U 5      =o0R                   U'   Uby  [        U[        R                  5      (       d  U R                  U5      n[        UR                  [        R                  5      (       d  [        SU< 35      eUR                  U5        U$ )ae  
Add a named metadata node to the module, if it doesn't exist,
or return the existing node.
If *element* is given, it will append a new element to
the named metadata node.  If *element* is a sequence of values
(rather than a metadata value), a new unnamed node will first be
created.

Example::
    module.add_named_metadata("llvm.ident", ["llvmlite/1.0"])
z%wrong type for metadata element: got )r   r   NamedMetaDatar   Valuer$   typer   r   r0   add)r   r   elementnmds       r   add_named_metadataModule.add_named_metadataU   s     %%%$$T*C-3-A-A$-GGC$$T*gv||44++G4gllE,>,>??#*!- . .GGG
r   c                      U R                   U   $ )z
Return the metadata node with the given *name*.  KeyError is raised
if no such node exists (contrast with add_named_metadata()).
)r   r   r   s     r   get_named_metadataModule.get_named_metadatan   s    
 !!$''r   c                     U R                   R                  5        Vs/ s H&  n[        U[        R                  5      (       d  M$  UPM(     sn$ s  snf )z9
A list of functions declared or defined in this module.
)r   r   r   Function)r   vs     r   	functionsModule.functionsu   sD    
  <<..0 30aa1 0 3 	3 3s   #AAc                 6    U R                   R                  5       $ )z.
An iterable of global values in this module.
)r   r   r   s    r   global_valuesModule.global_values}   s    
 ||""$$r   c                      U R                   U   $ )z
Get a global value by name.
)r   rJ   s     r   
get_globalModule.get_global   s     ||D!!r   c                 l    UR                   U R                  ;  d   eXR                  UR                   '   g)z
Add a new global value.
N)r   r   )r   globalvalues     r   
add_globalModule.add_global   s.     t||333)4[%%&r   c                 8    U R                   R                  U5      $ )z:
Get a unique global name with the following *name* hint.
)r   deduplicaterJ   s     r   get_unique_nameModule.get_unique_name   s     zz%%d++r   c                 H  ^^ UU4S jnTS;   a  TS   R                   /nOT Vs/ s H  ofR                   PM     nnSR                  T/U-   5      nXpR                  ;   a  U R                  U   $ Ub  GO[        T5      S:X  aG  TS:X  aA  [        R
                  " [        R                  " 5       [        R                  " S5      /5      nGO@[        T5      S:X  a  TS:X  a5  [        R
                  " TS   TS   [        R                  " S5      /5      nGOTS	:X  a  [        R
                  " TS   TS
-  5      nGOTS:X  a1  [        R
                  " TS   [        R                  " S5      /5      nGOTS:X  a-  [        R
                  " [        R                  " S5      T5      nGOg[        R
                  " TS   T5      nGOK[        T5      S
:X  a  TS:X  a_  TS   [        R                  " S5      TS   [        R                  " S5      /m[        R
                  " [        R                  " 5       T5      nOTS;   a6  TS   [        R                  " S5      /m[        R
                  " TS   T5      nOU" 5         O[        T5      S:X  a}  TS;   aE  T[        R                  " S5      /-   m[        R
                  " [        R                  " 5       T5      nO9TS:X  a$  TS   /S-  m[        R
                  " TS   T5      nOU" 5         OU" 5         [        R                  " XUS9$ s  snf )Nc                  6   > [        ST [        T5      4-  5      e)Nz"unknown intrinsic %r with %d types)NotImplementedErrorr1   )	intrinsictyss   r   _error(Module.declare_intrinsic.<locals>._error   s$    %&J)2CH(='> ? ?r   >   llvm.fma	llvm.ctlz	llvm.cttzr   .zllvm.assume   z	llvm.powi    zllvm.pow   zllvm.convert.from.fp16   zllvm.convert.to.fp16zllvm.memset   >   ri   rj      )zllvm.memcpyzllvm.memmoverh   r/   )
intrinsic_namejoinr   r1   r   FunctionTypeVoidTypeIntTyper   rN   )r   rd   re   fntyrf   suffixestr   s    ``     r   declare_intrinsicModule.declare_intrinsic   s   	? >>A--.H256#Q((#H6xxh./<<<<%%X]yM9%%enn&6q9I8JKDX]K'))#a&3q65==;L2MNj())#a&#':66))#a&5==3D2EF44))%--*;SA))#a&#6X]M)1vu}}Q/Q}}Q')))%..*:C@881vu}}Q/0))#a&#6X];;U]]1-..))%..*:C@j(1vhl))#a&#6Ht55W 7s   Lc                 .    U R                   R                  $ r   )r   identified_typesrS   s    r   get_identified_typesModule.get_identified_types   s    ||,,,r   c                     U R                  5       R                  5        Vs/ s H  nUR                  5       PM     nnX R                  R                  5        Vs/ s H  n[	        U5      PM     sn-  nU$ s  snf s  snf r   )r~   r   get_declarationr   r    )r   itlinesrO   s       r   _get_body_linesModule._get_body_lines   s}      446==?A?R ##%? 	 A 	,,"5"5"78"7Q#a&"788	A 9s   A5A:c           
      (   / nU R                   R                  5        HD  u  p#UR                  SR                  USR	                  S UR
                   5       5      S95        MF     U R                   H  nUR                  [        U5      5        M     U$ )Nz!{name} = !{{ {operands} }}z, c              3   B   #    U  H  nUR                  5       v   M     g 7fr   )get_reference).0is     r   	<genexpr>-Module._get_metadata_lines.<locals>.<genexpr>   s"      +@4>q ,-??+<+<4>s   )r   r&   )r   r9   r%   formatrs   r&   r   r    )r   mdbufkrO   r5   s        r   _get_metadata_linesModule._get_metadata_lines   s    &&,,.DALL6== +@45JJ+@ "@ > A B / --BLLR!  r   c                 @    SR                  U R                  5       5      $ N
)rs   r   rS   s    r   _stringify_bodyModule._stringify_body   s    yy--/00r   c                 @    SR                  U R                  5       5      $ r   )rs   r   rS   s    r   _stringify_metadataModule._stringify_metadata   s    yy11344r   c                     / nUSU R                   < S3SU R                  < S3SU R                  < S3S/-  nXR                  5       -  nXR	                  5       -  nSR                  U5      $ )Nz; ModuleID = ""ztarget triple = "ztarget datalayout = "r
   r   )r   r   r   r   r   rs   )r   r   s     r   __repr__Module.__repr__   sl    #'99.&*kk3*.*:*:<	 	 	%%''))++yyr   )	r   r   r   r   r   r   r   r   r   )Fr   )r
   ) N)__name__
__module____qualname____firstlineno__r   global_contextr   r)   r,   r$   r>   rG   rK   propertyrP   rT   rW   r[   r_   rz   r~   r   r   r   r   r   __static_attributes__r   r   r   r   r      s    (>(> !((2( 3 3 % %"5,36j-15 r   r   )r   llvmlite.irr   r   r   r   objectr   r   r   r   <module>r      s     6 6p V p r   