evaluate method
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;
}