Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
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
2 changes: 1 addition & 1 deletion benchmark/pipelines/cellprofiler_nuclei.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@

from openhcs.core.memory.decorators import numpy as numpy_func
from openhcs.core.pipeline.function_contracts import artifact_outputs
from openhcs.processing.materialization import csv_materializer
from openhcs.core.materialization import csv_materializer
from openhcs.processing.backends.analysis.cell_counting_cpu import (
materialize_segmentation_masks,
)
Expand Down
2 changes: 1 addition & 1 deletion benchmark/pipelines/cellprofiler_nuclei_cupy.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

from openhcs.core.memory.decorators import cupy as cupy_func
from openhcs.core.pipeline.function_contracts import artifact_outputs
from openhcs.processing.materialization import csv_materializer
from openhcs.core.materialization import csv_materializer
from openhcs.processing.backends.analysis.cell_counting_cpu import (
materialize_segmentation_masks,
)
Expand Down
2 changes: 1 addition & 1 deletion benchmark/pipelines/cellprofiler_nuclei_gpu.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@

from openhcs.core.memory.decorators import pyclesperanto as pyclesperanto_func
from openhcs.core.pipeline.function_contracts import artifact_outputs
from openhcs.processing.materialization import csv_materializer
from openhcs.core.materialization import csv_materializer
from openhcs.processing.backends.analysis.cell_counting_cpu import (
materialize_segmentation_masks,
)
Expand Down
34 changes: 10 additions & 24 deletions benchmark/validation/corpus.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,11 @@
import shutil
import zipfile
import zlib
from dataclasses import asdict, dataclass, is_dataclass
from dataclasses import dataclass
from datetime import UTC, datetime
from enum import Enum
from pathlib import Path
from typing import Any

from python_introspect import to_jsonable

