"""Read-only numerical probe of current UD00 event/evaluation consistency.""" import argparse from pathlib import Path import subprocess import sys ROOT = Path(__file__).resolve().parents[2] sys.path.insert(0, str(ROOT)) from app.simulation.native_codegen.build import _command, toolchain def main(): parser = argparse.ArgumentParser(description=__doc__) parser.add_argument('--output', type=Path, required=True) args = parser.parse_args() out = args.output.resolve() out.mkdir(parents=True, exist_ok=True) source = out / 'signal-boundary-probe.c' code = r''' #include "SIGNAL_SOURCE" #include int main(void) { double d[24]={0}; d[0]=1e17; d[8]=1e17; d[1]=49000; d[9]=49000; d[16]=.8; d[17]=10; double t=0; puts("boundary,left,at,right,expected_after,at_matches_after"); for(int i=0;i<10;i++) { t=native_signal_break(t,60,0,2,1,d); double expected=i%2==0?49000:1e17; printf("%.17g,%.17g,%.17g,%.17g,%.17g,%d\n",t, native_signal(nextafter(t,-INFINITY),0,2,1,d),native_signal(t,0,2,1,d), native_signal(nextafter(t,INFINITY),0,2,1,d),expected, native_signal(t,0,2,1,d)==expected); } return 0; } ''' source.write_text(code.replace('SIGNAL_SOURCE', (ROOT / 'native/components/modules/signal.c').as_posix()), encoding='ascii') compiler, _, version = toolchain() exe = out / ('signal-boundary-probe.exe' if sys.platform == 'win32' else 'signal-boundary-probe') command = [compiler, '-std=c11', '-O2', '-ffp-contract=off', '-fno-fast-math', '-I' + str(ROOT / 'native/include'), str(source), '-lm', '-o', str(exe)] _command(command, log=[], timeout=60) data = subprocess.check_output([str(exe)], timeout=10) (out / 'signal-boundaries.csv').write_bytes(data) print(version) print(data.decode('ascii')) if __name__ == '__main__': main()