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/parallel/partitioner.py

partitioner.py

TNFR-aware network partitioning for parallel computation.

Partitions networks respecting structural coherence rather than classical graph metrics. Communities are grown based on phase synchrony and frequency alignment to preserve the fractal organization inherent in TNFR.

Source Code

python
"""TNFR-aware network partitioning for parallel computation.

Partitions networks respecting structural coherence rather than classical graph
metrics. Communities are grown based on phase synchrony and frequency alignment
to preserve the fractal organization inherent in TNFR.
"""

from __future__ import annotations

import math
from pathlib import Path
from typing import TYPE_CHECKING, Any

if TYPE_CHECKING:  # pragma: no cover
    from ..types import TNFRGraph

from ..mathematics.unified_numerical import NUMPY_AVAILABLE as HAS_NUMPY
from ..mathematics.unified_numerical import np

try:
    from scipy.spatial import KDTree

    HAS_SCIPY = True
except ImportError:
    HAS_SCIPY = False
    KDTree = None  # type: ignore

from ..alias import get_attr
from ..constants.aliases import ALIAS_THETA, ALIAS_VF

# ---------------------------------------------------------------------------
# Network density / clustering thresholds for partition sizing
# ---------------------------------------------------------------------------
_DENSITY_DENSE_THRESHOLD = 0.5
_DENSITY_MEDIUM_THRESHOLD = 0.1
_CLUSTERING_HIGH_THRESHOLD = 0.6
_CLUSTERING_LOW_THRESHOLD = 0.2


