TNFR Logo
TheoryLearnSoftwareResearch

On this page

TNFR

Resonant Fractal Nature Theory — a mathematical framework for coherent patterns on graph-coupled networks.

About
  • Project history
  • Editorial policy
  • Contact
Resources
  • GitHub
  • PyPI
  • DOI · Zenodo
Legal
  • MIT License
  • Citation
© 2026 TNFR project — MIT licensed.DOI 10.5281/zenodo.17602860
docs
grammar
PHYSICS_VERIFICATION.md
API_CONTRACTS.mdCANONICAL_OZ_SEQUENCES.mdEMPIRICAL_CONFRONTATION_EEG.mdREADME.mdSTRUCTURAL_FIELDS_TETRAD.mdSTRUCTURAL_INTERFACE_THEORY.md
theory
APPLIED_STRUCTURAL_ANALYSIS.mdCATALOG_TYPE_HYGIENE_PROGRAMME.mdDISSIPATIVE_AND_OPEN_SYSTEMS.mdEMERGENT_ONTOLOGY.mdEXTENDED_FIELDS_AND_DERIVED_QUANTITIES.mdFUNDAMENTAL_THEORY.mdGAUGE_SYMMETRY_AND_UNIFICATION.mdGLOSSARY.mdMATHEMATICAL_DYNAMICS_BASIS.mdMINIMAL_STRUCTURAL_DEGREES.mdNUCLEUS_A_PRIME_LADDER_ATLAS.mdNUCLEUS_B_EQUIVARIANCE_OBSTRUCTIONS.mdPHYSICAL_REGIME_CORRESPONDENCES.mdREADME.mdREMESH_INFINITY_DERIVATION.mdSTRUCTURAL_CONSERVATION_THEOREM.mdSTRUCTURAL_OPERATORS.mdSTRUCTURAL_STABILITY_AND_DYNAMICS.mdTNFR_BSD_RESEARCH_NOTES.mdTNFR_HODGE_RESEARCH_NOTES.mdTNFR_NAVIER_STOKES_RESEARCH_NOTES.mdTNFR_NUMBER_THEORY.mdTNFR_P_VS_NP_RESEARCH_NOTES.mdTNFR_RIEMANN_RESEARCH_NOTES.mdTNFR_VARIATIONAL_PRINCIPLE.mdTNFR_YANG_MILLS_RESEARCH_NOTES.mdTNFR.pdfUNIFIED_GRAMMAR_RULES.md
factorization-lab
analysis
analyze_patterns.pycertificate_manifest.py
benchmarks
benchmark_analysis.pybenchmark_expansion_suite.pyfull_spectrum_factorization.pypaley_gap_extended.pypaley_gap_smoke.pytest_benchmark_suite.py
demos
experiment_contexts
exp_0b1663cd19b7.jsonexp_0bf0054b7474.jsonexp_75a4c8ca616a.jsonexp_848ee0fd1857.jsonexp_f6fe00562193.jsonexp_fdf3da424e1e.json
failure_telemetry_batch.pyfeedback_integration_demo.pyintegration_demo_snapshots.dbseed_management_integration_demo.pysnapshot_integration_demo.pytrajectory_143.jsontrajectory_77.jsontrajectory_89.jsontrajectory_91.jsontrajectory_97.json
docs
FACTORING_PLAYBOOK.mdFALSE_POSITIVE_TEST_SUITE.mdOPERATOR_CERTIFICATES.mdROADMAP.mdSPECTRAL_ROUTE.md
experiment_contexts
exp_cebe1d9e7d8e.json
notebooks
spectral_history.ipynb
scripts
run_false_positive_tests.py
tests
run_false_positive_test_suite.pytest_cli.pytest_false_positive_methodology.pytest_false_positive_verifier.pytest_feedback_integration.pytest_partitioning.pytest_seed_management.pytest_self_opt_support.pytest_snapshot_system.pytest_spectral_paley.pytest_verification_robustness.py
tnfr_factorization
__init__.pyapi.pycli.pyfailure_telemetry.pyfeedback_adapter.pyfeedback_integration.pypartitioning.pyself_opt_support.pyspectral_paley.py
demo_snapshots.dbLICENSE_SNAPSHOT.mdPACKAGE_SUMMARY.mdREADME.mdseed_management.pysnapshot_system.pytest_certificate_hashing.pytest_installation.pyverification_trajectory_77.json
benchmarks
analyze_tetrad_universality.pyb0star_alpha_canonical_product_graphs.pybenchmark_optimization_tracks.pybenchmark_utils.pyboundary_vibration.pybridge_primes_riemann.pychiral_involution.pycli_utils.pycoherence_projector_sense_index.pycommutant_bridge.pycomposition_arithmetic.pyconfinement_zones_test.pyconservation_law_validation.pydirected_paley_bridge.pyemergent_arithmetic_pulse.pyemergent_atom_dynamics.pyemergent_atomic_shells.pyemergent_base_dimension.pyemergent_dimension_dynamics.pyemergent_fractal_pulse.pyemergent_fractal_simplex_dimension.pyemergent_integers_symmetry.pyemergent_musical_nfr.pyemergent_nfr_geometry.pyemergent_nfr_where.pyemergent_rationals.pyemergent_rhythm.pyemergent_screening.pyemergent_shell_cardinals.pyemergent_shell_ordering.pyemergent_simplex_dimension.pyemergent_substrate_symmetry.pyequivariance_wall.pyexternal_phase_gate_validation.pyfield_methods_battery.pygolden_residue_remesh_bridge.pyintegrated_force_regime_study.pyinverse_spectrum_to_symmetry.pyk_phi_safety_demo.pykuramoto_farey_bridge.pymissing_piece_bridge.pymultichannel_interface_benchmark.pynavier_stokes_recipe_bridge.pynodal_propagator_residue_bridge.pyns_moment_hierarchy_cascade.pyoperational_irreducibility.pypaley_bridge.pyphase_curvature_investigation.pyphase_wall.pyphi_s_confinement_investigation.pyprimes_as_consequence.pypulse_phase_coherence_budget.pyREADME.mdremesh_infinity_riemann_baseline.pyremesh_infinity_riemann_composed.pyremesh_infinity_riemann_modified_graph.pyremesh_infinity_riemann_operator.pyremesh_infinity_riemann_spectral_basis.pyremesh_infinity_riemann_spectral_robustness.pyremesh_infinity_riemann_spectral.pyresidue_phase_vs_riemann.pystructural_interface_benchmark.pytemporal_interface_benchmark.pytetrad_results_aggregate.pyu2_destabilization_irreversibility.pyuniversality_clusters.pyxi_c_fast_experiment.py
primality-test
benchmarks
comprehensive_benchmark.py
docs
ADVANCED_INTEGRATION.mdmathematical_foundation.mdperformance_analysis.md
examples
advanced_examples.pybasic_usage.py
tnfr_primality
__init__.py__main__.pyadvanced_cli.pyadvanced_core.pycli.pyconstants.pycore.pyoptimized.py
MANIFEST.inPACKAGE_SUMMARY.mdREADME.mdRELEASE_NOTES_v1.0.mdsetup.pytest_installation.py
tests
core_physics
__init__.pytest_conservation_laws.pytest_delta_nfr_computation_paths.pytest_delta_nfr.pytest_dispersion_coherence_sign_invariance.pytest_emergent_constants_guard.pytest_lyapunov_operators.pytest_nodal_equation.pytest_structural_triad.py
data
replay_manifests
sample_run
_manifest_summary.json_manifest.json_partition_files.txt.gz
self_opt_validation
seed_alpha
paley.json
seed_beta
integration.json
seed_gamma
unknown.json
self_optimization
test_run
partitioned
test_run
test_run_p0.jsontest_run_p1.json
_manifest_summary.json_manifest.json
engines
test_pattern_discovery_manifest.pytest_self_optimization_engine.py
mathematics
__init__.pytest_autodiff.pytest_backends.pytest_dissipative_dynamics.pytest_epi.pytest_factory_patterns.pytest_metrics.pytest_navier_stokes_refounded.pytest_number_theory_canonical.pytest_operators.pytest_residue_networks.pytest_riemann_nodal_pulse.pytest_riemann_pulse_coherence.pytest_spaces.pytest_transforms.pytest_validator.py
operators
test_canonical_operators_modern.pytest_grammar_canon.pytest_grammar_canonical_consistency.pytest_grammar_dynamics.pytest_operator_contracts.pytest_operator_strategies.py
parallel
test_fractal_partition_manifest.py
physics
test_conservation_gauge_unification.pytest_dissipative_conservation.pytest_emergent_chemistry.pytest_field_cache_invalidation.pytest_gauge.pytest_phase_transition.pytest_signatures.pytest_spectral_conservation.pytest_structural_diffusion.pytest_structural_integrity.pytest_symplectic_substrate.pytest_tetrad_bounds.pytest_variational.pytest_yang_mills_closure.pytest_yang_mills_derivability.pytest_yang_mills_scaling.pytest_yang_mills_structural_gap.pytest_yang_mills_u6_sweep.py
scripts
test_run_self_opt_validation.pytest_run_self_optimization.py
sdk
__init__.pytest_simple_advanced.py
__init__.pyconftest.pyREADME.mdtest_breast_cancer_phase_gate_demo.pytest_classical_mechanics.pytest_distributed_fft.pytest_external_phase_gate_validation.pytest_factorization_entrypoint.pytest_multichannel_interface.pytest_nodal_optimizer.pytest_phase_gate_api.pytest_replay_register_manifest.pytest_signal_confrontation.pytest_structural_interface_api.pytest_structural_interface_baselines.pytest_structural_interface_benchmark.pytest_temporal_interface.pytest_vectorized_coherence_length_regression.pytest_wine_quality_phase_gate_demo.pyutils.py
examples
01_foundations
01_hello_world.py02_musical_resonance.py03_network_formation.py04_operator_sequences.py05_coherence_evolution.py06_network_topologies.py07_phase_transitions.py08_emergent_phenomena.py09_visualization_suite.py10_simplified_sdk_showcase.py
02_physics_regimes
11_classical_limit_comparison.py115_operator_contract_audit.py12_classical_mechanics_demo.py13_quantum_mechanics_demo.py14_uncertainty_and_interference.py15_train_crossing_demo.py17_conservation_law_demo.py26_gauge_structure_demo.py27_variational_principle_demo.py28_dissipative_systems_demo.py29_lyapunov_stability_demo.py30_self_optimization_demo.py31_mathematical_constants_basis.py33_complex_field_unification.py34_conservation_protocol_suite.py35_tetrad_irreducibility.py36_grammar_violation_detector.py37_operator_tetrad_synergy.py38_grammar_energy_landscape.py39_nodal_equation_decomposition.py
03_riemann_zeta
157_nodal_pulse_phase_attack.py41_von_mangoldt_zeta_demo.py42_riemann_zeros_as_resonances.py43_prime_ladder_hamiltonian_demo.py44_weil_explicit_formula_demo.py45_li_keiper_demo.py46_weil_tnfr_positivity_demo.py47_alpha_sweep_demo.py48_admissible_family_sweep_demo.py49_nodeaware_gauge_sweep_demo.py50_uniform_coercivity_demo.py51_adaptive_coercivity_demo.py52_paley_gap_coercivity_demo.py53_lyapunov_spectral_positivity_demo.py54_hilbert_polya_demo.py55_structural_zero_density_demo.py56_spectral_emergence_demo.py57_admissible_rescaling_demo.py58_oscillatory_correction_demo.py
04_riemann_L_twisted
59_dirichlet_l_function_demo.py60_dirichlet_l_continuation_demo.py61_dirichlet_l_hamiltonian_demo.py62_dirichlet_weil_explicit_formula_demo.py63_dirichlet_li_keiper_demo.py64_twisted_weil_positivity_demo.py65_twisted_alpha_sweep_demo.py66_twisted_admissible_family_sweep_demo.py67_twisted_nodeaware_gauge_sweep_demo.py68_twisted_hermite_family_demo.py69_twisted_coercivity_uniform_demo.py70_twisted_paley_gap_coercivity_demo.py71_twisted_lyapunov_spectral_demo.py72_twisted_hilbert_polya_demo.py73_twisted_structural_zero_density_demo.py74_twisted_spectral_emergence_demo.py75_twisted_admissible_rescaling_demo.py76_twisted_oscillatory_correction_demo.py
05_type_hygiene
77_remesh_infinity_residue_split_demo.py78_nuf_type_signature_demo.py79_epi_type_signature_demo.py80_phi_type_signature_demo.py81_dnfr_type_signature_demo.py82_remesh_window_type_signature_demo.py83_delta_phi_max_type_signature_demo.py84_coupling_weights_type_signature_demo.py85_tetrad_closure_signature_demo.py86_currents_closure_signature_demo.py87_aggregates_closure_signature_demo.py88_urules_consistency_signature_demo.py89_operator_catalog_discipline_signature_demo.py
06_navier_stokes
158_navier_stokes_two_face_refounded.py
07_number_theory
100_prime_families_orbits.py101_numbers_as_coupled_network.py102_nodal_flow_primes_equilibria.py116_nuf_emergent_prime_visibility.py146_primality_grammatical_inertness.py147_numbers_as_free_monoid_words.py148_capacity_arm_carries_von_mangoldt.py149_p14_is_the_capacity_arm_operator.py153_structural_frequency_rank_cyclotomy.py40_arithmetic_number_theory.py94_generative_number_construction.py95_primes_from_spectral_waves.py96_spectral_vibration_of_coherence.py97_goldbach_additive_multiplicative.pyemergent_chemistry_particles_demo.py
08_emergent_geometry
103_emergent_substrate_meets_riemann.py106_per_node_polarization_geometry.py107_orthogonal_structure_emergent_geometry.py108_emergent_field_generating_structure.py112_structure_predicts_coherence_flow.py113_overdamped_projection_bridge.py114_substrate_conserved_quantities.py117_emergent_geometry_residue_graph.py118_emergent_vs_classical_operator.py119_phase_sector_directed_residue.py120_symmetry_wall_substrate_vs_spectrum.py121_canonical_symmetry_break_negative.py122_factorization_phase_sector.py123_symmetry_sector_decomposition.py124_emergent_metric_fractal_consistency.py125_node_is_the_emergent_substrate.py126_two_layers_base_fiber.py127_base_is_emergent_not_imposed.py128_base_substrate_coemergence.py129_spectral_gap_base_fiber_clock.py130_operators_break_substrate_charges.py131_coemergent_loop_convergence.py132_geometric_phase_holonomy.py133_psi_topological_defects.py134_spectral_dimension_heat_kernel.py135_arrow_of_time_h_theorem.py136_heat_kernel_coefficients.py137_synchronization_transition.py138_structure_frequency_synchronization.py139_grammar_formal_language.py140_grammar_automaton.py141_grammar_rule_decomposition.py142_grammar_operator_quotient.py143_glyphic_function_sublanguage.py144_branching_combinator.py145_syntactic_monoid_starfree.py150_emergent_grammatical_pattern_parry.py151_grammar_in_emergent_geometry.py152_operator_contract_tetrahedron.py154_conductor_annotated_qr_spectrum.py155_ontological_position_of_numbers.py156_emergence_directness_law.py98_emergent_symplectic_substrate.py99_structural_diffusion.pyunified_fields_showcase.py
09_millennium
109_p_vs_np_coherence_synthesis.py110_bsd_rank_structural_pressure.py111_hodge_discrete_and_honest_gap.py
10_applications
159_empirical_confrontation_pipeline.py90_phase_gate_monitor_demo.py91_breast_cancer_phase_gate_demo.py92_wine_quality_phase_gate_demo.py93_structural_interface_demo.pypytorch_cuda_demo.py
README.md
scripts
replay
__init__.pyregister_manifest.py
__init__.pyREADME.mdrebuild_failure_manifest.pyrun_reproducible_benchmarks.pyrun_self_opt_validation.pyrun_self_optimization.pytnfr_is_prime.pyvalidate_conservation_law.pyverify_internal_references.py
src
core
__init__.pyevaluation.py
tnfr
backends
__init__.pyjax_backend.pynumpy_backend.pyoptimized_numpy.pyREADME.mdtorch_backend.py
cli
__init__.py__init__.pyiarguments.pyarguments.pyiexecution.pyexecution.pyiinteractive_validator.pyREADME.mdutils.pyutils.pyi
compat
__init__.pydataclass.pyjsonschema_stub.pymatplotlib_stub.pynumpy_stub.pyREADME.md
config
__init__.py__init__.pyiconstants.pyconstants.pyidefaults_core.pydefaults_init.pydefaults_metric.pydefaults.pyfeature_flags.pyfeature_flags.pyiglyph_constants.pyoperator_names.pyoperator_names.pyiphysics_derivation.pyprecision_modes.pypresets.pypresets.pyiREADME.mdsecurity.pythresholds.pytnfr_config.py
constants
__init__.py__init__.pyialiases.pyaliases.pyicanonical.pymetric.pymetric.pyioperational.py
core
__init__.pycontainer.pydefault_implementations.pyexceptions.pyinterfaces.pyREADME.md
dynamics
__init__.py__init__.pyiadaptation.pyadaptation.pyiadaptive_sequences.pyadaptive_sequences.pyiadelic.pyadvanced_cache_optimizer.pyadvanced_fft_arithmetic.pyaliases.pyaliases.pyibifurcation.pycache_aware_fft_engine.pycanonical.pycanonical.pyicomputational_hub.pycoordination.pycoordination.pyidistributed_fft.pydnfr.pydnfr.pyidynamic_limits.pyemergent_centralization.pyemergent_integration_engine.pyfeedback.pyfeedback.pyifft_backend.pyfft_cache_coordinator.pyfft_dispatchers.pyfft_engine.pyfft_workers.pyfused_dnfr.pyhomeostasis.pyhomeostasis.pyiintegrators.pyintegrators.pyilearning.pylearning.pyimetabolism.pymulti_modal_cache.pynbody_tnfr.pynbody.pynodal_optimizer.pyoptimization_orchestrator.pypropagation.pyREADME.mdruntime.pyruntime.pyisampling.pysampling.pyiselectors.pyselectors.pyiself_optimizing_engine.pyspectral_structural_fusion.pystructural_cache.pystructural_clip.pysymplectic.pyunified_backend.pyunified_mathematical_cache_orchestrator.py
engines
computation
__init__.pyfft_engine.pyunified_fft_engine.pyunified_gpu_system.py
constants
__init__.pycanonical.pyoperational.py
integration
__init__.pyemergent_integration.py
pattern_discovery
__init__.pymathematical_patterns.pymulti_modal_cache.py
self_optimization
__init__.pyengine.py
__init__.pyREADME.md
errors
__init__.pycontextual.py
factorization
__init__.py
flatten
README.md
gamma
README.md
glyph_history
README.md
glyph_runtime
README.md
immutable
README.md
initialization
README.md
io
README.md
math
__init__.pyfields_symbolic.pygrammar_validators.pyoptimizer.pyREADME.mdsymbolic.py
mathematics
__init__.pybackend.pybackend.pyidynamics.pydynamics.pyiepi.pyepi.pyigenerators.pygenerators.pyiliouville.pymetrics.pymetrics.pyinumber_theory.pyoperators_factory.pyoperators_factory.pyioperators.pyoperators.pyioptimized_primality.pyprojection.pyprojection.pyiREADME.mdruntime.pyruntime.pyispaces.pyspaces.pyispectral.pytransforms.pytransforms.pyiunified_cache.pyunified_numerical.pyzeta.py
metrics
__init__.py__init__.pyibuffer_cache.pybuffer_cache.pyicache_utils.pycoherence.pycoherence.pyicommon.pycommon.pyicore.pycore.pyidiagnosis.pydiagnosis.pyiemergence.pyexport.pyexport.pyiglyph_timing.pyglyph_timing.pyilearning_metrics.pylearning_metrics.pyilocal_coherence.pyphase_coherence.pyphase_compatibility.pyREADME.mdreporting.pyreporting.pyisense_index.pysense_index.pyitelemetry.pytetrad.pytrig_cache.pytrig_cache.pyitrig.pytrig.pyi
multiscale
__init__.pyhierarchical.pyREADME.md
navier_stokes
__init__.pyconservative_face.pyoperator.py
node
README.md
observers
README.md
operators
network_analysis
__init__.pysource_detection.py
postconditions
__init__.pymutation.py
preconditions
__init__.pycoherence.pydissonance.pyemission.pymutation.pyreception.pyresonance.py
strategies
__init__.pydefaults.pygpu_strategies.pystrategy.py
__init__.py__init__.pyialgebra.pycanonical_patterns.pycascade.pycoherence.pycontraction.pycoupling.pycycle_detection.pydefinitions_base.pydefinitions.pydefinitions.pyidissonance.pyemission.pyexpansion.pygrammar_application.pygrammar_canon.pygrammar_context.pygrammar_core.pygrammar_dynamics.pygrammar_error_factory.pygrammar_memoization.pygrammar_patterns.pygrammar_telemetry.pygrammar_types.pygrammar_u6.pygrammar_validate.pygrammar.pygrammar.pyihamiltonian.pyhealth_analyzer.pyintrospection.pyjitter.pyjitter.pyilifecycle.pymetabolism.pymetrics_basic.pymetrics_core.pymetrics_network.pymetrics_structural.pymetrics_u6.pymetrics.pymutation.pynodal_equation.pyoperator_contracts.pypattern_detection.pypatterns.pyREADME.mdreception.pyrecursivity.pyregistry.pyregistry.pyiremesh.pyremesh.pyiresonance.pyself_organization.pysilence.pystructural_units.pytransition.py
parallel
__init__.pyauto_scaler.pydistributed.pyengine.pymonitoring.pypartitioner.pyREADME.md
performance
guardrails.py
physics
__init__.py_helpers.pycalibration.pycanonical.pycell.pyclassical_mechanics.pyconservation_gauge_unification.pyconservation.pydissipative_conservation.pyemergent_chemistry.pyemergent_particles.pyextended.pyfields.pygauge.pyintegrity.pyinteractions.pylife.pylyapunov.pypatterns.pyphase_transition.pyquantum_mechanics.pyREADME.mdsignatures.pyspectral_conservation.pyspectral_metrics.pystructural_diffusion.pysymplectic_substrate.pytelemetry.pyunified.pyvariational.pyvectorized_ops.py
primality
__init__.py
recipes
__init__.pycookbook.pyREADME.md
riemann
__init__.pyadmissible_family_sweep.pyadmissible_rescaling.pyaggregates_closure_signature.pyalpha_sweep.pyanalytic_continuation_dirichlet.pyanalytic_continuation.pycoercivity_uniform.pycoupling_weights_type_signature.pycurrents_closure_signature.pydelta_phi_max_type_signature.pydirichlet_l.pydnfr_type_signature.pyepi_type_signature.pyhilbert_polya.pyli_keiper.pylyapunov_spectral_positivity.pynodal_pulse.pynodeaware_gauge_sweep.pynuf_type_signature.pyoperator_catalog_discipline_signature.pyoperator.pyoscillatory_correction.pypaley_gap_coercivity.pyphi_type_signature.pyprime_ladder_hamiltonian.pypulse_coherence.pyremesh_infinity_residue_split.pyremesh_window_type_signature.pyspectral_emergence.pystructural_zero_density.pytelemetry.pytetrad_closure_signature.pytwisted_admissible_family_sweep.pytwisted_admissible_rescaling.pytwisted_alpha_sweep.pytwisted_coercivity_uniform.pytwisted_hermite_family.pytwisted_hilbert_polya.pytwisted_li_keiper.pytwisted_lyapunov_spectral_positivity.pytwisted_nodeaware_gauge_sweep.pytwisted_oscillatory_correction.pytwisted_paley_gap_coercivity.pytwisted_prime_ladder_hamiltonian.pytwisted_spectral_emergence.pytwisted_structural_zero_density.pytwisted_weil_explicit_formula.pytwisted_weil_positivity.pyurules_consistency_signature.pyvon_mangoldt.pyweil_explicit_formula.pyweil_positivity.py
schemas
__init__.pygrammar.jsonREADME.md
sdk
__init__.py__init__.pyiadaptive_system.pyadaptive_system.pyibuilders.pybuilders.pyifluent.pyfluent.pyiREADME.mdself_opt.pysimple.pytemplates.pytemplates.pyiutils.py
security
__init__.pycrypto.pydatabase.pyREADME.mdsubprocess.pyvalidation.py
sequencing
__init__.pypatterns.pyREADME.md
services
__init__.pyorchestrator.pyREADME.md
sparse
__init__.pyREADME.mdrepresentations.py
structural
README.md
telemetry
__init__.pycache_metrics.pycache_metrics.pyiconstants.pynu_f.pynu_f.pyiREADME.mdunified_telemetry_system.pyverbosity.pyverbosity.pyi
tools
__init__.pydomain_templates.pyREADME.mdsequence_generator.pytnfr_is_prime_cli_optimized.pytnfr_is_prime_cli.py
topology
__init__.pyasymmetry.pyREADME.md
utils
cache_layers.pycache.pycache.pyicallbacks.pycallbacks.pyichunks.pychunks.pyidata.pydata.pyifast_diameter.pygraph.pygraph.pyiinit.pyinit.pyiio.pyio.pyinumeric.pynumeric.pyiREADME.mdtopology.pyunified_cache.py
validation
__init__.py__init__.pyiaggregator.pybase.pycompatibility.pycompatibility.pyiconfig.pygraph.pygraph.pyihealth.pyinput_validation.pyinterface_baselines.pyinvariants.pymultichannel_interface.pyphase_gate.pyREADME.mdrules.pyrules.pyiruntime.pyruntime.pyisequence_validator.pysignal_confrontation.pysoft_filters.pysoft_filters.pyispectral.pyspectral.pyistructural_interface.pytemporal_interface.pyunified_validation_system.pyvalidator.pywindow.pywindow.pyi
visualization
__init__.pycascade_viz.pyhierarchy.pyREADME.mdsequence_plotter.py
yang_mills
__init__.pyclosure.pyderivability.pyscaling.pystructural_gap.pyu6_sweep.py
__init__.py__init__.pyi_compat.py_version.py_version.pyialias.pyalias.pyibackend_config.pycache.pycache.pyiexecution.pyexecution.pyiflatten.pyflatten.pyigamma.pygamma.pyiglyph_history.pyglyph_history.pyiglyph_runtime.pyglyph_runtime.pyiimmutable.pyimmutable.pyiinitialization.pyinitialization.pyiio.pyio.pyilocking.pylocking.pyinode.pynode.pyiobservers.pyobservers.pyiontosim.pyontosim.pyipy.typedrng.pyrng.pyisecure_config.pyselector.pyselector.pyisense.pysense.pyistructural.pystructural.pyitokens.pytokens.pyitrace.pytrace.pyitypes.pytypes.pyiunits.pyunits.pyi
tetrad_evaluator.py
.pre-commit-config.yaml.semgrep.yaml.zenodo.jsonARCHITECTURE.mdbandit.yamlCHANGELOG.mdCITATION.cffCONTRIBUTING.mdEMERGENT_CANON_AUDIT.mdEMERGENT_DERIVATION_PLAN.mdLICENSE.mdMakefileMANIFEST.inpyproject.tomlpyrightconfig.jsonPYTORCH_CUDA_INTEGRATION.mdREADME.mdSECURITY.mdTESTING.mdTNFR_Website_Content_Brief.md
FILE: src/tnfr/validation/phase_gate.py

