class_docstr: Fully-connected state-input continuous Q-function.
  
  See: https://arxiv.org/abs/1603.00748
  
  Args:
      n_input_channels: number of input channels
      n_dim_action: number of dimensions of action space
      n_hidden_channels: number of hidden channels
      n_hidden_layers: number of hidden layers
      action_space: action_space
      scale_mu (bool): scale mu by applying tanh if True
class_docstr_tok: ["Fully-connected","state-input","continuous","Q-function",".","See",":","https",":","\/\/arxiv.org\/abs\/1603.00748","Args",":","n_input_channels",":","number","of","input","channels","n_dim_action",":","number","of","dimensions","of","action","space","n_hidden_channels",":","number","of","hidden","channels","n_hidden_layers",":","number","of","hidden","layers","action_space",":","action_space","scale_mu","(","bool",")",":","scale","mu","by","applying","tanh","if","True"]
code: def __init__(
      self,
      n_input_channels,
      n_dim_action,
      n_hidden_channels,
      n_hidden_layers,
      action_space,
      scale_mu=True,
  ):
      self.n_input_channels = n_input_channels
      self.n_hidden_layers = n_hidden_layers
      self.n_hidden_channels = n_hidden_channels
  
      assert action_space is not None
      self.scale_mu = scale_mu
      self.action_space = action_space
  
      super().__init__()
      with self.init_scope():
          hidden_layers = []
          assert n_hidden_layers >= 1
          hidden_layers.append(
              L.Linear(n_input_channels, n_hidden_channels)
          )
          for _ in range(n_hidden_layers - 1):
              hidden_layers.append(
                  L.Linear(n_hidden_channels, n_hidden_channels)
              )
          self.hidden_layers = chainer.ChainList(*hidden_layers)
  
          self.v = L.Linear(n_hidden_channels, 1)
          self.mu = L.Linear(n_hidden_channels, n_dim_action)
          self.mat_diag = L.Linear(n_hidden_channels, n_dim_action)
          non_diag_size = n_dim_action * (n_dim_action - 1) // 2
          if non_diag_size > 0:
              self.mat_non_diag = L.Linear(
                  n_hidden_channels, non_diag_size
              )
  
imports: import chainer
  from chainer import cuda
  from chainer import functions
  from chainer import links
  import numpy
  import chainerrl
  from chainerrl.action_value import DiscreteActionValue
  from chainerrl.action_value import DistributionalDiscreteActionValue
  from chainerrl.action_value import QuadraticActionValue
  from chainerrl.functions.lower_triangular_matrix import lower_triangular_matrix
  from chainerrl.links.mlp import MLP
  from chainerrl.links.mlp_bn import MLPBN
  from chainerrl.q_function import StateQFunction
  from chainerrl.recurrent import RecurrentChainMixin
label_desc: Use image node_id 1 to create a new FCQuadraticStateQFunction object from inherited base classes: chainer, StateQFunction with example: obj = FCQuadraticStateQFunction(n_input_channels, n_dim_action, n_hidden_channels, n_hidden_layers, action_space, scale_mu)