from benchmark.contracts.dataset import DatasetSpec
from benchmark.contracts.validation import (
Expand Down Expand Up @@ -185,10 +185,10 @@ def prepare(
"source_root": str(source_root),
"raw_root": str(raw_root),
"artifacts": [
_json_value(artifact) for artifact in validation.artifacts
to_jsonable(artifact) for artifact in validation.artifacts
],
"repository_sources": [
_json_value(source) for source in validation.repository_sources
to_jsonable(source) for source in validation.repository_sources
],
"reference_decoder": {
"url": validation.reference_decoder_url,
Expand All @@ -197,7 +197,7 @@ def prepare(
"partition_counts": _partition_counts(records),
"input_plane_count": len(records),
"reference_count": len(references),
"trial_split": _json_value(validation.trial_split),
"trial_split": to_jsonable(validation.trial_split),
"development": {
"source_set_count": len(
{record.source_set_id for record in development_records}
Expand Down Expand Up @@ -243,13 +243,13 @@ def prepare(
},
},
"authoring_tracks": [
_json_value(track) for track in validation.authoring_tracks
to_jsonable(track) for track in validation.authoring_tracks
],
"published_assay_references": [
_json_value(reference)
to_jsonable(reference)
for reference in validation.published_assay_references
],
"dsl_contract": _json_value(dsl_contract),
"dsl_contract": to_jsonable(dsl_contract),
"blindness_boundary": (
"Only authoring/ is supplied before pipeline freeze. "
"frozen_execution/ is disclosed after freeze for unchanged "
Expand Down Expand Up @@ -758,7 +758,7 @@ def freeze_pipeline(
f"Pipeline is already frozen for this corpus: {receipt_path}"
)
receipt_path.write_text(
json.dumps(_json_value(receipt), indent=2, sort_keys=True) + "\n",
json.dumps(to_jsonable(receipt), indent=2, sort_keys=True) + "\n",
encoding="utf-8",
)
return receipt
Expand Down Expand Up @@ -876,17 +876,3 @@ def _partition_counts(
for record in records:
counts[record.partition.value] = counts.get(record.partition.value, 0) + 1
return counts


def _json_value(value: Any) -> Any:
if is_dataclass(value) and not isinstance(value, type):
return {key: _json_value(item) for key, item in asdict(value).items()}
if isinstance(value, Enum):
return value.value
if isinstance(value, Path):
return str(value)
if isinstance(value, dict):
return {str(key): _json_value(item) for key, item in value.items()}
if isinstance(value, (tuple, list)):
return [_json_value(item) for item in value]
return value
4 changes: 2 additions & 2 deletions docs/audits/architecture_a_m.json
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@
"role": "Executes a native plate with separate analysis destinations and verifies per-directory and merged output summaries without writing a summary into the input plate."
},
{
"path": "openhcs/processing/materialization/core.py",
"path": "openhcs/core/materialization/core.py",
"sha256": "1f5a89a1eb50766ef093df3fece16d6bb03422b92d062fe8ae6471656b1ebd45",
"role": "Owns writer runtime-path selection before rendering and the shared ROI target request."
}
Expand All @@ -209,7 +209,7 @@
"On 2026-09-08, re-read the full explanation and documented per-directory storage ownership and output-root global consolidation. The native multi-directory regression passes, and a GUI/MCP POST pilot consolidated all three analysis directories and their merged summary successfully.",
"2026-09-09: Re-read this page against the changed source authorities for release 0.8.3; retained its Diataxis purpose and updated affected workflow claims.",
"2026-09-16: Re-read the complete page against the projected-ROI filename-identity change. Consolidation still selects paths through the shared target request and does not own source-identity projection; 249 focused materialization and adjacent runtime tests passed.",
"2026-09-22 PR #126 targeted authority-delta review: re-read the complete page against `openhcs/core/config.py`, `tests/unit/test_orchestrator_lane_planning.py`, `openhcs/processing/materialization/core.py`; retained the supported claims, findings, and disposition, then refreshed only these compared evidence hashes. Review scope and the separate blocking runtime evidence are recorded in `docs/audits/pr126_authority_delta_review_20260922.md`.",
"2026-09-22 PR #126 targeted authority-delta review: re-read the complete page against `openhcs/core/config.py`, `tests/unit/test_orchestrator_lane_planning.py`, `openhcs/core/materialization/core.py`; retained the supported claims, findings, and disposition, then refreshed only these compared evidence hashes. Review scope and the separate blocking runtime evidence are recorded in `docs/audits/pr126_authority_delta_review_20260922.md`.",
"2026-09-22 PR #126 integrated-repair follow-up: re-read the complete page and the final owner/test changes in `tests/unit/test_function_artifact_materialization.py`. The runtime-observation materialization path now applies the same nominal image reducer as ordinary materialization, preserving exact source-address ownership for consolidation and rejecting conflicting duplicate payloads; the documented no-rescan and typed-record boundary remains accurate. Refreshed only these compared evidence hashes; details are retained in `docs/audits/pr126_authority_delta_review_20260922.md`."
]
},
Expand Down
4 changes: 2 additions & 2 deletions docs/audits/architecture_n_z_development.json
Original file line number Diff line number Diff line change
Expand Up @@ -1019,7 +1019,7 @@
"role": "Native Napari Shapes-layer ROI manager projection and selection behaviour."
},
{
"path": "openhcs/processing/materialization/core.py",
"path": "openhcs/core/materialization/core.py",
"sha256": "1f5a89a1eb50766ef093df3fece16d6bb03422b92d062fe8ae6471656b1ebd45",
"role": "Nominal artifact materialisation and ROI projection strategies."
},
Expand All @@ -1043,7 +1043,7 @@
"On 2026-08-24, rechecked the explanation after every text-emitting writer adopted the nominal text output declaration; ROI ownership remains unchanged.",
"2026-09-09: Re-read this page against the changed source authorities for release 0.8.3; retained its Diataxis purpose and updated affected workflow claims.",
"2026-09-16: Re-read the complete explanation against projected ROI filename resolution. Documented that complete record identity fills only missing filename coordinates while collapsed semantic axes remain absent; 249 focused materialization and adjacent runtime tests passed.",
"2026-09-22 PR #126 targeted authority-delta review: re-read the complete page against `openhcs/processing/materialization/core.py`; retained the supported claims, findings, and disposition, then refreshed only these compared evidence hashes. Review scope and the separate blocking runtime evidence are recorded in `docs/audits/pr126_authority_delta_review_20260922.md`."
"2026-09-22 PR #126 targeted authority-delta review: re-read the complete page against `openhcs/core/materialization/core.py`; retained the supported claims, findings, and disposition, then refreshed only these compared evidence hashes. Review scope and the separate blocking runtime evidence are recorded in `docs/audits/pr126_authority_delta_review_20260922.md`."
]
},
{
Expand Down
Loading
Loading