class_docstr: Fully-connected + BN 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
      normalize_input (bool): If set to True, Batch Normalization is applied
          to the observations
class_docstr_tok: ["Fully-connected","+","BN","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","normalize_input","(","bool",")",":","If","set","to","True",",","Batch","Normalization","is","applied","to","the","observations"]
code: def __call__(self, state):
      h = self.hidden_layers(state)
      v = self.v(h)
      mu = self.mu(h)
  
      if self.scale_mu:
          mu = scale_by_tanh(
              mu, high=self.action_space.high, low=self.action_space.low
          )
  
      mat_diag = F.exp(self.mat_diag(h))
      if hasattr(self, "mat_non_diag"):
          mat_non_diag = self.mat_non_diag(h)
          tril = lower_triangular_matrix(mat_diag, mat_non_diag)
          mat = F.matmul(tril, tril, transb=True)
      else:
          mat = F.expand_dims(mat_diag**2, axis=2)
      return QuadraticActionValue(
          mu,
          mat,
          v,
          min_action=self.action_space.low,
          max_action=self.action_space.high,
      )
  
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 2 for calling the FCBNQuadraticStateQFunction obj's underlying member method code with example usage: obj.__call__(state) and returns: QuadraticActionValue