Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions .github/workflows/dirty-stride-phases.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
name: Dirty stride quadratic phases
on:
pull_request:
paths:
- 'research/dirty-stride-phases/**'
- '.github/workflows/dirty-stride-phases.yml'
push:
paths:
- 'research/dirty-stride-phases/**'
- '.github/workflows/dirty-stride-phases.yml'
workflow_dispatch:
permissions:
contents: read
jobs:
verify:
runs-on: ubuntu-latest
timeout-minutes: 15
strategy:
matrix:
python: ['3.11', '3.14']
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
with:
python-version: ${{ matrix.python }}
- run: python -I -O -B research/dirty-stride-phases/verify.py
- run: python -I -O -B research/dirty-stride-phases/test_package.py
22 changes: 22 additions & 0 deletions research/dirty-stride-phases/DERIVATION.diff
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
--- vendor/pr985/dirty_stride.py
+++ dirty_stride.py
@@ -289,7 +289,8 @@
for i in range(len(data)):
meter.access(data, i)
meter.validation_reads += 1
- need(rnd(data[i], bits) == data[i], 'fixed grid data')
+ value = data[i]
+ need(rnd(value, bits) == value, 'fixed grid data')
divisor = gcd(len(x), stride)
cycle = len(x)//divisor
inverse = pow((stride//divisor) % cycle, -1, cycle) if cycle > 1 else 0
@@ -338,7 +339,8 @@
for i in range(len(data)):
meter.access(data, i)
meter.validation_reads += 1
- need(rnd(data[i], bits) == data[i], 'fixed grid data')
+ value = data[i]
+ need(rnd(value, bits) == value, 'fixed grid data')
def run(src, dst, lo, hi, level, direction):
if hi-lo == 1:
inside, b, scale = factors[lo]
335 changes: 335 additions & 0 deletions research/dirty-stride-phases/EXPECTED.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,335 @@
{
"controls": {
"nonconstant_witness": {
"length": 8,
"modulus": 16,
"numerator": -3,
"real_separation_lower": "1/8",
"stride": 3
},
"rejections": [
"zero_modulus",
"boolean_numerator",
"aliased_arrays",
"unstable_coefficient",
"unsupported_shift",
"invalid_sign",
"float_coefficient",
"insufficient_precision"
]
},
"costs": [
{
"divisions": 49140,
"length": 70,
"phase_peak_l1_log2_upper": 1,
"phase_terms": 48596,
"products": 98304,
"recursion_depth": 5,
"stride": 29,
"tape_moves": 33906
},
{
"divisions": 112500,
"length": 169,
"phase_peak_l1_log2_upper": 2,
"phase_terms": 111252,
"products": 225156,
"recursion_depth": 6,
"stride": 70,
"tape_moves": 92531
},
{
"divisions": 285300,
"length": 408,
"phase_peak_l1_log2_upper": 2,
"phase_terms": 282132,
"products": 570744,
"recursion_depth": 7,
"stride": 169,
"tape_moves": 244880
},
{
"divisions": 708660,
"length": 985,
"phase_peak_l1_log2_upper": 2,
"phase_terms": 700788,
"products": 1417332,
"recursion_depth": 8,
"stride": 408,
"tape_moves": 634315
}
],
"kernels": [
{
"bits": 78,
"calls": 1,
"count": 1,
"dirt": "7",
"length": 1,
"output_digest": "795d569769d7cf7fa67bcd2773298e96c6f3c2afc983eda024d69302bf4fb056",
"phase_terms": 240,
"stride": 0,
"tape_moves": 17
},
{
"bits": 78,
"calls": 1,
"count": 1,
"dirt": "-13",
"length": 5,
"output_digest": "09624cc4b5faf3c305b402677903c698954a5b9f1eaca61b89e9a784df757c61",
"phase_terms": 4048,
"stride": 2,
"tape_moves": 1161
},
{
"bits": 114,
"calls": 1,
"count": 1,
"dirt": "1099511627776",
"length": 8,
"output_digest": "17b3c966054848d551486dec54fd642f07cc12b17286412d238f58f991a50984",
"phase_terms": 5340,
"stride": -3,
"tape_moves": 1952
},
{
"bits": 154,
"calls": 1,
"count": 1,
"dirt": "1208925819614629174706176",
"length": 17,
"output_digest": "0d2fb4495bf6ffa7e089e1295c6db4322768a89642956c4865412f9cb6a35d75",
"phase_terms": 25612,
"stride": 7,
"tape_moves": 6001
},
{
"bits": 91,
"calls": 4,
"count": 2,
"dirt": "7",
"length": 1,
"output_digest": "a519e310179cd9308911399c3093c38f39f2c3509f4ef63a378b9e7cf3179535",
"phase_terms": 270,
"stride": 0,
"tape_moves": 46
},
{
"bits": 91,
"calls": 4,
"count": 2,
"dirt": "-13",
"length": 5,
"output_digest": "373fcce23ad8a70119895bf4cbfe509b6365d60c1b91ae08f4d76c49015db1fd",
"phase_terms": 4558,
"stride": 2,
"tape_moves": 4254
},
{
"bits": 127,
"calls": 4,
"count": 2,
"dirt": "1099511627776",
"length": 8,
"output_digest": "083c446c693c354b10137da4faecbe739116ba9ebfc0ad83cdedef396d28eb46",
"phase_terms": 5782,
"stride": -3,
"tape_moves": 7098
},
{
"bits": 167,
"calls": 4,
"count": 2,
"dirt": "1208925819614629174706176",
"length": 17,
"output_digest": "c9b3d974d9da493433d6108aa12d35c402940f7dd3a4573808b3945c81c6701a",
"phase_terms": 27302,
"stride": 7,
"tape_moves": 22510
},
{
"bits": 115,
"calls": 10,
"count": 3,
"dirt": "7",
"length": 1,
"output_digest": "3643a3c327f60464a878ff7573c3a297d3cf6916dd40d150e9260326cfb077e1",
"phase_terms": 318,
"stride": 0,
"tape_moves": 124
},
{
"bits": 116,
"calls": 10,
"count": 3,
"dirt": "-13",
"length": 5,
"output_digest": "bd9f7ecd7715055b9cbb71df98093961cb7907a0eded0a54cc09ccbdc303abe8",
"phase_terms": 5408,
"stride": 2,
"tape_moves": 10700
},
{
"bits": 151,
"calls": 10,
"count": 3,
"dirt": "1099511627776",
"length": 8,
"output_digest": "583685e75251ce2553b4b1ac958750fa0be1034bfb53e209171cc75ccb364c5b",
"phase_terms": 6598,
"stride": -3,
"tape_moves": 17874
},
{
"bits": 191,
"calls": 10,
"count": 3,
"dirt": "1208925819614629174706176",
"length": 17,
"output_digest": "9491e75baed62381ec857e7ac449e371f90da3da80c20a979846bf9e72c275da",
"phase_terms": 30422,
"stride": 7,
"tape_moves": 56508
},
{
"bits": 185,
"calls": 28,
"count": 5,
"dirt": "7",
"length": 1,
"output_digest": "9c2398bd38414e474fc51938a2b58bd3d44bd7f0ccbbe1e8e7742e6eb0beb1b2",
"phase_terms": 458,
"stride": 0,
"tape_moves": 420
},
{
"bits": 186,
"calls": 28,
"count": 5,
"dirt": "-13",
"length": 5,
"output_digest": "b0d4be356a0c40cf87411a5e13ed3e467f8880c9d65c62698f394e208396ceab",
"phase_terms": 7788,
"stride": 2,
"tape_moves": 30332
},
{
"bits": 221,
"calls": 28,
"count": 5,
"dirt": "1099511627776",
"length": 8,
"output_digest": "8060c2bacac5c1330ff8e33ddd843cfd832b34a6181453a9386d40fa075e8380",
"phase_terms": 9046,
"stride": -3,
"tape_moves": 50626
},
{
"bits": 261,
"calls": 28,
"count": 5,
"dirt": "1208925819614629174706176",
"length": 17,
"output_digest": "d90d67fdc07061e4a2e0232046fe0e2ff060d1ffd9339558a531b9dfdb696ae5",
"phase_terms": 39782,
"stride": 7,
"tape_moves": 159492
},
{
"bits": 323,
"calls": 64,
"count": 8,
"dirt": "7",
"length": 1,
"output_digest": "8ee946687cafa3a56933396a0d88acff66c0c834a4782f6e58d6b530fd3acfaa",
"phase_terms": 738,
"stride": 0,
"tape_moves": 626
},
{
"bits": 324,
"calls": 64,
"count": 8,
"dirt": "-13",
"length": 5,
"output_digest": "0ba65205c051c4eef445741868c0e29249410d9c691b91064caebf5a60cb0864",
"phase_terms": 12548,
"stride": 2,
"tape_moves": 66674
},
{
"bits": 359,
"calls": 64,
"count": 8,
"dirt": "1099511627776",
"length": 8,
"output_digest": "a4d58b76035655a7ed5f02ff0fa302fae8069c2ba50ca213b77dae1d4711b946",
"phase_terms": 13738,
"stride": -3,
"tape_moves": 111218
},
{
"bits": 399,
"calls": 64,
"count": 8,
"dirt": "1208925819614629174706176",
"length": 17,
"output_digest": "14a33fb4e4c45c4d7a769884fe13502823082649b76b5543b6f284918ccb6233",
"phase_terms": 57722,
"stride": 7,
"tape_moves": 354930
}
],
"leaves": {
"cases": 263,
"max_squared_error_ratio_log2_upper": -42,
"maximum_bits": 183,
"nonzero_errors": 263,
"output_digest": "f20fcbfddc3341510a297f7c58d1ef687666d23995b4f38ba8eccf58b7f2929a"
},
"phases": {
"cases": 910,
"coefficient_bits": [
10,
25,
72,
104
],
"output_digest": "900f8fe4f6c0c79f556d19c4cf6aa0d3f549055d76c9377d45132b42302a463a",
"small_moduli": [
1,
24
],
"wide_modulus_bits": 81
},
"retained_kernel": {
"cases": [
{
"bits": 239,
"dirt": "7",
"embedding": 1,
"length": 5,
"output_digest": "ba90948923b8c2d6acb8a06018c2d6744fc0c3a2d0219ecef386e66976727c0e",
"radix": 4,
"stride": 2,
"total_bound_log2_upper": -130
},
{
"bits": 275,
"dirt": "1099511627776",
"embedding": 1,
"length": 8,
"output_digest": "0f3c6081e92119c15f165abd7b8a2bb03a7cb8e2dedb1c1443d89a82e627bd2c",
"radix": 4,
"stride": -3,
"total_bound_log2_upper": -129
}
],
"factor_residual_log2_upper": -1022,
"inverse_perturbation_log2_upper": -988
},
"schema": 1,
"source_pins": 14
}
Loading
Loading