phase_gate.py

Phase-gated coupling diagnostics for graph signals.

This module turns the U3 phase-compatibility idea into a reusable validation surface. It answers a practical question: given a graph and a phase value per node, which edges are locally compatible enough to couple?

The functions are read-only telemetry. They do not mutate EPI, phases, DNFR, or graph topology.

Source Code

python
"""Phase-gated coupling diagnostics for graph signals.

This module turns the U3 phase-compatibility idea into a reusable validation
surface.  It answers a practical question: given a graph and a phase value per
node, which edges are locally compatible enough to couple?

The functions are read-only telemetry.  They do not mutate EPI, phases, DNFR,
or graph topology.
"""

from __future__ import annotations

import html
import json
import math
from dataclasses import dataclass
from pathlib import Path
from typing import Any, Iterable, Mapping, Sequence

try:
    import networkx as nx
except ImportError:  # pragma: no cover - optional dependency guard
    nx = None  # type: ignore[assignment]

from ..physics.fields import (
    compute_phase_curvature,
    compute_phase_gradient,
    compute_structural_potential,
)

TAU = 2.0 * math.pi
DEFAULT_PHASE_GATE = math.pi / 4.0
DEFAULT_MIN_COMPLIANCE = 0.90


def _mean(values: Iterable[float], default: float = 0.0) -> float:
    data = [float(v) for v in values]
    return sum(data) / len(data) if data else default


