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/physics/vectorized_ops.py

vectorized_ops.py

Vectorized operations for TNFR physics.

This module provides optimized NumPy implementations of structural field computations to replace slow Python loops in canonical.py.

Source Code

python
"""Vectorized operations for TNFR physics.

This module provides optimized NumPy implementations of structural field computations
to replace slow Python loops in canonical.py.
"""

from typing import Any

from ..mathematics.unified_numerical import np

try:
    import networkx as nx
except ImportError:
    nx = None


def compute_phi_s_exact_vectorized(
    G: Any,
    nodes: list[Any],
    delta_nfr: dict[Any, float],
    alpha: float,
    dtype: type = np.float64,
    distance_matrix: np.ndarray | None = None,
) -> dict[Any, float]:
    """Vectorized exact Φ_s computation."""
    n = len(nodes)
    node_to_idx = {node: i for i, node in enumerate(nodes)}

    # Get adjacency matrix or distance matrix
    # For small N, Floyd-Warshall is fine
    # For larger N, we might need Johnson's or repeated Dijkstra
    # But if we are here, N is likely small (< 500)

    try:
        if distance_matrix is not None:
            D = distance_matrix.copy()
        else:
            # Use networkx floyd_warshall_numpy if available
            # It returns a matrix of distances
            D = nx.floyd_warshall_numpy(G, nodelist=nodes)
    except Exception:
        # Fallback if graph is disconnected or other issue
        # Or if we want to support weighted graphs explicitly
        # Construct manually via Dijkstra if FW fails or is too slow?
        # For N < 500, FW is fast.
        return _compute_phi_s_exact_python_fallback(G, nodes, delta_nfr, alpha, dtype)

    # Handle infinity (disconnected)
    D[np.isinf(D)] = 1e9  # Large number to make potential ~0

    # Mask diagonal (self-interaction)
    np.fill_diagonal(D, np.inf)

    # Compute potential
    # Φ_i = Σ_j ΔNFR_j / D_ij^α

    # Inverse distance matrix
    # Avoid division by zero (diagonal is inf)
    with np.errstate(divide="ignore"):
        inv_D = 1.0 / (D**alpha)

    # Fix diagonal (1/inf = 0)
    inv_D[np.isinf(D)] = 0.0

    # ΔNFR vector
    dnfr_vec = np.array([delta_nfr[node] for node in nodes], dtype=dtype)

    # Matrix-vector product
    phi_vec = inv_D @ dnfr_vec

    return {node: float(phi_vec[i]) for i, node in enumerate(nodes)}


def _compute_phi_s_exact_python_fallback(G, nodes, delta_nfr, alpha, dtype):
    """Fallback for when vectorization fails."""
    potential = {}
    for src in nodes:
        lengths = nx.single_source_dijkstra_path_length(G, src, weight="weight")
        total = dtype(0.0)
        for dst, d in lengths.items():
            if dst == src or d <= 0:
                continue
            total += dtype(delta_nfr[dst] / (d**alpha))
        potential[src] = float(total)
    return potential


