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

trace.py

Trace logging.

Field helpers avoid unnecessary copying by reusing dictionaries stored on the graph whenever possible. Callers are expected to treat returned structures as immutable snapshots.

Immutability Guarantees

Trace field producers return mappings wrapped in MappingProxyType to prevent accidental mutation. These proxies enforce immutability while avoiding unnecessary data copying. Consumers that need to modify trace data should create mutable copies using dict(proxy) or merge patterns like {**proxy1, **proxy2, "new_key": value}.

Example safe mutation patterns::

text
# Get immutable trace data
result = gamma_field(G)
gamma_proxy = result["gamma"]

# Cannot mutate directly (TypeError will be raised)
# gamma_proxy["new_key"] = value  # ❌ Error!

# Safe pattern: create mutable copy
mutable = dict(gamma_proxy)
mutable["new_key"] = value  # ✓ OK

# Safe pattern: merge with new data
combined = {**gamma_proxy, "new_key": value}  # ✓ OK

Source Code

python
"""Trace logging.

Field helpers avoid unnecessary copying by reusing dictionaries stored on
the graph whenever possible.  Callers are expected to treat returned
structures as immutable snapshots.

Immutability Guarantees
-----------------------
Trace field producers return mappings wrapped in ``MappingProxyType`` to
prevent accidental mutation. These proxies enforce immutability while avoiding
unnecessary data copying. Consumers that need to modify trace data should
create mutable copies using ``dict(proxy)`` or merge patterns like
``{**proxy1, **proxy2, "new_key": value}``.

Example safe mutation patterns::

    # Get immutable trace data
    result = gamma_field(G)
    gamma_proxy = result["gamma"]

    # Cannot mutate directly (TypeError will be raised)
    # gamma_proxy["new_key"] = value  # ❌ Error!

    # Safe pattern: create mutable copy
    mutable = dict(gamma_proxy)
    mutable["new_key"] = value  # ✓ OK

    # Safe pattern: merge with new data
    combined = {**gamma_proxy, "new_key": value}  # ✓ OK
"""

from __future__ import annotations

import warnings
from collections.abc import Iterable, Mapping
from types import MappingProxyType
from typing import Any, NamedTuple, Protocol, cast

from .constants import TRACE
from .glyph_history import append_metric, count_glyphs, ensure_history
from .metrics.sense_index import _normalise_si_sensitivity_mapping
from .telemetry.verbosity import TELEMETRY_VERBOSITY_DEFAULT, TelemetryVerbosity
from .types import (
    SigmaVector,
    TNFRGraph,
    TraceCallback,
    TraceFieldFn,
    TraceFieldMap,
    TraceFieldRegistry,
    TraceMetadata,
    TraceSnapshot,
)
from .utils import cached_import, get_graph_mapping, is_non_string_sequence
from .utils.callbacks import CallbackSpec


class _KuramotoFn(Protocol):
    def __call__(self, G: TNFRGraph) -> tuple[float, float]: ...


class _SigmaVectorFn(Protocol):
    def __call__(self, G: TNFRGraph, weight_mode: str | None = None) -> SigmaVector: ...


class TraceFieldSpec(NamedTuple):
    """Declarative specification for a trace field producer."""

    name: str
    phase: str
    producer: TraceFieldFn
    tiers: tuple[TelemetryVerbosity, ...]


TRACE_VERBOSITY_DEFAULT = TELEMETRY_VERBOSITY_DEFAULT
TRACE_VERBOSITY_PRESETS: dict[str, tuple[str, ...]] = {}
_TRACE_CAPTURE_ALIASES: Mapping[str, str] = MappingProxyType(
    {
        "glyphs": "glyph_counts",
    }
)


def _canonical_capture_name(name: str) -> str:
    """Return the canonical capture field name for ``name``."""

    stripped = name.strip()
    alias = _TRACE_CAPTURE_ALIASES.get(stripped)
    if alias is not None:
        return alias

    lowered = stripped.lower()
    alias = _TRACE_CAPTURE_ALIASES.get(lowered)
    if alias is not None:
        return alias

    return stripped


def _normalise_capture_spec(raw: Any) -> set[str]:
    """Coerce custom capture payloads to a ``set`` of field names."""

    if raw is None:
        return set()
    if isinstance(raw, Mapping):
        return {_canonical_capture_name(str(name)) for name in raw.keys()}
    if isinstance(raw, str):
        return {_canonical_capture_name(raw)}
    if isinstance(raw, Iterable):
        return {_canonical_capture_name(str(name)) for name in raw}
    return {_canonical_capture_name(str(raw))}


