docs: def assoc_indexed(cls, ops, kwargs):
      r"""Flatten nested indexed structures while pulling out possible prefactors
  
      For example, for an :class:`.IndexedSum`:
  
      .. math::
  
          \sum_j \left( a \sum_i \dots \right) = a \sum_{j, i} \dots
      """
      from qnet.algebra.core.abstract_quantum_algebra import (
          ScalarTimesQuantumExpression)
      term, *ranges = ops
  
      if isinstance(term, cls):
          coeff = 1
      elif isinstance(term, ScalarTimesQuantumExpression):
          coeff = term.coeff
          term = term.term
          if not isinstance(term, cls):
              return ops, kwargs
      else:
          return ops, kwargs
  
      term = term.make_disjunct_indices(*ranges)
      combined_ranges = tuple(ranges) + term.ranges
  
      if coeff == 1:
          return cls.create(term.term, *combined_ranges)
      else:
          bound_symbols = set([r.index_symbol for r in combined_ranges])
          if len(coeff.free_symbols.intersection(bound_symbols)) == 0:
              return coeff * cls.create(term.term, *combined_ranges)
          else:
              return cls.create(coeff * term.term, *combined_ranges)