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

dissipative_conservation.py

TNFR Dissipative Conservation — Structural Conservation under Lindblad Loss.

This module extends the structural conservation law (conservation.py) to dissipative regimes where Lindblad-type collapse operators introduce controlled decoherence. The central result:

DISSIPATIVE CONTINUITY THEOREM

For a TNFR density operator ρ evolving under the Lindblad superoperator L = L_H + L_D (Hamiltonian + dissipator), the structural continuity equation acquires a dissipation source:

text
∂ρ_s/∂t + div J = S_grammar + D[ρ]

where:

  • S_grammar → 0 under grammar U1-U6 (conservative part, from conservation.py)
  • D[ρ] = Σ_k (L_k ρ L_k† - ½{L_k† L_k, ρ}) is the dissipator contribution

The dissipation rate is bounded:

text
|D[ρ]| ≤ Σ_k ‖L_k‖² · (1 - Tr(ρ²))

This means: more mixed states dissipate faster, and the dissipation vanishes for pure states at steady state (ρ² = ρ).

PHYSICS INTERPRETATION

In the conservative regime (conservation.py), structural charge is transported but not created or destroyed. In the dissipative regime:

  1. Purity decay: Tr(ρ²) decreases monotonically toward 1/d (maximally mixed state), measuring information loss to the environment.

  2. Charge leak rate: The rate at which Noether charge Q = Tr(ρ · O_Q) changes is bounded by the dissipator strength and the initial coherence.

  3. Entropy production: Von Neumann entropy S = -Tr(ρ ln ρ) increases monotonically, quantifying irreversibility.

  4. Steady-state conservation: At the fixed point L[ρ_ss] = 0, a modified conservation law holds with D[ρ_ss] absorbed into the definition of conserved quantities.

TNFR CONNECTION

The Lindblad collapse operators map to TNFR grammar violations:

  • L_k ~ destabilizers (OZ, ZHIR, VAL) without stabilizers (IL, THOL)
  • The bound |D[ρ]| ~ ‖L_k‖² corresponds to grammar U2 violation magnitude
  • Steady-state convergence corresponds to grammar closure (U1b + U2)

STATUS: CANONICAL — Extends conservation.py to dissipative regimes.

References

  • Conservative conservation: src/tnfr/physics/conservation.py
  • Lindblad generators: src/tnfr/mathematics/generators.py
  • ContractiveDynamicsEngine: src/tnfr/mathematics/dynamics.py
  • Nodal equation: ∂EPI/∂t = νf · ΔNFR(t) [TNFR.pdf §2.1]

Source Code

python
"""TNFR Dissipative Conservation — Structural Conservation under Lindblad Loss.

This module extends the structural conservation law (conservation.py) to
**dissipative regimes** where Lindblad-type collapse operators introduce
controlled decoherence.  The central result:

DISSIPATIVE CONTINUITY THEOREM
==============================
For a TNFR density operator ρ evolving under the Lindblad superoperator
L = L_H + L_D  (Hamiltonian + dissipator), the structural continuity
equation acquires a **dissipation source**:

    ∂ρ_s/∂t + div J = S_grammar + D[ρ]

where:
- S_grammar → 0 under grammar U1-U6 (conservative part, from conservation.py)
- D[ρ] = Σ_k (L_k ρ L_k†  -  ½{L_k† L_k, ρ}) is the dissipator contribution

The dissipation rate is bounded:

    |D[ρ]| ≤ Σ_k ‖L_k‖² · (1 - Tr(ρ²))

This means: **more mixed states dissipate faster**, and the dissipation
vanishes for pure states at steady state (ρ² = ρ).

PHYSICS INTERPRETATION
======================
In the conservative regime (conservation.py), structural charge is
transported but not created or destroyed.  In the dissipative regime:

1. **Purity decay**: Tr(ρ²) decreases monotonically toward 1/d (maximally
   mixed state), measuring information loss to the environment.

2. **Charge leak rate**: The rate at which Noether charge Q = Tr(ρ · O_Q)
   changes is bounded by the dissipator strength and the initial coherence.

3. **Entropy production**: Von Neumann entropy S = -Tr(ρ ln ρ) increases
   monotonically, quantifying irreversibility.

4. **Steady-state conservation**: At the fixed point L[ρ_ss] = 0, a
   *modified* conservation law holds with D[ρ_ss] absorbed into the
   definition of conserved quantities.

TNFR CONNECTION
===============
The Lindblad collapse operators map to TNFR grammar violations:
- L_k ~ destabilizers (OZ, ZHIR, VAL) without stabilizers (IL, THOL)
- The bound |D[ρ]| ~ ‖L_k‖² corresponds to grammar U2 violation magnitude
- Steady-state convergence corresponds to grammar closure (U1b + U2)

STATUS: CANONICAL — Extends conservation.py to dissipative regimes.

References
----------
- Conservative conservation: src/tnfr/physics/conservation.py
- Lindblad generators: src/tnfr/mathematics/generators.py
- ContractiveDynamicsEngine: src/tnfr/mathematics/dynamics.py
- Nodal equation: ∂EPI/∂t = νf · ΔNFR(t) [TNFR.pdf §2.1]
"""

