evaluate method

  1. @override
List<double> evaluate(
  1. List<double> inputs
)
override

Implementation

@override
List<double> evaluate(List<double> inputs) {
  if (size.isEmpty || outputCount == 0) return const <double>[0];
  final List<int> indices = <int>[];
  for (int i = 0; i < size.length; i++) {
    final double low = i * 2 < domain.length ? domain[i * 2] : 0;
    final double high = i * 2 + 1 < domain.length ? domain[i * 2 + 1] : 1;
    final double raw = i < inputs.length ? inputs[i] : 0;
    final double encodeLow = encode != null && i * 2 < encode!.length ? encode![i * 2] : 0;
    final double encodeHigh = encode != null && i * 2 + 1 < encode!.length ? encode![i * 2 + 1] : (size[i] - 1).toDouble();
    final double span = high - low;
    final double position = span == 0 ? encodeLow : encodeLow + (UPdfFunction._clamp(raw, low, high) - low) * (encodeHigh - encodeLow) / span;
    indices.add(position.round().clamp(0, size[i] - 1));
  }
  int flat = 0;
  int stride = 1;
  for (int i = 0; i < indices.length; i++) {
    flat += indices[i] * stride;
    stride *= size[i];
  }
  final List<double> out = <double>[];
  for (int i = 0; i < outputCount; i++) {
    final double raw = _sample(flat * outputCount + i);
    final double decodeLow = decode != null && i * 2 < decode!.length ? decode![i * 2] : range[i * 2];
    final double decodeHigh = decode != null && i * 2 + 1 < decode!.length ? decode![i * 2 + 1] : range[i * 2 + 1];
    out.add(decodeLow + raw * (decodeHigh - decodeLow));
  }
  return out;
}