
    ni5                         S SK r S SKJs  Jr  S SKJ	r	  S SK
Jr  S SKJr  S SKJr   " S S\5      rg! \ a    S SKr N0f = f)    N)abstractmethod)RLAgent)Logger)TFNormalizerc                      ^  \ rS rSrSrSrU 4S jrS rS rS r	S r
S	 rS
 rS r\S 5       r\S 5       r\S 5       rSS jrS rS rU 4S jrS rS rS rS rU 4S jrSrU =r$ )TFAgent   resourcesolversc                    > SU l         [        R                  " 5       U l        [        R                  " U R                  S9U l        [        TU ]  XU5        U R                  U5        U R                  5         g )Nagent)graph)
tf_scopetfGraphr   Sessionsesssuper__init___build_graph_init_normalizers)selfworldid	json_data	__class__s       d/home/james-whalen/.local/lib/python3.13/site-packages/pybullet_envs/deep_mimic/learning/tf_agent.pyr   TFAgent.__init__   sW    DMDJ

,DI	GU	*i 
    c                 8    U R                   R                  5         g N)r   closer   s    r   __del__TFAgent.__del__   s    IIOO
r   c           	         U R                   R                  5          U R                  R                  5           U R                  R	                  U R                   USSS9n[
        R                  " SU-   5        S S S 5        S S S 5        g !   [
        R                  " SW-   5         N.= f! , (       d  f       N7= f! , (       d  f       g = f)NF)write_meta_graphwrite_statezModel saved to: zFailed to save model to: )r   
as_defaultr   saversaver   print2)r   out_path	save_paths      r   
save_modelTFAgent.save_model   s    				!6!6!8?JJOODIIx%]bOc	(945 "9	 ?1I=> "9!8		 s3   B9B(?B7B9B%#B((
B6	2B99
Cc                 r   U R                   R                  5          U R                  R                  5          U R                  R	                  U R                   U5        U R                  5         [        R                  " SU-   5        S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = f)NzModel loaded from: )r   r)   r   r*   restore_load_normalizersr   r,   )r   in_paths     r   
load_modelTFAgent.load_model(   sy    				!6!6!8
jjG,
mm)G34 "9	 	 "9!8		 s#   B(ABB(
B%	!B((
B6c                 z    U R                   S:w  d   eU R                   S-   [        U R                  5      -   S-   nU$ )N z/agentz_model.ckpt)
output_dirstrr   r   	file_paths     r   _get_output_pathTFAgent._get_output_path/   s:    OOr!"!(*S\9MIIr   c                     U R                   S:w  d   eU R                   SR                  U R                  U R                  U R                  5      -   nU$ )Nr8   z2/agent{:d}_models/agent{:d}_int_model_{:010d}.ckpt)int_output_dirformatr   iterr;   s     r   _get_int_output_pathTFAgent._get_int_output_path4   sL    2%&%##<ffTWWdggW[W`W`>abIr   c           	      b   U R                   R                  5          U R                  R                  5          [        R                  " U R
                  5         U R                  U5        [        R                  " U R                  5         U R                  U5        U R                  U5        S S S 5        U R                  5         U R                  5         S S S 5        S S S 5        S S S 5        g ! , (       d  f       NG= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = fr!   )r   r)   r   r   variable_scoper   _build_netsSOLVER_SCOPE_build_losses_build_solvers_initialize_vars_build_saverr   r   s     r   r   TFAgent._build_graph:   s    				!6!6!8T]]+#t001


Y
'


i
( 2 	 , "9	  21 ,+ "9!8		 sR   D !D2C>	#C-	,(C>DD -
C;7C>>
DD
D	D  
D.c                 p   U R                   R                  5          U R                  R                  5          U R                  R	                  5         U R
                  R	                  5         U R                  R	                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr!   )r   r)   r   s_normupdateg_norma_normr#   s    r   r   TFAgent._init_normalizersG   ss    				!6!6!8
kk
kk
kk	 "9	
  "9!8		
 s#   B'ABB'
B$	 B''
B5c                     g r!    rM   s     r   rG   TFAgent._build_netsO       r   c                     g r!   rV   rM   s     r   rI   TFAgent._build_lossesS   rX   r   c                     g r!   rV   rM   s     r   rJ   TFAgent._build_solversW   rX   r   c                 v   U R                   R                  5          U R                  R                  5          [        R                  " [        R
                  R                  U R                  S-   U-   S9n[        U5      S:  d   e S S S 5        S S S 5        W$ ! , (       d  f       N= f! , (       d  f       W$ = f)N/scoper   )	r   r)   r   r   get_collection	GraphKeysTRAINABLE_VARIABLESr   len)r   r`   ress      r   _tf_varsTFAgent._tf_vars[   s    				!6!6!8bll>>dmmVYFY\aFabcX\\ "9	 J "9!8		 Js#   B)ABB)
B&	"B))
B8c                 @   U R                   R                  5          U R                  R                  5          [        R                  " U R
                  5         [        R                  " U R                  5         [        U R                   SU R                  5       U R                  R                  R                  U R                  5      5      U l        U R                  R                  R                  U R                  5      * n[        SU5        SU R                  R                  R!                  U R                  5      -  n[        SU5        U R                  R#                  U R                  R                  R                  U R                  5      * SU R                  R                  R!                  U R                  5      -  5        [        U R                   SU R%                  5       U R                  R                  R'                  U R                  5      5      U l        U R(                  R#                  U R                  R                  R+                  U R                  5      * SU R                  R                  R-                  U R                  5      -  5        [        U R                   SU R/                  5       5      U l        U R0                  R#                  U R                  R                  R3                  U R                  5      * SU R                  R                  R5                  U R                  5      -  5        S S S 5        S S S 5        S S S 5        S S S 5        g ! , (       d  f       N'= f! , (       d  f       N0= f! , (       d  f       N9= f! , (       d  f       g = f)NrP   zstate_offset=   zstate_scale=rR   rS   )r   r)   r   r   rF   r   RESOURCE_SCOPEr   get_state_sizer   envbuild_state_norm_groupsr   rP   build_state_offsetprintbuild_state_scaleset_mean_stdget_goal_sizebuild_goal_norm_groupsrR   build_goal_offsetbuild_goal_scaleget_action_sizerS   build_action_offsetbuild_action_scale)r   state_offsetstate_scales      r   _build_normalizersTFAgent._build_normalizersa   sU   				!6!6!8":K:KDMM:ZT001"499h8K8K8M#'::>>#I#I$''#RT

99$''BBo|,$**..::477CCnk*  $**.."C"CDGG"L!L!"TZZ^^%E%Edgg%N!N	P #499h8J8J8L#'::>>#H#H#QS  $**.."B"B477"K!K!"TZZ^^%D%DTWW%M!M	O #499h8L8L8NO  $**.."D"DTWW"M!M!"TZZ^^%F%Ftww%O!O	Q! 2 ;[!8	& % 21 ;[:Z!8!8		& sS   N!M>!M-8KM	;M-M>N
M*&M--
M;7M>>
N	N
Nc                     U R                   R                  5         U R                  R                  5         U R                  R                  5         g r!   )rP   loadrR   rS   r#   s    r   r3   TFAgent._load_normalizersw   s5    KKKKKK
r   c                    > U R                   R                  5          U R                  R                  5          [        TU ]  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr!   )r   r)   r   r   _update_normalizersr   r   s    r   r   TFAgent._update_normalizers}   sK    				!6!6!8g!# "9	
 "9!8		
"   A(AA(
A%	!A((
A6c                 `    U R                   R                  [        R                  " 5       5        g r!   )r   runr   global_variables_initializerr#   s    r   rK   TFAgent._initialize_vars   s    IIMM"1134
r   c                 j    U R                  5       n[        R                  R                  USS9U l        g )Nr   )max_to_keep)_get_saver_varsr   trainSaverr*   )r   varss     r   rL   TFAgent._build_saver   s+    !D!4DJ
r   c                    U R                   R                  5          U R                  R                  5          [        R                  " [        R
                  R                  U R                  S9nU Vs/ s H'  nSU R                  -   S-   UR                  ;  d  M%  UPM)     nn[        U5      S:  d   e S S S 5        S S S 5        W$ s  snf ! , (       d  f       N= f! , (       d  f       W$ = f)Nr_   r^   r   )r   r)   r   r   ra   rb   GLOBAL_VARIABLESr   rH   namerd   )r   r   vs      r   r   TFAgent._get_saver_vars   s    				!6!6!8r||<<DMMRdMAt'8'8!83!>aff!LadMY]]	 "9	
 K N "9!8		
 Ks:   C<C2$CC C4CC
C	C
C+c                    U R                  U5      nU Vs/ s H  nSUR                  ;  d  M  UPM     nn[        R                  " U Vs/ s H"  n[        R                  R                  U5      PM$     sn5      nU$ s  snf s  snf )Nbias)rf   r   r   add_nnnl2_loss)r   r`   r   r   vars_no_biaslosss         r   _weight_decay_lossTFAgent._weight_decay_loss   sf    ==D#<t!vQVV';AtL<88|<|!RUU]]1%|<=DK =<s   A<A<
)Bc                    > U R                   R                  5          U R                  R                  5          [        TU ]  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fr!   )r   r)   r   r   _trainr   s    r   r   TFAgent._train   sJ    				!6!6!8gn "9	
 "9!8		
r   )rS   rR   r   rP   r*   r   r   )r8   )__name__
__module____qualname____firstlineno__rj   rH   r   r$   r/   r5   r=   rC   r   r   r   rG   rI   rJ   rf   r{   r3   r   rK   rL   r   r   r   __static_attributes____classcell__)r   s   @r   r   r      s    .,
 	 	 	 	 	 	,

 r   r   )numpynptensorflow.compat.v1compatv1r   	Exception
tensorflowabcr   *pybullet_envs.deep_mimic.learning.rl_agentr   pybullet_utils.loggerr   /pybullet_envs.deep_mimic.learning.tf_normalizerr   r   rV   r   r   <module>r      sC    ##  > ( HOg O  s   	3 
A A 