from __future__ import annotations

import math
from dataclasses import dataclass, field
from typing import Any, Sequence

from ..mathematics.unified_numerical import np

try:
    from ..mathematics.backend import ensure_numpy, get_backend
    from ..mathematics.dynamics import ContractiveDynamicsEngine
except ImportError:  # pragma: no cover
    ContractiveDynamicsEngine = None  # type: ignore[assignment,misc]
    ensure_numpy = None  # type: ignore[assignment]
    get_backend = None  # type: ignore[assignment]

# ---------------------------------------------------------------------------
# Dissipation tier thresholds (purity_loss / entropy_gain boundaries)
# ---------------------------------------------------------------------------
_WEAK_DISSIPATION_THRESHOLD = 0.001
_MODERATE_DISSIPATION_THRESHOLD = 0.05
_STRONG_DISSIPATION_THRESHOLD = 0.2

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


@dataclass(frozen=True)
class DissipativeSnapshot:
    """Snapshot of a dissipative density-operator state.

    Captures the structural invariants of a density operator ρ
    evolving under Lindblad dynamics.

    Attributes
    ----------
    density : np.ndarray
        The density operator ρ (dim × dim, Hermitian, Tr=1).
    trace : float
        Tr(ρ) — should be 1.0 for valid states.
    purity : float
        Tr(ρ²) — ranges from 1/d (maximally mixed) to 1 (pure).
    von_neumann_entropy : float
        S = -Tr(ρ ln ρ) — ranges from 0 (pure) to ln(d) (maximally mixed).
    eigenvalues : np.ndarray
        Spectrum of ρ (all should be ≥ 0, sum to 1).
    """

    density: Any  # np.ndarray
    trace: float
    purity: float
    von_neumann_entropy: float
    eigenvalues: Any  # np.ndarray


@dataclass(frozen=True)
class DissipativeBalance:
    """Result of dissipative conservation analysis between two snapshots.

    The modified continuity equation:

        Δρ_s/Δt + div J ≈ S_grammar + D[ρ]

    Attributes
    ----------
    purity_before : float
        Tr(ρ²) before evolution.
    purity_after : float
        Tr(ρ²) after evolution.
    purity_decay_rate : float
        (purity_after - purity_before) / dt — should be ≤ 0.
    entropy_before : float
        Von Neumann entropy before.
    entropy_after : float
        Von Neumann entropy after.
    entropy_production_rate : float
        (S_after - S_before) / dt — should be ≥ 0.
    trace_drift : float
        |Tr(ρ_after) - 1| — measures trace preservation quality.
    dissipation_bound : float
        Theoretical upper bound on |D[ρ]| from collapse operator norms.
    actual_dissipation : float
        Measured dissipation (Frobenius norm of state change beyond
        Hamiltonian contribution).
    charge_leak_rate : float
        Rate of Noether charge loss through dissipation.
    contractivity_gap : float
        ‖ρ_after - ρ_ss‖ / ‖ρ_before - ρ_ss‖ — should be ≤ 1.
    is_contractive : bool
        True when trace distance to steady state is non-increasing.
    """

    purity_before: float
    purity_after: float
    purity_decay_rate: float
    entropy_before: float
    entropy_after: float
    entropy_production_rate: float
    trace_drift: float
    dissipation_bound: float
    actual_dissipation: float
    charge_leak_rate: float
    contractivity_gap: float
    is_contractive: bool


