mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 20:47:09 +01:00
PORR was the last course whose `run` did not work. Four measurements, not
guesses, explain why -- and none of them is the matrix size everyone assumes:
ProcessingType.PROCESSES 20.9s at n=2, 32.8s at n=5, 78.2s at n=10. That
is process-pool setup PER TEST, and it grows.
matrix_type poli3 densifies a sparse .mat into a 2.3 GB npz cache
(nemeth12: 723 MB) -- over the 2G ceiling before
any solving happens.
n=10000 800 MB matrix, and np.linalg.solve wants a copy.
n=5000 spd_5000.npz was a Git LFS pointer whose object
404s on GitHub, so it regenerates from scratch.
Remove those and what is left still exercises the whole Richardson
implementation at every size that fits: 18 tests, 28 seconds through the
harness, exit 0. The submitted parameter set is one documented environment
variable away. `main.py` now propagates pytest's status (verified: exit 5 when
nothing is collected) -- it discarded it before, so `run` could not tell a
passing suite from a failing one.
The rest of this commit is scripts/check_refactor_safety.py, which exists
because three regressions got past both ruff and a smoke run during this
campaign, and I would rather they could not get past the next one:
--signatures diffs two trees function by function, parameter by
parameter, default by default. This is what found the 22
EARIN functions whose defaults an annotation pass silently
dropped.
--logging a module with a __main__ guard that logs at INFO must call
basicConfig, or it prints nothing at all. Found two more
in PORR just now.
--print-keywords refuses to let an automated rewrite near print(x, end="")
or print(x, file=sys.stderr); losing those turns a
rendered board into one glyph per line, or silently moves
error output onto stdout.
All three pass on the whole archive. Also in here: 12 latent TypeErrors mypy
found in EARIN that ruff could not -- call sites still passing positionally to
parameters this campaign had made keyword-only, plus one caller of a function
whose argument I had removed. Every one would have raised at runtime.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
38 lines
1.8 KiB
Bash
Executable File
38 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
#
|
|
# Programming/PORR -- see ../../run.sh for the probe contract.
|
|
set -euo pipefail
|
|
|
|
# shellcheck source-path=SCRIPTDIR
|
|
# shellcheck source=../../scripts/course_lib.sh
|
|
. "$(dirname "$(readlink -f "$0")")/../../scripts/course_lib.sh"
|
|
|
|
# This suite is a BENCHMARK, not a smoke test. Measured on this machine, the
|
|
# cost is not where you would guess -- it is not the matrix size:
|
|
#
|
|
# ProcessingType.PROCESSES 20.9s at n=2, 32.8s at n=5, 78.2s at n=10.
|
|
# That is pool setup per test, and it grows.
|
|
# matrix_type poli3 densifies a sparse .mat into a 2.3 GB cache
|
|
# (nemeth12: 723 MB) -- over the 2G ceiling
|
|
# `../../run.sh run` imposes, before any solving.
|
|
# n=10000 the SPD matrix alone is 800 MB and
|
|
# np.linalg.solve needs a second copy.
|
|
# n=5000 spd_5000.npz was a Git LFS pointer whose object
|
|
# 404s on the server, so this size regenerates
|
|
# from scratch: a dense 5000x5000 eigendecomposition.
|
|
#
|
|
# What is left after removing those is fast and still covers the whole
|
|
# Richardson implementation across every size that fits: 18 tests, 28 seconds.
|
|
# The full submitted parameter set is one environment variable away, and needs
|
|
# headroom the default deliberately does not give it:
|
|
#
|
|
# PYTEST_ADDOPTS= RUN_MEMORY_MAX=16G RUN_CPU_QUOTA=800% ./run.sh run Programming/PORR
|
|
#
|
|
# main.py hardcodes its pytest arguments, so the selection is passed the only
|
|
# way that survives that: PYTEST_ADDOPTS, which pytest.main() also honours.
|
|
export PYTEST_ADDOPTS="${PYTEST_ADDOPTS--k 'spd and (SEQUENTIAL or THREADS) and not 5000 and not 10000'}"
|
|
|
|
course_main --kind python \
|
|
--entry "$(dirname "$(readlink -f "$0")")/code/main.py" \
|
|
-- "$@"
|