def compute_phi_s_landmarks_vectorized(
    G: Any,
    nodes: list[Any],
    delta_nfr: dict[Any, float],
    alpha: float,
    landmarks: list[Any],
    landmark_distances: dict[Any, dict[Any, float]],
    dtype: type = np.float64,
) -> dict[Any, float]:
    """Vectorized landmark approximation for Φ_s."""
    num_nodes = len(nodes)
    num_landmarks = len(landmarks)
    node_to_idx = {n: i for i, n in enumerate(nodes)}

    # 1. Build Landmark Distance Matrix D_L (L x N)
    D_L = np.zeros((num_landmarks, num_nodes), dtype=dtype)

    for i, l in enumerate(landmarks):
        dists = landmark_distances[l]
        # Fill row
        # We iterate nodes to ensure order
        # Optimization: use map/array creation if dists is complete
        # But dists might be sparse if disconnected?
        # Assuming connected component or handling inf

        # Vectorized fill
        # Create a temporary array filled with inf
        row = np.full(num_nodes, np.inf, dtype=dtype)

        # We need to map node IDs to indices efficiently
        # Doing this in a loop is slow.
        # Better: iterate over dists items
        for n, d in dists.items():
            if n in node_to_idx:
                row[node_to_idx[n]] = d

        D_L[i, :] = row

    # 2. Prepare vectors
    dnfr_vec = np.array([delta_nfr[n] for n in nodes], dtype=dtype)
    phi_vec = np.zeros(num_nodes, dtype=dtype)

    # 3. Chunked Computation
    batch_size = 200  # Tunable

    for start_idx in range(0, num_nodes, batch_size):
        end_idx = min(start_idx + batch_size, num_nodes)
        batch_len = end_idx - start_idx

        # D_L_src: (L, B)
        D_L_src = D_L[:, start_idx:end_idx]

        # D_L_dst: (L, N)
        D_L_dst = D_L

        # Approx dist: |D_L_src - D_L_dst|
        # Shape: (L, B, N)
        # Broadcasting: (L, B, 1) - (L, 1, N)
        # Note: D_L contains infs. inf - inf = nan.
        # We need to handle this.

        # Mask infs
        # If either is inf, approx dist is inf (disconnected)
        # We can replace inf with a large number for subtraction?
        # No, |inf - 5| = inf. |inf - inf| = nan.
        # Let's use 1e9 for inf.

        D_L_src_safe = np.where(np.isinf(D_L_src), 1e9, D_L_src)
        D_L_dst_safe = np.where(np.isinf(D_L_dst), 1e9, D_L_dst)

        diff = np.abs(D_L_src_safe[:, :, None] - D_L_dst_safe[:, None, :])

        # Min over landmarks: (B, N)
        approx_dist = np.min(diff, axis=0)

        # Restore infs where approx_dist is large (meaning disconnected)
        # If approx_dist > 1e8, treat as inf
        # But wait, if both are 1e9, diff is 0.
        # If one is 1e9, diff is ~1e9.
        # If both are 1e9 (disconnected from landmark), diff is 0.
        # This implies distance 0 between two disconnected nodes? WRONG.
        # If both are disconnected from landmark, we have NO INFO from that landmark.
        # We should ignore that landmark.
        # But we take MIN over landmarks.
        # If all landmarks are disconnected, we have a problem.
        # Assuming graph is connected for now (standard TNFR assumption).

        # Clamp to 1.0 to avoid zero division
        approx_dist = np.maximum(approx_dist, 1.0)

        # Inverse power
        inv_dist = 1.0 / (approx_dist**alpha)

        # Mask self-interaction
        # Global indices for batch rows: start_idx + i
        # We want inv_dist[i, start_idx + i] = 0
        rows = np.arange(batch_len)
        cols = np.arange(start_idx, end_idx)
        inv_dist[rows, cols] = 0.0

        # Compute approximate potential
        phi_batch = inv_dist @ dnfr_vec

        # 4. Landmark Corrections
        for l_idx, l_node in enumerate(landmarks):
            global_l_idx = node_to_idx[l_node]

            # Subtract approx term
            approx_term = inv_dist[:, global_l_idx] * delta_nfr[l_node]
            phi_batch -= approx_term

            # Add exact term
            d_exact = D_L_src[l_idx, :]  # (B,)

            # Handle self-interaction (if src is the landmark)
            # d_exact is 0.0 there.
            # We want term to be 0.0.

            # Safe inverse
            with np.errstate(divide="ignore"):
                term_exact = delta_nfr[l_node] / (d_exact**alpha)

            # Fix infs (div by zero or disconnected)
            term_exact[np.isinf(term_exact)] = 0.0

            phi_batch += term_exact

        phi_vec[start_idx:end_idx] = phi_batch

    return {n: float(phi_vec[i]) for i, n in enumerate(nodes)}


def compute_vf_variance_vectorized(
    G: Any, vf_attr: str = "νf", radius: int = 1
) -> dict[Any, float]:
    """Vectorized computation of νf variance."""
    if radius != 1:
        # Fallback for radius > 1 (complex neighborhood)
        return None

    nodes = list(G.nodes())
    n = len(nodes)

    # Get Adjacency Matrix A
    try:
        A = nx.to_numpy_array(G, nodelist=nodes)
    except Exception:
        return None

    # Add self-loops (neighborhood includes self)
    np.fill_diagonal(A, 1.0)

    # Get vf vector
    vf_values = np.array([G.nodes[node].get(vf_attr, 0.0) for node in nodes])

    # Sum of values in neighborhood: S1 = A @ V
    S1 = A @ vf_values

    # Sum of squared values: S2 = A @ V^2
    S2 = A @ (vf_values**2)

    # Count of neighbors: N = A @ 1
    N_counts = np.sum(A, axis=1)

    # Avoid division by zero (should not happen with self-loops)
    N_counts[N_counts == 0] = 1.0

    # Mean: mu = S1 / N
    mu = S1 / N_counts

    # Population Variance: sigma^2 = (S2 / N) - mu^2
    var_pop = (S2 / N_counts) - (mu**2)

    # Sample Variance: var_sample = var_pop * (N / (N - 1))
    # If N=1, var=0
    with np.errstate(divide="ignore", invalid="ignore"):
        correction = N_counts / (N_counts - 1.0)
        var_sample = var_pop * correction

    # Fix N=1 case (correction is inf/nan)
    var_sample[N_counts <= 1] = 0.0

    # Ensure non-negative (numerical noise)
    var_sample = np.maximum(var_sample, 0.0)

    return {node: float(var_sample[i]) for i, node in enumerate(nodes)}


