
    Ph7                     (    d dl Z d Zd ZddZddZy)    Nc           	      
   | j                         dk7  rt        d| j                          d      | j                  \  }}| j                  }t        j
                  }| j                  t        j
                  k(  rt        j                  }nV| j                  t        j                  t        j                  fv rt        j                  }nt        d| j                   d      |j                  dz  dz  }|dvrt        d	      |d
z  dk7  rt        d| d      |d|z  z  dk7  rt        d| dd|z         |d|z  z  }| j                  d|dz  d      }|dk7  j                  d      \  }}	}
}| |	z  }| |	 z  }||
 z  }||	 z  |
z  }||j                  t        j                        dz  z  }||j                  t        j                        dz  z  }|j!                  d|j#                  d            }|j!                  d|j#                  d            }t	        j$                  ||fd      j                  ||dz        }||dz  z  }|j                  d||f      j                  |      }|dk(  r=|d d d d df   |d d d d df   dz  z  |d d d d df   dz  z  |d d d d df   dz  z  }n|dk(  r||d d d d df   |d d d d df   dz  z  |d d d d df   dz  z  |d d d d df   dz  z  |d d d d df   dz  z  |d d d d df   dz  z  |d d d d df   dz  z  |d d d d df   dz  z  }|t        j                  k(  rd}d
}d}|dz  }d|dz  d|dz  dz   g}nC|t        j                  k(  r0d}d}d
}d|z  }d|dz  d|dz  dz   |d|z  dz  |dz   d|z  dz  dz   g}t	        j&                  ||z  t        j                  |      }|j                  |dz  d      t	        j(                  d|d|      j                  |dz  d      z   j                  d      }t	        j(                  dd|      j                  dd      t	        j*                  ft        j                  |      z  |z  j                  d      j-                  ||z  |z        j                  d|      }t	        j(                  d|z  |      j                  dd      z  j-                  |dz  |      } t	        j.                  |      j-                  | j                  d   d      }!||z   | z   |!z   }"t	        j                   j                  d      d|"j                  d            j                  ||      }#||#fS )N   z)Expected 2-dimensional dense tensor, got -dimensional tensorInvalid datatype z of dense matrix      )r   r   z6Invalid number of elements per meta element calculated    r   z$Number rows columns of dense matrix z must be divisible by 32z"Number of columns of dense matrix z must be divisible by    )dim                           @   dtypedevicer   )r   RuntimeErrorshaper   torchint8r   int32halfbfloat16int16itemsizeviewunbindtoint64gather	unsqueezestackzerosarangeonesrepeattensor)$densemkr   
meta_dtypequadbits_per_meta_elem
meta_ncolsdense_4m0m1m2m3bit0bit1bit2bit3idxs0idxs1sparse0sparse1sparsemeta_4meta_nmetamagic0magic1magic2magic3magic4tmp0tmp1tmp2tmp3tmp4meta_offsetsmeta_reordereds$                                       tC:\Users\daisl\Desktop\realtime-object-detection\venv\Lib\site-packages\torch/sparse/_semi_structured_conversions.py*_sparse_semi_structured_from_dense_cutlassrT      s   yy{a7		}DWX
 	
 ;;DAq\\FJ{{ejj [[
	U^^4	4[[
.u{{m;KLMM'00149V+STT2v{21#5MN
 	
 	A&&'1,03I!NdJdIef
 	
 q112JjjQ!VQ'Gl**2.NBBB 38D3"9D2#:D2#:?DDGGEKK(A-.EDGGEKK(A-.EnnR!45GnnR!45G[['7+499!Q!VDFeqj!F[["j*@ABEEjQF"1a7OaAg!#%aAg!#% aAg"$& 	 
 1	$1a7OaAg!#%aAg!#% aAg"$& aAg"$	&
 aAg"$& aAg"$& aAg"$& 	^ U[[ aQ!VQQ
+	u{{	"QQ!VQQ
Aq1uz1q5!a%1*q.Q;;q:~U[[HD		*/2&
,,q*a
7
<
<Z1_a
P	Q
d2v 	 LLAf-222q9jj&%++fEF 
b	J&(	)	b&	 	 LLAK7<<RCfLTTaD <<v.55djjmQGD$;%,L\\$))B-L4E4Eb4IJOO	:N N##    c                    | j                         dk7  rt        d| j                          d      | j                  \  }}| j                  }|j                         dk7  rt        d|j                          d      |j                  |k7  rt        d| d|j                   d      |j                  }|t
        j                  t
        j                  fvrt        d| d	      |j                  d
z  dz  }|j                  \  }}||k7  rt        d| d|       |dz  |z  d|z  k7  rt        d| d|dz  |z  dz   d      |t
        j                  k(  rd}	g d}
n|t
        j                  k(  rd
}	g d}
t        j                  ddgt
        j                  |      j                  ||dz        }t        j                  d|dz  |      dz  |z  j                  dd      j                  dd      j                  d      j                  |d      }t        j                  dd
|      	z  j                  dd      j                  |d
z  |      }t        j                  
|      j                  dd      j                  dd
|z        j                  |dz  d      j                  ||      }t        j                  d|dz  |      dz  j                  dd      j                  dd|z        j                  ||      }||z   |z   |z   |z   }t        j                  |j                  d      d|j                  d            j                  ||      }t        j                  ||d|z  f||      }|dk(  r|dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |d
z	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d d f<   n#|d
k(  r|dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |d
z	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d df<   |dz	  dz  |d d d d d f<   |d!z	  dz  |d d d d d
f<   |d"z	  dz  |d d d d d#f<   |d$z	  dz  |d d d d df<   |d%z	  dz  |d d d d d&f<   |d'z	  dz  |d d d d df<   |d(z	  dz  |d d d d d)f<   |d*z	  dz  |d d d d df<   |d+z	  dz  |d d d d d,f<   |j                  d      t        j                  d||z  dz  |      dz  j                  dd      j                  dd      j                  d      z   }t        j                   |dz  |z  f| j                  |      }|j#                  d|| j                  d             |j                  |d|z        S )-Nr   z*Expected 2-dimensional sparse tensor, got r   z(Expected 2-dimensional meta tensor, got zExpected meta matrix to be on z device, got matrix on z devicer   z of meta matrixr   r   zNumber of rows of meta matrix z4 must be equal to number of columns of spase matrix z#Number of columns of sparse matrix z different from the z<, expected according to the number of columns of meta matrix)r   r   r	   !   )r   r   r   r   r   r   r   r
   r   r	   r   r   r   
   r   r      r   r      	   r         r         r         )r   r   r   r   r   r   r"   r   r#   r/   r'   r.   r,   r$   r(   emptyr+   scatter_)rC   rR   r1   r2   r   r3   r4   
meta_nrowsr5   rG   rH   rM   rN   rO   rP   tmp5rQ   rF   meta_2dense_offsetsr0   s                        rS   (_sparse_semi_structured_to_dense_cutlassrh      sa   zz|q8FYZ
 	
 <<DAq]]Fq 6~7I7I7K6LL_`
 	
 &,VH4KNLaLaKbbij
 	
  %%J%++u{{33.zl/JKK'00149+11J
Q,ZL8lmnlop
 	
 A~..!a%71!4HVWZpIptuIuHv wI I
 	

 U[[ 	u{{	"<<Aekk&AHHJ!OD 
aq	81	<z	I	b!	1	b	1 	 
a6	*V	3	b!	Q
	# 	 	VF+	b!	1z>	"	
b !	$	j*	% 	 
ar)&	9B	>	b!	2
?	#	j*	%	 	 $;%,t3L<<++B/L4E4Eb4IJOO	:D [[	
J223:fF "+q!Qw19,q!Qw19,q!Qw19,q!Qw19,q!Qw2:-q!Qw2:-q!Qw2:-q!Qw	1	$+q!Qw19,q!Qw19,q!Qw19,q!Qw19,q!Qw2:-q!Qw2:-q!Qw2:-q!Qw2:-q!Qw2:-q!Qw BJ$.q!Rx BJ$.q!Rx BJ$.q!Rx BJ$.q!Rx BJ$.q!Rx BJ$.q!RxKKOQA
62Q6
d2qk&&A,ttBx(M KKQFLLHE	NN1mV[[_5::aQrU   c                     |rCddl m}  || j                  j                        r!t	        j
                  t              } ||       S t        |       S Nr   )is_compile_supported)torch._dynamo.utilsrk   r   typer   compilerT   )r0   rn   rk   kernels       rS   )sparse_semi_structured_from_dense_cutlassrp   E  s>    < 1 12]]#MNF%= 5e<<rU   c                     |rDddl m}  || j                  j                        r"t	        j
                  t              } || |      S t        | |      S rj   )rl   rk   r   rm   r   rn   rh   )rC   rR   rn   rk   ro   s        rS   'sparse_semi_structured_to_dense_cutlassrr   S  sC    < 2 23]]#KLF&.113FNKKrU   )F)r   rT   rh   rp   rr    rU   rS   <module>rt      s!    I$Xo j=LrU   