class_docstr: Combine a list of kernels, e.g. by adding or multiplying (see inheriting
  classes).
  
  Note that kernel composition can be done easily by using the + and * operators
  defined in :class:`Kernel` .
  
  The names of the kernels to be combined are generated from their class
  names.
class_docstr_tok: ["Combine","a","list","of","kernels",",","e.g",".","by","adding","or","multiplying","(","see","inheriting","classes",")",".","Note","that","kernel","composition","can","be","done","easily","by","using","the","+","and","*","operators","defined","in",":","class",":","`","Kernel","`",".","The","names","of","the","kernels","to","be","combined","are","generated","from","their","class","names","."]
docstr: Checks whether the kernels in the combination act on disjoint subsets
  of dimensions. Currently, it is hard to asses whether two slice objects
  will overlap, so this will always return False.
  
  :return: Boolean indicator.
docstr_tok: ["Checks","whether","the","kernels","in","the","combination","act","on","disjoint","subsets","of","dimensions",".","Currently",",","it","is","hard","to","asses","whether","two","slice","objects","will","overlap",",","so","this","will","always","return","False",".",":","return",":","Boolean","indicator","."]
code: def on_separate_dimensions(self) -> bool:
      """
      Checks whether the kernels in the combination act on disjoint subsets
      of dimensions. Currently, it is hard to asses whether two slice objects
      will overlap, so this will always return False.
  
      :return: Boolean indicator.
      """
      if np.any(
          [isinstance(k.active_dims, slice) for k in self.kernels]
      ):
          # Be conservative in the case of a slice object
          return False
      else:
          dimlist = [k.active_dims for k in self.kernels]
          overlapping = False
          for i, dims_i in enumerate(dimlist):
              assert isinstance(dims_i, np.ndarray)
              for dims_j in dimlist[i + 1 :]:
                  assert isinstance(dims_j, np.ndarray)
                  if np.any(
                      dims_i.reshape(-1, 1) == dims_j.reshape(1, -1)
                  ):
                      overlapping = True
          return not overlapping
  
imports: import abc
  from functools import partial, reduce
  from typing import Callable, List, Optional, Sequence, Tuple, Union, overload
  import numpy
  import tensorflow
  from check_shapes import check_shapes
  from ..base import AnyNDArray, Module, TensorType
label_desc: Use image node_id 3 for calling the Combination obj's underlying member method code with example usage: obj.on_separate_dimensions() and returns: False, unknown