Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
285ae8a
Add backend-agnostic spool index prototype (#648)
d-chambers Jul 4, 2026
54627d5
Wire database index into DirectorySpool
d-chambers Jul 4, 2026
5f9b45a
Batch IN-clause parameters in source deletion
d-chambers Jul 4, 2026
6a2ba9c
Add randomized heterogeneity stress test; fix two bugs it caught
d-chambers Jul 4, 2026
5d180a9
Remove PyTables index and the tables dependency
d-chambers Jul 4, 2026
2612c95
Deduplicate coordinate summaries by fingerprint
d-chambers Jul 4, 2026
5c4d39f
Add per-coord envelope columns to the flat relation
d-chambers Jul 4, 2026
2fa944b
Make source identity (base_uri, source_path) in the write path
d-chambers Jul 4, 2026
1e0a24c
Add PatchCatalog: unified metadata engine over the index
d-chambers Jul 5, 2026
374ee4c
Run MemorySpool on the PatchCatalog
d-chambers Jul 5, 2026
df628b6
Implement selector-spec select for all spools (hard break for 0.2)
d-chambers Jul 5, 2026
1eab358
Simplify: shared relative_offset helper, dead code removal
d-chambers Jul 5, 2026
9df68b6
Reuse cached patch summaries in catalog ingest
d-chambers Jul 5, 2026
8929f71
Remove DuckDB/Parquet index backends; fix selection and resolver bugs
d-chambers Jul 11, 2026
8cf0f04
Trim redundant schema indexes; use semi-join for coord predicates
d-chambers Jul 11, 2026
803fada
Vectorize coord envelope pivot in flat-relation realization
d-chambers Jul 11, 2026
2ff2faa
Fetch nullable integer columns exactly; reject float ns input
d-chambers Jul 11, 2026
a555ad9
Normalize NaN source_patch_id in resolvers
d-chambers Jul 11, 2026
2e18b80
Add groupby_attrs config field
d-chambers Jul 11, 2026
d7db65f
Add sampling_group_tolerance config field
d-chambers Jul 11, 2026
a44662b
Add chunk planner over the flat relation
d-chambers Jul 11, 2026
28ac4a5
Cut spool.chunk over to the plan-based machinery; remove ChunkManager
d-chambers Jul 11, 2026
37218bf
Add spool union: spool + spool combines catalogs
d-chambers Jul 11, 2026
de587a2
Give patches a lineage identity; make the live registry the store
d-chambers Jul 11, 2026
d3bfec1
Add spool.chunk_plan for inspecting chunk operations
d-chambers Jul 11, 2026
85041f1
Document spool internals with executable notes; refresh stale scope
d-chambers Jul 11, 2026
2149965
Apply cleanup review: dedupe helpers, polymorphic union dispatch, tri…
d-chambers Jul 11, 2026
456500e
Remove dead PyTables-era config fields and stale references
d-chambers Jul 11, 2026
f2f4f57
Make pre-commit --all-files clean
d-chambers Jul 11, 2026
fa95782
Resolve envelope-column ownership by full name, not first underscore
d-chambers Jul 11, 2026
347fe1a
Keep patch identity deterministic and the live store in step with rem…
d-chambers Jul 11, 2026
84e4353
Close SQLite connections on GC; bypass legacy index-map entries
d-chambers Jul 11, 2026
b5a0174
Define the reserved-attr contract for the flat relation
d-chambers Jul 11, 2026
0448b75
Make directory spools picklable; process-backed map works again
d-chambers Jul 11, 2026
aaf45fd
Canonicalize unit-bearing coordinate selection end to end
d-chambers Jul 11, 2026
e62d29d
Keep selection construction lazy; adopt catalog without realization
d-chambers Jul 11, 2026
9d7dee6
Canonicalize all coordinate selector shapes; reject scalar/membership
d-chambers Jul 11, 2026
e05caf9
Make SQLite backend cleanup safe under cross-thread collection
d-chambers Jul 11, 2026
5f7ceb6
Reserve coordinate-envelope attr names catalog-wide
d-chambers Jul 11, 2026
177ad09
Count patches in SQL instead of realizing the flat relation
d-chambers Jul 11, 2026
42e64a4
Push selected-membership export into SQL
d-chambers Jul 11, 2026
19c8fe4
Flatten dynamic attrs in one grouped pass
d-chambers Jul 11, 2026
1b8d984
Delete sources via FK cascade; stream executemany params
d-chambers Jul 11, 2026
f720c8a
Narrow incremental-update change detection to stat columns
d-chambers Jul 11, 2026
c71c8bc
Move relative-select helpers to utils.pd
d-chambers Jul 11, 2026
199deb6
Relocate backend-independent helpers out of the IO index package
d-chambers Jul 11, 2026
808c377
Centralize source-patch-id normalization
d-chambers Jul 11, 2026
10aa5a7
Read each catalog row's patch through a single dc.read
d-chambers Jul 11, 2026
8b8ff4a
Let FileResolver own directory path resolution
d-chambers Jul 11, 2026
219a72f
Share one directory-format scan-unit definition
d-chambers Jul 11, 2026
2d744d4
Document spool set-semantics contract; fix stale identity note
d-chambers Jul 11, 2026
53f6acb
Compute each coord's unit string once during ingest
d-chambers Jul 11, 2026
ac54b58
Document and centralize the spool catalog/materialized state model
d-chambers Jul 11, 2026
211dccc
Remove dead _CanonicalRange dunders; cover new-code branches
d-chambers Jul 11, 2026
efebfc2
Fix scanless-format spool bug; reach 100% coverage on the branch
d-chambers Jul 11, 2026
03e1b95
Fix tutorial doc code for the new selector and flat-relation contract
d-chambers Jul 11, 2026
9c875e9
Store index source paths as POSIX-relative (Windows path fix)
d-chambers Jul 11, 2026
4fcea0b
Normalize index paths to POSIX and release SQLite handles for Windows
d-chambers Jul 11, 2026
afc1ad6
Keep the OS-native key for stat lookup while storing POSIX paths
d-chambers Jul 11, 2026
0d33f54
Address review: union leak, empty-spool repr, path robustness
d-chambers Jul 12, 2026
4387ed6
Address review round 2: probe cleanup, time-less repr, chunk assert
d-chambers Jul 12, 2026
14e8eed
Clean up residual spool refactor paths
d-chambers Jul 14, 2026
fc1370d
Delay Codecov reporting until eight uploads
d-chambers Jul 14, 2026
4ea086e
Address CodeRabbit index review
d-chambers Jul 14, 2026
78bf8bb
Strengthen restricted index update test
d-chambers Jul 14, 2026
d4162f9
Publish Codecov after seven uploads
d-chambers Jul 14, 2026
c0a558d
Address remaining CodeRabbit findings
d-chambers Jul 14, 2026
5373df2
Cover index marker rollback
d-chambers Jul 14, 2026
ef6b44d
Reduce redundancy in index backend and query layer
d-chambers Jul 14, 2026
a2cda01
Consolidate shared index helpers and spool select plumbing
d-chambers Jul 14, 2026
67ad515
Cover unsupported non-null coord dtype in _coord_record
d-chambers Jul 14, 2026
4124601
Trim redundancy from the index package
d-chambers Jul 16, 2026
65ee5b1
Restore the indexer's documented get_contents
d-chambers Jul 16, 2026
4779fcc
Share one selector-name resolver between both select paths
d-chambers Jul 16, 2026
15eec34
Add select-path parity net and make catalog adoption explicit
d-chambers Jul 17, 2026
a14b395
Give the catalog an explicit ordering contract via source ordinals
d-chambers Jul 17, 2026
329afd4
Collapse spool live-patch storage into the catalog registry
d-chambers Jul 17, 2026
958917a
Represent restructured spools as an explicit derived-relation view
d-chambers Jul 17, 2026
017e806
Collapse the spool hierarchy into one catalog-backed Spool
d-chambers Jul 17, 2026
410c2f1
Document the ordering contract and unified spool in the notes
d-chambers Jul 17, 2026
d119a4f
Finish the spool unification: one selection home, enumerated equality…
d-chambers Jul 17, 2026
30b5b8e
Restore full coverage after the unification refactors
d-chambers Jul 17, 2026
841ef78
Close the tampering connection so Windows can rebuild the test index
d-chambers Jul 17, 2026
fb6a19b
Let pytest own the diverse spool directory's lifetime
d-chambers Jul 17, 2026
6ab3c06
Cover the last unification fallout outside the audited modules
d-chambers Jul 17, 2026
9b9867a
Merge union transfer records per source identity
d-chambers Jul 17, 2026
f8858e6
Serialize views by membership and document the spool migration
d-chambers Jul 17, 2026
1fbf957
Make selection dimension-bearing and sort/slice lazy catalog specs
d-chambers Jul 17, 2026
a6c45a0
Make restructured spools derived catalogs; one engine for everything
d-chambers Jul 18, 2026
2066e98
Close the review coverage: tests for every surviving branch, dead cod…
d-chambers Jul 18, 2026
5c4270e
Fix the third-round review findings: unions keep contents, catalogs k…
d-chambers Jul 18, 2026
d04f3e9
Partition chunks by the chunked dim's units; convert compatible spell…
d-chambers Jul 18, 2026
43b4016
Fix the fourth-round review findings: chained chunking, time-true dir…
d-chambers Jul 18, 2026
8d0ba2c
Define chunking on dimensions only
d-chambers Jul 18, 2026
5ca467d
Carry directory time order through unions; sort missing values last
d-chambers Jul 18, 2026
9707f17
Compare spools by effective contents; resolve negative samples indices
d-chambers Jul 18, 2026
e9a873c
Bring the spool notes up to date with the review-round semantics
d-chambers Jul 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions codecov.yml
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
codecov:
notify:
after_n_builds: 7

comment:
after_n_builds: 7

flags:
unittests:
carryforward: false
Expand Down
2 changes: 1 addition & 1 deletion dascore/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
from dascore.core.patch import Patch
from dascore.core.attrs import PatchAttrs
from dascore.core.summary import PatchSummary
from dascore.core.spool import BaseSpool, spool
from dascore.core.spool import BaseSpool, Spool, spool
from dascore.core.coordmanager import get_coord_manager, CoordManager
from dascore.core.coords import get_coord
from dascore.config import DascoreConfig, get_config, reset_config, set_config
Expand Down
4 changes: 0 additions & 4 deletions dascore/clients/__init__.py

This file was deleted.

176 changes: 0 additions & 176 deletions dascore/clients/dirspool.py

This file was deleted.

84 changes: 0 additions & 84 deletions dascore/clients/filespool.py

This file was deleted.

42 changes: 28 additions & 14 deletions dascore/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,34 @@ class DascoreConfig(BaseModel):
default="standard",
description="Controls whether DASCore appends processing history to patches.",
)
sampling_group_tolerance: float = Field(
default=0.05,
gt=0,
description=(
"Relative sampling-interval difference above which patches are "
"never combined during chunk/merge operations. E.g. the default "
"0.05 keeps patches whose steps differ by more than 5% in "
"separate groups."
),
)
groupby_attrs: tuple[str, ...] = Field(
default=(
"network",
"station",
"data_type",
"data_category",
"tag",
"instrument_id",
"acquisition_id",
),
description=(
"Attributes which partition patches into separate groups for "
"chunk/merge operations. Patches whose values differ on any of "
"these are never combined (no error); the per-call `group` "
"argument overrides this default. Names missing from a spool "
"are ignored."
),
)

