tensor-network-visualization 1.6.3__tar.gz → 2.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {tensor_network_visualization-1.6.3/src/tensor_network_visualization.egg-info → tensor_network_visualization-2.0.0}/PKG-INFO +55 -2
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/README.md +49 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/pyproject.toml +18 -14
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0/src/tensor_network_visualization.egg-info}/PKG-INFO +55 -2
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_visualization.egg-info/SOURCES.txt +1 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_visualization.egg-info/requires.txt +1 -1
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/fonts_and_scale.py +100 -12
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/graph_pipeline.py +2 -1
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/direction_common.py +10 -2
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/force_directed.py +247 -247
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/free_directions_2d.py +38 -23
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/free_directions_3d.py +13 -7
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/generic_coarsening.py +65 -2
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/positions.py +97 -31
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout_structure.py +153 -10
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/bridge.py +13 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/controller.py +75 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interactive_scene.py +1 -1
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_matplotlib_state.py +4 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/contraction_cost.py +2 -2
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/viewer.py +28 -5
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_bench_user_workflows.py +246 -246
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_contraction_cost.py +3 -3
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_contraction_viewer.py +4 -4
- tensor_network_visualization-2.0.0/tests/test_documentation_gallery.py +107 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_einsum_backend.py +6 -4
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_layout_core.py +210 -10
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_packaging_metadata.py +7 -1
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_plotting.py +233 -2
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/LICENSE +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/setup.cfg +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_visualization.egg-info/dependency_links.txt +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_visualization.egg-info/top_level.txt +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_auto_display.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_contraction_viewer_style.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_contraction_viewer_ui.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/_draw_common.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/_label_format.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/_nodes_edges_common.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/axis_directions.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/contractions.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/curves.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/constants.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/contraction_edges.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/contraction_scheme.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/dangling_self_edges.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/disk_metrics.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/edge_labels.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/edge_orchestration.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/edges.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/hover.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/label_descriptors.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/labels_misc.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/pick_distance.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/plotter.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/plotter_2d.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/plotter_3d.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/plotter_common.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/render_prep.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/scene_state.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/tensors.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/vectors.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/draw/viewport_geometry.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/focus.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/graph.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/graph_cache.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/graph_utils.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/body.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/geometry.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/parameters.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout/types.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout_structure_coordinates.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/layout_structure_sparse_grid.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_core/renderer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_engine_specs.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_import_state.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_input_inspection.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/controls.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/scheme.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/state.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/tensor_inspector.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_interaction/views.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_logging.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_registry.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_comparison_support.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_elements_controller.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_elements_data.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_elements_inputs.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_elements_models.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_elements_payloads.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_elements_rendering.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_tensor_elements_support.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_typing.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_ui_utils.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/_widgets.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/config.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/contraction_viewer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/_backend.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/_equation.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/_trace_state.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/_trace_types.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/graph.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/renderer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/einsum_module/trace.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/exceptions.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/interactive_viewer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/py.typed +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/quimb/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/quimb/graph.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/quimb/renderer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/snapshot.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tenpy/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tenpy/explicit.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tenpy/graph.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tenpy/renderer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensor_comparison.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensor_comparison_config.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensor_elements.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensor_elements_config.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensorkrowch/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensorkrowch/_history.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensorkrowch/graph.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensorkrowch/renderer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensornetwork/__init__.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensornetwork/graph.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/src/tensor_network_viz/tensornetwork/renderer.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_ci_workflow.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_contraction_groups_once.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_contraction_scheme.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_contraction_scheme_api.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_demo_cli_scheme.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_draw_performance.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_edge_index_label_2d.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_edge_index_label_3d.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_einsum_autotrace.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_engine_detection.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_engineering_baseline.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_examples.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_examples_structure.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_graph_cache.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_integration_einsum.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_integration_tensorkrowch.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_integration_tensornetwork.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_interaction_controls.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_interaction_state.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_label_draw_metrics_perf.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_label_format.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_lazy_imports.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_logging_and_exceptions.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_matplotlib_state.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_node_degrees_perf.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_public_api.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_quimb_backend.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_render_performance_controls.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_show_tensor_network_throughput.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_snapshot_api.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_tenpy_backend.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_tensor_comparison.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_tensor_elements.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_tensor_elements_perf.py +0 -0
- {tensor_network_visualization-1.6.3 → tensor_network_visualization-2.0.0}/tests/test_verify_script.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tensor-network-visualization
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: Minimal Matplotlib visualizations for TensorKrowch, TensorNetwork, Quimb, TeNPy, and traced PyTorch/NumPy einsum tensor networks.
|
|
5
5
|
Author: Alejandro Mata Ali
|
|
6
6
|
License-Expression: MIT
|
|
@@ -10,18 +10,22 @@ Project-URL: Changelog, https://github.com/DOKOS-TAYOS/Tensor-Network-Visualizat
|
|
|
10
10
|
Project-URL: Repository, https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization
|
|
11
11
|
Project-URL: Issues, https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization/issues
|
|
12
12
|
Keywords: tensor-network,visualization,pytorch,numpy,tensorkrowch,tensornetwork,quimb,tenpy,einsum,quantum-inspired,matplotlib
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
13
16
|
Classifier: Programming Language :: Python :: 3
|
|
14
17
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
21
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
22
|
+
Classifier: Typing :: Typed
|
|
19
23
|
Requires-Python: >=3.11
|
|
20
24
|
Description-Content-Type: text/markdown
|
|
21
25
|
License-File: LICENSE
|
|
22
26
|
Requires-Dist: matplotlib>=3.7
|
|
23
27
|
Requires-Dist: networkx>=3.0
|
|
24
|
-
Requires-Dist: numpy
|
|
28
|
+
Requires-Dist: numpy>=2.0
|
|
25
29
|
Provides-Extra: dev
|
|
26
30
|
Requires-Dist: build; extra == "dev"
|
|
27
31
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -49,6 +53,14 @@ Provides-Extra: einsum
|
|
|
49
53
|
Requires-Dist: torch; extra == "einsum"
|
|
50
54
|
Dynamic: license-file
|
|
51
55
|
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img
|
|
58
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/tensor_network_visualization_logo.png"
|
|
59
|
+
alt="Tensor-Network-Visualization logo"
|
|
60
|
+
width="420"
|
|
61
|
+
>
|
|
62
|
+
</p>
|
|
63
|
+
|
|
52
64
|
# Tensor-Network-Visualization
|
|
53
65
|
|
|
54
66
|
[](https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization/actions/workflows/ci.yml)
|
|
@@ -59,6 +71,47 @@ Dynamic: license-file
|
|
|
59
71
|
Minimal Matplotlib visualizations for TensorKrowch, TensorNetwork, Quimb, TeNPy, and traced
|
|
60
72
|
PyTorch/NumPy `einsum` tensor networks.
|
|
61
73
|
|
|
74
|
+
## Gallery
|
|
75
|
+
|
|
76
|
+
These are exports generated with the library and the repository demos. The clean renders use
|
|
77
|
+
transparent PNGs; the controls example keeps its background so the menu stays readable.
|
|
78
|
+
|
|
79
|
+
<p align="center">
|
|
80
|
+
<img
|
|
81
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/cubic_peps_3d.png"
|
|
82
|
+
alt="Cubic PEPS 3D tensor network visualization"
|
|
83
|
+
width="230"
|
|
84
|
+
>
|
|
85
|
+
<img
|
|
86
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/mera_2d.png"
|
|
87
|
+
alt="MERA 2D tensor network visualization with labels"
|
|
88
|
+
width="230"
|
|
89
|
+
>
|
|
90
|
+
<img
|
|
91
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tubular_grid_3d.png"
|
|
92
|
+
alt="Tubular 3D tensor network visualization"
|
|
93
|
+
width="230"
|
|
94
|
+
>
|
|
95
|
+
</p>
|
|
96
|
+
|
|
97
|
+
<p align="center">
|
|
98
|
+
<img
|
|
99
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/network_controls.png"
|
|
100
|
+
alt="MPS with controls, tensor labels, and index labels"
|
|
101
|
+
width="230"
|
|
102
|
+
>
|
|
103
|
+
<img
|
|
104
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tensor_elements_phase.png"
|
|
105
|
+
alt="Tensor elements phase visualization"
|
|
106
|
+
width="230"
|
|
107
|
+
>
|
|
108
|
+
<img
|
|
109
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tensor_elements_controls.png"
|
|
110
|
+
alt="Tensor elements view with the full control menus"
|
|
111
|
+
width="230"
|
|
112
|
+
>
|
|
113
|
+
</p>
|
|
114
|
+
|
|
62
115
|
## Why This Exists
|
|
63
116
|
|
|
64
117
|
Tensor-network libraries expose different Python objects. This package gives them a small shared
|
|
@@ -1,3 +1,11 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img
|
|
3
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/tensor_network_visualization_logo.png"
|
|
4
|
+
alt="Tensor-Network-Visualization logo"
|
|
5
|
+
width="420"
|
|
6
|
+
>
|
|
7
|
+
</p>
|
|
8
|
+
|
|
1
9
|
# Tensor-Network-Visualization
|
|
2
10
|
|
|
3
11
|
[](https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization/actions/workflows/ci.yml)
|
|
@@ -8,6 +16,47 @@
|
|
|
8
16
|
Minimal Matplotlib visualizations for TensorKrowch, TensorNetwork, Quimb, TeNPy, and traced
|
|
9
17
|
PyTorch/NumPy `einsum` tensor networks.
|
|
10
18
|
|
|
19
|
+
## Gallery
|
|
20
|
+
|
|
21
|
+
These are exports generated with the library and the repository demos. The clean renders use
|
|
22
|
+
transparent PNGs; the controls example keeps its background so the menu stays readable.
|
|
23
|
+
|
|
24
|
+
<p align="center">
|
|
25
|
+
<img
|
|
26
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/cubic_peps_3d.png"
|
|
27
|
+
alt="Cubic PEPS 3D tensor network visualization"
|
|
28
|
+
width="230"
|
|
29
|
+
>
|
|
30
|
+
<img
|
|
31
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/mera_2d.png"
|
|
32
|
+
alt="MERA 2D tensor network visualization with labels"
|
|
33
|
+
width="230"
|
|
34
|
+
>
|
|
35
|
+
<img
|
|
36
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tubular_grid_3d.png"
|
|
37
|
+
alt="Tubular 3D tensor network visualization"
|
|
38
|
+
width="230"
|
|
39
|
+
>
|
|
40
|
+
</p>
|
|
41
|
+
|
|
42
|
+
<p align="center">
|
|
43
|
+
<img
|
|
44
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/network_controls.png"
|
|
45
|
+
alt="MPS with controls, tensor labels, and index labels"
|
|
46
|
+
width="230"
|
|
47
|
+
>
|
|
48
|
+
<img
|
|
49
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tensor_elements_phase.png"
|
|
50
|
+
alt="Tensor elements phase visualization"
|
|
51
|
+
width="230"
|
|
52
|
+
>
|
|
53
|
+
<img
|
|
54
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tensor_elements_controls.png"
|
|
55
|
+
alt="Tensor elements view with the full control menus"
|
|
56
|
+
width="230"
|
|
57
|
+
>
|
|
58
|
+
</p>
|
|
59
|
+
|
|
11
60
|
## Why This Exists
|
|
12
61
|
|
|
13
62
|
Tensor-network libraries expose different Python objects. This package gives them a small shared
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "tensor-network-visualization"
|
|
7
|
-
version = "
|
|
7
|
+
version = "2.0.0"
|
|
8
8
|
description = "Minimal Matplotlib visualizations for TensorKrowch, TensorNetwork, Quimb, TeNPy, and traced PyTorch/NumPy einsum tensor networks."
|
|
9
9
|
authors = [{ name = "Alejandro Mata Ali" }]
|
|
10
10
|
readme = "README.md"
|
|
@@ -12,19 +12,23 @@ license = "MIT"
|
|
|
12
12
|
license-files = ["LICENSE"]
|
|
13
13
|
requires-python = ">=3.11"
|
|
14
14
|
keywords = ["tensor-network", "visualization", "pytorch", "numpy", "tensorkrowch", "tensornetwork", "quimb", "tenpy", "einsum", "quantum-inspired", "matplotlib"]
|
|
15
|
-
dependencies = [
|
|
16
|
-
"matplotlib>=3.7",
|
|
17
|
-
"networkx>=3.0",
|
|
18
|
-
"numpy",
|
|
19
|
-
]
|
|
20
|
-
classifiers = [
|
|
21
|
-
"
|
|
22
|
-
"
|
|
23
|
-
"
|
|
24
|
-
"Programming Language :: Python :: 3
|
|
25
|
-
"Programming Language :: Python :: 3
|
|
26
|
-
"
|
|
27
|
-
|
|
15
|
+
dependencies = [
|
|
16
|
+
"matplotlib>=3.7",
|
|
17
|
+
"networkx>=3.0",
|
|
18
|
+
"numpy>=2.0",
|
|
19
|
+
]
|
|
20
|
+
classifiers = [
|
|
21
|
+
"Development Status :: 5 - Production/Stable",
|
|
22
|
+
"Intended Audience :: Science/Research",
|
|
23
|
+
"Operating System :: OS Independent",
|
|
24
|
+
"Programming Language :: Python :: 3",
|
|
25
|
+
"Programming Language :: Python :: 3 :: Only",
|
|
26
|
+
"Programming Language :: Python :: 3.11",
|
|
27
|
+
"Programming Language :: Python :: 3.12",
|
|
28
|
+
"Programming Language :: Python :: 3.13",
|
|
29
|
+
"Topic :: Scientific/Engineering :: Visualization",
|
|
30
|
+
"Typing :: Typed",
|
|
31
|
+
]
|
|
28
32
|
|
|
29
33
|
[project.urls]
|
|
30
34
|
Homepage = "https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: tensor-network-visualization
|
|
3
|
-
Version:
|
|
3
|
+
Version: 2.0.0
|
|
4
4
|
Summary: Minimal Matplotlib visualizations for TensorKrowch, TensorNetwork, Quimb, TeNPy, and traced PyTorch/NumPy einsum tensor networks.
|
|
5
5
|
Author: Alejandro Mata Ali
|
|
6
6
|
License-Expression: MIT
|
|
@@ -10,18 +10,22 @@ Project-URL: Changelog, https://github.com/DOKOS-TAYOS/Tensor-Network-Visualizat
|
|
|
10
10
|
Project-URL: Repository, https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization
|
|
11
11
|
Project-URL: Issues, https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization/issues
|
|
12
12
|
Keywords: tensor-network,visualization,pytorch,numpy,tensorkrowch,tensornetwork,quimb,tenpy,einsum,quantum-inspired,matplotlib
|
|
13
|
+
Classifier: Development Status :: 5 - Production/Stable
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
13
16
|
Classifier: Programming Language :: Python :: 3
|
|
14
17
|
Classifier: Programming Language :: Python :: 3 :: Only
|
|
15
18
|
Classifier: Programming Language :: Python :: 3.11
|
|
16
19
|
Classifier: Programming Language :: Python :: 3.12
|
|
17
20
|
Classifier: Programming Language :: Python :: 3.13
|
|
18
21
|
Classifier: Topic :: Scientific/Engineering :: Visualization
|
|
22
|
+
Classifier: Typing :: Typed
|
|
19
23
|
Requires-Python: >=3.11
|
|
20
24
|
Description-Content-Type: text/markdown
|
|
21
25
|
License-File: LICENSE
|
|
22
26
|
Requires-Dist: matplotlib>=3.7
|
|
23
27
|
Requires-Dist: networkx>=3.0
|
|
24
|
-
Requires-Dist: numpy
|
|
28
|
+
Requires-Dist: numpy>=2.0
|
|
25
29
|
Provides-Extra: dev
|
|
26
30
|
Requires-Dist: build; extra == "dev"
|
|
27
31
|
Requires-Dist: pytest; extra == "dev"
|
|
@@ -49,6 +53,14 @@ Provides-Extra: einsum
|
|
|
49
53
|
Requires-Dist: torch; extra == "einsum"
|
|
50
54
|
Dynamic: license-file
|
|
51
55
|
|
|
56
|
+
<p align="center">
|
|
57
|
+
<img
|
|
58
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/tensor_network_visualization_logo.png"
|
|
59
|
+
alt="Tensor-Network-Visualization logo"
|
|
60
|
+
width="420"
|
|
61
|
+
>
|
|
62
|
+
</p>
|
|
63
|
+
|
|
52
64
|
# Tensor-Network-Visualization
|
|
53
65
|
|
|
54
66
|
[](https://github.com/DOKOS-TAYOS/Tensor-Network-Visualization/actions/workflows/ci.yml)
|
|
@@ -59,6 +71,47 @@ Dynamic: license-file
|
|
|
59
71
|
Minimal Matplotlib visualizations for TensorKrowch, TensorNetwork, Quimb, TeNPy, and traced
|
|
60
72
|
PyTorch/NumPy `einsum` tensor networks.
|
|
61
73
|
|
|
74
|
+
## Gallery
|
|
75
|
+
|
|
76
|
+
These are exports generated with the library and the repository demos. The clean renders use
|
|
77
|
+
transparent PNGs; the controls example keeps its background so the menu stays readable.
|
|
78
|
+
|
|
79
|
+
<p align="center">
|
|
80
|
+
<img
|
|
81
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/cubic_peps_3d.png"
|
|
82
|
+
alt="Cubic PEPS 3D tensor network visualization"
|
|
83
|
+
width="230"
|
|
84
|
+
>
|
|
85
|
+
<img
|
|
86
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/mera_2d.png"
|
|
87
|
+
alt="MERA 2D tensor network visualization with labels"
|
|
88
|
+
width="230"
|
|
89
|
+
>
|
|
90
|
+
<img
|
|
91
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tubular_grid_3d.png"
|
|
92
|
+
alt="Tubular 3D tensor network visualization"
|
|
93
|
+
width="230"
|
|
94
|
+
>
|
|
95
|
+
</p>
|
|
96
|
+
|
|
97
|
+
<p align="center">
|
|
98
|
+
<img
|
|
99
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/network_controls.png"
|
|
100
|
+
alt="MPS with controls, tensor labels, and index labels"
|
|
101
|
+
width="230"
|
|
102
|
+
>
|
|
103
|
+
<img
|
|
104
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tensor_elements_phase.png"
|
|
105
|
+
alt="Tensor elements phase visualization"
|
|
106
|
+
width="230"
|
|
107
|
+
>
|
|
108
|
+
<img
|
|
109
|
+
src="https://raw.githubusercontent.com/DOKOS-TAYOS/Tensor-Network-Visualization/main/images/gallery/tensor_elements_controls.png"
|
|
110
|
+
alt="Tensor elements view with the full control menus"
|
|
111
|
+
width="230"
|
|
112
|
+
>
|
|
113
|
+
</p>
|
|
114
|
+
|
|
62
115
|
## Why This Exists
|
|
63
116
|
|
|
64
117
|
Tensor-network libraries expose different Python objects. This package gives them a small shared
|
|
@@ -128,6 +128,7 @@ tests/test_contraction_scheme.py
|
|
|
128
128
|
tests/test_contraction_scheme_api.py
|
|
129
129
|
tests/test_contraction_viewer.py
|
|
130
130
|
tests/test_demo_cli_scheme.py
|
|
131
|
+
tests/test_documentation_gallery.py
|
|
131
132
|
tests/test_draw_performance.py
|
|
132
133
|
tests/test_edge_index_label_2d.py
|
|
133
134
|
tests/test_edge_index_label_3d.py
|
|
@@ -3,11 +3,13 @@ from __future__ import annotations
|
|
|
3
3
|
import functools
|
|
4
4
|
import math
|
|
5
5
|
from dataclasses import dataclass
|
|
6
|
+
from typing import Any, cast
|
|
6
7
|
|
|
7
8
|
import numpy as np
|
|
8
9
|
from matplotlib.axes import Axes
|
|
9
10
|
from matplotlib.figure import Figure
|
|
10
11
|
from matplotlib.font_manager import FontProperties
|
|
12
|
+
from matplotlib.text import Text
|
|
11
13
|
from matplotlib.textpath import TextPath
|
|
12
14
|
|
|
13
15
|
from ..._matplotlib_state import (
|
|
@@ -174,33 +176,118 @@ def _draw_scale_params(
|
|
|
174
176
|
_ZOOM_FONT_CLAMP: tuple[float, float] = (0.28, 5.5)
|
|
175
177
|
|
|
176
178
|
|
|
179
|
+
def _current_2d_span(ax: Axes) -> float:
|
|
180
|
+
x0, x1 = ax.get_xlim()
|
|
181
|
+
y0, y1 = ax.get_ylim()
|
|
182
|
+
return max(float(x1 - x0), float(y1 - y0), 1e-9)
|
|
183
|
+
|
|
184
|
+
|
|
185
|
+
def _zoom_font_factor(*, ref_span: float, current_span: float) -> float:
|
|
186
|
+
lo, hi = _ZOOM_FONT_CLAMP
|
|
187
|
+
factor = float(ref_span) / max(float(current_span), 1e-9)
|
|
188
|
+
return float(np.clip(factor, lo, hi))
|
|
189
|
+
|
|
190
|
+
|
|
191
|
+
def _text_font_sizes(ax: Axes) -> dict[Text, float]:
|
|
192
|
+
return {text: float(text.get_fontsize()) for text in ax.texts if isinstance(text, Text)}
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
def _pruned_zoom_font_sizes(
|
|
196
|
+
sizes: dict[Any, float],
|
|
197
|
+
*,
|
|
198
|
+
current_texts: tuple[Text, ...],
|
|
199
|
+
) -> dict[Text, float]:
|
|
200
|
+
current_ids = {id(text) for text in current_texts}
|
|
201
|
+
return {
|
|
202
|
+
text: float(base_fontsize)
|
|
203
|
+
for text, base_fontsize in sizes.items()
|
|
204
|
+
if isinstance(text, Text) and id(text) in current_ids and text.figure is not None
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
|
|
208
|
+
def _resolve_zoom_font_state(
|
|
209
|
+
ax: Axes,
|
|
210
|
+
*,
|
|
211
|
+
preserve_ref_span: bool,
|
|
212
|
+
) -> tuple[float, dict[Text, float]]:
|
|
213
|
+
current_span = _current_2d_span(ax)
|
|
214
|
+
current_texts = tuple(text for text in ax.texts if isinstance(text, Text))
|
|
215
|
+
current_sizes = _text_font_sizes(ax)
|
|
216
|
+
if not preserve_ref_span:
|
|
217
|
+
return current_span, current_sizes
|
|
218
|
+
|
|
219
|
+
existing_state = get_zoom_font_state(ax)
|
|
220
|
+
if existing_state is None:
|
|
221
|
+
return current_span, current_sizes
|
|
222
|
+
|
|
223
|
+
ref_span = float(existing_state["ref_span"])
|
|
224
|
+
existing_sizes = _pruned_zoom_font_sizes(
|
|
225
|
+
cast(dict[Any, float], existing_state["sizes"]),
|
|
226
|
+
current_texts=current_texts,
|
|
227
|
+
)
|
|
228
|
+
resolved_sizes: dict[Text, float] = {}
|
|
229
|
+
for text in current_texts:
|
|
230
|
+
base_fontsize = existing_sizes.get(text)
|
|
231
|
+
if base_fontsize is None:
|
|
232
|
+
base_fontsize = float(current_sizes[text])
|
|
233
|
+
resolved_sizes[text] = float(base_fontsize)
|
|
234
|
+
return ref_span, resolved_sizes
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
def _zoom_callback_registered(ax: Axes, signal_name: str, cid: object) -> bool:
|
|
238
|
+
callbacks = getattr(ax.callbacks, "callbacks", None)
|
|
239
|
+
if not isinstance(callbacks, dict):
|
|
240
|
+
return False
|
|
241
|
+
signal_callbacks = callbacks.get(signal_name)
|
|
242
|
+
return isinstance(signal_callbacks, dict) and cid in signal_callbacks
|
|
243
|
+
|
|
244
|
+
|
|
245
|
+
def _zoom_callbacks_connected(ax: Axes, cids: list[Any]) -> bool:
|
|
246
|
+
if len(cids) != 2:
|
|
247
|
+
return False
|
|
248
|
+
return _zoom_callback_registered(ax, "xlim_changed", cids[0]) and _zoom_callback_registered(
|
|
249
|
+
ax,
|
|
250
|
+
"ylim_changed",
|
|
251
|
+
cids[1],
|
|
252
|
+
)
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
def _disconnect_zoom_callbacks(ax: Axes, cids: list[Any]) -> None:
|
|
256
|
+
for cid in cids:
|
|
257
|
+
try:
|
|
258
|
+
ax.callbacks.disconnect(cid)
|
|
259
|
+
except (AttributeError, KeyError, TypeError, ValueError):
|
|
260
|
+
continue
|
|
261
|
+
|
|
262
|
+
|
|
177
263
|
def _on_2d_limits_changed(ax: Axes) -> None:
|
|
178
264
|
state = get_zoom_font_state(ax)
|
|
179
265
|
if state is None:
|
|
180
266
|
return
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
lo, hi = _ZOOM_FONT_CLAMP
|
|
186
|
-
factor = float(np.clip(factor, lo, hi))
|
|
267
|
+
factor = _zoom_font_factor(
|
|
268
|
+
ref_span=float(state["ref_span"]),
|
|
269
|
+
current_span=_current_2d_span(ax),
|
|
270
|
+
)
|
|
187
271
|
for text, base_fs in state["sizes"].items():
|
|
188
272
|
if text.figure is None:
|
|
189
273
|
continue
|
|
190
274
|
text.set_fontsize(max(3.0, base_fs * factor))
|
|
191
275
|
|
|
192
276
|
|
|
193
|
-
def _register_2d_zoom_font_scaling(
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
277
|
+
def _register_2d_zoom_font_scaling(
|
|
278
|
+
ax: Axes,
|
|
279
|
+
*,
|
|
280
|
+
preserve_ref_span: bool = False,
|
|
281
|
+
) -> None:
|
|
282
|
+
ref_span, sizes = _resolve_zoom_font_state(ax, preserve_ref_span=preserve_ref_span)
|
|
198
283
|
set_zoom_font_state(ax, ref_span=ref_span, sizes=sizes)
|
|
199
284
|
|
|
200
285
|
old_cids = get_zoom_cids(ax)
|
|
201
|
-
if old_cids:
|
|
286
|
+
if _zoom_callbacks_connected(ax, old_cids):
|
|
202
287
|
_on_2d_limits_changed(ax)
|
|
203
288
|
return
|
|
289
|
+
if old_cids:
|
|
290
|
+
_disconnect_zoom_callbacks(ax, old_cids)
|
|
204
291
|
|
|
205
292
|
def _cb(_: object) -> None:
|
|
206
293
|
_on_2d_limits_changed(ax)
|
|
@@ -208,6 +295,7 @@ def _register_2d_zoom_font_scaling(ax: Axes) -> None:
|
|
|
208
295
|
cx = ax.callbacks.connect("xlim_changed", _cb)
|
|
209
296
|
cy = ax.callbacks.connect("ylim_changed", _cb)
|
|
210
297
|
set_zoom_cids(ax, [cx, cy])
|
|
298
|
+
_on_2d_limits_changed(ax)
|
|
211
299
|
|
|
212
300
|
|
|
213
301
|
__all__ = [
|
|
@@ -236,7 +236,7 @@ def _draw_graph(
|
|
|
236
236
|
include_viewer=False,
|
|
237
237
|
)
|
|
238
238
|
if build_scene_state:
|
|
239
|
-
from ..._matplotlib_state import set_contraction_controls, set_scene
|
|
239
|
+
from ..._matplotlib_state import set_contraction_controls, set_home_view, set_scene
|
|
240
240
|
from .render_prep import _build_interactive_scene_state
|
|
241
241
|
|
|
242
242
|
scene = _build_interactive_scene_state(
|
|
@@ -250,6 +250,7 @@ def _draw_graph(
|
|
|
250
250
|
)
|
|
251
251
|
scene.contraction_controls = controls
|
|
252
252
|
set_scene(ax, scene)
|
|
253
|
+
set_home_view(ax, ax._get_view())
|
|
253
254
|
if controls is not None:
|
|
254
255
|
set_contraction_controls(ax, controls)
|
|
255
256
|
controls.bind_scene(scene)
|
|
@@ -210,7 +210,11 @@ def _component_centroid(
|
|
|
210
210
|
*,
|
|
211
211
|
dimensions: int,
|
|
212
212
|
) -> np.ndarray:
|
|
213
|
-
source_ids =
|
|
213
|
+
source_ids = (
|
|
214
|
+
component.anchor_node_ids
|
|
215
|
+
or component.geometry_visible_node_ids
|
|
216
|
+
or component.geometry_node_ids
|
|
217
|
+
)
|
|
214
218
|
anchor_ids = tuple(node_id for node_id in source_ids if node_id in positions)
|
|
215
219
|
if not anchor_ids:
|
|
216
220
|
anchor_ids = tuple(sorted(positions))
|
|
@@ -227,7 +231,11 @@ def _component_main_axis_2d_like(
|
|
|
227
231
|
component: _LayoutComponent,
|
|
228
232
|
positions: NodePositions,
|
|
229
233
|
) -> np.ndarray:
|
|
230
|
-
source_ids =
|
|
234
|
+
source_ids = (
|
|
235
|
+
component.anchor_node_ids
|
|
236
|
+
or component.geometry_visible_node_ids
|
|
237
|
+
or component.geometry_node_ids
|
|
238
|
+
)
|
|
231
239
|
anchor_ids = tuple(node_id for node_id in source_ids if node_id in positions)
|
|
232
240
|
if not anchor_ids:
|
|
233
241
|
anchor_ids = tuple(sorted(positions))
|