def compute_spectral_kurtosis_vectorized(G: Any, normalized: bool = True) -> float:
    """Vectorized Spectral Kurtosis using Trace(A^4)."""
    try:
        A = nx.to_numpy_array(G)
    except Exception:
        return 0.0

    n = A.shape[0]
    if n == 0:
        return 0.0

    # Compute A^2
    A2 = A @ A

    # Trace(A^4) = ||A^2||_F^2 (sum of squared elements of A^2)
    # This avoids full eigendecomposition
    mu_4 = np.sum(A2**2) / n

    if normalized:
        return mu_4 / (n**2)
    return mu_4


def compute_phase_current_vectorized(
    theta_arr: np.ndarray,
    edge_src: np.ndarray,
    edge_dst: np.ndarray,
    degrees: np.ndarray,
    dtype: type = np.float64,
) -> np.ndarray:
    """Vectorized computation of Phase Current J_φ.

    J_φ(i) = mean(sin(θ_j - θ_i)) for j in neighbors(i)

    Parameters
    ----------
    theta_arr : np.ndarray
        Array of phase values for all nodes.
    edge_src : np.ndarray
        Indices of neighbor nodes (j).
    edge_dst : np.ndarray
        Indices of center nodes (i).
        Must include both (u,v) and (v,u) for undirected graphs to cover all neighbors.
    degrees : np.ndarray
        Degree of each node (number of neighbors).

    Returns
    -------
    np.ndarray
        Phase current for each node.
    """
    # θ_j - θ_i
    diffs = theta_arr[edge_src] - theta_arr[edge_dst]

    # Wrap to [-π, π]
    wrapped_diffs = (diffs + np.pi) % (2 * np.pi) - np.pi

    # sin(Δθ)
    sines = np.sin(wrapped_diffs)

    # Sum over neighbors
    # We use a larger type for accumulation to avoid overflow/precision issues
    sums = np.zeros(len(theta_arr), dtype=dtype)
    np.add.at(sums, edge_dst, sines)

    # Divide by degree to get mean
    # Handle division by zero for isolated nodes
    with np.errstate(divide="ignore", invalid="ignore"):
        result = sums / degrees

    # Fix isolated nodes (degree 0 -> result NaN/Inf -> 0)
    result[degrees == 0] = 0.0

    return result


def compute_dnfr_flux_vectorized(
    dnfr_arr: np.ndarray,
    edge_src: np.ndarray,
    edge_dst: np.ndarray,
    degrees: np.ndarray,
    dtype: type = np.float64,
) -> np.ndarray:
    """Vectorized computation of ΔNFR Flux J_ΔNFR.

    J_ΔNFR(i) = mean(ΔNFR_j - ΔNFR_i) for j in neighbors(i)
              = mean(ΔNFR_j) - ΔNFR_i

    Parameters
    ----------
    dnfr_arr : np.ndarray
        Array of ΔNFR values for all nodes.
    edge_src : np.ndarray
        Indices of neighbor nodes (j).
    edge_dst : np.ndarray
        Indices of center nodes (i).
    degrees : np.ndarray
        Degree of each node.

    Returns
    -------
    np.ndarray
        ΔNFR flux for each node.
    """
    # Sum ΔNFR_j for all neighbors
    neighbor_sums = np.zeros(len(dnfr_arr), dtype=dtype)
    np.add.at(neighbor_sums, edge_dst, dnfr_arr[edge_src])

    # Mean neighbor ΔNFR
    with np.errstate(divide="ignore", invalid="ignore"):
        neighbor_means = neighbor_sums / degrees

    # Fix isolated nodes
    neighbor_means[degrees == 0] = 0.0

    # J = Mean(Neighbors) - Self
    # For isolated nodes, neighbor_means is 0, so result is -Self.
    # However, the original code says: "if not neighbors: flux[i] = 0.0"
    # So we must mask isolated nodes explicitly.
    result = neighbor_means - dnfr_arr
    result[degrees == 0] = 0.0

    return result


