mirror of
https://github.com/kuhyx/WUT_Computer_Science.git
synced 2026-11-10 21:07:09 +01:00
kuhy chose the strict branch: no per-file-ignores at all, not even the S101 block that ruff's own docs and the rest of this fleet carry for test code. So 125 test assertions were rewritten to raise instead of assert. Rather than 125 copies of `if x != y: raise AssertionError(...)`, each course grows a small expect module -- expect_equal / expect_in / expect_true / expect_false. That is also strictly better output than a bare assert here: pytest's assertion rewriting does not reach into a helper, so the helper has to print both values, and it does. The rewrite itself went through ast, not a regex, because seven of ECOTE's asserts were wrapped over several lines. Everything else in the two courses is gone as well: - 66 argument and 37 return annotations on the translator, worked out from what each function actually returns rather than stamped on as Any -- `list[str] | str` where a function returns "Error!" or the parsed columns. - 16 prints became logger.error with %-style arguments. The messages still reach stderr with no basicConfig, via logging's last-resort handler, so the translator behaves exactly as before. - Two `open()` calls became Path.open / Path.write_text, six RET504 assign-then-return pairs collapsed, one 380-character expected-HTML literal split into implicitly concatenated pieces (it cannot be wrapped any other way, which is what ISC001 being off is for), and one block of commented-out code deleted. - ECRYPT_PROJECT/__init__.py removed. It made the COURSE directory a package, which nothing imports, and it was the sole cause of `N999 Invalid module name: 'ECRYPT_PROJECT'`; with it gone, sieve is the top-level package and its name is fine. Verified by running both, not by reading: ECOTE 26 tests pass and `python -m translator.main --filename examples/complicated/table1.tex` still writes the same HTML with the same three column-count warnings on stderr; ECRYPT_PROJECT 99 tests pass. Repo-wide: 3,686 findings -> 3,159. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0172dj34FDpao6wsix8ZuCzE
135 lines
6.5 KiB
Markdown
135 lines
6.5 KiB
Markdown
# WUT_Computer_Science
|
|
|
|
Archive of university coursework from Warsaw University of Technology.
|
|
44 course directories, 12 languages, ~28k lines of authored code plus the
|
|
submitted reports, figures and datasets. It is an **archive**: the code is
|
|
finished, and the value is that it still builds, runs and is readable.
|
|
|
|
## Repository Layout
|
|
|
|
| Path | What it is |
|
|
|---|---|
|
|
| `Programming/` | 25 course dirs with real code (Python, C/C++, Java, TS/Angular, C#, Unity, MATLAB-adjacent). |
|
|
| `NotProgramming/` | 19 course dirs that are mostly LaTeX reports, PDFs and EDA schematics. Exceptions: `ENUME` (MATLAB), `STUP/makieta` (Angular), `EDABA-LAB` (SQL). |
|
|
| `gates/` | Machine-readable gate inputs. `vendored.txt` is the source of truth for "not my code". |
|
|
| `scripts/` | Repo-local gates. Shims that `exec` into `~/utils` live here too. |
|
|
|
|
Two structural facts that surprise people:
|
|
|
|
- **`Programming/PSD/zin3/third/` and `Programming/psd_project/` are the same
|
|
services under different names**, and `WDWR/project/` vs `WDWR/projekt/`,
|
|
`SDM` vs `SDM2`, and `EMISY/componentSchematic/` vs `EMISY/schematic/` are
|
|
likewise near-duplicates. They are **not** de-duplicated: each is a separate
|
|
submitted deliverable, and merging them would rewrite the academic record.
|
|
- **`Programming/EOPSY/lab{3,4}/task*/work/` is not student code.** It is the
|
|
extraction target of `make setup` from the tarballs in the sibling `ftp/`.
|
|
Verified byte-identical, 14/14 files. Do not edit or split it.
|
|
|
|
## Git Workflow
|
|
|
|
Work directly on `main`; commit and push straight there.
|
|
|
|
```bash
|
|
./install.sh # deps + pre-commit hooks, then verifies and fails loudly
|
|
./run.sh check # the full local gate
|
|
./run.sh status # probe every course dir, regenerate DOCS-runnability.md
|
|
./run.sh run <dir> # build/run one course, capped at 2G RAM and 2 cores
|
|
```
|
|
|
|
`run` executes inside a transient systemd scope (`MemoryMax=2G`,
|
|
`MemorySwapMax=0`, `CPUQuota=200%`, `nice -n 19`, `ionice -c 3`), so a course
|
|
build cannot make an interactive machine stutter. This is not caution, it is a
|
|
kernel-enforced ceiling -- PORR's suite solves 10000x10000 systems and will
|
|
take every core it is given. Raise it deliberately for a single run with
|
|
`RUN_MEMORY_MAX=8G RUN_CPU_QUOTA=800% ./run.sh run <dir>`.
|
|
|
|
Never `--no-verify`. If a gate fails, fix the cause.
|
|
|
|
## Development Workflow
|
|
|
|
- Confirm a change works by **running the thing** and reading its output, not
|
|
by running tests. Tests come after.
|
|
- `git rm --cached`, never bare `git rm`, when removing build output — it must
|
|
stay on disk so a mis-classification is recoverable.
|
|
- After touching `.gitignore` or `.binary-allowlist`, re-run:
|
|
```bash
|
|
git ls-files | git check-ignore --stdin --no-index
|
|
```
|
|
It must print nothing. A file that is both tracked and ignored fails
|
|
**silently** on `git add`: not an error, the edit just never lands. This
|
|
repo had 130 such files.
|
|
|
|
## Code Conventions
|
|
|
|
Anything a hook already enforces is omitted here — read
|
|
`.pre-commit-config.yaml` for that list. What follows is what a linter cannot
|
|
check.
|
|
|
|
### Everything
|
|
|
|
- **Every file is at most 250 lines, source and prose alike**, enforced by the
|
|
shared gate in `~/utils`. There is deliberately no baseline and no
|
|
allowlist: split the file. For a LaTeX report that means `\input{}` per
|
|
section; for a markdown report, sibling `DOCS-*.md` files behind an index.
|
|
- **Coursework is held to the same bar as the tooling.** It gets the full
|
|
`select = ["ALL"]` treatment -- annotations, docstrings, naming, the lot --
|
|
and there are no per-file-ignores carving the two course trees out. The
|
|
version that was handed in is preserved by git history, which is a better
|
|
archive than a frozen working tree; this repo's job is code that still
|
|
builds, runs and reads well. (This reverses an earlier rule that said not to
|
|
improve coursework beyond what was submitted. kuhy overruled it on
|
|
2026-08-28: "yes fix it if necessary we can always go back to worse version
|
|
by going back in git repo.")
|
|
- The one thing that is still off limits is *what was delivered*: do not add
|
|
content to a submitted `.pdf`/report that was never in it, and do not merge
|
|
the near-duplicate submission directories listed above.
|
|
|
|
### Vendored content
|
|
|
|
`gates/vendored.txt` is the only place a path becomes exempt from lint,
|
|
coverage and the cap. Every entry carries a reason **and how it was
|
|
verified** — an unverified entry is a suppression wearing a costume. The list
|
|
is mirrored into `~/utils/file_length/_tables.py`, `[tool.ruff] exclude` and
|
|
`[tool.coverage.run] omit`; edit the manifest, never a mirror.
|
|
|
|
### Python
|
|
|
|
- `ruff` runs with `select = ["ALL"]` and mypy with `strict = true`.
|
|
- No `# noqa`, no `# type: ignore`. A pre-commit hook rejects both outright.
|
|
- **No per-file-ignores either, including for tests.** `pyproject.toml` has no
|
|
`[tool.ruff.lint.per-file-ignores]` table at all, which is stricter than the
|
|
rest of the fleet. So a test asserts by raising:
|
|
`if x != y: msg = ...; raise AssertionError(msg)` -- never a bare `assert`,
|
|
which is `S101`. Test functions carry docstrings and full annotations like
|
|
any other code, `pytest.raises` always takes `match=`, and an expected value
|
|
gets a named constant rather than being a magic number. Decided by kuhy on
|
|
2026-08-28 against the alternative of mirroring testsAndMisc's test block.
|
|
- Notebooks: `ruff` reads and formats `.ipynb` natively (cell-aware, so an
|
|
import used two cells later is not reported unused), which is why there is
|
|
no `nbqa` layer. It rewrites `source` only — outputs are left byte-identical.
|
|
Nothing strips outputs on commit yet; the four notebooks here were committed
|
|
with theirs. Real logic belongs in a sibling importable module — a notebook
|
|
cannot be covered.
|
|
|
|
### LaTeX
|
|
|
|
Build output is ignored, not committed: `.aux`, `.fls`, `.fdb_latexmk`,
|
|
`.xdv`, `-eps-converted-to.pdf` and friends. The submitted `.pdf` **is**
|
|
committed, because it is the deliverable.
|
|
|
|
### Shell
|
|
|
|
`set -euo pipefail`, quoted expansions, `main "$@"` last. Never embed another
|
|
language's logic inline — put it in its own file so that language's tooling
|
|
applies.
|
|
|
|
## Key Files
|
|
|
|
| Path | Why it matters |
|
|
|---|---|
|
|
| `gates/vendored.txt` | What is not my code, and how each entry was verified. |
|
|
| `gates/coverage.tsv` | Per-directory coverage floors. Floors may only rise. |
|
|
| `.binary-allowlist` | Path-scoped: deliverables allowed under the two course trees, compiled output allowed nowhere. |
|
|
| `DOCS-runnability.md` | Per-course run status, recorded separately for `local` and `ci`. |
|
|
| `TODO-*.md` | Open decisions. Each carries the removal marker and is deleted when the work lands. |
|