def _resolve_trace_capture(cfg: Mapping[str, Any]) -> set[str]:
    """Return the capture set declared by ``cfg`` respecting verbosity."""

    if "capture" in cfg:
        return _normalise_capture_spec(cfg.get("capture"))

    raw_verbosity = cfg.get("verbosity", TRACE_VERBOSITY_DEFAULT)
    verbosity = str(raw_verbosity).lower()
    fields = TRACE_VERBOSITY_PRESETS.get(verbosity)
    if fields is None:
        warnings.warn(
            (
                "Unknown TRACE verbosity %r; falling back to %s"
                % (raw_verbosity, TRACE_VERBOSITY_DEFAULT)
            ),
            UserWarning,
            stacklevel=3,
        )
        fields = TRACE_VERBOSITY_PRESETS[TRACE_VERBOSITY_DEFAULT]
    return set(fields)


def _kuramoto_fallback(G: TNFRGraph) -> tuple[float, float]:
    return 0.0, 0.0


kuramoto_R_psi: _KuramotoFn = cast(
    _KuramotoFn,
    cached_import("tnfr.gamma", "kuramoto_R_psi", fallback=_kuramoto_fallback),
)


def _sigma_fallback(G: TNFRGraph, _weight_mode: str | None = None) -> SigmaVector:
    """Return a null sigma vector regardless of ``_weight_mode``."""

    return {"x": 0.0, "y": 0.0, "mag": 0.0, "angle": 0.0, "n": 0}


# Public exports for this module
__all__ = (
    "CallbackSpec",
    "TraceFieldSpec",
    "TraceMetadata",
    "TraceSnapshot",
    "register_trace",
    "register_trace_field",
    "_callback_names",
    "gamma_field",
    "grammar_field",
)

# -------------------------
# Helpers
# -------------------------


def _trace_setup(
    G: TNFRGraph,
) -> tuple[
    Mapping[str, Any] | None,
    set[str],
    dict[str, Any] | None,
    str | None,
]:
    """Prepare common configuration for trace snapshots.

    Returns the active configuration, capture set, history and key under
    which metadata will be stored. If tracing is disabled returns
    ``(None, set(), None, None)``.
    """

    cfg_raw = G.graph.get("TRACE", TRACE)
    cfg = cfg_raw if isinstance(cfg_raw, Mapping) else TRACE
    if not cfg.get("enabled", True):
        return None, set(), None, None

    capture = _resolve_trace_capture(cfg)
    hist = ensure_history(G)
    key = cast(str | None, cfg.get("history_key", "trace_meta"))
    return cfg, capture, hist, key


def _callback_names(
    callbacks: Mapping[str, CallbackSpec] | Iterable[CallbackSpec],
) -> list[str]:
    """Return callback names from ``callbacks``."""
    if isinstance(callbacks, Mapping):
        callbacks = callbacks.values()
    return [
        cb.name if cb.name is not None else str(getattr(cb.func, "__name__", "fn"))
        for cb in callbacks
    ]


EMPTY_MAPPING: Mapping[str, Any] = MappingProxyType({})


def mapping_field(G: TNFRGraph, graph_key: str, out_key: str) -> TraceMetadata:
    """Copy mappings from ``G.graph`` into trace output."""
    mapping = get_graph_mapping(
        G, graph_key, f"G.graph[{graph_key!r}] is not a mapping; ignoring"
    )
    if mapping is None:
        return {}
    return {out_key: mapping}


# -------------------------
# Builders
# -------------------------


def _new_trace_meta(
    G: TNFRGraph, phase: str
) -> tuple[TraceSnapshot, set[str], dict[str, Any] | None, str | None] | None:
    """Initialise trace metadata for a ``phase``.

    Wraps :func:`_trace_setup` and creates the base structure with timestamp
    and current phase. Returns ``None`` if tracing is disabled.
    """

    cfg, capture, hist, key = _trace_setup(G)
    if not cfg:
        return None

    meta: TraceSnapshot = {"t": float(G.graph.get("_t", 0.0)), "phase": phase}
    return meta, capture, hist, key


# -------------------------
# Snapshots
# -------------------------