@dataclass
class DissipativeTimeSeries:
    """Full time-series of dissipative conservation diagnostics.

    Tracks the evolution of conservation quantities through the
    Lindblad semigroup trajectory.
    """

    times: list[float] = field(default_factory=list)
    purity: list[float] = field(default_factory=list)
    entropy: list[float] = field(default_factory=list)
    trace_drift: list[float] = field(default_factory=list)
    purity_decay_rate: list[float] = field(default_factory=list)
    entropy_production_rate: list[float] = field(default_factory=list)
    dissipation_bound: list[float] = field(default_factory=list)
    contractivity_gap: list[float] = field(default_factory=list)

    @property
    def is_contractive(self) -> bool:
        """True when all contractivity gaps ≤ 1 (within tolerance)."""
        if not self.contractivity_gap:
            return False
        return all(g <= 1.0 + 1e-9 for g in self.contractivity_gap)

    @property
    def mean_purity_decay(self) -> float:
        """Average purity decay rate across all steps."""
        if not self.purity_decay_rate:
            return 0.0
        return float(np.mean(self.purity_decay_rate))

    @property
    def total_entropy_produced(self) -> float:
        """Total entropy produced across all steps."""
        if len(self.entropy) < 2:
            return 0.0
        return self.entropy[-1] - self.entropy[0]


# ---------------------------------------------------------------------------
# Core computations
# ---------------------------------------------------------------------------


def _steady_state_from_generator(generator: Any, dim: int) -> np.ndarray:
    """Extract the steady-state density operator from a Lindblad generator.

    The steady state sits in the kernel of L (eigenvalue closest to 0).
    """
    gen = _as_complex(generator)
    evals, evecs = np.linalg.eig(gen)
    idx = int(np.argmin(np.abs(evals)))
    rho_ss = evecs[:, idx].reshape((dim, dim), order="F")
    rho_ss = 0.5 * (rho_ss + rho_ss.conj().T)
    trace_val = np.trace(rho_ss)
    if abs(trace_val) < 1e-15:
        raise ValueError(
            "Steady state has zero trace; generator may lack a stationary state."
        )
    return rho_ss / trace_val


# Public alias
steady_state_from_generator = _steady_state_from_generator


def _safe_log(x: float) -> float:
    """Compute log(x) safely, returning 0 for x ≤ 0."""
    if x <= 0.0:
        return 0.0
    return math.log(x)


def _as_complex(matrix: Any) -> np.ndarray:
    """Coerce to complex128 ndarray (single conversion point)."""
    return np.asarray(matrix, dtype=np.complex128)


def _collapse_norms_sq(collapse_operators: Sequence[Any]) -> float:
    """Sum of squared Frobenius norms: Σ_k ‖L_k‖_F²."""
    return sum(
        float(np.linalg.norm(_as_complex(L), ord="fro") ** 2)
        for L in collapse_operators
    )


def capture_dissipative_snapshot(density: Any) -> DissipativeSnapshot:
    """Capture structural invariants of a density operator.

    Parameters
    ----------
    density : np.ndarray
        Density operator (dim × dim, complex).

    Returns
    -------
    DissipativeSnapshot
    """
    rho = _as_complex(density)

    trace_val = float(np.trace(rho).real)
    purity = float(np.trace(rho @ rho).real)

    eigenvalues = np.linalg.eigvalsh(rho)
    # Von Neumann entropy: S = -Σ λ_k ln(λ_k)
    entropy = -sum(
        float(ev) * _safe_log(float(ev)) for ev in eigenvalues if float(ev) > 0
    )

    return DissipativeSnapshot(
        density=rho,
        trace=trace_val,
        purity=purity,
        von_neumann_entropy=entropy,
        eigenvalues=eigenvalues,
    )


