s3dgraphy 1.5.2__tar.gz → 1.6.0.dev5__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 (147) hide show
  1. {s3dgraphy-1.5.2/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev5}/PKG-INFO +81 -7
  2. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/README.md +69 -0
  3. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/pyproject.toml +47 -15
  4. s3dgraphy-1.6.0.dev5/src/s3dgraphy/JSON_config/em.ttl +442 -0
  5. s3dgraphy-1.6.0.dev5/src/s3dgraphy/JSON_config/em_palette_icons.json +15 -0
  6. s3dgraphy-1.6.0.dev5/src/s3dgraphy/JSON_config/em_qualia_types.json +1188 -0
  7. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/em_visual_rules.json +84 -0
  8. s3dgraphy-1.6.0.dev5/src/s3dgraphy/JSON_config/hdto_extension.ttl +177 -0
  9. s3dgraphy-1.6.0.dev5/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +817 -0
  10. s3dgraphy-1.5.2/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json → s3dgraphy-1.6.0.dev5/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +1 -1
  11. s3dgraphy-1.6.0.dev5/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +1142 -0
  12. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/__init__.py +1 -1
  13. s3dgraphy-1.6.0.dev5/src/s3dgraphy/exporter/__init__.py +21 -0
  14. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/canvas_generator.py +64 -0
  15. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +161 -0
  16. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/json_exporter.py +140 -26
  17. s3dgraphy-1.6.0.dev5/src/s3dgraphy/exporter/rdf_exporter.py +693 -0
  18. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/base_importer.py +98 -3
  19. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/import_graphml.py +286 -1
  20. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/mapped_xlsx_importer.py +78 -9
  21. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/pyarchinit_importer.py +160 -12
  22. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/qualia_importer.py +10 -0
  23. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/xlsx_importer.py +56 -6
  24. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +25 -6
  25. s3dgraphy-1.6.0.dev5/src/s3dgraphy/mappings/template_emdb_mapping.json +55 -0
  26. s3dgraphy-1.6.0.dev5/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +103 -0
  27. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/__init__.py +15 -10
  28. s3dgraphy-1.6.0.dev5/src/s3dgraphy/nodes/hdt_node.py +110 -0
  29. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5/src/s3dgraphy.egg-info}/PKG-INFO +81 -7
  30. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy.egg-info/SOURCES.txt +11 -1
  31. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy.egg-info/requires.txt +11 -3
  32. s3dgraphy-1.6.0.dev5/tests/test_composite_node_name.py +232 -0
  33. s3dgraphy-1.6.0.dev5/tests/test_filtered_import.py +232 -0
  34. s3dgraphy-1.6.0.dev5/tests/test_lossless_roundtrip.py +773 -0
  35. s3dgraphy-1.5.2/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -14
  36. s3dgraphy-1.5.2/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -572
  37. s3dgraphy-1.5.2/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -837
  38. s3dgraphy-1.5.2/src/s3dgraphy/exporter/__init__.py +0 -6
  39. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/LICENSE +0 -0
  40. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/MANIFEST.in +0 -0
  41. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/setup.cfg +0 -0
  42. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  43. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  44. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  45. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  46. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  47. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  48. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  49. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  50. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  51. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  52. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  53. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  54. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  55. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  56. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  57. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  58. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  59. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  60. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  61. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  62. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  63. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  64. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  65. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  66. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  67. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  68. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  69. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  70. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  71. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  72. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  73. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  74. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  75. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  76. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  77. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  78. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  79. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  80. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  81. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/classification.py +0 -0
  82. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  83. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/diagnostics.py +0 -0
  84. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/edges/__init__.py +0 -0
  85. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/edges/connections_loader.py +0 -0
  86. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/edges/edge.py +0 -0
  87. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  88. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  89. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  90. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  91. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  92. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  93. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  94. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  95. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  96. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  97. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  98. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  99. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  100. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  101. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/graph.py +0 -0
  102. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/__init__.py +0 -0
  103. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  104. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/indices.py +0 -0
  105. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/mappings/__init__.py +0 -0
  106. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
  107. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
  108. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
  109. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
  110. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/mappings/registry.py +0 -0
  111. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/merge/__init__.py +0 -0
  112. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/merge/graph_merger.py +0 -0
  113. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/multigraph/__init__.py +0 -0
  114. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  115. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/author_node.py +0 -0
  116. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/base_node.py +0 -0
  117. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  118. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/document_node.py +0 -0
  119. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  120. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  121. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  122. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  123. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/graph_node.py +0 -0
  124. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/group_node.py +0 -0
  125. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/license_node.py +0 -0
  126. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/link_node.py +0 -0
  127. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  128. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/property_node.py +0 -0
  129. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/representation_node.py +0 -0
  130. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  131. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  132. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/resolvers/__init__.py +0 -0
  133. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  134. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  135. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  136. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  137. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/temporal/__init__.py +0 -0
  138. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  139. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/transforms/__init__.py +0 -0
  140. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  141. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/transforms/compact.py +0 -0
  142. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  143. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/utils/__init__.py +0 -0
  144. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/utils/utils.py +0 -0
  145. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy/utils/visual_layout.py +0 -0
  146. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  147. {s3dgraphy-1.5.2 → s3dgraphy-1.6.0.dev5}/src/s3dgraphy.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: s3dgraphy
