
    HhE                         d dl mZ d dlZd dlZd dlZd dlZd dlmZ d dl	m
Z
mZmZ d dlmZ d dlmZ ddlmZ dd	lmZmZ dd
lmZ ddlmZ  G d dej                  Z G d de          ZdS )    )defaultdictN)Tensor)DictUnionList)BasePredictionWriter)ndarray   )RawData)OrderConfig	get_order)	ModelSpec)DetokenzeOutputc                        e Zd Zi dddddfdedededeedf         dee         d	ed
eedf         deedf         f fdZ	ddZ
ddZ xZS )ARSystemNFbfloat16steps_per_epochmodelgenerate_kwargsoutput_path
record_resvalidate_castval_intervalval_start_fromc	                    t                                                       |                     d           || _        || _        || _        || _        || _        || _        || _	        || _
        | j        r| j        J d            d S d S )Nr   )ignorez1record_res is True, but output_path in ar is None)super__init__save_hyperparametersr   r   r   r   r   r   r   r   )
selfr   r   r   r   r   r   r   r   	__class__s
            >/data/cameron/tmprepos/clean_dreammesh/UniRig/src/system/ar.pyr   zARSystem.__init__   s     	!!!111"1"'
"1"-","/"."0? 	e#//1d///	e 	e//    c                     | j         |d<   | j                            |          }t          |t                    s'J d| j        j         dt          |                       |S )Nr   zexpect type of prediction from z to be a list, found: )r   r   predict_step
isinstancelistr!   type)r    batch	batch_idxdataloader_idxress        r"   _predict_stepzARSystem._predict_step,   sh    #'#7 j%%e,,#t$$&
H\&&txy|t}t}&&$
r#   c                     	 |                      |||          }|S # t          $ r(}t          t          |                     g cY d }~S d }~ww xY w)N)r)   r*   r+   )r-   	Exceptionprintstr)r    r)   r*   r+   
predictiones         r"   r%   zARSystem.predict_step2   sr    	040B0BZc  uC0B  1D  1DJ 	 	 	#a&&MMMIIIIII	s    
AA	A	AN)__name__
__module____qualname__intr   r   r   r1   boolr   r-   r%   __classcell__r!   s   @r"   r   r      s         !&* %%'+)-e ee e 	e
 39%e $Ke e CI&e c4i(e e e e e e2          r#   r   c                   n     e Zd Z	 d	deedf         deedf         f fdZd Zdede	e
         fdZ xZS )
ARWriterN
output_dirorder_configc                    t                                          d           || _        |                    dd           | _        |                    dd          | _        |                    dd           | _        |                    dd          | _        |                    dd          | _        |                    d	d           | _	        |                    d
d           | _
        |                    dd           | _        |                    dd           | _        |t          |          | _        nd | _        d| _        d S )Nr)   npz_dir	user_modeFoutput_namerepeat   add_num
export_npz
export_obj
export_fbx	export_pc)configr   )r   r   r>   getrA   rB   rC   rD   rF   rG   rH   rI   rJ   r   order_epoch)r    r>   r?   kwargsr!   s       r"   r   zARWriter.__init__;   s    	!!!","(**Y"="="(**[%"@"@"(**]D"A"A"(**Xq"9"9"(**Y">">"(**\4"@"@"(**\4"@"@"(**\4"@"@"(**[$"?"?#",777DJJDJr#   c                    | j         | j        dz
  k     rlt          d| j         dz    d| j         d           | xj         dz  c_         |j                                        |_        |j                                         d S d S )NrE   zFinished prediction run /z, starting next run...)rN   rD   r0   
datamodulepredict_dataloaderpredict_looprun)r    trainer	pl_modules      r"   on_predict_endzARWriter.on_predict_endS   s    ;q((bT[1_bbt{bbbcccKK1KK)0);)N)N)P)PG& $$&&&&&	 )(r#   rW   r2   c                     d|v sJ |d         |}|d         }	|d         }
|d         }|d         }|d         }|d         }|d         }t          |
t          j                  r8|
                                                                                                }
