scistackplotdb 0.1.58__tar.gz → 0.1.60__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.
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/PKG-INFO +5 -5
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/load.py +18 -3
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/source.py +3 -3
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/.gitignore +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/README.md +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/pyproject.toml +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/__init__.py +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/_versioned.py +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/bundle_section.py +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/endpoint.py +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/hierarchy.py +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/presets.py +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/saved.py +0 -0
- {scistackplotdb-0.1.58 → scistackplotdb-0.1.60}/src/scistackplotdb/variants.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: scistackplotdb
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.60
|
|
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.
|
|
21
|
-
Requires-Dist: scistack-db==0.1.
|
|
22
|
-
Requires-Dist: scistacklog==0.1.
|
|
23
|
-
Requires-Dist: scistackplot==0.1.
|
|
20
|
+
Requires-Dist: sciduckdb==0.1.60
|
|
21
|
+
Requires-Dist: scistack-db==0.1.60
|
|
22
|
+
Requires-Dist: scistacklog==0.1.60
|
|
23
|
+
Requires-Dist: scistackplot==0.1.60
|
|
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 (
|
|
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,
|
|
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
|
|
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 (
|
|
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 (
|
|
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 (
|
|
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.
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|