|
1 | | -# Unreleased |
| 1 | +# Release 1.1.0 April 19, 2026 |
2 | 2 |
|
3 | 3 | ## New features |
4 | 4 |
|
| 5 | +### Search engine performance improvements |
| 6 | + |
| 7 | +`ExpressionAnd`, `ExpressionOr`, and `ExpressionNegation` in `query_expressions.py` now use set-based deduplication instead of O(n²) list scanning, giving a significant speedup for queries that produce many intermediate results. Supporting this, `SearchResult` gains `__eq__` and `__hash__` methods so instances can be stored in sets and dicts. `QueryHandler._expr_has_wildcard()` replaces the fragile `"?" in str(interior)` string check with a proper recursive AST walk, eliminating false positives on queries whose string representations happen to contain a literal `?`. |
| 8 | + |
| 9 | +### `StringQueryHandler` and `schema_lookup` (internal / experimental) |
| 10 | + |
| 11 | +Two new internal modules support schema-free HED search: |
| 12 | + |
| 13 | +- `hed/models/string_search.py` — `StringQueryHandler` subclasses `QueryHandler` and accepts a raw HED string instead of a parsed `HedString`, enabling query evaluation without loading a schema. `StringNode` duck-types `HedGroup`/`HedTag` so that existing `Expression` subclasses evaluate against it without modification. |
| 14 | +- `hed/models/schema_lookup.py` — `generate_schema_lookup(schema)` builds a compact `{short_tag: tag_terms}` dict from a loaded schema that can be passed to `StringQueryHandler.search()` to enable ancestor-aware matching on short-form strings. `save_schema_lookup()` / `load_schema_lookup()` persist the table as JSON for offline use. |
| 15 | + |
| 16 | +These modules are not part of the public API and may change in future releases. |
| 17 | + |
| 18 | +### `HedGroup` find-method documentation clarified |
| 19 | + |
| 20 | +Docstrings for `find_tags`, `find_wildcard_tags`, `find_exact_tags`, and `find_tags_with_term` now document the exact comparison property each method uses (`short_base_tag`, `short_tag`, `HedTag.__eq__`, and `tag_terms` respectively) and explain the rationale for that choice. |
| 21 | + |
| 22 | +### Search benchmarks |
| 23 | + |
| 24 | +A new `benchmarks/` directory provides reproducible performance benchmarking tools: `search_benchmark.py` measures throughput across query types and string sizes, `data_generator.py` synthesizes realistic HED strings, and `report.py` generates Markdown and PNG reports. Pre-computed results are stored under `benchmarks/results/` and benchmark figures under `docs/_static/images/`. |
| 25 | + |
| 26 | +### Search documentation |
| 27 | + |
| 28 | +A new `docs/search_details.md` page covers all three HED search implementations (`basic_search`, `QueryHandler`, and `StringQueryHandler`): design trade-offs, query language reference, and measured performance characteristics with benchmark figures. |
| 29 | + |
5 | 30 | ### Pandas 3.0 compatibility |
6 | 31 |
|
7 | 32 | All pandas 3.0 breaking changes have been addressed, and the pandas version constraint in `pyproject.toml` has been updated from `<3.0.0` to `<4.0.0`: |
@@ -36,7 +61,10 @@ hedpy extract bids-sidecar /path/to/dataset --filter sub-01 |
36 | 61 | ## CI/CD |
37 | 62 |
|
38 | 63 | - Bumped `actions/configure-pages` from 5 to 6. |
39 | | -- Updated `spec_tests/hed-tests` submodule. |
| 64 | +- Bumped `astral-sh/setup-uv` from v7 to v8.0.0. |
| 65 | +- Updated `anthropics/claude-code-action` to v1.0.97. |
| 66 | +- Pinned all GitHub Actions steps to full SHA hashes for supply-chain security. |
| 67 | +- Updated `spec_tests/hed-examples`, `spec_tests/hed-schemas`, and `spec_tests/hed-tests` submodules. |
40 | 68 |
|
41 | 69 | # Release 1.0.0 March 27, 2026 |
42 | 70 |
|
|
0 commit comments