def compute_dissipation_bound(
    collapse_operators: Sequence[Any],
    purity: float,
) -> float:
    r"""Compute the theoretical upper bound on the dissipation rate.

    From the Lindblad master equation, the dissipation rate satisfies:

        |D[ρ]| ≤ Σ_k ‖L_k‖_F² · (1 - Tr(ρ²))

    where ‖L_k‖_F is the Frobenius norm of each collapse operator.

    This bound is tight for maximally mixed initial states and vanishes
    for pure states — consistent with the physical intuition that pure
    states in the kernel of the dissipator are at rest.

    Parameters
    ----------
    collapse_operators : Sequence[np.ndarray]
        The Lindblad collapse operators L_k.
    purity : float
        Current purity Tr(ρ²) of the state.

    Returns
    -------
    float
        Upper bound on |D[ρ]|.
    """
    return _collapse_norms_sq(collapse_operators) * max(0.0, 1.0 - purity)


def compute_dissipator_action(
    density: Any,
    collapse_operators: Sequence[Any],
) -> np.ndarray:
    r"""Compute the dissipator action D[ρ] = Σ_k (L_k ρ L_k† - ½{L_k† L_k, ρ}).

    This is the explicit source term in the dissipative continuity equation.

    Parameters
    ----------
    density : np.ndarray
        Current density operator.
    collapse_operators : Sequence[np.ndarray]
        Lindblad collapse operators.

    Returns
    -------
    np.ndarray
        The dissipator matrix D[ρ].
    """
    rho = _as_complex(density)
    result = np.zeros_like(rho)

    for L in collapse_operators:
        L_arr = _as_complex(L)
        L_dag_L = L_arr.conj().T @ L_arr

        result += L_arr @ rho @ L_arr.conj().T
        result -= 0.5 * (L_dag_L @ rho + rho @ L_dag_L)

    return result


def compute_purity_decay_bound(
    collapse_operators: Sequence[Any],
    density: Any,
) -> float:
    r"""Compute the theoretical bound on purity decay rate.

    The purity P = Tr(ρ²) evolves as:

        dP/dt = 2 Tr(ρ · D[ρ])

    The upper bound on the decay rate is:

        |dP/dt| ≤ 2 Σ_k ‖L_k‖² · P · (1 - P/d)

    where d is the Hilbert space dimension.

    Parameters
    ----------
    collapse_operators : Sequence[np.ndarray]
        Lindblad collapse operators.
    density : np.ndarray
        Current density operator.

    Returns
    -------
    float
        Upper bound on |dP/dt|.
    """
    rho = _as_complex(density)
    dim = rho.shape[0]
    purity = float(np.trace(rho @ rho).real)

    # Bound on purity decay rate
    return (
        2.0
        * _collapse_norms_sq(collapse_operators)
        * purity
        * max(0.0, 1.0 - purity / dim)
    )


# ---------------------------------------------------------------------------
# Dissipative balance (two-snapshot comparison)
# ---------------------------------------------------------------------------