3
- Version: 1.5.2
3
+ Version: 1.6.0.dev5
4
4
  Summary: 3D Stratigraphic Graph Management Library for archaeological and heritage applications
5
5
  Author-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
6
6
  Maintainer-email: Emanuel Demetrescu <emanuel.demetrescu@cnr.it>
@@ -32,10 +32,17 @@ Requires-Python: >=3.9
32
32
  Description-Content-Type: text/markdown
33
33
  License-File: LICENSE
34
34
  Requires-Dist: pandas>=2.0.0
35
- Requires-Dist: numpy>=1.21.0
36
35
  Requires-Dist: lxml>=4.9.0
37
36
  Requires-Dist: openpyxl>=3.0.0
38
37
  Requires-Dist: networkx>=3.0
38
+ Provides-Extra: rdf
39
+ Requires-Dist: rdflib>=7.0; extra == "rdf"
40
+ Provides-Extra: rdf-embedded
41
+ Requires-Dist: rdflib>=7.0; extra == "rdf-embedded"
42
+ Requires-Dist: pyoxigraph>=0.4; extra == "rdf-embedded"
43
+ Provides-Extra: visualization
44
+ Requires-Dist: matplotlib>=3.0; extra == "visualization"
45
+ Requires-Dist: plotly>=5.0; extra == "visualization"
39
46
  Provides-Extra: dev
40
47
  Requires-Dist: pytest>=7.0; extra == "dev"
41
48
  Requires-Dist: pytest-cov; extra == "dev"
@@ -49,12 +56,10 @@ Provides-Extra: docs
49
56
  Requires-Dist: sphinx>=5.0; extra == "docs"
50
57
  Requires-Dist: sphinx-rtd-theme; extra == "docs"
51
58
  Requires-Dist: myst-parser; extra == "docs"
52
- Provides-Extra: visualization
53
- Requires-Dist: networkx>=3.0; extra == "visualization"
54
- Requires-Dist: matplotlib>=3.0; extra == "visualization"
55
- Requires-Dist: plotly>=5.0; extra == "visualization"
56
59
  Provides-Extra: full
57
- Requires-Dist: s3dgraphy[dev,docs,visualization]; extra == "full"
60
+ Requires-Dist: s3dgraphy[rdf-embedded,visualization]; extra == "full"
61
+ Provides-Extra: all
62
+ Requires-Dist: s3dgraphy[dev,docs,full]; extra == "all"
58
63
  Dynamic: license-file
59
64
 
60
65
  # s3dgraphy
@@ -152,6 +157,75 @@ graph.export_json("stratigraphy.json")
152
157
  - **Virtual Archaeology**: Create interactive 3D experiences
