"""Validate the optional headless schedule plot renderer without test-only imports.""" from __future__ import annotations import importlib.metadata import json from comfyui_sigmax.core import ( ArtifactBuildMetadata, ArtifactField, BaseGridSpec, EvidenceLevel, Provenance, ScheduleArtifact, ScheduleInputs, ScheduleOwnership, ScheduleRequest, ScheduleResult, SigmaDomain, SliceSpec, TerminalPolicy, TransformContract, TransformStage, TypedArtifactValue, build_schedule_artifact, build_schedule_comparison_report, build_schedule_report, serialize_schedule_comparison_report, serialize_schedule_report, ) from comfyui_sigmax.plotting import ( render_schedule_comparison_plot, render_schedule_plot, ) def _artifact(sigmas: tuple[float, ...]) -> ScheduleArtifact: steps = len(sigmas) - 1 request = ScheduleRequest( ownership=ScheduleOwnership.EXTERNAL_SIGMAS, requested_inputs=ScheduleInputs(steps=steps, width=1024, height=768), sigma_domain=SigmaDomain.UNIT_FLOW, provenance=Provenance( engine_version="0.1.0.dev0", evidence=EvidenceLevel.EXPERIMENTAL, source="plot-validation", source_revision="m7-01", profile_id="fixture.plot-validation", profile_version="1", ), base_grid=BaseGridSpec( identifier="fixture.plot-grid", output_domain=SigmaDomain.UNIT_FLOW, ), transforms=( TransformContract( name="fixture.plot-shift", stage=TransformStage.PRIMARY_TIME_SHIFT, input_domain=SigmaDomain.UNIT_FLOW, output_domain=SigmaDomain.UNIT_FLOW, ), ), terminal_policy=TerminalPolicy.APPEND_ZERO, slicing=SliceSpec(start_step=0, end_step=steps, denoise=1.0), ) result = ScheduleResult( request=request, effective_inputs=ScheduleInputs(steps=steps, width=1024, height=768), sigmas=sigmas, final_domain=SigmaDomain.UNIT_FLOW, ) return build_schedule_artifact( result, metadata=ArtifactBuildMetadata( source_id="fixture.schedule-plot-validation", source_label="Schedule plot validation", base_grid_parameters=(ArtifactField(name="points", value=steps),), transform_parameters=( ( ArtifactField( name="mu", value=TypedArtifactValue(value=1.15, precision="float64"), ), ), ), compatibility=(ArtifactField(name="decision", value="allow"),), ), precision="float64", ) def build_validation_summary() -> dict[str, object]: """Render both supported formats and prove the source reports remain immutable.""" report = build_schedule_report(_artifact((1.0, 0.75, 0.5, 0.25, 0.0))) comparison = build_schedule_comparison_report( report, build_schedule_report(_artifact((1.0, 0.5, 0.375, 0.125, 0.0))), ) report_bytes = serialize_schedule_report(report) comparison_bytes = serialize_schedule_comparison_report(comparison) rendered: dict[str, bytes] = {} for image_format in ("png", "svg"): rendered[f"schedule_{image_format}"] = render_schedule_plot( report, image_format=image_format, ) rendered[f"comparison_{image_format}"] = render_schedule_comparison_plot( comparison, image_format=image_format, ) if not rendered["schedule_png"].startswith(b"\x89PNG\r\n\x1a\n"): raise RuntimeError("schedule PNG signature is invalid") if not rendered["comparison_png"].startswith(b"\x89PNG\r\n\x1a\n"): raise RuntimeError("comparison PNG signature is invalid") if not rendered["schedule_svg"].startswith(b" int: print( json.dumps( build_validation_summary(), ensure_ascii=False, allow_nan=False, separators=(",", ":"), sort_keys=True, ) ) return 0 if __name__ == "__main__": raise SystemExit(main())