class_docstr: Separates and passes the observation and mask to the wrapped network.
  
  In some environments, different sets of actions are available given different
  observations. To represent this, `env.observation` actually contains both the
  raw observation, and an action mask for this particular observation. Our
  network needs to know how to split `env.observation` into these two parts. The
  raw observation will be fed into the wrapped network, and the action mask will
  be optionally passed into the wrapped network to ensure that the network only
  outputs possible actions.
  
  The network uses the `splitter_fn` to separate the observation from the action
  mask (i.e. `observation, mask = splitter_fn(inputs)`). Depending on the value
  of `pass_mask_to_wrapped_network` the mask is passed into the wrapped network
  or dropped, i.e.
  
  ```python
  obs, mask = splitter_fn(inputs)
  
  wrapped_network(obs, ...)  # If pass_mask_to_wrapped_network is `False`
  
  wrapped_network(obs, ..., mask=mask)  # Otherwise, i.e. it is `True`.
  ```
  
  In each case the observation part is fed into the `wrapped_network`. It is
  expected that the input spec of wrapped network is compatible with the
  observation part of the input of the `MaskSplitterNetwork`.
class_docstr_tok: ["Separates","and","passes","the","observation","and","mask","to","the","wrapped","network",".","In","some","environments",",","different","sets","of","actions","are","available","given","different","observations",".","To","represent","this",",","`","env.observation","`","actually","contains","both","the","raw","observation",",","and","an","action","mask","for","this","particular","observation",".","Our","network","needs","to","know","how","to","split","`","env.observation","`","into","these","two","parts",".","The","raw","observation","will","be","fed","into","the","wrapped","network",",","and","the","action","mask","will","be","optionally","passed","into","the","wrapped","network","to","ensure","that","the","network","only","outputs","possible","actions",".","The","network","uses","the","`","splitter_fn","`","to","separate","the","observation","from","the","action","mask","(","i.e",".","`","observation",",","mask","=","splitter_fn","(","inputs",")","`",")",".","Depending","on","the","value","of","`","pass_mask_to_wrapped_network","`","the","mask","is","passed","into","the","wrapped","network","or","dropped",",","i.e",".","``","`","python","obs",",","mask","=","splitter_fn","(","inputs",")","wrapped_network","(","obs",",","...",")","#","If","pass_mask_to_wrapped_network","is","`","False","`","wrapped_network","(","obs",",","...",",","mask=mask",")","#","Otherwise",",","i.e",".","it","is","`","True","`",".","``","`","In","each","case","the","observation","part","is","fed","into","the","`","wrapped_network","`",".","It","is","expected","that","the","input","spec","of","wrapped","network","is","compatible","with","the","observation","part","of","the","input","of","the","`","MaskSplitterNetwork","`","."]
code: def create_variables(self, input_tensor_spec=None, **kwargs):
      # Mark the current network built.
      self.built = True
  
      # Build wrapped network.
      input_tensor_spec_without_mask = None
      input_tensor_spec = input_tensor_spec or self.input_tensor_spec
      if input_tensor_spec is not None:
          input_tensor_spec_without_mask, _ = self._splitter_fn(
              input_tensor_spec
          )
      return self._wrapped_network.create_variables(
          input_tensor_spec_without_mask, **kwargs
      )
  
file_path: agents/tf_agents/networks/mask_splitter_network.py
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  from typing import Optional, Text
  from tf_agents.networks import network
  from tf_agents.typing import types
  from tf_agents.utils import nest_utils
label_desc: Use image node_id 3 for calling the MaskSplitterNetwork obj's underlying member method code with example usage: obj.create_variables(input_tensor_spec) and returns: self