methods method

  1. @override
Map<String, Function> methods()
override

Implementation

@override
Map<String, Function> methods() {
  return {
    'floor': (dynamic n) => _toNum(n)?.floor(),
    'abs': (dynamic n) => _toNum(n)?.abs(),
    'ceil': (dynamic n) => _toNum(n)?.ceil(),
    'round': (dynamic n) => _toNum(n)?.round(),
    'trunc': (dynamic n) => _toNum(n)?.truncate(),
    'log': (dynamic n) => math.log(_toNum(n) ?? 1),
    // Default to 1 to prevent log(0)
    'pow': (dynamic x, dynamic y) => math.pow(_toNum(x) ?? 0, _toNum(y) ?? 0),
    'acos': (dynamic n) => math.acos(_toNum(n) ?? 1),
    'asin': (dynamic n) => math.asin(_toNum(n) ?? 0),
    'atan': (dynamic x) => math.atan(_toNum(x) ?? 0),
    'atan2': (dynamic a, dynamic b) =>
        math.atan2(_toNum(a) ?? 0, _toNum(b) ?? 1),
    'cos': (dynamic x) => math.cos(_toNum(x) ?? 0),
    'exp': (dynamic x) => math.exp(_toNum(x) ?? 0),
    'max': (List<dynamic> args) {
      // Ensure all values are numbers and filter out nulls; then find the max value
      var numbers = args.map(_toNum).whereType<num>().toList();
      if (numbers.isEmpty) return double.negativeInfinity;
      return numbers.reduce(math.max);
    },
    'min': (List<dynamic> args) {
      // Ensure all values are numbers and filter out nulls; then find the min value
      var numbers = args.map(_toNum).whereType<num>().toList();
      if (numbers.isEmpty) return double.infinity;
      return numbers.reduce(math.min);
    },
    'sin': (dynamic x) => math.sin(_toNum(x) ?? 0),
    'sqrt': (List<dynamic> args) {
      num val = 0;
      if (args.length > 0) {
        val = _toNum(args[0]);
      }
      return val.isNegative ? double.nan : math.sqrt(val);
    },
    'tan': (dynamic x) => math.tan(_toNum(x) ?? 0),
    'random': () => math.Random().nextDouble(),
  };
}