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.
Files changed (543) hide show
  1. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/CHANGELOG.md +18 -0
  2. {pyarchinit_mini-2.8.0/pyarchinit_mini.egg-info → pyarchinit_mini-2.9.0}/PKG-INFO +1 -1
  3. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/__init__.py +1 -1
  4. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/graph_to_db.py +1 -16
  5. pyarchinit_mini-2.9.0/pyarchinit_mini/graphproj/graphml_writer.py +143 -0
  6. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/rapporti_codec.py +38 -0
  7. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/s3d_projector.py +48 -1
  8. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/s3d_to_cytoscape.py +3 -1
  9. pyarchinit_mini-2.9.0/pyarchinit_mini/web_interface/data/paradata/pompei-regio-vii/stratigraphy.graphml +265 -0
  10. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/harris_creator_editor.js +29 -9
  11. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_creator/editor.html +34 -67
  12. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0/pyarchinit_mini.egg-info}/PKG-INFO +1 -1
  13. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/SOURCES.txt +2 -0
  14. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyproject.toml +1 -1
  15. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_export_graphml.py +26 -3
  16. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_load_site.py +3 -1
  17. pyarchinit_mini-2.9.0/tests/unit/test_rapporti_codec_display.py +33 -0
  18. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_s3d_to_cytoscape.py +2 -1
  19. pyarchinit_mini-2.8.0/pyarchinit_mini/graphproj/graphml_writer.py +0 -89
  20. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/MANIFEST.in +0 -0
  21. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/README.md +0 -0
  22. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/babel.cfg +0 -0
  23. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/media_viewer_demo.db +0 -0
  24. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_mini 2.db +0 -0
  25. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_mini.db +0 -0
  26. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_mini_sample.db +0 -0
  27. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial.db +0 -0
  28. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial_backup_20251030_093228.db +0 -0
  29. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial_clean.db +0 -0
  30. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_tutorial_video.db +0 -0
  31. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/data/pyarchinit_v18_demo.db +0 -0
  32. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/logo/logo_pyarchinit-mini.png +0 -0
  33. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/__init__.py +0 -0
  34. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/apply.py +0 -0
  35. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/plan.py +0 -0
  36. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/ai_matrix/vision_extractor.py +0 -0
  37. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/__init__.py +0 -0
  38. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/auth.py +0 -0
  39. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/dependencies.py +0 -0
  40. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/graphml.py +0 -0
  41. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/inventario.py +0 -0
  42. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/schemas.py +0 -0
  43. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/site.py +0 -0
  44. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/sync.py +0 -0
  45. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/api/us.py +0 -0
  46. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/__init__.py +0 -0
  47. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/export_import_cli.py +0 -0
  48. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/extended_matrix_import.py +0 -0
  49. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/graphml_cli.py +0 -0
  50. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/harris_import.py +0 -0
  51. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/harris_template.py +0 -0
  52. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/migrate.py +0 -0
  53. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/migrate_vocab.py +0 -0
  54. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/pyarchinit_import_export_cli.py +0 -0
  55. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli/sync_cli.py +0 -0
  56. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli_interface/__init__.py +0 -0
  57. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/cli_interface/cli_app.py +0 -0
  58. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/__init__.py +0 -0
  59. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/connection_manager.py +0 -0
  60. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/em_node_config_manager.py +0 -0
  61. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/config/em_node_types.yaml +0 -0
  62. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/__init__.py +0 -0
  63. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/concurrency_manager.py +0 -0
  64. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/connection.py +0 -0
  65. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/database_creator.py +0 -0
  66. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/manager.py +0 -0
  67. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/__init__.py +0 -0
  68. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/add_file_path.py +0 -0
  69. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/add_i18n_columns.py +0 -0
  70. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/add_tipo_documento.py +0 -0
  71. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text.py +0 -0
  72. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migration_scripts/change_us_area_to_text_simple.py +0 -0
  73. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_backfill.py +0 -0
  74. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_node_uuid_schema.py +0 -0
  75. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_period_table_schema.py +0 -0
  76. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/_2026_05_vocab_alignment.py +0 -0
  77. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/__init__.py +0 -0
  78. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/migrations/backup.py +0 -0
  79. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/postgres_installer.py +0 -0
  80. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/schemas.py +0 -0
  81. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/database/utils.py +0 -0
  82. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/__init__.py +0 -0
  83. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/analytics_dialog.py +0 -0
  84. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/assets/logo.png +0 -0
  85. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/dialogs.py +0 -0
  86. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/excel_import_dialog.py +0 -0
  87. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/export_import_dialog.py +0 -0
  88. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/graphml_export_dialog.py +0 -0
  89. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/gui_app.py +0 -0
  90. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/harris_matrix_editor.py +0 -0
  91. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/i18n.py +0 -0
  92. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/icons.py +0 -0
  93. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/inventario_dialog_extended.py +0 -0
  94. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/main_window.py +0 -0
  95. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/media_manager_advanced.py +0 -0
  96. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/postgres_installer_dialog.py +0 -0
  97. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/pottery_dialog_extended.py +0 -0
  98. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/pottery_panel.py +0 -0
  99. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/pyarchinit_import_export_dialog.py +0 -0
  100. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/thesaurus_dialog.py +0 -0
  101. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/desktop_gui/us_dialog_extended.py +0 -0
  102. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/__init__.py +0 -0
  103. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/inventario_dto.py +0 -0
  104. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/site_dto.py +0 -0
  105. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/dto/us_dto.py +0 -0
  106. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/em_palette/__init__.py +0 -0
  107. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/em_palette/loader.py +0 -0
  108. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/em_palette/styles.py +0 -0
  109. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/exceptions.py +0 -0
  110. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/__init__.py +0 -0
  111. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/converter.py +0 -0
  112. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/dot_parser.py +0 -0
  113. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/em_palette.py +0 -0
  114. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/graphml_builder.py +0 -0
  115. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/graphml_exporter.py +0 -0
  116. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/pure_networkx_exporter.py +0 -0
  117. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/svg_resources.py +0 -0
  118. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/templates/EM_palette.graphml +0 -0
  119. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/x11_colors.py +0 -0
  120. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_converter/yed_template.py +0 -0
  121. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/__init__.py +0 -0
  122. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/reader.py +0 -0
  123. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/writer.py +0 -0
  124. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/yed_importer.py +0 -0
  125. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/yed_keys.py +0 -0
  126. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphml_io/yed_writer.py +0 -0
  127. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/__init__.py +0 -0
  128. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/auto_regen.py +0 -0
  129. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/edge_registry.py +0 -0
  130. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/exceptions.py +0 -0
  131. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/filesystem.py +0 -0
  132. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/graphml_reader.py +0 -0
  133. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/heriverse_parser.py +0 -0
  134. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/ingest_plan.py +0 -0
  135. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/ingestor.py +0 -0
  136. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/paradata_store.py +0 -0
  137. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/graphproj/projector.py +0 -0
  138. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/__init__.py +0 -0
  139. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/enhanced_visualizer.py +0 -0
  140. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/matrix_generator.py +0 -0
  141. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/matrix_visualizer.py +0 -0
  142. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_matrix/pyarchinit_visualizer.py +0 -0
  143. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/__init__.py +0 -0
  144. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/compound_layout.py +0 -0
  145. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/exceptions.py +0 -0
  146. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/harris_layout.py +0 -0
  147. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/period_sync_service.py +0 -0
  148. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/row_provider.py +0 -0
  149. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/harris_swimlane/swimlane_state.py +0 -0
  150. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/__init__.py +0 -0
  151. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/flask_babel_config.py +0 -0
  152. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/lang_routes.py +0 -0
  153. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/i18n/locale_manager.py +0 -0
  154. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/__init__.py +0 -0
  155. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/__main__.py +0 -0
  156. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/blender_client.py +0 -0
  157. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/config.py +0 -0
  158. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/event_stream.py +0 -0
  159. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/graphml_parser.py +0 -0
  160. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/http_server.py +0 -0
  161. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/period_filter.py +0 -0
  162. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/__init__.py +0 -0
  163. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/base_prompt.py +0 -0
  164. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/period_visualization_prompt.py +0 -0
  165. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/stratigraphic_model_prompt.py +0 -0
  166. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/prompts/us_description_prompt.py +0 -0
  167. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/proxy_generator.py +0 -0
  168. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/__init__.py +0 -0
  169. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/base_resource.py +0 -0
  170. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/graphml_resource.py +0 -0
  171. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/periods_resource.py +0 -0
  172. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/relationships_resource.py +0 -0
  173. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/sites_resource.py +0 -0
  174. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/resources/us_resource.py +0 -0
  175. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/server.py +0 -0
  176. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/__init__.py +0 -0
  177. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/base_tool.py +0 -0
  178. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/batch_insert_tool.py +0 -0
  179. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/build_3d_tool.py +0 -0
  180. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/chatgpt_fetch_tool.py +0 -0
  181. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/chatgpt_search_tool.py +0 -0
  182. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/configure_em_nodes_tool.py +0 -0
  183. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/create_database_tool.py +0 -0
  184. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/create_harris_matrix_tool.py +0 -0
  185. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/data_import_parser_tool.py +0 -0
  186. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/data_management_tool.py +0 -0
  187. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/database_manager_tool.py +0 -0
  188. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/delete_data_tool.py +0 -0
  189. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/export_harris_matrix_graphml_tool.py +0 -0
  190. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/export_tool.py +0 -0
  191. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/filter_tool.py +0 -0
  192. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/generate_report_tool.py +0 -0
  193. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/get_schema_tool.py +0 -0
  194. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/import_excel_tool.py +0 -0
  195. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/insert_data_tool.py +0 -0
  196. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/manage_services_tool.py +0 -0
  197. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/material_tool.py +0 -0
  198. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/media_management_tool.py +0 -0
  199. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/position_tool.py +0 -0
  200. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/pyarchinit_sync_tool.py +0 -0
  201. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/resolve_conflicts_tool.py +0 -0
  202. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/service_management_tool.py +0 -0
  203. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/thesaurus_management_tool.py +0 -0
  204. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/update_data_tool.py +0 -0
  205. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/upload_file_tool.py +0 -0
  206. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_relationship_format_tool.py +0 -0
  207. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_relationship_integrity_tool.py +0 -0
  208. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_stratigraphic_relationships_tool.py +0 -0
  209. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/mcp_server/tools/validate_stratigraphy_tool.py +0 -0
  210. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/media_manager/__init__.py +0 -0
  211. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/media_manager/media_handler.py +0 -0
  212. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/__init__.py +0 -0
  213. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/ai_chat.py +0 -0
  214. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/app_setting.py +0 -0
  215. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/base.py +0 -0
  216. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/datazione.py +0 -0
  217. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/extended_matrix.py +0 -0
  218. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/harris_matrix.py +0 -0
  219. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/inventario_materiali.py +0 -0
  220. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/media.py +0 -0
  221. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/pottery.py +0 -0
  222. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/site.py +0 -0
  223. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/thesaurus.py +0 -0
  224. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/tma.py +0 -0
  225. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/us.py +0 -0
  226. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/models/user.py +0 -0
  227. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/__init__.py +0 -0
  228. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pdf_generator.py +0 -0
  229. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pdf_generator_backup.py +0 -0
  230. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pyarchinit_finds_template.py +0 -0
  231. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/pyarchinit_inventory_template.py +0 -0
  232. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/pdf_export/usm_implementation.py +0 -0
  233. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/s3d_integration/__init__.py +0 -0
  234. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/s3d_integration/model_manager.py +0 -0
  235. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/s3d_integration/s3d_converter.py +0 -0
  236. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/__init__.py +0 -0
  237. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/auto_translate.py +0 -0
  238. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/configure_claude_desktop.py +0 -0
  239. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_admin_user.py +0 -0
  240. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_correct_stratigraphy_sample.py +0 -0
  241. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_italian_sample_database.py +0 -0
  242. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_sample_for_webapp.py +0 -0
  243. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/create_sample_with_50_us.py +0 -0
  244. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/generate_test_3d_model.py +0 -0
  245. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/load_italian_as_main.py +0 -0
  246. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/load_sample_as_main.py +0 -0
  247. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/migrate_relationships.py +0 -0
  248. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/populate_sample_data.py +0 -0
  249. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/populate_simple_data.py +0 -0
  250. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/setup_auth.py +0 -0
  251. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/setup_user_env.py +0 -0
  252. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/test_cascade_delete.py +0 -0
  253. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/test_relationship_fix.py +0 -0
  254. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/update_sample_relationships.py +0 -0
  255. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/update_urls_and_versions.py +0 -0
  256. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/scripts/verify_docs.py +0 -0
  257. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/__init__.py +0 -0
  258. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/ai_assistant_service.py +0 -0
  259. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/ai_chat_service.py +0 -0
  260. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/analytics_service.py +0 -0
  261. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/app_setting_service.py +0 -0
  262. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/backup_service.py +0 -0
  263. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/command_parser.py +0 -0
  264. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/datazione_service.py +0 -0
  265. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/export_import_service.py +0 -0
  266. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/extended_matrix_excel_parser.py +0 -0
  267. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/import_export_service.py +0 -0
  268. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/inventario_service.py +0 -0
  269. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/mcp_executor.py +0 -0
  270. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/media_service.py +0 -0
  271. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/periodizzazione_service.py +0 -0
  272. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/pottery_dto.py +0 -0
  273. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/pottery_pdf_service.py +0 -0
  274. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/pottery_service.py +0 -0
  275. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/relationship_sync_service.py +0 -0
  276. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/search_service.py +0 -0
  277. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/site_service.py +0 -0
  278. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/thesaurus_service.py +0 -0
  279. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/tma_service.py +0 -0
  280. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/us_service.py +0 -0
  281. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/services/user_service.py +0 -0
  282. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/__init__.py +0 -0
  283. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/bundle_creator.py +0 -0
  284. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/bundle_manifest.py +0 -0
  285. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/bundle_validator.py +0 -0
  286. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/connectivity_monitor.py +0 -0
  287. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/sync_orchestrator.py +0 -0
  288. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/sync_queue.py +0 -0
  289. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/sync_state_machine.py +0 -0
  290. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/stratigraph/uuid_manager.py +0 -0
  291. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.mo +0 -0
  292. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/en/LC_MESSAGES/messages.po +0 -0
  293. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.mo +0 -0
  294. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/it/LC_MESSAGES/messages.po +0 -0
  295. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/translations/messages.pot +0 -0
  296. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/__init__.py +0 -0
  297. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/auth.py +0 -0
  298. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/exceptions.py +0 -0
  299. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/relationship_validator.py +0 -0
  300. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/stratigraphic_validator.py +0 -0
  301. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/tma_label_generator.py +0 -0
  302. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/utils/validators.py +0 -0
  303. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/__init__.py +0 -0
  304. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/exceptions.py +0 -0
  305. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/i18n.py +0 -0
  306. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/loader.py +0 -0
  307. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/provider.py +0 -0
  308. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/translations/vocab_en.json +0 -0
  309. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/translations/vocab_it.json +0 -0
  310. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/vocab/types.py +0 -0
  311. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/app.py +0 -0
  312. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/auth_routes.py +0 -0
  313. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/data/paradata/domus-pompeiana/stratigraphy.graphml +0 -0
  314. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/data/paradata/metro-c-amba-aradam/stratigraphy.graphml +0 -0
  315. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/em_node_config_routes.py +0 -0
  316. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/excel_import_routes.py +0 -0
  317. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/graph_routes.py +0 -0
  318. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/harris_creator_routes.py +0 -0
  319. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/matrix_import_routes.py +0 -0
  320. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/matrix_tools_routes.py +0 -0
  321. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/paradata_routes.py +0 -0
  322. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/paradata_ui_routes.py +0 -0
  323. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/pottery_routes.py +0 -0
  324. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/pyarchinit_import_export_routes.py +0 -0
  325. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/s3d_routes.py +0 -0
  326. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/socketio_events.py +0 -0
  327. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/css/style.css +0 -0
  328. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/favicon.ico +0 -0
  329. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/logo.png +0 -0
  330. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/no-image.png +0 -0
  331. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/images/pyarchinit-mini-logo.png +0 -0
  332. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/OrbitControls.js +0 -0
  333. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/stratigraphic_layout.js +0 -0
  334. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/three-d-viewer.js +0 -0
  335. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/three.min.js +0 -0
  336. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/static/js/universal_search.js +0 -0
  337. {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
  338. {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
  339. {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
  340. {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
  341. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/3d_builder/index.html +0 -0
  342. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/3d_viewer/viewer.html +0 -0
  343. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/backups.html +0 -0
  344. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database.html +0 -0
  345. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database_connect.html +0 -0
  346. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database_info.html +0 -0
  347. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/database_upload.html +0 -0
  348. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/admin/settings_ai.html +0 -0
  349. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/ai/assistant.html +0 -0
  350. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/analytics/dashboard.html +0 -0
  351. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/auth/login.html +0 -0
  352. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/auth/users.html +0 -0
  353. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/base.html +0 -0
  354. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/blender_viewer.html +0 -0
  355. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/components/language_switcher.html +0 -0
  356. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/dashboard.html +0 -0
  357. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/datazioni/list.html +0 -0
  358. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/docs/index.html +0 -0
  359. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/em_node_config/index.html +0 -0
  360. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/excel_import/index.html +0 -0
  361. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/export/export_import.html +0 -0
  362. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/graph_import_preview.html +0 -0
  363. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/graph_import_result.html +0 -0
  364. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_creator/index.html +0 -0
  365. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/graphml_export.html +0 -0
  366. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/large_graph_message.html +0 -0
  367. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/stratigraph_viewer.html +0 -0
  368. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/view.html +0 -0
  369. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/view_graphviz.html +0 -0
  370. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/harris_matrix/viewer_3d_integrated.html +0 -0
  371. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/inventario/form.html +0 -0
  372. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/inventario/list.html +0 -0
  373. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_import/preview.html +0 -0
  374. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_import/rejected.html +0 -0
  375. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_import/upload.html +0 -0
  376. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/matrix_tools/index.html +0 -0
  377. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/media/list.html +0 -0
  378. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/media/upload.html +0 -0
  379. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/messaging/contacts.html +0 -0
  380. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/operators/directory.html +0 -0
  381. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/paradata/edit.html +0 -0
  382. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/paradata/index.html +0 -0
  383. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/paradata/list.html +0 -0
  384. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pdf/pottery_sheet.html +0 -0
  385. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/periodizzazione/form.html +0 -0
  386. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/periodizzazione/list.html +0 -0
  387. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/periodizzazione/periods.html +0 -0
  388. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/detail.html +0 -0
  389. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/form.html +0 -0
  390. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/import_form.html +0 -0
  391. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pottery/list.html +0 -0
  392. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/pyarchinit_import_export/index.html +0 -0
  393. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/search/results.html +0 -0
  394. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/detail.html +0 -0
  395. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/form.html +0 -0
  396. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/list.html +0 -0
  397. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/sites/map.html +0 -0
  398. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/stats/targeted.html +0 -0
  399. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/thesaurus/list.html +0 -0
  400. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/tma/form.html +0 -0
  401. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/tma/list.html +0 -0
  402. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/us/form.html +0 -0
  403. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/us/list.html +0 -0
  404. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/validation/report.html +0 -0
  405. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/yed_import/index.html +0 -0
  406. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/yed_import/preview.html +0 -0
  407. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/templates/yed_import/result.html +0 -0
  408. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/test_prova_extended_matrix.graphml +0 -0
  409. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/three_d_builder_routes.py +0 -0
  410. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.graphml +0 -0
  411. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/uploads/graphml/Sito Archeologico di Esempio_stratigraphy.json +0 -0
  412. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/vocab_routes.py +0 -0
  413. {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
  414. {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
  415. {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
  416. {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
  417. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini/web_interface/yed_import_routes.py +0 -0
  418. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/dependency_links.txt +0 -0
  419. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/entry_points.txt +0 -0
  420. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/not-zip-safe +0 -0
  421. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/requires.txt +0 -0
  422. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/pyarchinit_mini.egg-info/top_level.txt +0 -0
  423. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/requirements.txt +0 -0
  424. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/setup.cfg +0 -0
  425. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/setup.py +0 -0
  426. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/__init__.py +0 -0
  427. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/conftest.py +0 -0
  428. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/e2e/__init__.py +0 -0
  429. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/e2e/test_web_vocab_full_flow.py +0 -0
  430. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_baseline_graphml.py +0 -0
  431. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_harris_swimlane_synthetic.py +0 -0
  432. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_synthetic_db.py +0 -0
  433. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/_generate_yed_test_files.py +0 -0
  434. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/fixtures/build_legacy_with_pottery.py +0 -0
  435. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/__init__.py +0 -0
  436. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_adarte_regression.py +0 -0
  437. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_admin_ai_settings_routes.py +0 -0
  438. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_admin_backup_routes.py +0 -0
  439. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_export_heriverse.py +0 -0
  440. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_import_graphml.py +0 -0
  441. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_api_import_json.py +0 -0
  442. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_auto_regen_on_save.py +0 -0
  443. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_feature_flag_pipelines.py +0 -0
  444. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_full_sync_flow.py +0 -0
  445. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_graph_import_flow.py +0 -0
  446. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_graph_routes.py +0 -0
  447. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_matrix_post_cutover.py +0 -0
  448. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_matrix_visual_parity.py +0 -0
  449. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_create_row.py +0 -0
  450. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_load.py +0 -0
  451. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_save.py +0 -0
  452. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_harris_swimlane_routes_session_missing.py +0 -0
  453. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_lang_routes.py +0 -0
  454. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_apply_route.py +0 -0
  455. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_rejected_route.py +0 -0
  456. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_site_widget.py +0 -0
  457. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_matrix_import_upload_route.py +0 -0
  458. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_migrate_vocab_cli.py +0 -0
  459. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_paradata_routes_authors.py +0 -0
  460. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_paradata_routes_other_types.py +0 -0
  461. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_paradata_ui.py +0 -0
  462. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_completion.py +0 -0
  463. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_excel_roundtrip.py +0 -0
  464. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_filters_id_number_anno.py +0 -0
  465. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_legacy_upgrade.py +0 -0
  466. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_list_media_thumbs.py +0 -0
  467. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_pottery_routes.py +0 -0
  468. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_roundtrip.py +0 -0
  469. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_roundtrip_extmatrix.py +0 -0
  470. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_spec2_coverage_gaps.py +0 -0
  471. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_swimlane_group_by.py +0 -0
  472. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_vocab_routes.py +0 -0
  473. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_yed_export_route.py +0 -0
  474. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_yed_import_routes.py +0 -0
  475. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/integration/test_yed_writer_parity.py +0 -0
  476. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/__init__.py +0 -0
  477. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_apply.py +0 -0
  478. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_extractor_parse.py +0 -0
  479. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_extractor_providers.py +0 -0
  480. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ai_matrix_plan_serialization.py +0 -0
  481. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_app_setting_model.py +0 -0
  482. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_app_setting_service.py +0 -0
  483. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_auto_regen.py +0 -0
  484. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_backup_service.py +0 -0
  485. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_bundle.py +0 -0
  486. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_concurrency_columns.py +0 -0
  487. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_concurrency_manager.py +0 -0
  488. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_connectivity_monitor.py +0 -0
  489. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_database_utils.py +0 -0
  490. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_deprecated_writers_shim.py +0 -0
  491. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_em_palette_vocab_backed.py +0 -0
  492. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graph_to_db.py +0 -0
  493. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphml_io_reader.py +0 -0
  494. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphml_io_writer.py +0 -0
  495. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_edge_registry.py +0 -0
  496. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_exceptions.py +0 -0
  497. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_filesystem.py +0 -0
  498. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_ingestor_apply.py +0 -0
  499. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_ingestor_preview.py +0 -0
  500. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_graphproj_projector.py +0 -0
  501. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_layout.py +0 -0
  502. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_compound_layout.py +0 -0
  503. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_exceptions.py +0 -0
  504. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_period_sync.py +0 -0
  505. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_row_provider.py +0 -0
  506. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_state_load.py +0 -0
  507. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_harris_swimlane_state_save.py +0 -0
  508. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_heriverse_parser.py +0 -0
  509. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_ingest_plan.py +0 -0
  510. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_inventario_schema.py +0 -0
  511. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_migrations_backup.py +0 -0
  512. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_migrations_idempotent.py +0 -0
  513. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_optimistic_locking.py +0 -0
  514. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_palette_loader.py +0 -0
  515. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_palette_styles.py +0 -0
  516. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_paradata_store_authors.py +0 -0
  517. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_paradata_store_basic.py +0 -0
  518. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_paradata_store_other_types.py +0 -0
  519. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_pottery_dto.py +0 -0
  520. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_pottery_model.py +0 -0
  521. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_pottery_service.py +0 -0
  522. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_rapporti_codec.py +0 -0
  523. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_s3d_converter_vocab_backed.py +0 -0
  524. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_s3d_projector.py +0 -0
  525. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_site_service.py +0 -0
  526. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_api.py +0 -0
  527. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_cli.py +0 -0
  528. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_orchestrator.py +0 -0
  529. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_queue.py +0 -0
  530. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_sync_state_machine.py +0 -0
  531. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_us_dto_unita_tipo_validator.py +0 -0
  532. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_us_schema.py +0 -0
  533. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_uuid_manager.py +0 -0
  534. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_bootstrap_failures.py +0 -0
  535. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_exceptions.py +0 -0
  536. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_i18n.py +0 -0
  537. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_loader.py +0 -0
  538. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_provider.py +0 -0
  539. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_vocab_types.py +0 -0
  540. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_yed_importer_parse.py +0 -0
  541. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_yed_importer_plan.py +0 -0
  542. {pyarchinit_mini-2.8.0 → pyarchinit_mini-2.9.0}/tests/unit/test_yed_writer.py +0 -0
  543. {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.8.0
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
@@ -23,7 +23,7 @@ Features:
23
23
  - Scalable and modular architecture
24
24
  """
25
25
 
26
- __version__ = "2.8.0"
26
+ __version__ = "2.9.0"
27
27
  __author__ = "PyArchInit Team"
28
28
  __email__ = "enzo.ccc@gmail.com"
29
29
 
@@ -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
@@ -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">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
26
+ &lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;
27
+
28
+ &lt;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"&gt;
42
+ &lt;defs
43
+ id="defs4052" /&gt;
44
+ &lt;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" /&gt;
63
+ &lt;metadata
64
+ id="metadata4055"&gt;
65
+ &lt;rdf:RDF&gt;
66
+ &lt;cc:Work
67
+ rdf:about=""&gt;
68
+ &lt;dc:format&gt;image/svg+xml&lt;/dc:format&gt;
69
+ &lt;dc:type
70
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /&gt;
71
+ &lt;dc:title&gt;&lt;/dc:title&gt;
72
+ &lt;/cc:Work&gt;
73
+ &lt;/rdf:RDF&gt;
74
+ &lt;/metadata&gt;
75
+ &lt;g
76
+ id="layer1"
77
+ inkscape:label="Layer 1"
78
+ inkscape:groupmode="layer"&gt;
79
+ &lt;g
80
+ transform="matrix(0.41470954,0,0,0.41438764,-58.075087,96.197996)"
81
+ id="g3932"&gt;
82
+ &lt;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" /&gt;
92
+ &lt;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" /&gt;
97
+ &lt;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" /&gt;
104
+ &lt;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" /&gt;
109
+ &lt;/g&gt;
110
+ &lt;/g&gt;
111
+ &lt;/svg&gt;</y:Resource>
112
+ <y:Resource id="2">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
113
+ &lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;
114
+
115
+ &lt;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"&gt;
129
+ &lt;defs
130
+ id="defs4194" /&gt;
131
+ &lt;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" /&gt;
150
+ &lt;metadata
151
+ id="metadata4197"&gt;
152
+ &lt;rdf:RDF&gt;
153
+ &lt;cc:Work
154
+ rdf:about=""&gt;
155
+ &lt;dc:format&gt;image/svg+xml&lt;/dc:format&gt;
156
+ &lt;dc:type
157
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /&gt;
158
+ &lt;dc:title&gt;&lt;/dc:title&gt;
159
+ &lt;/cc:Work&gt;
160
+ &lt;/rdf:RDF&gt;
161
+ &lt;/metadata&gt;
162
+ &lt;g
163
+ id="layer1"
164
+ inkscape:label="Layer 1"
165
+ inkscape:groupmode="layer"&gt;
166
+ &lt;g
167
+ transform="matrix(0.40828104,0,0,0.41346794,-201.56174,97.998396)"
168
+ id="g3922"&gt;
169
+ &lt;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)" /&gt;
179
+ &lt;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" /&gt;
185
+ &lt;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" /&gt;
191
+ &lt;/g&gt;
192
+ &lt;/g&gt;
193
+ &lt;/svg&gt;</y:Resource>
194
+ <y:Resource id="3">&lt;?xml version="1.0" encoding="UTF-8" standalone="no"?&gt;
195
+ &lt;!-- Created with Inkscape (http://www.inkscape.org/) --&gt;
196
+
197
+ &lt;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"&gt;
212
+ &lt;defs
213
+ id="defs2" /&gt;
214
+ &lt;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" /&gt;
236
+ &lt;metadata
237
+ id="metadata5"&gt;
238
+ &lt;rdf:RDF&gt;
239
+ &lt;cc:Work
240
+ rdf:about=""&gt;
241
+ &lt;dc:format&gt;image/svg+xml&lt;/dc:format&gt;
242
+ &lt;dc:type
243
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" /&gt;
244
+ &lt;dc:title&gt;&lt;/dc:title&gt;
245
+ &lt;/cc:Work&gt;
246
+ &lt;/rdf:RDF&gt;
247
+ &lt;/metadata&gt;
248
+ &lt;g
249
+ inkscape:label="Livello 1"
250
+ inkscape:groupmode="layer"
251
+ id="layer1"
252
+ transform="translate(-82.089519,-139.87478)"&gt;
253
+ &lt;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)" /&gt;
261
+ &lt;/g&gt;
262
+ &lt;/svg&gt;</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').addEventListener('click', () => exportMatrix('graphml'));
863
- document.getElementById('export-dot-btn').addEventListener('click', () => exportMatrix('dot'));
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() {