def verify_dissipative_balance(
    before: DissipativeSnapshot,
    after: DissipativeSnapshot,
    dt: float = 1.0,
    collapse_operators: Sequence[Any] | None = None,
    steady_state: Any | None = None,
) -> DissipativeBalance:
    r"""Verify the dissipative continuity equation between two snapshots.

    Computes the dissipative analogue of conservation balance:
    - Purity decay rate (should be ≤ 0 for dissipative evolution)
    - Entropy production rate (should be ≥ 0)
    - Contractivity (distance to steady state should decrease)
    - Dissipation bound verification

    Parameters
    ----------
    before, after : DissipativeSnapshot
        Density operator states before and after evolution.
    dt : float
        Time step between snapshots.
    collapse_operators : Sequence[np.ndarray], optional
        Lindblad collapse operators (for computing dissipation bound).
    steady_state : np.ndarray, optional
        Steady-state density operator (for contractivity check).

    Returns
    -------
    DissipativeBalance
    """
    purity_rate = (after.purity - before.purity) / dt
    entropy_rate = (after.von_neumann_entropy - before.von_neumann_entropy) / dt
    trace_drift = abs(after.trace - 1.0)

    # Dissipation bound
    if collapse_operators is not None:
        diss_bound = compute_dissipation_bound(collapse_operators, before.purity)
    else:
        diss_bound = float("nan")

    # Actual dissipation: Frobenius norm of state change per unit time
    rho_before = _as_complex(before.density)
    rho_after = _as_complex(after.density)
    delta_rho = rho_after - rho_before
    actual_diss = float(np.linalg.norm(delta_rho, ord="fro")) / dt

    # Charge leak rate: ‖ρ‖_F as proxy for total structural "charge"
    charge_leak = (
        float(np.linalg.norm(rho_before, ord="fro"))
        - float(np.linalg.norm(rho_after, ord="fro"))
    ) / dt

    # Contractivity: distance to steady state
    if steady_state is not None:
        rho_ss = _as_complex(steady_state)
        dist_before = float(np.linalg.norm(rho_before - rho_ss, ord="fro"))
        dist_after = float(np.linalg.norm(rho_after - rho_ss, ord="fro"))
        if dist_before > 1e-15:
            gap = dist_after / dist_before
        else:
            gap = 0.0 if dist_after < 1e-15 else float("inf")
    else:
        gap = float("nan")

    is_contr = gap <= 1.0 + 1e-9 if not math.isnan(gap) else True

    return DissipativeBalance(
        purity_before=before.purity,
        purity_after=after.purity,
        purity_decay_rate=purity_rate,
        entropy_before=before.von_neumann_entropy,
        entropy_after=after.von_neumann_entropy,
        entropy_production_rate=entropy_rate,
        trace_drift=trace_drift,
        dissipation_bound=diss_bound,
        actual_dissipation=actual_diss,
        charge_leak_rate=charge_leak,
        contractivity_gap=gap,
        is_contractive=is_contr,
    )


# ---------------------------------------------------------------------------
# Dissipative conservation tracker
# ---------------------------------------------------------------------------


