o
    *Îj	  ã                   @   s,   d dl Z dd„ Zdd„ Zdd„ Zdd	„ ZdS )
é    Nc                 C   sF   | j d dksJ dƒ‚t | ¡}|ddd …f  |ddd …f< | | S )Néÿÿÿÿé   z"q must be a tensor of shape (*, 4).é   )ÚshapeÚtorchZ	ones_like)ÚqÚmask© r	   úp/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/utils/cv/motion_utils/motion_process.pyÚqinv   s   
r   c                 C   sÌ   | j d dks	J ‚|j d dksJ ‚| j dd… |j dd… ks"J ‚t|j ƒ}|  ¡  dd¡} | ¡  dd¡}| dd…dd…f }tj||dd}tj||dd}|d| dd…dd…f | |    |¡S )zð
    Rotate vector(s) v about the rotation described by quaternion(s) q.
    Expects a tensor of shape (*, 4) for q and a tensor of shape (*, 3) for v,
    where * denotes any number of dimensions.
    Returns a tensor of shape (*, 3).
    r   r   é   Nr   ©Údimé   )r   ÚlistÚ
contiguousÚviewr   Úcross)r   ÚvZoriginal_shapeZqvecZuvZuuvr	   r	   r
   Úqrot   s    
*r   c                 C   sü   | d }t  |¡ | j¡}	 |dd d…f |ddd …f< t j|dd}t  | jd d… d ¡ | j¡}t  |¡|d< t  |¡|d< t  | jd d… d ¡ | j¡}| dd d…dd	…f |ddd …d
dgf< 	 t	t
|ƒ|ƒ}t j|dd}| d |d< ||fS )N©.r   .r   r   r   ©r   ©.r   )r   r   r   r   éþÿÿÿ).r   ).r   )r   Z
zeros_likeÚtoZdeviceZcumsumZzerosr   ÚcosÚsinr   r   )ÚdataZrot_velZ	r_rot_angÚ
r_rot_quatÚr_posr	   r	   r
   Úrecover_root_rot_pos$   s     (r    c                 C   sÊ   t | ƒ\}}| dd|d d d …f }| |jd d… d ¡}	 tt|dd d d …f ƒ |jd d… d ¡|ƒ}	 |d  |dd	d…f 7  < |d
  |ddd…f 7  < 	 tj| d¡|gdd}|S )N.r   r   r   r   )r   r   r   r   r   r   r   r   r   )	r    r   r   r   r   Úexpandr   ÚcatZ	unsqueeze)r   Z
joints_numr   r   Z	positionsr	   r	   r
   Úrecover_from_ric:   s   (þr#   )r   r   r   r    r#   r	   r	   r	   r
   Ú<module>   s
   