pyarchinit-mini 2.8.0__tar.gz → 2.9.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.
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/CHANGELOG.md +18 -0
- {pyarchinit_mini-2.8.0/pyarchinit_mini.egg-info → pyarchinit_mini-2.9.0}/PKG-INFO +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/__init__.py +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/graph_to_db.py +1 -16
- pyarchinit_mini-2.9.0/pyarchinit_mini/graphproj/graphml_writer.py +143 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/rapporti_codec.py +38 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/s3d_projector.py +48 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/s3d_to_cytoscape.py +3 -1
- pyarchinit_mini-2.9.0/pyarchinit_mini/web_interface/data/paradata/pompei-regio-vii/stratigraphy.graphml +265 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +29 -9
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +34 -67
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/SOURCES.txt +2 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyproject.toml +1 -1
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_export_graphml.py +26 -3
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_load_site.py +3 -1
- pyarchinit_mini-2.9.0/tests/unit/test_rapporti_codec_display.py +33 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_s3d_to_cytoscape.py +2 -1
- pyarchinit_mini-2.8.0/pyarchinit_mini/graphproj/graphml_writer.py +0 -89
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/MANIFEST.in +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/README.md +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/babel.cfg +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/media_viewer_demo.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_mini 2.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_mini.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_mini_sample.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial_clean.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial_video.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_v18_demo.db +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/logo/logo_pyarchinit-mini.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/apply.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/vision_extractor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/auth.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/dependencies.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/graphml.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/inventario.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/schemas.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/site.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/sync.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/us.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/export_import_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/graphml_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/harris_import.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/harris_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/migrate.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/sync_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli_interface/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/connection_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/em_node_types.yaml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/concurrency_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/connection.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/database_creator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_period_table_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/backup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/postgres_installer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/schemas.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/utils.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/icons.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/inventario_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/site_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/us_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/em_palette/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/em_palette/loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/em_palette/styles.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/converter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/reader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/yed_importer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/yed_keys.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/filesystem.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/graphml_reader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/heriverse_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/ingestor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/projector.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/harris_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/row_provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/swimlane_state.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/lang_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/locale_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/__main__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/config.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/http_server.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/server.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/media_manager/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/media_manager/media_handler.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/ai_chat.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/app_setting.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/base.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/datazione.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/extended_matrix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/harris_matrix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/inventario_materiali.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/media.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/pottery.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/site.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/thesaurus.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/tma.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/us.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/user.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/auto_translate.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/setup_auth.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/verify_docs.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/ai_chat_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/analytics_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/app_setting_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/backup_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/command_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/datazione_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/export_import_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/import_export_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/inventario_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/mcp_executor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/media_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/pottery_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/pottery_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/search_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/site_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/thesaurus_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/tma_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/us_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/user_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/messages.pot +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/auth.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/relationship_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/validators.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/i18n.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/app.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/data/paradata/domus-pompeiana/stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/data/paradata/metro-c-amba-aradam/stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/harris_creator_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/matrix_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/matrix_tools_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.bin +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.gltf +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.mtl +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/uploads/3d_models/Sito Archeologico di Esempio/site/stratigraphy_test.obj +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/base.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_import/preview.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_import/rejected.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_import/upload.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_tools/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/yed_import/index.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/yed_import/preview.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/yed_import/result.html +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_heriverse.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.graphml +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Scavo archeologico_stratigraphy.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/web_interface/static/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/yed_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/requires.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/top_level.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/requirements.txt +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/setup.cfg +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/setup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/conftest.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/e2e/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/e2e/test_web_vocab_full_flow.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_baseline_graphml.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_harris_swimlane_synthetic.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_synthetic_db.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_yed_test_files.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/build_legacy_with_pottery.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_adarte_regression.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_admin_ai_settings_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_admin_backup_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_export_heriverse.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_import_graphml.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_import_json.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_auto_regen_on_save.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_feature_flag_pipelines.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_full_sync_flow.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_graph_import_flow.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_graph_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_create_row.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_session_missing.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_lang_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_apply_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_rejected_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_site_widget.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_upload_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_migrate_vocab_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_paradata_routes_authors.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_paradata_routes_other_types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_paradata_ui.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_completion.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_filters_id_number_anno.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_list_media_thumbs.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_roundtrip.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_roundtrip_extmatrix.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_spec2_coverage_gaps.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_swimlane_group_by.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_vocab_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_yed_export_route.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_yed_import_routes.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_yed_writer_parity.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/__init__.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_apply.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_extractor_parse.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_extractor_providers.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_plan_serialization.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_app_setting_model.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_app_setting_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_auto_regen.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_backup_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_bundle.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_concurrency_columns.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_concurrency_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_connectivity_monitor.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_database_utils.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_deprecated_writers_shim.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_em_palette_vocab_backed.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graph_to_db.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphml_io_reader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphml_io_writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_edge_registry.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_filesystem.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_projector.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_period_sync.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_row_provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_state_load.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_state_save.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_heriverse_parser.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ingest_plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_inventario_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_migrations_backup.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_migrations_idempotent.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_optimistic_locking.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_palette_loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_palette_styles.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_paradata_store_authors.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_paradata_store_basic.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_paradata_store_other_types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_pottery_dto.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_pottery_model.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_pottery_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_rapporti_codec.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_s3d_projector.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_site_service.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_api.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_cli.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_orchestrator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_queue.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_state_machine.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_us_schema.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_uuid_manager.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_exceptions.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_i18n.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_loader.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_provider.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_types.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_yed_importer_parse.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_yed_importer_plan.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_yed_writer.py +0 -0
- {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_yed_writer_extended_matrix.py +0 -0
|
@@ -1,3 +1,21 @@
|
|
|
1
|
+
## 2.9.0 — 2026-05-19
|
|
2
|
+
|
|
3
|
+
### Fixed — Swimlane UI/UX cleanup (post-2.8.0 feedback)
|
|
4
|
+
- **Toolbar consolidated**: removed duplicate `swimlane-toolbar` block. Single `Esporta` dropdown now contains yEd GraphML (.graphml), Heriverse/ATON JSON (.json), Graphviz DOT, PNG. `Importa` button accepts both .graphml and .json. The existing `group-by-selector` now uses the new vocabulary: Nessun raggruppamento / Area / Settore / Quadrato / Attività / Strutture (was: Period+Phase / Struttura / Attivita / Settore / Area / Ambient / Saggio / Quad-Par / No grouping).
|
|
5
|
+
- **Edge labels italianized**: swimlane web + GraphML export now show `Copre`/`Coperto da`/`Taglia`/`Tagliato da`/`Riempie`/`Riempito da`/`Si appoggia a`/`Gli si appoggia`/`Uguale a`/`Si lega a`/`Anteriore a` (locale `it`) or `Covers`/`Covered by`/etc (locale `en`) instead of canonical `overlies`/`is_after`/`cuts`/etc. Canonical kept in `data.canonical` for JS class hooks.
|
|
6
|
+
- **Inverse-edge dedup**: when both `A overlies B` and `B is_after A` exist (data redundancy), draw only the forward direction — no more overlapping labels at the same midpoint.
|
|
7
|
+
- **Transitive reduction**: if A→B→C exists, A→C is no longer drawn (per-canonical, only for DAGs). Applied via `networkx.transitive_reduction`. Adarte fixture: 516 → 343 edges (clean Harris Matrix layout).
|
|
8
|
+
- **Palette-driven frontend rendering**: cytoscape selectors `node[style]` and `edge[style]` now read `data.style.{shape,backgroundColor,borderColor,borderWidth,lineColor,…}` from the `/api/load` payload and apply them. US nodes finally appear with their palette colors/shapes (USM red border, USV octagonal, …) instead of default gray.
|
|
9
|
+
- **GraphML export rewritten**: now produces the proper Harris Matrix Creator format via `pyarchinit_mini.graphml_io.yed_writer.write_extended_matrix_graphml` — TableNode wrapper with `<y:Rows>` per period/fase (colored backgrounds, rotated labels like "Periodo 1 - Fase 1"), nodes positioned inside their period row, palette styles, italianized edge labels. Previously the writer just appended nodes to the palette template without TableNode rows.
|
|
10
|
+
|
|
11
|
+
### Internals
|
|
12
|
+
- New `rapporti_codec.CANONICAL_TO_ITALIAN`/`CANONICAL_TO_ENGLISH`/`display_label(canonical, locale)` (moved from `graph_to_db.py`).
|
|
13
|
+
- `s3d_projector._load_edges` post-process: inverse dedup + per-canonical `nx.transitive_reduction` (skipped for SYMMETRIC and cyclic graphs).
|
|
14
|
+
- `s3d_to_cytoscape` edges now carry `data.label` (italian display) AND `data.canonical` (English canonical for JS hooks).
|
|
15
|
+
- `graphml_writer.write_graphml` now bridges to the existing `yed_writer.write_extended_matrix_graphml` via a temp file.
|
|
16
|
+
- `harris_creator_editor.js`: 2 new cytoscape selectors (`node[style]`, `edge[style]`) read palette properties from element data.
|
|
17
|
+
- `editor.html`: removed `swimlane-toolbar` div + duplicate `group-by-select` + standalone `export-graphml-btn`/`export-dot-btn`/`export-png-btn` + `exportYedGraphml()` button; replaced with one unified `Esporta` dropdown + `Importa` button.
|
|
18
|
+
|
|
1
19
|
## 2.8.0 — 2026-05-19
|
|
2
20
|
|
|
3
21
|
### Added — EM Palette + Multi-Format Swimlane Round-Trip
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pyarchinit-mini
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.9.0
|
|
4
4
|
Summary: Lightweight archaeological data management system with REST API, Web UI, Desktop GUI, CLI, multi-user authentication, real-time collaboration, analytics dashboard, PyArchInit import/export, Heriverse/ATON export integration, and 3D CRUD viewer
|
|
5
5
|
Home-page: https://github.com/enzococca/pyarchinit-mini
|
|
6
6
|
Author: PyArchInit Team
|
|
@@ -15,6 +15,7 @@ from pyarchinit_mini.graphproj.rapporti_codec import (
|
|
|
15
15
|
INVERSE_PAIRS,
|
|
16
16
|
SYMMETRIC,
|
|
17
17
|
Rapporto,
|
|
18
|
+
CANONICAL_TO_ITALIAN,
|
|
18
19
|
)
|
|
19
20
|
from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph, Node
|
|
20
21
|
|
|
@@ -22,22 +23,6 @@ from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph, Node
|
|
|
22
23
|
logger = logging.getLogger(__name__)
|
|
23
24
|
|
|
24
25
|
|
|
25
|
-
# Canonical → italian display label (used when serializing).
|
|
26
|
-
CANONICAL_TO_ITALIAN: Dict[str, str] = {
|
|
27
|
-
"overlies": "Copre",
|
|
28
|
-
"is_after": "Coperto da",
|
|
29
|
-
"cuts": "Taglia",
|
|
30
|
-
"is_cut_by": "Tagliato da",
|
|
31
|
-
"fills": "Riempie",
|
|
32
|
-
"is_filled_by": "Riempito da",
|
|
33
|
-
"abuts": "Si appoggia a",
|
|
34
|
-
"is_abutted_by": "Gli si appoggia",
|
|
35
|
-
"has_same_time": "Uguale a",
|
|
36
|
-
"is_bonded_to": "Si lega a",
|
|
37
|
-
"is_before": "Anteriore a",
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
26
|
@dataclass
|
|
42
27
|
class WriteResult:
|
|
43
28
|
imported_us: int = 0
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
"""yEd-flavoured GraphML writer producing the EM Harris Matrix Creator format.
|
|
2
|
+
|
|
3
|
+
Strategy (Approach A): thin bridge from ProjectedGraph to the canonical
|
|
4
|
+
graphml_io.yed_writer.write_extended_matrix_graphml which already produces the
|
|
5
|
+
proper TableNode / swimlane format consumed by yEd Desktop.
|
|
6
|
+
|
|
7
|
+
Output:
|
|
8
|
+
- Standalone GraphML (no palette template merging)
|
|
9
|
+
- ONE group node with <y:TableNode YED_TABLE_NODE> containing one <y:Row>
|
|
10
|
+
per period row from the ProjectedGraph
|
|
11
|
+
- US nodes positioned inside their row's y-range
|
|
12
|
+
- Edges with italianized labels (Copre, Taglia, …) via rapporti_codec
|
|
13
|
+
"""
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import tempfile
|
|
17
|
+
import os
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Optional
|
|
20
|
+
|
|
21
|
+
from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph
|
|
22
|
+
from pyarchinit_mini.graphproj.rapporti_codec import display_label, CANONICAL_TO_ITALIAN
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def write_graphml(graph: ProjectedGraph, *, palette_path: Optional[Path] = None) -> bytes:
|
|
26
|
+
"""Render the projected graph as yEd-compatible GraphML bytes.
|
|
27
|
+
|
|
28
|
+
palette_path is accepted for backward-compatible call-sites but is ignored —
|
|
29
|
+
the new output is a standalone TableNode document, not a palette extension.
|
|
30
|
+
"""
|
|
31
|
+
from pyarchinit_mini.harris_swimlane.swimlane_state import CytoscapeElement
|
|
32
|
+
from pyarchinit_mini.harris_swimlane.row_provider import Row as LegacyRow, PERIOD_COLORS
|
|
33
|
+
|
|
34
|
+
# ------------------------------------------------------------------
|
|
35
|
+
# 1. Convert ProjectedGraph.rows → legacy Row objects
|
|
36
|
+
# ------------------------------------------------------------------
|
|
37
|
+
rows: list[LegacyRow] = []
|
|
38
|
+
for i, r in enumerate(graph.rows):
|
|
39
|
+
rows.append(LegacyRow(
|
|
40
|
+
row_id=r.row_id,
|
|
41
|
+
period_name=r.periodo or r.label,
|
|
42
|
+
phase_name=r.fase,
|
|
43
|
+
start_date=None,
|
|
44
|
+
end_date=None,
|
|
45
|
+
color=PERIOD_COLORS[i % len(PERIOD_COLORS)],
|
|
46
|
+
source="period_table" if not r.is_fallback else "fallback",
|
|
47
|
+
))
|
|
48
|
+
|
|
49
|
+
# ------------------------------------------------------------------
|
|
50
|
+
# 2. Convert ProjectedGraph.nodes → CytoscapeElement list
|
|
51
|
+
# ------------------------------------------------------------------
|
|
52
|
+
# Build a lookup: row_id → index so we can calculate y positions
|
|
53
|
+
row_index = {r.row_id: i for i, r in enumerate(graph.rows)}
|
|
54
|
+
row_height = 200
|
|
55
|
+
node_h, node_w = 30.0, 80.0
|
|
56
|
+
# Track column (x) per row so nodes in the same row are spread horizontally
|
|
57
|
+
col_counter: dict[str, int] = {}
|
|
58
|
+
|
|
59
|
+
nodes: list[CytoscapeElement] = []
|
|
60
|
+
for n in graph.nodes:
|
|
61
|
+
ri = row_index.get(n.row_id, 0)
|
|
62
|
+
col = col_counter.get(n.row_id, 0)
|
|
63
|
+
col_counter[n.row_id] = col + 1
|
|
64
|
+
x = col * (node_w + 20) + 30
|
|
65
|
+
y = ri * row_height + (row_height / 2 - node_h / 2)
|
|
66
|
+
|
|
67
|
+
nodes.append(CytoscapeElement(
|
|
68
|
+
data={
|
|
69
|
+
"id": n.node_id,
|
|
70
|
+
"us": n.us,
|
|
71
|
+
"us_number": n.us,
|
|
72
|
+
"area": n.area or "",
|
|
73
|
+
"unit_type": n.unit_type or "US",
|
|
74
|
+
"description": n.description or "",
|
|
75
|
+
"row": n.row_id,
|
|
76
|
+
"label": str(n.us),
|
|
77
|
+
},
|
|
78
|
+
position={"x": x, "y": y},
|
|
79
|
+
))
|
|
80
|
+
|
|
81
|
+
# ------------------------------------------------------------------
|
|
82
|
+
# 3. Convert ProjectedGraph.edges → CytoscapeElement list with italian labels
|
|
83
|
+
# ------------------------------------------------------------------
|
|
84
|
+
edges: list[CytoscapeElement] = []
|
|
85
|
+
for e in graph.edges:
|
|
86
|
+
italian = display_label(e.canonical, locale="it")
|
|
87
|
+
edges.append(CytoscapeElement(
|
|
88
|
+
data={
|
|
89
|
+
"id": f"{e.source_id}__{e.canonical}__{e.target_id}",
|
|
90
|
+
"source": e.source_id,
|
|
91
|
+
"target": e.target_id,
|
|
92
|
+
"label": italian,
|
|
93
|
+
"canonical": e.canonical,
|
|
94
|
+
"relationship": CANONICAL_TO_ITALIAN.get(e.canonical, e.canonical),
|
|
95
|
+
},
|
|
96
|
+
))
|
|
97
|
+
|
|
98
|
+
# ------------------------------------------------------------------
|
|
99
|
+
# 4. Build a minimal state-like object the legacy writer accepts
|
|
100
|
+
# ------------------------------------------------------------------
|
|
101
|
+
class _State:
|
|
102
|
+
def __init__(self):
|
|
103
|
+
self.site = graph.site
|
|
104
|
+
self.group_by = graph.group_by
|
|
105
|
+
self.rows = rows
|
|
106
|
+
self.nodes = nodes
|
|
107
|
+
self.edges = edges
|
|
108
|
+
self.pending_changes = {}
|
|
109
|
+
|
|
110
|
+
state = _State()
|
|
111
|
+
|
|
112
|
+
# ------------------------------------------------------------------
|
|
113
|
+
# 5. Call the canonical writer and return bytes
|
|
114
|
+
# ------------------------------------------------------------------
|
|
115
|
+
from pyarchinit_mini.graphml_io.yed_writer import write_extended_matrix_graphml
|
|
116
|
+
|
|
117
|
+
epochs: list[dict] = []
|
|
118
|
+
# Populate epochs from rows that have dating information
|
|
119
|
+
for r in graph.rows:
|
|
120
|
+
if r.datazione:
|
|
121
|
+
epochs.append({
|
|
122
|
+
"row_id": r.row_id,
|
|
123
|
+
"periodo": r.periodo,
|
|
124
|
+
"fase": r.fase,
|
|
125
|
+
"datazione": r.datazione,
|
|
126
|
+
})
|
|
127
|
+
|
|
128
|
+
with tempfile.NamedTemporaryFile(suffix=".graphml", delete=False) as tmp:
|
|
129
|
+
tmp_path = tmp.name
|
|
130
|
+
try:
|
|
131
|
+
write_extended_matrix_graphml(
|
|
132
|
+
state,
|
|
133
|
+
site_meta={"sito": graph.site},
|
|
134
|
+
epochs=epochs,
|
|
135
|
+
out=Path(tmp_path),
|
|
136
|
+
)
|
|
137
|
+
with open(tmp_path, "rb") as f:
|
|
138
|
+
return f.read()
|
|
139
|
+
finally:
|
|
140
|
+
try:
|
|
141
|
+
os.unlink(tmp_path)
|
|
142
|
+
except OSError:
|
|
143
|
+
pass
|
|
@@ -46,6 +46,44 @@ _IT_EXTRAS: Dict[str, str] = {
|
|
|
46
46
|
"gli si appoggia": "is_before",
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
# Canonical → italian display label (for swimlane web + GraphML edge labels).
|
|
50
|
+
CANONICAL_TO_ITALIAN: Dict[str, str] = {
|
|
51
|
+
"overlies": "Copre",
|
|
52
|
+
"is_after": "Coperto da",
|
|
53
|
+
"cuts": "Taglia",
|
|
54
|
+
"is_cut_by": "Tagliato da",
|
|
55
|
+
"fills": "Riempie",
|
|
56
|
+
"is_filled_by": "Riempito da",
|
|
57
|
+
"abuts": "Si appoggia a",
|
|
58
|
+
"is_abutted_by": "Gli si appoggia",
|
|
59
|
+
"has_same_time": "Uguale a",
|
|
60
|
+
"is_bonded_to": "Si lega a",
|
|
61
|
+
"is_before": "Anteriore a",
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
# Canonical → english display label.
|
|
65
|
+
CANONICAL_TO_ENGLISH: Dict[str, str] = {
|
|
66
|
+
"overlies": "Covers",
|
|
67
|
+
"is_after": "Covered by",
|
|
68
|
+
"cuts": "Cuts",
|
|
69
|
+
"is_cut_by": "Cut by",
|
|
70
|
+
"fills": "Fills",
|
|
71
|
+
"is_filled_by": "Filled by",
|
|
72
|
+
"abuts": "Leans on",
|
|
73
|
+
"is_abutted_by": "Leant on by",
|
|
74
|
+
"has_same_time": "Same as",
|
|
75
|
+
"is_bonded_to": "Bonded to",
|
|
76
|
+
"is_before": "Before",
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def display_label(canonical: str, locale: str = "it") -> str:
|
|
81
|
+
"""Return the localized display label for a canonical relation name."""
|
|
82
|
+
if locale.lower().startswith("en"):
|
|
83
|
+
return CANONICAL_TO_ENGLISH.get(canonical, canonical)
|
|
84
|
+
return CANONICAL_TO_ITALIAN.get(canonical, canonical)
|
|
85
|
+
|
|
86
|
+
|
|
49
87
|
# English fallbacks (Al-Khutm-style data).
|
|
50
88
|
_EN_TO_CANONICAL: Dict[str, str] = {
|
|
51
89
|
"covers": "overlies",
|
|
@@ -18,7 +18,7 @@ from typing import Dict, List, Optional
|
|
|
18
18
|
from sqlalchemy import text
|
|
19
19
|
from sqlalchemy.orm import Session
|
|
20
20
|
|
|
21
|
-
from pyarchinit_mini.graphproj.rapporti_codec import parse_rapporti, SYMMETRIC
|
|
21
|
+
from pyarchinit_mini.graphproj.rapporti_codec import parse_rapporti, SYMMETRIC, INVERSE_PAIRS
|
|
22
22
|
|
|
23
23
|
|
|
24
24
|
logger = logging.getLogger(__name__)
|
|
@@ -228,3 +228,50 @@ class S3DProjector:
|
|
|
228
228
|
continue
|
|
229
229
|
seen.add(key)
|
|
230
230
|
graph.edges.append(Edge(source_id=src_id, target_id=tgt_id, canonical=rap.canonical))
|
|
231
|
+
|
|
232
|
+
# === Step A: Inverse dedup — drop the redundant inverse direction ===
|
|
233
|
+
# E.g., if (overlies, A→B) exists, drop (is_after, B→A).
|
|
234
|
+
forward_keys: set = set()
|
|
235
|
+
for e in graph.edges:
|
|
236
|
+
if e.canonical in SYMMETRIC:
|
|
237
|
+
continue
|
|
238
|
+
forward_keys.add((e.canonical, e.source_id, e.target_id))
|
|
239
|
+
kept: List[Edge] = []
|
|
240
|
+
for e in graph.edges:
|
|
241
|
+
if e.canonical in SYMMETRIC:
|
|
242
|
+
kept.append(e)
|
|
243
|
+
continue
|
|
244
|
+
inv = INVERSE_PAIRS.get(e.canonical)
|
|
245
|
+
# If the forward counterpart of this inverse is already in the set, drop it
|
|
246
|
+
if inv is not None and (inv, e.target_id, e.source_id) in forward_keys:
|
|
247
|
+
if e.canonical > inv:
|
|
248
|
+
continue # drop; the lexicographically-first orientation wins
|
|
249
|
+
kept.append(e)
|
|
250
|
+
graph.edges = kept
|
|
251
|
+
|
|
252
|
+
# === Step B: Transitive reduction per canonical type ===
|
|
253
|
+
# If A→B and B→C exist under the same canonical, drop A→C.
|
|
254
|
+
try:
|
|
255
|
+
import networkx as nx
|
|
256
|
+
reduced: List[Edge] = []
|
|
257
|
+
by_canon: Dict[str, List[Edge]] = {}
|
|
258
|
+
for e in graph.edges:
|
|
259
|
+
by_canon.setdefault(e.canonical, []).append(e)
|
|
260
|
+
for canon, edges in by_canon.items():
|
|
261
|
+
if canon in SYMMETRIC:
|
|
262
|
+
reduced.extend(edges)
|
|
263
|
+
continue
|
|
264
|
+
dg = nx.DiGraph()
|
|
265
|
+
for ed in edges:
|
|
266
|
+
dg.add_edge(ed.source_id, ed.target_id)
|
|
267
|
+
try:
|
|
268
|
+
tr = nx.transitive_reduction(dg)
|
|
269
|
+
keep_set = set(tr.edges())
|
|
270
|
+
for ed in edges:
|
|
271
|
+
if (ed.source_id, ed.target_id) in keep_set:
|
|
272
|
+
reduced.append(ed)
|
|
273
|
+
except nx.NetworkXError:
|
|
274
|
+
reduced.extend(edges)
|
|
275
|
+
graph.edges = reduced
|
|
276
|
+
except ImportError:
|
|
277
|
+
pass # networkx not available; skip reduction
|
{pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/s3d_to_cytoscape.py
RENAMED
|
@@ -9,6 +9,7 @@ from __future__ import annotations
|
|
|
9
9
|
from typing import Any, Dict, List, Tuple
|
|
10
10
|
|
|
11
11
|
from pyarchinit_mini.em_palette import get_palette
|
|
12
|
+
from pyarchinit_mini.graphproj.rapporti_codec import display_label
|
|
12
13
|
from pyarchinit_mini.graphproj.s3d_projector import ProjectedGraph
|
|
13
14
|
|
|
14
15
|
|
|
@@ -73,7 +74,8 @@ def to_cytoscape(graph: ProjectedGraph) -> Dict[str, Any]:
|
|
|
73
74
|
"id": f"{e.source_id}__{e.canonical}__{e.target_id}",
|
|
74
75
|
"source": e.source_id,
|
|
75
76
|
"target": e.target_id,
|
|
76
|
-
"label": e.canonical,
|
|
77
|
+
"label": display_label(e.canonical, locale="it"),
|
|
78
|
+
"canonical": e.canonical,
|
|
77
79
|
},
|
|
78
80
|
"style": {
|
|
79
81
|
"lineColor": es.line_color,
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
<?xml version='1.0' encoding='UTF-8'?>
|
|
2
|
+
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:y="http://www.yworks.com/xml/graphml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://www.yworks.com/xml/schema/graphml/1.1/ygraphml.xsd">
|
|
3
|
+
<key attr.name="url" attr.type="string" for="node" id="d4"/>
|
|
4
|
+
<key attr.name="description" attr.type="string" for="node" id="d5"/>
|
|
5
|
+
<key xmlns:ns0="http://www.yworks.com/xml/yfiles-common/1.0/java" for="node" id="d6" ns0:type="nodegraphics" yfiles.type="nodegraphics"/>
|
|
6
|
+
<key attr.name="EMID" attr.type="string" for="node" id="d7"/>
|
|
7
|
+
<key attr.name="URI" attr.type="string" for="node" id="d8"/>
|
|
8
|
+
<key xmlns:ns1="http://www.yworks.com/xml/yfiles-common/1.0/java" for="edge" id="d10" ns1:type="edgegraphics" yfiles.type="edgegraphics"/>
|
|
9
|
+
<key attr.name="EMID" attr.type="string" for="edge" id="d11"/>
|
|
10
|
+
<key attr.name="URI" attr.type="string" for="edge" id="d12"/>
|
|
11
|
+
<key for="graphml" id="d9" yfiles.type="resources"/>
|
|
12
|
+
<graph id="G" edgedefault="directed">
|
|
13
|
+
<node id="n0" yfiles.foldertype="group">
|
|
14
|
+
<data key="d7">simple_swimlane</data>
|
|
15
|
+
<data key="d6">
|
|
16
|
+
<y:GroupNode>
|
|
17
|
+
<y:Geometry height="1000.0" width="2000.0" x="0" y="0"/>
|
|
18
|
+
</y:GroupNode>
|
|
19
|
+
</data>
|
|
20
|
+
<graph edgedefault="directed" id="n0:"/>
|
|
21
|
+
</node>
|
|
22
|
+
</graph>
|
|
23
|
+
<data key="d9">
|
|
24
|
+
<y:Resources>
|
|
25
|
+
<y:Resource id="1"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
26
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
27
|
+
|
|
28
|
+
<svg
|
|
29
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
30
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
31
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
32
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
33
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
34
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
35
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
36
|
+
width="48px"
|
|
37
|
+
height="48px"
|
|
38
|
+
id="svg4050"
|
|
39
|
+
version="1.1"
|
|
40
|
+
inkscape:version="0.48.4 r9939"
|
|
41
|
+
sodipodi:docname="New document 13">
|
|
42
|
+
<defs
|
|
43
|
+
id="defs4052" />
|
|
44
|
+
<sodipodi:namedview
|
|
45
|
+
id="base"
|
|
46
|
+
pagecolor="#ffffff"
|
|
47
|
+
bordercolor="#666666"
|
|
48
|
+
borderopacity="1.0"
|
|
49
|
+
inkscape:pageopacity="0.0"
|
|
50
|
+
inkscape:pageshadow="2"
|
|
51
|
+
inkscape:zoom="9.8994949"
|
|
52
|
+
inkscape:cx="18.095997"
|
|
53
|
+
inkscape:cy="17.278115"
|
|
54
|
+
inkscape:current-layer="layer1"
|
|
55
|
+
showgrid="true"
|
|
56
|
+
inkscape:grid-bbox="true"
|
|
57
|
+
inkscape:document-units="px"
|
|
58
|
+
inkscape:window-width="1920"
|
|
59
|
+
inkscape:window-height="1025"
|
|
60
|
+
inkscape:window-x="-2"
|
|
61
|
+
inkscape:window-y="-3"
|
|
62
|
+
inkscape:window-maximized="1" />
|
|
63
|
+
<metadata
|
|
64
|
+
id="metadata4055">
|
|
65
|
+
<rdf:RDF>
|
|
66
|
+
<cc:Work
|
|
67
|
+
rdf:about="">
|
|
68
|
+
<dc:format>image/svg+xml</dc:format>
|
|
69
|
+
<dc:type
|
|
70
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
71
|
+
<dc:title></dc:title>
|
|
72
|
+
</cc:Work>
|
|
73
|
+
</rdf:RDF>
|
|
74
|
+
</metadata>
|
|
75
|
+
<g
|
|
76
|
+
id="layer1"
|
|
77
|
+
inkscape:label="Layer 1"
|
|
78
|
+
inkscape:groupmode="layer">
|
|
79
|
+
<g
|
|
80
|
+
transform="matrix(0.41470954,0,0,0.41438764,-58.075087,96.197996)"
|
|
81
|
+
id="g3932">
|
|
82
|
+
<path
|
|
83
|
+
transform="translate(-176.7767,-1080.8632)"
|
|
84
|
+
d="m 430.32499,906.90021 c 0,30.68405 -24.87434,55.55839 -55.55839,55.55839 -30.68405,0 -55.55839,-24.87434 -55.55839,-55.55839 0,-30.68405 24.87434,-55.55839 55.55839,-55.55839 30.68405,0 55.55839,24.87434 55.55839,55.55839 z"
|
|
85
|
+
sodipodi:ry="55.558392"
|
|
86
|
+
sodipodi:rx="55.558392"
|
|
87
|
+
sodipodi:cy="906.90021"
|
|
88
|
+
sodipodi:cx="374.7666"
|
|
89
|
+
id="path2996-3"
|
|
90
|
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
|
91
|
+
sodipodi:type="arc" />
|
|
92
|
+
<path
|
|
93
|
+
inkscape:connector-curvature="0"
|
|
94
|
+
id="path3795"
|
|
95
|
+
d="m 195.82737,-229.48049 c -29.75104,1.0602 -53.53125,25.52148 -53.53125,55.53125 0,30.00977 23.78021,54.4398 53.53125,55.5 l 0,-38.875 -18.1875,0 0,-32.8125 18.1875,0 0,-39.34375 z"
|
|
96
|
+
style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
|
97
|
+
<rect
|
|
98
|
+
y="-187.49332"
|
|
99
|
+
x="212.49696"
|
|
100
|
+
height="27.142857"
|
|
101
|
+
width="26.071428"
|
|
102
|
+
id="rect3805"
|
|
103
|
+
style="fill:#7d7d7d;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
|
104
|
+
<path
|
|
105
|
+
inkscape:connector-curvature="0"
|
|
106
|
+
id="path3807"
|
|
107
|
+
d="m 180.35416,-173.20759 c 29.28571,0 29.28571,0 29.28571,0"
|
|
108
|
+
style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1" />
|
|
109
|
+
</g>
|
|
110
|
+
</g>
|
|
111
|
+
</svg></y:Resource>
|
|
112
|
+
<y:Resource id="2"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
113
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
114
|
+
|
|
115
|
+
<svg
|
|
116
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
117
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
118
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
119
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
120
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
121
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
122
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
123
|
+
width="48px"
|
|
124
|
+
height="48px"
|
|
125
|
+
id="svg4192"
|
|
126
|
+
version="1.1"
|
|
127
|
+
inkscape:version="0.48.4 r9939"
|
|
128
|
+
sodipodi:docname="New document 20">
|
|
129
|
+
<defs
|
|
130
|
+
id="defs4194" />
|
|
131
|
+
<sodipodi:namedview
|
|
132
|
+
id="base"
|
|
133
|
+
pagecolor="#ffffff"
|
|
134
|
+
bordercolor="#666666"
|
|
135
|
+
borderopacity="1.0"
|
|
136
|
+
inkscape:pageopacity="0.0"
|
|
137
|
+
inkscape:pageshadow="2"
|
|
138
|
+
inkscape:zoom="14"
|
|
139
|
+
inkscape:cx="24.612064"
|
|
140
|
+
inkscape:cy="28.768962"
|
|
141
|
+
inkscape:current-layer="layer1"
|
|
142
|
+
showgrid="true"
|
|
143
|
+
inkscape:grid-bbox="true"
|
|
144
|
+
inkscape:document-units="px"
|
|
145
|
+
inkscape:window-width="1920"
|
|
146
|
+
inkscape:window-height="1025"
|
|
147
|
+
inkscape:window-x="-2"
|
|
148
|
+
inkscape:window-y="-3"
|
|
149
|
+
inkscape:window-maximized="1" />
|
|
150
|
+
<metadata
|
|
151
|
+
id="metadata4197">
|
|
152
|
+
<rdf:RDF>
|
|
153
|
+
<cc:Work
|
|
154
|
+
rdf:about="">
|
|
155
|
+
<dc:format>image/svg+xml</dc:format>
|
|
156
|
+
<dc:type
|
|
157
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
158
|
+
<dc:title></dc:title>
|
|
159
|
+
</cc:Work>
|
|
160
|
+
</rdf:RDF>
|
|
161
|
+
</metadata>
|
|
162
|
+
<g
|
|
163
|
+
id="layer1"
|
|
164
|
+
inkscape:label="Layer 1"
|
|
165
|
+
inkscape:groupmode="layer">
|
|
166
|
+
<g
|
|
167
|
+
transform="matrix(0.40828104,0,0,0.41346794,-201.56174,97.998396)"
|
|
168
|
+
id="g3922">
|
|
169
|
+
<path
|
|
170
|
+
sodipodi:type="arc"
|
|
171
|
+
style="fill:#ffffff;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
|
|
172
|
+
id="path3912"
|
|
173
|
+
sodipodi:cx="374.7666"
|
|
174
|
+
sodipodi:cy="906.90021"
|
|
175
|
+
sodipodi:rx="55.558392"
|
|
176
|
+
sodipodi:ry="55.558392"
|
|
177
|
+
d="m 430.32499,906.90021 c 0,30.68405 -24.87434,55.55839 -55.55839,55.55839 -30.68405,0 -55.55839,-24.87434 -55.55839,-55.55839 0,-30.68405 24.87434,-55.55839 55.55839,-55.55839 30.68405,0 55.55839,24.87434 55.55839,55.55839 z"
|
|
178
|
+
transform="translate(177.55723,-1085.7479)" />
|
|
179
|
+
<path
|
|
180
|
+
sodipodi:nodetypes="ccsccc"
|
|
181
|
+
inkscape:connector-curvature="0"
|
|
182
|
+
id="path3914"
|
|
183
|
+
d="m 543.53146,-169.98986 63.36579,-17.50001 c 0,0 0.71429,3.97312 0.71429,11.68875 0,7.71563 -2.93748,15.70661 -2.93748,15.70661 l -61.1426,17.05358 z"
|
|
184
|
+
style="fill:#7b7b7b;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
|
185
|
+
<path
|
|
186
|
+
sodipodi:nodetypes="ccccsc"
|
|
187
|
+
inkscape:connector-curvature="0"
|
|
188
|
+
id="path3916"
|
|
189
|
+
d="m 501.52478,-201.54471 54.88091,-14.27148 0,26.94893 -59.23348,15.97426 c 0,0 -0.15898,-6.266 0.10274,-12.48413 0.34368,-8.16509 4.24983,-16.16758 4.24983,-16.16758 z"
|
|
190
|
+
style="fill:#7b7b7b;fill-opacity:1;stroke:#000000;stroke-width:4;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0" />
|
|
191
|
+
</g>
|
|
192
|
+
</g>
|
|
193
|
+
</svg></y:Resource>
|
|
194
|
+
<y:Resource id="3"><?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
|
195
|
+
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
|
196
|
+
|
|
197
|
+
<svg
|
|
198
|
+
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
|
199
|
+
xmlns:cc="http://creativecommons.org/ns#"
|
|
200
|
+
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
|
201
|
+
xmlns:svg="http://www.w3.org/2000/svg"
|
|
202
|
+
xmlns="http://www.w3.org/2000/svg"
|
|
203
|
+
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
|
204
|
+
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
|
205
|
+
width="7mm"
|
|
206
|
+
height="7mm"
|
|
207
|
+
viewBox="0 0 7 7"
|
|
208
|
+
version="1.1"
|
|
209
|
+
id="svg8"
|
|
210
|
+
inkscape:version="0.92.2 5c3e80d, 2017-08-06"
|
|
211
|
+
sodipodi:docname="continuity.svg">
|
|
212
|
+
<defs
|
|
213
|
+
id="defs2" />
|
|
214
|
+
<sodipodi:namedview
|
|
215
|
+
id="base"
|
|
216
|
+
pagecolor="#ffffff"
|
|
217
|
+
bordercolor="#666666"
|
|
218
|
+
borderopacity="1.0"
|
|
219
|
+
inkscape:pageopacity="0.0"
|
|
220
|
+
inkscape:pageshadow="2"
|
|
221
|
+
inkscape:zoom="1.8181416"
|
|
222
|
+
inkscape:cx="-10.002405"
|
|
223
|
+
inkscape:cy="-64.860066"
|
|
224
|
+
inkscape:document-units="mm"
|
|
225
|
+
inkscape:current-layer="layer1"
|
|
226
|
+
showgrid="false"
|
|
227
|
+
fit-margin-top="0"
|
|
228
|
+
fit-margin-left="0"
|
|
229
|
+
fit-margin-right="0"
|
|
230
|
+
fit-margin-bottom="0"
|
|
231
|
+
inkscape:window-width="1440"
|
|
232
|
+
inkscape:window-height="800"
|
|
233
|
+
inkscape:window-x="0"
|
|
234
|
+
inkscape:window-y="1"
|
|
235
|
+
inkscape:window-maximized="1" />
|
|
236
|
+
<metadata
|
|
237
|
+
id="metadata5">
|
|
238
|
+
<rdf:RDF>
|
|
239
|
+
<cc:Work
|
|
240
|
+
rdf:about="">
|
|
241
|
+
<dc:format>image/svg+xml</dc:format>
|
|
242
|
+
<dc:type
|
|
243
|
+
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
|
244
|
+
<dc:title></dc:title>
|
|
245
|
+
</cc:Work>
|
|
246
|
+
</rdf:RDF>
|
|
247
|
+
</metadata>
|
|
248
|
+
<g
|
|
249
|
+
inkscape:label="Livello 1"
|
|
250
|
+
inkscape:groupmode="layer"
|
|
251
|
+
id="layer1"
|
|
252
|
+
transform="translate(-82.089519,-139.87478)">
|
|
253
|
+
<rect
|
|
254
|
+
id="rect12"
|
|
255
|
+
width="4.9497476"
|
|
256
|
+
height="4.9497476"
|
|
257
|
+
x="159.42734"
|
|
258
|
+
y="38.385479"
|
|
259
|
+
style="stroke-width:0.01220008"
|
|
260
|
+
transform="rotate(45)" />
|
|
261
|
+
</g>
|
|
262
|
+
</svg></y:Resource>
|
|
263
|
+
</y:Resources>
|
|
264
|
+
</data>
|
|
265
|
+
</graphml>
|
|
@@ -319,6 +319,31 @@ function initCytoscape() {
|
|
|
319
319
|
'target-arrow-color': '#2E86AB',
|
|
320
320
|
'target-arrow-shape': 'none'
|
|
321
321
|
}
|
|
322
|
+
},
|
|
323
|
+
// Palette-driven styles: applied when node/edge carries a `style` data object
|
|
324
|
+
// from the /api/load response (overrides defaults above).
|
|
325
|
+
{
|
|
326
|
+
selector: 'node[style]',
|
|
327
|
+
style: {
|
|
328
|
+
'shape': 'data(style.shape)',
|
|
329
|
+
'background-color': 'data(style.backgroundColor)',
|
|
330
|
+
'border-color': 'data(style.borderColor)',
|
|
331
|
+
'border-width': 'data(style.borderWidth)',
|
|
332
|
+
'border-style': 'data(style.lineStyle)',
|
|
333
|
+
'color': 'data(style.fontColor)',
|
|
334
|
+
'font-size': 'data(style.fontSize)',
|
|
335
|
+
}
|
|
336
|
+
},
|
|
337
|
+
{
|
|
338
|
+
selector: 'edge[style]',
|
|
339
|
+
style: {
|
|
340
|
+
'line-color': 'data(style.lineColor)',
|
|
341
|
+
'width': 'data(style.lineWidth)',
|
|
342
|
+
'line-style': 'data(style.lineStyle)',
|
|
343
|
+
'target-arrow-shape': 'data(style.targetArrowShape)',
|
|
344
|
+
'source-arrow-shape': 'data(style.sourceArrowShape)',
|
|
345
|
+
'target-arrow-color': 'data(style.lineColor)',
|
|
346
|
+
}
|
|
322
347
|
}
|
|
323
348
|
],
|
|
324
349
|
|
|
@@ -858,15 +883,10 @@ function setupEventListeners() {
|
|
|
858
883
|
// Save button
|
|
859
884
|
document.getElementById('save-btn').addEventListener('click', saveMatrix);
|
|
860
885
|
|
|
861
|
-
// Export buttons
|
|
862
|
-
document.getElementById('export-graphml-btn')
|
|
863
|
-
document.getElementById('export-dot-btn')
|
|
864
|
-
|
|
865
|
-
// Export PNG button
|
|
866
|
-
const exportPngBtn = document.getElementById('export-png-btn');
|
|
867
|
-
if (exportPngBtn) {
|
|
868
|
-
exportPngBtn.addEventListener('click', exportPNG);
|
|
869
|
-
}
|
|
886
|
+
// Export buttons (legacy standalone buttons — null-safe; new dropdown items bound in template)
|
|
887
|
+
document.getElementById('export-graphml-btn')?.addEventListener('click', () => exportMatrix('graphml'));
|
|
888
|
+
document.getElementById('export-dot-btn')?.addEventListener('click', () => exportMatrix('dot'));
|
|
889
|
+
document.getElementById('export-png-btn')?.addEventListener('click', exportPNG);
|
|
870
890
|
|
|
871
891
|
// Resize Cytoscape on window resize (e.g., sidebar toggle)
|
|
872
892
|
window.addEventListener('resize', function() {
|