code: def split(
      self, first: filterlib.Filter, /, *filters: filterlib.Filter
  ) -> tp.Union["State", tp.Tuple["State", ...]]:
      filters = (first, *filters)
      *states, rest = _split_state(self, *filters)
  
      if rest:
          raise ValueError(
              "Non-exhaustive filters, got a non-empty remainder: "
              f"{list(rest.keys())}.\nUse `...` to match all remaining elements."
          )
  
      if len(states) == 1:
          states = states[0]
      else:
          states = tuple(states)
      return states
  
imports: from __future__ import annotations
  import typing
  import jax
  import jax.tree_util
  from flax import traverse_util
  from flax.experimental.nnx.nnx import filterlib, reprlib
  from flax.experimental.nnx.nnx.variables import Variable
label_desc: Use image node_id 15 for calling the State obj's underlying member method code with example usage: obj.split() and returns: states