code: def get_advsubtensor_axis(indices):
      """Determine the axis at which an array index is applied.
  
      This only works for ``take``-like indices: e.g. ``x[:, :, idx, ...]``.  For
      the above example, `get_advsubtensor_axis` would return ``2``.  If it
      encounters anything other than a set of `indices` containing full slices
      and an array/tensor index, it will return ``None``.
  
      """
      found_idx = False
      axis = 0
      for idx in indices:
          if not found_idx and is_full_slice(idx):
              # Preceding full slices
              axis += 1
          elif found_idx and not is_full_slice(idx):
              # We don't handle multiple indices
              return
          elif found_idx and is_full_slice(idx):
              # Trailing full slices
              continue
          else:
              found_idx = True
  
      if isinstance(
          indices[axis],
          (TensorConstant, TensorVariable, TensorSharedVariable),
      ):
          return axis
  
imports: import sys
  from collections.abc import Iterable
  import numpy
  import pytensor
  import pytensor.scalar.basic
  from pytensor import compile
  from pytensor.graph.basic import Constant, Variable
  from pytensor.graph.rewriting.basic import WalkingGraphRewriter, copy_stack_trace, in2out, node_rewriter
  from pytensor.raise_op import Assert
  from pytensor.tensor.basic import Alloc, Join, MakeVector, ScalarFromTensor, TensorFromScalar, alloc, as_tensor, cast, concatenate, extract_constant, get_underlying_scalar_constant_value, register_infer_shape, switch
  from pytensor.tensor.blockwise import Blockwise
  from pytensor.tensor.elemwise import Elemwise
  from pytensor.tensor.exceptions import NotScalarConstantError
  from pytensor.tensor.math import Dot, add, and_, ceil_intdiv, dot, eq, ge, gt, le, lt, maximum, minimum, or_
  from pytensor.tensor.math import all
  from pytensor.tensor.rewriting.basic import register_canonicalize, register_specialize, register_stabilize
  from pytensor.tensor.shape import Shape, SpecifyShape, Unbroadcast, shape_padleft, shape_tuple, specify_shape, unbroadcast
  from pytensor.tensor.sharedvar import TensorSharedVariable
  from pytensor.tensor.subtensor import AdvancedIncSubtensor, AdvancedIncSubtensor1, AdvancedSubtensor, AdvancedSubtensor1, IncSubtensor, Subtensor, advanced_inc_subtensor1, advanced_subtensor, advanced_subtensor1, as_index_constant, as_index_literal, get_canonical_form_slice, get_constant_idx, get_idx_list, get_slice_elements, inc_subtensor, indices_from_subtensor
  from pytensor.tensor.type import TensorType
  from pytensor.tensor.type_other import NoneTypeT, SliceConstant, SliceType
  from pytensor.tensor.variable import TensorConstant, TensorVariable
label_desc: Use image node_id 4 for calling a global function with example usage: get_advsubtensor_axis(indices) and returns: axis