# Local cache and index locations.
downloader_cache_dir: Path = Field(
Expand All @@ -66,20 +94,6 @@ class DascoreConfig(BaseModel):
description="Time buffer applied when querying cached directory indexes.",
)

# HDF index writing.
hdf_index_complib: str = Field(
default="blosc:lz4",
description="Compression library used when writing DASCore HDF index files.",
)
hdf_index_complevel: int = Field(
default=5,
description="Compression level used when writing DASCore HDF index files.",
)
hdf_index_max_retries: int = Field(
default=3,
description="Maximum number of retries for concurrent HDF index access.",
)

# Progress display.
progress_basic_refresh_per_second: float = Field(
default=0.25,
Expand Down
4 changes: 2 additions & 2 deletions dascore/core/coords.py
Original file line number Diff line number Diff line change
Expand Up @@ -1600,8 +1600,8 @@ def select(
return self.empty(), out
if np.all(out):
return self, slice(None, None)
# Convert boolean to int indexes because these are supported for
# indexing pytables arrays but booleans are not.
# Convert boolean to int indexes; some consumers (eg lazy file
# readers) index with these where booleans are not supported.
if len(self.shape) == 1:
out = np.arange(len(out))[out]
return self.new(values=values[out]), out
Expand Down
4 changes: 4 additions & 0 deletions dascore/core/patch.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
from collections.abc import Mapping, Sequence
from functools import cached_property
from typing import Final
from uuid import uuid4

import numpy as np
from rich.text import Text
Expand Down Expand Up @@ -99,6 +100,9 @@ def __init__(
self._coords = coords
self._attrs = attrs
self._data = array(self.coords.validate_data(data))
# Lineage identity: minted eagerly so copies made at any point
# (deepcopy/pickle carry __dict__) share it deterministically.
self._instance_id = uuid4().hex

def __eq__(self, other):
"""Compare one Patch."""
Expand Down
Loading
Loading