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/structural_interface.py

structural_interface.py

TNFR Structural Interface analysis on real graph data.

This module is the orchestration layer for TNFR Structural Interface Theory. It builds graphs from records, encodes a node state/label as a TNFR phase, and reuses the low-level phase-gate primitives in :mod:tnfr.validation.phase_gate to score graph-local structural interfaces: regions where neighbouring nodes are close under the graph relation but differ in phase/state.

Scope and honesty

The TNFR interface score here is computed from phase telemetry only (phase gradient, phase curvature, and incident phase-gate violation excess). When the phase encodes a class/label, this score is, by construction, a graph-local label-disagreement detector. It is therefore mathematically related to the classical k-NN disagreement baseline, which is included explicitly so the comparison is fair and the relationship is visible.

To make a non-circular claim, callers must supply an independent target to :func:evaluate_interface_scores (for example held-out model error, a temporal transition, or an expert review flag) rather than the local disagreement that the phase encoding already represents.

All functions are read-only telemetry: they do not mutate EPI, phases, dnfr, or graph topology, except for graph builders/encoders that create new graphs or explicitly set requested node attributes.

References

  • docs/STRUCTURAL_INTERFACE_THEORY_PLAN.md — roadmap and acceptance criteria
  • src/tnfr/validation/phase_gate.py — low-level U3/tetrad diagnostics
  • AGENTS.md §"Telemetry & Structural Field Tetrad"

Source Code

python
"""TNFR Structural Interface analysis on real graph data.

This module is the orchestration layer for TNFR Structural Interface Theory.
It builds graphs from records, encodes a node state/label as a TNFR phase, and
reuses the low-level phase-gate primitives in :mod:`tnfr.validation.phase_gate`
to score graph-local *structural interfaces*: regions where neighbouring nodes
are close under the graph relation but differ in phase/state.

Scope and honesty
------------------
The TNFR interface score here is computed from phase telemetry only
(phase gradient, phase curvature, and incident phase-gate violation excess).
When the phase encodes a class/label, this score is, by construction, a
graph-local label-disagreement detector.  It is therefore mathematically
related to the classical k-NN disagreement baseline, which is included
explicitly so the comparison is fair and the relationship is visible.

To make a *non-circular* claim, callers must supply an independent target to
:func:`evaluate_interface_scores` (for example held-out model error, a temporal
transition, or an expert review flag) rather than the local disagreement that
the phase encoding already represents.

All functions are read-only telemetry: they do not mutate EPI, phases, ``dnfr``,
or graph topology, except for graph builders/encoders that create new graphs or
explicitly set requested node attributes.

References
----------
- ``docs/STRUCTURAL_INTERFACE_THEORY_PLAN.md`` — roadmap and acceptance criteria
- ``src/tnfr/validation/phase_gate.py`` — low-level U3/tetrad diagnostics
- AGENTS.md §"Telemetry & Structural Field Tetrad"
"""

from __future__ import annotations

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

try:
    import numpy as np
except ImportError:  # pragma: no cover - numpy is a core dependency
    np = None  # type: ignore[assignment]

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

from ..physics.fields import compute_structural_potential
from .interface_baselines import (
    compute_all_baselines,
    constant_baseline,
    degree_score,
    local_disagreement,
    mean_neighbour_distance,
)
from .phase_gate import (
    DEFAULT_MIN_COMPLIANCE,
    DEFAULT_PHASE_GATE,
    prescribe_phase_gate_operators,
    rank_phase_stress_hotspots,
)

__all__ = [
    "StructuralInterfaceProblem",
    "StructuralInterfaceScore",
    "build_knn_graph",
    "encode_phase_from_binary_state",
    "local_state_disagreement",
    "score_structural_interfaces",
    "interface_score_maps",
    "baseline_score_maps",
    "full_baseline_score_maps",
    "evaluate_interface_scores",
    "render_structural_interface_markdown",
    "render_structural_interface_html",
    "export_structural_interface_report",
]

_DEFAULT_DISTANCE_KEY = "distance"


def _require_networkx() -> None:
    if nx is None:  # pragma: no cover - optional dependency guard
        raise RuntimeError("networkx is required for structural-interface analysis")