class DissipativeConservationTracker:
    """Track conservation law compliance throughout a Lindblad trajectory.

    Links the ContractiveDynamicsEngine (Hilbert-space evolution) with
    the conservation framework (structural field analysis).

    Usage
    -----
    >>> engine = ContractiveDynamicsEngine(generator, hilbert_space)
    >>> tracker = DissipativeConservationTracker(
    ...     engine, collapse_operators=collapse_ops,
    ... )
    >>> report = tracker.evolve_and_track(initial_density, steps=50, dt=0.1)
    >>> print(f"Contractive: {report.is_contractive}")
    >>> print(f"Purity decay: {report.mean_purity_decay:.4f}")
    """

    def __init__(
        self,
        engine: Any,  # ContractiveDynamicsEngine
        *,
        collapse_operators: Sequence[Any] | None = None,
        steady_state: Any | None = None,
    ) -> None:
        self._engine = engine
        self._collapse_operators = list(collapse_operators or [])
        self._steady_state = steady_state
        self._series = DissipativeTimeSeries()
        self._snapshots: list[tuple[float, DissipativeSnapshot]] = []

    @property
    def steady_state(self) -> Any | None:
        """The steady-state density operator, if available."""
        return self._steady_state

    def set_steady_state(self, rho_ss: Any) -> None:
        """set or update the steady-state density operator."""
        self._steady_state = _as_complex(rho_ss)

    def compute_steady_state(self) -> np.ndarray:
        """Compute the steady state from the generator eigendecomposition.

        The steady state is the density operator in the kernel of the
        Lindblad superoperator (eigenvalue closest to zero).

        Returns
        -------
        np.ndarray
            Steady-state density operator ρ_ss.
        """
        generator = _as_complex(self._engine.generator)
        dim = self._engine.hilbert_space.dimension
        rho_ss = _steady_state_from_generator(generator, dim)
        self._steady_state = rho_ss
        return rho_ss

    def record(self, density: Any, t: float = 0.0) -> DissipativeSnapshot:
        """Record a snapshot and compute balance against previous snapshot.

        Parameters
        ----------
        density : np.ndarray
            Current density operator.
        t : float
            Current time stamp.

        Returns
        -------
        DissipativeSnapshot
        """
        snap = capture_dissipative_snapshot(density)
        self._snapshots.append((t, snap))

        # Compute balance against previous snapshot (or defaults for first)
        if len(self._snapshots) >= 2:
            t_prev, snap_prev = self._snapshots[-2]
            dt = t - t_prev if t != t_prev else 1.0
            bal = verify_dissipative_balance(
                snap_prev,
                snap,
                dt=dt,
                collapse_operators=self._collapse_operators or None,
                steady_state=self._steady_state,
            )
            td, pdr, epr, db, cg = (
                bal.trace_drift,
                bal.purity_decay_rate,
                bal.entropy_production_rate,
                bal.dissipation_bound,
                bal.contractivity_gap,
            )
        else:
            td, pdr, epr, db, cg = abs(snap.trace - 1.0), 0.0, 0.0, 0.0, 1.0

        s = self._series
        s.times.append(t)
        s.purity.append(snap.purity)
        s.entropy.append(snap.von_neumann_entropy)
        s.trace_drift.append(td)
        s.purity_decay_rate.append(pdr)
        s.entropy_production_rate.append(epr)
        s.dissipation_bound.append(db)
        s.contractivity_gap.append(cg)

        return snap

    def evolve_and_track(
        self,
        initial_density: Any,
        *,
        steps: int,
        dt: float = 1.0,
    ) -> DissipativeTimeSeries:
        """Evolve and track conservation through the full trajectory.

        Uses the ContractiveDynamicsEngine to step the density operator
        while recording all dissipative conservation diagnostics.

        Parameters
        ----------
        initial_density : np.ndarray
            Initial density operator.
        steps : int
            Number of evolution steps.
        dt : float
            Time step per evolution step.

        Returns
        -------
        DissipativeTimeSeries
            Complete dissipative conservation diagnostics.
        """
        if ensure_numpy is None:
            raise ImportError("Mathematics backend required for evolve_and_track")

        current = np.asarray(initial_density, dtype=np.complex128)
        self.record(current, t=0.0)

        for k in range(steps):
            evolved = self._engine.step(current, dt=dt)
            current = np.asarray(ensure_numpy(evolved), dtype=np.complex128)
            self.record(current, t=(k + 1) * dt)

        return self._series

    def report(self) -> DissipativeTimeSeries:
        """Return the accumulated time-series diagnostics."""
        return self._series

    @property
    def latest_balance(self) -> DissipativeBalance | None:
        """Return the most recent dissipative balance, or None."""
        if len(self._snapshots) < 2:
            return None
        t_prev, snap_prev = self._snapshots[-2]
        t_curr, snap_curr = self._snapshots[-1]
        dt = t_curr - t_prev if t_curr != t_prev else 1.0
        return verify_dissipative_balance(
            snap_prev,
            snap_curr,
            dt=dt,
            collapse_operators=self._collapse_operators or None,
            steady_state=self._steady_state,
        )


# ---------------------------------------------------------------------------
# Analytical predictions for specific models
# ---------------------------------------------------------------------------


def predict_amplitude_damping_purity(
    initial_purity: float,
    gamma: float,
    time: float,
    dim: int = 2,
) -> float:
    r"""Predict purity evolution under amplitude damping.

    For a qubit (dim=2) with amplitude damping rate γ, the purity
    evolves as:

        P(t) → 1 - (1 - P(0)) · e^{-γt} + corrections

    More precisely, the steady state is |0⟩⟨0| (purity = 1), and
    the purity approaches 1 exponentially from below.

    Parameters
    ----------
    initial_purity : float
        Tr(ρ₀²) of the initial state.
    gamma : float
        Amplitude damping rate.
    time : float
        Evolution time.
    dim : int
        Hilbert space dimension (default 2 for qubit).

    Returns
    -------
    float
        Predicted purity P(t).
    """
    # For amplitude damping, the steady state is pure (P_ss = 1)
    # The deviation from steady state decays exponentially
    decay = math.exp(-gamma * time)
    # Purity approaches 1 at rate controlled by γ
    # P(t) ≈ 1 - (1 - P(0)) · e^{-γt} for weak mixing
    return 1.0 - (1.0 - initial_purity) * decay


