diff --git a/.github/workflows/cyclic-inverse-stride-bridge.yml b/.github/workflows/cyclic-inverse-stride-bridge.yml new file mode 100644 index 0000000000..d30c9e27c6 --- /dev/null +++ b/.github/workflows/cyclic-inverse-stride-bridge.yml @@ -0,0 +1,27 @@ +name: Cyclic inverse stride bridge +on: + pull_request: + paths: + - 'research/cyclic-inverse-stride-bridge/**' + - '.github/workflows/cyclic-inverse-stride-bridge.yml' + push: + paths: + - 'research/cyclic-inverse-stride-bridge/**' + - '.github/workflows/cyclic-inverse-stride-bridge.yml' + workflow_dispatch: + +permissions: + contents: read + +jobs: + verify: + runs-on: ubuntu-latest + strategy: + matrix: + python: ['3.11', '3.14'] + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-python@v5 + with: + python-version: ${{ matrix.python }} + - run: python -B -I -O research/cyclic-inverse-stride-bridge/verify.py --check diff --git a/research/cyclic-inverse-stride-bridge/EXPECTED.json b/research/cyclic-inverse-stride-bridge/EXPECTED.json new file mode 100644 index 0000000000..5ec1bed50c --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/EXPECTED.json @@ -0,0 +1,3936 @@ +{ + "controls": [ + "rotated_closure_reseed_rejected", + "low_precision_refused", + "unit_coefficient_rejected", + "wrong_inner_shift_rejected" + ], + "generic": { + "cases": 2052, + "max_error_to_bound_squared": 0.00032978173727428434 + }, + "kernels": [ + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 1, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 2, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 2, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 3, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 3, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 3, + "radix": 3, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 5, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 5, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "1", + "length": 5, + "radix": 3, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "1", + "length": 5, + "radix": 3, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 5, + "radix": 3, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 8, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "1", + "length": 8, + "radix": 3, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "1", + "length": 8, + "radix": 3, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "1", + "length": 8, + "radix": 3, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 3, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 3, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 3, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 3, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 3, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 3, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 3, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -747.405, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 3, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -747.405 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -748.405, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 3, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -748.405 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 1, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 2, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 2, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 3, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 3, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 3, + "radix": 4, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 5, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 5, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "1", + "length": 5, + "radix": 4, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "1", + "length": 5, + "radix": 4, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 5, + "radix": 4, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 8, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "1", + "length": 8, + "radix": 4, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "1", + "length": 8, + "radix": 4, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "1", + "length": 8, + "radix": 4, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 4, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 4, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 4, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 4, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 4, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 4, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 4, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -741.41, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 4, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -741.41 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -742.41, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 4, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -742.41 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 1, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 2, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 2, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 3, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 3, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 3, + "radix": 5, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 5, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 5, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "1", + "length": 5, + "radix": 5, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "1", + "length": 5, + "radix": 5, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 5, + "radix": 5, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 8, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "1", + "length": 8, + "radix": 5, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "1", + "length": 8, + "radix": 5, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "1", + "length": 8, + "radix": 5, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 5, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 5, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 5, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 5, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 5, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 5, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 5, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -730.677, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 5, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -730.677 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -731.677, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 5, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -731.677 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 1, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 2, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 2, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 3, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 3, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 3, + "radix": 7, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 5, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 5, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "1", + "length": 5, + "radix": 7, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "1", + "length": 5, + "radix": 7, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 5, + "radix": 7, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 8, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "1", + "length": 8, + "radix": 7, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "1", + "length": 8, + "radix": 7, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "1", + "length": 8, + "radix": 7, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 7, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 7, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 7, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 7, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 7, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 7, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 7, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -696.608, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 7, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -696.608 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -697.608, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 7, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -697.608 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 1, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 2, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 2, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 3, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 3, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 3, + "radix": 8, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 5, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 5, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "1", + "length": 5, + "radix": 8, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "1", + "length": 5, + "radix": 8, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 5, + "radix": 8, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 8, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "1", + "length": 8, + "radix": 8, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "1", + "length": 8, + "radix": 8, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "1", + "length": 8, + "radix": 8, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 8, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 8, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 8, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 8, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 8, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 8, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 8, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -655.193, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 8, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -655.193 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -656.193, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 8, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -656.193 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 1, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 2, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 2, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 3, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 3, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 3, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -668.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -668.83 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -669.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -669.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 1, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 2, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 2, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 3, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 3, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 3, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 5, + "radix": 9, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "1", + "length": 8, + "radix": 9, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 9, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -695.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -695.83 + }, + { + "dense": false, + "embedding": 2, + "execution_bound_log2": -696.83, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 9, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -696.83 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 1, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 2, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 2, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 3, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 3, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 3, + "radix": 11, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 5, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 5, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "1", + "length": 5, + "radix": 11, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "1", + "length": 5, + "radix": 11, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 5, + "radix": 11, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 8, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "1", + "length": 8, + "radix": 11, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "1", + "length": 8, + "radix": 11, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "1", + "length": 8, + "radix": 11, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 11, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 11, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 11, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 11, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 11, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 11, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 11, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -648.219, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 11, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -648.219 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -649.219, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 11, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -649.219 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 1, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 2, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 2, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 3, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 3, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 3, + "radix": 13, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 5, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 5, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "1", + "length": 5, + "radix": 13, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "1", + "length": 5, + "radix": 13, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 5, + "radix": 13, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 8, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "1", + "length": 8, + "radix": 13, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "1", + "length": 8, + "radix": 13, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "1", + "length": 8, + "radix": 13, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 13, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 13, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 13, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 13, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 13, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 13, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 13, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -601.715, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 13, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -601.715 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -602.715, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 13, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -602.715 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 1, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 2, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 2, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 3, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 3, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 3, + "radix": 16, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 5, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 5, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "1", + "length": 5, + "radix": 16, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "1", + "length": 5, + "radix": 16, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 5, + "radix": 16, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 8, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "1", + "length": 8, + "radix": 16, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "1", + "length": 8, + "radix": 16, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "1", + "length": 8, + "radix": 16, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 1, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": true, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 2, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 3, + "radix": 16, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 16, + "stride": 0, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 16, + "stride": 2, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 16, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 5, + "radix": 16, + "stride": 4, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 16, + "stride": 1, + "target_bits": 128, + "total_bound_log2": -614.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 16, + "stride": 3, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -613.093, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 16, + "stride": 5, + "target_bits": 128, + "total_bound_log2": -613.093 + }, + { + "dense": false, + "embedding": 1, + "execution_bound_log2": -614.093, + "gauge": "3/5+4i/5", + "length": 8, + "radix": 16, + "stride": 7, + "target_bits": 128, + "total_bound_log2": -614.093 + } + ], + "status": "passed", + "traffic": { + "max_records_per_entry": 29.671875, + "rows": [ + { + "length": 1, + "levels": 0, + "pr628_sort_route_records": 0, + "records": 2, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 1, + "levels": 0, + "pr628_sort_route_records": 0, + "records": 2, + "records_per_entry": 2.0, + "stride": 1 + }, + { + "length": 1, + "levels": 0, + "pr628_sort_route_records": 0, + "records": 2, + "records_per_entry": 2.0, + "stride": 2 + }, + { + "length": 1, + "levels": 0, + "pr628_sort_route_records": 0, + "records": 2, + "records_per_entry": 2.0, + "stride": 3 + }, + { + "length": 2, + "levels": 0, + "pr628_sort_route_records": 8, + "records": 4, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 2, + "levels": 1, + "pr628_sort_route_records": 8, + "records": 32, + "records_per_entry": 16.0, + "stride": 1 + }, + { + "length": 2, + "levels": 0, + "pr628_sort_route_records": 8, + "records": 4, + "records_per_entry": 2.0, + "stride": 2 + }, + { + "length": 2, + "levels": 1, + "pr628_sort_route_records": 8, + "records": 32, + "records_per_entry": 16.0, + "stride": 3 + }, + { + "length": 3, + "levels": 0, + "pr628_sort_route_records": 24, + "records": 6, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 3, + "levels": 1, + "pr628_sort_route_records": 24, + "records": 45, + "records_per_entry": 15.0, + "stride": 1 + }, + { + "length": 3, + "levels": 1, + "pr628_sort_route_records": 24, + "records": 57, + "records_per_entry": 19.0, + "stride": 2 + }, + { + "length": 3, + "levels": 0, + "pr628_sort_route_records": 24, + "records": 6, + "records_per_entry": 2.0, + "stride": 3 + }, + { + "length": 7, + "levels": 0, + "pr628_sort_route_records": 84, + "records": 14, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 7, + "levels": 1, + "pr628_sort_route_records": 84, + "records": 97, + "records_per_entry": 13.857142857142858, + "stride": 1 + }, + { + "length": 7, + "levels": 2, + "pr628_sort_route_records": 84, + "records": 135, + "records_per_entry": 19.285714285714285, + "stride": 2 + }, + { + "length": 7, + "levels": 2, + "pr628_sort_route_records": 84, + "records": 168, + "records_per_entry": 24.0, + "stride": 3 + }, + { + "length": 7, + "levels": 2, + "pr628_sort_route_records": 84, + "records": 196, + "records_per_entry": 28.0, + "stride": 4 + }, + { + "length": 7, + "levels": 1, + "pr628_sort_route_records": 84, + "records": 125, + "records_per_entry": 17.857142857142858, + "stride": 6 + }, + { + "length": 64, + "levels": 0, + "pr628_sort_route_records": 1536, + "records": 128, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 64, + "levels": 1, + "pr628_sort_route_records": 1536, + "records": 838, + "records_per_entry": 13.09375, + "stride": 1 + }, + { + "length": 64, + "levels": 1, + "pr628_sort_route_records": 1536, + "records": 844, + "records_per_entry": 13.1875, + "stride": 2 + }, + { + "length": 64, + "levels": 2, + "pr628_sort_route_records": 1536, + "records": 909, + "records_per_entry": 14.203125, + "stride": 3 + }, + { + "length": 64, + "levels": 2, + "pr628_sort_route_records": 1536, + "records": 1359, + "records_per_entry": 21.234375, + "stride": 21 + }, + { + "length": 64, + "levels": 1, + "pr628_sort_route_records": 1536, + "records": 1024, + "records_per_entry": 16.0, + "stride": 32 + }, + { + "length": 64, + "levels": 3, + "pr628_sort_route_records": 1536, + "records": 1899, + "records_per_entry": 29.671875, + "stride": 33 + }, + { + "length": 64, + "levels": 4, + "pr628_sort_route_records": 1536, + "records": 1881, + "records_per_entry": 29.390625, + "stride": 39 + }, + { + "length": 64, + "levels": 1, + "pr628_sort_route_records": 1536, + "records": 1094, + "records_per_entry": 17.09375, + "stride": 63 + }, + { + "length": 1000, + "levels": 0, + "pr628_sort_route_records": 40000, + "records": 2000, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 1000, + "levels": 1, + "pr628_sort_route_records": 40000, + "records": 13006, + "records_per_entry": 13.006, + "stride": 1 + }, + { + "length": 1000, + "levels": 1, + "pr628_sort_route_records": 40000, + "records": 13012, + "records_per_entry": 13.012, + "stride": 2 + }, + { + "length": 1000, + "levels": 2, + "pr628_sort_route_records": 40000, + "records": 13077, + "records_per_entry": 13.077, + "stride": 3 + }, + { + "length": 1000, + "levels": 5, + "pr628_sort_route_records": 40000, + "records": 16238, + "records_per_entry": 16.238, + "stride": 97 + }, + { + "length": 1000, + "levels": 2, + "pr628_sort_route_records": 40000, + "records": 21327, + "records_per_entry": 21.327, + "stride": 333 + }, + { + "length": 1000, + "levels": 1, + "pr628_sort_route_records": 40000, + "records": 16000, + "records_per_entry": 16.0, + "stride": 500 + }, + { + "length": 1000, + "levels": 3, + "pr628_sort_route_records": 40000, + "records": 29511, + "records_per_entry": 29.511, + "stride": 501 + }, + { + "length": 1000, + "levels": 6, + "pr628_sort_route_records": 40000, + "records": 28492, + "records_per_entry": 28.492, + "stride": 618 + }, + { + "length": 1000, + "levels": 1, + "pr628_sort_route_records": 40000, + "records": 17006, + "records_per_entry": 17.006, + "stride": 999 + }, + { + "length": 4096, + "levels": 0, + "pr628_sort_route_records": 196608, + "records": 8192, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 4096, + "levels": 1, + "pr628_sort_route_records": 196608, + "records": 53254, + "records_per_entry": 13.00146484375, + "stride": 1 + }, + { + "length": 4096, + "levels": 1, + "pr628_sort_route_records": 196608, + "records": 53260, + "records_per_entry": 13.0029296875, + "stride": 2 + }, + { + "length": 4096, + "levels": 2, + "pr628_sort_route_records": 196608, + "records": 53325, + "records_per_entry": 13.018798828125, + "stride": 3 + }, + { + "length": 4096, + "levels": 5, + "pr628_sort_route_records": 196608, + "records": 56410, + "records_per_entry": 13.77197265625, + "stride": 97 + }, + { + "length": 4096, + "levels": 2, + "pr628_sort_route_records": 196608, + "records": 87375, + "records_per_entry": 21.331787109375, + "stride": 1365 + }, + { + "length": 4096, + "levels": 1, + "pr628_sort_route_records": 196608, + "records": 65536, + "records_per_entry": 16.0, + "stride": 2048 + }, + { + "length": 4096, + "levels": 3, + "pr628_sort_route_records": 196608, + "records": 120843, + "records_per_entry": 29.502685546875, + "stride": 2049 + }, + { + "length": 4096, + "levels": 8, + "pr628_sort_route_records": 196608, + "records": 117574, + "records_per_entry": 28.70458984375, + "stride": 2531 + }, + { + "length": 4096, + "levels": 1, + "pr628_sort_route_records": 196608, + "records": 69638, + "records_per_entry": 17.00146484375, + "stride": 4095 + }, + { + "length": 65536, + "levels": 0, + "pr628_sort_route_records": 4194304, + "records": 131072, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 65536, + "levels": 1, + "pr628_sort_route_records": 4194304, + "records": 851974, + "records_per_entry": 13.000091552734375, + "stride": 1 + }, + { + "length": 65536, + "levels": 1, + "pr628_sort_route_records": 4194304, + "records": 851980, + "records_per_entry": 13.00018310546875, + "stride": 2 + }, + { + "length": 65536, + "levels": 2, + "pr628_sort_route_records": 4194304, + "records": 852045, + "records_per_entry": 13.001174926757812, + "stride": 3 + }, + { + "length": 65536, + "levels": 5, + "pr628_sort_route_records": 4194304, + "records": 854741, + "records_per_entry": 13.042312622070312, + "stride": 97 + }, + { + "length": 65536, + "levels": 2, + "pr628_sort_route_records": 4194304, + "records": 1398095, + "records_per_entry": 21.333236694335938, + "stride": 21845 + }, + { + "length": 65536, + "levels": 1, + "pr628_sort_route_records": 4194304, + "records": 1048576, + "records_per_entry": 16.0, + "stride": 32768 + }, + { + "length": 65536, + "levels": 3, + "pr628_sort_route_records": 4194304, + "records": 1933323, + "records_per_entry": 29.500167846679688, + "stride": 32769 + }, + { + "length": 65536, + "levels": 9, + "pr628_sort_route_records": 4194304, + "records": 1866755, + "records_per_entry": 28.484420776367188, + "stride": 40503 + }, + { + "length": 65536, + "levels": 1, + "pr628_sort_route_records": 4194304, + "records": 1114118, + "records_per_entry": 17.000091552734375, + "stride": 65535 + }, + { + "length": 99991, + "levels": 0, + "pr628_sort_route_records": 6799388, + "records": 199982, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 99991, + "levels": 1, + "pr628_sort_route_records": 6799388, + "records": 1299889, + "records_per_entry": 13.000060005400487, + "stride": 1 + }, + { + "length": 99991, + "levels": 2, + "pr628_sort_route_records": 6799388, + "records": 1299927, + "records_per_entry": 13.000440039603564, + "stride": 2 + }, + { + "length": 99991, + "levels": 2, + "pr628_sort_route_records": 6799388, + "records": 1299960, + "records_per_entry": 13.000770069306238, + "stride": 3 + }, + { + "length": 99991, + "levels": 3, + "pr628_sort_route_records": 6799388, + "records": 1301998, + "records_per_entry": 13.021151903671331, + "stride": 97 + }, + { + "length": 99991, + "levels": 2, + "pr628_sort_route_records": 6799388, + "records": 2133135, + "records_per_entry": 21.33326999429949, + "stride": 33330 + }, + { + "length": 99991, + "levels": 2, + "pr628_sort_route_records": 6799388, + "records": 2549760, + "records_per_entry": 25.499894990549148, + "stride": 49995 + }, + { + "length": 99991, + "levels": 2, + "pr628_sort_route_records": 6799388, + "records": 2949724, + "records_per_entry": 29.499894990549148, + "stride": 49996 + }, + { + "length": 99991, + "levels": 8, + "pr628_sort_route_records": 6799388, + "records": 2851729, + "records_per_entry": 28.51985678711084, + "stride": 61797 + }, + { + "length": 99991, + "levels": 1, + "pr628_sort_route_records": 6799388, + "records": 1699853, + "records_per_entry": 17.000060005400485, + "stride": 99990 + }, + { + "length": 131072, + "levels": 0, + "pr628_sort_route_records": 8912896, + "records": 262144, + "records_per_entry": 2.0, + "stride": 0 + }, + { + "length": 131072, + "levels": 1, + "pr628_sort_route_records": 8912896, + "records": 1703942, + "records_per_entry": 13.000045776367188, + "stride": 1 + }, + { + "length": 131072, + "levels": 1, + "pr628_sort_route_records": 8912896, + "records": 1703948, + "records_per_entry": 13.000091552734375, + "stride": 2 + }, + { + "length": 131072, + "levels": 2, + "pr628_sort_route_records": 8912896, + "records": 1703997, + "records_per_entry": 13.000465393066406, + "stride": 3 + }, + { + "length": 131072, + "levels": 4, + "pr628_sort_route_records": 8912896, + "records": 1706775, + "records_per_entry": 13.021659851074219, + "stride": 97 + }, + { + "length": 131072, + "levels": 2, + "pr628_sort_route_records": 8912896, + "records": 2796190, + "records_per_entry": 21.333236694335938, + "stride": 43690 + }, + { + "length": 131072, + "levels": 1, + "pr628_sort_route_records": 8912896, + "records": 2097152, + "records_per_entry": 16.0, + "stride": 65536 + }, + { + "length": 131072, + "levels": 3, + "pr628_sort_route_records": 8912896, + "records": 3866635, + "records_per_entry": 29.500083923339844, + "stride": 65537 + }, + { + "length": 131072, + "levels": 9, + "pr628_sort_route_records": 8912896, + "records": 3733510, + "records_per_entry": 28.484420776367188, + "stride": 81006 + }, + { + "length": 131072, + "levels": 1, + "pr628_sort_route_records": 8912896, + "records": 2228230, + "records_per_entry": 17.000045776367188, + "stride": 131071 + } + ] + } +} diff --git a/research/cyclic-inverse-stride-bridge/NOTICE.md b/research/cyclic-inverse-stride-bridge/NOTICE.md new file mode 100644 index 0000000000..4dcef892b5 --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/NOTICE.md @@ -0,0 +1,22 @@ +# Notice and attribution + +New material in this directory is by Rohan Guliani (@Rohansguliani) and is +released under Apache-2.0. Substantial AI assistance was used in the +derivation, implementation and writing. No human peer review or +proof-assistant verification is claimed. + +Predecessor work: + +* **#621, Ali Romman (aliromman).** Kernel and the `L`-uniform circle and + inverse bounds (`research/prime-power-cyclic-inverse`). +* **#628, Chafik Boukhalfa (chafreaky).** Certified approximate + factorization, preparation and phase budgets, the two-scan primitive, the + dirty-shear composition and the sort-route layout charge. The files in + `vendor/` are byte-identical to #628 head `0768f97d`. Its notice is + retained in `vendor/PR628-NOTICE.md`. +* **#764, Charles Bethin (cbethin).** The shared-suffix identity + `1-Q >= beta G` and the inverse-square scan bound, used in Lemma 1. No + #764 code is consumed. + +The two-stack queue and Euclidean stride reduction are standard techniques. +No literature-priority claim is made. diff --git a/research/cyclic-inverse-stride-bridge/PROOF.md b/research/cyclic-inverse-stride-bridge/PROOF.md new file mode 100644 index 0000000000..8987bfdfc4 --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/PROOF.md @@ -0,0 +1,211 @@ +# Linear-traffic rounded inversion for every cyclic stride + +## Result and scope + +PR628 inverts PR621's kernel `P(tau Z_L^w)` for neighbouring strides with +precision `p+O(r^4)` that does not depend on `L`. For other strides it routes +the cycles into contiguous order with two merge sorts, at a cost of +`O(L(B+log L)log L)`. That sort cost brings back a `log L` traffic factor. +This note removes the sort. The solver below handles every stride `w` with +`O(L)` sequential record moves and `O(L)` rounded operations per factor. Its +error bound does not depend on `L`. + +**Theorem 1 (one stable factor, any stride).** Let `L>=1`, let `w` be any +integer, and let `0= g+2+log2(K+1)`, where `beta=2^-g`. Any execution +budget for target precision `p >= log2(log2 L + 2)` already meets it. + +## Algorithm + +Normalize `w` modulo `L`. If `2w>L`, reverse the arrays. Reversal turns the +stride into `L-w`, which is at most `L/2`. A tape reads one array backwards +while it writes another forwards, which costs `2L` record moves each way. +If `w=0`, return `x_i/(1-b_i)` rounded. + +Otherwise the residue classes modulo `w` form chains. Chain `c` contains +`c, c+w, c+2w, ...`. Each chain has at least two members because `w<=L/2`. + +1. **Pass A.** Scan `i=0..L-1`. Read the lag-`w` predecessor from a FIFO + that starts with `w` start markers. Compute the zero-seed value + `zhat_i = rnd(x_i + b_i zhat_(i-w))` and the chain product + `pihat_i = rnd(b_i pihat_(i-w))`. At a chain start, `zhat=x` and + `pihat=b` exactly. +2. **Closure.** The last `w` positions `e=L-w+k` are the chain ends. The + start of chain `c` has predecessor `c-w+L`, which is end `k=c`. Hence the + end values satisfy + + Y_k = zhat_(L-w+k) + pihat_(L-w+k) Y_((k+L) mod w). + + This is the same problem on `w` entries with stride `(-L) mod w`. + Solve it recursively. +3. **Pass C.** Scan `i=0..L-1` again. This time the FIFO starts with + `Y_0..Y_(w-1)`. Compute `yhat_i = rnd(x_i + b_i * pop())` and push it. + +Each level at least halves the length, so `sum_k L_k <= 2L` and +`K <= floor(log2 L)+1`. A FIFO built from two stacks moves each record at +most four times: a push, a transfer pop, a transfer push and a pop. A stack +on a tape keeps its head at the top. Pass A, the closure handoff, pass C and +the two reversals therefore cost at most a fixed multiple of `L_k` record +moves at level `k`. In the finite replay through `L=131072` the maximum is +29.68 per entry. For comparison, PR628's two sorts make +`4L ceil(log2 L)` record moves. A record holds the `O(B)` bits of one or +two numbers. Moving it costs `O(B)` tape cells. Loop counters need only +amortized `O(1)` bit changes per step, plus `O(log L)` per level for the +values `L_k` and `w_k`. Stride arithmetic over all levels costs +`O(log^2 L)` bit operations. + +## Proof of Theorem 1 + +**Notation.** `Shat_k` is the computed system at level `k`, with data +`xhat^k` and coefficients `bhat^k`. `Ytilde^k` is its exact solution, and +`m_k = min_i (1-|bhat^k_i|)` is its margin. `S*` is the exact Schur +complement of `Shat_k` on the chain ends. The solution of `S*` is the +restriction of `Ytilde^k` to those ends. + +**Lemma 1 (PR764's shared-suffix identity).** Let `q_1..q_l` lie in +`[0,1-m]`. Put `P_j = q_(j+1)...q_l` and `G = sum_j P_j`. Then + + sum_j (1-q_j) P_j = 1 - q_1...q_l, hence G <= (1-|pi|)/m. + +The quantity `pi` is the chain product. A rounded recursion multiplies its +previous error by `b` and adds at most `u`, so after a chain its error is at +most `uG`. Therefore + + |zhat_e - z_e| <= u(1-|pi_e|)/m_k, |pihat_e - pi_e| <= u(1-|pi_e|)/m_k. + +**Lemma 2 (margins never shrink below beta).** From Lemma 1, +`1-|pihat| >= (1-|pi|)(1-u/m_k)`. A chain has at least two members, so +`1-|pi| >= 1-(1-m_k)^2 = m_k(2-m_k)`. Hence `m_(k+1) >= f(m_k)` with +`f(m)=(2-m)(m-u)`. The function `f` is concave on `[beta,1]`. At the +endpoints, + + f(beta) = (2-beta)(beta-u) >= (3/2)(2beta/3) = beta when beta<=1/2 and u<=beta/3, + f(1) = 1-u >= beta. + +Therefore `m_k >= beta` at every level. The bound does not depend on depth. +The replay checks `|bhat|<=1-beta` exactly at every level of all 2052 +generic cases. + +**Lemma 3 (weighted data).** Suppose `|xhat^k_i| <= A_k(1-|bhat^k_i|)`. +Then the telescoping identity gives `|z_e| <= A_k(1-|pi_e|)`. Lemma 1 adds +at most `u(1-|pi_e|)/m_k`, and Lemma 2 compares `1-|pi|` with `1-|pihat|`. +Together they give the same invariant at level `k+1` with + + A_(k+1) = (A_k + u/beta)/(1-u/beta), A_0 = B/beta. + +The admission condition `4(K+1)u <= beta` gives `A_k <= 2A_0+1` at every +level. + +**Lemma 4 (weighted inverse).** Suppose `|v_i| <= C(1-|b_i|)`. Then the +solution of `Y = v + b W Y` satisfies `|Y_i| <= C`. The Neumann series has +weights `P_j(1-q_j)`, and these telescope to at most one. In particular, +`|Ytilde^k| <= A_k`. + +**Error recursion.** `Shat_(k+1)` differs from `S*` only by the pass-A +rounding. The two solutions satisfy + + (I - Bhat W)(Ytilde^(k+1) - Y*) = Delta x + Delta B * W Y*. + +By Lemma 1, each entry of the right side is at most +`(u/beta)(1+A_k)(1-|pi_e|)`, and `1-|pi_e| <= (1-|pihat_e|)/(1-u/beta)`. +Lemma 4 then bounds the solution difference by +`(u/beta)(1+A_k)/(1-u/beta) <= 2(u/beta)(1+A_k)`. Pass C seeds every chain +with the closure value. The seed error is multiplied by the chain prefix +product. That product contains at least one coefficient, so its modulus is +at most `1-beta`. Pass C's own rounding adds at most `u/beta`. Let +`e_k = |Yhat^k - Ytilde^k|`. Then + + e_k <= (1-beta)(e_(k+1) + 2(u/beta)(1+A_k)) + u/beta, + e_K <= u (base case: one exactly rounded division, |1-b|>=beta). + +Sum this recursion. At level 0 the data are exact, so `Ytilde^0 = y`. With +`A_k <= 2B/beta+1` and `sum_(k= log2(log2 L+2)`. + +## Not closed here + +* PR628's dirty-array contract allows `ceil(log2(r-1))` borrowed arrays and + only `O(1)` clean scalars. That contract arises in the exact-width word + model. The stride solver here uses blank scratch tape, which is free in + the sequential-tape model and is erased at linear cost. It has not been + recast for borrowed arrays. That case still uses PR628's + `O(p+log(D+1)+r^5)` precision and neighbouring-stride leaves. +* The guard `O(r^4)` is a proof bound. Numerical probes for `r<=32` put + `min_|z|=1 |P(z)|` near `2^-10`, while PR621's bound gives up to + `2^-27880`. A sharper lower bound would shrink every budget above. + This package does not certify those probe values. +* Composition across the complete transform, the transform's phase + collection, normalization and the integer-multiplication reduction remain + open. No integer kappa, complex b, or BIT c changes. diff --git a/research/cyclic-inverse-stride-bridge/README.md b/research/cyclic-inverse-stride-bridge/README.md new file mode 100644 index 0000000000..f33410800c --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/README.md @@ -0,0 +1,81 @@ +# Cyclic inverse stride bridge + +This package continues the open obligation recorded for #621 in +[the K492 review](../../docs/research/community-k492-review.md). That +obligation is to pay for efficient preparation, rounded execution, +restoration and tape before using #621's length-independent inverse bound. + +#628 pays for preparation and neighbouring-stride execution. #764 sharpens +the scan rounding. Both PRs are still open and are pinned in +[SOURCE.json](SOURCE.json). For any stride other than ±1, #628's route +depends on two merge sorts costing `O(L(B+log L)log L)`. Those sorts bring +back a `log L` factor that the inverse bound was supposed to remove. + +[PROOF.md](PROOF.md) replaces the sorts with a Euclidean chain/closure +recursion. A FIFO built from two stacks gives every pass a lag-`w` +predecessor in natural order. Theorem 1 gives one stable factor at any +stride with: + +* at most `40L` sequential record moves; +* `O(L)` rounded operations; +* an error bound `min(K,1/beta)(u/beta)(5+4B/beta)+u` that holds for every + `L`. + +The proof reuses #764's shared-suffix identity. It also shows that margins +do not shrink across recursion levels. Theorem 2 composes the solver with +#628's certified factorization. The kernel precision is +`p+(n+2)g+O(log r)=p+O(r^4)`, with no `L` term. One admission condition, +`p >= log2(log2 L+2)`, depends on `L`. The table in PROOF.md charges every +listed cost. + +**Verdict:** consider one inverse of `P(tau Z_L^w)` on fixed sequential +tapes, with all four listed costs paid. Its cost per entry still does not +depend on `L`, so #621's gain survives. Three things are not claimed: + +* a borrowed-array (dirty) form of the stride solver; +* composition across the complete transform; +* any change to integer kappa, complex b, or BIT c. + +## Replay + +Python 3.11 or later with the standard library only. The replay takes +about 100 seconds: + +```sh +python3 -B -I -O research/cyclic-inverse-stride-bridge/verify.py --check +``` + +Expected: `PASS_CYCLIC_INVERSE_STRIDE_BRIDGE generic=2052 kernel_cases=300 +controls=4 max_records_per_entry=29.671875`. + +The replay covers the following checks: + +* **Generic cases (2052).** `L=1..18`, every stride in `[-L,L)`, + `beta in {1/4,1/8,1/32}` and two grids. Each case is compared exactly + with an independent per-cycle geometric-closure oracle against Theorem 1. + The margin `|bhat|<=1-beta` is checked at every recursion level. +* **Traffic.** Count-only runs reach `L=131072`. Strides include `0`, `±1`, + `L/2`, `L/2+1`, golden-ratio strides and the prime `L=99991`. Every run is + checked against `40L` record moves. The maximum observed is + 29.68 moves per entry, compared with #628's + sort route of `4L ceil(log2 L)`. +* **Kernel cases (300).** These use all ten #628 certified kernels, radix 3 + through 16. Gauges are `1` and `3/5+4i/5`. Lengths are 1, 2, 3, 5 and 8, + with all strides for `L<=5`. Each case evaluates Theorem 2's exact budget + against the target together with #628's perturbation bound. Each also + checks the expanded polynomial residual. 81 cases are compared with an + independent dense Gauss–Jordan solve. +* **Controls (4).** + * a rotated closure reseed; + * a precision below the admission condition; + * a unit coefficient; + * a wrong inner-shift direction. + + The replay rejects all four. + +The vendored #628 files must match the hashes in SOURCE.json byte for byte. +The verifier refuses drift. `--write` regenerates `EXPECTED.json`. + +Finite cases support the reference implementation. The written proof +carries the all-`L` claims. The Python lists model sequential tapes and +count record moves; they are not a literal Turing machine. diff --git a/research/cyclic-inverse-stride-bridge/SOURCE.json b/research/cyclic-inverse-stride-bridge/SOURCE.json new file mode 100644 index 0000000000..e1624e72dd --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/SOURCE.json @@ -0,0 +1,15 @@ +{ + "base_commit": "66849e1475c930fd7732b1a0067ffee7e1e95f60", + "pr621": {"url": "https://github.com/CrocSwap/integer-mult-bounds/pull/621", "head": "520774462b19b29af41554b74def31f9d01e997e", "author": "Ali Romman (aliromman)", "use": "circle lower bound and L-uniform inverse bound; on main at research/prime-power-cyclic-inverse"}, + "pr628": {"url": "https://github.com/CrocSwap/integer-mult-bounds/pull/628", "head": "0768f97d06c623b8211e651543c66135796b62bf", "author": "Chafik Boukhalfa (chafreaky)", "use": "certified factors, preparation and perturbation budget, dirty-shear composition, sort-route layout charge; vendored files below are byte-identical to that head"}, + "pr764": {"url": "https://github.com/CrocSwap/integer-mult-bounds/pull/764", "head": "983d66f0f2e48ee500ec7eee2da9244c001c5064", "author": "Charles Bethin (cbethin)", "use": "shared-suffix identity 1-Q >= beta*G, reused in Lemma 1; no code consumed"}, + "vendored_sha256": { + "check.py": "a3e46b556894d71a1c83bbbac01c50c1a541285fc9422a3567d5eb1d1ee86e7d", + "FACTORS.json": "643d60ac24d5e67f6c9305175bd1c99bf5e42edfef6d1995c051e0b98ba446a7", + "interval_kernel.py": "9b7bb24640a9a7d3f83c7951dfef483ec933db4c50de6c0130b85f450eeddfbe", + "scan.py": "1a9c01ca1a29a9be1e756858161202621db29d5d332a4266b4017a9502a50d7e", + "PR628-NOTICE.md": "abeacf1ad1491d5797cfcf1f3832799bbf3b24b99597229d7bc884059a51ec68" + }, + "two_stack_queue": "standard amortized queue from two stacks (folklore; e.g. Okasaki, Purely Functional Data Structures, 1998)", + "unimplemented": "Pan worst-case factorizer, fast elementary functions, a literal Turing-machine tape, borrowed-array (dirty) form of the stride solver, transform-level composition and the multiplication reduction." +} diff --git a/research/cyclic-inverse-stride-bridge/stride.py b/research/cyclic-inverse-stride-bridge/stride.py new file mode 100644 index 0000000000..9229a4193b --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/stride.py @@ -0,0 +1,168 @@ +"""Rounded stride-w cyclic first-order solver with linear sequential traffic. + +Solves y_i = x_i + b_i * y_((i-w) mod L) for |b_i| <= 1-beta by a +Euclidean chain/closure recursion. Every array pass is in natural order +(or its reverse) and reads the lag-w predecessor from a FIFO built from two +stacks, which a fixed number of sequential tapes implement with amortized +O(1) record moves. See PROOF.md. Exact rational arithmetic is used; the only +inexactness is the explicit nearest-dyadic rounding on a grid of spacing u. +""" +from fractions import Fraction as F + +ZERO = (F(0), F(0)) +ONE = (F(1), F(0)) + + +def add(a, b): return (a[0] + b[0], a[1] + b[1]) +def sub(a, b): return (a[0] - b[0], a[1] - b[1]) +def mul(a, b): return (a[0] * b[0] - a[1] * b[1], a[0] * b[1] + a[1] * b[0]) +def norm2(a): return a[0] * a[0] + a[1] * a[1] + + +def div(a, b): + d = norm2(b) + if not d: + raise ValueError('zero divisor') + c = mul(a, (b[0], -b[1])) + return (c[0] / d, c[1] / d) + + +def need(ok, message): + if not ok: + raise ValueError(message) + + +def rounded(a, bits): + """Nearest point of the grid 2^-bits in each component, ties upward.""" + if bits is None: + return a + scale = 1 << bits + + def component(v): + w = v * scale + F(1, 2) + return F(w.numerator // w.denominator, scale) + return (component(a[0]), component(a[1])) + + +class Tape: + """Counts sequential record traffic. One unit is one B-bit record moved + past a tape head (read or write). Stacks are tapes whose head sits at + the top; a FIFO is two stacks; reversal copies one record per unit.""" + + def __init__(self): + self.records = 0 + self.levels = [] + + +class Fifo: + def __init__(self, tape, initial): + self.tape = tape + self.inbox = [] + self.outbox = [] + for v in initial: + self.push(v) + + def push(self, v): + self.tape.records += 1 + self.inbox.append(v) + + def pop(self): + if not self.outbox: + while self.inbox: # one transfer per record, amortized O(1) + self.tape.records += 2 + self.outbox.append(self.inbox.pop()) + self.tape.records += 1 + return self.outbox.pop() + + +def solve(x, b, w, bits, tape, trace=None, level=0): + """Return the rounded solution. trace collects per-level (L, w, data, + coefficients) for invariant checks. Values may be None in count-only + mode (structure and traffic only).""" + L = len(x) + need(L >= 1 and len(b) == L, 'shape') + w %= L + if 2 * w > L: # reverse orientation: stride L-w <= L/2 + tape.records += 2 * L # read backwards, write forwards + y = solve(x[::-1], b[::-1], L - w, bits, tape, trace, level) + tape.records += 2 * L + return y[::-1] + tape.levels.append((L, w)) + if trace is not None: + trace.append(dict(level=level, length=L, stride=w, x=x, b=b)) + count_only = x[0] is None + if w == 0: # every point is its own cycle + tape.records += 2 * L + if count_only: + return [None] * L + return [rounded(div(xi, sub(ONE, bi)), bits) for xi, bi in zip(x, b)] + # Pass A: zero-seed chains along +w, with rounded chain products. + fifo = Fifo(tape, [None] * w) + z = [None] * L + p = [None] * L + for i in range(L): + tape.records += 2 # read x_i, b_i + prev = fifo.pop() + if count_only: + fifo.push(None) + continue + if prev is None: + z[i], p[i] = x[i], b[i] + else: + z[i] = rounded(add(x[i], mul(b[i], prev[0])), bits) + p[i] = rounded(mul(b[i], prev[1]), bits) + fifo.push((z[i], p[i])) + # Closure system on the w chain ends: Y_k = c_k + a_k Y_((k+L) mod w). + c, a = z[L - w:], p[L - w:] + tape.records += 2 * w # the ends are the tail of the pass-A output + Y = solve(c, a, (-L) % w, bits, tape, trace, level + 1) + # Pass C: reseed chain starts from the closure values (Y_k feeds start k). + fifo = Fifo(tape, Y) + y = [None] * L + for i in range(L): + tape.records += 3 # read x_i, b_i; write y_i + prev = fifo.pop() + if not count_only: + y[i] = rounded(add(x[i], mul(b[i], prev)), bits) + fifo.push(y[i]) + return y + + +def levels(L, w): + """Number of non-base recursion levels K (stride halves every level).""" + K = 0 + while True: + w %= L + if 2 * w > L: + w = L - w + if w == 0: + return K + L, w, K = w, (-L) % w, K + 1 + + +def exact_cycle_solve(x, b, w): + """Independent oracle: per-cycle finite geometric closure.""" + L = len(x) + y = [None] * L + for i in range(L): + total, weight, j = ZERO, ONE, i + while True: + total = add(total, mul(weight, x[j])) + weight = mul(weight, b[j]) + j = (j - w) % L + if j == i: + break + y[i] = div(total, sub(ONE, weight)) + return y + + +def solve_error_bound(B, beta, bits, K): + """PROOF.md, Theorem 1: kappa*(u/beta)*(5+4B/beta)+u, kappa=min(K,1/beta).""" + u = F(1, 1 << bits) + kappa = min(F(max(K, 1)), 1 / beta) + return kappa * (u / beta) * (5 + 4 * B / beta) + u + + +def admitted(beta, bits, K): + u = F(1, 1 << bits) + return beta <= F(1, 2) and u <= beta / 3 and u * 4 * (K + 1) <= beta diff --git a/research/cyclic-inverse-stride-bridge/vendor/FACTORS.json b/research/cyclic-inverse-stride-bridge/vendor/FACTORS.json new file mode 100644 index 0000000000..d3894bd2a1 --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/vendor/FACTORS.json @@ -0,0 +1,402 @@ +[ + { + "radix": 3, + "embedding": 1, + "roots": [ + [ + "-49530798732358771146118901080958076273052470912342260266258914227109710325121387637640669783171544976658235453737966492290535102314016775076196131137253281608605845416954368911072190053165368500463077348683479820730223655747230034954087192637416985282711781569366341015472238222901103154593890125768068166111/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "13475305001181955152635744113343228941870362999235845156852762789867665164197346764233250937361286208084929252607275859697194884125876348244811537318304219573113812813781235059890295167053180994008138010725194287959555680271101985158640265590661977057048524039192974778963502923615772560082862029626247356915/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-170592372764629843867157976456437557496591605016661465377627293282379593058008669423781376417268214078363699912331157051907114448593591383586878883684704623349440149303389490092308949295538404178253469730760549011796778712019234252302695280536406885179602202888146765328976392461917368148065254242900199873601/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-46411209039859540974176647362240554857493432165837745376222291831822369430116719300153189465225800706342648078500395279868781491155333745970178758722507111433403998868313736485156740909917748907461424289090884948593897673112150836753179290605396652366677201787911857343898640266500768045571317618646184981515/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ] + ], + "beta": "1/32", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 4, + "embedding": 1, + "roots": [ + [ + "18839227606306460928750436776825014273496077882053237212856774153163841259423959845929808348046828320902424357370784726029073309579224150022196016795678227966011136545266483378669974662335269472502528125472018535885295396863622929964034462260120294171947340433492325221872688727385544533583048885326400903597/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "12796926340379968523293584046788682991068081520875261248350397459182248423294625032260126325308015563095435234200881380927938236702421262255195096551267084999719624023209458696352316971284756123109784206671973205284974765619111294724890379061690528176512207203087118838657451331182211930074180553022205037717/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-67937135992698413485848028692002309503217002121030373236286063853851112002834956545147982981350737462809662177353146777437281023159349478379475061510263643694108201092716816673971478633600166383954345966000686009575573734331558302198133439150275018280298091260360209316562436177361876091474717502741308380027/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "5835616822424528393018276731807351617575339522981934688817604363901147520344005371600541622764811103253229296878826668528234697818556822582094397306602957922127281544555831623274134108430066605792876461395490781682749981003075479237572505884700169238753265724966398880489058963937223602091905317904711941499/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "73140002878255602241711158912281750377574232707837598458857400104507930946414903201953646254948585509216110472170409026061261014243757141002856798605902222432653774400735298040913720270819301943861772786445719733578848858120147397354586183800152541785894513923362213804429810043582243527480464796014608479295/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-101965650555502300179425242688687701922297090080040644000576714490063310164897746283818166254598757360914998703650200531654685086831846027226086641171539829015447750993610037727758956893880614628095284026104635045032186714065136378505612299766669091235639722208461448795105675773286000398597466612399588126671/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ] + ], + "beta": "1/32", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 5, + "embedding": 1, + "roots": [ + [ + "18410399432434593285169076294769602275894540638275295419244544381879773242101229303192661033873560946309710294140171891893900372823577853227464636318197065166893737578492060390055766605671671799743745029504200984650324085253453636489088551766233790345264477955593735634726155875498225455897152145422527110857/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "88926944313291886897540182389959275756316664511795052113045934836868436387626350644157761509746590523735127289561482706452011713192888368531757723983026280383546034048812998372260884484021077768824721106874944498264700931287184901932524740060871613024772296891180592599727648764929046216006068462246504374811/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-167545453603640477774873977068820521490816283320967799058419418306745166535530698475752796883467944874062781699503482002031721106189111733803133269028126037337336557647540282023493990675410251006273872459992624200925878916492155324954465535073616098706096481035319289799489810569175272312690818408702357774707/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "154556349957963769064367096421348364953192572923709918873780464142362058554060160862470338328380796109257170485631887393041866922712420579126848130118663444268007905141768967672162702816973919207497792878550271826416467017062585388767141690359055369161984340591026398951036705551282299373389928249065466957777/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-246025941110189748337782398645962696281966535596390989644134716992878047915802819087254020031137007742552596547220618828803263741659091725736455982888598484589330876923271022291321628747736395867996706991862080909718783945688678933156172363230796038024619721716767295126085355526352538295019215908632644428645/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-80017827675325207808535539612151904575968566998857213977754346138586638701168117409273474539675100516306047838318004762335480802433891996015633286597935493715465198565408881501720917279311214162172063959383782684101469915657487668687514739767345963311117394934914437584673901163128059865890829000565376585079/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "215712256432223249791838888842272962081449782057642246390000600800148072180501294511436300947360881829332748816482640829932179778301978229874156851415522923858548828681148808544326153700577210577826268148302190110772732181100719565734873230271520263077404047413202169567004576671193383551882477838906429979943/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-343345360254883912964398674422494284929201599795775129858953529504351638375339699421889616865554200011416676596545392950323715795619267003477668104686330984199520110843844773329958643601792506764296355657817381043552933491542452533905205092594361844214785757345776857492089057313413558295951124845050277505639/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ] + ], + "beta": "1/64", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 7, + "embedding": 1, + "roots": [ + [ + "120836177722361423700961200616746340939117621826067821546283999942075497210076949759460370715678904626969473270870038244427213482017330996532718477962097048482765518680096123147561488619800104812093083654163138766755667970537231472653449243809561047362543545086368385980168510507433365046715788937161703716085/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "68125532188584294286663341974472312621216872199921619246009406654878430278942492383247031997235044995684216361049673718348715972217344544049530857813500428243332162775155119877092074201530144921889140264057120091137424453307505120185335081880162914431352955991832950471916200413514695655590549673800742347681/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-23352251484866588814984102757151938020295470378892869474143458720257279649755690100107547794252764950418419952156812046731260229125257633674879904341802608588717478148648944135150233501962993159400202815681865439334171539946279604850805926161998688918951893236128852170350420117380648887992523528703050194783/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "12132115037519896013585104434007386698287966150528447173769745653094849377705471451533571302407701987585405260939215552836593163546110098278844478687559077536413118639791236269008047600329470759689721901333721666143586701098282693338033702985076136987291514686849805451278368411427725280317893977203863584583/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-92291382711014775221380021171202817794657125260699000287682436525116249639100986456003288102293593362503506340776371812568234629218022304094954295338321708547490187028615230917002633870289187269289797994714342072570440381702763361962356356505306507682202967183538465154964375441642931008189553934230981931559/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "119712689918657651145189233762925546457090337327810229148877839636675818166345698397220337691661044465436596246450977563970023691296540621113539611731979073364553791157261962787179002477238112224575127636003783615332436194461854998451162028079761177278027679849503098212639903585808693056859631675024978403655/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-241550214101542094297167535638151897507830585201411331736006717246868123702109366984690181768784545848116906421886000314994526788327659530751761942604584557795696877540130891932133377552105984741145270626005788962709578395270874088233819746015884483414705471639012552028950063730900626438412769308246134412423/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-44636521770478560155358654717184927568066750073373513015128082461673476496822166780757639936727928123676721979818426533919863914831246651250724819329685161786373417321779253128206274251444083819402120012005681947845516990805594334226921578412078056649090375828519802643691118444466847932595531100425230751867/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-30203061381136258809439665112684149466527548721381460346906377733218206927673101886508360525270680857362678859262610296498976901610754244593890353821856268232116927740493603349537265139809747876075016798077935946460243881062966294672661437770702005876180419387161259974619074523496342984580783717368906963491/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-305110068800135848497848181573777483300901124284310624770759696080464881064477659631992063113691884421747360163819890589058455217115247182223505704124808283746309249249359889226760626023333388774388559141421503453637601946482828567415910388069454422041311561341290600832629150554612317238895704865818852456303/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "321370196207928824720915204711075455015246912340098126751032311594524033112453537345445629309422537818066392684089031234715114932786141935425039670921672922753033036803089443416637226862726853593951312786044577899391357952048006221305816041423551248138900234992740786667031784280806046850529260976098348049203/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-24530473927531504467392407392323938052443883461832126187972943992643983667419063708657378422819680820353364287646948211385092126125885316040368239976682069981937416789728921378575979136146542456286295719081463657034678512460199743093437741946258402070242087927157968777687527815825283515074190769218475070497/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ] + ], + "beta": "1/512", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 8, + "embedding": 1, + "roots": [ + [ + "8676521756510435418408946804461767324891306204862417174847745121263025946650658922911780062841899310292089809846830833767424385518217195893825119278967539421517248349379935548836275419185719990536047729374806106190931483190985689626709113976582272252929209174868395094303365494483709135736692733466731317795/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "46927175506395187795687931561127127492542914401987186784106756230323458946080644106593751363160127877209084537223858819579870206674713563202937305209536930043680869885123270522345465099010053820092378973496193748874813123926250211050432217802376301722910925291572156201602782436939032617502745379314433603689/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "66202580992830939447277596770820976547224187818360015042315917699790056190563629777404288554237323292216596605503553003282188641500233854198283302909676455062335042428271478810798541736972692302397024682764300702362971680590029381246736867638520196791172922404288387541122616211813091943463685403402194819637/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "121765996413538109244722158430733772946581021648295379494316178425975201830123378250127037871022862140665047768946333869871635524590445958253367982270652171353818448747755198251644533171986927552011666923832137891571028711514868831622149886611924577771659219065857057020727239216653669500246218019089692681775/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-63004972185514719302016938882476801018029290150894658797428428794872008178224844068489106570343956469890320581237050176572657244106576400241496924996645905145525690133237596136064437406720491787085549650786601720713499367232077045311041089715211178346785441054922158278590254819899949862505839484404422514173/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "162089912107789904580698670024539381013319877304490279642065801647607770297007606234339566380838505368774389327096714260667996331814249381137709093996072587356720324791880511287815302447216666542808264118488552050522502999610415668210833042811542567219354932850746955158614010677677778588862432609198364889609/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-114541150781975074659493858700499576773418741657487570824179357865241951223155018561684267907712799100922762526706741412523928902105409038951683693424204620570355075936652546398681787931145609090635335092259268023627437543404884939870413071359280803563668076790897925194743799223677433801998275248938099138653/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "28536383328959703993730430075303364190020911254551649423945663982045094704274492977093462377686393175454598424578736919668575596341930388955047068633656361481992620692814813327812876623975978375572536423322145652113828759035405388077251778997084312380853597717028602612494470837499099867849196700594746333193/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-201517388249894989478411032097072751718656423446768498708508564928448662660651229648295542554051448907899318156973678948290345776073447986354173204606393763408869392055271224486081374851034619526102418795206963640221560398265963426462213308991975932816594775660953319668579841424702426262528857537080463794965/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-174513042277315163849266924439208792551210027773319873062117112212107791949617487997311514602133978721591638988373550045126013490861600577744660221983293741489328994487990284644844821816190752936317045684025385986252691736431523152528005392504331486525860129092504396317973074372934850065698391093382548690683/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "20853952201633312877387277508463847055126394746254519899742972932555894208910866792849243688527659586695779456772099102381103863965624564255350878448532450809472846089800434934408081189773222964612807975923115727341248896300480297539550915338524351483735093086771402116129065052573895987568833471894650866121/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-312641081391502269606656250395689464714521237121044730843195101985540858918629890694914712449559446202158312842962672451031785756934401273144496289056535368585556084621907933962326641902682587075123817870096547428328478755021925309233810847720403976729205559662801376490464233034499544774061638742784145893525/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "166672131806845776192896885973661042124973372869940345006468266318743480528703466414015865739675637832291806442497067063319157094307655919219743641987468037062277740025664176448810213542701871758655081692776525610517996057224630655703118199190067622390022656134231632552577778502578893106037108271941930607565/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-4376967838200489497250994948825473623872235696381225795629850903139948925947408138790254476399212615558494266176816561458243901205759824715627651584088611054101239737165343081922176424447484738906847833188948761892037696110205922052863065492314158621446222809067390965832669530284377833079714832042153910245/5617791046444737211654078721215702292556178059194708039794690036179146118921905097897139916325235500660003558745981042426837180275450519452901482207483566386805246669527046414884444362538940441232908842252656430276192208823201965046059784704400851161354703458893321819998351435577491134526104885300757004288" + ] + ], + "beta": "1/8192", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 9, + "embedding": 1, + "roots": [ + [ + "333910482659483459438655528550746003905249000982454975806894848438737707753764976869561366054330641369183833856032301628669487010009234742939505872476695122089942073608783197493524773122513229557328670182714416409970596568787760524274687406159411184511162472265702547672362929076759614595740589264277517789373/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-47752137171466876261593994891268639759720371836251849522631883826242730835462895269072450253303956251409642499713362915697132486294075863280378249136595798406260146271799670133428231669418934780402000503782168565275986637683350570973550359499708480182227099344116449794282936783930506661431843381346792007145/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "180857061429154340683796569249229633634282740219290917942321763794161703285567755908320831766805092839199995120635992701965884419377793868614453316178802274842846369150241658175248894374357637462187419868434067659967756992677108864166432671147587357826434832424046949718532074646758771501650950393504125313/702223880805592151456759840151962786569522257399338504974336254522393264865238137237142489540654437582500444843247630303354647534431314931612685275935445798350655833690880801860555545317367555154113605281582053784524026102900245630757473088050106395169337932361665227499793929447186391815763110662594625536", + "89031252177887495190665762976190738719635134333314194291508015840329805457255816648024444476560108063934040996807695532427466053700897943316995019084184510458211965571902286576252834532496294909472140013944090159918770767649059087712467909540838463240479671623720707864757601071992191516521915069518033316617/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-77570549831923552874388989142731030044682007042905840083400846000380141528891579777851595702752702328774473303959132662315889278783543232097424451580806347987068043391866782113060657867967927073555566291117612044119958405987268589066112630178066419315079209294063775976558795584459682150886660045413954013769/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "179897435173147029214413437523250288359207247872041518170502120727641382930349650875642891171666569302908673314657961466832174273548337212606432197485311335192890539535613453859826823968059826198019685012450454506061510186429992789952527736462387221084655053453668251388987921959301870000019796834301705370287/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-190010959094347690462269137172070133553459071158786598796602362999138607180514755593009011514443911574926856975116553278070950196565545016104446202259984121956425990468540175254088981798543541253103375431235218242689895049528330746625788021572824829150972581783014458284949616718799691063891716331606263765491/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "99030770506346274571412767249597026710488468973300656614141769044065104917082032751052659130642873032747152401206156730746432904390655127956658220469005080826426402974997601139897941906522466353259384287497934337081931282143875656631456401729850661272991846764776573277336890519241664182121666563815825108741/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-233081207055107292068614793986538528139321828237103534257403268711362307316433680696116996201453280211587720811602707281081949546040375748910078559633641468576989928431965548210945788819468022114946692214502141994372721141673746177085180557226353646152761400166555794272666489885938550232614191513505184437909/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-55943527093538648994131853774327760706423292404958516460832453352530715831038895988364294084379075527404154738093222713072803156085772412806543739693673201174982311509658713101771928709767111169834072902328747368130517026338521314072319621096339894710376582330134409800137590938355592424671582274968784888015/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-73674816051867153651072739874884099639564752966078427342019842615755828513593612394516445502429253037266855084255963456491511864584968452239949356574902784890872662314770973795626380106098390700582613148829779523841278267045301960823172752044249996830463280555136131109752238430106594324223891786255349386507/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-229807430732849177117110644126555193643659835289545136715286801956254443227030503648670842696618870987609340139528277927495657195520865722750609252335913869508408276603724155327353030563572875987772902902949206596449124196495306939290344827467222870442728695524546121120411264232478377181674795998646854090937/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "21321939274995178538221961206791871382984274797017580984543305003879576871583449027897925288200755917559935688963418115740792809342472296149539253956569356996997885510566587640382490543578910073936695660519193238722044786613345993169911490333550849222184308269478701581148338439803843307487853418615205531513/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "-150737439183938417466026541943664853780573301677390200716773762546802420416786746939455291356847900573293657693272612561521417054798588970409780434875913176859075028648525952666660665297532915477471545641607412073362848129142966744244476665807658602486321803579387819475245914693110974696229125922432406831735/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "35114167688248708489705226725520322239757602458420567049561448419515293002391419875052402245031950661384666638645168035176238701372703027255979313802828205032500024750897988872631333460681293263507451895457087663973744113306278768660451880594853026913028478026418649968409550880245338037923086078312777680791/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "27546478297781289342951459913655862154150871859653605939980547557514582388613385010841997426553751173842745619847075795184069081850799605852120546322776304239444231584968459156764651674979961647993059971657017151034383284332304041936961882154160895082836934427447719866692376787959364467530446014008721598863/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ] + ], + "beta": "1/1024", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 9, + "embedding": 2, + "roots": [ + [ + "36627579605007658966659778461203634251371697379108157264801251842963340495317878340007270952160418991100126967216105106719737629728806468143838917422932843178173126209184087556635317452073232467886327807084905993395510516160589404741476340166934455525421308327705599519861799297110888754524674156034983913189/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "91213904696706307172757488630720409637634441273504301106383789102894171902182804905443189017899008504696948838212829861096814223539148482614848676923111790231266756795679293509188920363735763072749479237417340538439822705330283204140328446148978965322292213168306231351893475906153300657761895447665575697199/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "84035680545684351602473661021561463081168863906638834415994052385965625479101474846868259017791131826318727391437910192088726625481437554020823348149067175314300228396308280676735847981399985641700401470915484644497581666130585473688371033657369860576189725447930344844832440162634723948823836250202417994515/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "8148013099263468190653788738472861941241579884501632117571698363380494060372231299699288233780855988276576215383902261263316045847213105572379987687627519561818982137927974561918890474195006623065707914273566644830852081228319342987631236139162161704438123829472498354324469835175859687317768243701014103519/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576" + ], + [ + "-100078953961497513827019582958503948692313436745489773412119737617020533859319405373115780371895107700252180090915260674831636736234959936041881253145088199481284819872914984423224863245178613426667354296068721645475017118632587754300463918861969486842414948740548757053004934043822785610986714760398365599679/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "3398809930139403861148899090261015484845408816967426658162601582201664636905280230206674173374829015640972007851858863447180055375534479268107072312487849563160091306886763149122921123989532906823269948436995082554330272656634564774170850622113683532802699002449190529818559937755553698477368426140195610501/2808895523222368605827039360607851146278089029597354019897345018089573059460952548948569958162617750330001779372990521213418590137725259726450741103741783193402623334763523207442222181269470220616454421126328215138096104411600982523029892352200425580677351729446660909999175717788745567263052442650378502144" + ], + [ + "-183338193122679443380740560128812455004059475231783258422114826847995734608876245819348478430541727370982727757486771145154226239259518782402684145929956021883455556122678489997638290182053381073341880321623966722662080562479192139016173619844654784754986657599090969957280567175733144107276191731039944767793/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "69544043884892615520046310400849713710736128335193355114162837516266036707296210585162307101033581669414559740283356404136662487557992456157952373635087040782218145130401822170858673477542223017483990259128019803079762888726928377309670948765232529247230492706760919274284002471550667971352710783976141811759/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-286271387236816925280241522879228420963755468856311152978521691079419985629370744590058055558139090150368540678259547716089060942385350516235204508672078069739575899105386310373908278914441421362759756269445058265422389064137253935790453915270461746334070802354549224387950778330302172659661620800950476186749/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-82918958338806825753830833680976263062074588869905593699233198939242160296448906481827055827641905389023514571488788279137339639543608846689251136263565750412573086750041060060195606898601160434500732786154396471493243930049913562346718453598705146259982726005531537274756750753151714066487137785910761431947/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-49807632985904636056327801309165668569949679703177249904015612774568110724009981257491882061879367530463687202275856313301341867893146717453038446249068471976860842053788497157502426856271448101222353866671376525212460060433231010076669364400926876741344107657680474212816727791674300296404422336397687738749/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-177362022940644076757392587993194089526114195004881930778497281946886928035272836044916000656700084837927346549061559295412976727004631522383668857538236746314783697433474028860696915143971089197553031019918950340000537004506529613569767212474004309695951498140271896557248889203205304701749822638973665710421/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "151726435005196152503621229407512430240201194430624150994328999718615893705101127231153874291153282523199899481986566943279721987880106907314573029521495326835809641098557389722103622116104726637641894632029695112812573695921454951502415653852282073265566820064948245713045069992446951560447509654860385758977/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-384822354883360534431812042911405387725218348666290124845083009057711843252196160570381320302098793490714437674025650657316209395944001060980319931861297115592823638687839794408498221389027544281560445374349368840423996714188312856799321242909238654232390908052313482832343212428064897303568712693638467285975/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "41081431198079572611558466625440658048255168639522243169055624589826066923314664776521434977008446938486253681718692790654307094043265416041383699295454020975360572161215700150415363540172271447445087225207715238810462166560904016969936740545340760747113041037652787910341644753600676564529962945902837220001/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "-4118711747111065465143117971635801376758138406433752164082253287354658505291179385338879623132445718177109921503638931942611426340975801223027948444391682221345950298080184044770827371312364405460096337648485815254515555637274146065727250436766509743948076237782619108756462233723207660043495600271274827343/5617791046444737211654078721215702292556178059194708039794690036179146118921905097897139916325235500660003558745981042426837180275450519452901482207483566386805246669527046414884444362538940441232908842252656430276192208823201965046059784704400851161354703458893321819998351435577491134526104885300757004288" + ] + ], + "beta": "1/128", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 11, + "embedding": 1, + "roots": [ + [ + "19987067627228188344629069299179400482723624880399215433823291767545287429199097189201872739530866475858846834340571882225835111913315556842511345498467666815253246841468908666504463346483028254245326381190693095283853100267355904488055841487849491381199845949444150700195520393828374821557134768600767466237/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576", + "-16371177452751777825563018362473384628992592467063145384041920070193938502884230358731455517486303546488422975735506625293320144959392098974784869852824091878513232785682339953450977565251051966045793101131935501779170807314388776610230256291440229867741336996952861254445223349520745729923222550176564288491/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "18856846747548568697588208088342677025973301317628666942362894682533954455666322781604686688583386331954228030929273184779113235417601784513933283718249884792714800236464676089878514996628927413059992636963593921322785923317037817194703770654332326501994334024022987493666601426630817081203976984338145763405/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "92987134558769461110036206867296860043881621638534166853641725913226172224366088756826381486275497978147294133585381794639930001435905110892538226145300666954747499650465654558096450639522609112222032585019033582960779504653453557208357386268301504380446208517791958035784800586179182112037390042935466531117/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-8755627176049049991226664047137245698863739906064153437347452970558147035098726451283760392997679178295614102787623006912674241102405755920868082634752574119386112664741472162925566921061850884242496676415467646079844403140934545444691802820099406918031463518136566579394224020189874248767924449767942783925/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "184869178819451977603611176386928738242876901648101569688171783567941034492292441694469196166591126057251772941746470171157037212752090292935695497021766339398687078438294125034073412980357691297887600434603353395394298477189459158524716423700412207205879422399971470449045719677938588065634394716581191836817/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-54478583300645253822831870111416997505140953588934025523583341251965664154365796078024298205741864555549713807076133144301802106929744713687687990384993502959532496048549753489310281500438525352868503316582822328826656480517864695496618221362284012857411443021555596782792697074220181225526863918268300639411/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "20286205262628437605254043475721537150966571526564811549532640552204714056754728803364947802459551692869353686447919641018139868478560640763273306515452613049046891837083267506195031814938252858003236870013002284111289860505997396859958206617069856782707127987927582577818632717973254483287992421656734652759/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ], + [ + "-95898183509014184241500254592800463383859036505354131097291586846162888704186664657955359052988941231121132518651068021267889402827792190056019212109768207300155797496969688201128119018149578616452527735438289364195597833846776297049494445152908588057194749724385825905412784224692093180207921450384112242461/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "42778814428655042090098870059327487099864258445354926673871694836725119840952203199861360259612720795076463940032853087688047118369165810858094712277252996243488507752097503657331562950399220905133886815882248888535031166708361760343306732503522179656046809130881476963896662304795263022774723587080694995587/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-225921504279610020642388278131970798218208536978767361355204927337288732255627291982651523854880824990070444198973400989148467743303745890374317986738214990201636073279077380395278347044974050305694703888747355737926977743906487115905900433985192373300492134362778507994126188996113276482333293522946874166163/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-18512006630388580492498585919316792146843256940712140321718354870283077911759945301636725256521424427374811915420777847665766697831971631267719642616122994338671795328699256187096082707061323572720759145517912510241431847044219321767359552211168619158510793131072148281713269420146872738380344999839805482673/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-180384503040408332969274788910647993002194348933408627006352614755504198801432827860872973900664892565262188160970148757056307523990146812970216425530483920281444046886004414828488834832305952363622670602928505922661923912562146105294903808098488454307366830380059864074416998974794846587590490652864169574297/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-176646969751708359448147936704547232946199217170499539675033536510376224673878639512761397186205834591084970427821916955369563206972314869103885725048066220048023304706002429705664922747797907812155061260294680552052160516977538525542207321666484952876348281560646346378263539923187144743564731897674171100239/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-38861837212388384976420529976991509417115833041275628837436068047549600060280382176786322036369939502791851622004559175908329336385610877310085063200757697917251570206071466998822689139170709736990644246151849501271239337143095479406182219416332143451639476774213058321348321744184322700650862375330310963823/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-277565260286031004677878130054188583191705289863934684844268782639173497999273973903587616669187872134632967542328894598608374892255412381085758974558621898023147837402060395658900058771526410416451986547731710938161234642213649079303903522523174051553608817790842230009020182395206171132818408527279761433361/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "21488211622826500960553162925976956012202845211007392491489641798267308432671711630040098232679466316650764179735598419427366676486749904192558644332299235921421144714023516384651586190355271133895433014816047193327744219762731373547159612179053454955452144677625900088969121688703953521421817439565637653255/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "-128511894661549286531404877158872813325425204854650114042374504318410629316789283103583139449251533177702910299315398368686906037165442415057629373076402635077289348627984153358667785498500978795932314288919594386024513282286275663286707605543358820950021120445081138909212973329449308021598533550888061275955/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "83585712907819930372525737678387002726043373066088394654745598301106562580077687197093984735045193590830082209556833412016347775904780083057550263000319559749883171904511683435215084292917686994094634613938974636571702338378693688527807890580242888639214849494751714712417179164070115873698326690655414974855/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "39527043648482950010229499119972439999724135181397298119791477377378696955872414923351111484626654042810194997537223158576386497412597956774521165982556008744194574609655834444282255397016231889321227196472166056329130778270908426382465705876154201534793629442915901015100724328325125021229484333621969864103/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ] + ], + "beta": "1/1024", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 13, + "embedding": 1, + "roots": [ + [ + "18692326237161478268382893815511145026088685648190526628486457135249558896952920917514467617130261745382206732573150104474804362843637309165023312885970700945843085407379411136466208630482730176116475442280579227987505293153616103902239142645063037996256214288997875546400775697052054140996875722199535144377/11235582092889474423308157442431404585112356118389416079589380072358292237843810195794279832650471001320007117491962084853674360550901038905802964414967132773610493339054092829768888725077880882465817684505312860552384417646403930092119569408801702322709406917786643639996702871154982269052209770601514008576", + "6486859248533430000780273205701654512173970909417755732036832012643583151844496919483104176207017793400666110165169957902541959012070998111285223760348081928328199544477282093388192150307015875863662558373792923793254558604148460967249276341192795957495960108311024542088237938103987924150576546911604521261/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "157323348664187956666822829330189664661635426810358914253796127992247865612061106690649235990527526045899298682970108967127473022845446753514004123946631683036181536536551113663594714055940804627834938973774495105472785669307840365432825878956659739101252967010629991460289857031165177301889783427611928177035/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "40452681226070075570072472344401074944712003983589808887925600577667159697646220867905051803615621855045591166578947446549771630680539405755136473452812017494827925564012739248547906421181216869880258586492201563801160785331284811700400735399327336162196251093715630564873576011674857714278044254516933544179/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "34899392812722428966123339680611544816703491872217428378010116691058846226498126253227436478273425414652638211700583485046158136663268894227982165278243907434398134769506468269248093633129553630375056939180388351514797408409815225914896580843925098996214002147635347069013543757886234918338529369491958625833/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "88011579740709610420551536777095471880520733731329804909182057295159138856658844441946791253952523971367978325361906101288855444899057938251340285018035035161867960959529967697490808156919827046584265520088861647898766523277648589169329276572810161414081405603460615665641982272371797657744614418548585824559/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-23632344362636047103245294315793142313888805211632242345277872394180256512662942947584023084035033218243173110811282908595282258284332226870800162079433188907613058231842037992245668397834548268318570993706111537983389312729510092584842380438077530588177371098312347383358971591168761951695032633273140864129/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "179549417839364571074172991064461500088264697781045040638237379539937742850790852186678832881823049512825498163936194969819369072795634141188946475578546985346143228307209114122988494462198458310511930360221307110264021454197646686772971727200632632260525068224424641531327341793787119527322865955849707710265/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-64171504828073803152954152937711567711542666684035601356646712378688470076580612870475769092135067000533842853688036144897397023533079657883641351971704778429165978068814538057468601770310658772323207554597087096804145799486637998411913965567996425496787598923735682562388421874636442133233905377559485353157/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "73251115769149306473345828646266294966486765451643471177403942814435204983959223865491318323457407052192740413543012493039306909122000661827522200300183854470520931139463523567192277441532807875169028627798601616463280909274217382738236473252288608372738895951142823317852525506369814133883275719630758807137/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-96104599738951769633676493389601285253005282559510584694569816846333257502863917660923538247139087495252208921646849092614916922614604316843162321832456288793741483649147875280476706456286703917113215728033231503625203893643516836727765185675495923663427569333306934484123850806643288701454825729811953604323/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "9516631030430603547304258413179041787814767345466107116984577378638068226215235344637777767447480019230821635109605408066669055840851972438579815757178810228708736258218847736218387748283693992362423328654952423382366630325601232318115927373324378897688359132242894713899973429384583590542101150580140274839/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ], + [ + "-55062228354540215497376005863565840475664320925484203015301893653352734911931366500499734179862501376983233255651835114951841126300871292416409994938947913247339808265695383764522624850188675657931604747407328681915351414694957246542297547449812418192888195444651234827845753423977115916824720713929628153581/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304", + "-12496569895905601754496446211252110954226257293968968523070001442676531897713204634587293165700868423273240811744498014947415054071256992206134858336956107724864774886993506222731936628197452918495709094251331874681454069575341628004137867852588704373449128871488326320348282721855230926986775081427488534319/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-97236621922926488171753094952475321839966850867104708437058094218576032195216305246450562921641655245078955900922369570464505990156267416121818652856643194067118861143473065056879134133679172250527578434553971705148706518072819842042031704168804575722945478691295867602666460085505768296696878111825723393123/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-139974366379725222238941562299015165007954582856054307766040303104694071987798318784342412584103837521837750166553176969910384907399840762917340723142586181202439284159762153726030716323608885065258852362112003980666178559063919724073261539914546317386542228981943211320210328234291676368809663605528890583427/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-12916153817227395308964320333307521693172637922378933961237847141531974139138197199274579477201858620610500507563920459598428400153777012639967564196276145126945301605944903521853118392469464413956941118844472993633600262566258024731392397410303362620852019080248276163503519613363724636522615542062596291175/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "-238994272365838385358698151204558291126185120423482408759980968611149377358699437412307564621248256757262516810026759206258728546995344843798934973819120821031754741483239472065190876326354096946934497360840975069467809446930323282385605750700824263085431792466905140472727845592124191127039452483105619360915/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "6013043937133886929785992231257511969627667249481246735439580322562221982328578577554836403334984733439034934735034117774148354364364987263562214790340175882986670622045334794157783337444852881404655139096629253059946504379613666594193738691315078072319789952637941430021364779329441507323583528933381210005/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152", + "-278679923529189704360039255534940158059487346553817563199472560610069982490137529352759281333079523373930862003820159709004193000121849875645389874369158065539387537232566451095140876980715405549825629533527920059018461562814145916859044343901996440993708624557401126980979858868823094800991662382134844602877/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "109989007535808651476018626898092526943022773744744817418914845584436965704556653332778848051969834606627072091810750458326495050646220897112757542708660487042684367750689381549049479775617896373974012758542109149431726669145658671611746929890662655791701705849605871346529807065359253700271713756945440448383/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-51882011778821188484364240793453110774348786484062001914177257798483135937985388930919631365603190565770832669699636056548063889192925119116887789197614808884804148831874399739412809224443826013793004508047851389354227654919416055982643722487389332768423157423587133671627261738239235292352438537394793285609/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "105894466188666824637797522379481298816044382741836996193011641682857452110816736028928950018833122381771371198703803457128745525851017334778410249826879397875759195534689495859965994904874626346162905042038177007336006951294064455526202243127641508935278616124494878183999313811884724475030368145374684989523/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "70513352389598145213663477133635023707890899921823566159207226270576916995395924683079445594271942693838367850660040457845959093720558038483352469338574636265642119180155548293660979873985809604194360555360145016038237726142654627699688283243073137486408739406691752226458425337231524766414622661143826464579/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ] + ], + "beta": "1/4096", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + }, + { + "radix": 16, + "embedding": 1, + "roots": [ + [ + "134039650432496433101295605159145494804947147618859989214825957778126813783946265379824234530653079795983300535220081531974499830210731306488624875267801121995052729438299927149721093666927526785655754801147235486784301827065913383198135946696241002975265831017168785200446019385215181318777012203053206775435/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "10043776175087489111857420427705466089122018604250422834704851221257606484042652956267827527042103582138401817998484317090147751084140645935922861891946502301969712627060390112286498548692413675638854082746767615556998261778873625372575511704320589333963130560858950109780981665146820923938000446283595843981/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "163698198267763187271175317732354162942142798991132287897605537834861074139898973926663170112137318749861087075458509497866923709014367775583409379820255381037822285641799332965596998682187512678394888610812074850883841645394925104103931217581714852536893012837648469034763538149987146660169793180318525683963/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "34154907814115855601778002615718880203068084565931904547779687937911408288344869439590995495717368706638636414617448243280929199776252293685154663952500722290615662112290390816093868694604275838431637064859423302174318393837094657848778434379080583038727143019868879816065247203874832557642095346180510541817/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "125972697409629971610668644095806954773026269483836139794069300342348858033512225247311677027781101220433900638850299785029618718841248714192496025858197851778421685409754264599923508300047622246726630559684778235132368096407527643305232066166954976575730325609055979040383084148029612053926198944646591312277/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "15167790659874947924589060300057100404989113576637779018845337397852208471948163165837442910874732484685189549202575299032263922362242746686661085009319025178790114153139930066286476936454793858408781296809315075998603335912470151363640101092646280120351957483245267415973808462131927199015047640649421685169/22471164185778948846616314884862809170224712236778832159178760144716584475687620391588559665300942002640014234983924169707348721101802077811605928829934265547220986678108185659537777450155761764931635369010625721104768835292807860184239138817603404645418813835573287279993405742309964538104419541203028017152" + ], + [ + "13853536865015261579911150032049872304272006558508656999350196565098776518334784731805531655741656799427586114638867558728051351302042284720128353136488689847220369858233808059733505486343038607449224336533854935610047845464572670709769013819513710914519750342782309697087053886069773135656466958608061541769/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "177545851147179895490196191648273709559870852473948635168982933050035672511543664292889660396400875012049726711091359491491643948309945736293014186853449971590825791166882789030071391843162221062181697202769315484013800917514554939433749527198631298084673567294376435632058165815416832640235572073617726120941/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-52210378056113995222526794456200026551550434350267615704607002484161409961625123864247636241912256583356359184500954597575895892110205892926433892520877857803012652172002684435938465544783335544671181399418477865628149454975798200306362483024809010252305140774988065045567446320437361416053738363358747644443/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "87648308710707093471187039917458706451472578491021738770540393300719242093206053400276097328660396266053722682800563211432811793974391639650142917556304518681178604701687327846402527191048522814812999729648713916842250073122954579935163661634587626288322854319550536493507991774193503157659239580292987842157/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608" + ], + [ + "-116664073824034912718051835779935450320038013857443941308097484208019490686854521720422334021093095268154662714097019061138743852755115144088228123078315232346900394049166264273018455963049040513237001187564736700035245183063339192035351382225907798789582613795974065118752512750692942562782534375193614661861/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "149449269678260753521945326074791968079519019469792743136375292271466248404832296872514640066703937306939051683043529915596390678603913779661604066173180108039752595884583226240160259044735240089986116711339120429442816430176353855415258845446067522565220002881930958366647672375789662340506634532555558066251/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-85610957404387028634243322426648242688663257839375635069698465559559419377521551982033761821736612609921595358004172251326835155119996617686944093557730406618580170261786725657706867217353963671009491290423195732204000640025294244393939752267572032643929785491689258684316664163295188812404572449637311320451/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "99615833663101054301816080147826293655285718447019552564330413357835145945778960092597289825973787281964918942430276502793281215764935713502351704443126657759517272838966727793208748184206115834330960302736430555573552466912693730743584134891685941797179902285300308856534717258649051539716231977831990434935/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-206470925126790414958903095327931072696188278347167769164325237872418927430185815104414777620540205015448274164195641352218542457975169039791010753378777708716944076446597350330115681723054142766603880278838717720575430103778172708862328494065918713903827091679242299103863352097855468435963485647011288487845/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "28326730094049526360308020645864856724598891128838513609367588904514833835204347361667185978800994436970191543152173345365891935121884286237303162650500563575271973969509154285033455092089962932786873166080400502570268738193931444116625301385853996639117280974700258567439169279262226550039720244993440086577/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-212793201622109962448330100692808593439645159644577548679667883054110536914612983822159045347472254754395342771708966598767283083523909873556284381276124835470115664134649247694090104295004718385271153849431718533152316853933967919972046963990390480364949318130626453951329110678301062337081449200475601735875/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-57964249005932469131896837719919287256295100537523457777437606447238450243954529094264672294496860934864424519386491456408615251057823684209861120741434670159618673936343232127524840096572869938406481577342691505214852241781904532730223280532007263456890157126325151281429988053858853115810915974956182248013/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-181906514405143036384357434995971625275836390798303598349017616251000415282024441569357952686816616444878672327665448828051994214624348737805868406889846662816154885625310561267277397135353478192043756460106331313083421328902239020972755544322708347048855909898995764083966273823919667161396109476550719848725/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-147945663340461763698212430143771286414026284146309945071685010721085537380641268203814890803383015075422455405339014135542776026293391412163500686456905034790428849048670266153134094858649998069511486106390629359568273414843847740088984032890568291491121209596476991217967574780912075401622245788540973317237/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "-109295650712632922954470152700014140962344687784228817505917409852933900860213282982253187319663670767937851495649957296830456277490544817826798947725684889752695688092754004821393186285277520453649669774004548684876352062161227459330029625465970767406457202300678613241928430071212855440266575276167464763807/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "-56200741848002868079111868432724886507129621548125121648642474266599250489673841691778046881437449293933434722648357280706913445930283045991236908716738562916199191451345481529063774448710946467551285759609323141571550416355308596877200595274065373565280076263027603986562578831336689401091825392816459762247/44942328371557897693232629769725618340449424473557664318357520289433168951375240783177119330601884005280028469967848339414697442203604155623211857659868531094441973356216371319075554900311523529863270738021251442209537670585615720368478277635206809290837627671146574559986811484619929076208839082406056034304" + ], + [ + "15968822176892792285891476438139425317687583108455281192008770761103687215213981897594608046751009662616135817210933151016991807601573680585709456982599855455736137633949541869722566316681492518193528500018722529515726386747292338115274696063766393314538517893691137581991598848479112650484943606294759671/1404447761611184302913519680303925573139044514798677009948672509044786529730476274474284979081308875165000889686495260606709295068862629863225370551870891596701311667381761603721111090634735110308227210563164107569048052205800491261514946176100212790338675864723330454999587858894372783631526221325189251072", + "-266324790638046954468748086815326096854011998014910958879637384810491281671701735342579622902906841022217262017537242815542832447116697353634706329017518582629343845840130883918382746688279956080610789278337184153491906948023245930590272626869013417164765399270940382908317755754807962553226947387458433481969/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "1060865642031292630770255648031651464303955219241748845301061404301449150107131123877033982501236564870546734157170738071205142825981730629211934466958373310795930234883644313113012070731987912222503770737372313560840648279391481374684780737322726034313967342539259478356716096981485614792922808816297076935/1404447761611184302913519680303925573139044514798677009948672509044786529730476274474284979081308875165000889686495260606709295068862629863225370551870891596701311667381761603721111090634735110308227210563164107569048052205800491261514946176100212790338675864723330454999587858894372783631526221325189251072", + "-246799233700152837800565619104070457222176842192478672102595825359550055541867252492449227477274629665694532828700249246838030620913792598556947021011742874894999694125075108903854687975235844168506798118891370394456073402356817011957930168970746212902758217822556747842079095849448037149783703853881509351465/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "74864797941206513281047175374406371423373655545874336711328481273747977974984455616940936075339467433634151221026156653070150698647294564580345247390350645817572015177013890581338145235391049860293804890641833349803840457797326162410138640935908664989180260619163393823243511563841284652103776498758852275761/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216", + "158507016237416030279508951176317259509379692049347194102510424353036380843727700204504205980624447511489013333078714007658126019484831026660454241743943509290714726174111157436372813963025263036212831092360360315950519574485871493725846468575071813444421951074798721371147434849601216160281721594412331444679/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ], + [ + "126287595802823388378145790573347116516250877023657551588569070335106577368621778092749228800089231992059072999369812292461321688715048725080489109408634374024142218044000898630952519239661477382516567361587110636505950019813691734756152201601098996057298499115007197346303456331071237494888612444968034206643/89884656743115795386465259539451236680898848947115328636715040578866337902750481566354238661203768010560056939935696678829394884407208311246423715319737062188883946712432742638151109800623047059726541476042502884419075341171231440736956555270413618581675255342293149119973622969239858152417678164812112068608", + "-143526397691224128056251209454968080411106577138808675995376721394908697117978740021220231248704896684803444156609685788793425078524968774144075750535259582404256698559171991950020896681595928832179228331976729295065837037698098662420392076528307364731612360503267270299597486337931330781272500922478650324859/179769313486231590772930519078902473361797697894230657273430081157732675805500963132708477322407536021120113879871393357658789768814416622492847430639474124377767893424865485276302219601246094119453082952085005768838150682342462881473913110540827237163350510684586298239947245938479716304835356329624224137216" + ] + ], + "beta": "1/512", + "factor_bits": 1024, + "working_bits": 768, + "target_bits": 128 + } +] diff --git a/research/cyclic-inverse-stride-bridge/vendor/PR628-NOTICE.md b/research/cyclic-inverse-stride-bridge/vendor/PR628-NOTICE.md new file mode 100644 index 0000000000..22fbeb8ef0 --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/vendor/PR628-NOTICE.md @@ -0,0 +1,24 @@ +# Attribution and scope + +Ali Romman's PR621, exact head 520774462b19b29af41554b74def31f9d01e997e, +supplies the prime-power kernel circle bound. Its kernel attribution is +OpenAI's exact-DFT preprint at adc7f1241b42e322a6451854ab7e4b4c146bf78a +(`loc:newton`, `loc:fourier-factorization`) and classical q-Pochhammer/Newton +factorization, including Alexey Kuznetsov's cited q-calculus work. This +package does not claim to originate those constructions. + +Pan's approximate-factorization theorem is used in the form stated by +Mehlhorn, Sagraloff and Wang; Brent's work supplies fast elementary-function +evaluation. Causal/anticausal recursive filtering is standard, as illustrated +by the Briand-Davy source listed in SOURCE.json. Sources are cited for these +specific tools, not as proofs of this package's complete claim. + +The scan rounding analysis, explicit budget composition, interval and +factor certificates, routed reference execution, and packaging were +prepared with substantial OpenAI Codex assistance for chafreaky. The dense +matrix solver and algebraic coefficient crosschecks provide independent +computational paths, not human peer review or formal Lean verification. + +No new multiplication exponent, literature priority, maintainer acceptance, +physical tape execution, or production performance result is claimed. +The code and documents use the repository's Apache-2.0 license. diff --git a/research/cyclic-inverse-stride-bridge/vendor/check.py b/research/cyclic-inverse-stride-bridge/vendor/check.py new file mode 100644 index 0000000000..5ef6dd67b6 --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/vendor/check.py @@ -0,0 +1,178 @@ +"""Rational proof of mixed inside/outside cyclic factor inversion.""" +from pathlib import Path +from fractions import Fraction as F +import argparse,importlib.util,json,math,sys +sys.set_int_max_str_digits(100000) +P=Path(__file__).resolve().parent +def module(name): + s=importlib.util.spec_from_file_location(name,P/(name+'.py'));m=importlib.util.module_from_spec(s);s.loader.exec_module(m);return m +c=module('scan');ik=module('interval_kernel') + +def prime_power(r): + if type(r)!=int or r<3:return False + p=next((d for d in range(2,math.isqrt(r)+1) if r%d==0),r) + while r%p==0:r//=p + return r==1 + +def certify(data): + r,k=data['radix'],data['embedding'] + c.need(prime_power(r) and type(k)==int and 00 and type(target)==int and target>0,'precision budget') + c.need(type(fb)==int and 0=F(1,2),'gauge chart') + parameters=[im/(1+re) for im in v[1] for re in v[0]] + mid=(min(parameters)+max(parameters))/2 + t=c.rounded((mid,F(0)),1024)[0] + sigma=c.mul(center,((1-t*t)/(1+t*t),2*t/(1+t*t))) + c.need(c.norm2(sigma)==1,'exact rational unit phase') + error=sum(max(abs(endpoint-coordinate) for endpoint in iv) for iv,coordinate in zip(box,sigma)) + c.need(error0) + for name in ('unit_root','missing_root','wrong_embedding','low_precision','bad_margin'): + row=json.loads(json.dumps(mixed)) + if name=='unit_root':row['roots'][0]=['1','0'] + if name=='missing_root':row['roots'].pop() + if name=='wrong_embedding':row['embedding']=row['radix'] + if name=='low_precision':row['working_bits']=8 + if name=='bad_margin':row['beta']='1' + try:certify(row) + except ValueError as error:controls.append(dict(name=name,rejected=str(error))) + else:raise ValueError('bad control accepted '+name) + state=certify(mixed);x=[c.ONE,c.ZERO,(F(1,2),F(1,4))] + bad=apply(x,state,1,omit_inner_shift=True) + try:residual_check(x,bad,state,1) + except ValueError as error:controls.append(dict(name='omitted_inner_shift',rejected=str(error))) + else:raise ValueError('inner-shift mutation accepted') + try:apply(x,state,1,(F(1),F(1))) + except ValueError as error:controls.append(dict(name='nonunit_gauge',rejected=str(error))) + else:raise ValueError('nonunit gauge accepted') + args.out.write_text(json.dumps(dict(status='passed',kernel_crosschecks=crosschecks,irrational_gauge=gauge_record,certificates=certificates,cases=cases,controls=controls),indent=2)+'\n') + print(json.dumps(dict(status='passed',certificates=len(certificates),cases=len(cases),dense_cases=sum(row['dense_comparison'] for row in cases),controls=len(controls)))) + +if __name__=='__main__':main() diff --git a/research/cyclic-inverse-stride-bridge/vendor/interval_kernel.py b/research/cyclic-inverse-stride-bridge/vendor/interval_kernel.py new file mode 100644 index 0000000000..1182175a55 --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/vendor/interval_kernel.py @@ -0,0 +1,61 @@ +"""Outward-rounded rational enclosures for prime-power cyclic kernels.""" +from fractions import Fraction as F +import math +from functools import lru_cache + +BITS=1536 +SCALE=1<4:raise ValueError('angle bound') + itheta=(point(0),theta) + total=term=ONE + # Taylor remainder for complex exp: <=exp(4)*4^(N+1)/(N+1)! <128*... + n=0 + while True: + n+=1;term=cmul(term,itheta);term=(scale(term[0],F(1,n)),scale(term[1],F(1,n)));total=cadd(total,term) + remainder=F(128*4**(n+1),math.factorial(n+1)) + if remainder 0, 'empty cycle') + need(direction in (-1, 1), 'invalid direction') + need(0 < beta <= 1, 'invalid margin') + need(norm2(b) <= (1-beta)**2, 'uncertified stable factor') + u = F(1, 1 << bits) + need(u <= beta*beta/2, 'precision too low for closure') + order = list(range(len(x))) if direction == 1 else list(reversed(range(len(x)))) + z, power = ZERO, ONE + for i in order: + z = rounded(add(x[i], mul(b, z)), bits) + power = rounded(mul(b, power), bits) + den = sub(ONE, power) + need(norm2(den) >= (beta/2)**2, 'closure lower bound failed') + seed = rounded(div(z, den), bits) + y, previous = [ZERO]*len(x), seed + for i in order: + previous = rounded(add(x[i], mul(b, previous)), bits) + y[i] = previous + return y + +def dense_solve(x, b, direction): + """Independent exact Gaussian elimination on the cyclic matrix.""" + n = len(x) + a = [[ZERO for _ in range(n)] + [x[i]] for i in range(n)] + for i in range(n): + a[i][i] = add(a[i][i], ONE) + j = (i-direction) % n + a[i][j] = sub(a[i][j], b) + for k in range(n): + pivot = next(i for i in range(k, n) if a[i][k] != ZERO) + a[k], a[pivot] = a[pivot], a[k] + p = a[k][k] + a[k] = [div(v, p) for v in a[k]] + for i in range(n): + if i == k: continue + p = a[i][k] + a[i] = [sub(v, mul(p, w)) for v, w in zip(a[i], a[k])] + return [row[-1] for row in a] + +def residual_bound(x, y, b, beta, direction, bound): + # Neumann inverse norm <= 1/beta converts residual to forward error. + for i in range(len(x)): + residual = sub(sub(y[i], mul(b, y[(i-direction) % len(x)])), x[i]) + need(norm2(residual) <= (beta*bound)**2, 'residual error bound failed') + +def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--out', type=Path, required=True) + args = parser.parse_args() + cases = [] + for beta in (F(1, 2), F(1, 16), F(1, 4096)): + for unit in (ONE, (F(-1), F(0)), (F(3, 5), F(4, 5))): + b = mul((1-beta, F(0)), unit) + for n in (1, 2, 3, 8, 17, 64): + x = [(F((i*7)%13-6, 8), F((i*11)%17-8, 16)) for i in range(n)] + B = max(abs(v[0])+abs(v[1]) for v in x) + for direction in (-1, 1): + bits = 64 + bound = 6*(B+1)*F(1, 1 << bits)/beta**3 + y = scan(x, b, beta, bits, direction) + residual_bound(x, y, b, beta, direction, bound) + if n <= 8: + exact = dense_solve(x, b, direction) + need(all(norm2(sub(v,w)) <= bound**2 for v,w in zip(y,exact)), 'dense comparison failed') + cases.append(dict(beta=str(beta), b=[str(v) for v in b], length=n, + direction=direction, bits=bits, forward_error_bound=str(bound), + dense_crosscheck=n<=8, residual_check=True)) + controls = [] + for name, x, b, beta, bits, direction in ( + ('unstable', [ONE], ONE, F(1,2), 64, 1), + ('underprecision', [ONE], (F(15,16),F(0)), F(1,16), 3, 1), + ('empty', [], ZERO, F(1,2), 64, 1), + ('bad_direction', [ONE], ZERO, F(1,2), 64, 0), + ): + try: scan(x,b,beta,bits,direction) + except ValueError as error: controls.append(dict(name=name,rejected=str(error))) + else: raise ValueError('negative control accepted: '+name) + x = [ONE, ZERO, ONE] + b, beta = (F(1,2),F(0)), F(1,2) + y = scan(x,b,beta,64,1) + y[0] = add(y[0],ONE) + try: residual_bound(x,y,b,beta,1,F(1,1<<40)) + except ValueError as error: controls.append(dict(name='corrupt_output',rejected=str(error))) + else: raise ValueError('corrupt output accepted') + args.out.write_text(json.dumps(dict(status='passed',cases=cases,controls=controls),indent=2)+'\n') + print(json.dumps(dict(status='passed',cases=len(cases),dense_cases=sum(c['dense_crosscheck'] for c in cases),controls=len(controls)))) + +if __name__ == '__main__': main() diff --git a/research/cyclic-inverse-stride-bridge/verify.py b/research/cyclic-inverse-stride-bridge/verify.py new file mode 100644 index 0000000000..0cc3867b79 --- /dev/null +++ b/research/cyclic-inverse-stride-bridge/verify.py @@ -0,0 +1,234 @@ +"""Replay for the stride bridge. Standard library only. + + python3 -B research/cyclic-inverse-stride-bridge/verify.py --check + python3 -B research/cyclic-inverse-stride-bridge/verify.py --write # regenerate EXPECTED.json +""" +from fractions import Fraction as F +from pathlib import Path +import argparse +import hashlib +import importlib.util +import json +import math +import sys + +sys.set_int_max_str_digits(100000) +HERE = Path(__file__).resolve().parent + + +def load(path, name): + spec = importlib.util.spec_from_file_location(name, path) + module = importlib.util.module_from_spec(spec) + sys.modules[name] = module + spec.loader.exec_module(module) + return module + + +st = load(HERE / 'stride.py', 'bridge_stride') +need = st.need + + +def pinned_vendor(): + source = json.loads((HERE / 'SOURCE.json').read_text()) + for name, digest in source['vendored_sha256'].items(): + need(hashlib.sha256((HERE / 'vendor' / name).read_bytes()).hexdigest() == digest, + 'vendored source drift: ' + name) + # check.py loads scan.py and interval_kernel.py from its own directory. + return load(HERE / 'vendor' / 'check.py', 'pr628_check') + + +def unit(t): + t = F(t) + return ((1 - t * t) / (1 + t * t), 2 * t / (1 + t * t)) + + +def coefficients(L, beta, seed): + out = [] + for i in range(L): + scale = (F(1), F(1, 2), F(0), F(1))[(i * 7 + seed) % 4] + out.append(tuple((1 - beta) * scale * v for v in unit(F((i * 5 + seed) % 13 - 6, 5)))) + return out + + +def inputs(L, seed): + return [(F((5 * i + seed) % 9 - 4, 8), F((7 * i + 3 * seed) % 11 - 5, 16)) for i in range(L)] + + +def generic(): + cases = 0 + worst = F(0) + for g in (2, 3, 5): + beta = F(1, 1 << g) + for bits in (g + 6, 2 * g + 9): + for L in range(1, 19): + for w in range(-L, L): + K = st.levels(L, w) + need(st.admitted(beta, bits, K), 'admission') + b, x = coefficients(L, beta, L + w), inputs(L, L * w) + trace = [] + y = st.solve(x, b, w, bits, st.Tape(), trace) + for row in trace: # margin is preserved at every level + need(all(st.norm2(c) <= (1 - beta) ** 2 for c in row['b']), 'level margin') + need(2 * row['stride'] <= row['length'], 'stride halving') + exact = st.exact_cycle_solve(x, b, w) + bound = st.solve_error_bound(F(1), beta, bits, K) + for v, e in zip(y, exact): + err2 = st.norm2(st.sub(v, e)) + need(err2 <= bound ** 2, 'generic error bound L=%d w=%d' % (L, w)) + worst = max(worst, err2 / bound ** 2) + cases += 1 + return dict(cases=cases, max_error_to_bound_squared=float(worst)) + + +def traffic(): + rows = [] + worst = 0 + for L in (1, 2, 3, 7, 64, 1000, 4096, 65536, 99991, 131072): + phi = int(L * 0.6180339887) or 1 + for w in sorted({0, 1, 2, 3, L // 2, L // 2 + 1, L - 1, phi, (L // 3) or 1, 97 % L}): + tape = st.Tape() + st.solve([None] * L, [None] * L, w, None, tape) + K = st.levels(L, w) + need(K <= max(1, L).bit_length(), 'depth bound') + need(sum(n for n, _ in tape.levels) <= 2 * L, 'geometric level sizes') + ratio = F(tape.records, L) + need(ratio <= 40, 'linear traffic L=%d w=%d' % (L, w)) + worst = max(worst, ratio) + sort_route = 4 * L * max(1, math.ceil(math.log2(L))) if L > 1 else 0 + rows.append(dict(length=L, stride=w, levels=K, records=tape.records, + records_per_entry=float(ratio), pr628_sort_route_records=sort_route)) + return dict(max_records_per_entry=float(worst), rows=rows) + + +def apply_kernel(c, state, x, w, tau, bits, tape, mutate=None): + r = state['radix'] + L = len(x) + y = [(v[0] * r, v[1] * r) for v in x] + taubar = (tau[0], -tau[1]) + for inside, b in state['factors']: + if inside: # (U-rho)^-1 = (I - rho U^-1)^-1 U^-1, U = tau Z^w + shift = w if mutate != 'wrong_inner_shift' else -w + v = [y[(i + shift) % L] for i in range(L)] + y = st.solve(v, [st.mul(b, taubar)] * L, -w, bits, tape) + y = [st.rounded(st.mul(taubar, t), bits) for t in y] + else: # (U-rho)^-1 = -rho^-1 (I - rho^-1 U)^-1, here b = 1/rho + y = st.solve(y, [st.mul(b, tau)] * L, w, bits, tape) + y = [st.rounded(st.mul((-b[0], -b[1]), t), bits) for t in y] + return y + + +def cascade_bound(state, L, w): + """Execution budget for the factor cascade, Theorem 2 of PROOF.md.""" + beta, bits, r = state['beta'], state['bits'], state['radix'] + K = max(st.levels(L, w), st.levels(L, -w)) + need(st.admitted(beta, bits, K), 'cascade admission') + u = F(1, 1 << bits) + error, norm = F(0), F(r) + for _ in state['factors']: + # one solve plus one rounded scalar multiplication of modulus <= 1 + error = error / beta + st.solve_error_bound(norm + error, beta, bits, K) + u + norm /= beta + return error + + +def kernels(c): + data = json.loads((HERE / 'vendor' / 'FACTORS.json').read_text()) + rows = [] + for row in data: + state = c.certify(row) + perturbation = F(state['certificate']['factorization_inverse_error_bound']) + for tau_name, tau in (('1', st.ONE), ('3/5+4i/5', (F(3, 5), F(4, 5)))): + for L in (1, 2, 3, 5, 8): + strides = range(L) if L <= 5 else (1, 3, 5, 7) + for w in strides: + x = inputs(L, w + L) + tape = st.Tape() + y = apply_kernel(c, state, x, w, tau, state['bits'], tape) + bound = cascade_bound(state, L, w) + need(bound + perturbation <= F(1, 1 << row['target_bits']), 'target budget') + q = c.phased_polynomial(state['q'], tau) + dense = L <= 2 or (L == 3 and row['radix'] <= 9 and tau_name == '1') + if dense: # independent exact Gauss-Jordan solve of Q(tau Z^w) + exact = c.matrix_solve(x, q, w) + need(all(st.norm2(st.sub(v, e)) <= bound ** 2 for v, e in zip(y, exact)), + 'dense kernel comparison r=%d L=%d w=%d' % (row['radix'], L, w)) + # expanded residual: ||Q(U)y - x|| <= ||Q||_1 * execution bound + scale = sum(abs(v[0]) + abs(v[1]) for v in q) * bound + for i in range(L): + total = st.ZERO + for j, v in enumerate(q): + total = st.add(total, st.mul(v, y[(i - w * j) % L])) + need(st.norm2(st.sub(total, x[i])) <= scale ** 2, 'kernel residual') + rows.append(dict(radix=row['radix'], embedding=row['embedding'], gauge=tau_name, + length=L, stride=w, dense=dense, + execution_bound_log2=round(math.log2(bound), 3), + total_bound_log2=round(math.log2(bound + perturbation), 3), + target_bits=row['target_bits'])) + return rows + + +def controls(c): + out = [] + # 1. Reseeding with the wrong closure rotation must break the solution. + L, w, beta, bits = 7, 3, F(1, 4), 16 + b, x = coefficients(L, beta, 1), inputs(L, 2) + good = st.solve(x, b, w, bits, st.Tape()) + original = st.Fifo.__init__ + + def rotated(self, tape, initial): + initial = list(initial) + original(self, tape, initial[1:] + initial[:1]) + st.Fifo.__init__ = rotated + try: + bad = st.solve(x, b, w, bits, st.Tape()) + finally: + st.Fifo.__init__ = original + exact = st.exact_cycle_solve(x, b, w) + bound = st.solve_error_bound(F(1), beta, bits, st.levels(L, w)) + need(all(st.norm2(st.sub(v, e)) <= bound ** 2 for v, e in zip(good, exact)), 'control baseline') + need(any(st.norm2(st.sub(v, e)) > bound ** 2 for v, e in zip(bad, exact)), 'rotated reseed accepted') + out.append('rotated_closure_reseed_rejected') + # 2. Precision below the admission is refused. + need(not st.admitted(F(1, 8), 4, 3), 'low precision admitted') + out.append('low_precision_refused') + # 3. Margin-free coefficient (|b|=1) is not a contraction: the oracle divides by zero. + try: + st.exact_cycle_solve([st.ONE], [st.ONE], 0) + except ValueError: + out.append('unit_coefficient_rejected') + else: + raise ValueError('unit coefficient accepted') + # 4. Wrong inner shift direction in the kernel cascade is caught by the dense solve. + data = json.loads((HERE / 'vendor' / 'FACTORS.json').read_text()) + state = next(s for s in map(c.certify, data) if any(inside for inside, _ in s['factors'])) + x = inputs(3, 3) + y = apply_kernel(c, state, x, 1, st.ONE, state['bits'], st.Tape(), mutate='wrong_inner_shift') + exact = c.matrix_solve(x, c.phased_polynomial(state['q'], st.ONE), 1) + bound = cascade_bound(state, 3, 1) + need(any(st.norm2(st.sub(v, e)) > bound ** 2 for v, e in zip(y, exact)), 'wrong inner shift accepted') + out.append('wrong_inner_shift_rejected') + return out + + +def main(): + parser = argparse.ArgumentParser() + mode = parser.add_mutually_exclusive_group(required=True) + mode.add_argument('--check', action='store_true') + mode.add_argument('--write', action='store_true') + args = parser.parse_args() + c = pinned_vendor() + result = dict(status='passed', generic=generic(), traffic=traffic(), + kernels=kernels(c), controls=controls(c)) + text = json.dumps(result, indent=1, sort_keys=True) + '\n' + target = HERE / 'EXPECTED.json' + if args.write: + target.write_text(text) + else: + need(target.read_text() == text, 'replay differs from EXPECTED.json') + print('PASS_CYCLIC_INVERSE_STRIDE_BRIDGE generic=%d kernel_cases=%d controls=%d max_records_per_entry=%s' + % (result['generic']['cases'], len(result['kernels']), len(result['controls']), + result['traffic']['max_records_per_entry'])) + + +if __name__ == '__main__': + main()