def _require_numpy() -> None:
    if np is None:  # pragma: no cover - core dependency guard
        raise RuntimeError("numpy is required for structural-interface analysis")


# ---------------------------------------------------------------------------
# Data structures
# ---------------------------------------------------------------------------


@dataclass(frozen=True)
class StructuralInterfaceProblem:
    """A structural-interface problem definition over a graph.

    Parameters
    ----------
    graph:
        Graph whose nodes carry a phase and (optionally) a state/label.
    state_key:
        Node attribute holding the discrete state/label (e.g. class band).
    phase_key:
        Node attribute holding the TNFR phase.  Defaults to ``"phase"``.
    domain:
        Free-text sector tag (e.g. ``"biomedical"``) for reporting only.
    distance_key:
        Edge attribute holding the feature-space distance, when available.
    metadata:
        Arbitrary report metadata.
    """

    graph: Any
    state_key: str
    phase_key: str = "phase"
    domain: str = "generic"
    distance_key: str = _DEFAULT_DISTANCE_KEY
    metadata: Mapping[str, Any] = field(default_factory=dict)


@dataclass(frozen=True)
class StructuralInterfaceScore:
    """Per-node structural-interface telemetry and canonical prescription."""

    node: Any
    tnfr_stress: float
    phase_gradient: float
    abs_curvature: float
    structural_potential: float
    incident_violation_count: int
    incident_gate_pressure: float
    prescription: tuple[str, ...]

    def as_dict(self) -> dict[str, Any]:
        node = self.node
        if not isinstance(node, (str, int, float, bool)) and node is not None:
            node = repr(node)
        return {
            "node": node,
            "tnfr_stress": self.tnfr_stress,
            "phase_gradient": self.phase_gradient,
            "abs_curvature": self.abs_curvature,
            "structural_potential": self.structural_potential,
            "incident_violation_count": self.incident_violation_count,
            "incident_gate_pressure": self.incident_gate_pressure,
            "prescription": list(self.prescription),
        }


# ---------------------------------------------------------------------------
# Graph construction and phase encoding
# ---------------------------------------------------------------------------


def _standardize(matrix: Sequence[Sequence[float]]) -> "np.ndarray":
    _require_numpy()
    arr = np.asarray(matrix, dtype=float)
    mean = arr.mean(axis=0)
    std = arr.std(axis=0)
    std = np.where(std == 0.0, 1.0, std)
    return (arr - mean) / std


def _knn_indices_distances(
    scaled: "np.ndarray", k: int
) -> tuple["np.ndarray", "np.ndarray"]:
    """Return (distances, indices) for the ``k+1`` nearest neighbours.

    Uses scikit-learn when available; otherwise falls back to a memory-light
    numpy brute-force search (O(n^2) time, O(n) memory per row).
    """
    n_neighbors = int(k) + 1
    try:
        from sklearn.neighbors import NearestNeighbors

        model = NearestNeighbors(n_neighbors=n_neighbors)
        model.fit(scaled)
        return model.kneighbors(scaled)
    except ImportError:
        _require_numpy()
        count = scaled.shape[0]
        n_neighbors = min(n_neighbors, count)
        distances = np.empty((count, n_neighbors), dtype=float)
        indices = np.empty((count, n_neighbors), dtype=int)
        for i in range(count):
            row = np.sqrt(((scaled - scaled[i]) ** 2).sum(axis=1))
            order = np.argsort(row, kind="stable")[:n_neighbors]
            indices[i] = order
            distances[i] = row[order]
        return distances, indices