def predict_dephasing_purity(
    initial_density: Any,
    gamma: float,
    time: float,
) -> float:
    r"""Predict purity evolution under pure dephasing.

    For pure dephasing with rate γ, off-diagonal elements decay as
    e^{-γt/2} while diagonal elements are preserved.  The purity is:

        P(t) = Σ_i ρ_ii² + Σ_{i≠j} |ρ_ij|² · e^{-γ_{ij} t}

    where γ_{ij} depends on the dephasing operator eigenvalues.

    Parameters
    ----------
    initial_density : np.ndarray
        Initial density operator.
    gamma : float
        Dephasing rate.
    time : float
        Evolution time.

    Returns
    -------
    float
        Predicted purity P(t).
    """
    rho = _as_complex(initial_density)
    dim = rho.shape[0]
    decay = math.exp(-gamma * time)
    diag_purity = sum(float(abs(rho[i, i]) ** 2) for i in range(dim))
    offdiag_purity = sum(
        float(abs(rho[i, j]) ** 2) for i in range(dim) for j in range(dim) if i != j
    )
    return diag_purity + offdiag_purity * decay


# ---------------------------------------------------------------------------
# Dissipation rate analysis
# ---------------------------------------------------------------------------


def analyze_dissipation_rates(
    generator: Any,
    dim: int,
) -> dict[str, Any]:
    r"""Analyze the dissipation rates from the Lindblad generator spectrum.

    The eigenvalues of the Lindblad superoperator L determine:
    - λ₀ = 0: steady-state eigenvalue (always present for valid L)
    - Re(λ_k) < 0: decay rates of each mode
    - Im(λ_k): oscillation frequencies (coherent dynamics)

    The **spectral gap** Δ = min_k(-Re(λ_k)) for λ_k ≠ 0 determines
    the relaxation time τ = 1/Δ: how fast the system reaches steady state.

    Parameters
    ----------
    generator : np.ndarray
        Lindblad superoperator (dim²×dim² matrix).
    dim : int
        Hilbert space dimension.

    Returns
    -------
    dict with:
        'eigenvalues' : np.ndarray — full spectrum
        'decay_rates' : np.ndarray — -Re(λ_k) for k > 0 (positive values)
        'oscillation_frequencies' : np.ndarray — |Im(λ_k)|
        'spectral_gap' : float — smallest nonzero decay rate
        'relaxation_time' : float — 1/spectral_gap
        'n_steady_modes' : int — number of zero eigenvalues
        'n_oscillating_modes' : int — modes with |Im(λ)| > threshold
    """
    gen_np = _as_complex(generator)
    eigenvalues = np.linalg.eigvals(gen_np)

    # Separate real and imaginary parts
    real_parts = eigenvalues.real
    imag_parts = eigenvalues.imag

    # Steady-state modes: |λ| ≈ 0
    atol = 1e-9
    steady_mask = np.abs(eigenvalues) < atol
    n_steady = int(np.sum(steady_mask))

    # Decay rates: -Re(λ) for non-steady modes
    non_steady = ~steady_mask
    decay_rates = np.sort(-real_parts[non_steady])
    # Keep only positive decay rates (physically meaningful)
    decay_rates = decay_rates[decay_rates > atol]

    # Spectral gap
    if len(decay_rates) > 0:
        spectral_gap = float(decay_rates[0])
        relaxation_time = 1.0 / spectral_gap
    else:
        spectral_gap = 0.0
        relaxation_time = float("inf")

    # Oscillating modes
    osc_threshold = 1e-6
    n_oscillating = int(np.sum(np.abs(imag_parts) > osc_threshold))

    return {
        "eigenvalues": eigenvalues,
        "decay_rates": decay_rates,
        "oscillation_frequencies": np.abs(imag_parts),
        "spectral_gap": spectral_gap,
        "relaxation_time": relaxation_time,
        "n_steady_modes": n_steady,
        "n_oscillating_modes": n_oscillating,
    }


