
    hJ6                         S SK JrJrJrJrJr  S SKJr  SSKJ	r
  SSKJr  S SKJr  S SKJrJr  \" S5      r\4S	\S
\/ \4   4S jjr " S S\\   5      rg)    )SequenceListTypeVarTupleCallable)TritonSemantic   )_core)SliceLayout)GluonOpBuilder)flatten_values_to_irunflatten_ir_valuesTensorTycondmsg_fnc                 ,    U (       d  U" U" 5       5      eg N )r   r   categorys      f/var/www/fran/franai/venv/lib/python3.13/site-packages/triton/experimental/gluon/language/_semantic.py_checkr      s    vx       c                     ^  \ rS rSr% \R
                  r\r\\S'   S\4S jr	S r
S\\   S\\   4S jrS\S	\S
\4S jrS\S\S
\4U 4S jjrS\S
\\\4   4U 4S jjrS\S\\   S
\4U 4S jjrS\S\\   S
\4S jrS\S\S
\4U 4S jjrU 4S jrS\S\\   S\4U 4S jjrS rS rS rS rS rS  rS! rS" r S# r!S$ r"S% r#S& r$S' r%S( r&\'S) 5       r(S*\)\   S	\S
\\S+4   4S, jr*S-\)\   S.\)\   4S/ jr+S0r,U =r-$ )1GluonSemantic   builderc                     Xl         g r   r   )selfr   s     r   __init__GluonSemantic.__init__   s    r   c                     [         R                  " UR                  R                  UR                  U R
                  R                  UR                  5      5      nU R                  UR                  U5      $ r   )	ttgldistributed_typetypescalarshaper   get_gluon_layout_from_tensorhandletensor)r   r*   tys      r   _wrap_tensor_infer_layout'GluonSemantic._wrap_tensor_infer_layout   sP    ""6;;#5#5v||#'<<#L#LV]]#[]{{6=="--r   	lhs_shape	rhs_shapec                 `   [        U5      [        U5      :w  a  [        SU SU 35      e/ n[        U5       Hs  u  pEX$   nUS:X  a  UR                  U5        M"  US:X  d  Xe:X  a  UR                  U5        M@  [        S[	        U5      -   S-   [	        U5      -   S-   [	        U5      -   5      e   U$ )N!Cannot broadcast, rank mismatch: , r	   z?Cannot make_shape_compatible: incompatible dimensions at index : z and )len
