
    ni                         S r SSKJr  SSKJr  SSKJr  SSKrSSKrSSKrSSKJ	r	   SSK
Js  Jr  SSKJr  S rS	 rSS
 jrSS jrSS jrS rS rg! \ a    SSKr N.f = f)z6Utilities for using reinforcement learning algorithms.    )absolute_import)division)print_functionN   )toolsc                 n   [         R                  " SS[         R                  SS9n[         R                  " [         R                  SS9n[         R                  " [         R                  SS9n[         R                  " [         R                  SS9n[         R                  " [         R                  S	S9nU" XXEU5      n[
        R                  " XXW5      u  pnS
n[         R                  R                  UR                  [
        R                  " 5       5      5        [
        R                  " [        5       5      $ )a   Define the algortihm and environment interaction.

Args:
  batch_env: In-graph environments object.
  algo_cls: Constructor of a batch algorithm.
  config: Configuration object for the algorithm.

Returns:
  Object providing graph elements via attributes.
r   Fglobal_step)dtypenameis_training)r   
should_log	do_reportforce_resetz&Graph contains {} trainable variables.)tfVariableint32placeholderboolr   simulatelogginginfoformatcount_weightsAttrDictlocals)	batch_envalgo_clsconfigstepr   r   r   r   algodonescoresummarymessages                V/home/james-whalen/.local/lib/python3.13/site-packages/pybullet_envs/agents/utility.pydefine_simulation_graphr&   !   s     
QRXXM	B$rww];+~~bggL9*nnRWW;7)rww];+	);F	C$	Q$w4'**//'..!4!4!678		!!    c                    [         R                  " S5         U(       a9  [        U5       Vs/ s H"  n[        R                  R                  U 5      PM$     nnO[        U5       Vs/ s H	  o0" 5       PM     nn[        R                  " XB(       + S9n[        R                  " U5      nSSS5        U$ s  snf s  snf ! , (       d  f       W$ = f)a   Create environments and apply all desired wrappers.

Args:
  constructor: Constructor of an OpenAI gym environment.
  num_agents: Number of environments to combine in the batch.
  env_processes: Whether to step environment in external processes.

Returns:
  In-graph environments object.
environments)blockingN)r   variable_scoperanger   wrappersExternalProcessBatchEnvInGraphBatchEnv)constructor
num_agentsenv_processes_envsr   s         r%   define_batch_envr6   :   s     
(CHCTUCTaenn,,[9CTdUd%*:%67%6km%6d7t.?@I%%i0I ) 
 V7	 )( 
s(   B:)B0B:%B551B:0
B::
C	c                 F  ^ / nU =(       d    / n U  Vs/ s H  n[         R                  " U5      PM     n n[        R                  " 5        H0  m[	        U4S jU  5       5      (       a  M  UR                  T5        M2     [        R                  R                  USS9nU$ s  snf )zCreate a saver for the variables we want to checkpoint.

Args:
  exclude: List of regexes to match variable names to exclude.

Returns:
  Saver object.
c              3   X   >#    U  H  oR                  TR                  5      v   M!     g 7fN)matchr   ).0regexvariables     r%   	<genexpr>define_saver.<locals>.<genexpr>\   s     
;7%;;x}}%%7s   '*   )keep_checkpoint_every_n_hours)recompiler   global_variablesanyappendtrainSaver)exclude	variablesr<   saverr=   s       @r%   define_saverrL   O   s     )Mr',34G5RZZG'4%%'h

;7
;;;X ( ((..!.
D%	, 5s    Bc                 0   U R                  [        R                  " [        R                  " 5       [        R                  " 5       5      5        U(       a  U(       d  U(       d  [        S5      eU(       a  [        R                  R                  U5      nU(       a  [        R                  R                  X#5      nU(       d$  U(       a  UR                  (       a  UR                  nU(       a  USL a  Sn[        U5      eU(       a  UR                  X5        ggg)a  Initialize or restore variables from a checkpoint if available.

Args:
  sess: Session to initialize variables in.
  saver: Saver to restore variables.
  logdir: Directory to search for checkpoints.
  checkpoint: Specify what checkpoint name to use; defaults to most recent.
  resume: Whether to expect recovering a checkpoint or starting a new run.

Raises:
  ValueError: If resume expected but no log directory specified.
  RuntimeError: If no resume expected but a checkpoint was found.
z.Need to specify logdir to resume a checkpoint.Fz4Found unexpected checkpoint when starting a new run.N)runr   grouplocal_variables_initializerglobal_variables_initializer
ValueErrorrG   get_checkpoint_stateospathjoinmodel_checkpoint_pathRuntimeErrorrestore)sessrK   logdir
checkpointresumestater$   s          r%   initialize_variablesr_   c   s     ((288B224b6U6U6WXYVz
E
FFHH))&1E77<<3j%E$?$?..jfoFg!!mmD%  r'   c                 l   U(       a  U R                      Xl        SSS5        Sn[        R                  R	                  UR                  U R                  5      5        [        R                  R                  U R                  5        [        R                  R                  U R                  S5      n[        R                  R                  US5       n[        R                  " XSS9  SSS5        U $ Sn[        R                  R	                  U5        U $ ! , (       d  f       N= f! , (       d  f       U $ = f)aA  Save a new configuration by name.

If a logging directory is specified, is will be created and the configuration
will be stored there. Otherwise, a log message will be printed.

Args:
  config: Configuration object.
  logdir: Location for writing summaries and checkpoints if specified.

Returns:
  Configuration object.
Nz:Start a new run and write summaries and checkpoints to {}.config.yamlwF)default_flow_stylezcStart a new run without storing summaries and checkpoints since no logging directory was specified.)unlockedr[   r   r   r   r   gfileMakeDirsrT   rU   rV   GFileyamldump)r   r[   r$   config_pathfile_s        r%   save_configrl      s     	m 
JGJJOOGNN6==12HHfmm$'',,v}}m<K	S	)U
ii%8 
* 
-2GJJOOG	- 
 
*	) 
-s   DD$
D!$
D3c                    U =(       a     [         R                  R                  U S5      nU(       a$  [        R                  R                  U5      (       d  Sn[        U5      e[        R                  R                  US5       n[        R                  " U[        R                  S9nSSS5        Sn[        R                  R                  UR                  WR                  5      5        U$ ! , (       d  f       NJ= f)zLoad a configuration from the log directory.

Args:
  logdir: The logging directory containing the configuration file.

Raises:
  IOError: The logging directory does not contain a configuration file.

Returns:
  Configuration object.
ra   z`Cannot resume an existing run since the logging directory does not contain a configuration file.r)LoaderNz5Resume run and write summaries and checkpoints to {}.)rT   rU   rV   r   re   ExistsIOError	FastGFilerh   loadro   r   r   r   r[   )r[   rj   r$   rk   r   s        r%   load_configrt      s     >277<<>+	BHHOOK88/G
'
	xx+s+uYYuT[[1F ,C'**//'../0	-	 ,+s   $C**
C8c                      [         R                  R                  [         R                  R                  5        S[        R                  " S5      l        g)z Configure the TensorFlow logger.F
tensorflowN)r   r   set_verbosityINFO	getLogger	propagate r'   r%   set_up_loggingr|      s/    **2::??+.3'L!+r'   r9   )NN)__doc__
__future__r   r   r   r   rT   rB   ruamel.yamlrh   tensorflow.compat.v1compatv1r   	Exceptionrv    r   r&   r6   rL   r_   rl   rt   r|   r{   r'   r%   <module>r      sg    = &  %  	 	 ## "2*(&<:04w  s   	A 
A A 