def _json_safe_node(node: Any) -> Any:
    if node is None or isinstance(node, (str, int, float, bool)):
        return node
    return repr(node)


def _json_safe_target(target: Any) -> Any:
    if isinstance(target, tuple):
        return [_json_safe_target(item) for item in target]
    if isinstance(target, list):
        return [_json_safe_target(item) for item in target]
    return _json_safe_node(target)


def _require_networkx() -> None:
    if nx is None:
        raise RuntimeError("networkx is required for phase-gate diagnostics")


def wrap_angle(angle: float) -> float:
    """Wrap an angular difference to ``(-pi, pi]``."""
    return (float(angle) + math.pi) % TAU - math.pi


def get_node_phase(
    G: Any,
    node: Any,
    *,
    phase_keys: Sequence[str] = ("phase", "theta"),
    default: float = 0.0,
) -> float:
    """Read a node phase using TNFR-compatible phase aliases."""
    data = G.nodes[node]
    for key in phase_keys:
        if key in data:
            return float(data[key])
    return float(default)


def node_phases(
    G: Any,
    *,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> list[float]:
    """Return node phases in graph iteration order."""
    return [get_node_phase(G, node, phase_keys=phase_keys) for node in G.nodes()]


def circular_order_parameter(phases: Sequence[float]) -> float:
    """Return the Kuramoto global order parameter ``R`` in ``[0, 1]``."""
    if not phases:
        return 1.0
    cos_mean = _mean(math.cos(float(p)) for p in phases)
    sin_mean = _mean(math.sin(float(p)) for p in phases)
    return math.hypot(cos_mean, sin_mean)


def phase_histogram_entropy(phases: Sequence[float], bins: int = 16) -> float:
    """Return normalized phase-histogram entropy in ``[0, 1]``."""
    if not phases or bins <= 1:
        return 0.0
    counts = [0] * bins
    for phase in phases:
        wrapped = float(phase) % TAU
        index = min(bins - 1, int((wrapped / TAU) * bins))
        counts[index] += 1
    total = sum(counts)
    if total <= 0:
        return 0.0
    entropy = 0.0
    for count in counts:
        if count <= 0:
            continue
        p = count / total
        entropy -= p * math.log(p)
    return entropy / math.log(bins)


@dataclass(frozen=True)
class PhaseGateViolation:
    """One edge whose phase difference exceeds the coupling gate."""

    u: Any
    v: Any
    phase_u: float
    phase_v: float
    phase_difference: float
    excess: float

    def as_dict(self) -> dict[str, Any]:
        return {
            "u": _json_safe_node(self.u),
            "v": _json_safe_node(self.v),
            "phase_u": self.phase_u,
            "phase_v": self.phase_v,
            "phase_difference": self.phase_difference,
            "excess": self.excess,
        }


@dataclass(frozen=True)
class PhaseGateCompliance:
    """Aggregate edge-local phase-gate compliance."""

    gate: float
    edge_count: int
    gated_edges: int
    violation_count: int
    compliance_ratio: float
    min_difference: float
    mean_difference: float
    max_difference: float
    violations: tuple[PhaseGateViolation, ...]

    def passed(self, min_compliance: float = DEFAULT_MIN_COMPLIANCE) -> bool:
        """Return True if enough edges are inside the gate."""
        return self.compliance_ratio >= float(min_compliance)

    def as_dict(self) -> dict[str, Any]:
        return {
            "gate": self.gate,
            "edge_count": self.edge_count,
            "gated_edges": self.gated_edges,
            "violation_count": self.violation_count,
            "compliance_ratio": self.compliance_ratio,
            "min_difference": self.min_difference,
            "mean_difference": self.mean_difference,
            "max_difference": self.max_difference,
            "violations": [violation.as_dict() for violation in self.violations],
        }


@dataclass(frozen=True)
class PhaseStressHotspot:
    """Node ranked by local phase stress and incident gate violations."""

    node: Any
    phase: float
    phase_gradient: float
    abs_curvature: float
    incident_violation_count: int
    incident_excess: float
    stress_score: float

    def as_dict(self) -> dict[str, Any]:
        return {
            "node": _json_safe_node(self.node),
            "phase": self.phase,
            "phase_gradient": self.phase_gradient,
            "abs_curvature": self.abs_curvature,
            "incident_violation_count": self.incident_violation_count,
            "incident_excess": self.incident_excess,
            "stress_score": self.stress_score,
        }


@dataclass(frozen=True)
class PhaseGateOperatorPrescription:
    """TNFR canonical operator sequence suggested by the phase-gate state.

    Prescriptions are read-only guidance.  They do not apply operators or mutate
    the graph; they map U3 phase-gate telemetry to TNFR's canonical operator
    vocabulary so downstream systems can decide how to act.
    """

    scope: str
    target: Any
    sequence: tuple[str, ...]
    priority: float
    grammar_basis: tuple[str, ...]
    rationale: str
    expected_effect: str

    def as_dict(self) -> dict[str, Any]:
        return {
            "scope": self.scope,
            "target": _json_safe_target(self.target),
            "sequence": list(self.sequence),
            "priority": self.priority,
            "grammar_basis": list(self.grammar_basis),
            "rationale": self.rationale,
            "expected_effect": self.expected_effect,
        }


@dataclass(frozen=True)
class PhaseGateReport:
    """Full phase-gate diagnostic report."""

    compliance: PhaseGateCompliance
    hotspots: tuple[PhaseStressHotspot, ...]
    baseline_summary: Mapping[str, Any]
    min_compliance: float
    recommendation: str
    operator_prescriptions: tuple[PhaseGateOperatorPrescription, ...] = ()

    def as_dict(self) -> dict[str, Any]:
        return {
            "compliance": self.compliance.as_dict(),
            "hotspots": [hotspot.as_dict() for hotspot in self.hotspots],
            "baseline_summary": dict(self.baseline_summary),
            "min_compliance": self.min_compliance,
            "recommendation": self.recommendation,
            "operator_prescriptions": [
                prescription.as_dict() for prescription in self.operator_prescriptions
            ],
        }


def edge_phase_difference(
    G: Any,
    u: Any,
    v: Any,
    *,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> float:
    """Return absolute wrapped phase difference for one edge or node pair."""
    phase_u = get_node_phase(G, u, phase_keys=phase_keys)
    phase_v = get_node_phase(G, v, phase_keys=phase_keys)
    return abs(wrap_angle(phase_u - phase_v))


def edge_phase_differences(
    G: Any,
    *,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> list[float]:
    """Return absolute wrapped phase differences over graph edges."""
    return [edge_phase_difference(G, u, v, phase_keys=phase_keys) for u, v in G.edges()]


def detect_phase_gate_violations(
    G: Any,
    gate: float = DEFAULT_PHASE_GATE,
    *,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> list[PhaseGateViolation]:
    """Return edges whose wrapped phase difference exceeds ``gate``."""
    violations: list[PhaseGateViolation] = []
    gate_value = float(gate)
    for u, v in G.edges():
        phase_u = get_node_phase(G, u, phase_keys=phase_keys)
        phase_v = get_node_phase(G, v, phase_keys=phase_keys)
        difference = abs(wrap_angle(phase_u - phase_v))
        if difference > gate_value:
            violations.append(
                PhaseGateViolation(
                    u=u,
                    v=v,
                    phase_u=phase_u,
                    phase_v=phase_v,
                    phase_difference=difference,
                    excess=difference - gate_value,
                )
            )
    return violations


def compute_edge_gate_compliance(
    G: Any,
    gate: float = DEFAULT_PHASE_GATE,
    *,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> PhaseGateCompliance:
    """Compute edge-local phase-gate compliance for a graph state."""
    differences = edge_phase_differences(G, phase_keys=phase_keys)
    edge_count = len(differences)
    if edge_count == 0:
        return PhaseGateCompliance(
            gate=float(gate),
            edge_count=0,
            gated_edges=0,
            violation_count=0,
            compliance_ratio=1.0,
            min_difference=0.0,
            mean_difference=0.0,
            max_difference=0.0,
            violations=(),
        )
    gate_value = float(gate)
    gated_edges = sum(diff <= gate_value for diff in differences)
    violations = tuple(
        detect_phase_gate_violations(G, gate_value, phase_keys=phase_keys)
    )
    return PhaseGateCompliance(
        gate=gate_value,
        edge_count=edge_count,
        gated_edges=gated_edges,
        violation_count=len(violations),
        compliance_ratio=gated_edges / edge_count,
        min_difference=min(differences),
        mean_difference=_mean(differences),
        max_difference=max(differences),
        violations=violations,
    )


def rank_phase_stress_hotspots(
    G: Any,
    gate: float | None = DEFAULT_PHASE_GATE,
    *,
    top_n: int | None = None,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> list[PhaseStressHotspot]:
    """Rank nodes by local phase stress and incident gate violation excess."""
    grad = compute_phase_gradient(G)
    curvature = compute_phase_curvature(G)
    incident_counts = {node: 0 for node in G.nodes()}
    incident_excess = {node: 0.0 for node in G.nodes()}

    if gate is not None:
        for violation in detect_phase_gate_violations(
            G, float(gate), phase_keys=phase_keys
        ):
            incident_counts[violation.u] = incident_counts.get(violation.u, 0) + 1
            incident_counts[violation.v] = incident_counts.get(violation.v, 0) + 1
            incident_excess[violation.u] = (
                incident_excess.get(violation.u, 0.0) + violation.excess
            )
            incident_excess[violation.v] = (
                incident_excess.get(violation.v, 0.0) + violation.excess
            )

    hotspots: list[PhaseStressHotspot] = []
    for node in G.nodes():
        phase_gradient = float(grad.get(node, 0.0))
        abs_curvature = abs(float(curvature.get(node, 0.0)))
        excess = float(incident_excess.get(node, 0.0))
        count = int(incident_counts.get(node, 0))
        stress_score = phase_gradient + abs_curvature + excess
        hotspots.append(
            PhaseStressHotspot(
                node=node,
                phase=get_node_phase(G, node, phase_keys=phase_keys),
                phase_gradient=phase_gradient,
                abs_curvature=abs_curvature,
                incident_violation_count=count,
                incident_excess=excess,
                stress_score=stress_score,
            )
        )

    hotspots.sort(key=lambda item: item.stress_score, reverse=True)
    if top_n is not None:
        return hotspots[: max(0, int(top_n))]
    return hotspots


def prescribe_phase_gate_operators(
    G: Any,
    gate: float = DEFAULT_PHASE_GATE,
    *,
    min_compliance: float = DEFAULT_MIN_COMPLIANCE,
    top_n: int = 5,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> list[PhaseGateOperatorPrescription]:
    """Map phase-gate telemetry to TNFR canonical operator guidance.

    This is the TNFR-specific layer of the diagnostic: global baselines can say
    whether a signal looks ordered, and U3 telemetry says which edges are locally
    phase-compatible.  This function translates that structural state into a
    conservative canonical-operator prescription for an already-active graph
    state.  It is read-only guidance and must be followed by a fresh U3 check
    before any guarded ``UM``/``RA`` coupling attempt.
    """
    compliance = compute_edge_gate_compliance(G, gate, phase_keys=phase_keys)
    hotspots = rank_phase_stress_hotspots(
        G,
        gate,
        top_n=top_n,
        phase_keys=phase_keys,
    )
    prescriptions: list[PhaseGateOperatorPrescription] = []

    if compliance.edge_count == 0:
        return [
            PhaseGateOperatorPrescription(
                scope="network",
                target="edgeless_graph",
                sequence=("SHA",),
                priority=0.0,
                grammar_basis=("U1b", "structural metrology"),
                rationale="No graph edges are available for U3 phase-gated coupling.",
                expected_effect="Preserve the current EPI while topology is inspected.",
            )
        ]

    violation_pressure = 1.0 - compliance.compliance_ratio
    if compliance.passed(min_compliance) and compliance.violation_count == 0:
        prescriptions.append(
            PhaseGateOperatorPrescription(
                scope="network",
                target="all_edges",
                sequence=("UM", "RA", "SHA"),
                priority=0.0,
                grammar_basis=("U3", "U1b"),
                rationale="All edges satisfy the U3 phase gate.",
                expected_effect="Allow guarded coupling and resonance propagation, then close observation.",
            )
        )
        return prescriptions

    if compliance.passed(min_compliance):
        prescriptions.append(
            PhaseGateOperatorPrescription(
                scope="network",
                target="mostly_compatible_graph",
                sequence=("IL", "UM", "SHA"),
                priority=violation_pressure,
                grammar_basis=("U3", "U1b", "operator postconditions"),
                rationale=(
                    "Minimum U3 compliance passes, but some local edges still "
                    "exceed the phase gate."
                ),
                expected_effect="Stabilize local phase stress before guarded coupling.",
            )
        )
    else:
        prescriptions.append(
            PhaseGateOperatorPrescription(
                scope="network",
                target="phase_gate_failed",
                sequence=("IL", "OZ", "THOL", "SHA"),
                priority=violation_pressure,
                grammar_basis=("U3", "U2", "U4", "U1b", "U5"),
                rationale=(
                    "U3 compliance is below the configured minimum; new coupling "
                    "should be held while stress is stabilized through controlled "
                    "dissonance and self-organization."
                ),
                expected_effect="Stabilize base state, open controlled reorganization, self-organize, then close before remeasurement.",
            )
        )

    for hotspot in hotspots:
        if hotspot.incident_violation_count <= 0 and hotspot.stress_score <= float(
            gate
        ):
            continue
        sequence = (
            ("IL", "OZ", "THOL", "SHA")
            if hotspot.incident_violation_count
            else ("IL", "SHA")
        )
        basis = (
            ("U2", "U4", "U5", "U1b")
            if hotspot.incident_violation_count
            else ("U1b", "structural metrology")
        )
        prescriptions.append(
            PhaseGateOperatorPrescription(
                scope="node",
                target=hotspot.node,
                sequence=sequence,
                priority=hotspot.stress_score,
                grammar_basis=basis,
                rationale=(
                    f"Hotspot has grad_phi={hotspot.phase_gradient:.6f}, "
                    f"abs K_phi={hotspot.abs_curvature:.6f}, and "
                    f"{hotspot.incident_violation_count} incident gate violation(s)."
                ),
                expected_effect="Lower local phase-gradient/curvature stress before any UM/RA retry.",
            )
        )

    prescriptions.sort(key=lambda item: item.priority, reverse=True)
    return prescriptions[: max(1, int(top_n) + 1)]


def _topology_baselines(G: Any) -> dict[str, float]:
    _require_networkx()
    node_count = int(G.number_of_nodes())
    edge_count = int(G.number_of_edges())
    avg_degree = sum(dict(G.degree()).values()) / node_count if node_count else 0.0
    clustering = float(nx.average_clustering(G)) if node_count else 0.0
    if node_count <= 1:
        diameter = 0.0
    elif nx.is_connected(G):
        diameter = float(nx.diameter(G))
    else:
        component_diameters = []
        for component in nx.connected_components(G):
            subgraph = G.subgraph(component)
            if subgraph.number_of_nodes() > 1:
                component_diameters.append(nx.diameter(subgraph))
        diameter = float(max(component_diameters, default=0.0))
    return {
        "topology_node_count": float(node_count),
        "topology_edge_count": float(edge_count),
        "topology_avg_degree": float(avg_degree),
        "topology_clustering": clustering,
        "topology_diameter": diameter,
    }


def compare_against_global_baselines(
    G: Any,
    gate: float = DEFAULT_PHASE_GATE,
    *,
    min_compliance: float = DEFAULT_MIN_COMPLIANCE,
    histogram_bins: int = 16,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> dict[str, Any]:
    """Return TNFR local telemetry and global/topological baselines.

    The returned dictionary is intentionally flat so it can be used as a row in
    benchmarks, CSV exports, dashboards, or ML feature pipelines.
    """
    compliance = compute_edge_gate_compliance(G, gate, phase_keys=phase_keys)
    grad = compute_phase_gradient(G)
    curvature = compute_phase_curvature(G)
    phi_s = compute_structural_potential(G)
    phases = node_phases(G, phase_keys=phase_keys)
    order_r = circular_order_parameter(phases)
    topology = _topology_baselines(G)

    grad_values = list(grad.values())
    curvature_values = [abs(v) for v in curvature.values()]
    phi_values = [abs(v) for v in phi_s.values()]

    return {
        "label": compliance.passed(min_compliance),
        "edge_gate_compliance": compliance.compliance_ratio,
        "edge_diff_mean": compliance.mean_difference,
        "edge_diff_max": compliance.max_difference,
        "tnfr_mean_phase_gradient": _mean(grad_values),
        "tnfr_max_phase_gradient": max(grad_values, default=0.0),
        "tnfr_mean_abs_curvature": _mean(curvature_values),
        "tnfr_phi_s_abs_mean": _mean(phi_values),
        "global_order_r": order_r,
        "circular_variance": 1.0 - order_r,
        "phase_histogram_entropy": phase_histogram_entropy(phases, bins=histogram_bins),
        **topology,
    }


def analyze_phase_gate(
    G: Any,
    gate: float = DEFAULT_PHASE_GATE,
    *,
    min_compliance: float = DEFAULT_MIN_COMPLIANCE,
    top_n: int = 10,
    histogram_bins: int = 16,
    phase_keys: Sequence[str] = ("phase", "theta"),
) -> PhaseGateReport:
    """Build a full phase-gate diagnostic report for a graph state."""
    compliance = compute_edge_gate_compliance(G, gate, phase_keys=phase_keys)
    hotspots = tuple(
        rank_phase_stress_hotspots(G, gate, top_n=top_n, phase_keys=phase_keys)
    )
    baseline_summary = compare_against_global_baselines(
        G,
        gate,
        min_compliance=min_compliance,
        histogram_bins=histogram_bins,
        phase_keys=phase_keys,
    )
    operator_prescriptions = tuple(
        prescribe_phase_gate_operators(
            G,
            gate,
            min_compliance=min_compliance,
            top_n=top_n,
            phase_keys=phase_keys,
        )
    )

    if compliance.passed(min_compliance) and compliance.violation_count == 0:
        recommendation = "couple"
    elif compliance.passed(min_compliance):
        recommendation = "couple_with_hotspot_monitoring"
    else:
        recommendation = "hold_coupling_and_stabilize_hotspots"

    return PhaseGateReport(
        compliance=compliance,
        hotspots=hotspots,
        baseline_summary=baseline_summary,
        min_compliance=float(min_compliance),
        recommendation=recommendation,
        operator_prescriptions=operator_prescriptions,
    )


def _markdown_table(headers: Sequence[str], rows: Iterable[Sequence[Any]]) -> str:
    header = "| " + " | ".join(str(h) for h in headers) + " |"
    sep = "| " + " | ".join("---" for _ in headers) + " |"
    body = ["| " + " | ".join(str(cell) for cell in row) + " |" for row in rows]
    return "\n".join([header, sep, *body])


def render_phase_gate_markdown(
    report: PhaseGateReport,
    *,
    title: str = "TNFR Phase-Gate Coupling Report",
) -> str:
    """Render a phase-gate report as Markdown."""
    comp = report.compliance
    baselines = report.baseline_summary
    hotspot_rows = [
        [
            item.node,
            f"{item.phase_gradient:.6f}",
            f"{item.abs_curvature:.6f}",
            item.incident_violation_count,
            f"{item.incident_excess:.6f}",
            f"{item.stress_score:.6f}",
        ]
        for item in report.hotspots
    ]
    baseline_rows = [
        ["TNFR mean grad_phi", f"{baselines['tnfr_mean_phase_gradient']:.6f}"],
        ["TNFR max grad_phi", f"{baselines['tnfr_max_phase_gradient']:.6f}"],
        ["TNFR mean abs K_phi", f"{baselines['tnfr_mean_abs_curvature']:.6f}"],
        ["TNFR abs Phi_s stress", f"{baselines['tnfr_phi_s_abs_mean']:.6f}"],
        ["Global order R", f"{baselines['global_order_r']:.6f}"],
        ["Phase histogram entropy", f"{baselines['phase_histogram_entropy']:.6f}"],
        ["Topology avg degree", f"{baselines['topology_avg_degree']:.6f}"],
    ]
    prescription_rows = [
        [
            item.scope,
            _json_safe_target(item.target),
            " → ".join(item.sequence),
            f"{item.priority:.6f}",
            ", ".join(item.grammar_basis),
            item.expected_effect,
        ]
        for item in report.operator_prescriptions
    ]
    return (
        "\n\n".join(
            [
                f"# {title}",
                "## Coupling decision",
                (
                    f"Recommendation: **{report.recommendation}**  \n"
                    f"Gate: {comp.gate:.6f} rad  \n"
                    f"Minimum compliance: {report.min_compliance:.2f}  \n"
                    f"Compliance: {comp.compliance_ratio:.4f} "
                    f"({comp.gated_edges}/{comp.edge_count} edges)  \n"
                    f"Violations: {comp.violation_count}  \n"
                    f"Mean edge Δφ: {comp.mean_difference:.6f} rad  \n"
                    f"Max edge Δφ: {comp.max_difference:.6f} rad"
                ),
                "## Baseline comparison",
                _markdown_table(["Metric", "Value"], baseline_rows),
                "## Phase-stress hotspots",
                _markdown_table(
                    [
                        "Node",
                        "grad_phi",
                        "abs K_phi",
                        "Violations",
                        "Incident excess",
                        "Stress score",
                    ],
                    hotspot_rows,
                ),
                "## TNFR canonical operator prescription",
                _markdown_table(
                    [
                        "Scope",
                        "Target",
                        "Sequence",
                        "Priority",
                        "Grammar basis",
                        "Expected effect",
                    ],
                    prescription_rows,
                ),
                "## Interpretation",
                (
                    "Use this report as a local coupling diagnostic.  High global "
                    "order does not guarantee edge-local compatibility; TNFR phase "
                    "gradient and curvature identify where the graph signal is "
                    "locally misaligned with the coupling topology.  The operator "
                    "prescription is TNFR-specific read-only guidance: it maps the "
                    "observed U3 state to canonical stabilization/coupling sequences."
                ),
            ]
        )
        + "\n"
    )


def render_phase_gate_html(
    report: PhaseGateReport,
    *,
    title: str = "TNFR Phase-Gate Coupling Report",
) -> str:
    """Render a phase-gate report as standalone HTML."""
    markdown = render_phase_gate_markdown(report, title=title)
    body: list[str] = []
    table_rows: list[str] = []
    in_table = False

    def flush_table() -> None:
        nonlocal table_rows, in_table
        if not in_table:
            return
        body.append("<table>")
        for index, raw in enumerate(table_rows):
            if index == 1:
                continue
            cells = [cell.strip() for cell in raw.strip("|").split("|")]
            tag = "th" if index == 0 else "td"
            body.append(
                "<tr>"
                + "".join(f"<{tag}>{html.escape(cell)}</{tag}>" for cell in cells)
                + "</tr>"
            )
        body.append("</table>")
        table_rows = []
        in_table = False

    for line in markdown.splitlines():
        if line.startswith("| "):
            in_table = True
            table_rows.append(line)
            continue
        flush_table()
        if line.startswith("# "):
            body.append(f"<h1>{html.escape(line[2:])}</h1>")
        elif line.startswith("## "):
            body.append(f"<h2>{html.escape(line[3:])}</h2>")
        elif line.strip():
            body.append(f"<p>{html.escape(line)}</p>")
    flush_table()

    return """<!DOCTYPE html>
<html lang=\"en\">
<head>
<meta charset=\"utf-8\">
<title>{title}</title>
<style>
body {{ font-family: Arial, sans-serif; margin: 2rem; line-height: 1.45; }}
table {{ border-collapse: collapse; width: 100%; margin: 1rem 0; }}
th, td {{ border: 1px solid #ccc; padding: 0.35rem 0.5rem; text-align: left; }}
th {{ background: #f3f5f7; }}
</style>
</head>
<body>
{body}
</body>
</html>
""".format(
        title=html.escape(title), body="\n".join(body)
    )


def export_phase_gate_report(
    G: Any,
    output_path: str | Path,
    *,
    gate: float = DEFAULT_PHASE_GATE,
    min_compliance: float = DEFAULT_MIN_COMPLIANCE,
    fmt: str | None = None,
    top_n: int = 10,
    title: str = "TNFR Phase-Gate Coupling Report",
) -> Path:
    """Analyze a graph and export a phase-gate report.

    Supported formats are ``json``, ``md``/``markdown``, and ``html``.  If
    ``fmt`` is omitted, the output file suffix is used.
    """
    path = Path(output_path)
    report = analyze_phase_gate(
        G,
        gate=gate,
        min_compliance=min_compliance,
        top_n=top_n,
    )
    inferred = path.suffix.lower().lstrip(".")
    format_name = (fmt or inferred or "json").lower()
    path.parent.mkdir(parents=True, exist_ok=True)
    if format_name == "json":
        path.write_text(json.dumps(report.as_dict(), indent=2) + "\n", encoding="utf-8")
    elif format_name in {"md", "markdown"}:
        path.write_text(
            render_phase_gate_markdown(report, title=title), encoding="utf-8"
        )
    elif format_name == "html":
        path.write_text(render_phase_gate_html(report, title=title), encoding="utf-8")
    else:
        raise ValueError("fmt must be one of: json, md, markdown, html")
    return path


__all__ = [
    "DEFAULT_MIN_COMPLIANCE",
    "DEFAULT_PHASE_GATE",
    "PhaseGateCompliance",
    "PhaseGateOperatorPrescription",
    "PhaseGateReport",
    "PhaseGateViolation",
    "PhaseStressHotspot",
    "analyze_phase_gate",
    "circular_order_parameter",
    "compare_against_global_baselines",
    "compute_edge_gate_compliance",
    "detect_phase_gate_violations",
    "edge_phase_difference",
    "edge_phase_differences",
    "export_phase_gate_report",
    "get_node_phase",
    "node_phases",
    "phase_histogram_entropy",
    "prescribe_phase_gate_operators",
    "rank_phase_stress_hotspots",
    "render_phase_gate_html",
    "render_phase_gate_markdown",
    "wrap_angle",
]