def build_knn_graph(
    records: Sequence[Mapping[str, Any]],
    feature_keys: Sequence[str],
    *,
    k: int = 10,
    node_attributes: Sequence[str] | None = None,
    distance_key: str = _DEFAULT_DISTANCE_KEY,
    standardize: bool = True,
) -> Any:
    """Build a standardized k-nearest-neighbour graph from records.

    Parameters
    ----------
    records:
        Sequence of mappings (one per sample).
    feature_keys:
        Numeric feature names used to build the feature space.
    k:
        Number of neighbours per node (excluding self).
    node_attributes:
        Optional extra attributes copied verbatim onto each node.
    distance_key:
        Edge attribute name used to store the feature-space distance.
    standardize:
        Whether to z-score features before computing distances.

    Returns
    -------
    networkx.Graph
        Undirected graph; nodes are integer record indices.
    """
    _require_networkx()
    _require_numpy()
    if not records:
        return nx.Graph()
    if k < 1:
        raise ValueError("k must be >= 1")

    matrix = [[float(record[key]) for key in feature_keys] for record in records]
    scaled = _standardize(matrix) if standardize else np.asarray(matrix, dtype=float)
    distances, indices = _knn_indices_distances(scaled, k)

    G = nx.Graph()
    extra = tuple(node_attributes or ())
    for node, record in enumerate(records):
        attrs: dict[str, Any] = {}
        for key in extra:
            if key in record:
                attrs[key] = record[key]
        G.add_node(node, **attrs)

    for node in range(len(records)):
        for distance, neighbour in zip(distances[node][1:], indices[node][1:]):
            G.add_edge(node, int(neighbour), **{distance_key: float(distance)})

    return G


def encode_phase_from_binary_state(
    G: Any,
    state_key: str,
    *,
    positive_value: Any,
    phase_key: str = "phase",
    positive_phase: float = 0.0,
    negative_phase: float = math.pi,
    also_set_theta: bool = True,
) -> Any:
    """Encode a binary node state as a TNFR phase in-place.

    Nodes whose ``state_key`` equals ``positive_value`` receive
    ``positive_phase``; all others receive ``negative_phase``.  The graph is
    returned for chaining.
    """
    _require_networkx()
    for node in G.nodes():
        value = G.nodes[node].get(state_key)
        phase = positive_phase if value == positive_value else negative_phase
        G.nodes[node][phase_key] = float(phase)
        if also_set_theta:
            G.nodes[node]["theta"] = float(phase)
    return G


# ---------------------------------------------------------------------------
# Baselines and TNFR scoring
# ---------------------------------------------------------------------------


def local_state_disagreement(G: Any, state_key: str) -> dict[Any, int]:
    """Return, per node, the count of neighbours with a different state.

    This is the classical graph-local label-disagreement signal.  It doubles as
    a baseline score and as a candidate (circular) review target; it must NOT be
    used as the only ground truth for an external TNFR superiority claim.

    Thin wrapper over :func:`tnfr.validation.interface_baselines.local_disagreement`
    (single source of truth), returning integer counts for backward compatibility.
    """
    _require_networkx()
    return {
        node: int(value)
        for node, value in local_disagreement(G, state_key=state_key).items()
    }


def score_structural_interfaces(
    problem: StructuralInterfaceProblem | Any,
    *,
    gate: float = DEFAULT_PHASE_GATE,
    state_key: str | None = None,
    phase_key: str = "phase",
    distance_key: str = _DEFAULT_DISTANCE_KEY,
    min_compliance: float = DEFAULT_MIN_COMPLIANCE,
) -> list[StructuralInterfaceScore]:
    """Compute per-node TNFR structural-interface scores.

    Accepts either a :class:`StructuralInterfaceProblem` or a raw graph.  The
    TNFR stress reuses :func:`rank_phase_stress_hotspots`; structural potential
    is read from existing ``dnfr``/``delta_nfr`` attributes (0 if absent) and is
    reported as telemetry, not folded into the ranking score.
    """
    if isinstance(problem, StructuralInterfaceProblem):
        G = problem.graph
        phase_key = problem.phase_key
    else:
        G = problem
    _require_networkx()

    phase_keys = (phase_key, "theta")
    hotspots = rank_phase_stress_hotspots(G, gate, top_n=None, phase_keys=phase_keys)
    potential = compute_structural_potential(G)
    prescriptions = prescribe_phase_gate_operators(
        G,
        gate,
        min_compliance=min_compliance,
        top_n=max(1, G.number_of_nodes()),
        phase_keys=phase_keys,
    )
    node_prescription = {
        prescription.target: prescription.sequence
        for prescription in prescriptions
        if prescription.scope == "node"
    }
    default_prescription = next(
        (
            prescription.sequence
            for prescription in prescriptions
            if prescription.scope == "network"
        ),
        ("IL", "SHA"),
    )

    scores: list[StructuralInterfaceScore] = []
    for hotspot in hotspots:
        node = hotspot.node
        scores.append(
            StructuralInterfaceScore(
                node=node,
                tnfr_stress=hotspot.stress_score,
                phase_gradient=hotspot.phase_gradient,
                abs_curvature=hotspot.abs_curvature,
                structural_potential=float(potential.get(node, 0.0)),
                incident_violation_count=hotspot.incident_violation_count,
                incident_gate_pressure=hotspot.incident_excess,
                prescription=tuple(node_prescription.get(node, default_prescription)),
            )
        )
    return scores


