class_docstr: Extension of the standard TorchModelV2 for SAC.
  
  To customize, do one of the following:
  - sub-class SACTorchModel and override one or more of its methods.
  - Use SAC's `q_model_config` and `policy_model` keys to tweak the default model
    behaviors (e.g. fcnet_hiddens, conv_filters, etc..).
  - Use SAC's `q_model_config->custom_model` and `policy_model->custom_model` keys
    to specify your own custom Q-model(s) and policy-models, which will be
    created within this SACTFModel (see `build_policy_model` and
    `build_q_model`.
  
  Note: It is not recommended to override the `forward` method for SAC. This
  would lead to shared weights (between policy and Q-nets), which will then
  not be optimized by either of the critic- or actor-optimizers!
  
  Data flow:
      `obs` -> forward() (should stay a noop method!) -> `model_out`
      `model_out` -> get_policy_output() -> pi(actions|obs)
      `model_out`, `actions` -> get_q_values() -> Q(s, a)
      `model_out`, `actions` -> get_twin_q_values() -> Q_twin(s, a)
class_docstr_tok: ["Extension","of","the","standard","TorchModelV2","for","SAC",".","To","customize",",","do","one","of","the","following",":","-","sub-class","SACTorchModel","and","override","one","or","more","of","its","methods",".","-","Use","SAC","'s","`","q_model_config","`","and","`","policy_model","`","keys","to","tweak","the","default","model","behaviors","(","e.g",".","fcnet_hiddens",",","conv_filters",",","etc","..",")",".","-","Use","SAC","'s","`","q_model_config-",">","custom_model","`","and","`","policy_model-",">","custom_model","`","keys","to","specify","your","own","custom","Q-model","(","s",")","and","policy-models",",","which","will","be","created","within","this","SACTFModel","(","see","`","build_policy_model","`","and","`","build_q_model","`",".","Note",":","It","is","not","recommended","to","override","the","`","forward","`","method","for","SAC",".","This","would","lead","to","shared","weights","(","between","policy","and","Q-nets",")",",","which","will","then","not","be","optimized","by","either","of","the","critic-","or","actor-optimizers","!","Data","flow",":","`","obs","`","-",">","forward","(",")","(","should","stay","a","noop","method","!",")","-",">","`","model_out","`","`","model_out","`","-",">","get_policy_output","(",")","-",">","pi","(","actions|obs",")","`","model_out","`",",","`","actions","`","-",">","get_q_values","(",")","-",">","Q","(","s",",","a",")","`","model_out","`",",","`","actions","`","-",">","get_twin_q_values","(",")","-",">","Q_twin","(","s",",","a",")"]
docstr: Return the list of variables for Q / twin Q nets.
docstr_tok: ["Return","the","list","of","variables","for","Q","\/","twin","Q","nets","."]
code: def q_variables(self):
      """Return the list of variables for Q / twin Q nets."""
  
      return self.q_net.variables() + (
          self.twin_q_net.variables() if self.twin_q_net else []
      )
  
imports: import gymnasium
  from gymnasium.spaces import Box, Discrete
  import numpy
  import tree
  from typing import Dict, List, Optional
  from ray.rllib.models.catalog import ModelCatalog
  from ray.rllib.models.torch.torch_modelv2 import TorchModelV2
  from ray.rllib.utils.annotations import override
  from ray.rllib.utils.framework import try_import_torch
  from ray.rllib.utils.spaces.simplex import Simplex
  from ray.rllib.utils.typing import ModelConfigDict, TensorType, TensorStructType
label_desc: Use image node_id 10 for calling the SACTorchModel obj's underlying member method code with example usage: obj.q_variables() and returns: unknown