class FractalPartitioner:
    """Partitions TNFR networks respecting structural coherence.

    This partitioner detects communities based on TNFR metrics (frequency and
    phase) rather than classical graph metrics. It ensures that nodes with
    similar structural frequencies and synchronized phases are grouped together,
    preserving operational fractality during parallel processing.

    Parameters
    ----------
    max_partition_size : int, default=100
        Maximum number of nodes per partition. Larger partitions reduce
        communication overhead but may limit parallelism. If None, uses
        adaptive partitioning based on network density.
    coherence_threshold : float, default=0.3
        Minimum coherence score for adding a node to a community. Higher values
        create tighter communities but may result in more partitions.
    use_spatial_index : bool, default=True
        Whether to use spatial indexing (KDTree) for O(n log n) neighbor
        finding. Requires scipy. Falls back to O(n²) if unavailable.
    adaptive : bool, default=True
        Whether to use adaptive partitioning that adjusts partition size
        based on network density and clustering coefficient.

    Examples
    --------
    >>> import networkx as nx
    >>> from tnfr.parallel import FractalPartitioner
    >>> G = nx.Graph()
    >>> G.add_edges_from([("a", "b"), ("b", "c")])
    >>> for node in G.nodes():
    ...     G.nodes[node]["vf"] = 1.0
    ...     G.nodes[node]["phase"] = 0.0
    >>> partitioner = FractalPartitioner(max_partition_size=50)
    >>> partitions = partitioner.partition_network(G)
    >>> len(partitions) >= 1
    True

    Notes
    -----
    Spatial indexing provides O(n log n) complexity for large networks
    compared to O(n²) without it. Adaptive partitioning automatically
    adjusts partition size based on network characteristics.
    """

    def __init__(
        self,
        max_partition_size: int | None = 100,
        coherence_threshold: float = 0.3,
        use_spatial_index: bool = True,
        adaptive: bool = True,
    ):
        self.max_partition_size = max_partition_size
        self.coherence_threshold = coherence_threshold
        self.use_spatial_index = use_spatial_index and HAS_SCIPY and HAS_NUMPY
        self.adaptive = adaptive
        self._kdtree = None
        self._node_index_map = None

    def partition_network(self, graph: TNFRGraph) -> list[tuple[set[Any], TNFRGraph]]:
        """Partition network into coherent subgraphs.

        Parameters
        ----------
        graph : TNFRGraph
            TNFR network to partition. Nodes must have 'vf' and 'phase' attrs.

        Returns
        -------
        list[tuple[set[Any], TNFRGraph]]
            list of (node_set, subgraph) tuples for parallel processing.

        Notes
        -----
        Maintains TNFR structural invariants:
        - Communities formed by resonance (not just topology)
        - Phase coherence preserved within partitions
        - Frequency alignment respected

        Uses spatial indexing for O(n log n) complexity when available.
        Adapts partition size based on network density when adaptive=True.
        """

        if len(graph) == 0:
            return []

        # Determine optimal partition size adaptively
        if self.adaptive:
            partition_size = self._compute_adaptive_partition_size(graph)
        else:
            partition_size = self.max_partition_size or 100

        # Build spatial index if requested and available
        if self.use_spatial_index:
            self._build_spatial_index(graph)

        # Detect TNFR communities
        communities = self._detect_tnfr_communities(graph)

        # Create balanced partitions
        partitions = []
        current_partition = set()

        for community in communities:
            if len(current_partition) + len(community) <= partition_size:
                current_partition.update(community)
            else:
                if current_partition:
                    subgraph = graph.subgraph(current_partition).copy()
                    partitions.append((current_partition.copy(), subgraph))
                current_partition = community.copy()

        # Add final partition
        if current_partition:
            subgraph = graph.subgraph(current_partition).copy()
            partitions.append((current_partition, subgraph))

        # Clean up spatial index
        self._kdtree = None
        self._node_index_map = None

        return partitions

    def _compute_adaptive_partition_size(self, graph: TNFRGraph) -> int:
        """Compute optimal partition size based on network characteristics.

        Adapts partition size based on:
        - Network density (sparse vs dense)
        - Clustering coefficient (community structure)
        - Total network size

        Returns
        -------
        int
            Recommended partition size for this network
        """
        import networkx as nx

        n_nodes = len(graph)

        # Base size from configuration or defaults
        if self.max_partition_size:
            base_size = self.max_partition_size
        else:
            # Default adaptive sizing
            if n_nodes < 100:
                base_size = n_nodes  # Don't partition small networks
            elif n_nodes < 1000:
                base_size = 100
            else:
                base_size = 200

        # Adjust based on density
        density = nx.density(graph)

        if density > _DENSITY_DENSE_THRESHOLD:
            # Dense networks: smaller partitions reduce communication overhead
            size_multiplier = 0.5
        elif density > _DENSITY_MEDIUM_THRESHOLD:
            # Medium density: balanced partitioning
            size_multiplier = 1.0
        else:
            # Sparse networks: larger partitions okay
            size_multiplier = 1.5

        # Adjust based on clustering
        try:
            avg_clustering = nx.average_clustering(graph)
            if avg_clustering > _CLUSTERING_HIGH_THRESHOLD:
                # High clustering: communities are well-defined, can use smaller partitions
                size_multiplier *= 0.8
            elif avg_clustering < _CLUSTERING_LOW_THRESHOLD:
                # Low clustering: use larger partitions
                size_multiplier *= 1.2
        except (AttributeError, ZeroDivisionError, ValueError, TypeError):
            # If clustering calculation fails, skip adjustment
            pass

        adapted_size = int(base_size * size_multiplier)
        # Ensure reasonable bounds
        return max(10, min(adapted_size, 500))

    def _build_spatial_index(self, graph: TNFRGraph) -> None:
        """Build KDTree spatial index for O(n log n) neighbor finding.

        Constructs a 2D spatial index using (νf, phase) coordinates
        to enable fast nearest-neighbor queries.
        """
        if not HAS_SCIPY or not HAS_NUMPY:
            return

        nodes = list(graph.nodes())
        if len(nodes) == 0:
            return

        # Extract νf and phase coordinates
        def _get_node_attr(
            node_id: Any, alias: tuple, fallback_key: str, default: float
        ) -> float:
            """Get node attribute via TNFR alias or direct access."""
            return float(
                get_attr(graph.nodes[node_id], alias, None)
                or graph.nodes[node_id].get(fallback_key, default)
            )

        coords = np.array(
            [
                [
                    _get_node_attr(node, ALIAS_VF, "vf", 1.0),
                    _get_node_attr(node, ALIAS_THETA, "phase", 0.0),
                ]
                for node in nodes
            ]
        )

        # Normalize coordinates for better distance metrics
        # νf: normalize by mean
        if coords[:, 0].std() > 0:
            coords[:, 0] = (coords[:, 0] - coords[:, 0].mean()) / coords[:, 0].std()

        # phase: wrap to [-π, π] for periodicity
        coords[:, 1] = np.arctan2(np.sin(coords[:, 1]), np.cos(coords[:, 1]))

        # Build KDTree
        self._kdtree = KDTree(coords)
        self._node_index_map = {i: node for i, node in enumerate(nodes)}

    def _find_coherent_neighbors_spatial(
        self, graph: TNFRGraph, seed: Any, available: set[Any], k: int = 20
    ) -> list[Any]:
        """Find k nearest coherent neighbors using spatial index.

        Uses KDTree for O(log n) nearest neighbor finding instead of O(n).

        Parameters
        ----------
        graph : TNFRGraph
            Network graph
        seed : Any
            Seed node
        available : set[Any]
            Available nodes to consider
        k : int
            Number of nearest neighbors to find

        Returns
        -------
        list[Any]
            list of up to k nearest coherent neighbors
        """
        if self._kdtree is None or self._node_index_map is None:
            # Fallback to graph neighbors
            return list(set(graph.neighbors(seed)) & available)

        # Find seed index
        seed_idx = None
        for idx, node in self._node_index_map.items():
            if node == seed:
                seed_idx = idx
                break

        if seed_idx is None:
            return []

        # Query k nearest neighbors (k+1 to exclude seed itself)
        distances, indices = self._kdtree.query(
            self._kdtree.data[seed_idx], k=min(k + 1, len(self._node_index_map))
        )

        # Filter to available nodes and exclude seed
        neighbors = []
        for idx in indices:
            if idx == seed_idx:
                continue
            node = self._node_index_map[idx]
            if node in available:
                neighbors.append(node)

        return neighbors

    def _detect_tnfr_communities(self, graph: TNFRGraph) -> list[set[Any]]:
        """Detect communities using TNFR coherence metrics.

        Uses structural frequency and phase to grow coherent communities rather
        than classical modularity or betweenness metrics.
        """
        communities = []
        unprocessed = set(graph.nodes())

        while unprocessed:
            # Select seed node
            seed = next(iter(unprocessed))
            community = self._grow_coherent_community(graph, seed, unprocessed)
            communities.append(community)
            unprocessed -= community

        return communities

    def _grow_coherent_community(
        self, graph: TNFRGraph, seed: Any, available: set[Any]
    ) -> set[Any]:
        """Grow community from seed based on structural coherence.

        Parameters
        ----------
        graph : TNFRGraph
            Full network graph
        seed : Any
            Starting node for community growth
        available : set[Any]
            Nodes that haven't been assigned to communities yet

        Returns
        -------
        set[Any]
            set of nodes forming a coherent community

        Notes
        -----
        Uses spatial indexing for O(log n) neighbor finding when available,
        falling back to O(n) graph neighbors otherwise.
        """
        community = {seed}

        # Use spatial index if available for faster neighbor finding
        if self.use_spatial_index and self._kdtree is not None:
            candidates = set(
                self._find_coherent_neighbors_spatial(graph, seed, available, k=50)
            )
        else:
            neighbors = graph.neighbors(seed)
            candidates = set(neighbors) & available

        while candidates:
            # Find most coherent candidate
            best_candidate = None
            best_coherence = -1.0

            for candidate in candidates:
                coherence = self._compute_community_coherence(
                    graph, community, candidate
                )
                if coherence > best_coherence:
                    best_coherence = coherence
                    best_candidate = candidate

            # Add if above threshold
            if best_coherence > self.coherence_threshold:
                community.add(best_candidate)
                candidates.remove(best_candidate)

                # Add new neighbors as candidates
                if self.use_spatial_index and self._kdtree is not None:
                    new_neighbors = set(
                        self._find_coherent_neighbors_spatial(
                            graph, best_candidate, available, k=50
                        )
                    )
                else:
                    new_neighbors = set(graph.neighbors(best_candidate)) & available

                candidates.update(new_neighbors - community)
            else:
                break  # No more coherent candidates

        return community

    def _compute_community_coherence(
        self, graph: TNFRGraph, community: set[Any], candidate: Any
    ) -> float:
        """Compute coherence between candidate and existing community.

        Uses TNFR metrics: frequency alignment (νf) and phase synchrony.

        Parameters
        ----------
        graph : TNFRGraph
            Network graph
        community : set[Any]
            Existing community nodes
        candidate : Any
            Candidate node to evaluate

        Returns
        -------
        float
            Coherence score in [0, 1], where higher means better alignment
        """
        if not community:
            return 0.0

        def _get_node_attr(
            node_id: Any, alias: tuple, fallback_key: str, default: float
        ) -> float:
            """Get node attribute via TNFR alias or direct access."""
            return float(
                get_attr(graph.nodes[node_id], alias, None)
                or graph.nodes[node_id].get(fallback_key, default)
            )

        candidate_vf = _get_node_attr(candidate, ALIAS_VF, "vf", 1.0)
        candidate_phase = _get_node_attr(candidate, ALIAS_THETA, "phase", 0.0)

        coherences = []
        for member in community:
            member_vf = _get_node_attr(member, ALIAS_VF, "vf", 1.0)
            member_phase = _get_node_attr(member, ALIAS_THETA, "phase", 0.0)

            # Frequency coherence: inversely proportional to difference
            vf_diff = abs(candidate_vf - member_vf)
            vf_coherence = 1.0 / (1.0 + vf_diff)

            # Phase coherence: cosine of phase difference
            phase_diff = candidate_phase - member_phase
            if HAS_NUMPY:
                phase_coherence = float(np.cos(phase_diff))
            else:
                phase_coherence = math.cos(phase_diff)

            # Weighted combination: prioritize frequency alignment
            coherences.append(0.6 * vf_coherence + 0.4 * phase_coherence)

        return sum(coherences) / len(coherences) if coherences else 0.0

    def partition_with_manifest(
        self,
        graph: TNFRGraph,
        output_dir: Path,
        partition_id: str,
    ) -> dict[str, Any]:
        """Partition network and export manifest for self-optimization.

        Parameters
        ----------
        graph : TNFRGraph
            TNFR network to partition.
        output_dir : Path
            Directory where manifests will be written.
        partition_id : str
            Unique identifier for this fractal partition operation.

        Returns
        -------
        dict[str, Any]
            Dictionary with keys:
            - 'partitions': list[(node_set, subgraph)] from partition_network
            - 'manifest_absolute': Path to partition manifest
            - 'summary_absolute': Path to partition summary

        Notes
        -----
        Manifest format compatible with self_opt_support pipeline:
        - operation_type: 'fractal_partition'
        - partition_id: unique identifier
        - communities: list of community metadata with coherence scores
        - telemetry: global coherence, sense_index, phase metrics
        - network_metadata: node count, edge count, partition count
        """
        import json
        from datetime import datetime, timezone
        from pathlib import Path

        output_dir = Path(output_dir)
        output_dir.mkdir(parents=True, exist_ok=True)

        # Perform partitioning
        partitions = self.partition_network(graph)

        # Compute telemetry metrics
        telemetry = {}
        try:
            from ..physics import compute_coherence, compute_sense_index

            telemetry["coherence"] = float(compute_coherence(graph))
            telemetry["sense_index"] = float(compute_sense_index(graph))
        except Exception:
            telemetry["coherence"] = None
            telemetry["sense_index"] = None

        try:
            from ..physics.fields import compute_structural_potential_field

            phi_s_values = compute_structural_potential_field(graph)
            if phi_s_values:
                telemetry["structural_potential_range"] = [
                    float(min(phi_s_values.values())),
                    float(max(phi_s_values.values())),
                ]
            else:
                telemetry["structural_potential_range"] = None
        except Exception:
            telemetry["structural_potential_range"] = None

        # Extract network metadata
        node_count = len(graph.nodes()) if hasattr(graph, "nodes") else 0
        edge_count = len(graph.edges()) if hasattr(graph, "edges") else 0

        # Serialize partition communities
        communities_serialized = []
        for partition_idx, (node_set, subgraph) in enumerate(partitions):
            # Compute community-level coherence
            community_coherence = None
            try:
                from ..physics import compute_coherence

                community_coherence = float(compute_coherence(subgraph))
            except Exception:
                pass

            community_data = {
                "partition_index": partition_idx,
                "node_count": len(node_set),
                "edge_count": (
                    len(subgraph.edges()) if hasattr(subgraph, "edges") else 0
                ),
                "node_ids": [str(n) for n in sorted(node_set)],
                "community_coherence": community_coherence,
            }
            communities_serialized.append(community_data)

        # Build manifest
        manifest = {
            "operation_type": "fractal_partition",
            "partition_id": partition_id,
            "timestamp": datetime.now(timezone.utc).isoformat(),
            "network_metadata": {
                "node_count": node_count,
                "edge_count": edge_count,
                "partition_count": len(partitions),
            },
            "telemetry": telemetry,
            "communities": communities_serialized,
            "partitioner_config": {
                "max_partition_size": self.max_partition_size,
                "coherence_threshold": self.coherence_threshold,
                "use_spatial_index": self.use_spatial_index,
                "adaptive": self.adaptive,
            },
        }

        # Write manifest
        manifest_path = output_dir / "fractal_partition_manifest.json"
        with open(manifest_path, "w") as f:
            json.dump(manifest, f, indent=2)

        # Write summary
        summary = {
            "operation_type": "fractal_partition",
            "partition_id": partition_id,
            "partition_count": len(partitions),
            "coherence": telemetry.get("coherence"),
            "sense_index": telemetry.get("sense_index"),
            "average_community_size": node_count / len(partitions) if partitions else 0,
        }
        summary_path = output_dir / "fractal_partition_summary.json"
        with open(summary_path, "w") as f:
            json.dump(summary, f, indent=2)

        return {
            "partitions": partitions,
            "manifest_absolute": manifest_path.resolve(),
            "summary_absolute": summary_path.resolve(),
        }