def interface_score_maps(
    scores: Sequence[StructuralInterfaceScore],
) -> dict[Any, float]:
    """Return a node -> TNFR stress map from structural-interface scores."""
    return {score.node: float(score.tnfr_stress) for score in scores}


def baseline_score_maps(
    G: Any,
    *,
    state_key: str,
    distance_key: str = _DEFAULT_DISTANCE_KEY,
) -> dict[str, dict[Any, float]]:
    """Return a compact classical baseline set for quick comparison.

    Includes the closest classical analogue (local state disagreement), plus
    feature-distance, topology, and a constant baseline.  For the full fair-
    comparison suite (graph total variation, entropy, label-propagation
    residual, graph cut, random control) use :func:`full_baseline_score_maps`.
    """
    _require_networkx()
    return {
        "local_state_disagreement": local_disagreement(G, state_key=state_key),
        "mean_neighbour_distance": mean_neighbour_distance(
            G, distance_key=distance_key
        ),
        "topology_degree": degree_score(G),
        "constant_baseline": constant_baseline(G),
    }


def full_baseline_score_maps(
    G: Any,
    *,
    state_key: str,
    distance_key: str = _DEFAULT_DISTANCE_KEY,
    phase_key: str = "phase",
    feature_key: str | None = None,
    seed: int = 0,
) -> dict[str, dict[Any, float]]:
    """Return the full classical baseline suite for fair benchmarking.

    Delegates to
    :func:`tnfr.validation.interface_baselines.compute_all_baselines`.
    """
    _require_networkx()
    return compute_all_baselines(
        G,
        state_key=state_key,
        distance_key=distance_key,
        phase_key=phase_key,
        feature_key=feature_key,
        seed=seed,
    )


# ---------------------------------------------------------------------------
# Evaluation
# ---------------------------------------------------------------------------


def _binary_auc(labels: Mapping[Any, bool], scores: Mapping[Any, float]) -> float:
    positives = [scores[node] for node, label in labels.items() if label]
    negatives = [scores[node] for node, label in labels.items() if not label]
    if not positives or not negatives:
        return 0.5
    wins = 0.0
    ties = 0.0
    for positive in positives:
        for negative in negatives:
            if positive > negative:
                wins += 1.0
            elif positive == negative:
                ties += 1.0
    return (wins + 0.5 * ties) / (len(positives) * len(negatives))


def _precision_at_review_count(
    labels: Mapping[Any, bool], scores: Mapping[Any, float]
) -> float:
    review_count = sum(1 for value in labels.values() if value)
    if review_count <= 0:
        return 0.0
    ranked = sorted(scores, key=lambda node: scores[node], reverse=True)
    ranked = ranked[:review_count]
    return sum(1 for node in ranked if labels.get(node)) / review_count


def evaluate_interface_scores(
    labels: Mapping[Any, bool],
    score_maps: Mapping[str, Mapping[Any, float]],
) -> dict[str, Any]:
    """Evaluate ranking scores against a binary review/interface target.

    The ``labels`` mapping defines the ground-truth interface/review nodes.
    Each entry of ``score_maps`` is ranked with ROC-AUC and precision@review.
    """
    review_count = sum(1 for value in labels.values() if value)
    rows = []
    for name, scores in score_maps.items():
        rows.append(
            {
                "score": name,
                "auc": _binary_auc(labels, scores),
                "precision_at_review_count": _precision_at_review_count(labels, scores),
            }
        )
    return {
        "review_node_count": int(review_count),
        "total_nodes": int(len(labels)),
        "score_comparison": rows,
    }


