
    hJ                        d dl mZ d dlmZmZmZmZ d dlmZ d dlZ	d dl
mZmZ d dlmZ ddlmZ dd	lmZ dd
lmZ  ed           G d de                      Z ed           G d de                      Z G d de          Z G d de          ZdefdZdefdZdedeee         ee         f         fdZdS )    )	dataclass)TupleUnionListDict)ndarrayN)ABCabstractmethod)Rotation   )
ConfigSpec)Asset)axis_angle_to_matrixT)frozenc                       e Zd ZU eeef         ed<   eed<   eeef         ed<   eed<   eeef         ed<   eded         fd            Zd	S )
AugmentAffineConfignormalize_intorandom_scale_prandom_scalerandom_shift_prandom_shiftreturn)r   Nc                    |d S |                      |           t          |j        |                    dd          |                    dddg          |                    dd          |                    dddg                    S )Nr   g        r         ?r   r   )r   r   r   r   r   )
check_keysr   r   getclsconfigs     2/data/cameron/tmprepos/2unirig/src/data/augment.pyparsezAugmentAffineConfig.parse   s    >4v"!0!::&6;;NRH==!::&6;;NRH==
 
 
 	
    N)	__name__
__module____qualname__r   float__annotations__classmethodr   r!    r"   r    r   r      s          %,''''  u%%%%  u%%%%

e$?@ 

 

 

 [

 

 

r"   r   c                   F    e Zd ZU dZeedf         ed<   edd            ZdS )AugmentConfigzb
    Config to handle final easy augmentation of vertices, normals and bones before sampling.
    Naugment_affine_configr   c                     |                      |           t          t                              |                    dd                               S )Nr,   )r,   )r   r+   r   r!   r   r   s     r    r!   zAugmentConfig.parse1   sL    v"5";";FJJG^`d<e<e"f"f
 
 
 	
r"   )r   r+   )	r#   r$   r%   __doc__r   r   r'   r(   r!   r)   r"   r    r+   r+   *   sW           !!4d!:;;;;
 
 
 [
 
 
r"   r+   c                   P    e Zd ZdZd Zedefd            Zedefd            ZdS )Augmentz)
    Abstract class for augmentation
    c                     d S Nr)   )selfs    r    __init__zAugment.__init__<   s    r"   assetc                     d S r2   r)   )r3   r5   kwargss      r    	transformzAugment.transform?       r"   c                     d S r2   r)   )r3   r5   s     r    inversezAugment.inverseC   r9   r"   N)	r#   r$   r%   r.   r4   r
   r   r8   r;   r)   r"   r    r0   r0   8   s{            u    ^ U    ^  r"   r0   c                   P     e Zd Zdef fdZdededefdZdefdZdefd	Z	 xZ
S )
AugmentAffiner   c                 V    t                                                       || _        d S r2   )superr4   r   )r3   r   	__class__s     r    r4   zAugmentAffine.__init__I   s$    r"   vtransr   c                     t          j        ||d dd df                                                   |d ddf         z   S )N   )npmatmul	transpose)r3   rA   rB   s      r    _applyzAugmentAffine._applyM   sA    yE"1"bqb&M335566rr1uEEr"   r5   c           
         |j                             d          }|j                             d          }|j        `|j                            d          }|j                            d          }t	          j        ||          }t	          j        ||          }t	          j        dt          j                  }t          ||z    dz            |z  }| j
        j        }t	          j        ||z
  |d         |d         z
  z            }	t          d|	z            |z  }|d         |d         z   dz  }
t          t	          j        |
|
|
gt          j                            |z  }t          j                                        | j
        j        k     rRt          t          j                            | j
        j        d         | j
        j        d                             }	|	|z  }t          j                                        | j
        j        k     r| j
        j        \  }}t          t	          j        t          j                            ||          t          j                            ||          t          j                            ||          g          t          j                  }||z  }|                     |j         |          |_         |j        *||j        d d d d ddf         z  |j        d d d d ddf<   |j        *||j        d d d d ddf         z  |j        d d d d ddf<   |j         |                     |j        |          |_        |j         |                     |j        |          |_        || _        d S )	Nr   )axis   dtype   r   r   rD   )verticesminmaxjointsrE   minimummaximumeyefloat32_trans_to_mr   r   _scale_to_marrayrandomrandr   uniformr   r   r   rH   matrix_localpose_matrixtailstrans_vertex)r3   r5   r7   	bound_min	bound_maxjoints_bound_minjoints_bound_maxr`   r   scalebiaslrshifts                 r    r8   zAugmentAffine.transformP   sL   N&&A&..	N&&A&..	<#$|//Q/77$|//Q/77
9.>??I
9.>??Ivarz222"Y%:#;A#=>>M 3	I-.2CnUVFW2WXYY"2:..=q!N1$55:"28T4,>bj#Q#Q#QRRUaa9>>dk888	 1 1$+2J12Mt{OghiOj k kllE </L9>>dk888;+DAq")*;*;Aq*A*A29CTCTUVXYCZCZ\^\e\m\mnoqr\s\s)t u u}  ~H  I  I  IE </LU^\BB),85;MaaaQRQRQRTUVWTWi;X,XEqqq!!!QqSy)(+7%:KAAAqqqRSTURUI:V+VEaaaAaCi(<#;;u|\BBEL;"++ek<@@EK(r"   c                 .   t           j                            | j                  }|                     |j        |          |_        |j         |                     |j        |          |_        |j        "|                     |j        |          |_        d S d S r2   )rE   linalginvr`   rH   rO   rR   r_   )r3   r5   ms      r    r;   zAugmentAffine.inverse|   sy    IMM$+,,U^Q77<#;;u|Q77EL;"++ek155EKKK #"r"   )r#   r$   r%   r   r4   r   rH   r   r8   r;   __classcell__)r@   s   @r    r=   r=   G   s        2      F F FG F F F F*)u *) *) *) *)X6U 6 6 6 6 6 6 6 6r"   r=   rA   c                 X    t          j        dt           j                  }| |dddf<   |S )NrK   rL   r   rD   )rE   rU   rV   )rA   rm   s     r    rW   rW      s.    
q
###AAac1fIHr"   rh   c                 n    t          j        dt           j                  }| |d<   | |d<   | |d<   d|d<   |S )N)rK   rK   rL   )r   r   )r   r   )rN   rN   r   )rD   rD   )rE   zerosrV   )rh   rm   s     r    rX   rX      sA    
rz***AAdGAdGAdGAdGHr"   r   r   c                 j    g }g }| j         }|#|                    t          |                     ||fS )N)r   )r,   appendr=   )r   first_augmentssecond_augmentsr,   s       r    get_augmentsrv      sF    NO&,&B(}4IJJJKKK?**r"   )dataclassesr   typingr   r   r   r   numpyr   rE   abcr	   r
   scipy.spatial.transformr   Rspecr   r5   r   utilsr   r   r+   r0   r=   rW   rX   rv   r)   r"   r    <module>r      s   ! ! ! ! ! ! + + + + + + + + + + + +           # # # # # # # # 1 1 1 1 1 1             ' ' ' ' ' '
$
 
 
 
 
* 
 
 
: $
 
 
 
 
J 
 
 
    c   ;6 ;6 ;6 ;6 ;6G ;6 ;6 ;6z7    
7    + +5gW1M+N + + + + + +r"   