def compute_phase_gradient_and_curvature_vectorized(
    theta_arr: np.ndarray,
    edge_src: np.ndarray,
    edge_dst: np.ndarray,
    degrees: np.ndarray,
    dtype: type = np.float64,
) -> tuple[np.ndarray, np.ndarray]:
    """Vectorized computation of |∇φ| and K_φ.

    |∇φ|_i = mean(|wrap(θ_i - θ_j)|)
    K_φ_i = wrap(θ_i - circular_mean(θ_neighbors))

    Parameters
    ----------
    theta_arr : np.ndarray
        Array of phase values.
    edge_src : np.ndarray
        Indices of neighbor nodes (j).
    edge_dst : np.ndarray
        Indices of center nodes (i).
    degrees : np.ndarray
        Degree of each node.

    Returns
    -------
    tuple[np.ndarray, np.ndarray]
        (gradient_arr, curvature_arr)
    """
    n = len(theta_arr)

    # --- Gradient Calculation ---
    # θ_i - θ_j
    diffs = theta_arr[edge_dst] - theta_arr[edge_src]

    # Wrap to [-π, π]
    wrapped_diffs = (diffs + np.pi) % (2 * np.pi) - np.pi

    # Abs diffs
    abs_diffs = np.abs(wrapped_diffs)

    # Sum over neighbors
    grad_sums = np.zeros(n, dtype=dtype)
    np.add.at(grad_sums, edge_dst, abs_diffs)

    # Mean
    with np.errstate(divide="ignore", invalid="ignore"):
        grad_arr = grad_sums / degrees
    grad_arr[degrees == 0] = 0.0

    # --- Curvature Calculation ---
    # Circular mean of neighbors
    # sum(cos(θ_j)), sum(sin(θ_j))
    cos_vals = np.cos(theta_arr[edge_src])
    sin_vals = np.sin(theta_arr[edge_src])

    cos_sums = np.zeros(n, dtype=dtype)
    sin_sums = np.zeros(n, dtype=dtype)

    np.add.at(cos_sums, edge_dst, cos_vals)
    np.add.at(sin_sums, edge_dst, sin_vals)

    # Mean vector (C, S)
    # We don't strictly need to divide by N for atan2, but let's do it for correctness of "mean vector length" check
    with np.errstate(divide="ignore", invalid="ignore"):
        mean_cos = cos_sums / degrees
        mean_sin = sin_sums / degrees

    mean_cos[degrees == 0] = 0.0
    mean_sin[degrees == 0] = 0.0

    # Circular mean phase
    mean_phases = np.arctan2(mean_sin, mean_cos)

    # Handle case where mean vector length is near zero (undefined mean phase)
    # In that case, fallback to arithmetic mean (as per original code)
    # Or just 0? Original code: "if mean_vec_length < 1e-9: mean_phase = float(np.mean(neigh_phases))"
    # Vectorized fallback is tricky.
    # Let's compute arithmetic mean as fallback.

    mean_vec_len = np.hypot(mean_cos, mean_sin)
    unstable_mask = mean_vec_len < 1e-9

    if np.any(unstable_mask):
        # Compute arithmetic mean for unstable nodes
        # We need sum(θ_j)
        theta_sums = np.zeros(n, dtype=dtype)
        np.add.at(theta_sums, edge_dst, theta_arr[edge_src])
        with np.errstate(divide="ignore", invalid="ignore"):
            arith_means = theta_sums / degrees
        mean_phases[unstable_mask] = arith_means[unstable_mask]

    # Curvature = wrap(θ_i - mean_phase)
    curv_diffs = theta_arr - mean_phases
    curv_arr = (curv_diffs + np.pi) % (2 * np.pi) - np.pi

    # Fix isolated nodes
    curv_arr[degrees == 0] = 0.0

    return grad_arr, curv_arr