# ---------------------------------------------------------------------------
# Reporting
# ---------------------------------------------------------------------------


def _markdown_table(headers: Sequence[str], rows: Sequence[Sequence[Any]]) -> str:
    header = "| " + " | ".join(str(cell) for cell 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_structural_interface_markdown(result: Mapping[str, Any]) -> str:
    """Render a structural-interface benchmark result as Markdown."""
    dataset = result.get("dataset", {})
    graph = result.get("graph", {})
    task = result.get("task", {})
    evaluation = result.get("evaluation", {})
    comparison = evaluation.get("score_comparison", [])
    hotspots = result.get("hotspots", [])

    comparison_rows = [
        [
            row.get("score"),
            f"{row.get('auc', 0.0):.3f}",
            f"{row.get('precision_at_review_count', 0.0):.3f}",
        ]
        for row in comparison
    ]
    hotspot_rows = [
        [
            item.get("node"),
            f"{item.get('tnfr_stress', 0.0):.3f}",
            f"{item.get('phase_gradient', 0.0):.3f}",
            f"{item.get('abs_curvature', 0.0):.3f}",
            item.get("incident_violation_count", 0),
            " → ".join(item.get("prescription", [])),
        ]
        for item in hotspots
    ]
    return (
        "\n\n".join(
            [
                "# TNFR Structural Interface Audit",
                "## Dataset",
                (
                    f"Name: {dataset.get('name', 'unknown')}  \n"
                    f"Sector: {dataset.get('sector', 'generic')}  \n"
                    f"Samples: {dataset.get('samples', graph.get('nodes', 0))}"
                ),
                "## Graph",
                (
                    f"Construction: {graph.get('construction', 'k-NN graph')}  \n"
                    f"Nodes: {graph.get('nodes', 0)}  \n"
                    f"Edges: {graph.get('edges', 0)}"
                ),
                "## Review target",
                (
                    f"Definition: {task.get('target_definition', 'unspecified')}  \n"
                    f"Circular with phase encoding: {task.get('is_circular_target', 'unknown')}  \n"
                    f"Review nodes: {evaluation.get('review_node_count', 0)}"
                ),
                "## Score comparison",
                _markdown_table(
                    ["Score", "AUC", "Precision@review_count"], comparison_rows
                ),
                "## Top TNFR hotspots",
                _markdown_table(
                    [
                        "Node",
                        "Stress",
                        "grad φ",
                        "|Kφ|",
                        "Violations",
                        "TNFR prescription",
                    ],
                    hotspot_rows,
                ),
                "## Honest interpretation",
                str(
                    result.get(
                        "honest_interpretation",
                        "TNFR phase-stress localizes graph-local interfaces. When the "
                        "review target equals local disagreement, high AUC is a "
                        "localization sanity check, not external superiority.",
                    )
                ),
            ]
        )
        + "\n"
    )


def render_structural_interface_html(markdown: str) -> str:
    """Render a standalone HTML report from a Markdown summary."""
    body: list[str] = []
    table_rows: list[str] = []
    in_table = False

    def flush_table() -> None:
        nonlocal in_table, table_rows
        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>TNFR Structural Interface Audit</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(
        body="\n".join(body)
    )


def export_structural_interface_report(
    result: Mapping[str, Any],
    output_dir: Path,
    *,
    stem: str = "structural_interface_report",
) -> dict[str, Path]:
    """Write JSON, Markdown, and HTML reports for a benchmark result."""
    output_dir = Path(output_dir)
    output_dir.mkdir(parents=True, exist_ok=True)
    json_path = output_dir / f"{stem}.json"
    md_path = output_dir / f"{stem}.md"
    html_path = output_dir / f"{stem}.html"

    json_path.write_text(json.dumps(result, indent=2) + "\n", encoding="utf-8")
    markdown = render_structural_interface_markdown(result)
    md_path.write_text(markdown, encoding="utf-8")
    html_path.write_text(render_structural_interface_html(markdown), encoding="utf-8")

    return {"json": json_path, "markdown": md_path, "html": html_path}