code: def _get_unit_data_from_expr(unit_expr, unit_symbol_lut):
      
      # Now for the sympy possibilities
      if isinstance(unit_expr, Number):
          if unit_expr is sympy_one:
              return (1.0, sympy_one)
          return (float(unit_expr), sympy_one)
  
      if isinstance(unit_expr, Symbol):
          return _lookup_unit_symbol(unit_expr.name, unit_symbol_lut)
  
      if isinstance(unit_expr, Pow):
          unit_data = _get_unit_data_from_expr(unit_expr.args[0], unit_symbol_lut)
          power = unit_expr.args[1]
          if isinstance(power, Symbol):
              raise UnitParseError("Invalid unit expression '%s'." % unit_expr)
          conv = float(unit_data[0] ** power)
          unit = unit_data[1] ** power
          return (conv, unit)
  
      if isinstance(unit_expr, Mul):
          base_value = 1.0
          dimensions = 1
          for expr in unit_expr.args:
              unit_data = _get_unit_data_from_expr(expr, unit_symbol_lut)
              base_value *= unit_data[0]
              dimensions *= unit_data[1]
  
          return (float(base_value), dimensions)
  
      raise UnitParseError(
          "Cannot parse for unit data from '%s'. Please supply"
          " an expression of only Unit, Symbol, Pow, and Mul"
          "objects." % str(unit_expr)
      )
docs: Grabs the total base_value and dimensions from a valid unit expression.
  
      Parameters
      ----------
      unit_expr: Unit object, or sympy Expr object
          The expression containing unit symbols.
      unit_symbol_lut: dict
          Provides the unit data for each valid unit symbol.