def _trace_capture(G: TNFRGraph, phase: str, fields: TraceFieldMap) -> None:
    """Capture ``fields`` for ``phase`` and store the snapshot.

    A :class:`TraceSnapshot` is appended to the configured history when
    tracing is active. If there is no active history or storage key the
    capture is silently ignored.
    """

    res = _new_trace_meta(G, phase)
    if not res:
        return

    meta, capture, hist, key = res
    if not capture:
        return
    for name, getter in fields.items():
        if name in capture:
            meta.update(getter(G))
    if hist is None or key is None:
        return
    append_metric(hist, key, meta)


# -------------------------
# Registry
# -------------------------

TRACE_FIELDS: TraceFieldRegistry = {}


def register_trace_field(phase: str, name: str, func: TraceFieldFn) -> None:
    """Register ``func`` to populate trace field ``name`` during ``phase``."""

    TRACE_FIELDS.setdefault(phase, {})[name] = func


def gamma_field(G: TNFRGraph) -> TraceMetadata:
    """Expose γ-field metadata stored under ``G.graph['GAMMA']``."""

    return mapping_field(G, "GAMMA", "gamma")


def grammar_field(G: TNFRGraph) -> TraceMetadata:
    """Expose canonical grammar metadata for trace emission."""

    return mapping_field(G, "GRAMMAR_CANON", "grammar")


def dnfr_weights_field(G: TNFRGraph) -> TraceMetadata:
    return mapping_field(G, "DNFR_WEIGHTS", "dnfr_weights")


def selector_field(G: TNFRGraph) -> TraceMetadata:
    sel = G.graph.get("glyph_selector")
    selector_name = getattr(sel, "__name__", str(sel)) if sel else None
    return {"selector": selector_name}


def _si_weights_field(G: TNFRGraph) -> TraceMetadata:
    weights = mapping_field(G, "_Si_weights", "si_weights")
    if weights:
        return weights
    return {"si_weights": EMPTY_MAPPING}


def _si_sensitivity_field(G: TNFRGraph) -> TraceMetadata:
    mapping = get_graph_mapping(
        G,
        "_Si_sensitivity",
        "G.graph['_Si_sensitivity'] is not a mapping; ignoring",
    )
    if mapping is None:
        return {"si_sensitivity": EMPTY_MAPPING}

    normalised = _normalise_si_sensitivity_mapping(mapping, warn=True)

    if normalised != mapping:
        G.graph["_Si_sensitivity"] = normalised

    return {"si_sensitivity": MappingProxyType(normalised)}


def si_weights_field(G: TNFRGraph) -> TraceMetadata:
    """Return sense-plane weights and sensitivity."""

    weights = _si_weights_field(G)
    sensitivity = _si_sensitivity_field(G)
    return {**weights, **sensitivity}


def callbacks_field(G: TNFRGraph) -> TraceMetadata:
    cb = G.graph.get("callbacks")
    if not isinstance(cb, Mapping):
        return {}
    out: dict[str, list[str] | None] = {}
    for phase, cb_map in cb.items():
        if isinstance(cb_map, Mapping) or is_non_string_sequence(cb_map):
            out[phase] = _callback_names(cb_map)
        else:
            out[phase] = None
    return {"callbacks": out}


def thol_state_field(G: TNFRGraph) -> TraceMetadata:
    th_open = 0
    for _, nd in G.nodes(data=True):
        st = nd.get("_GRAM", {})
        if st.get("thol_open", False):
            th_open += 1
    return {"thol_open_nodes": th_open}


def kuramoto_field(G: TNFRGraph) -> TraceMetadata:
    R, psi = kuramoto_R_psi(G)
    return {"kuramoto": {"R": float(R), "psi": float(psi)}}


def sigma_field(G: TNFRGraph) -> TraceMetadata:
    sigma_vector_from_graph: _SigmaVectorFn = cast(
        _SigmaVectorFn,
        cached_import(
            "tnfr.sense",
            "sigma_vector_from_graph",
            fallback=_sigma_fallback,
        ),
    )
    sv = sigma_vector_from_graph(G)
    return {
        "sigma": {
            "x": float(sv.get("x", 0.0)),
            "y": float(sv.get("y", 0.0)),
            "mag": float(sv.get("mag", 0.0)),
            "angle": float(sv.get("angle", 0.0)),
        }
    }


def glyph_counts_field(G: TNFRGraph) -> TraceMetadata:
    """Return structural operator application count snapshot.

    Provides a snapshot of which structural operator symbols (glyphs) have been
    applied in the current step. ``count_glyphs`` already produces a fresh
    mapping so no additional copy is taken. Treat the returned mapping as read-only.
    """

    cnt = count_glyphs(G, window=1)
    return {"glyphs": cnt}


