
    9iiF                       S SK Jr  S SKJrJrJrJrJrJr  S SK	r
S SKr\R                  \R                  " S5      S4         S3S jjr\
R                  " S\
R                   S9r/ S	Q/ S
Q/ SQ/\S'   / S	Q/ SQ/ SQ/\S'   / SQ/ S
Q/ SQ/\S'   / SQ/ SQ/ SQ/\S'   / SQ/ SQ/ SQ/\S'   / SQ/ SQ/ SQ/\S'   / SQ/ SQ/ SQ/\S'   / SQ/ SQ/ SQ/\S'   / SQ/ SQ/ SQ/\S'   / SQ/ SQ/ SQ/\S'   \R%                  S S S!5      r\R&                  " \5      q\
R                  " S"5      r/ S#Q/ S$Q/ S%Q/ S&Q/\SS2SS2S 4'   / S'Q/ S#Q/ S(Q/ S%Q/\SS2SS2S)4'   / S*Q/ S&Q/ S#Q/ S'Q/\SS2SS2S+4'   / S(Q/ S*Q/ S$Q/ S#Q/\SS2SS2S,4'   \SS2S)S2SS24   r\R&                  " \5      q " S- S.5      r " S/ S05      r " S1 S25      rg)4    )annotations)AnyCallableIterableOptionalSequenceTupleNcpuFc                >    [         R                  " / U QSP7UUUS9nU$ )N   dtypedevicerequires_grad)torchzeros)
batch_dimsr   r   r   transs        o/var/www/html/land-doc-ocr/venv/lib/python3.13/site-packages/modelscope/models/science/unifold/modules/frame.pyzero_translationr      s/     KK(*(a(#%&35E L    )   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   )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   r   r   r   )r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   r   c                     \ rS rSr  SS jr\\R                  \R                  " S5      S4       SS jj5       r	\S S j5       r
\S!S j5       rS"S jrS#S	 jrS$S
 jrS%S jr\S 5       r\S&S j5       rS'S jrS(S jrS(S jr\S)S j5       r\S*S j5       r\S+S j5       r\S,S j5       rS-S jr  S.S jr\S/S j5       rS'S jr    S0S jrS1S jrS'S jrSr g)2Rotation<   c                f    UR                   SS  S:w  a  [        SUR                    35      eXl        g )Nr   r   zincorrect rotation shape: )shape
ValueError_mat)selfmats     r   __init__Rotation.__init__>   s2     99RS>V#9#))EFF	r   r
   Fc                    [         R                  " SXUS9nUR                  " / S[        U 5      -  QSPSP76 nUR                  " / U QSPSP76 n[        U5      $ )Nr   r   r   r   )r   eyeviewlenexpandr    )r#   r   r   r   r'   s        r   identityRotation.identityF   sc     iiUHhh3U+3a33jj(%((R(}r   c                v    U R                  5       UR                  5       -  R                  U R                  5      $ N)floattyper   )abs     r   mat_mul_matRotation.mat_mul_matS   s(    	AGGI%++AGG44r   c                    U R                  5       UR                  5       R                  S5      -  R                  S5      R                  UR                  5      $ Nr   )r4   	unsqueezesqueezer5   r   )rts     r   mat_mul_vecRotation.mat_mul_vecW   s>    	AGGI//33<<R@EEaggNNr   c                    [        U[        5      (       d  U4n[        U R                  U[	        S 5      [	        S 5      4-      S9$ Nr'   )
isinstancetupler    r%   slicer&   indexs     r   __getitem__Rotation.__getitem__[   s<    %''IEDIIeuT{E$K.H&HIJJr   c                   [        U[        [        45      (       a  [        U R                  U-  S9$ [        U[
        R                  5      (       a  [        U R                  US   -  S9$ [        S[        U5       S35      e)NrD   ).NNz/multiplicand must be a tensor or a number, got .)	rE   intr4   r    r%   r   Tensor	TypeErrorr5   )r&   rights     r   __mul__Rotation.__mul__`   sn    ec5\**		E 122u||,,		E/,B BCCA$u+aP r   c                $    U R                  U5      $ r3   rR   r&   lefts     r   __rmul__Rotation.__rmul__j   s    ||D!!r   c                h    [         R                  U R                  UR                  5      n[        US9$ rC   )r    r8   rot_mat)r&   othernew_mats      r   
__matmul__Rotation.__matmul__m   s'    &&t||U]]CG$$r   c                :    U R                   R                  SS5      $ )Nr   r   )r%   	transposer&   s    r   _inv_matRotation._inv_matq   s    yy""2r**r   c                    U R                   $ r3   r%   rb   s    r   r[   Rotation.rot_matu   s    yyr   c                (    [        U R                  S9$ rC   )r    rc   rb   s    r   invertRotation.inverty   s    DMM**r   c                B    [         R                  U R                  U5      $ r3   )r    r@   r%   r&   ptss     r   applyRotation.apply|   s    ##DIIs33r   c                B    [         R                  U R                  U5      $ r3   )r    r@   rc   rl   s     r   invert_applyRotation.invert_apply   s    ##DMM377r   c                8    U R                   R                  S S nU$ )Nr   )r%   r#   r&   ss     r   r#   Rotation.shape   s    IIOOCR r   c                .    U R                   R                  $ r3   )r%   r   rb   s    r   r   Rotation.dtype   s    yyr   c                .    U R                   R                  $ r3   )r%   r   rb   s    r   r   Rotation.device   s    yyr   c                .    U R                   R                  $ r3   )r%   r   rb   s    r   r   Rotation.requires_grad   s    yy&&&r   c                    U[        U R                  5      :  a  [        S5      eU R                  R	                  US:  a  UOUS-
  5      n[        US9$ )NInvalid dimensionr   r   rD   )r.   r#   r$   r%   r<   r    )r&   dimrot_matss      r   r<   Rotation.unsqueeze   sI    #djj/!01199&&cQhsC!GDH%%r   c                6   U R                   R                  U R                   R                  S S S-   5      n[        R                  " [        [        U[        R                  " USS95      5      SS9nUR                  UR                  S S S-   5      n[        US9$ )Nr   )r   r   r   r   rD   )	r%   r-   r#   r   stacklistmapunbindr    )r&   fnr'   s      r   map_tensor_fnRotation.map_tensor_fn   sw    iinnTYY__Sb1E9:kk$s2u||CR'@ABKhhsyy"~./C  r   c                    U  Vs/ s H  o"R                   PM     nn[        R                  " X1S:  a  UOUS-
  S9n[        US9$ s  snf )Nr   r   r   rD   )r[   r   catr    )rsr   r>   r   s       r   r   Rotation.cat   sB    ')*r!IIr*99X(3aHH%% +s   Ac                D    [        U R                  R                  5       S9$ rC   )r    r%   cudarb   s    r   r   Rotation.cuda   s    DIINN,--r   c                B    [        U R                  R                  XS9S9$ )N)r   r   rD   )r    r%   to)r&   r   r   s      r   r   Rotation.to   s    DIILLLDEEr   c                F    [        U R                  R                  U5      S9$ rC   )r    r%   r5   r&   r   s     r   r5   Rotation.type   s    DIINN5122r   c                D    [        U R                  R                  5       S9$ rC   )r    r%   detachrb   s    r   r   Rotation.detach   s    DII,,.//r   rf   N)r'   torch.Tensor)r   Optional[torch.dtype]r   Optional[torch.device]r   boolreturnr    )r6   r   r7   r   r   r   )r>   r   r?   r   r   r   )rI   r   r   r    )rQ   r   r   r    )rW   r   r   r    )r\   r    r   r    r   r   r   r    rm   r   r   r   r   z
torch.Sizer   ztorch.dtyper   ztorch.device)r   r   )r   rN   r   r    )r   &Callable[[torch.Tensor], torch.Tensor]r   r    )r   zSequence[Rotation]r   rN   r   r    )r   r   r   r   r   r    )r   r   r   r    )!__name__
__module____qualname____firstlineno__r(   staticmethodr   r4   r   r0   r8   r@   rJ   rR   rX   r^   propertyrc   r[   ri   rn   rq   r#   r   r   r<   r   r   r   r   r5   r   __static_attributes__ r   r   r    r    <   st     (-{{).e)<#	
$
 '
 	

 

 
 5 5 O OK
"% + +  +48         ' '&!;C! & &.F'F,4F30r   r    c                  &   \ rS rSr    S!S jr\\R                  \R                  " S5      S4         S"S jj5       r	    S#S jr
    S$S jr    S%S jr\S&S	 j5       r\S'S
 j5       rS(S jrS)S jr    S*S jr    S+S jrS+S jrS,S jr  S-S jrS)S jr\S.S j5       r\ S/         S0S jj5       r    S1S jr\      S2S j5       rS3S jr  S-S jrS4S jrS,S jr\S5S j5       rS,S jr \S6S j5       r!S,S jr"Sr#g )7Frame   c                   Uc$  Uc!  [         R                  S5      n[        S5      nOUc7  [        UR                  UR                  UR
                  UR                  5      nOFUcC  [         R                  UR                  S S UR                  UR
                  UR                  5      nUR                  UR                  S S :w  d  UR
                  UR
                  :w  a  [        S5      eXl        X l	        g )N)r   r   z+RotationMatrix and translation incompatible)
r    r0   r   r#   r   r   r   r$   _r_t)r&   rotationtranslations      r   r(   Frame.__init__   s    
  3((/H*51K *8>>8>>+3??+3+A+ACK ((!!#2&!!""))	H NNk//44(//:E:L:L;M JKKr   r
   Fc           	     V    [        [        R                  XX#5      [        XX#5      5      $ r3   )r   r    r0   r   )r#   r   r   r   s       r   r0   Frame.identity   s+     eFBU6A
 	
r   c                    [        U5      [        :w  a  U4n[        U R                  U   U R                  U[        S 5      4-      5      $ r3   )r5   rF   r   r   r   rG   rH   s     r   rJ   Frame.__getitem__   sF     ;%IEGGENGGEU4[O+,
 	
r   c                    [        U[        R                  5      (       d  [        S5      eU R                  U-  nU R
                  US   -  n[        X#5      $ )Nz'The other multiplicand must be a Tensor).N)rE   r   rO   rP   r   r   r   )r&   rQ   new_rots	new_transs       r   rR   Frame.__mul__   sL     5%,,//EFF77U?GGeI..	X))r   c                $    U R                  U5      $ r3   rU   rV   s     r   rX   Frame.__rmul__   s     ||D!!r   c                8    U R                   R                  S S nU$ r;   )r   r#   rt   s     r   r#   Frame.shape   s    GGMM#2r   c                .    U R                   R                  $ r3   )r   r   rb   s    r   r   Frame.device  s    ww~~r   c                    U R                   $ r3   )r   rb   s    r   get_rotsFrame.get_rots	      wwr   c                    U R                   $ r3   r   rb   s    r   	get_transFrame.get_trans  r   r   c                    U R                   UR                   -  nU R                   R                  UR                  5      U R                  -   n[        X#5      $ r3   )r   rn   r   r   )r&   r\   new_rotr   s       r   composeFrame.compose  s@     ''EHH$GGMM%((+dgg5	W((r   c                T    U R                   R                  U5      nX R                  -   $ r3   )r   rn   r   )r&   rm   rotateds      r   rn   Frame.apply  s#     ''--$  r   c                T    XR                   -
  nU R                  R                  U5      $ r3   )r   r   rq   rl   s     r   rq   Frame.invert_apply  s"    GGmww##C((r   c                    U R                   R                  5       nUR                  U R                  5      n[	        USU-  5      $ r;   )r   ri   rn   r   r   )r&   rot_invtrn_invs      r   ri   Frame.invert"  s5    ''.."--(Wb7l++r   c                    U R                   R                  U5      n[        R                  " [	        [        U[        R                  " U R                  SS95      5      SS9n[        X#5      $ )Nr   r   )	r   r   r   r   r   r   r   r   r   )r&   r   r   r   s       r   r   Frame.map_tensor_fn(  sR    77((,KKRdgg2678bB	 X))r   c                    U R                   R                  / U R                  QSPSP75      nU R                  R                  USS S2S S24'   U R                   USS S2S4'   SUS'   U$ )Nr   .r   r   ).r   r   )r   	new_zerosr#   r   r[   )r&   tensors     r   to_tensor_4x4Frame.to_tensor_4x40  sq    ""#6TZZ#6#6A#67"ggoosBQB{!WWsBQBzyr   c                    U R                   SS  S:w  a  [        S5      e[        U SS S2S S24   S9nU SS S2S4   n[        X5      $ )Nr   )r   r   zIncorrectly shaped input tensor.r   rD   )r#   r$   r    r   )r?   rotsr   s      r   from_tensor_4x4Frame.from_tensor_4x47  sZ    7723<6!>??Ac2A2rrkN+#rr1*T!!r   c                H   [         R                  " U SS9n [         R                  " USS9n[         R                  " USS9n[        X5       VVs/ s H	  u  pEXE-
  PM     nnn[        X!5       VVs/ s H	  u  pEXE-
  PM     nnn[         R                  " [	        S U 5       5      U-   5      nU V	s/ s H  oU-  PM	     nn	[	        S [        Xg5       5       5      n
[        Xg5       VVs/ s H  u  pEXTU
-  -
  PM     nnn[         R                  " [	        S U 5       5      U-   5      nU V	s/ s H  oU-  PM	     nn	US   US   -  US   US   -  -
  US   US   -  US   US   -  -
  US   US   -  US   US   -  -
  /n[         R
                  " [        XgU5       VV	s/ s H  o  H  oPM     M     sn	nSS9nUR                  UR                  S S S	-   5      n[        US
9n[        U[         R
                  " USS95      $ s  snnf s  snnf s  sn	f s  snnf s  sn	f s  sn	nf )Nr   r   c              3  *   #    U  H	  oU-  v   M     g 7fr3   r   .0cs     r   	<genexpr>&Frame.from_3_points.<locals>.<genexpr>O       2r!Ar   c              3  .   #    U  H  u  pX-  v   M     g 7fr3   r   )r   c1c2s      r   r   r   Q  s     5vr27s   c              3  *   #    U  H	  oU-  v   M     g 7fr3   r   r   s     r   r   r   S  r   r   r   r   r   r   rD   )
r   r   zipsqrtsumr   reshaper#   r    r   )p_neg_x_axisorigin
p_xy_planeepsr   r   e0e1denomr   dote2tupr   rot_objs                  r   from_3_pointsFrame.from_3_pointsA  s    ||Lb9f"-\\*"5
$'$=>$=&"bg$=>$'
$;<$;&"bg$;<

32r23c9:!#$A%i$5R56*-b+6+b8m+6

32r23c9:!#$A%i$qEBqEMBqEBqEM)qEBqEMBqEBqEM)qEBqEMBqEBqEM)
 {{RRF##QA#AFBO||DJJsOf45t$Wekk&b9::) ?< %6$ Gs$   H/H/H(H+HH
c                    U[        U R                  5      :  a  [        S5      eU R                  R	                  U5      nU R
                  R	                  US:  a  UOUS-
  5      n[        X#5      $ )Nr~   r   r   )r.   r#   r$   r   r<   r   r   )r&   r   r   r   s       r   r<   Frame.unsqueezeb  s_     #djj/!011ww  %!!#sQw?T!!r   c                    [         R                  U  Vs/ s H  o"R                  PM     snU5      n[        R                  " U  Vs/ s H  o"R                  PM     snUS:  a  UOUS-
  S9n[        X45      $ s  snf s  snf )Nr   r   r   )r    r   r   r   r   r   )Tsr   Tr   r   s        r   r   	Frame.catm  se    
 ||2.2aTT2.4		,A44,#sQwOT!! /,s   A6A;c                N    [        U" U R                  5      U R                  5      $ r3   r   r   r   r&   r   s     r   apply_rot_fnFrame.apply_rot_fnw  s    R[$''**r   c                N    [        U R                  U" U R                  5      5      $ r3   r  r  s     r   apply_trans_fnFrame.apply_trans_fnz  s    TWWbk**r   c                2   ^ U4S jnU R                  U5      $ )Nc                   > U T-  $ r3   r   )r?   trans_scale_factors    r   r   #Frame.scale_translation.<locals>.fn  s    )))r   )r  )r&   r  r   s    ` r   scale_translationFrame.scale_translation~  s    	* ""2&&r   c                *    S nU R                  U5      $ )Nc                "    U R                  5       $ r3   )r   )r>   s    r   r   #Frame.stop_rot_gradient.<locals>.fn  s    88:r   )r  r  s     r   stop_rot_gradientFrame.stop_rot_gradient  s    	   $$r   c                   UR                   nU R                  5       n UR                  5       nUR                  5       nX-
  n X!-
  n[        S5       Vs/ s H	  oRSU4   PM     snu  pgn[        R                  " X6S-  -   US-  -   5      n	U* U	-  n
Xi-  nU
R                  / U
R                  QSPSP75      nXS'   SU
-  US'   XS'   XS'   S	US
'   [        R                  " X6S-  -   US-  -   US-  -   5      n	X-  n[        R                  " US-  US-  -   5      U	-  nUR                  / UR                  QSPSP75      nXS'   XS'   S	US'   SU-  US'   XS
'   [        R                  X5      n[        R                  UU 5      n [        S5       Vs/ s H	  oPSU4   PM     snu  nnn[        R                  " UUS-  -   US-  -   5      n	U* U	-  nUU	-  nUR                  / UR                  QSPSP75      nS	US'   UUS'   SU-  US'   UUS'   UUS
'   [        R                  UU5      nUR                  SS5      n[        UR                  U5      S9n[        UUR                  U5      5      $ s  snf s  snf )Nr   .r   ).r   r   r   ).r   r   ).r   r   ).r   r   r   ).r   r   ).r   r   ).r   r   ).r   r   ).r   r   r   rD   )r   r4   ranger   r   r   r#   r    r8   r@   ra   r5   r   )n_xyzca_xyzc_xyzr   input_dtypeic_xc_yd_pairnormsin_c1cos_c1c1_rotssin_c2cos_c2c2_rotsc_rots_n_yn_zsin_ncos_nn_rotsr   r  s                            r   make_transform_from_reference#Frame.make_transform_from_reference  s   ll388<8a#q&M8<&zz#Q,a/0""#8V\\#81#8a#89#	&[	#	#		zz#Q,a/&!);<CFS!VO,t3""#8V\\#81#8a#89#	#		&[	#	%%g7$$VU3.3Ah7hS!V}h73zz#Q,a/0td
!!"7FLL"7!"7Q"78y!yJy!y!y##FF3~~b"%tyy56Wfkk+677W =4 8s   I+I0c                z    [        U R                  R                  5       U R                  R                  5       5      $ r3   )r   r   r   r   rb   s    r   r   
Frame.cuda  s#    TWW\\^TWW\\^44r   c                    U R                   R                  U R                  R                  :X  d   eU R                   R                  $ r3   )r   r   r   rb   s    r   r   Frame.dtype  s.    ww}}---ww}}r   c                ~    [        U R                  R                  U5      U R                  R                  U5      5      $ r3   )r   r   r5   r   r   s     r   r5   
Frame.type  s)    TWW\\%($'',,u*=>>r   )r   r   N)r   zOptional[Rotation]r   zOptional[torch.Tensor])
r#   Iterable[int]r   r   r   r   r   r   r   r   )rI   r   r   r   )rQ   r   r   r   )rW   r   r   r   r   r   r   r   )r\   r   r   r   r   )r   r   )r   r   r   r   )r?   r   r   r   )g:0yE>)
r   r   r   r   r   r   r   r4   r   r   )r   rN   r   r   )r  zSequence[Frame]r   rN   r   r   )r   zCallable[[Rotation], Rotation]r   r   )r  r4   r   r   )g#B;r   )$r   r   r   r   r(   r   r   r4   r   r0   rJ   rR   rX   r   r#   r   r   r   rn   rq   ri   r   r   r   r  r<   r   r  r  r  r  r5  r   r   r5   r   r   r   r   r   r      s$   $ ,:  (-{{).e)<#		
	
$	
 '	
 		

 
	
 	




 



*
* 

*"" 
"    )) 
)!! 
!),*;@* " " 
 	;";; !; 	;
 
; ;@	"	" 
	" """ 
" "++<A+'% 38 38j5  ?r   r   c                      \ rS rSrSS jr\\R                  \R                  " S5      S4         SS jj5       r	S r
S rS r\S	 5       r\S
 5       r\S 5       r S     SS jjr      SS jrSS jrSrg)
Quaternioni  c                r    UR                   S   S:w  a  [        SUR                    35      eXl        X l        g )Nr   r   zincorrect quaternion shape: )r#   r$   _qr   )r&   
quaternionr   s      r   r(   Quaternion.__init__  s9    B1$;J<L<L;MNOOr   r
   Fc                    [        XX#5      n[        R                  " / U QSP7UUUS9n[        R                  " 5          SUS'   S S S 5        [	        XT5      $ ! , (       d  f       N= f)Nr   r   r   ).r   )r   r   r   no_gradr?  )r#   r   r   r   r   quatss         r   r0   Quaternion.identity  s]     !vEKeKQK"'#)*79 ]]_E&M %'' _s   A
A%c                    U R                   $ r3   )rA  rb   s    r   	get_quatsQuaternion.get_quats  r   r   c                    U R                   $ r3   r   rb   s    r   r   Quaternion.get_trans  r   r   c                P    U R                  5       n[        R                  U5      nU$ r3   )rI  r?  quat_to_rot)r&   rF  r   s      r   get_rot_matsQuaternion.get_rot_mats  s#     ))%0r   c                   U R                   nU R                  5       n [        R                  U R                  :w  a  [        R	                  U R                  5      q[
        R                  " [        U SS S 2S S 4   -  U SS S S 2S 4   -  SS9nUR                  U5      nUR                  " / UR                  S S QSPSP76 nU$ )N.r   r   r   r   )
