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/telemetry/nu_f.py

nu_f.py

Structural frequency (νf) telemetry estimators.

This module aggregates discrete reorganisation counts observed over time windows and exposes Poisson maximum likelihood estimators (MLE) for the structural frequency νf. Results are provided both in canonical Hz_str and converted Hz using :mod:tnfr.units, allowing callers to surface telemetry without duplicating conversion logic.

Snapshots emitted by :class:NuFTelemetryAccumulator are appended to the G.graph["telemetry"]["nu_f_history"] channel so downstream observers and structured logging hooks can consume them without interfering with runtime summaries stored under G.graph["telemetry"]["nu_f"].

Source Code

python
"""Structural frequency (νf) telemetry estimators.

This module aggregates discrete reorganisation counts observed over
time windows and exposes Poisson maximum likelihood estimators (MLE) for
the structural frequency νf.  Results are provided both in canonical
``Hz_str`` and converted ``Hz`` using :mod:`tnfr.units`, allowing callers
to surface telemetry without duplicating conversion logic.

Snapshots emitted by :class:`NuFTelemetryAccumulator` are appended to the
``G.graph["telemetry"]["nu_f_history"]`` channel so downstream observers
and structured logging hooks can consume them without interfering with
runtime summaries stored under ``G.graph["telemetry"]["nu_f"]``.
"""

from __future__ import annotations

import math
import weakref
from collections import deque
from collections.abc import MutableMapping
from dataclasses import dataclass
from statistics import NormalDist
from typing import Any, Deque, Mapping

from ..errors import TNFRValueError
from ..types import GraphLike
from ..units import get_hz_bridge, hz_str_to_hz

__all__ = (
    "NuFWindow",
    "NuFSnapshot",
    "NuFTelemetryAccumulator",
    "ensure_nu_f_telemetry",
    "record_nu_f_window",
)


@dataclass(frozen=True)
class NuFWindow:
    """Discrete reorganisation observations captured over a time window."""

    reorganisations: int
    """Number of reorganisations counted within the window."""

    duration: float
    """Duration of the window expressed in structural time units."""

    start: float | None = None
    """Optional inclusive window start timestamp."""

    end: float | None = None
    """Optional exclusive window end timestamp."""

    def __post_init__(self) -> None:
        reorganisations = int(self.reorganisations)
        duration = float(self.duration)
        object.__setattr__(self, "reorganisations", reorganisations)
        object.__setattr__(self, "duration", duration)
        if reorganisations < 0:
            raise TNFRValueError(
                "reorganisations must be non-negative",
                context={"reorganisations": reorganisations},
            )
        if not math.isfinite(duration) or duration <= 0.0:
            raise TNFRValueError(
                "duration must be a positive finite number",
                context={"duration": duration},
            )
        if self.start is not None and self.end is not None:
            start = float(self.start)
            end = float(self.end)
            object.__setattr__(self, "start", start)
            object.__setattr__(self, "end", end)
            if end < start:
                raise TNFRValueError(
                    "end must be greater than or equal to start",
                    context={"start": start, "end": end},
                )
            window = end - start
            if window <= 0.0:
                raise TNFRValueError(
                    "start and end must describe a non-empty window",
                    context={"window": window},
                )
            # Allow minor numerical discrepancies when duration is supplied
            # independently from ``start``/``end``.
            if not math.isclose(window, duration, rel_tol=1e-9, abs_tol=1e-9):
                raise TNFRValueError(
                    "duration does not match the difference between start and end",
                    context={"duration": duration, "window": window},
                )

    @classmethod
    def from_bounds(cls, reorganisations: int, start: float, end: float) -> "NuFWindow":
        """Construct a window inferring the duration from ``start``/``end``."""

        start_f = float(start)
        end_f = float(end)
        if end_f <= start_f:
            raise TNFRValueError(
                "end must be greater than start",
                context={"start": start_f, "end": end_f},
            )
        return cls(
            reorganisations=int(reorganisations),
            duration=end_f - start_f,
            start=start_f,
            end=end_f,
        )

    def as_payload(self) -> Mapping[str, float | int | None]:
        """Return a JSON-serialisable representation of the window."""

        return {
            "reorganisations": int(self.reorganisations),
            "duration": float(self.duration),
            "start": float(self.start) if self.start is not None else None,
            "end": float(self.end) if self.end is not None else None,
        }


@dataclass(frozen=True)
class NuFSnapshot:
    """Aggregate νf estimates computed from recorded windows."""

    windows: tuple[NuFWindow, ...]
    total_reorganisations: int
    total_duration: float
    rate_hz_str: float | None
    rate_hz: float | None
    variance_hz_str: float | None
    variance_hz: float | None
    confidence_level: float | None
    ci_lower_hz_str: float | None
    ci_upper_hz_str: float | None
    ci_lower_hz: float | None
    ci_upper_hz: float | None

    def as_payload(self) -> dict[str, Any]:
        """Return a structured representation suitable for telemetry sinks."""

        return {
            "windows": [window.as_payload() for window in self.windows],
            "total_reorganisations": self.total_reorganisations,
            "total_duration": self.total_duration,
            "rate_hz_str": self.rate_hz_str,
            "rate_hz": self.rate_hz,
            "variance_hz_str": self.variance_hz_str,
            "variance_hz": self.variance_hz,
            "confidence_level": self.confidence_level,
            "ci_lower_hz_str": self.ci_lower_hz_str,
            "ci_upper_hz_str": self.ci_upper_hz_str,
            "ci_lower_hz": self.ci_lower_hz,
            "ci_upper_hz": self.ci_upper_hz,
        }