def compute_coherence_length_vectorized(
    G: Any,
    nodes: list[Any],
    delta_nfr: dict[Any, float],
    dtype: type = np.float64,
    distance_matrix: np.ndarray | None = None,
) -> float:
    """Vectorized estimation of coherence length ξ_C.

    Computes spatial autocorrelation of local coherence C_i = 1/(1+|ΔNFR_i|).
    Fits C(r) ~ exp(-r/ξ_C).
    """
    n = len(nodes)
    if n < 3:
        return float("nan")

    # 1. Compute local coherence array via the canonical kernel (numpy-broadcast)
    # C_i = structural_coherence(ΔNFR_i) = 1 / (1 + |ΔNFR_i|)
    from ..metrics.common import structural_coherence

    dnfr_arr = np.array([abs(delta_nfr.get(node, 0.0)) for node in nodes], dtype=dtype)
    coherence_arr = structural_coherence(dnfr_arr)

    # 2. Compute Distance Matrix
    # For N < 1000, full matrix is fine (1M entries = 8MB)
    # For larger N, we should probably fallback to sampling or sparse methods
    # But here we assume we are in the vectorized path which implies reasonable N
    try:
        if distance_matrix is not None:
            D = distance_matrix
        else:
            # Returns matrix of distances
            D = nx.floyd_warshall_numpy(G, nodelist=nodes)
    except Exception:
        return float("nan")

    # 3. Compute Correlation Matrix C_i * C_j
    # Outer product
    Corr_matrix = np.outer(coherence_arr, coherence_arr)

    # 4. Flatten and Filter
    # We only care about upper triangle (symmetric) and non-zero distances
    # Mask for upper triangle, k=1 excludes diagonal
    mask = np.triu(np.ones((n, n), dtype=bool), k=1)

    valid_dists = D[mask]
    valid_corrs = Corr_matrix[mask]

    # Filter out infinity (disconnected), NaN, and negative sentinels
    # (e.g. -1 used by some callers to mark "no path"). Negative or non-finite
    # distances would crash np.bincount after the int cast below.
    finite_mask = np.isfinite(valid_dists) & (valid_dists >= 0)
    valid_dists = valid_dists[finite_mask]
    valid_corrs = valid_corrs[finite_mask]

    if len(valid_dists) < 10:
        return float("nan")

    # 5. Group by distance
    # Since graph is unweighted, distances are integers.
    # We can use bincount for fast grouping if we cast to int.
    # Check if distances are effectively integers
    is_integer_dist = np.all(np.mod(valid_dists, 1) == 0)

    if is_integer_dist:
        d_ints = valid_dists.astype(np.intp)

        # Defensive guard: reject overflow from oversized float distances or
        # any residual negative entries that slipped past the finite/>=0 mask
        # (e.g. caller-supplied distance matrices with custom sentinels).
        if d_ints.size == 0 or np.any(d_ints < 0):
            return float("nan")

        # Sum of correlations per distance
        corr_sums = np.bincount(d_ints, weights=valid_corrs)
        # Count of pairs per distance
        counts = np.bincount(d_ints)

        # Avoid division by zero
        with np.errstate(divide="ignore", invalid="ignore"):
            mean_corrs = corr_sums / counts

        # Extract valid bins (count >= 2 for statistical relevance)
        valid_bins = counts >= 2
        # Also skip distance 0 (shouldn't be there due to triu(k=1) but just in case)
        valid_bins[0] = False

        distances_fit = np.where(valid_bins)[0]
        corrs_fit = mean_corrs[valid_bins]

    else:
        # Fallback for weighted graphs: sort and unique
        # This is slower but general
        unique_dists, inverse_indices = np.unique(valid_dists, return_inverse=True)

        corr_sums = np.zeros_like(unique_dists, dtype=dtype)
        np.add.at(corr_sums, inverse_indices, valid_corrs)

        counts = np.zeros_like(unique_dists, dtype=int)
        np.add.at(counts, inverse_indices, 1)

        mean_corrs = corr_sums / counts

        valid_bins = counts >= 2
        distances_fit = unique_dists[valid_bins]
        corrs_fit = mean_corrs[valid_bins]

    if len(distances_fit) < 3:
        return float("nan")

    # 6. Fit exponential decay
    # ln(C(r)) = -1/ξ_C * r + b

    # Filter positive correlations for log
    pos_mask = corrs_fit > 1e-9
    if np.sum(pos_mask) < 3:
        return float("nan")

    x = distances_fit[pos_mask]
    y = np.log(corrs_fit[pos_mask])

    try:
        # Linear regression
        # slope = (NΣxy - ΣxΣy) / (NΣx² - (Σx)²)
        # or just use polyfit
        slope, _ = np.polyfit(x, y, 1)

        if slope >= 0:
            return float("nan")

        xi_c = -1.0 / slope
        return float(xi_c)
    except Exception:
        return float("nan")