ValueError	enumerateappendstr)r   r.   r/   	ret_shapeileftrights          r   _broadcast_shapesGluonSemantic._broadcast_shapes   s    y>S^+@2i[YZZ	 +GALEqy  '1*%-  &  "-/21v"68<"=?B4y"IKR"SUXY^U_"` a a , r   inputaxisreturnc                   ^^^ TR                    Vs/ s H  n[        R                  " U5      PM     nnUR                  TS5        TS:  a  T[	        TR                   5      -  m[        [        TR                  [        R                  5      U4S j5        TR                  R                  m[        [        T[        5      U4S j5        [        TR                  T:H  UU4S j5        [        R                  " TR                  R                  UTR                  5      nU R                  R                  TR                   TUR#                  U R                  5      5      nU R%                  Xe5      $ s  snf )Nr	   r   c                  $   > ST R                   < 3$ Nz=expected expand_dims input to be a distributed_type but got: r%   r?   s   r   <lambda>+GluonSemantic.expand_dims.<locals>.<lambda>6       VW\WaWaVder   c                     > ST  3$ )Nz;expected expand_dims input to have a SliceLayout, but got: r   )layouts   r   rG   rH   9   s    TU[T\]r   c                  (   > ST  STR                    3$ )Nz7expected expand_dims input layout to be sliced in axis z	 but got )dim)r@   rK   s   r   rG   rH   ;   s    PQUPVV_`f`j`j_klr   )r'   r#   _unwrap_if_constexprinsertr4   r   
isinstancer%   r$   rK   r   rM   r&   parentr   create_expand_dimsr)   to_irr*   )r   r?   r@   x	dst_shaperet_tyr)   rK   s    ``    @r   expand_dimsGluonSemantic.expand_dims.   s   ;@;;G;aT..q1;	Gq!!8C$$Dz%**d&;&;<e	g""z&+.]	_vzzT!l	n &&uzz'8'8)V]]S00tV\\RVR^R^E_`{{6**! Hs    E/abc                    > U R                  X5      u  p[        UR                  / :g  S5        [        TU ]  X5      nU R                  U5      $ )NzCannot join scalars in gluon)broadcast_impl_valuer   r'   superjoinr,   )r   rY   rZ   value	__class__s       r   r^   GluonSemantic.joinA   sG    ((.qww"}<=Q"--e44r   c                 j   > [         TU ]  U5      u  p#U R                  U5      U R                  U5      4$ r   )r]   splitr,   )r   rY   lhsrhsr`   s       r   rc   GluonSemantic.splitG   s5    7=#--c2D4R4RSV4WWWr   dimsc                 D   > [         TU ]  X5      nU R                  U5      $ r   )r]   permuter,   )r   r?   rg   r_   r`   s       r   ri   GluonSemantic.permuteK   s"    ,--e44r   r'   c                   ^^^ [        [        TR                  [        R                  5      U4S j5        TR                  R                  5       m[        [        T5      [        T5      :H  UU4S j5        TT:X  a  T$ [        T5       H3  u  p4TU   U:w  d  M  US:w  d  M  [        STU    SU SU ST ST 3
5      e   [        R                  " TR                  R                  TTR                  R                  5      nU R                  R                  TR                  UR                  U R                  5      5      nU R                  Xe5      $ )	Nc                  $   > ST R                   < 3$ rD   rE   rF   s   r   rG   4GluonSemantic.broadcast_impl_shape.<locals>.<lambda>Q   rI   r   c                     > ST ST  3$ )Nr1   r2   r   )r'   	src_shapes   r   rG   rm   S   s    7XYbXccefkel5mr   r	   z3Cannot broadcast, the expanded size of the tensor (z ) must match the existing size (z) at non-singleton dimension r3   r2   )r   rP   r%   r#   r$   get_block_shapesr4   r6   r5   r&   rK   r   create_broadcastr)   rS   r*   )r   r?   r'   r:   itemrV   r)   ro   s    ``    @r   broadcast_impl_shape"GluonSemantic.broadcast_impl_shapeO   s"   z%**d&;&;<e	gJJ//1	s9~U+-mnIL +GAQx4DAI #VW\]^W_V` aCCG& I%%&Cr)Bug"? @ @ ,
 &&uzz'8'8%ARARS..u||V\\$,,=WX{{6**r   rd   re   c                 t  >^^ UR                   mUR                   mTR                  5       (       a  TR                  5       (       d  [        TU ]  X5      $ [	        [        T[        R                  5      U4S j5        [	        [        T[        R                  5      U4S j5        TR                  5       nTR                  5       nU R                  X45      nTR                  TR                  :w  a%  [        STR                   STR                   35      eU R                  X5      nU R                  X%5      nX4$ )Nc                     > ST < 3$ )Nz@expected broadcast left input to be a distributed_type but got: r   )lhs_tys   r   rG   4GluonSemantic.broadcast_impl_value.<locals>.<lambda>g   s    YZ`Ycdr   c                     > ST < 3$ )NzAexpected broadcast right input to be a distributed_type but got: r   )rhs_tys   r   rG   rx   i   s    Z[aZder   zLayout mismatch in broadcast: z vs )r%   is_blockr]   r\   r   rP   r#   r$   rp   r=   rK   r5   rs   )	r   rd   re   r.   r/   r9   rw   rz   r`   s	         @@r   r\   "GluonSemantic.broadcast_impl_value_   s      (9(97/99z&$"7"78d	fz&$"7"78e	g ++-	++-	**9@	==FMM)=fmm_DQWQ^Q^P_`aa''7''7xr   c                 t   > X!-
  /n[         R                  " [         R                  XC5      n[        TU ]  XUS9$ )N)rV   )r#   r$   int32r]   arange)r   startendrK   r'   rV   r`   s         r   r   GluonSemantic.arangeu   s5    &&tzz5Aw~e~88r   rU   can_reorderc                 h   > [        U(       + S5        [        TU ]	  XU5      nU R                  U5      $ )Nz%can_reorder is not supported in gluon)r   r]   reshaper,   )r   r?   rU   r   r_   r`   s        r   r   GluonSemantic.reshapez   s1    ; GH+>--e44r   c                     [         R                  " UR                  X#5      nU R                  R	                  UR                  U R                  5      UR                  5      n[         R                  " XT5      $ r   )r#   r$   dtyper   create_splatrS   r)   r*   )r   r_   r'   rK   rV   r)   s         r   splatGluonSemantic.splat   sN    &&u{{EB**6<<+Eu||T{{6**r   c                 H    U R                  X#5      nU R                  XQU5      $ r   )make_scalarr   )r   r'   r_   r   rK   r&   s         r   fullGluonSemantic.full   s#    !!%/zz&00r   c                 n  ^ UR                   m[        [        T[        R                  5      U4S j5        [        R                  " TR
                  TR                  U5      nU R                  R                  UR                  U R                  5      UR                  5      n[        R                  " XC5      $ )Nc                     > ST < 3$ )Nz@expected convert_layout input to be a distributed_type but got: r   )r+   s   r   rG   .GluonSemantic.convert_layout.<locals>.<lambda>   s    YZ\Y_`r   )r%   r   rP   r#   r$   
element_tyr'   r   create_convert_layoutrS   r)   r*   )r   r_   rK   rV   r)   r+   s        @r   convert_layoutGluonSemantic.convert_layout   s|    ZZz"d334`	b&&r}}bhhG33FLL4NPUP\P\]{{6**r   c                 N   [         R                  " XX25      nUb@  U R                  R                  UR	                  U R                  5      UR
                  5      nO4U R                  R                  UR	                  U R                  5      5      n[         R                  " XaX#U5      $ r   )r#   shared_memory_descriptor_typer   create_local_allocrS   r)   shared_memory_descriptor)r   r   r'   rK   r_   r+   r)   s          r   allocate_sharedGluonSemantic.allocate_shared   sx    //
6Q\\44RXXdll5KU\\ZF\\44RXXdll5KLF,,VPUVVr   c                    [         R                  " UR                  UR                  U5      nU R                  R                  UR                  U R                  5      UR                  5      n[         R                  " XC5      $ r   )	r#   r$   r   r'   r   create_local_loadrS   r)   r*   )r   mem_descrK   rV   r)   s        r   shared_loadGluonSemantic.shared_load   sT    &&x~~x~~vN//T\\0JHOO\{{6**r   c                 d    U R                   R                  UR                  UR                  5        g r   )r   create_local_storer)   )r   r   r_   s      r   shared_storeGluonSemantic.shared_store   s    ''Fr   c                 N    U R                   R                  UR                  5        g r   )r   create_local_deallocr)   )r   r   s     r   shared_deallocGluonSemantic.shared_dealloc   s    ))(//:r   c                 8   UR                   n[        R                  " UR                  X4UR                  R
                  5      nU R                  nUR                  UR                  U5      UR                  U5      n[        R                  " U40 UR                  D6$ r   )rK   r#   r   r   r%   alloc_shaper   create_memdesc_subviewrS   r)   r   __dict__)r   r   offsetsr'   rK   r+   r   r)   s           r   _memdesc_subviewGluonSemantic._memdesc_subview   sr    //x}}OhOhi,,//0A8??T[\,,VCr{{CCr   c                     U R                   R                  S5      /UR                  -  nU R                  U5      R                  XT'   [        UR                  5      nX6U'   U R                  XU5      $ )Nr   )r   	get_int32rank	to_tensorr)   listr'   r   )r   r   r   lengthrM   r   r'   s          r   memdesc_sliceGluonSemantic.memdesc_slice   s`    <<))!,-=~~e,33X^^$c
$$X>>r   c                     UR                   SS  nU R                  R                  S5      /UR                  -  nU R	                  U5      R
                  US'   U R                  XU5      $ )Nr	   r   )r'   r   r   r   r   r)   r   )r   r   indexr'   r   s        r   memdesc_indexGluonSemantic.memdesc_index   s]    qr"<<))!,-=^^E*11
$$X>>r   c                 \   [        U5      [        UR                  5      :X  d!   SUR                   S[        U5       S35       eU Vs/ s H  o1R                  U   PM     nnUR                  R                  nUS [        U5      UR                  -
   nXb Vs/ s H   o5[        U5      UR                  -
  S  U   PM"     sn-  nU R
                  R                  UR                  U5      nU R
                  R                  U5      n[        R                  " XqR                  UXhS9$ s  snf s  snf )Nzsource rank (z) and order length (z) must match)r   r'   r   rK   )r4   r'   r   r%   r   r   create_memdesc_transr)   get_gluon_layout_from_memdescr#   r   r   )	r   r   orderr:   r'   r   new_alloc_shaper)   rK   s	            r   memdesc_transGluonSemantic.memdesc_trans   s#   5zSNN  	i,X]]O;OPSTYPZ|[gh	i  -22Eq"E2mm//%&Gs;'7(--'GHW\]W\RSK(88==(H(IJ1MW\]]228??EJ;;FC,,VV[9HY 	Y 3 ^s   D$'D)c                 .   [         R                  " UR                  X#UR                  R                  5      nU R
                  R                  UR                  U R
                  5      UR                  5      n[         R                  " U40 UR                  D6$ r   )r#   r   r   r%   r   r   create_memdesc_reshaperS   r)   r   r   )r   r   r'   rK   r+   r)   s         r   memdesc_reshapeGluonSemantic.memdesc_reshape   se    //x}}OhOhi44RXXdll5KX__],,VCr{{CCr   c                     [         R                  " X#XC5      nU R                  R                  UR	                  U R                  5      UR
                  5      n[         R                  " U40 UR                  D6$ r   )r#   r   r   create_memdesc_reinterpretrS   r)   r   r   )r   r   r   r'   rK   r+   r)   s          r   memdesc_reinterpret!GluonSemantic.memdesc_reinterpret   sX    //fL88$,,9OQYQ`Q`a,,VCr{{CCr   c                 f    U(       a  [         R                  " X#U5      nOUnU R                  X5      $ r   )r#   r$   r*   )r   rT   	scalar_tyr9   rK   res_tys         r   wrap_tensorGluonSemantic.wrap_tensor   s+    **9HFF{{1%%r   c                 ,  ^^^ U  H5  m[        [        TR                  [        R                  5      U4S j5        M7     U  Vs/ s H  oR                  R
                  PM     snmTS   m[        [        U4S jTSS   5       5      U4S j5        g s  snf )Nc                  $   > ST R                   < 3$ )Nz#expected distributed_type but got: rE   )rT   s   r   rG   2GluonSemantic._check_same_layout.<locals>.<lambda>   s    HklmlrlrkuFvr   r   c              3   ,   >#    U  H	  oT:H  v   M     g 7fr   r   ).0ll0s     r   	<genexpr>3GluonSemantic._check_same_layout.<locals>.<genexpr>   s     0Kq7Ks   r	   c                     > ST  3$ )Nz3Expected inputs to have matching layouts, but got: r   )layoutss   r   rG   r      s    LWIVr   )r   rP   r%   r#   r$   rK   all)xsrT   r   r   s    `@@r   _check_same_layout GluonSemantic._check_same_layout   sp    A:affd&;&;<>vw *,-"Q66=="-QZs0GABK00V	X .s   Binputs.c                   ^ ^^^^^	^
^ [        TS LS 5        TS   R                  R                  m[        T5      m[        STs=:*  =(       a    T:  Os  UU4S j5        T R	                  T5        [        T5       VVs/ s H  u  pEUT:w  d  M  UPM     snnm
[        TTS   R                  R                  5      m	[        U4S jT 5       5      (       d   S5       eT R                  R                  T Vs/ s H  ofR                  PM     snT5      mU" T5        TR                  5       (       d   e[        UUU	U
U 4S j[        [        T5      5       5       5      $ s  snnf s  snf )Nc                      g)Nz*All-reduce is not yet implemented in gluonr   r   r   r   rG   )GluonSemantic.reduction.<locals>.<lambda>   s    )Ur   r   c                     > ST ST  3$ )Nz/expected reduction axis to be in the range [0, z
) but got r   )r@   r   s   r   rG   r      s    +Z[_Z``jkojp)qr   c              3   T   >#    U  H  oR                   R                  T:H  v   M     g 7fr   )r%   r'   )r   tr'   s     r   r   *GluonSemantic.reduction.<locals>.<genexpr>   s     9&Q66<<5(&s   %(z-all reduction inputs must have the same shapec              3      >#    U  H?  nTR                  TR                  U5      TU   R                  R                  TT5      v   MA     g 7fr   )r   
get_resultr%   r&   )r   r:   r   	reduce_op
ret_layoutr9   r   s     r   r   r      sF      )' Y11!4fQinn6K6KYXbcc's   AA
)r   r%   r'   r4   r   r6   r   rK   r   r   create_reducer)   verifytuplerange)r   r   r@   region_builder_fnr:   sr   r   r   r   r9   r'   s   ```    @@@@@r   	reductionGluonSemantic.reduction   s'   t4!UVq	$$5zqD4!qr'#,U#3A#341qDyQ#3A	 vay~~'<'<=
9&999j;jj9LL..&/I&Q&/I4P	)$!!!! ) )3v;') ) 	) B 0Js   ?EE6E#worker_num_warpsworker_num_regsc           	         [        U5      nU[        U5      :X  d   SU S[        U5       S35       eU[        U5      :X  d   SU S[        U5       S35       eU R                  nUR                  5       n	UR                  5       n
UR	                  U
5        UR                  X!0 S9n/ nUb  [        U5      nUR                  U5        U Vs/ s H  oR                  5       PM     nnUR                  U	5        [        U5      nUR                  XU5      nUR                  5       R                  U
5        UR                  U5        UR                  UR                  5       / 5        UR!                  U5      nU Vs/ s H  nUR                  5       PM     nn[#        U5       H  nUR                  UR%                  U5      U5      n[#        [        U5      5       Vs/ s H  nUR'                  U5      PM     nn[)        UU Vs/ s H  nUR*                  PM     sn5      nUR                  UU   U0 S9  UR-                  5         M     UR/                  UR1                  5       5        [#        [        U5      5       Vs/ s H  nUR3                  U5      PM     nnUc  g [5        [)        X Vs/ s H  oR*                  PM     sn5      5      $ s  snf s  snf s  snf s  snf s  snf s  snf )Nzwarp specialize got z partitions but z warp countsz register counts)kwargs)r4   r   get_insertion_point	new_blockset_insertion_point_to_startcall_JitFunctionr   create_warp_yieldget_typerestore_insertion_pointcreate_warp_specializeget_default_region	push_backset_requested_registerscreate_block_with_parentget_partition_op_holder!create_warp_specialize_partitionsr   
get_regionget_argumentr   r%   create_warp_returnset_insertion_point_afterget_operationr   r   )r   argsdefault_partitionworker_partitionsr   r   	generatornum_partitionsr   	insert_ptdefault_blockdefault_resultsmlir_resultsrresult_types	mlir_argsws_oppartitions_oparg	arg_typesr:   blockj
block_argss                           r   warp_specializeGluonSemantic.warp_specialize   s   ./"
 
 	f!.!11A#FVBWAXXde	f 
 "
 
 	i!.!11A#oBVAWWgh	i 
 ,,//1	  ))+,,];#445FUW4X&/@L!!,/.:;l

l; 	''	2(.	..|HXY  ",,];%%o6 	(()F)F)H"MAA.Q/89yS\\^y	9~&A44]5M5Ma5PR[\E9>s9~9NO9NA%,,Q/9NJO,Zd9Sds#((d9STJ&&'8';ZPR&S&&( ' 	))%*=*=*?@5:3|;L5MN5M((+5MN"(7X17XYZZ1 < : P9S
 O 8Ys$   
K	8KK K:K)K"r   ).__name__
__module____qualname____firstlineno__r#   r*   langr   __annotations__r    r,   r   intr=   r   rW   r^   r   rc   ri   rs   r\   r   boolr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   staticmethodr   r   r   r  __static_attributes____classcell__)r`   s   @r   r   r      s   [[FD .
49 c  + + + +&5h 58 5 5Xx XE(H*<$= X5X 5U3Z 5H 5+( +5: +( +  x H ,9
5X 5$s) 5$ 5
+
1+W+
G;D??YD
D
& X X) 2 )# )UZ[ceh[hUi )&-[\deh\i -[)1#-[ -[r   r   N)typingr   r   r   r   r   triton.language.semanticr    r
   r#   _layoutsr   triton._C.libtriton.gluon_irr   triton.compiler.code_generatorr   r   r   r5   r'  r8   r   r   r   r   r   <module>r1     s[    ; ; 3  ! 7 T: <F ! !xC0 !
O[N8, O[r   