class NuFTelemetryAccumulator:
    """Accumulate reorganisation telemetry and produce νf estimates."""

    def __init__(
        self,
        *,
        confidence_level: float = 0.95,
        history_limit: int | None = 128,
        window_limit: int | None = None,
        graph: GraphLike | MutableMapping[str, Any] | None = None,
    ) -> None:
        if not 0.0 < confidence_level < 1.0:
            raise TNFRValueError(
                "confidence_level must be in the open interval (0, 1)",
                context={"confidence_level": confidence_level},
            )
        if history_limit is not None and history_limit <= 0:
            raise TNFRValueError(
                "history_limit must be positive when provided",
                context={"history_limit": history_limit},
            )
        if window_limit is not None and window_limit <= 0:
            raise TNFRValueError(
                "window_limit must be positive when provided",
                context={"window_limit": window_limit},
            )

        self._confidence_level = float(confidence_level)
        self._history_limit = history_limit
        self._window_limit = window_limit
        self._windows: Deque[NuFWindow] = deque()
        self._total_reorganisations = 0
        self._total_duration = 0.0
        self._graph_ref: (
            weakref.ReferenceType[GraphLike | MutableMapping[str, Any]] | None
        ) = None
        self.attach_graph(graph)

    @property
    def confidence_level(self) -> float:
        """Return the configured confidence level for interval estimation."""

        return self._confidence_level

    @property
    def history_limit(self) -> int | None:
        """Return the maximum number of snapshots retained on the graph."""

        return self._history_limit

    @property
    def window_limit(self) -> int | None:
        """Return the maximum number of windows stored in memory."""

        return self._window_limit

    def attach_graph(self, graph: GraphLike | MutableMapping[str, Any] | None) -> None:
        """Attach ``graph`` for unit conversions and telemetry persistence."""

        if graph is None:
            return
        try:
            self._graph_ref = weakref.ref(graph)  # type: ignore[arg-type]
        except TypeError:  # pragma: no cover - mapping instances are not weakrefable
            self._graph_ref = None

    def _resolve_graph(
        self,
    ) -> GraphLike | MutableMapping[str, Any] | None:
        return self._graph_ref() if self._graph_ref is not None else None

    def _coerce_window(self, window: NuFWindow) -> None:
        if self._window_limit is not None and len(self._windows) >= self._window_limit:
            removed = self._windows.popleft()
            self._total_reorganisations -= removed.reorganisations
            self._total_duration -= removed.duration
        self._windows.append(window)
        self._total_reorganisations += window.reorganisations
        self._total_duration += window.duration

    def record_window(
        self,
        window: NuFWindow,
        *,
        graph: GraphLike | MutableMapping[str, Any] | None = None,
    ) -> NuFSnapshot:
        """Record ``window`` and return the updated telemetry snapshot."""

        self._coerce_window(window)
        graph_obj = graph or self._resolve_graph()
        snapshot = self.snapshot(graph=graph_obj)
        self._persist_snapshot(snapshot, graph_obj)
        return snapshot

    def record_counts(
        self,
        reorganisations: int,
        duration: float,
        *,
        start: float | None = None,
        end: float | None = None,
        graph: GraphLike | MutableMapping[str, Any] | None = None,
    ) -> NuFSnapshot:
        """Record a window described by ``reorganisations`` and ``duration``."""

        window = NuFWindow(
            reorganisations=int(reorganisations),
            duration=float(duration),
            start=float(start) if start is not None else None,
            end=float(end) if end is not None else None,
        )
        return self.record_window(window, graph=graph)

    def reset(self) -> None:
        """Clear accumulated windows and totals."""

        self._windows.clear()
        self._total_reorganisations = 0
        self._total_duration = 0.0

    def _normal_dist(self) -> NormalDist:
        return NormalDist()

    def _graph_mapping(
        self, graph: GraphLike | MutableMapping[str, Any] | None
    ) -> MutableMapping[str, Any] | None:
        if graph is None:
            return None
        if isinstance(graph, MutableMapping):
            return graph
        graph_data = getattr(graph, "graph", None)
        return graph_data if isinstance(graph_data, MutableMapping) else None

    def snapshot(
        self,
        *,
        graph: GraphLike | MutableMapping[str, Any] | None = None,
    ) -> NuFSnapshot:
        """Return a νf telemetry snapshot without mutating internal state."""

        total_duration = self._total_duration
        total_reorganisations = self._total_reorganisations
        windows = tuple(self._windows)

        if total_duration <= 0.0:
            rate_hz_str = None
            variance_hz_str = None
            ci_lower_str = None
            ci_upper_str = None
            confidence_level: float | None = None
        else:
            rate_hz_str = total_reorganisations / total_duration
            variance_hz_str = rate_hz_str / total_duration
            std_error = math.sqrt(variance_hz_str)
            z = self._normal_dist().inv_cdf(0.5 + (self._confidence_level / 2.0))
            ci_lower_str = max(rate_hz_str - z * std_error, 0.0)
            ci_upper_str = rate_hz_str + z * std_error
            confidence_level = self._confidence_level

        graph_obj = graph or self._resolve_graph()
        rate_hz = variance_hz = ci_lower_hz = ci_upper_hz = None
        if rate_hz_str is not None and graph_obj is not None:
            if not isinstance(graph_obj, MutableMapping):
                bridge = get_hz_bridge(graph_obj)
                rate_hz = hz_str_to_hz(rate_hz_str, graph_obj)
                if variance_hz_str is not None:
                    variance_hz = variance_hz_str * (bridge**2)
                if ci_lower_str is not None and ci_upper_str is not None:
                    ci_lower_hz = hz_str_to_hz(ci_lower_str, graph_obj)
                    ci_upper_hz = hz_str_to_hz(ci_upper_str, graph_obj)

        return NuFSnapshot(
            windows=windows,
            total_reorganisations=total_reorganisations,
            total_duration=total_duration,
            rate_hz_str=rate_hz_str,
            rate_hz=rate_hz,
            variance_hz_str=variance_hz_str,
            variance_hz=variance_hz,
            confidence_level=confidence_level,
            ci_lower_hz_str=ci_lower_str,
            ci_upper_hz_str=ci_upper_str,
            ci_lower_hz=ci_lower_hz,
            ci_upper_hz=ci_upper_hz,
        )

    def _persist_snapshot(
        self,
        snapshot: NuFSnapshot,
        graph: GraphLike | MutableMapping[str, Any] | None,
    ) -> None:
        mapping = self._graph_mapping(graph)
        if mapping is None:
            return

        telemetry = mapping.setdefault("telemetry", {})
        if not isinstance(telemetry, MutableMapping):
            telemetry = {}
            mapping["telemetry"] = telemetry
        payload = snapshot.as_payload()
        history_key = "nu_f_history"
        history = telemetry.get(history_key)
        if not isinstance(history, list):
            legacy_history = telemetry.get("nu_f")
            if isinstance(legacy_history, list):
                history = legacy_history
            else:
                history = []
            telemetry[history_key] = history
        history.append(payload)
        if self._history_limit is not None and len(history) > self._history_limit:
            del history[: len(history) - self._history_limit]