t          |t          j                  r8|                                                                                                }t          |t          j                  r8|                                                                                                }t          |t          j                  r8|                                                                                                }t          |t          j                  r8|                                                                                                }t          |t          j                  r8|                                                                                                }t          |          D ]\  }t          |t                    sJ d	t          |                       ddt          dt          dt          f fd}|         }|         }t          |
d |f         |d |f         |d |f         |d |f         |j        |j        |j        d |j        |j        d d |j                  } j        sJ j        Ct)           | j        d                     |                     | j        d                      j        s, j        %|                     | j        d                      j        s, j        %|                     | j        d                      j        y j        s'|                     | j        d                      j        |                     j                   |                     | j        dd                     d S )Npathverticesorigin_verticesorigin_vertex_normalsorigin_facesorigin_face_normals
num_points	num_facesz6expect item of the list to be DetokenzeOutput, found: F	save_namesuffixtrimc                    |r,t           j                                     j                  }n         }j        %t           j                            j        |          }j        r.t           j                            ||  dj         d|           }n%t           j                            ||  d|           }|S )N_.)osrZ   relpathrA   r>   joinrF   rN   )rb   rc   rd   rZ   idpathsr    s       r"   	make_pathz.ARWriter.write_on_batch_end.<locals>.make_pathv   s     %7??59dlCCDD 9D?.7<<>>D< G7<<.S.ST[.S.S6.S.STTDD7<<.E.EV.E.EFFDr#   )r[   vertex_normalsfacesface_normalsjointstailsparentsskinno_skinnamesmatrix_localrZ   clsnpz)rZ   objfbxT)rd   )F)r&   torchr   detachcpunumpy	enumerater   r(   r1   r9   r   rq   rr   rs   ru   rv   rx   rB   rG   r0   saverH   export_skeletonrJ   rI   rC   )r    rV   rW   r2   batch_indicesr)   r*   r+   detokenize_output_listr[   r\   r]   r^   r_   r`   ra   detokenize_outputrm   num_pnum_fraw_datark   rl   s   `                    @@r"   write_on_batch_endzARWriter.write_on_batch_endZ   s   f8B$ 12 %&= >^,#$9:<(
+&	ou|44 	E-4466::<<BBDDO+U\:: 	Q$9$@$@$B$B$F$F$H$H$N$N$P$P!lEL11 	?'..004466<<>>L)5<88 	M"5"<"<">">"B"B"D"D"J"J"L"Lj%,// 	;#**,,002288::Ji.. 	9!((**..006688I'01G'H'H 1	_ 1	_#R"/AA  V  V  DV  }A  BS  }T  }T  DV  DV  V  VA S # T         rNEbME(VeV44R%Z@"2vv:.0VeV<(/'-)1)1'-!%)  H > Fdo&Aii7788899T_e#D#DEEE> Qdo&A((ii.O.O(PPP> Jdn&@""		$.%(H(H"III*~ _''YYt-N-N'OOOO'3 ++1A+BBBB ++4?EX\1]1]1]+^^^c1	_ 1	_r#   r4   )r5   r6   r7   r   r1   r   r   rX   r   r   r   r   r:   r;   s   @r"   r=   r=   :   s         04 #t)$ K-.     0' ' 'K_X K_4PT: K_ K_ K_ K_ K_ K_ K_ K_r#   r=   )collectionsr   	lightningLrh   r|   r   npr   typingr   r   r   lightning.pytorch.callbacksr   r	   data.raw_datar   
data.orderr   r   
model.specr   tokenizer.specr   LightningModuler   r=    r#   r"   <module>r      sZ   # # # # # #     				            $ $ $ $ $ $ $ $ $ $ < < < < < <       # # # # # # / / / / / / / / " " " " " " , , , , , ,' ' ' ' 'q  ' ' 'Rk_ k_ k_ k_ k_# k_ k_ k_ k_ k_r#   