mirror of
https://github.com/ARUP-CAS/aiscr-qgis-amcr-viewer.git
synced 2026-10-09 20:37:37 +02:00
* fix: váha prvku komponent počítaná z komponent prošlých filtrem (#55) Váha prvku_vaha = 1/n se dosud počítala ze všech komponent dokumentační jednotky ještě před filtrem na období a areál, takže při aktivním filtru váhy prvků jedné DJ nedávaly v součtu 1 (DJ se 4 komponentami, filtru vyhoví 1 → váha 0,25 místo 1). - nová funkce _component_entries: nejdřív vyfiltruje komponenty, pak přidělí váhu 1/n z těch, které prošly; DJ bez komponent má váhu 1 - smoke test vaha_komponent (4×0,25; 1 ze 4 → 1; 2 ze 3 → 2×0,5; bez komponent → 1) - README: pole prvek_vaha v tabulce atributů komponent - changelog v2.2.0 doplněn (bez povýšení verze) - OpenSpec změna openspec/changes/fix-component-feature-weight Ověřeno: živá data (Praha, novověk) – 0 z 1204 DJ se součtem vah ≠ 1, původní kód 921; check_sources, bandit, detect-secrets, flake8, ruff, pyqgis4-checker, smoke test v qgis/qgis:ltr i :stable. Implementace připravena AI (Claude, subagent), ověřena a zkontrolována. * openspec: archivovat fix-component-feature-weight (#55) Ruční test v QGIS ověřen správcem: akce i lokality s Načíst komponenty, bez filtru i s filtrem období – váhy prvků jedné DJ dávají součet 1 a počítají se jen z vyfiltrovaných komponent. Úkol 3.2 odškrtnut, změna archivována přes openspec archive --skip-specs. Připraveno s pomocí AI (Claude).
2.2 KiB
2.2 KiB
Context
load_amcr_data in amcr_viewer/amcr_tools.py (section B) builds, for each
DJ with a PIAN and Načíst komponenty on, one metadata dict per component
and appends it to pian_lookup[pian_id]. The weight is set as
'vaha': 1/komps_count with komps_count = len(komps) computed before
the loop that skips components failing komp_projde_filtrem. The empty-DJ
branch leaves vaha out and the feature builder falls back to
meta.get('vaha', 1).
Goals / Non-Goals
Goals: weights of one DJ sum to 1 under any filter; the rule is testable offline.
Non-Goals: weighting across DJs or across records that share one PIAN (a PIAN shared by several DJs still yields several features – the weight only de-duplicates components of one DJ, as #55 asked); changing the layer schema.
Decisions
- Filter first, then weigh. Build the list of passing components, then
set
vaha = 1/len(passing). Alternative – a second counting pass withsum(komp_projde_filtrem(...))– duplicates the filter call and drifts if the filter changes (#70 replaces it). - Extract a small pure helper (e.g.
_component_entries(dj_meta, komps, passes)returning the list of per-component dicts withvaha, wherepassesis a predicate) so the smoke test can check weights without QGIS layers or network. The helper must not depend on how components are selected, so #70 can pass a different predicate. - Explicit weight 1 for a DJ without components instead of relying on
the
meta.get('vaha', 1)default – the default stays as a safety net.
Risks / Trade-offs
- Floating-point: 1/3 weights sum to 0.999…; acceptable for analyses, test with a tolerance.
- The helper extraction touches a long function; keep the diff limited to the component branch.
Verification
- Smoke test cases: 4 components no filter → 4×0.25; filter keeps 1 of 4 → weight 1; keeps 2 of 3 → 2×0.5; no components → 1 entry, weight 1.
- Full AGENTS.md check set (ltr + stable smoke test, pyqgis4-checker).
- Manual QGIS test by the user: download akce with Načíst komponenty and
a period filter, check in the attribute table that
prvek_vahasums to 1 perdj_id.