API Stability Policy#
For a compact user-facing map of stable PDE surfaces, workflows, and selected runtime helpers, see docs/specs/SUPPORT_MATRIX.md.
Stable API (v0.x)#
FieldBatch
DerivativeBatch
DerivativeBatch.backend="spectral_fd"ResidualBatch
ResidualEvaluator
GeneratorFamily (polynomial only; canonical
v0.4family semantics with explicitbasis_spec)InvariantMapSpec (single-generator only)
VerificationReport
basic verification tools
typed validation errors (
PDELieValidationError,SchemaValidationError,ShapeValidationError,ScopeValidationError)
Stable GeneratorFamily note:
canonical
v0.4output usesschema_version = "0.2"and family-shaped 2D coefficientsdirect construction is canonical-only and requires explicit
basis_speclegacy
0.1single-generator translation payloads are a narrowfrom_dict()compatibility path only
Stable public import path for the invariant canonical object:
pdelie.InvariantMapSpec
Stable public-surface note for the v0.31.0 release close:
v0.31.0closes the downstream discovery task bridge as a submodule-only stable surface. No rootpdelieexport is added.Frozen public submodule names for v0.31.0:
pdelie.tasks.run_pysindy_pde_task— periodic scalar 1D PySINDyPDELibrarysparse-discovery task runner. Returns a strict-JSONdiscovery_task_result(summary_type = "discovery_task_result", 22-key composed schema,pysindy_bridge_variant = "periodic_only_v1").pdelie.tasks.summarize_discovery_task_result— strict-JSON payload assembler for the discovery task result.pdelie.tasks.PySINDyDiscoveryUnsupportedBoundaryError— layer-1 BC guard exception (subclass ofScopeValidationError).pdelie.tasks.inspect_pysindy_weak_pde_library— diagnostic-only wrapper around PySINDy’sWeakPDELibrary. Returns a strict-JSONpdelie_weak_pde_library_diagnostic(summary_type = "pdelie_weak_pde_library_diagnostic", 27-key composed schema,diagnostic_only = True,method_family = "pysindy_weak_pde_library_polynomial_gauss_v1").pdelie.tasks.summarize_pysindy_weak_pde_library_diagnostic— strict-JSON payload assembler for the diagnostic.pdelie.tasks.WeakPDELibraryDiagnostic— caller-declared JSON-safe library-configuration dataclass withas_dict().pdelie.examples.run_downstream_discovery_task_bridge_example()and the CLIpython -m pdelie.examples.downstream_discovery_task_bridge— composed JSON-only demonstration wrapper (summary_type = "downstream_discovery_task_bridge_example", 7-key wrapper; not a new report schema).
Compatibility boundaries encoded in
pyproject.toml:pysindy>=1.7.5,<2andscikit-learn>=1.2.2,<1.3underpython_version < '3.12'; temporarysetuptools<82; python_version < '3.12'cap because PySINDy 1.7.5 importspkg_resourcesat package init. Downstream task support is validated on Python 3.11 only.Explicit non-claims at release close: no WSINDy benchmark, no noise-robustness claim, no nonperiodic PySINDy discovery, no PySINDy 2.x code, no
SymmetryMethodregistry, noSymmetryCandidateruntime, no PDEBench / The Well support claim, no multi-channel / 2D widening.Retirement plan: the temporary PySINDy 1.x +
setuptools<82constraints retire together when the PySINDy pin widens to>=2inv0.31.1/v0.32. That release also lands the runtime version guards currently deferred (xfailed intests/test_v0_31b3_pysindy_compatibility_policy.py) and unlocks Python 3.12+ downstream support.
Historical stable public-surface note for the v0.31c sub-release (retained for provenance; superseded by the v0.31.0 note above):
pdelie.examples.run_downstream_discovery_task_bridge_example()and the CLIpython -m pdelie.examples.downstream_discovery_task_bridgecompose v0.31b1’srun_pysindy_pde_taskand v0.31b2’sinspect_pysindy_weak_pde_libraryon one canonical periodic scalar 1D Heat field. The runner returns a strict-JSON-compatible dict withsummary_type = "downstream_discovery_task_bridge_example"and seven top-level keys (summary_schema_version,summary_type,pde_library_task,weak_pde_library_diagnostic,interpretation,scope_boundaries,backend_versions). The composed wrapper is not a new report schema and does not alter the 22-keydiscovery_task_resultor 27-keypdelie_weak_pde_library_diagnosticschemas. No rootpdelieexport is added. No WSINDy performance claim, no noise-robustness claim, no nonperiodic discovery claim. Periodic scalar 1D only. PySINDy 1.x support is temporary pendingv0.31.1— seedocs/design/PYSINDY_COMPATIBILITY_POLICY.md.
Runtime public API for the frozen v0.3 Milestone 1 slice:
pdelie.invariants.InvariantApplierfor single-generator periodicxuniform translation only
Runtime public API for the frozen v0.3 Milestone 2 slice:
pdelie.discovery.to_pysindy_trajectoriesfor a backend-specific, narrow, flattened-trajectory PySINDy bridge
Runtime public API for the frozen v0.4 Milestone 2 slice:
pdelie.symmetry.render_generator_familyfor deterministic runtime-only symbolic display of the stored generator basispdelie.symmetry.to_sympy_component_expressionsfor optional runtime-only SymPy component expressions whensympyis installed
Runtime public API for the frozen v0.4 Milestone 3 slice:
pdelie.symmetry.compare_generator_spansfor runtime-only algebraic span comparison of canonical polynomialGeneratorFamilyobjects under the frozen normalized polynomial inner product
Runtime public API for the frozen v0.4 Milestone 4 slice:
pdelie.symmetry.diagnose_generator_family_closurefor runtime-only closure, structure-constant, and algebra-diagnostic reports on canonical polynomialGeneratorFamilyobjects
Runtime public API for the frozen v0.4 Milestone 5 slice:
pdelie.viz.plot_generator_coefficientsfor optional Matplotlib coefficient-bar figures over canonicalGeneratorFamilyobjectspdelie.viz.plot_generator_symbolic_summaryfor optional Matplotlib text-summary figures over runtime symbolic rendering outputpdelie.viz.plot_verification_curvefor optional Matplotlib verification-curve figures overVerificationReportpdelie.viz.plot_span_diagnosticsfor optional Matplotlib figures over frozen M3 span-diagnostic reportspdelie.viz.plot_closure_diagnosticsfor optional Matplotlib figures over frozen M4 closure-diagnostic reports
Runtime public API for the frozen v0.5 Milestone 1 slice:
pdelie.portability.export_generator_family_manifestfor dict-level export of a stable manifest artifact schema around canonicalGeneratorFamilypayloadspdelie.portability.import_generator_family_manifestfor dict-level validation/import of the frozen manifest schema back into canonicalGeneratorFamily
Runtime public API for the frozen v0.5 Milestone 2 slice:
pdelie.portability.coerce_generator_familyfor strict normalization of canonical in-memory families, canonical family payloads, manifests, and the narrow legacy translation payload into canonicalGeneratorFamily
Runtime public API for the frozen v0.6 Milestone 1 slice:
pdelie.discovery.evaluate_discovery_recoveryfor runtime-only support and coefficient recovery metrics over caller-supplied canonical term strings
Runtime public API for the frozen v0.6 Milestone 2 slice:
pdelie.discovery.fit_pysindy_discoveryfor a runtime-only, backend-native PySINDy fit adapter over the current flattenedto_pysindy_trajectories(...)bridgethis M2 API returns a runtime backend report dict, not a stable JSON-compatible artifact schema
its
coefficientsfield is runtime NumPy data, and itsequation_terms/equation_stringsfields are backend-native, non-canonical debug outputs
Runtime public API for the frozen v0.6 Milestone 3 slice:
pdelie.discovery.build_translation_canonical_discovery_inputsfor a runtime-only, heuristic translation-canonical discovery-input helper over canonical Heat/BurgersFieldBatchdatathis M3 API returns a runtime dict containing a transformed
FieldBatch, the narrowto_pysindy_trajectories(...)bridge output, and deterministic alignment metadataits canonicalization policy is heuristic peak alignment, not a strong invariant-theoretic guarantee
Runtime public API for the frozen v0.6 Milestone 4 slice:
pdelie.data.add_gaussian_noisefor deterministic additive Gaussian perturbation of canonicalFieldBatchdata while preservingFieldBatchvalidity and preprocess provenancepdelie.data.subsample_timefor stride-only time-axis subsampling of canonicalFieldBatchdatapdelie.data.subsample_xfor stride-only x-axis subsampling of canonicalFieldBatchdata under the stable minimum-two-x-points rulepdelie.data.split_batch_train_heldoutfor deterministic batch-axis train/held-out splitting of canonicalFieldBatchdatapdelie.discovery.summarize_recovery_gridfor runtime-only grouped aggregation of nested recovery-grid recordsthe M4 summarizer is runtime convenience only, not a canonical artifact schema, JSON contract, or manuscript-table format
Runtime public API for the frozen v0.7 Milestone 1 slice:
pdelie.data.from_numpyfor strict runtime conversion of explicit NumPy/array-like 1D uniform rectilinear trajectory data into canonicalFieldBatchthis M1 API is core-only, not file-based, not alias-based, and not a broad external-loader framework
Runtime public API for the frozen v0.7 Milestone 2 slice:
pdelie.data.from_xarrayfor strict runtime conversion of explicitxarray.DataArray1D uniform rectilinear trajectory data into canonicalFieldBatchthis M2 API is runtime-optional, DataArray-only, not Dataset-based, and not a broad external-loader framework
Runtime public API for the frozen v0.8 Milestone 2 slice:
pdelie.residuals.evaluate_weak_heat_residualfor deterministic window-indexed weak residual reports over canonical scalar 1D uniform periodic HeatFieldBatchdatapdelie.residuals.evaluate_weak_burgers_residualfor deterministic window-indexed weak residual reports over canonical scalar 1D uniform periodic BurgersFieldBatchdatathese M2 APIs return runtime report dicts, not canonical
ResidualBatchobjectstheir stable report shape and diagnostics surface are frozen by
docs/planning/V0_8_SCOPE.md
Runtime public API update for the frozen v0.9 Milestone 1 slice:
pdelie.derivatives.compute_spectral_fd_derivatives(field, *, max_spatial_order=2)preserves the current defaultspectral_fdbehavior and derivative outputsmax_spatial_order=3adds the third spatial derivative outputu_xxxmax_spatial_order=1emits only the time derivative and first spatial derivative outputsunsupported
max_spatial_ordervalues raiseScopeValidationError
Runtime public API update for the frozen v0.11 Milestone 2 slice:
pdelie.derivatives.compute_spectral_fd_derivatives(field, *, max_spatial_order=4)adds the fourth spatial derivative outputu_xxxxmax_spatial_order=4emitsu_t,u_x,u_xx,u_xxx, andu_xxxxthis API update preserves the existing default
max_spatial_order=2behavior, config, diagnostics, and derivative outputsthis derivative extension does not add a stable public Kuramoto-Sivashinsky data generator or residual evaluator
Runtime public API for the frozen v0.9 Milestone 2 slice:
pdelie.data.generate_kdv_1d_field_batchfor normalized periodic short-horizon synthetic KdV under the frozenv0.9generator regimethis API has no root
pdelieexportthis API does not accept custom initial conditions in
v0.9accepted generator parameters outside the release-guaranteed regime are user-risk
Runtime public API for the frozen v0.9 Milestone 3 slice:
pdelie.residuals.KdVResidualEvaluatorfor normalized periodic short-horizon KdV strong-form residuals under the frozenv0.9regimethis evaluator computes the formula-defined residual
u_t + 6*u*u_x + u_xxx = 0using numerical derivativeswhen derivatives are omitted, the evaluator computes
compute_spectral_fd_derivatives(field, max_spatial_order=3)when derivatives are supplied, they must validate against the field and include
u_t,u_x, andu_xxxstable inputs must include
field.metadata["parameter_tags"]["equation"] == "kdv_normalized"this API has no root
pdelieexportthis API does not expose configurable KdV coefficients or weak KdV behavior in
v0.9
Runtime public API for the frozen v0.10 Milestone 2 slice:
pdelie.reporting.summarize_residual_batchfor JSON-compatible runtime summaries ofResidualBatchresidual shape, definition type, normalization, residual norms, and diagnosticspdelie.reporting.summarize_weak_residual_reportfor JSON-compatible runtime summaries of frozenv0.8weak residual report mappingspdelie.reporting.summarize_generator_familyfor JSON-compatible runtime summaries ofGeneratorFamilycoefficients, parameterization, normalization, translation span distance when applicable, and fitting diagnosticspdelie.reporting.summarize_verification_reportfor JSON-compatible runtime summaries ofVerificationReportepsilon sweeps, classification, first-error metrics, and diagnosticspdelie.reporting.summarize_vertical_slicefor JSON-compatible runtime summaries that combine derivative metadata plus residual, generator, verification, and optional extra metrics summariesthese APIs are runtime supportability helpers, not canonical objects, artifact schemas, manuscript-table generators, or figure/rendering APIs
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.12 Milestone 2 slice:
pdelie.reporting.summarize_generator_fit_diagnosticsfor JSON-compatible runtime summaries ofGeneratorFamilyfit diagnostics, including singular values, condition number, selected/SVD span distances, fallback status, and evidence labelsthis API summarizes existing
GeneratorFamilydiagnostics and coefficients; it does not create a canonical object or mutate the generatorthis API is a runtime supportability helper, not a manuscript table, fitting algorithm, promotion gate, or stable KS runtime surface
this API has no root
pdelieexport
Runtime public API for the frozen v0.13 Milestone 2/M3 slice:
pdelie.invariants.compute_periodic_window_coveragefor JSON-compatible grid-point coverage diagnostics over 1D uniform endpoint-excluded periodic grids, half-open periodic windows, and uniform translation shiftspdelie.invariants.diagnose_uniform_translation_consistencyfor JSON-compatible diagnostics of single-generator uniform periodic translation consistency over canonical scalar 1D periodicFieldBatchinputsthese APIs support invariant and finite-transform workflows by reporting coverage and consistency only
these APIs do not construct augmented datasets, orbit views, training branches, canonical artifacts, figures, or manuscript tables
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.14 Milestone 2/M3 slice:
pdelie.reporting.summarize_invariant_workflowfor JSON-compatible runtime summaries that combine coverage, consistency, orbit, generator, fit-diagnostic, verification, and optional extra-metric reportspdelie.invariants.summarize_uniform_translation_orbitfor JSON-compatible read-only reports over finite uniformxtranslations of canonical scalar 1D periodicFieldBatchinputsthese APIs support invariant and finite-transform workflows by reporting combined workflow and orbit metadata only
these APIs do not construct augmented datasets, orbit datasets, or transformed
FieldBatchcollectionssource_field_idis optional JSON-compatible provenance metadata only, not a canonical identity systemtime-translation diagnostics remain deferred;
InvariantApplierstill exposes only uniform periodicxtranslation in the stable runtime paththese APIs have no root
pdelieexports
Runtime public API for the frozen v0.15 Milestone 2 slice:
pdelie.invariants.build_uniform_translation_orbit_batchfor materializing finite uniformx-translation orbit batches from canonical scalar 1D periodicFieldBatchinputspdelie.invariants.OrbitBatchResultas a runtime-only structured result containing the materializedFieldBatchand a JSON-compatible provenance reportthe materialized output appends along the batch dimension, preserves raw shift order and duplicate shifts, and records optional source/shift indices in the report
the helper reuses
InvariantApplieruniform translation and does not introduce a second translation implementationthe helper records orbit-materialization metadata and appends one aggregate preprocess-log entry
this API is a conservative data utility, not a train/test splitter, split-management helper, leakage detector, sparse-discovery branch policy, canonical object, figure/rendering API, or manuscript artifact schema
time-translation, public KS runtime APIs, weak KS, broad adapters, and operator-facing APIs remain deferred
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.16 Milestone 2/M3 slice:
pdelie.symmetry.validate_symmetry_candidatefor empirical configured validation reports over externally supplied symmetry candidatesaccepted candidate inputs are
GeneratorFamily, canonicalGeneratorFamilypayload mappings,InvariantMapSpec, and canonicalInvariantMapSpecpayload mappingsreports distinguish
candidate_kind = "generator_family"fromcandidate_kind = "invariant_map_spec"validatedmeans all configured empirical checks passed for the supplied field, residual evaluator, epsilons, and optional reference; it is not a mathematical proof of symmetrycallable descriptors, learned detector training, formula-backed generator families, public KS runtime APIs, weak KS, broad adapters, split policy, and operator-facing APIs remain deferred
this API returns a JSON-compatible runtime report, not a canonical object, detector, fitting algorithm, manuscript artifact, or training framework
this API has no root
pdelieexport
Runtime public API for the frozen v0.17 Milestone 2/M3 slice:
pdelie.symmetry.FormulaGeneratorFamilyas a runtime-only structured record for formula-backed scalar 1D Lie-point generator familiespdelie.reporting.summarize_formula_generator_familyfor JSON-compatible runtime summaries of formula-backed generator recordspdelie.symmetry.validate_symmetry_candidatenow also acceptsFormulaGeneratorFamilyobjects and strict currentFormulaGeneratorFamilypayload mappingsformula candidate validation reports distinguish
candidate_kind = "formula_generator_family"formula expressions use a safe JSON AST with supported nodes
const,var,add,mul, integerpow,sin,cos,reciprocal, and metadata-onlysymbolic_referenceformula-backed validation performs schema checks, finite formula-evaluation diagnostics when expressions are evaluable, and optional finite-transform validation when a supported
InvariantMapSpecpayload is attachedFormulaGeneratorFamilyis runtime-only and does not change canonical polynomialGeneratorFamilysemanticsarbitrary executable formula strings, Python callables, learned-generator training, neural detector APIs, public KS runtime APIs, weak KS, broad adapters, split policy, and operator-facing APIs remain deferred
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.18 Milestone 2/M3/M4 slice:
pdelie.data.generate_reaction_diffusion_1d_field_batchfor deterministic synthetic scalar 1D periodic Fisher-KPP reaction-diffusion fields under the frozenv0.18generator regimestable generated fields use
field.metadata["parameter_tags"]["equation"] == "reaction_diffusion_fisher_kpp"and include the frozennu/rhoparameter tagsthis generator has no public custom initial-condition API in
v0.18; it emits smooth bounded Fourier-mode initial conditions inside the frozen synthetic regimepdelie.residuals.ReactionDiffusionResidualEvaluatorfor Fisher-KPP strong-form residualsu_t - nu*u_xx - rho*u*(1-u) = 0when derivatives are omitted, the evaluator computes the existing default
compute_spectral_fd_derivatives(field)order-2 derivative pathwhen derivatives are supplied, they must validate against the field and include
u_tandu_xxstable inputs must be canonical scalar 1D uniform periodic finite unmasked
FieldBatchobjects with the frozen reaction-diffusion equation tagpdelie.examples.run_reaction_diffusion_vertical_slice_examplefor a compact JSON-only runtime smoke example that emits the existing nestedsummarize_vertical_slice(...)summary shapethe stable public claim covers the frozen scalar 1D periodic synthetic Fisher-KPP path with direct SVD translation-fit evidence; it does not add advection-diffusion, KS promotion, weak reaction-diffusion, custom initial-condition APIs, broad adapters, multidimensional or nonuniform support, split policy, neural/callable generators, or operator-facing APIs
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.19 Milestone 2/M3/M4 slice:
pdelie.data.generate_advection_diffusion_1d_field_batchfor deterministic synthetic scalar 1D periodic constant-coefficient advection-diffusion fields under the frozenv0.19generator regimestable generated fields use
field.metadata["parameter_tags"]["equation"] == "advection_diffusion_constant_coefficient"and include the frozenc/nuparameter tagsthis generator has no public custom initial-condition API in
v0.19; it emits zero-mean smooth Fourier-mode initial perturbations inside the frozen synthetic regimegenerated fields use exact periodic Fourier evolution for
u_t + c*u_x = nu*u_xxpdelie.residuals.AdvectionDiffusionResidualEvaluatorfor strong-form residualsu_t + c*u_x - nu*u_xx = 0when derivatives are omitted, the evaluator computes the existing default
compute_spectral_fd_derivatives(field)order-2 derivative pathwhen derivatives are supplied, they must validate against the field and include
u_t,u_x, andu_xxstable inputs must be canonical scalar 1D uniform periodic finite unmasked
FieldBatchobjects with the frozen advection-diffusion equation tagpdelie.examples.run_advection_diffusion_vertical_slice_examplefor a compact JSON-only runtime smoke example that emits the existing nestedsummarize_vertical_slice(...)summary shapethe stable public claim covers the frozen scalar 1D periodic synthetic constant-coefficient advection-diffusion path with direct SVD translation-fit evidence; it does not add variable-coefficient advection-diffusion, reaction-advection-diffusion, weak advection-diffusion, custom initial-condition APIs, public KS runtime APIs, broad adapters, multidimensional or nonuniform support, time translation, split policy, neural/callable generators, or operator-facing APIs
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.20 Milestone 2/M3 slice:
pdelie.reporting.summarize_generator_confidencefor JSON-compatible runtime confidence reports that combine residual, generator, fit-diagnostic, verification, candidate-validation, coverage, consistency, orbit, threshold, and extra-metric evidencereports use
summary_type = "generator_confidence"andsummary_schema_version = "0.1"confidence reports expose categorical
confidence_labelvalues:strong,qualified,failed, andinsufficient_evidencecomponent statuses are
passed,warning,failed,not_configured, orunavailableconfidence is empirical configured evidence, not a mathematical proof, benchmark policy, train/test policy, or scalar confidence score
the helper accepts canonical
ResidualBatch,GeneratorFamily, andVerificationReportobjects where available, plus existing runtime summary mappings for the supported evidence sectionspdelie.examples.run_generator_confidence_report_examplefor a compact JSON-only runtime smoke example demonstrating one strong direct-SVD case and one qualified partial-validation casethis API does not return transformed
FieldBatchcollections, augmented datasets, canonical artifacts, manuscript tables, downstream success policies, scalar scores, train/test split decisions, or heldout-leakage decisionsthis API does not add new PDEs, public KS runtime APIs, weak-form expansion, broad adapters, time translation, split policy, neural/callable generators, or operator-facing APIs
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.21 Milestone 2/M4 slice:
pdelie.reporting.summarize_field_batch_readinessfor JSON-compatible runtime readiness reports over canonicalFieldBatchinputs before downstream residual, confidence, and discovery workflowsreports use
summary_type = "field_batch_readiness"andsummary_schema_version = "0.1"readiness reports expose categorical
readiness_labelvalues:ready,needs_attention, andnot_readycomponent statuses reuse the reporting vocabulary
passed,warning,failed,not_configured, andunavailablethe helper reports canonical shape/dim compatibility, finite-value diagnostics, mask diagnostics, uniform coordinate diagnostics, metadata completeness, optional expected-equation checks, conservative metadata suggestions, and optional residual-evaluator preflight
residual preflight captures typed
PDELieValidationErrorfailures in the report and propagates unexpected non-PDELie exceptionspdelie.examples.run_external_data_readiness_examplefor a compact JSON-only runtime smoke example demonstrating a readyfrom_numpyfield, incomplete metadata, and residual-evaluator mismatchthis API is a runtime supportability report, not a canonical object, file loader,
xarray.Datasetadapter, broad dataset adapter, resampling helper, metadata mutation helper, PDE identity inference engine, train/test policy, or leakage detectorthis API does not add new PDEs, public KS runtime APIs, weak-form expansion, broad adapters, multidimensional or nonuniform stable support, time translation, split policy, neural/callable generators, or operator-facing APIs
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.22 Milestone 2/M3/M4 slice:
pdelie.discovery.summarize_discovery_bridge_outputfor JSON-compatible runtime summaries over downstream bridge arraysbridge summaries use
summary_type = "discovery_bridge_output"andsummary_schema_version = "0.1"bridge summaries validate finite 2D trajectories, shared trajectory shape, strictly increasing time, unique feature names, and JSON-compatible source/provenance metadata
pdelie.discovery.summarize_discovery_resultfor JSON-compatible runtime summaries over backend-neutral orfit_pysindy_discovery(...)-style discovery-result mappingsdiscovery-result summaries use
summary_type = "discovery_result"and compact coefficient summaries by shape, finite status, norms, and nonzero count; they do not copy full coefficient matrices into the reportoptional
target_termsmust be feature-keyed and recovery summaries reuseevaluate_discovery_recovery(...)for exact, partial, and failed per-feature recovery diagnosticsbackend failure mappings are summarized as reports instead of raising, while malformed mappings and nonfinite coefficients raise typed validation errors
pdelie.reporting.summarize_downstream_discovery_workflowfor JSON-compatible workflow reports that combine field-readiness, generator-confidence, orbit-batch, bridge, and discovery-result reportsdownstream workflow reports use
summary_type = "downstream_discovery_workflow"and report orbit-batch provenance traceability without detecting leakage or managing splitspdelie.examples.run_downstream_discovery_contracts_examplefor a compact JSON-only runtime smoke examplethese APIs are runtime supportability reports, not canonical objects, backend plugin frameworks, split policies, leakage detectors, manuscript benchmark summaries, file loaders, or transformed
FieldBatchcollectionsthis API does not add new PDEs, public KS runtime APIs, weak-form expansion, broad adapters,
xarray.Datasetsupport, multidimensional or nonuniform stable support, time translation, neural/callable generators, or operator-facing APIsthese APIs have no root
pdelieexports
Runtime public API for the frozen v0.23 Milestone 2/M4 slice:
pdelie.reporting.summarize_split_leakage_provenancefor JSON-compatible runtime reports over user-supplied partition labels and available source/shift provenancesplit provenance reports use
summary_type = "split_leakage_provenance"andsummary_schema_version = "0.1"reports expose
risk_labelvalues:no_detected_overlap,traceable_overlap,missing_provenance, andinconclusiveaccepted partition labels are user-supplied non-empty strings; PDELie does not create, optimize, or enforce train/heldout splits
when supplied,
OrbitBatchResultoruniform_translation_orbit_batchreports are inspected through existingsource_batch_indices,shift_indices, and shift metadataoptional
source_ids,sample_metadata,source_report_id, andextra_metricsmust remain strict JSON-compatible runtime metadatadiagnostics report source overlap, source-and-shift overlap, identity-shift overlap, partition-pair counts, component statuses, and risk reasons
pdelie.reporting.summarize_downstream_discovery_workflownow accepts optionalsplit_provenancereports and nests them as downstream workflow evidencepdelie.examples.run_split_leakage_provenance_examplefor a compact JSON-only runtime smoke examplethese APIs are runtime provenance diagnostics, not split managers, leakage preventers, benchmark-policy engines, automatic augmentation policies, or manuscript success criteria
this API does not add file loaders, Dataset adapters, broad backend frameworks, new PDEs, public KS runtime APIs, weak-form expansion, multidimensional or nonuniform stable support, time translation, neural/callable generators, operator-facing APIs, or root exports
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.24 Milestone 2/M4 slice:
pdelie.reporting.summarize_weak_form_supportabilityfor JSON-compatible runtime reports over existing weak residual reports, explicit weak contracts, strong residual summaries, robustness/imported-parity diagnostics, and internal feasibility summariesweak supportability reports use
summary_type = "weak_form_supportability"andsummary_schema_version = "0.1"reports expose
supportability_labelvalues:supported_existing_slice,diagnostic_only,failed, andinsufficient_evidencesupported_existing_sliceis intentionally narrow: it means the configured evidence supports only the frozen public Heat/Burgers weak residual report surface, not a general weak derivative backend, weak residual evaluator integration, weak design matrix, or weak sparse-discovery methodweak contracts normalize report metadata such as test-function family/order, supported operator order, integration-by-parts depth, boundary vanishing order, patch shape/stride, quadrature rule, normalization, valid-window policy, row counts, skipped-patch counts, finite-value policy, equation, and equation form
quadrature is recorded in every weak supportability report
malformed/nonfinite evidence raises typed validation errors unless a nested report already encodes a failure status
internal Fisher-KPP weak feasibility remains diagnostic-only test evidence; no public weak reaction-diffusion API is added
pdelie.examples.run_weak_form_supportability_examplefor a compact JSON-only runtime smoke example demonstrating Heat/Burgers weak supportability plus a static internal Fisher-KPP feasibility markerv0.24does not implement WSINDy, weak design matrices, weak sparse recovery, a weak derivative backend, weak KdV, weak KS, public weak reaction-diffusion residual evaluators, new PDEs, broad adapters, split policy, neural/callable generators, operator-facing APIs, or root exportsthese APIs have no root
pdelieexports
Runtime public API for the frozen v0.25 Milestone 5 slice:
pdelie.examples.run_kdv_scope_decision_examplefor a compact JSON-only runtime smoke example documenting the KdV scope decisionKdV scope-decision examples use
summary_type = "kdv_scope_decision_example"andsummary_schema_version = "0.1"report evidence categories are
current_frozen_supported,diagnostic_only, anddeferred_no_gothe existing normalized scalar 1D periodic short-horizon KdV strong path remains stable and direct-SVD-backed under the frozen public regime
the recorded
v0.25decision iskeep_public_kdv_surface_frozencustom KdV initial conditions, configurable KdV coefficients, general KdV support outside the frozen normalized short-horizon regime, and weak KdV remain deferred
v0.25adds no new KdV generator, residual evaluator, weak residual report, custom initial-condition API, configurable-coefficient API, weak derivative backend, WSINDy-like surface, broad adapter, time-translation API, neural/callable generator API, operator-facing API, or root exportthese APIs have no root
pdelieexports
Decision-only note for the frozen v0.26 KS revisit decision:
v0.26adds no new public runtime APIv0.26records the KS revisit decisioncurrent_no_go_reference_fallbackinternal KS residual and verification evidence remains feasible, but translation fitting remains reference-fallback-backed and therefore not promotable
decision labels include
current_no_go_reference_fallback,residual_feasible_fit_not_promotable,direct_strong_candidate_for_v0_26b_promotion, anddeferred_no_gov0.26bis reserved as the follow-up KS promotion release name if a separate scope freeze accepts future direct-SVD/no-fallback evidencethis decision does not add a stable public Kuramoto-Sivashinsky data generator or residual evaluator
this decision does not add a public KS vertical-slice example, public KS status example, residual-only KS public API, weak KS API, custom KS initial-condition API, configurable KS coefficient API, broad KS regime support, root KS export, broad adapter, time-translation API, neural/callable generator API, or operator-facing API
Runtime public API and behavior updates for the frozen v0.27 multi-generator diagnostics decision:
pdelie.examples.run_multi_generator_diagnostics_examplefor a compact JSON-only runtime diagnostic example over supplied multi-rowGeneratorFamilyobjectsmulti-generator diagnostic examples use
summary_type = "multi_generator_diagnostics_example"andsummary_schema_version = "0.1"pdelie.symmetry.diagnose_generator_family_closurenow reports well-formed rank-deficient families as diagnostic reports withfamily_rank_status = "rank_deficient"instead of raising solely because structure constants are non-uniquepdelie.symmetry.compare_generator_spansnow reports well-formed zero-rank/rank-deficient span comparisons withcomparison_status = "failed"or"warning"instead of crashing solely because rank is deficientpdelie.symmetry.validate_symmetry_candidatenow acceptsclosure_required=True|FalseforGeneratorFamilycandidatesmulti-row
GeneratorFamilyvalidation keeps algebraic closure diagnostics separate from PDE-context evidence; closure passing alone does not prove PDE residual symmetrythe recorded
v0.27decision ismulti_generator_diagnostics_feasible_fitting_deferredthis release does not add public multi-generator PDE fitting, finite multi-generator flows, BCH composition, exponential-map integration, invariant charts, multi-parameter orbit charts, group-action atlases, operator APIs, neural/callable generator APIs, or root exports
these APIs have no root
pdelieexports
Runtime public API for the frozen v0.28 data-ecosystem feasibility slice:
pdelie.data.from_xarray_datasetfor strict runtime conversion of one explicit scalarxarray.Datasetdata variable into canonical scalar 1D uniform periodicFieldBatchpdelie.reporting.summarize_xarray_dataset_readinessfor strict JSON-compatible runtime readiness reports overxarray.Datasetinputs before conversionDataset readiness reports use
summary_type = "xarray_dataset_readiness"andsummary_schema_version = "0.1"pdelie.examples.run_data_ecosystem_feasibility_examplefor a compact JSON-only runtime smoke example demonstrating Dataset readiness, Dataset-to-FieldBatch conversion, and existing FieldBatch readinessthe recorded
v0.28decision isxarray_dataset_scalar_slice_supported_file_loaders_deferredDataset conversion delegates to the existing
from_xarray(...)DataArray path after data-variable and optional mask-variable selection; all frozen scalar 1D periodic layout, coordinate, metadata, mask, and singleton-var rules remain in forcemetadata remains explicit for conversion; Dataset attrs are report metadata only and are never silently promoted into canonical
FieldBatch.metadatathis release does not add file loaders, NetCDF/Zarr readers, PDEBench/The Well adapters, broad adapter registries, implicit metadata inference, resampling APIs, multidimensional or nonuniform stable support, multivariable
FieldBatchsupport, train/test policy, neural/callable generators, operator-facing APIs, or root exportsthese APIs have no root
pdelieexports
Decision-only note for the frozen v0.29 workflow recipes and support matrix release:
v0.29adds no new runtime public APIv0.29records the release decisionworkflow_recipes_and_support_matrix_complete_no_new_numerical_scopedocs/workflows/provides public documentation recipes for data readiness, candidate validation, downstream/export provenance, Dataset-to-downstream, and candidate-to-split-provenance pathsdocs/specs/support_matrix.v0_29.jsonis a machine-readable docs/spec artifact, not a package runtime APIdocs/specs/SUPPORT_MATRIX.mdis the human-readable support matrix and selected helper inventoryv0.29adds rendered tutorial notebooks for the two complete workflow recipesthis decision does not add
pdelie.reporting.summarize_workflow_readiness(...), new PDEs, file loaders, broad adapters, multidimensional or nonuniform stable support, public KS runtime APIs, train/test policy, neural/callable generators, operator-facing APIs, or root exports
Decision-only note for the frozen v0.30a scope-freeze sub-release:
v0.30aadds no new runtime public APIv0.30arecords the design decisionnonperiodic_readiness_and_low_order_finite_difference_diagnostics_design_onlyv0.30adoes not change any existing public surface, does not bumppyproject.toml, does not change CI, and does not declare any new optional dependencyv0.30afreezes the design of structuredBoundaryConditionSpec, thefinite_differencederivative backend, thecompute_derivatives(backend="auto")dispatcher, and the residual interior-vs-full-grid domain policy; the documents are atdocs/planning/V0_30_SCOPE.md,docs/design/BOUNDARY_CONDITION_SPEC.md,docs/design/DERIVATIVE_BACKEND_POLICY.md, anddocs/design/V0_30_HYGIENE_AUDIT.mdthe runtime implementation lands in
v0.30proper, not inv0.30athe
v0.30release will bumpFieldBatch.SCHEMA_VERSIONfrom"0.1"to"0.2"to carry the structuredBoundaryConditionSpec;FieldBatch.from_dictwill accept both"0.1"and"0.2"payloads under a backwards-compatible loader so external tooling can preparev0.30will addpdelie.derivatives.compute_finite_difference_derivativesandpdelie.derivatives.compute_derivativesunder their submodules; neither becomes a rootpdelieexportv0.30adoes not add aSymmetryMethodregistry, apdelie.discover_symmetriesroot API, any external symmetry-method port, any file loader, any PDEBench or The Well adapter, any KS runtime API, any weak nonperiodic surface, or any new PDE generator/evaluatorv0.30arecords thatu_xxxandu_xxxxon nonperiodic data remain deferred from the stablev0.30surfacev0.30arecords that finite-transform verification for nonperiodic translations is deferred to thev0.31.5orbit/action scope decision
Decision-only note for the frozen v0.30e hygiene phase 1 sub-release:
v0.30eadds no new runtime public API and no new rootpdelieexportv0.30erecords the design decisionhygiene_phase_1_non_blocking_ruff_mypy_coveragev0.30edoes not bumppyproject.toml(stays at0.29.0); the version bump is reserved for the v0.30 release closev0.30econfigures[tool.ruff](target-versionpy311, line-length 120, extend-select["E", "W", "F", "B", "I", "UP", "RUF", "NPY"]),[tool.mypy](strict scope narrowed topdelie.contracts,pdelie._boundary,pdelie.derivatives.*; lenient elsewhere withignore_missing_importson optional-extras stubs), and[tool.coverage.*](source = ["src/pdelie"],branch = true,fail_under = 80) inpyproject.tomlruff,mypy,pytest-covare added to the[project.optional-dependencies].testgroup (not to any runtime extra)three new CI jobs (
lint,typecheck,coverage) run on Python 3.11 and are non-blocking (continue-on-error: true); a red run reports findings but does not gate mergesv0.30edoes not lift thenumpy<2cap and does not expand the Python matrix; both are Phase 3 items reserved for v0.32 or laterv0.30edoes not add a symmetry-method registry, any external symmetry-method port, any file loader, any PDEBench / The Well adapter, any KS runtime API, any weak nonperiodic surface, any new PDE, or a v0.30f release-gate consolidation
Decision-only note for the frozen v0.30d residual-evaluator auto-dispatch sub-release:
v0.30dadds no new runtime public API and no new rootpdelieexportv0.30drecords the design decisionstrong_residual_evaluator_auto_dispatch_and_interior_only_diagnosticsHeatResidualEvaluator,BurgersResidualEvaluator,AdvectionDiffusionResidualEvaluator, andReactionDiffusionResidualEvaluatornow route throughcompute_derivatives(backend="auto")when derivatives are omitted; supplied derivatives take precedence and are used as-istheir diagnostics gain
residual_domain_policy("full_grid"on periodic data viaspectral_fd;"interior_only"on supported nonperiodic BCs viafinite_difference),rms_residual(Heat and Burgers previously omitted this),boundary_trim_width(interior-only paths), and a nestedfull_grid_diagnosticblock (interior-only paths)KdVResidualEvaluator,evaluate_weak_heat_residual,evaluate_weak_burgers_residual, and the translation finite-transform verifier remain periodic-only per the v0.30 scopev0.30ddoes not add ruff / mypy / coverage configuration, a symmetry-method registry, any external symmetry-method port, any file loader, any PDEBench or The Well adapter, any KS runtime API, any weak nonperiodic surface, or any new PDEv0.30ddoes not bumppyproject.toml; the version bump is reserved for the v0.30 release close
Decision-only note for the frozen v0.30b BoundaryConditionSpec runtime and FieldBatch 0.2 migration sub-release:
v0.30badds no new runtime public API and no new rootpdelieexportv0.30brecords the design decisionboundary_condition_spec_runtime_and_field_batch_0_2_migrationv0.30bdoes not bump the package version (pyproject.tomlstays at0.29.0); the version bump lands at v0.30 release closev0.30bbumpsFieldBatch.SCHEMA_VERSIONfrom"0.1"to"0.2";FieldBatch.from_dictaccepts both"0.1"and"0.2"payloads under a backwards-compatible loaderlegacy
metadata["boundary_conditions"]["x"]string values ("periodic","dirichlet","neumann","open","open_unknown") are normalized to the structuredBoundaryConditionSpecform on load and recorded inpreprocess_logunder operation"schema_0_1_to_0_2_boundary_normalization"the helpers live in the internal
src/pdelie/_boundary.pymodule; they are not promoted as a public submodule APIfrom_numpyandfrom_xarrayaccept structured nonperiodic specs and the supported legacy nonperiodic strings; unsupported strings raiseScopeValidationErrordownstream consumers (
spectral_fd,HeatResidualEvaluator,BurgersResidualEvaluator,KdVResidualEvaluator,ReactionDiffusionResidualEvaluator,AdvectionDiffusionResidualEvaluator,evaluate_weak_heat_residual,evaluate_weak_burgers_residual, translation basis,InvariantApplier, finite-transform verification, candidate validation, formula generators, downstream discovery bridge) remain strict-periodic; they now route through theis_x_periodichelper rather than direct string comparesv0.30bdoes not addcompute_finite_difference_derivatives,compute_derivatives, any nonperiodic residual support, any nonperiodic translation/verification path, or any new PDE; those land in v0.30c and laterv0.30bdoes not add a symmetry-method registry, an external method port, a file loader, a PDEBench/The Well adapter, a KS runtime API, a weak nonperiodic surface, or any new optional dependency
Runtime public API for the frozen v0.30c low-order finite-difference derivative slice:
pdelie.derivatives.compute_finite_difference_derivatives(field, *, max_spatial_order=2)foru_t,u_x, and optionallyu_xxon scalar 1D nonperiodic (dirichlet,neumann,open_unknown) uniform-gridFieldBatchdata. The backend usesnumpy.gradientwithedge_order=2for both axes.max_spatial_orderis restricted to{1, 2}; higher orders raiseScopeValidationError(nou_xxx/u_xxxxon nonperiodic data in the stable surface).the backend rejects periodic data with an explicit
ScopeValidationError; periodic users must callcompute_spectral_fd_derivativesor the dispatcher.returned
DerivativeBatch.configcarries the v0.30c keys:spatial_method = "finite_difference_centered",temporal_method = "finite_difference",stencil_edge_order = 2,boundary_handling ∈ {"dirichlet", "neumann", "open_unknown"},spatial_max_order ∈ {1, 2},backend_selected_by_boundary_condition(defaultFalse),backend_selection_reason(defaultNone),recommended_residual_domain_policy = "interior_only", andrecommended_boundary_trim_width = 4.pdelie.derivatives.compute_derivatives(field, *, backend="auto", max_spatial_order=2)dispatches betweenspectral_fdfor periodic data andfinite_differencefor any supported nonperiodic boundary type. Whenbackend="auto", the resultingDerivativeBatch.configsetsbackend_selected_by_boundary_condition = Trueand a non-nullbackend_selection_reason("periodic_x_uses_spectral_fd"or"nonperiodic_x_uses_finite_difference"); the selection is always auditable from the artifact itself. Explicitbackend="spectral_fd"on nonperiodic data and explicitbackend="finite_difference"on periodic data both raiseScopeValidationError; the dispatcher never silently falls back.both APIs are submodule-only (no root
pdelieexport) and do not change any existing residual evaluator behavior. Residual evaluator auto-dispatch is deferred.pdelie.contracts.ALLOWED_DERIVATIVE_BACKENDSnow includes the canonical"finite_difference"name; the legacy"finite"entry is retained.
Runtime public API update for the frozen v0.30c boundary-aware reporting slice:
pdelie.reporting.summarize_field_batch_readinessnow emits an additiveboundary_condition_warnings: list[str]field with the v0.30c vocabulary:"x_boundary_legacy_string_under_schema_0_2","x_boundary_open_unknown","x_boundary_dirichlet_unspecified","x_boundary_neumann_unspecified". The list is empty for periodic (legacy or structured) FieldBatches and for fully-specified structured nonperiodic FieldBatches. A non-empty list downgrades the report’sreadiness_labelfrom"ready"to"needs_attention"; harder failures (non-finite values, missing required metadata keys, non-uniform x or time coordinates) still route to"not_ready".pdelie.reporting.summarize_xarray_dataset_readinessexposes the sameboundary_condition_warningsfield with the same vocabulary and the same readiness-label downgrade rule.pdelie.reporting.summarize_residual_batchnow recordsresidual_domain_policy: strsourced fromResidualBatch.diagnostics["residual_domain_policy"]when present; defaults to"not_configured"so the field is always present and strict-JSON serializable. No existing residual evaluator output is mutated.the readiness reports now treat a non-periodic boundary as a warning rather than a metadata failure; the
"x_boundary_not_periodic"failure key has been replaced by the new warning vocabulary. Unsupported BC strings (e.g."insulating") continue to route to a metadata failure under"x_boundary_unsupported".
Decision-only note for the frozen v0.30c low-order finite-difference and boundary-aware reporting sub-release:
v0.30cadds no new runtime rootpdelieexport and no new optional dependencyv0.30crecords the design decisionlow_order_finite_difference_backend_and_boundary_aware_readinessv0.30cdoes not bump the package version (pyproject.tomlstays at0.29.0); the version bump lands at v0.30 release closeresidual evaluator auto-dispatch, residual interior-trim policy enforcement, and finite-transform verification on nonperiodic data are explicitly deferred to v0.30d / v0.31.5
u_xxxandu_xxxxon nonperiodic data remain unsupported; no experimental flag is exposed in v0.30cthe
finite_differencebackend uses onlynumpy.gradient(edge_order=2); higher-order one-sided stencils, Fornberg-style families, and weak/Galerkin formulations remain deferred
Decision-only note for the frozen v0.30f narrow declarative release-gate consolidation sub-release:
v0.30fadds no new runtime public API and no new rootpdelieexportv0.30frecords the design decisionnarrow_declarative_release_gate_consolidationv0.30fdoes not bumppyproject.toml(stays at0.29.0); the version bump is reserved for the v0.30 release closev0.30faddsconfigs/release_gate_manifest.json(strict JSON,summary_type = "pdelie_declarative_release_gate_manifest") andtests/test_release_gates.py; the CI release-gate job is renamed fromv0_29-release-gatetov0_30f-release-gatev0.30fdeletes zero release-gate files. All 26tests/test_v0_NN_release_gate.pyfiles stay in place. Consolidation is by manifest addition, not by file removal.v0.30fdoes not extend the supported-assertion-class schema beyond the 11 classes named in the manifest — files that useforbidden_phrases_in_*, CHANGELOG / README / ROADMAP_HISTORY phrase checks, disjunctive+forbidden per-page phrase rules, orrequired_json_fieldson manifests are listed inexcluded_functional_release_gate_filesand their declarative content stays in the source filev0.30fdoes not lift thenumpy<2cap, does not expand the Python matrix, and does not promote the v0.30e advisory jobs (lint,typecheck,coverage) to blocking
Stable public-surface note for the frozen v0.30.0 release close:
v0.30.0records the release decisionnonperiodic_readiness_and_low_order_finite_difference_diagnosticsv0.30.0bumpspyproject.tomlfrom0.29.0to0.30.0;numpy>=1.24,<2andrequires-python >=3.11are unchanged; CI matrix stays Python 3.11 onlyv0.30.0adds no new rootpdelieexportnew public submodule surfaces (all stable, submodule-only):
pdelie.derivatives.compute_finite_difference_derivatives(field, *, max_spatial_order=2)— supportsu_t,u_x,u_xxon scalar 1D Dirichlet, Neumann, andopen_unknownuniform-grid data;max_spatial_orderis limited to{1, 2};u_xxxandu_xxxxon nonperiodic data are not part of the stable v0.30 surfacepdelie.derivatives.compute_derivatives(field, *, backend="auto", max_spatial_order=2)— dispatcher;backend="auto"routes periodic data tospectral_fdand nonperiodic data (Dirichlet, Neumann,open_unknown) tofinite_difference; explicit-mismatch calls raiseScopeValidationError; the selection is recorded inDerivativeBatch.config["backend_selected_by_boundary_condition"]andDerivativeBatch.config["backend_selection_reason"]; there is no silent fallbackpdelie.reporting.summarize_field_batch_readinessandpdelie.reporting.summarize_xarray_dataset_readinessnow emitboundary_condition_warnings: list[str]; thereadiness_labelis downgraded from"ready"to"needs_attention"when warnings are present (behavior first shipped in v0.30c and stable now)pdelie.reporting.summarize_residual_batchnow records aresidual_domain_policyfield sourced fromresidual.diagnostics["residual_domain_policy"], defaulting to"not_configured"when absent; auto-dispatched nonperiodic residuals emit"interior_only"and periodic residuals emit"full_grid"(behavior first shipped in v0.30c/d and stable now)
schema migration confirmed stable in v0.30.0:
FieldBatch.SCHEMA_VERSION = "0.2"FieldBatch.LEGACY_SCHEMA_VERSIONS = frozenset({"0.1"})FieldBatch.from_dictaccepts both"0.1"and"0.2"payloads and normalizes legacy stringboundary_conditions["x"]values via the internalpdelie._boundaryhelpers; migrated payloads carry aschema_0_1_to_0_2_boundary_normalizationentry inpreprocess_log
internal-only (not public API):
pdelie._boundary(BoundaryFace,BoundaryConditionSpec,normalize_x_boundary_condition,get_x_boundary_type,is_x_periodic) — the module is intentionally underscore-prefixed and not re-exported from any submodulecross-cutting hygiene phase 1 (
[tool.ruff],[tool.mypy]strict scope narrowed topdelie.contracts,pdelie._boundary,pdelie.derivatives.*, and[tool.coverage.*]) is configured and wired to non-blocking CI jobslint,typecheck,coverage; promotion to blocking is not part of v0.30 and remains deferred to Phase 2narrow declarative release-gate consolidation shipped:
configs/release_gate_manifest.json+tests/test_release_gates.pyreplay declarative content across 18 releases plus the v0.30 close row; the CI job is renamed tov0_30-release-gate; zero release-gate files were deleted; functional smoke tests intentionally remain explicitdeferred surfaces (not present, not planned in v0.30):
root
pdelie.discover_symmetries(deferred tov1.0scope decision)pdelie.symmetry.SymmetryMethodregistry (deferred tov0.30.1)external symmetry-method ports (Ko, LieGAN, LaLiGAN — deferred to
v0.33+)KdV nonperiodic; KS nonperiodic; public KS runtime API
weak nonperiodic residuals; public weak derivative backend; WSINDy design matrices; weak sparse recovery
u_xxxandu_xxxxon nonperiodic datafinite-transform verification on nonperiodic translations (
pdelie.verification.verify_translation_generatorand_apply_uniform_translationremain periodic-only; overlap-crop is av0.31.5topic)PDEBench and The Well loaders,
load_field_batch,from_pdebench,from_the_well,from_netcdf,from_zarr, dataset-adapter registries (none of these are onpdelie.data)multi-generator fitting, finite multi-generator flows, BCH composition, orbit charts
multi-channel or 2D contract widening (
v0.34scope decision)neural or callable generator APIs; operator symmetry
train/test policy, split enforcement, leakage prevention
PyPI or TestPyPI publication (Git-tag-only for the
v0.xseries; deferred tov1.0or later)
v0.30.0is Git-tag-only. Do not publish to TestPyPI or PyPI forv0.30.0.
Planning note for v0.30.1 (registry MVP + SymmetryCandidate contract):
v0.30.1will land the submodule-onlypdelie.symmetry.SymmetryMethodregistry MVP alongside apdelie.symmetry.SymmetryCandidatediscriminated-union wrapper contract.SymmetryCandidateis the single input/output shape that every downstream release consumes: v0.31’s discovery task bridge, v0.33’s Ko-sparse external candidate-generator adapter, and v0.35a’s LieGG-style extraction all take and returnSymmetryCandidate.SymmetryCandidaterepresents any of: existingGeneratorFamily,FormulaGeneratorFamily,InvariantMapSpec, matrix Lie-algebra generators, coordinate vector fields, finite-transform specs, and (later) latent generators from trained models. No release forces one shape onto another.The built-in
polynomial_translation_svdadapter must returnSymmetryCandidate, notGeneratorFamilydirectly. This is what avoids the “SymmetryMethod outputs all coerced into GeneratorFamily” failure mode.v0.30.1 remains submodule-only. No root
pdelieexport. Nopdelie.discover_symmetries. No external-method port in v0.30.1 (Ko-sparse lands in v0.33 as a distinct experimental adapter).v0.31 (discovery task bridge) is fenced against
SymmetryCandidateinputs and outputs: v0.31 consumes onlyFieldBatch+DerivativeBatch+ResidualBatch, and itsTaskResultschema records acandidate_reference: dict | Nonethat becomes theSymmetryCandidatecross-link only after v0.30.1 lands and stabilizes.
Decision-only note for the frozen v0.31a downstream discovery task bridge scope-freeze sub-release:
v0.31a adds no new runtime public API and no new root
pdelieexportv0.31arecords the design decisiondownstream_discovery_task_bridge_design_onlyv0.31adoes not bumppyproject.toml(stays at0.30.0); the version bump is reserved for the v0.31 release closev0.31adoes not change any existing public surface, does not change CI, and does not declare any new optional dependencyv0.31afreezes the design of thepdelie.tasks.discoverysubmodule, the composedTaskResultschema (summary_type = "discovery_task_result",summary_schema_version = "0.1"), theWeakPDELibrarydiagnostic wrapper (summary_type = "pdelie_weak_pde_library_diagnostic",diagnostic_only: true), and the supportability-policy dict update; the documents are atdocs/planning/V0_31_DISCOVERY_TASK_BRIDGE_SCOPE.mdanddocs/design/DISCOVERY_TASK_RESULT_SCHEMA.mdthe composed
TaskResultpayload is contracted to passjson.loads(json.dumps(payload, allow_nan=False)) == payloadvia the existing_validate_strict_json_compatiblehelper atsrc/pdelie/reporting/summaries.py:196-202; this contract is enforced bytests/test_discovery_task_result_schema.pyvia NaN/Inf adversarialsthe runtime implementation lands from
v0.31bonward, not inv0.31av0.31sequences beforev0.30.1; theSymmetryCandidatecontract and wrapper arev0.30.1responsibility, notv0.31the PySINDy
PDELibrarybridge is periodic-only inv0.31; FD-nonperiodic extension is explicitly deferredweak_1dis retained throughv0.32close; removal is contingent on thev0.31PDELibrarybridge shipping a documented replacement path AND theWeakPDELibrarydiagnostic wrapper landing a validated parity harness with a documentedO((dx)^p)tolerancev0.31arecords that noise robustness is deferred, that no clean/noisy gate is added, and that no external dataset benchmark claim, PDEBench support claim, or The Well support claim is madev0.31arecords that multi-channel or 2DFieldBatchdispatch remains deferred tov0.34+, and that LieGG / trained-model extraction remains deferred tov0.35av0.31adoes not promote thev0.30eadvisorylint/typecheck/coverageCI jobs to blocking; that promotion remains Phase 2v0.31adoes not add a standalonetests/test_v0_31_release_gate.py; thev0.31release-gate lives as a row inconfigs/release_gate_manifest.jsonreplayed bytests/test_release_gates.py
Stable public-surface note for the v0.31b1 sub-release:
v0.31b1lands the first runtime forpdelie.tasks.discovery:run_pysindy_pde_task,summarize_discovery_task_result, andPySINDyDiscoveryUnsupportedBoundaryError.All three are submodule-only. There is no root
pdelieexport for any of them; callers must import frompdelie.tasks.discovery.The composed
TaskResultschema matchesdocs/design/DISCOVERY_TASK_RESULT_SCHEMA.mdexactly.underlying_discovery_resultembedspdelie.discovery.summarize_discovery_resultverbatim.The runtime boundary-condition guard is enforced at the
pdelie.tasks.discoveryentry: any nonperiodic-xFieldBatchraisesPySINDyDiscoveryUnsupportedBoundaryError(a subclass ofScopeValidationError) before any PySINDy call.pdelie.discovery.fit_pysindy_discoverynow accepts an optionalpysindy_modelkeyword for caller-suppliedPDELibraryconfigurations. Theconfig=Nonedefault behavior is unchanged for existing callers.The strict-JSON contract (
json.loads(json.dumps(payload, allow_nan=False)) == payload) is enforced at the composedTaskResultpayload boundary via_validate_strict_json_compatibleatsrc/pdelie/reporting/summaries.py:196.Every
TaskResultproduced byv0.31b1recordspysindy_bridge_variant = "periodic_only_v1".The
WeakPDELibrarydiagnostic wrapper (summary_type = "pdelie_weak_pde_library_diagnostic",diagnostic_only: true) isv0.31b2scope and is not shipped inv0.31b1.target_convention = "weak_pde_library"therefore remains a design-frozen, runtime-deferred surface inv0.31b1.v0.31b1does not bumppyproject.toml. It stays at0.30.0.
Stable public-surface note for the v0.31b2 sub-release:
v0.31b2lands the diagnostic-only WeakPDELibrary wrapper under a new submodulepdelie.tasks.weak_pde_library, with three new names:pdelie.tasks.weak_pde_library.WeakPDELibraryDiagnosticpdelie.tasks.weak_pde_library.summarize_pysindy_weak_pde_library_diagnosticpdelie.tasks.weak_pde_library.inspect_pysindy_weak_pde_library
All three names are also available as re-exports from the
pdelie.taskspackage (pdelie.tasks.WeakPDELibraryDiagnostic,pdelie.tasks.summarize_pysindy_weak_pde_library_diagnostic,pdelie.tasks.inspect_pysindy_weak_pde_library). None of the three is available at thepdelieroot. Callers must import frompdelie.tasks.weak_pde_libraryorpdelie.tasks.The wrapper produces a separate top-level strict-JSON summary type —
summary_type = "pdelie_weak_pde_library_diagnostic",summary_schema_version = "0.1",diagnostic_only = True,method_family = "pysindy_weak_pde_library_polynomial_gauss_v1",input_layout = "scalar_1d_uniform". It is not adiscovery_task_resultvariant. The v0.31b1 22-keydiscovery_task_resulttop-level shape is preserved verbatim; no new top-level key is added there, and the condensed 4-keyweak_contractblock embedded indiscovery_task_resultwhentarget_convention == "weak_pde_library"is unchanged from v0.31a.The wrapper is diagnostic-only. It contributes at most
supportability_label = "diagnostic_only"on the v0.24weak_form_supportabilityfamily. It does not promote any PDE tosupported_existing_slice; it does not replace or claim byte-level equivalence with the pdelie-nativepdelie.residuals.weak_1doutput; it does not ship a validatedO((dx)^p)parity harness (contingent onweak_1dremoval beyond v0.32 close and explicitly deferred).The wrapper carries no robustness claim. There is no noise-robustness certification, no clean/noisy gate, no external-dataset (PDEBench / The Well) benchmark claim, and no WSINDy design-matrix / SR3-style weak sparse recovery claim.
The strict-JSON contract (
json.loads(json.dumps(payload, allow_nan=False)) == payload) is enforced at the composed wrapper-payload boundary via the existing_validate_strict_json_compatiblehelper atsrc/pdelie/reporting/summaries.py:196.The runtime boundary-condition guard is unchanged from
v0.31b1.inspect_pysindy_weak_pde_libraryraises the existingPySINDyDiscoveryUnsupportedBoundaryError(a subclass ofScopeValidationError, defined inpdelie.tasks.discovery) on any nonperiodic-xFieldBatchbefore any PySINDy call. The two-layer periodic-only fence (task-entryis_x_periodic+to_pysindy_trajectoriesbridge gate) covers the wrapper path.summarize_weak_form_supportability’s policy dict atsrc/pdelie/reporting/summaries.py:1942-1951gains one additive key:"supports_pysindy_weak_library_diagnostic": True, inserted immediately after"supports_weak_derivative_backend": False. The existingFalsevalue onsupports_weak_derivative_backendis unchanged; its docstring / comment is re-scoped to name the pdelie-native strong-derivative-only path explicitly. No existing key is removed or silently flipped.weak_1dretention is guaranteed throughv0.32close.v0.31b2does not removeweak_1dand does not claim numerical equivalence withpdelie.residuals.weak_1d.v0.31b2does not bumppyproject.toml. It stays at0.30.0.v0.31b2does not promote any of thev0.30eadvisorylint/typecheck/coverageCI jobs to blocking; Phase 2 remains deferred.v0.31b2does not add a standalonetests/test_v0_31b2_release_gate.py. Thev0.31release-gate remains a single row inconfigs/release_gate_manifest.json, extended in place, replayed bytests/test_release_gates.py.
Compatibility policy for downstream tasks (v0.31b3)#
v0.31b3 formalizes the existing pdelie[downstream] and pdelie[test] PySINDy pin as a declared temporary policy under the decision label downstream_pysindy_compatibility_policy_and_wheel_hardening. The outcome is C_temporary_1x_policy. Full detail lives in docs/design/PYSINDY_COMPATIBILITY_POLICY.md; the machine-readable form lives at configs/pysindy_compatibility_matrix.json (summary_type = "pdelie_pysindy_compatibility_matrix").
The supported PySINDy range is
pysindy>=1.7.5,<2.1.7.5is the primary tested version; there is no secondary tested version.<1.7.5and>=2.0.0are explicitly unsupported.The exact public pdelie surfaces covered by this policy are:
pdelie.tasks.discovery.run_pysindy_pde_task,pdelie.tasks.discovery.summarize_discovery_task_result,pdelie.tasks.discovery.PySINDyDiscoveryUnsupportedBoundaryError,pdelie.tasks.weak_pde_library.inspect_pysindy_weak_pde_library,pdelie.tasks.weak_pde_library.summarize_pysindy_weak_pde_library_diagnostic,pdelie.tasks.weak_pde_library.WeakPDELibraryDiagnostic(and theirpdelie.tasksre-exports).The future
v0.31.1/v0.32migration shim (pdelie.discovery._pysindy_compat) and any accompanying constants (for example,SUPPORTED_PYSINDY_VERSIONS) are private: they are underscore-prefixed, do not appear as a rootpdelieexport, and are not publicly re-exported from any submodule (pdelie.tasks,pdelie.tasks.discovery,pdelie.tasks.weak_pde_library,pdelie.discovery). The0.31row ofconfigs/release_gate_manifest.jsonrecords these names inforbidden_root_attributesandforbidden_submodule_attributesso the private status is enforced bytests/test_release_gates.py.The policy declares the following non-claims: no WSINDy benchmark; no noise robustness claim (no clean-vs-noisy gate); no nonperiodic discovery; no PDEBench / The Well support claim; no
pdelie.residuals.weak_1dretirement; no PySINDy 2.x support inv0.31.v0.31b3does not add any file undersrc/, does not create the_pysindy_compatshim, does not bumppyproject.toml, and does not add a new CI job. The two existing blocking CI jobs (editable-tests,v0_30-release-gate) are updated to pinpysindy==1.7.5explicitly to match the compatibility matrix’s declared primary tested version.
Runtime-level APIs are versioned public APIs, but they are not canonical objects. They are backend-specific and may change with a version bump.
These must not change without version bump.
Experimental API#
neural generators
weak-form derivatives and weak-form methods beyond the frozen
v0.8weak residual report slice and thev0.24weak supportability reporting layeroperator symmetry
advanced invariant maps
broad dataset adapters, file loaders, metadata inference engines, resampling APIs, and broad Dataset-level ingestion
multi-generator invariant machinery, finite flows, BCH composition, and public multi-generator PDE fitting
These may change without warning.
Internal / Private#
helper utilities
intermediate representations
pdelie._boundary— internalBoundaryFace,BoundaryConditionSpec,normalize_x_boundary_condition,get_x_boundary_type,is_x_periodic. The module is intentionally underscore-prefixed and not re-exported from any submodule. Callers outsidepdelie/*must not import it.pdelie.contracts._translation_generator_basis_spec,_TRANSLATION_GENERATOR_BASIS_LABELS, and other underscore-prefixed helpers onpdelie.contracts. Used bypdelie/*internal code and bytests/*release-gate fixtures; not part of the public surface.pdelie.reporting.summaries._validate_strict_json_compatible,_validate_json_compatible,_summary_payload,_json_safe,_component_status. Public summaries wire to these; downstream consumers should not import them directly.pdelie.discovery.contracts._json_safe,_summary_payload,_residual_summary_or_none, and other underscore-prefixed helpers.Every private submodule (
pdelie/*/__init__.pyre-exports the public surface; anything not re-exported is internal even if not underscore-prefixed).
Surface Matrix#
Four-column view of the current surface. Rows are grouped by category. Downstream tooling and contributors should treat this table as the source of truth about what may or may not be relied on. Any addition to public stable requires a scope-freeze note in the release that introduces it; any removal is a breaking change and is not permitted through a semver-patch release.
Category |
Surface |
Notes |
|---|---|---|
public stable — canonical objects |
|
Frozen since v0.1.x–v0.3. Schema versions on |
public stable — v0.4 symmetry diagnostics |
|
Frozen since v0.4. Viz path is optional ( |
public stable — v0.5 portability |
|
Frozen since v0.5. |
public stable — v0.6 discovery bridge |
|
Frozen since v0.6. |
public stable — v0.7 external ingestion |
|
Frozen since v0.7. v0.28 added |
public stable — v0.8 weak residual report |
|
Frozen since v0.8; periodic-only. v0.31 adds a |
public stable — v0.9 KdV strong path |
|
Frozen since v0.9; normalized short-horizon only; periodic-only. |
public stable — v0.10 reporting consolidation |
|
Frozen since v0.10. |
public stable — v0.11/v0.30c derivatives |
|
|
public stable — v0.12 fit diagnostics |
|
Frozen since v0.12. |
public stable — v0.13/v0.14/v0.15 invariants |
|
Frozen at their respective release milestones. |
public stable — v0.16/v0.17 candidate validation |
|
Frozen at v0.16 and v0.17 respectively. |
public stable — v0.18/v0.19 additional strong paths |
|
Frozen at v0.18 and v0.19. v0.30d added auto-dispatch for nonperiodic BCs. |
public stable — v0.20–v0.24 reporting extensions |
|
Frozen at their respective releases; each ships an owner-defined label vocabulary — see |
public stable — v0.28 xarray Dataset |
|
Frozen at v0.28. Optional ( |
public stable — v0.31b1 discovery task |
|
Frozen at v0.31b1. Submodule-only; no root |
public stable — v0.31b2 WeakPDELibrary diagnostic |
|
Frozen at v0.31b2. Submodule-only; no root |
public experimental |
neural generators; weak-form derivatives and weak-form methods beyond the v0.8 slice and v0.24 supportability layer; operator symmetry; advanced invariant maps; broad dataset adapters, file loaders, metadata inference engines, resampling APIs; multi-generator invariant machinery, finite flows, BCH composition, public multi-generator PDE fitting |
May change without warning. Not covered by semver. |
internal — modules |
|
Underscore-prefixed. Callers outside |
internal — helpers |
|
Used by |
deferred — surfaces named in v0.30.0 close note |
root |
See the v0.30.0 stable public-surface note above for the full list. |
deferred — hygiene |
|
Advisory-to-blocking promotion sequence is documented in |
deferred — additive reporting fields |
|
Additive extension, non-breaking; downstream consumers may pre-register keys but must accept |
The rule: anything not in this matrix is either (a) covered by the per-release Stable / Runtime / Decision-only notes above, or (b) not stable. The three categories cover every callable and every JSON field the current release documents.
No stability guarantees.