TRACE_FIELD_SPECS: tuple[TraceFieldSpec, ...] = (
    TraceFieldSpec(
        name="gamma",
        phase="before",
        producer=gamma_field,
        tiers=(
            TelemetryVerbosity.BASIC,
            TelemetryVerbosity.DETAILED,
            TelemetryVerbosity.DEBUG,
        ),
    ),
    TraceFieldSpec(
        name="grammar",
        phase="before",
        producer=grammar_field,
        tiers=(
            TelemetryVerbosity.BASIC,
            TelemetryVerbosity.DETAILED,
            TelemetryVerbosity.DEBUG,
        ),
    ),
    TraceFieldSpec(
        name="selector",
        phase="before",
        producer=selector_field,
        tiers=(
            TelemetryVerbosity.BASIC,
            TelemetryVerbosity.DETAILED,
            TelemetryVerbosity.DEBUG,
        ),
    ),
    TraceFieldSpec(
        name="dnfr_weights",
        phase="before",
        producer=dnfr_weights_field,
        tiers=(
            TelemetryVerbosity.BASIC,
            TelemetryVerbosity.DETAILED,
            TelemetryVerbosity.DEBUG,
        ),
    ),
    TraceFieldSpec(
        name="si_weights",
        phase="before",
        producer=si_weights_field,
        tiers=(
            TelemetryVerbosity.BASIC,
            TelemetryVerbosity.DETAILED,
            TelemetryVerbosity.DEBUG,
        ),
    ),
    TraceFieldSpec(
        name="callbacks",
        phase="before",
        producer=callbacks_field,
        tiers=(
            TelemetryVerbosity.BASIC,
            TelemetryVerbosity.DETAILED,
            TelemetryVerbosity.DEBUG,
        ),
    ),
    TraceFieldSpec(
        name="thol_open_nodes",
        phase="before",
        producer=thol_state_field,
        tiers=(
            TelemetryVerbosity.BASIC,
            TelemetryVerbosity.DETAILED,
            TelemetryVerbosity.DEBUG,
        ),
    ),
    TraceFieldSpec(
        name="kuramoto",
        phase="after",
        producer=kuramoto_field,
        tiers=(TelemetryVerbosity.DETAILED, TelemetryVerbosity.DEBUG),
    ),
    TraceFieldSpec(
        name="sigma",
        phase="after",
        producer=sigma_field,
        tiers=(TelemetryVerbosity.DETAILED, TelemetryVerbosity.DEBUG),
    ),
    TraceFieldSpec(
        name="glyph_counts",
        phase="after",
        producer=glyph_counts_field,
        tiers=(TelemetryVerbosity.DEBUG,),
    ),
)

TRACE_VERBOSITY_PRESETS = {
    level.value: tuple(spec.name for spec in TRACE_FIELD_SPECS if level in spec.tiers)
    for level in TelemetryVerbosity
}

for spec in TRACE_FIELD_SPECS:
    register_trace_field(spec.phase, spec.name, spec.producer)

# -------------------------
# API
# -------------------------


def register_trace(G: TNFRGraph) -> None:
    """Enable before/after-step snapshots and dump operational metadata to history.

    Trace snapshots are stored as :class:`TraceSnapshot` entries in
    ``G.graph['history'][TRACE.history_key]`` with:
      - gamma: active Γi(R) specification
      - grammar: canonical grammar configuration
      - selector: glyph selector name
      - dnfr_weights: ΔNFR mix declared in the engine
      - si_weights: α/β/γ weights and Si sensitivity
      - callbacks: callbacks registered per phase (if in
        ``G.graph['callbacks']``)
      - thol_open_nodes: how many nodes have an open THOL block
      - kuramoto: network ``(R, ψ)``
      - sigma: global sense-plane vector
      - glyphs: glyph counts after the step

    Field helpers reuse graph dictionaries and expect them to be treated as
    immutable snapshots by consumers.
    """
    if G.graph.get("_trace_registered"):
        return

    from .utils import callback_manager

    for phase in TRACE_FIELDS.keys():
        event = f"{phase}_step"

        def _make_cb(ph: str) -> TraceCallback:
            def _cb(graph: TNFRGraph, ctx: dict[str, Any]) -> None:
                del ctx

                _trace_capture(graph, ph, TRACE_FIELDS.get(ph, {}))

            return _cb

        callback_manager.register_callback(
            G, event=event, func=_make_cb(phase), name=f"trace_{phase}"
        )

    G.graph["_trace_registered"] = True