r   r4   _QUAT_TO_ROT_tensorr   r   r   r   r5   r-   r#   )normalized_quatr   
rot_tensors      r   rN  Quaternion.quat_to_rot  s      %%)//1%%)?)??"5"8"8&&#(YY/#q$2D"EEc4D012


  __U+
__Bj&6&6s&;BQBB
r   c                    U R                   nU R                  5       n U [        R                  R	                  U SSS9-  n U R                  U5      n U $ )Nr   T)r   keepdim)r   r4   r   linalgr'  r5   )rF  r   s     r   normalize_quatQuaternion.normalize_quat  sI    ))%R)FF

5!r   c                   U R                   nU R                  5       n UR                  5       n[        R                  U R                  :w  a  [        R	                  U R                  5      q[        nUR                  S[        U R                  S S 5      -  UR                  -   5      n[        R                  " X@SS S 2S S 4   -  USS S S 2S 4   -  SS9R                  U5      $ )Nr+   r   .rR  r   )r   r4   _QUAT_MULTIPLY_BY_VEC_tensorr   r   r-   r.   r#   r   r   r5   )quatvecr   r'   reshaped_mats        r   quat_multiply_by_vecQuaternion.quat_multiply_by_vec
  s    

zz|iik'..$++=+G+J+J,(*xxDJJsO(< <syy HIyyQd 233c#tQ:L6MM
 $u+	r   c                    U R                  5       nU[        R                  X15      -   nU(       a  [        R                  U5      nU$ r3   )rI  r?  rb  r[  )r&   q_update_vecnormalize_quatsrF  	new_quatss        r   compose_q_update_vecQuaternion.compose_q_update_vec  sC      J;;! !	"11)<Ir   c                    USS S24   USSS 24   pCU R                  U5      nUR                  U5      nU R                  U-   n[        XW5      $ )N.r   )rh  rn   r   r?  )r&   
update_vecpre_rot_matq_vect_vecrg  trans_updater   s           r   compose_update_vecQuaternion.compose_update_vec$  s\    
 "#rr'*JsABw,?u--e4	"((/GGl*	)//r   c                ^    [        U R                  R                  5       U R                  5      $ r3   )r?  rA  r   r   rb   s    r   r  Quaternion.stop_rot_gradient1  s    $''..*DGG44r   )rA  r   N)rB  r   r   r   )
r#   r=  r   r   r   r   r   r   r   r?  )T)re  r   rf  r   r   r   )rk  r   rl  r    r   r?  )r   r?  )r   r   r   r   r(   r   r   r4   r   r0   rI  r   rO  rN  r[  rb  rh  rp  r  r   r   r   r   r?  r?    s      (-{{).e)<#	(($( '( 	(
 
( (
       " 6:+7.2>J0 0 0 
	05r   r?  )
r   z
Tuple[int]r   r   r   r   r   r   r   r   )
__future__r   typingr   r   r   r   r   r	   numpynpr   r4   r   r   r   float32_QUAT_TO_ROTr   
from_numpyrT  _QUAT_MULTIPLY_QUAT_MULTIPLY_BY_VECr^  r    r   r?  r   r   r   <module>r}     s   # E E  
 $);;%*\\%%8	

 
 #
 	

 
 xxBJJ7I6T Z8T  )Z8T  *i8T I6T I6T I6T Y7T J7T  )Y7T ##Aq!,&&|4 )$'(*q!Qw  (|(*q!Qw  (')q!Qw  (}')q!Qw  'q!"ax0 $//0EF x0 x0vT? T?nd5 d5r   