code: def _calculate_operation_math(self, rule, left, right):
          
  
          # Attempt to keep integer data type for the result, when possible.
          if isinstance(left, IntegerRule) and isinstance(right, IntegerRule):
              result = self.evaluate_binop_math(rule.operation, left.value, right.value)
              if isinstance(result, list):
                  return ListRule([IntegerRule(r) for r in result])
              return IntegerRule(result)
  
          # Otherwise the result is float.
          if isinstance(left, NumberRule) and isinstance(right, NumberRule):
              result = self.evaluate_binop_math(rule.operation, left.value, right.value)
              if isinstance(result, list):
                  return ListRule([FloatRule(r) for r in result])
              return FloatRule(result)
  
          # This point should never be reached.
          raise Exception()
docs: Perform compilation of given math operation by actually calculating given
          math expression.