scistackplotdb 0.1.58__tar.gz → 0.1.59__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: scistackplotdb
3
- Version: 0.1.58
3
+ Version: 0.1.59
4
4
  Summary: scidb-backed plotting: load variables into long tables and plot them with scistackplot
5
5
  Author: SciStack Contributors
6
6
  License-Expression: MIT
@@ -17,10 +17,10 @@ Classifier: Programming Language :: Python :: 3.13
17
17
  Classifier: Topic :: Scientific/Engineering :: Visualization
18
18
  Classifier: Typing :: Typed
19
19
  Requires-Python: >=3.10
20
- Requires-Dist: sciduckdb==0.1.58
21
- Requires-Dist: scistack-db==0.1.58
22
- Requires-Dist: scistacklog==0.1.58
23
- Requires-Dist: scistackplot==0.1.58
20
+ Requires-Dist: sciduckdb==0.1.59
21
+ Requires-Dist: scistack-db==0.1.59
22
+ Requires-Dist: scistacklog==0.1.59
23
+ Requires-Dist: scistackplot==0.1.59
24
24
  Provides-Extra: dev
25
25
  Requires-Dist: matplotlib>=3.6; extra == 'dev'
26
26
  Requires-Dist: pytest-cov>=4.0; extra == 'dev'
@@ -248,7 +248,7 @@ def is_container_type(data_type: str) -> bool:
248
248
 
249
249
  Why it is worth having at all: classifying by value means
250
250
  :func:`sample_column_value` pulls a whole EMG trace out of DuckDB per
251
- muscle, only to discard it. Measured on the user's project (scidb.log
251
+ muscle, only to discard it. Measured on the user's project (scistack.log
252
252
  2026-09-15), that was 4.2 s for ``FilteredDelsys`` and 5.4 s for ``RawEMG``
253
253
  — ~8 s added to every panel open, by two variables that offer no groupings
254
254
  at all.
@@ -686,7 +686,7 @@ def _log_field_coverage(
686
686
  per field, when fewer than :data:`SPARSE_FIELD_SHARE` of its records hold
687
687
  one — naming the levels those records sit at, because a plot of such a
688
688
  field shows only them and reads as a broken grouping ("Dist_m showed one
689
- group/one subject": 6 of 714 records held a number, scidb.log
689
+ group/one subject": 6 of 714 records held a number, scistack.log
690
690
  2026-10-15). The plot is right; the data is what to look at.
691
691
 
692
692
  Never raises: a diagnostic must not break a load.
@@ -727,6 +727,21 @@ def _log_field_coverage(
727
727
  f", at {located}" if c.numeric and located else "",
728
728
  layer=LAYER,
729
729
  )
730
+ # The same finding, once, in the scientist's journal: it is about
731
+ # their data, but the WARNs above repeat on every load (171 of them in
732
+ # one session's log, 2026-10-22). One note per variable and set of
733
+ # columns per session; a different set is a new finding.
734
+ sparse = [c for c in gaps if c.numeric < SPARSE_FIELD_SHARE * c.records]
735
+ if sparse:
736
+ names = sorted(str(c.column) for c in sparse)
737
+ shown = ", ".join(names[:6]) + (f", +{len(names) - 6} more" if len(names) > 6 else "")
738
+ Log.journal_note(
739
+ f"{variable}: {len(names)} column(s) hold numbers in only some of "
740
+ f"their records ({shown}); a plot of them shows only those records. "
741
+ f"If they hold text, that is expected; if they should be numbers, "
742
+ f"check what the loading function returned.",
743
+ key=f"field_coverage:{variable}:{'|'.join(names)}",
744
+ )
730
745
  except Exception as exc: # noqa: BLE001 — diagnostic only
731
746
  Log.debug("field coverage of %s failed: %s", variable, exc, layer=LAYER)
732
747
 
@@ -1016,7 +1031,7 @@ def attach_variants(
1016
1031
  "%d of %d record(s) are superseded but carry NO code or "
1017
1032
  "run-option axis to tell them apart — plotting the current "
1018
1033
  "ones only. This usually means their lineage was not recorded; "
1019
- "check scidb.log for 'NO variable input-binding source'",
1034
+ "check scistack.log for 'NO variable input-binding source'",
1020
1035
  n_superseded,
1021
1036
  len(record_ids),
1022
1037
  layer=LAYER,
@@ -1019,7 +1019,7 @@ class ScidbSource(BaseSource):
1019
1019
  if ambiguous:
1020
1020
  # Name what was discarded. When every ambiguous location holds
1021
1021
  # the SAME set of labels, the grouping variable is almost
1022
- # certainly one whole table saved at every location (scidb.log
1022
+ # certainly one whole table saved at every location (scistack.log
1023
1023
  # run n1irqety, 2026-09-29: the demographics CSV read once per
1024
1024
  # subject, so every subject "was" the first row, Digitimer).
1025
1025
  values = right.groupby(on, dropna=False)[factor].agg(
@@ -1630,7 +1630,7 @@ class ScidbSource(BaseSource):
1630
1630
  expensive question, asked once per click by :meth:`groupable_columns`.
1631
1631
 
1632
1632
  Why the split. Answering both together cost ~8 s on every panel open of
1633
- the user's project (scidb.log 2026-09-15): `FilteredDelsys` 4.2 s and
1633
+ the user's project (scistack.log 2026-09-15): `FilteredDelsys` 4.2 s and
1634
1634
  `RawEMG` 5.4 s, both offering nothing, because classifying a column
1635
1635
  meant fetching one of its EMG traces. Stage 4 made *that* cheap; this
1636
1636
  makes the per-column work happen only when someone asks for a specific
@@ -1879,7 +1879,7 @@ class ScidbSource(BaseSource):
1879
1879
  **Container-typed columns are refused from the schema alone**, before
1880
1880
  any value is read. Classifying them by value meant one whole EMG trace
1881
1881
  fetched per muscle and thrown away: 4.2 s for ``FilteredDelsys`` and
1882
- 5.4 s for ``RawEMG`` on the user's project (scidb.log 2026-09-15), ~8 s
1882
+ 5.4 s for ``RawEMG`` on the user's project (scistack.log 2026-09-15), ~8 s
1883
1883
  added to every panel open by two variables that offer nothing. The type
1884
1884
  check only ever REFUSES — see :func:`~scistackplotdb.load.
1885
1885
  is_container_type` for why that asymmetry is what keeps it safe.