hed-standard/hed-python: Release 1.0.0 March 27, 2026
Authors/Creators
- 1. UCSD, @sccn
- 2. Dartmouth College, @dandi, @Debian, @DataLad, @neurodebian, @PyMVPA, @fail2ban
- 3. CatalystNeuro
Description
This is a major release of hedtools with breaking changes. It removes several subsystems that have been moved to separate repositories, completes library schema extras support across all schema formats, and cleans up the public API in preparation for long-term stability.
⚠️ Breaking changes
Removed subsystems (now in separate packages)
| Removed from hedtools | New home |
|---|---|
| hed/tools/remodeling/ (dispatcher, operations, backup manager) and CLI entry points run_remodel, run_remodel_backup, run_remodel_restore | table-remodeler |
| hed/tools/visualization/ (TagWordCloud, word_cloud_util) and wordcloud dependency | hed-vis |
| hed/tools/analysis/sequence_map.py | hed-vis |
| ontology_util.py and create_ontology.py script | hed-ontology |
HED ID management is now handled by hed/schema/schema_io/hed_id_util.py.
API changes
HedLoggerremoved — use Python's standardloggingmodule instead.check_prereleaseparameter removed fromload_schema_version(),load_schema(),from_string(),from_dataframes(), and allSchemaLoadersubclasses. Prerelease schemas are found automatically when present in the local cache.ErrorReporter.check_warnings()renamed tocheck_for_warnings()for API consistency.versionnerdependency removed — version management is fully handled bysetuptools-scm.
Schema enhancements
Library schema extras fully supported across all formats
Extra (non-standard) sections in library schemas, marked with inLibrary, now round-trip correctly through all three schema file formats:
- XML:
inLibraryattribute written and read for all extra node types. - JSON/DataFrame:
in_librarycolumn propagated through all extra section tables. - MediaWiki:
inLibrarytags serialized and parsed in extra sections.
Comprehensive roundtrip test suites have been added for each format.
Consistent inLibrary / in_library naming
A naming inconsistency between the XML attribute name (inLibrary) and the internal DataFrame column name (in_library) has been resolved. All internal representations now use in_library; serialization to XML uses inLibrary as required by the schema specification.
Prerelease schemas found automatically
Prerelease schemas in the local cache are now loaded without any additional flags. A prerelease library schema with withStandard set may also load against its matching prerelease standard partner.
Auto-download missing schemas from GitHub
get_hed_version_path() now automatically fetches a schema from GitHub when the requested version is absent from the local cache.
Default schema version resolved dynamically
The default schema version is derived at runtime from the highest released version in the cache rather than being hardcoded. New schema releases no longer require a code change.
Other schema fixes
- CRLF/LF differences in schema files are normalized on read and write, preventing spurious diffs on Windows.
- Writing a schema to DataFrame format no longer fails when a section (e.g., unit modifiers) is empty.
- Schemas stored in older TSV formats that predate the current DataFrame layout now load correctly.
- Columns prefixed with
omn:that were written but never populated have been removed from the TSV/DataFrame schema format. - Schema-level errors and warnings are now distinguished more precisely;
check_for_warnings()returns only genuine warning-level issues. - Spec-test compliance checking now validates only the latest released version of each schema.
Bug fixes
- Fixed a race condition in schema-version auto-detection when multiple processes access the cache simultaneously.
- Fixed duplicate HED ID detection —
check_duplicate_hed_ids()now correctly tracks already-seen IDs across all schema sections. - Verified all built-in error messages are unique (no two distinct error codes share the same message text).
- Normalized error message punctuation: sentence-ending periods are followed by one space.
- Fixed extension capitalization check in schema attribute validation.
- Removed stray debug
printstatements from the schema loading path.
CI/CD and developer tooling
- Migrated to
uv— all CI workflows useastral-sh/setup-uvfor environment creation and package installation;pip-based setup and theblackformatter have been removed. - Updated GitHub Actions:
actions/checkoutv4 → v6;astral-sh/setup-uvv5 → v7; addedcache-dependency-globfor correct cache invalidation. - Replaced
codespellwithtypos— spell-check configuration is consolidated inpyproject.toml; the separate.codespellrcfile has been removed. - Added AI code review workflows —
claude_code_review.yamlposts inline review comments;claude_pr_assistant.yamlresponds to/reviewcommands in PR comments. Bot-authored PRs are excluded from automated review. - Added project context files —
.github/copilot-instructions.md,CLAUDE.md, and.rules/are now tracked in the repository. - Consolidated tool configuration —
lychee.tomlupdated for newer lychee releases;pyproject.tomlis the single source of truth for spell-check word lists; submodule directories excluded from ruff linting.
Migration guide
If you use any of the removed subsystems, install the replacement package before upgrading:
# If you used hed/tools/remodeling/:
pip install table-remodeler
# If you used TagWordCloud or sequence_map:
pip install hedvis
Replace ErrorReporter.check_warnings() calls with check_for_warnings(), and remove any check_prerelease=True arguments from schema-loading calls.
Replace any use of HedLogger with Python's standard logging module:
# Before
from hed.errors import HedLogger
logger = HedLogger()
# After
import logging
logger = logging.getLogger(__name__)
Full changelog: CHANGELOG.md
Files
hed-standard/hed-python-1.0.0.zip
Files
(2.9 MB)
| Name | Size | Download all |
|---|---|---|
|
md5:93d1a3b0a2be550881a87942deac1e44
|
2.9 MB | Preview Download |
Additional details
Related works
- Is supplement to
- Software: https://github.com/hed-standard/hed-python/tree/1.0.0 (URL)
Software
- Repository URL
- https://github.com/hed-standard/hed-python