class_docstr: DimensionSystem represents a coherent set of dimensions.
  
  The constructor takes three parameters:
  
  - base dimensions;
  - derived dimensions: these are defined in terms of the base dimensions
    (for example velocity is defined from the division of length by time);
  - dependency of dimensions: how the derived dimensions depend
    on the base dimensions.
  
  Optionally either the ``derived_dims`` or the ``dimensional_dependencies``
  may be omitted.
code: def extend(
      self, new_base_dims, new_derived_dims=(), new_dim_deps=None
  ):
      deps = dict(self.dimensional_dependencies)
      if new_dim_deps:
          deps.update(new_dim_deps)
  
      new_dim_sys = DimensionSystem(
          tuple(self.base_dims) + tuple(new_base_dims),
          tuple(self.derived_dims) + tuple(new_derived_dims),
          deps,
      )
      new_dim_sys._quantity_dimension_map.update(
          self._quantity_dimension_map
      )
      new_dim_sys._quantity_scale_factors.update(
          self._quantity_scale_factors
      )
      return new_dim_sys
  
imports: from __future__ import annotations
  import collections
  from functools import reduce
  from sympy.core.basic import Basic
  from sympy.core.containers import Dict, Tuple
  from sympy.core.singleton import S
  from sympy.core.sorting import default_sort_key
  from sympy.core.symbol import Symbol
  from sympy.core.sympify import sympify
  from sympy.matrices.dense import Matrix
  from sympy.functions.elementary.trigonometric import TrigonometricFunction
  from sympy.core.expr import Expr
  from sympy.core.power import Pow
label_desc: Use image node_id 8 for calling the DimensionSystem obj's underlying member method code with example usage: obj.extend(new_base_dims, new_derived_dims, new_dim_deps) and returns: new_dim_sys