153
158
  - **Research Integration**: Connect archaeological data with other disciplines
154
159
 
160
+ ## Mapping JSON files
161
+
162
+ The `src/s3dgraphy/mappings/` folder contains JSON templates that describe how
163
+ to import data from external tabular sources (SQLite tables from PyArchInit,
164
+ XLSX files from EMdb, generic CSVs, etc.) into an s3dgraphy graph.
165
+
166
+ Two template files live at the root of the folder for reference:
167
+
168
+ - `template_pyarchinit_mapping.json` — for SQLite-based tables (PyArchInit-style)
169
+ - `template_emdb_mapping.json` — for XLSX-based tables (EMdb-style)
170
+
171
+ These templates are NOT loaded automatically by `MappingRegistry`, which only
172
+ scans the `pyarchinit/`, `emdb/`, and `generic/` subdirectories. To use one as
173
+ a starting point, copy it to the appropriate subdirectory and adapt it to your
174
+ table structure.
175
+
176
+ The templates document the schema inline. In addition to `is_id`,
177
+ `is_description`, `is_attribute`, and `node_type`, 1.6 introduces two new
178
+ optional flags on each `column_mappings` entry:
179
+
180
+ - `is_filter` — marks the column as a candidate filter. Importers expose these
181
+ via `get_filter_columns()` so a consumer application can present a dropdown
182
+ before triggering the import.
183
+ - `filter_required` — when `true`, the consumer is expected to force the user
184
+ to pick a value (no "All values" option). When `false`, the filter is
185
+ optional.
186
+
187
+ Each importer (`PyArchInitImporter`, `MappedXLSXImporter`, `XLSXImporter`) now
188
+ accepts a `filters={col: value, ...}` kwarg with AND semantics, and exposes a
189
+ `get_distinct_values(col)` helper for populating the dropdown. The semantics
190
+ are deliberately library-side and make no assumption about who renders the
191
+ filter UI.
192
+
193
+ **Full schema reference:**
194
+ [Mapping JSON Schema Reference](https://docs.extendedmatrix.org/projects/s3dgraphy/en/latest/importers/mapping_schema.html)
195
+ documents every key (`table_settings`, `column_mappings`, `relations`) and the
196
+ 1.6 filter flags in detail.
197
+
198
+ ### Consumer-side quick start
199
+
200
+ ```python
201
+ from s3dgraphy.importer.pyarchinit_importer import PyArchInitImporter
202
+
203
+ # 1) Probe the mapping: discover filter columns and their values.
204
+ probe = PyArchInitImporter(
205
+ filepath="excavation.sqlite",
206
+ mapping_name="pyarchinit_us_mapping",
207
+ )
208
+ for spec in probe.get_filter_columns():
209
+ column = spec["column"]
210
+ label = spec["display_name"]
211
+ required = spec["filter_required"]
212
+ values = probe.get_distinct_values(column)
213
+ print(f"{label} ({'required' if required else 'optional'}): {values}")
214
+
215
+ # 2) Import only the subset the user picked.
216
+ importer = PyArchInitImporter(
217
+ filepath="excavation.sqlite",
218
+ mapping_name="pyarchinit_us_mapping",
219
+ filters={"sito": "Pompei", "area": "A"},
220
+ )
221
+ graph = importer.parse()
222
+ ```
223
+
224
+ `filters` defaults to `None` (no filtering), so all existing code continues
225
+ to work unchanged. Multiple entries are combined with logical AND; values
226
+ match exactly and case-sensitively. The same flow applies to
227
+ `MappedXLSXImporter` and `XLSXImporter` for XLSX sources.
228
+
155
229
  ## 📖 Documentation
156
230
 
157
231
  - **[User Guide](https://docs.extendedmatrix.org/projects/s3dgraphy/)** - Complete documentation
@@ -93,6 +93,75 @@ graph.export_json("stratigraphy.json")
93
93
  - **Virtual Archaeology**: Create interactive 3D experiences
94
94
  - **Research Integration**: Connect archaeological data with other disciplines
95
95
 
96
+ ## Mapping JSON files
97
+
98
+ The `src/s3dgraphy/mappings/` folder contains JSON templates that describe how
99
+ to import data from external tabular sources (SQLite tables from PyArchInit,
100
+ XLSX files from EMdb, generic CSVs, etc.) into an s3dgraphy graph.
101
+
102
+ Two template files live at the root of the folder for reference:
103
+
104
+ - `template_pyarchinit_mapping.json` — for SQLite-based tables (PyArchInit-style)
105
+ - `template_emdb_mapping.json` — for XLSX-based tables (EMdb-style)
106
+
107
+ These templates are NOT loaded automatically by `MappingRegistry`, which only
108
+ scans the `pyarchinit/`, `emdb/`, and `generic/` subdirectories. To use one as
109
+ a starting point, copy it to the appropriate subdirectory and adapt it to your
110
+ table structure.
111
+
112
+ The templates document the schema inline. In addition to `is_id`,
113
+ `is_description`, `is_attribute`, and `node_type`, 1.6 introduces two new
114
+ optional flags on each `column_mappings` entry:
115
+
116
+ - `is_filter` — marks the column as a candidate filter. Importers expose these
117
+ via `get_filter_columns()` so a consumer application can present a dropdown
118
+ before triggering the import.
119
+ - `filter_required` — when `true`, the consumer is expected to force the user
120
+ to pick a value (no "All values" option). When `false`, the filter is
121
+ optional.
122
+
123
+ Each importer (`PyArchInitImporter`, `MappedXLSXImporter`, `XLSXImporter`) now
124
+ accepts a `filters={col: value, ...}` kwarg with AND semantics, and exposes a
125
+ `get_distinct_values(col)` helper for populating the dropdown. The semantics
126
+ are deliberately library-side and make no assumption about who renders the
127
+ filter UI.
128
+
129
+ **Full schema reference:**
130
+ [Mapping JSON Schema Reference](https://docs.extendedmatrix.org/projects/s3dgraphy/en/latest/importers/mapping_schema.html)
131
+ documents every key (`table_settings`, `column_mappings`, `relations`) and the
132
+ 1.6 filter flags in detail.
133
+
134
+ ### Consumer-side quick start
135
+
136
+ ```python
137
+ from s3dgraphy.importer.pyarchinit_importer import PyArchInitImporter
138
+
139
+ # 1) Probe the mapping: discover filter columns and their values.
140
+ probe = PyArchInitImporter(
141
+ filepath="excavation.sqlite",
142
+ mapping_name="pyarchinit_us_mapping",
143
+ )
144
+ for spec in probe.get_filter_columns():
145
+ column = spec["column"]
146
+ label = spec["display_name"]
147
+ required = spec["filter_required"]
148
+ values = probe.get_distinct_values(column)
149
+ print(f"{label} ({'required' if required else 'optional'}): {values}")
150
+
151
+ # 2) Import only the subset the user picked.
152
+ importer = PyArchInitImporter(
153
+ filepath="excavation.sqlite",
154
+ mapping_name="pyarchinit_us_mapping",
155
+ filters={"sito": "Pompei", "area": "A"},
156
+ )
157
+ graph = importer.parse()
158
+ ```
159
+
160
+ `filters` defaults to `None` (no filtering), so all existing code continues
161
+ to work unchanged. Multiple entries are combined with logical AND; values
162
+ match exactly and case-sensitively. The same flow applies to
163
+ `MappedXLSXImporter` and `XLSXImporter` for XLSX sources.
164
+
96
165
  ## 📖 Documentation
97
166
 
98
167
  - **[User Guide](https://docs.extendedmatrix.org/projects/s3dgraphy/)** - Complete documentation
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "s3dgraphy"
7
- version = "1.5.2"
7
+ version = "1.6.0.dev5"
8
8
  description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -44,11 +44,13 @@ classifiers = [
44
44
  ]
45
45
 
46
46
  dependencies = [
47
- "pandas>=2.0.0",
48
- "numpy>=1.21.0",
49
- "lxml>=4.9.0",
50
- "openpyxl>=3.0.0",
51
- "networkx>=3.0",
47
+ # Strict runtime dependencies — directly imported by s3dgraphy core.
48
+ # Kept minimal: numpy was removed in 1.6.0 (only transitive via pandas;
49
+ # no direct s3dgraphy code imports numpy).
50
+ "pandas>=2.0.0", # used by xlsx_importer, mapping system
51
+ "lxml>=4.9.0", # used by graphml importer/exporter
52
+ "openpyxl>=3.0.0", # used by xlsx_importer
53
+ "networkx>=3.0", # used by temporal/inference_engine.py
52
54
  ]
53
55
 
54
56
  [project.urls]
@@ -60,29 +62,59 @@ Repository = "https://github.com/zalmoxes-laran/s3dgraphy.git"
60
62
  "Extended Matrix" = "https://www.extendedmatrix.org"
61
63
  Changelog = "https://github.com/zalmoxes-laran/s3dgraphy/blob/main/CHANGELOG.md"
62
64
 
65
+ # ─────────────────────────────────────────────────────────────────────────
66
+ # Optional features — pip install s3dgraphy[<extra>]
67
+ #
68
+ # Pattern: each feature that requires extra runtime libraries is opt-in.
69
+ # This keeps the core install small and avoids forcing rdflib/pyoxigraph
70
+ # on consumers that only need GraphML/JSON/xlsx pipelines.
71
+ #
72
+ # Recommended for most users:
73
+ # pip install s3dgraphy[full]
74
+ # ─────────────────────────────────────────────────────────────────────────
63
75
  [project.optional-dependencies]
76
+ rdf = [
77
+ # RDF export pipeline (RDFExporter → Turtle / N-Triples / JSON-LD / TriG / RDF-XML)
78
+ # via s3dgraphy.exporter.rdf_exporter. Without this extra, importing
79
+ # RDFExporter raises ImportError (gracefully handled by exporter/__init__.py).
80
+ "rdflib>=7.0",
81
+ ]
82
+ rdf-embedded = [
83
+ # RDF export + embedded SPARQL store (no separate server required).
84
+ # Planned for s3dgraphy v1.6.3+ (SPARQL endpoint read/write workflow).
85
+ "rdflib>=7.0",
86
+ "pyoxigraph>=0.4",
87
+ ]
88
+ visualization = [
89
+ # Plotting / network visualization helpers. networkx itself is strict
90
+ # (used by temporal/inference_engine) so it is NOT listed here to avoid
91
+ # a duplicate constraint that could confuse pip resolvers.
92
+ "matplotlib>=3.0",
93
+ "plotly>=5.0",
94
+ ]
64
95
  dev = [
65
96
  "pytest>=7.0",
66
- "pytest-cov",
97
+ "pytest-cov",
67
98
  "black",
68
99
  "flake8",
69
100
  "mypy",
70
101
  "build",
71
102
  "twine",
72
- "bump2version"
103
+ "bump2version",
73
104
  ]
74
105
  docs = [
75
106
  "sphinx>=5.0",
76
107
  "sphinx-rtd-theme",
77
- "myst-parser"
78
- ]
79
- visualization = [
80
- "networkx>=3.0",
81
- "matplotlib>=3.0",
82
- "plotly>=5.0"
108
+ "myst-parser",
83
109
  ]
110
+ # Convenience aggregate — installs every runtime feature (RDF + viz)
111
+ # without the dev/docs tooling. The dev/docs/test stacks stay separate
112
+ # so CI-style installs don't pull editor/QA deps.
84
113
  full = [
85
- "s3dgraphy[dev,docs,visualization]"
114
+ "s3dgraphy[rdf-embedded,visualization]",
115
+ ]
116
+ all = [
117
+ "s3dgraphy[full,dev,docs]",
86
118
  ]
87
119
 
88
120
  [tool.setuptools.packages.find]