# ---------------------------------------------------------------------------
# Connection to TNFR grammar
# ---------------------------------------------------------------------------


def classify_dissipative_regime(
    balance: DissipativeBalance,
) -> dict[str, Any]:
    r"""Classify the dissipative regime in TNFR grammar terms.

    Maps Lindblad dynamics properties to grammar violations and
    structural interpretations.

    Parameters
    ----------
    balance : DissipativeBalance
        Result from verify_dissipative_balance.

    Returns
    -------
    dict with:
        'regime' : str — 'weak_dissipation', 'moderate_dissipation',
                         'strong_dissipation', or 'decoherence'
        'grammar_analog' : str — Which grammar rule is "soft-violated"
        'conservation_quality' : float — 0 to 1 (1 = conservative)
        'structural_interpretation' : str — Physical meaning
    """
    purity_loss = max(0.0, balance.purity_before - balance.purity_after)
    entropy_gain = max(0.0, balance.entropy_after - balance.entropy_before)

    if (
        purity_loss < _WEAK_DISSIPATION_THRESHOLD
        and entropy_gain < _WEAK_DISSIPATION_THRESHOLD
    ):
        regime = "weak_dissipation"
        grammar = (
            "U2 approximately satisfied — stabilizers nearly balance destabilizers"
        )
        interpretation = (
            "Near-conservative evolution; structural charge approximately conserved. "
            "Lindblad collapse operators are weak relative to Hamiltonian dynamics."
        )
        quality = 1.0 - purity_loss * 10
    elif purity_loss < _MODERATE_DISSIPATION_THRESHOLD:
        regime = "moderate_dissipation"
        grammar = "U2 partially violated — destabilizers exceed stabilizer capacity"
        interpretation = (
            "Controlled dissipation; purity decreases at bounded rate. "
            "Structural charge leaks through collapse channels but remains largely conserved."
        )
        quality = max(0.0, 1.0 - purity_loss * 5)
    elif purity_loss < _STRONG_DISSIPATION_THRESHOLD:
        regime = "strong_dissipation"
        grammar = "U2 significantly violated — rapid approach to steady state"
        interpretation = (
            "Strong decoherence; rapid purity loss. "
            "Structural conservation breaks down; system approaches maximally mixed state."
        )
        quality = max(0.0, 1.0 - purity_loss * 2)
    else:
        regime = "decoherence"
        grammar = "U2 fully violated — no stabilizer present to counter loss"
        interpretation = (
            "Full decoherence regime; conservation inapplicable. "
            "System has lost structural coherence entirely."
        )
        quality = max(0.0, 0.5 - purity_loss)

    return {
        "regime": regime,
        "grammar_analog": grammar,
        "conservation_quality": max(0.0, min(1.0, quality)),
        "structural_interpretation": interpretation,
    }


# ---------------------------------------------------------------------------
# Public API
# ---------------------------------------------------------------------------

__all__ = [
    # Data structures
    "DissipativeSnapshot",
    "DissipativeBalance",
    "DissipativeTimeSeries",
    # Core computations
    "capture_dissipative_snapshot",
    "compute_dissipation_bound",
    "compute_dissipator_action",
    "compute_purity_decay_bound",
    # Balance and tracking
    "verify_dissipative_balance",
    "DissipativeConservationTracker",
    # Analytical predictions
    "predict_amplitude_damping_purity",
    "predict_dephasing_purity",
    # Dissipation analysis
    "analyze_dissipation_rates",
    # Grammar classification
    "classify_dissipative_regime",
    # Internal but useful
    "steady_state_from_generator",
]