_ACCUMULATOR_KEY = "_tnfr_nu_f_accumulator"


def ensure_nu_f_telemetry(
    graph: GraphLike,
    *,
    confidence_level: float | None = None,
    history_limit: int | None = 128,
    window_limit: int | None = None,
) -> NuFTelemetryAccumulator:
    """Ensure ``graph`` exposes a :class:`NuFTelemetryAccumulator`.

    When ``confidence_level`` is ``None`` the existing accumulator is preserved
    and new accumulators default to ``0.95``.
    """

    mapping = getattr(graph, "graph", None)
    if not isinstance(mapping, MutableMapping):
        raise TypeError("graph.graph must be a mutable mapping for telemetry storage")

    accumulator = mapping.get(_ACCUMULATOR_KEY)
    replace = False
    if isinstance(accumulator, NuFTelemetryAccumulator):
        if (
            (
                confidence_level is not None
                and abs(accumulator.confidence_level - confidence_level) > 1e-12
            )
            or (
                history_limit is not None and accumulator.history_limit != history_limit
            )
            or (window_limit is not None and accumulator.window_limit != window_limit)
        ):
            replace = True
    if not isinstance(accumulator, NuFTelemetryAccumulator) or replace:
        requested_confidence = 0.95 if confidence_level is None else confidence_level
        accumulator = NuFTelemetryAccumulator(
            confidence_level=requested_confidence,
            history_limit=history_limit,
            window_limit=window_limit,
            graph=graph,
        )
        mapping[_ACCUMULATOR_KEY] = accumulator
    else:
        accumulator.attach_graph(graph)
    return accumulator


def record_nu_f_window(
    graph: GraphLike,
    reorganisations: int,
    duration: float,
    *,
    start: float | None = None,
    end: float | None = None,
    confidence_level: float | None = None,
    history_limit: int | None = None,
    window_limit: int | None = None,
) -> NuFSnapshot:
    """Record a νf observation for ``graph`` and persist the snapshot."""

    kwargs: dict[str, Any] = {}
    if confidence_level is not None:
        kwargs["confidence_level"] = confidence_level
    if history_limit is not None:
        kwargs["history_limit"] = history_limit
    if window_limit is not None:
        kwargs["window_limit"] = window_limit

    accumulator = ensure_nu_f_telemetry(graph, **kwargs)
    return accumulator.record_counts(
        reorganisations,
        duration,
        start=start,
        end=end,
        graph=graph,
    )