Skip to content

Batch number field lookups in Dirichlet character search columns (LMFDB#6008)#41

Open
roed-math wants to merge 1 commit into
mainfrom
ai/t29-dirichlet-col-batch
Open

Batch number field lookups in Dirichlet character search columns (LMFDB#6008)#41
roed-math wants to merge 1 commit into
mainfrom
ai/t29-dirichlet-col-batch

Conversation

@roed-math

Copy link
Copy Markdown
Owner

The kernel field and value field columns added in LMFDB#6004 issued two database queries per row
each (a nf_fields lookup by coefficients plus a nf_fields_extra lookup), roughly 200
round trips per 50-row results page. This adds a postprocessing step to the search that
computes all defining polynomials up front and finds the matching number field labels in a
single nf_fields query; the column display functions use the precomputed labels (falling
back to the old per-row behavior if the data is absent). Profiling shows the pari
computations (galoissubcyclo/polredabs) take ~9ms per page, so the database round trips were
the entire cost, answering the question raised in the issue. Rendered search-results tables
are byte-identical before and after on sample searches, downloads are unchanged, and page
render time against a remote database drops from 14-30s to under 1s (16-65x). The batch
query uses $or of equalities rather than $in because psycodict omits the ::numeric[]
typecast on the array-$in path.
Addresses LMFDB#6008.

🤖 Generated with Claude Code

…DB#6008)

The kernel field and value field columns each issued two database
queries per row (nf_fields lookup by coefficients plus a
nf_fields_extra lookup inside WebNumberField.from_coeffs/from_cyclo),
about 200 round trips per 50-row results page.  Add a postprocessing
step to the search that computes all defining polynomials up front (the
pari galoissubcyclo/polredabs computations take ~9ms per page) and finds
the matching number field labels in a single nf_fields query; the column
display functions use the precomputed labels and fall back to the old
per-row behavior when they are absent.  The batch query uses a top-level
$or of equality clauses because psycodict's array $in path omits the
::numeric[] typecast that plain equality gets.

Verified: rendered results tables byte-identical before/after on four
sample searches; render time 29.3/29.5/14.4/24.6s -> 0.45/0.85/0.90/0.89s
against devmirror; downloads unchanged by construction; 26 character
tests pass (including a new test_field_columns); pyflakes clean.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants