s3dgraphy 1.6.0.dev14__tar.gz → 1.6.0.dev16__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 (364) hide show
  1. {s3dgraphy-1.6.0.dev14/src/s3dgraphy.egg-info → s3dgraphy-1.6.0.dev16}/PKG-INFO +1 -1
  2. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/pyproject.toml +1 -1
  3. s3dgraphy-1.6.0.dev16/src/s3dgraphy/JSON_config/acquisition_mappings/uri.json +22 -0
  4. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/em_visual_rules.json +2 -1
  5. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json +13 -10
  6. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/__init__.py +1 -1
  7. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/acquisition/__init__.py +5 -1
  8. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/acquisition/acquire.py +12 -2
  9. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/acquisition/descriptor.py +20 -2
  10. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/acquisition/mapping.py +72 -1
  11. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/api.py +601 -19
  12. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/container.py +64 -7
  13. s3dgraphy-1.6.0.dev16/src/s3dgraphy/contract/__init__.py +49 -0
  14. s3dgraphy-1.6.0.dev16/src/s3dgraphy/contract/connector.py +576 -0
  15. s3dgraphy-1.6.0.dev16/src/s3dgraphy/contract/consumer.py +481 -0
  16. s3dgraphy-1.6.0.dev16/src/s3dgraphy/contract/core.py +350 -0
  17. s3dgraphy-1.6.0.dev16/src/s3dgraphy/contract/reference.py +93 -0
  18. s3dgraphy-1.6.0.dev16/src/s3dgraphy/dtc/__init__.py +80 -0
  19. s3dgraphy-1.6.0.dev16/src/s3dgraphy/dtc/corpus.py +295 -0
  20. s3dgraphy-1.6.0.dev16/src/s3dgraphy/dtc/ingest.py +639 -0
  21. s3dgraphy-1.6.0.dev16/src/s3dgraphy/exporter/html_exporter.py +249 -0
  22. s3dgraphy-1.6.0.dev16/src/s3dgraphy/exporter/ipynb_exporter.py +306 -0
  23. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/latex_exporter.py +170 -23
  24. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/rdf_exporter.py +14 -0
  25. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/geometry/__init__.py +14 -2
  26. s3dgraphy-1.6.0.dev16/src/s3dgraphy/geometry/store_backed.py +276 -0
  27. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/iiif.py +62 -2
  28. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/base_importer.py +32 -6
  29. s3dgraphy-1.6.0.dev16/src/s3dgraphy/importer/xml_importer.py +220 -0
  30. s3dgraphy-1.6.0.dev16/src/s3dgraphy/mappings/authoring.py +881 -0
  31. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/narrative/bake.py +95 -4
  32. s3dgraphy-1.6.0.dev16/src/s3dgraphy/narrative/query.py +357 -0
  33. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/narrative/site_story.py +95 -26
  34. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/resource_node.py +39 -1
  35. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/publication.py +80 -16
  36. s3dgraphy-1.6.0.dev16/src/s3dgraphy/rights.py +522 -0
  37. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/shelf/__init__.py +9 -0
  38. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/shelf/core.py +230 -11
  39. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/study.py +139 -1
  40. s3dgraphy-1.6.0.dev16/src/s3dgraphy/tools/consumer_drift.py +188 -0
  41. s3dgraphy-1.6.0.dev16/src/s3dgraphy/tools/wheel_drift.py +256 -0
  42. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16/src/s3dgraphy.egg-info}/PKG-INFO +1 -1
  43. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy.egg-info/SOURCES.txt +30 -0
  44. s3dgraphy-1.6.0.dev16/tests/test_asset_dtc_protocol.py +209 -0
  45. s3dgraphy-1.6.0.dev16/tests/test_consumer_drift.py +99 -0
  46. s3dgraphy-1.6.0.dev16/tests/test_contract.py +399 -0
  47. s3dgraphy-1.6.0.dev16/tests/test_contract_consumer.py +491 -0
  48. s3dgraphy-1.6.0.dev16/tests/test_dtc_corpus.py +291 -0
  49. s3dgraphy-1.6.0.dev16/tests/test_dtc_ingest.py +388 -0
  50. s3dgraphy-1.6.0.dev16/tests/test_ipynb_exporter.py +141 -0
  51. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_latex_exporter.py +55 -7
  52. s3dgraphy-1.6.0.dev16/tests/test_mapping_authoring.py +483 -0
  53. s3dgraphy-1.6.0.dev16/tests/test_narrative_figures.py +371 -0
  54. s3dgraphy-1.6.0.dev16/tests/test_narrative_query.py +221 -0
  55. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_narrative_scaffolder.py +37 -7
  56. s3dgraphy-1.6.0.dev16/tests/test_shelf_role_uri_table.py +443 -0
  57. s3dgraphy-1.6.0.dev16/tests/test_store_backed_geometry.py +203 -0
  58. s3dgraphy-1.6.0.dev16/tests/test_wheel_drift.py +184 -0
  59. s3dgraphy-1.6.0.dev14/src/s3dgraphy/dtc/__init__.py +0 -34
  60. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/LICENSE +0 -0
  61. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/MANIFEST.in +0 -0
  62. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/README.md +0 -0
  63. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/setup.cfg +0 -0
  64. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/acquisition_descriptor.schema.json +0 -0
  65. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/acquisition_mappings/ercolano.json +0 -0
  66. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/acquisition_mappings/fs.json +0 -0
  67. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/datamodel_translations.json +0 -0
  68. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/em.ttl +0 -0
  69. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/em_document_types.json +0 -0
  70. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/em_extractor_types.json +0 -0
  71. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/em_palette_icons.json +0 -0
  72. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/em_qualia_types.json +0 -0
  73. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/em_qualia_types_additions.json +0 -0
  74. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/hdto_extension.ttl +0 -0
  75. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/new_qualia_template.json +0 -0
  76. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/node_registry.generated.json +0 -0
  77. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/outdated_s3dgraphy.ttl +0 -0
  78. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/outdated_s3dgraphy_nomapping.ttl +0 -0
  79. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/s3Dgraphy_connections_datamodel.json.v155.bak +0 -0
  80. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/s3Dgraphy_node_datamodel.json +0 -0
  81. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/ActivityNodeGroup.svg +0 -0
  82. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.png +0 -0
  83. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/EMNarrative.svg +0 -0
  84. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/EpochNode.svg +0 -0
  85. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/ParadataNodeGroup.svg +0 -0
  86. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/RSF.png +0 -0
  87. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/RSF.svg +0 -0
  88. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/SE.svg +0 -0
  89. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/SE_old.png +0 -0
  90. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/SE_old.svg +0 -0
  91. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/SF.png +0 -0
  92. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/SF.svg +0 -0
  93. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/TSU.png +0 -0
  94. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/US.png +0 -0
  95. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/US.svg +0 -0
  96. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/USD.png +0 -0
  97. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/USD.svg +0 -0
  98. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/USVn.png +0 -0
  99. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/USVn.svg +0 -0
  100. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/USVs.png +0 -0
  101. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/USVs.svg +0 -0
  102. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/UTR.svg +0 -0
  103. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/VSF.png +0 -0
  104. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/VSF.svg +0 -0
  105. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/author.png +0 -0
  106. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/author.svg +0 -0
  107. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/author_ai.png +0 -0
  108. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/combiner.png +0 -0
  109. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/combiner.svg +0 -0
  110. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/continuity.png +0 -0
  111. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/continuity.svg +0 -0
  112. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/document.png +0 -0
  113. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/document.svg +0 -0
  114. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/00_transformation.svg +0 -0
  115. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/01_topographicnetwork.svg +0 -0
  116. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/02_pointcloud.svg +0 -0
  117. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/03_mesh.svg +0 -0
  118. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/04_points.svg +0 -0
  119. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/05_lines.svg +0 -0
  120. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/06_polygons.svg +0 -0
  121. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/07_DEM.svg +0 -0
  122. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/08_ortophoto.svg +0 -0
  123. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/09_photos.svg +0 -0
  124. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/dtc/10_laserscanner.svg +0 -0
  125. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/embargo.png +0 -0
  126. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/extractor.png +0 -0
  127. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/extractor.svg +0 -0
  128. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/generic_node.svg +0 -0
  129. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/geo_position.svg +0 -0
  130. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/license.png +0 -0
  131. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/link.svg +0 -0
  132. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/narrative.png +0 -0
  133. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/play.svg +0 -0
  134. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/property.png +0 -0
  135. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/property.svg +0 -0
  136. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/representation_model.svg +0 -0
  137. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/representation_model_doc.svg +0 -0
  138. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/representation_model_sf.svg +0 -0
  139. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/semantic_shape.svg +0 -0
  140. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/serSU.png +0 -0
  141. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/serSU.svg +0 -0
  142. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/serUSD.png +0 -0
  143. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/serUSV.png +0 -0
  144. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/serUSVn.svg +0 -0
  145. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/2D/serUSVs.svg +0 -0
  146. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/RSF.glb +0 -0
  147. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/SF.glb +0 -0
  148. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/TSU.glb +0 -0
  149. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/US.glb +0 -0
  150. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/USD.glb +0 -0
  151. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/USVn.glb +0 -0
  152. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/USVs.glb +0 -0
  153. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/VSF.glb +0 -0
  154. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/combiner.glb +0 -0
  155. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/continuity.glb +0 -0
  156. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/document.glb +0 -0
  157. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/extractor.glb +0 -0
  158. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/property.glb +0 -0
  159. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/serSU.glb +0 -0
  160. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/serUSD.glb +0 -0
  161. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/JSON_config/src/3D/serUSV.glb +0 -0
  162. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/annotation/__init__.py +0 -0
  163. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/annotation/paradata.py +0 -0
  164. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/__init__.py +0 -0
  165. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/resolver.py +0 -0
  166. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/snapshots/LICENSE +0 -0
  167. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/snapshots/chronontology.jsonld +0 -0
  168. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/snapshots/getty_aat.jsonld +0 -0
  169. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/snapshots/getty_tgn.jsonld +0 -0
  170. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/snapshots/periodo.jsonld +0 -0
  171. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/authorities/snapshots/provenance.json +0 -0
  172. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/classification.py +0 -0
  173. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/crdt.py +0 -0
  174. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/data/StratiMiner_Extraction_Prompt.md +0 -0
  175. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/diagnostics.py +0 -0
  176. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/dissemination.py +0 -0
  177. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/dtc/residency.py +0 -0
  178. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/edges/__init__.py +0 -0
  179. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/edges/connection_resolver.py +0 -0
  180. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/edges/connections_loader.py +0 -0
  181. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/edges/edge.py +0 -0
  182. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/editorial.py +0 -0
  183. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/__init__.py +0 -0
  184. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/docx_exporter.py +0 -0
  185. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/emjson_exporter.py +0 -0
  186. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/__init__.py +0 -0
  187. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/canvas_generator.py +0 -0
  188. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/edge_generator.py +0 -0
  189. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/epoch_generator.py +0 -0
  190. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/graphml_exporter.py +0 -0
  191. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/graphml_patcher.py +0 -0
  192. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/group_node_generator.py +0 -0
  193. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/node_generator.py +0 -0
  194. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/node_registry.py +0 -0
  195. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/palette_resources.py +0 -0
  196. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/paradata_generator.py +0 -0
  197. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/paradata_image_generator.py +0 -0
  198. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/paradata_node_generators.py +0 -0
  199. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/table_node_generator.py +0 -0
  200. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/graphml/utils.py +0 -0
  201. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/json_exporter.py +0 -0
  202. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/exporter/unified_xlsx_exporter.py +0 -0
  203. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/geometry/migrate.py +0 -0
  204. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/geometry/proxy.py +0 -0
  205. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/graph.py +0 -0
  206. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/__init__.py +0 -0
  207. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/emjson_importer.py +0 -0
  208. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/import_graphml.py +0 -0
  209. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/mapped_xlsx_importer.py +0 -0
  210. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/pyarchinit_importer.py +0 -0
  211. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/qualia_importer.py +0 -0
  212. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/rdf_importer.py +0 -0
  213. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/source_text.py +0 -0
  214. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/unified_xlsx_importer.py +0 -0
  215. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/importer/xlsx_importer.py +0 -0
  216. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/indices.py +0 -0
  217. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/__init__.py +0 -0
  218. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/emdb/generic_specialfind_mapping.json +0 -0
  219. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/emdb/site_properties_mapping.json +0 -0
  220. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/emdb/usm_mapping.json +0 -0
  221. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/generic/excel_to_graphml_mapping.json +0 -0
  222. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/pyarchinit/pyarchinit_us_mapping.json +0 -0
  223. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/registry.py +0 -0
  224. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/source_list/source_list_mapping.json +0 -0
  225. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/template_emdb_mapping.json +0 -0
  226. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/mappings/template_pyarchinit_mapping.json +0 -0
  227. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/merge/__init__.py +0 -0
  228. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/merge/graph_merger.py +0 -0
  229. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/multigraph/__init__.py +0 -0
  230. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/multigraph/multigraph.py +0 -0
  231. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/narrative/__init__.py +0 -0
  232. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/narrative/generation.py +0 -0
  233. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/narrative/registry.py +0 -0
  234. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/__init__.py +0 -0
  235. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/annotation_region_node.py +0 -0
  236. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/author_node.py +0 -0
  237. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/base_node.py +0 -0
  238. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/combiner_node.py +0 -0
  239. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/document_node.py +0 -0
  240. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/dtc_acquisition_node.py +0 -0
  241. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/dtc_node.py +0 -0
  242. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/dtc_process_node.py +0 -0
  243. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/embargo_node.py +0 -0
  244. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/epoch_node.py +0 -0
  245. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/extractor_node.py +0 -0
  246. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/geo_position_node.py +0 -0
  247. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/graph_node.py +0 -0
  248. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/group_node.py +0 -0
  249. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/hdt_node.py +0 -0
  250. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/heritage_entity_node.py +0 -0
  251. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/license_node.py +0 -0
  252. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/narrative_node.py +0 -0
  253. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/paradata_node.py +0 -0
  254. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/project_node.py +0 -0
  255. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/property_node.py +0 -0
  256. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/representation_node.py +0 -0
  257. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/semantic_shape_node.py +0 -0
  258. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/stratigraphic_node.py +0 -0
  259. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/nodes/study_node.py +0 -0
  260. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/resolvers/__init__.py +0 -0
  261. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/resolvers/builtin_rules.py +0 -0
  262. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/resolvers/property_resolver.py +0 -0
  263. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/resources/__init__.py +0 -0
  264. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/resources/fs_backend.py +0 -0
  265. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/resources/minio_backend.py +0 -0
  266. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/resources/resolver.py +0 -0
  267. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/__init__.py +0 -0
  268. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/_db_handle.py +0 -0
  269. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/_legacy_paradata_svgs.py +0 -0
  270. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/_workspace.py +0 -0
  271. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/conflict_resolver.py +0 -0
  272. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/edge_registry.py +0 -0
  273. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/graph_ingestor.py +0 -0
  274. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/graph_projector.py +0 -0
  275. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/graphml_writer.py +0 -0
  276. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/group_projector.py +0 -0
  277. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/group_store.py +0 -0
  278. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/ingest_result.py +0 -0
  279. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/paradata_store.py +0 -0
  280. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/pyarchinit_pg_importer.py +0 -0
  281. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/rapporti.py +0 -0
  282. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/uuid7.py +0 -0
  283. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/vocab_provider_core.py +0 -0
  284. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/vocab_types.py +0 -0
  285. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/yed_classifier.py +0 -0
  286. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/yed_detector.py +0 -0
  287. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/yed_group_walker.py +0 -0
  288. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/yed_import_pipeline.py +0 -0
  289. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/yed_rapporti_policy.py +0 -0
  290. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/sync/yed_table_parser.py +0 -0
  291. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/templates/em_data_template.xlsx +0 -0
  292. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/templates/em_palette_template.graphml +0 -0
  293. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/temporal/__init__.py +0 -0
  294. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/temporal/inference_engine.py +0 -0
  295. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/tools/__init__.py +0 -0
  296. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/tools/datamodel_i18n.py +0 -0
  297. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/tools/sync_node_datamodel.py +0 -0
  298. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/transforms/__init__.py +0 -0
  299. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/transforms/aux_tracking.py +0 -0
  300. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/transforms/compact.py +0 -0
  301. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/transforms/materialize_continuity.py +0 -0
  302. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/utils/__init__.py +0 -0
  303. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/utils/utils.py +0 -0
  304. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy/utils/visual_layout.py +0 -0
  305. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy.egg-info/dependency_links.txt +0 -0
  306. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy.egg-info/requires.txt +0 -0
  307. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/src/s3dgraphy.egg-info/top_level.txt +0 -0
  308. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_acquisition.py +0 -0
  309. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_acquisition_fs.py +0 -0
  310. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_api_surface.py +0 -0
  311. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_authority_projection.py +0 -0
  312. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_authority_resolver.py +0 -0
  313. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_canonical_document_rename.py +0 -0
  314. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_canvas_metadata_import.py +0 -0
  315. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_composite_node_name.py +0 -0
  316. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_connection_resolver.py +0 -0
  317. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_container.py +0 -0
  318. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_convert_command.py +0 -0
  319. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_crdt.py +0 -0
  320. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_datamodel_i18n.py +0 -0
  321. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_deterministic_ids.py +0 -0
  322. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_dissemination_tombstones.py +0 -0
  323. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_dtc_projection.py +0 -0
  324. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_dtc_residency.py +0 -0
  325. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_editorial.py +0 -0
  326. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_emjson_roundtrip.py +0 -0
  327. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_emjson_schema_version.py +0 -0
  328. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_epoch_undated_import.py +0 -0
  329. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_explicit_node_type_marker.py +0 -0
  330. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_filtered_import.py +0 -0
  331. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_fs_backend.py +0 -0
  332. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_functional_units.py +0 -0
  333. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_georeference_scene.py +0 -0
  334. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_graph_scope_migration.py +0 -0
  335. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_hdto_projection.py +0 -0
  336. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_header_key_aliases.py +0 -0
  337. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_iiif.py +0 -0
  338. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_importer_edge_hygiene.py +0 -0
  339. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_lossless_roundtrip.py +0 -0
  340. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_material_color.py +0 -0
  341. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_merge_conflicts.py +0 -0
  342. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_migrate_legacy_proxy.py +0 -0
  343. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_minio_backend.py +0 -0
  344. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_narrative_authorship.py +0 -0
  345. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_narrative_bake_docx.py +0 -0
  346. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_narrative_generation.py +0 -0
  347. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_narrative_node.py +0 -0
  348. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_node_datamodel_registry.py +0 -0
  349. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_pg_importer.py +0 -0
  350. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_promotion.py +0 -0
  351. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_pyarchinit_tier2.py +0 -0
  352. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_rdf_roundtrip.py +0 -0
  353. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_recompute_warnings.py +0 -0
  354. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_reproject.py +0 -0
  355. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_resource_layer.py +0 -0
  356. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_shelf.py +0 -0
  357. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_shelf_facets.py +0 -0
  358. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_shelf_hatting.py +0 -0
  359. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_source_list_mapping.py +0 -0
  360. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_source_text.py +0 -0
  361. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_stratiminer_api.py +0 -0
  362. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_study_metadata.py +0 -0
  363. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_ttl_roundtrip.py +0 -0
  364. {s3dgraphy-1.6.0.dev14 → s3dgraphy-1.6.0.dev16}/tests/test_xlsx_importer_graph_init.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: s3dgraphy
3
- Version: 1.6.0.dev14
3
+ Version: 1.6.0.dev16
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>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "s3dgraphy"
7
- version = "1.6.0.dev14"
7
+ version = "1.6.0.dev16"
8
8
  description = "3D Stratigraphic Graph Management Library for archaeological and heritage applications"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.9"
@@ -0,0 +1,22 @@
1
+ {
2
+ "mapping_version": "0",
3
+ "source": "uri",
4
+ "tier": 0,
5
+ "_comment": "Per-source acquisition mapping for a BARE URI — the asset nobody downloads. Somebody pastes a link (a IIIF manifest, a Zenodo record, a Sketchfab model, a colleague's WebDAV folder) and what enters the shelf is the URI plus the protocol you reach it through: asset.access = {mode: subscribe|open, endpoint?}. NO BYTES ARE COPIED and no object store is touched — that is the whole point of this mapping, and the difference from fs.json, which acquires a local file. Build the raw record with s3dgraphy.acquisition.uri_record(uri, protocol=..., access=...), then apply_mapping('uri', record). The acquisition method is uri_reference: the URI is what was acquired, not the object, and calling it 'download' would record a retrieval that never happened.",
6
+ "descriptor_defaults": {
7
+ "schema_version": "0",
8
+ "source": {"repo_id": "uri", "capabilities": []},
9
+ "acquisition": {"agent": "emtools-shelf@0", "method": "uri_reference"},
10
+ "rights": {"license": "unknown"}
11
+ },
12
+ "field_map": {
13
+ "asset.ref": "uri",
14
+ "asset.name": "name",
15
+ "asset.media_type": "media_type",
16
+ "asset.access": "access",
17
+ "asset.protocol": "protocol",
18
+ "source.repo_id": "repo_id",
19
+ "source.record_id": "record_id",
20
+ "source.record_url": "record_url"
21
+ }
22
+ }
@@ -840,7 +840,8 @@
840
840
  "acquisition": {
841
841
  "download": { "label": "Download", "glyph": null, "description": "Retrieval of a digital object from a remote (opaque, Tier-0) repository." },
842
842
  "ingest": { "label": "Ingest", "glyph": null, "description": "Generic ingestion of a digital object into the study." },
843
- "local_import": { "label": "Local import", "glyph": null, "description": "Acquisition from the local file system (project-folder search) — the local analog of remote acquisition." }
843
+ "local_import": { "label": "Local import", "glyph": null, "description": "Acquisition from the local file system (project-folder search) — the local analog of remote acquisition." },
844
+ "uri_reference": { "label": "URI reference", "glyph": null, "description": "The URI was acquired, not the object: the resource stays where it is and is reached through its own access protocol (an open link, or one you subscribe to). No bytes were copied — calling this a download would record a retrieval that never happened." }
844
845
  },
845
846
  "output": {
846
847
  "pointcloud": { "label": "Point cloud", "glyph": "02_pointcloud", "description": "Produced point cloud." },
@@ -1,6 +1,6 @@
1
1
  {
2
- "s3Dgraphy_connections_model_version": "1.6.10",
3
- "description": "s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.8 (MIG1-A): graph-scope rights metadata become first-class nodes (DP-65). is_in_paradata_nodegroup.source += AuthorNode/LicenseNode/EmbargoNode and has_paradata_nodegroup.source += GraphNode, so the graph-self node (GraphNode) owns a graph-scope ParadataNodeGroup whose members are the AuthorNode/LicenseNode/EmbargoNode (+ the DP-65 GeoPositionNode shift), replacing the legacy graph.data['author_name'/'license'/'embargo'] fields. The Data Funnel canvas tier now reads these member nodes (one reader per scope); a one-shot load-time migration materialises the legacy fields into nodes. v1.6.7 (BUGFIX-CONN3): closes the two silent follow-ups of CONN2. has_documentation.source gains PropertyNode (judicious widening): the honest reading of a legacy yEd dashed PropertyNode→Document connector is P70i_is_documented_in ('the property is documented in this source'), NOT has_visual_reference (which CONN2 moved to PropertyNode→ResourceNode). The import heuristic (import_graphml.enhance_edge_type) now routes PropertyNode→Document to has_documentation and the rarer CombinerNode/ParadataNode→Document to generic_connection+warning (a combiner aggregates extractors and cites no document; the DTC chain is NOT synthesised at import). Shelf: hat_as_document no longer offers has_visual_reference (a Document attaches via has_documentation/extracted_from); a new hat_as_visual_resource attaches a ResourceNode image via has_visual_reference from a PropertyNode — the correct home after CONN2. No illegal edge is produced or expected. v1.6.6 (BUGFIX-CONN2): closes the two open domain questions on has_visual_reference (E.D. 2026-08-05). SOURCE narrowed to exactly [PropertyNode]: only a property (an asserted quale) is what a visual reference illustrates; the generic ParadataNode entry is dropped, which — because ExtractorNode, CombinerNode and DocumentNode are all subclasses of ParadataNode — now excludes them by class hierarchy (a PropertyNode is neither a sibling nor a parent of the others). The extractor/combiner denied_edges from v1.6.5 are therefore REDUNDANT for this edge but are KEPT as a defensive guard (they still bite if the source is ever broadened back to ParadataNode). TARGET changed from [DocumentNode] to [ResourceNode]: the oddity was that a visual reference pointed at a source-document (E31) rather than at a visual resource. It now points at the resource-layer image node (ResourceNode = E73 Information Object / ExternalResourceReference — the same P67 hinge RM/RMDoc use via has_linked_resource), keeping DocumentNode = fonte. CIDOC stays P138i_has_representation with the target co-typed E36 Visual Item: E36 is a subclass of E73, so co-typing a ResourceNode as E36 is range-consistent (it was NOT, strictly, for an E31 Document). FOLLOW-UPS flagged for E.D. (see end-of report): (a) import_graphml.enhance_edge_type still hardcodes PropertyNode/Combiner/Paradata→DocumentNode ⇒ has_visual_reference (legacy yEd heuristic, now produces an edge this datamodel refuses) — needs a domain decision on what legacy paradata→document edges become; (b) shelf.hat_as_document lists has_visual_reference among the Document-attach edges — it can no longer validate (target is ResourceNode), so a paradata attach silently no longer attaches; a hat_as_visual_resource(ResourceNode)+has_visual_reference path is the proper home. v1.6.5 (BUGFIX-CONN): has_visual_reference is no longer offered FROM an ExtractorNode or a CombinerNode. An extractor toward a document expresses ONLY extracted_from (its relation to the source is the extraction, not an illustration); a combiner aggregates extractors and illustrates nothing. Because ExtractorNode, CombinerNode and PropertyNode are all subclasses of ParadataNode, and has_visual_reference.source lists ParadataNode, simply dropping the two subtypes from the source list would not exclude them (they still match via the parent class). So this is expressed with node_type_restrictions (keyed by RUNTIME node_type, like USNt) using a new denied_edges blacklist (the mirror of allowed_edges): extractor/combiner deny has_visual_reference. PropertyNode and any other legitimate ParadataNode source keep it unchanged. OPEN domain question for E.D.: which paradata node-types may legitimately have a visual reference (today source = PropertyNode/ExtractorNode/CombinerNode/ParadataNode) — extractor/combiner removed; the rest left as-is, not invented. v1.6.1: has_paradata_nodegroup source extended to include EpochNode — an epoch can now own a ParadataNodeGroup holding its temporal-definition properties (e.g. absolute_time_start/end as PropertyNodes with paradata provenance), mirroring how a StratigraphicNode carries its paradata group. v1.6.0 (paired with node datamodel v1.6.0) introduces: bug fix on is_in_paradata_nodegroup (typo 'ProperrtyNOde' → 'PropertyNode'); semantic fix on has_documentation (P104_is_subject_to → P70i_is_documented_in — P104 means 'subject to a legal right', not 'has documentation'); deprecation of has_timebranch as duplicate of is_in_timebranch (the latter is the canonical one — used by import_graphml.py and graphml_patcher.py; the former exists only in config JSON); component list aligned with node datamodel (HDT-O, PROV-O added). HDT-O containment properties (hdto:contains_HDT, hdto:contains_SU, hdto:isPrimary) and physical-relation discriminator subproperties (em:abuts, em:cuts, em:fills, em:overlies, em:bonded_to, em:equals as rdfs:subPropertyOf crmarchaeo:AP11_has_physical_relation) to be added in v1.6.1. v1.5.3 introduced canonical/reverse directionality with verb-based labels for clear socket identification in node editors. v1.5.4 added 'has_visual_reference' edge type. v1.5.5 added 'is_in_location' edge type with context-sensitive CIDOC mapping (P53 for node→location, P89 for the recursive location→location hierarchy) and an optional 'is_primary' boolean attribute (s3d:isPrimary, proposed). v1.6.3: added node_type_restrictions — a per-node-type narrowing of the class-level edge rules (POL5): USN (the NEUTRAL stratigraphic unit, a risparmio) takes is_after/is_before and nothing else, because a void cannot cut, fill, abut or bond. v1.6.4 (POL6): the same restriction, moved to USNt — the tokens went back to their conventional meanings, USN = US negativa (all relations, it is a unit of the sequence) and USNt = US neutra (sequence only).",
2
+ "s3Dgraphy_connections_model_version": "1.6.11",
3
+ "description": "s3Dgraphy connections datamodel including edge types with CIDOC-CRM mappings. v1.6.11 (batch ingestion, 2026-08-17): two widenings for bulk assets. has_author.source DTCProcessNode -> DTCNode, so an ACQUISITION event (D12) can carry the author of a whole lot; dtc_had_input.target += DTCNode, so a DECLARED derivation can name a whole acquisition as its input (one input, not 500 edges) — that case projects as prov:wasInformedBy, not prov:used/L10, which range over digital objects and would be wrong for an event. v1.6.8 (MIG1-A): graph-scope rights metadata become first-class nodes (DP-65). is_in_paradata_nodegroup.source += AuthorNode/LicenseNode/EmbargoNode and has_paradata_nodegroup.source += GraphNode, so the graph-self node (GraphNode) owns a graph-scope ParadataNodeGroup whose members are the AuthorNode/LicenseNode/EmbargoNode (+ the DP-65 GeoPositionNode shift), replacing the legacy graph.data['author_name'/'license'/'embargo'] fields. The Data Funnel canvas tier now reads these member nodes (one reader per scope); a one-shot load-time migration materialises the legacy fields into nodes. v1.6.7 (BUGFIX-CONN3): closes the two silent follow-ups of CONN2. has_documentation.source gains PropertyNode (judicious widening): the honest reading of a legacy yEd dashed PropertyNode→Document connector is P70i_is_documented_in ('the property is documented in this source'), NOT has_visual_reference (which CONN2 moved to PropertyNode→ResourceNode). The import heuristic (import_graphml.enhance_edge_type) now routes PropertyNode→Document to has_documentation and the rarer CombinerNode/ParadataNode→Document to generic_connection+warning (a combiner aggregates extractors and cites no document; the DTC chain is NOT synthesised at import). Shelf: hat_as_document no longer offers has_visual_reference (a Document attaches via has_documentation/extracted_from); a new hat_as_visual_resource attaches a ResourceNode image via has_visual_reference from a PropertyNode — the correct home after CONN2. No illegal edge is produced or expected. v1.6.6 (BUGFIX-CONN2): closes the two open domain questions on has_visual_reference (E.D. 2026-08-05). SOURCE narrowed to exactly [PropertyNode]: only a property (an asserted quale) is what a visual reference illustrates; the generic ParadataNode entry is dropped, which — because ExtractorNode, CombinerNode and DocumentNode are all subclasses of ParadataNode — now excludes them by class hierarchy (a PropertyNode is neither a sibling nor a parent of the others). The extractor/combiner denied_edges from v1.6.5 are therefore REDUNDANT for this edge but are KEPT as a defensive guard (they still bite if the source is ever broadened back to ParadataNode). TARGET changed from [DocumentNode] to [ResourceNode]: the oddity was that a visual reference pointed at a source-document (E31) rather than at a visual resource. It now points at the resource-layer image node (ResourceNode = E73 Information Object / ExternalResourceReference — the same P67 hinge RM/RMDoc use via has_linked_resource), keeping DocumentNode = fonte. CIDOC stays P138i_has_representation with the target co-typed E36 Visual Item: E36 is a subclass of E73, so co-typing a ResourceNode as E36 is range-consistent (it was NOT, strictly, for an E31 Document). FOLLOW-UPS flagged for E.D. (see end-of report): (a) import_graphml.enhance_edge_type still hardcodes PropertyNode/Combiner/Paradata→DocumentNode ⇒ has_visual_reference (legacy yEd heuristic, now produces an edge this datamodel refuses) — needs a domain decision on what legacy paradata→document edges become; (b) shelf.hat_as_document lists has_visual_reference among the Document-attach edges — it can no longer validate (target is ResourceNode), so a paradata attach silently no longer attaches; a hat_as_visual_resource(ResourceNode)+has_visual_reference path is the proper home. v1.6.5 (BUGFIX-CONN): has_visual_reference is no longer offered FROM an ExtractorNode or a CombinerNode. An extractor toward a document expresses ONLY extracted_from (its relation to the source is the extraction, not an illustration); a combiner aggregates extractors and illustrates nothing. Because ExtractorNode, CombinerNode and PropertyNode are all subclasses of ParadataNode, and has_visual_reference.source lists ParadataNode, simply dropping the two subtypes from the source list would not exclude them (they still match via the parent class). So this is expressed with node_type_restrictions (keyed by RUNTIME node_type, like USNt) using a new denied_edges blacklist (the mirror of allowed_edges): extractor/combiner deny has_visual_reference. PropertyNode and any other legitimate ParadataNode source keep it unchanged. OPEN domain question for E.D.: which paradata node-types may legitimately have a visual reference (today source = PropertyNode/ExtractorNode/CombinerNode/ParadataNode) — extractor/combiner removed; the rest left as-is, not invented. v1.6.1: has_paradata_nodegroup source extended to include EpochNode — an epoch can now own a ParadataNodeGroup holding its temporal-definition properties (e.g. absolute_time_start/end as PropertyNodes with paradata provenance), mirroring how a StratigraphicNode carries its paradata group. v1.6.0 (paired with node datamodel v1.6.0) introduces: bug fix on is_in_paradata_nodegroup (typo 'ProperrtyNOde' → 'PropertyNode'); semantic fix on has_documentation (P104_is_subject_to → P70i_is_documented_in — P104 means 'subject to a legal right', not 'has documentation'); deprecation of has_timebranch as duplicate of is_in_timebranch (the latter is the canonical one — used by import_graphml.py and graphml_patcher.py; the former exists only in config JSON); component list aligned with node datamodel (HDT-O, PROV-O added). HDT-O containment properties (hdto:contains_HDT, hdto:contains_SU, hdto:isPrimary) and physical-relation discriminator subproperties (em:abuts, em:cuts, em:fills, em:overlies, em:bonded_to, em:equals as rdfs:subPropertyOf crmarchaeo:AP11_has_physical_relation) to be added in v1.6.1. v1.5.3 introduced canonical/reverse directionality with verb-based labels for clear socket identification in node editors. v1.5.4 added 'has_visual_reference' edge type. v1.5.5 added 'is_in_location' edge type with context-sensitive CIDOC mapping (P53 for node→location, P89 for the recursive location→location hierarchy) and an optional 'is_primary' boolean attribute (s3d:isPrimary, proposed). v1.6.3: added node_type_restrictions — a per-node-type narrowing of the class-level edge rules (POL5): USN (the NEUTRAL stratigraphic unit, a risparmio) takes is_after/is_before and nothing else, because a void cannot cut, fill, abut or bond. v1.6.4 (POL6): the same restriction, moved to USNt — the tokens went back to their conventional meanings, USN = US negativa (all relations, it is a unit of the sequence) and USNt = US neutra (sequence only).",
4
4
  "components": [
5
5
  "CIDOC-CRM",
6
6
  "CRMarchaeo",
@@ -682,7 +682,7 @@
682
682
  "has_author": {
683
683
  "name": "has_author",
684
684
  "label": "Has author",
685
- "description": "Represents the connection of a node with its author. Target can be an AuthorNode (human) or AuthorAINode (AI-assisted authoring). Source covers the full range of EM node types so that the resolver can walk from any scope level down to the author.",
685
+ "description": "Represents the connection of a node with its author. Target can be an AuthorNode (human) or AuthorAINode (AI-assisted authoring). Source covers the full range of EM node types so that the resolver can walk from any scope level down to the author. SOURCE WIDENED 2026-08-16 (asset DTC protocol): ResourceNode joins the list. 'Who took this photograph' is exactly prov:wasAttributedTo on an information object, and the mapping is already domain-neutral — the omission was an oversight of scope, not a semantic boundary: the list exists so the resolver can walk from ANY scope down to the author, and a resource is a scope somebody attributes. It is also the shape the asset enrichment protocol needs, where the AUTHOR of the bytes (possibly absent, possibly dead) is declared by an ATTRIBUTOR who is somebody else (s3dgraphy.rights.enrich_asset_dtc, docs/asset-dtc-protocol.md).",
686
686
  "reverse": {
687
687
  "name": "is_author_of",
688
688
  "label": "Is author of"
@@ -705,13 +705,15 @@
705
705
  "CombinerNode",
706
706
  "PropertyNode",
707
707
  "EpochNode",
708
- "DTCProcessNode",
709
- "NarrativeNode"
708
+ "DTCNode",
709
+ "NarrativeNode",
710
+ "ResourceNode"
710
711
  ],
711
712
  "target": [
712
713
  "AuthorNode",
713
714
  "AuthorAINode"
714
- ]
715
+ ],
716
+ "_note": "SOURCE WIDENED 2026-08-17 (batch ingestion): DTCProcessNode -> DTCNode, the DTC event BASE class, so an ACQUISITION (DTCAcquisitionNode, D12) can carry an author too — the same fix already applied to dtc_had_input/dtc_had_output for the same reason. A campaign of four hundred photographs is attributed ONCE, on the event that brought them in, and the reader (s3dgraphy.rights) already walks the chain to find it; without this the batch attribution silently degraded to generic_connection and the licence became unreadable."
715
717
  }
716
718
  },
717
719
  "has_geoposition": {
@@ -1320,15 +1322,16 @@
1320
1322
  "cidoc_extension": "CRMdig",
1321
1323
  "extension_mapping": "prov:used",
1322
1324
  "extension_name": "PROV-O",
1323
- "rationale": "crmdig:L10_had_input (D7 Digital Machine Event -> input digital object). Dual-emitted with prov:used (Activity used Entity) — same direction (Process -> input Resource) — so CRMdig and PROV-O readers both see the acquisition consumption. Target is the Resource (ResourceNode); the input is a resource, symmetric to the output."
1325
+ "rationale": "crmdig:L10_had_input (D7 Digital Machine Event -> input digital object). Dual-emitted with prov:used (Activity used Entity) — same direction (Process -> input Resource) — so CRMdig and PROV-O readers both see the acquisition consumption. Target is the Resource (ResourceNode); the input is a resource, symmetric to the output. TARGET WIDENED 2026-08-17: when the target is a DTC EVENT (an acquisition consumed as a whole lot) neither L10_had_input nor prov:used holds — both range over digital OBJECTS, and an event is not one. That case projects as prov:wasInformedBy (activity -> activity), applied in the RDF exporter (_serialize_edge); the property-graph edge stays the one edge type, because 'this output came from that input' is one sentence whether the input is a file or a campaign."
1324
1326
  },
1325
1327
  "allowed_connections": {
1326
- "_note": "Source is the DTC event BASE class: both chunk types link to their Resources — DTCProcessNode (genesis, D7) and DTCAcquisitionNode (acquisition/ingestion, D12), per the dtc_nodes section note. Listing only DTCProcessNode used to pass by accident, because the old validator could not resolve the name and fell back to accepting anything.",
1328
+ "_note": "Source is the DTC event BASE class: both chunk types link to their Resources — DTCProcessNode (genesis, D7) and DTCAcquisitionNode (acquisition/ingestion, D12), per the dtc_nodes section note. Listing only DTCProcessNode used to pass by accident, because the old validator could not resolve the name and fell back to accepting anything. TARGET 2026-08-17: DTCNode joins ResourceNode so a DECLARED derivation can name a whole ACQUISITION as its input — the serial node exists precisely so a campaign of 500 photographs is one input and not 500 edges. The RDF projection distinguishes the two cases (see mapping.rationale); dtc_derived_from stays resource -> resource, because a shortcut between files cannot be written to an event, and that is reported rather than faked.",
1327
1329
  "source": [
1328
1330
  "DTCNode"
1329
1331
  ],
1330
1332
  "target": [
1331
- "ResourceNode"
1333
+ "ResourceNode",
1334
+ "DTCNode"
1332
1335
  ]
1333
1336
  }
1334
1337
  },
@@ -1402,4 +1405,4 @@
1402
1405
  }
1403
1406
  }
1404
1407
  }
1405
- }
1408
+ }
@@ -1,4 +1,4 @@
1
- __version__ = "1.6.0.dev14"
1
+ __version__ = "1.6.0.dev16"
2
2
  __datamodel_version__ = "1.5.5" # s3Dgraphy connections datamodel version
3
3
 
4
4
  # s3Dgraphy/__init__.py
@@ -16,7 +16,8 @@ from .descriptor import (
16
16
  AcquisitionError,
17
17
  schema,
18
18
  )
19
- from .mapping import apply_mapping, available_mappings, fs_record, load_mapping
19
+ from .mapping import (ACCESS_MODES, apply_mapping, available_mappings,
20
+ fs_record, load_mapping, uri_record)
20
21
  from .acquire import acquire_from_descriptor
21
22
 
22
23
  __all__ = [
@@ -28,5 +29,8 @@ __all__ = [
28
29
  "apply_mapping",
29
30
  "available_mappings",
30
31
  "fs_record",
32
+ # the asset nobody downloads: a URI plus how you reach it
33
+ "uri_record",
34
+ "ACCESS_MODES",
31
35
  "acquire_from_descriptor",
32
36
  ]
@@ -92,9 +92,19 @@ def acquire_from_descriptor(descriptor: Any, shelf: Any = None
92
92
  name = desc.asset.get("name") or (ref.rstrip("/").rsplit("/", 1)[-1] if ref else rid[:8])
93
93
  origin = desc.origin()
94
94
 
95
- # 1) Resource on the shelf (reuse-not-duplicate; origin preserved)
95
+ # 1) Resource on the shelf (reuse-not-duplicate; origin preserved).
96
+ #
97
+ # `media_type` / `size` / `access` are written only when the descriptor
98
+ # carried them — the fs mapping knows a file's size, a bare URI does not, and
99
+ # a resource that never said its size must not start claiming zero. They are
100
+ # here because they are what the shelf TABLE shows: without them the column
101
+ # would be empty for every entry and a reader would think the shelf lost it.
96
102
  entry = add_to_shelf(shelf, ref, resource_id=rid, name=name,
97
- resource_type=_resource_type(desc), origin=origin)
103
+ resource_type=_resource_type(desc), origin=origin,
104
+ media_type=desc.asset.get("media_type") or None,
105
+ size=desc.asset.get("size") or None,
106
+ access=origin.get("access"),
107
+ role=desc.asset.get("role") or None)
98
108
 
99
109
  # 2) acquisition event — a distinct DTC event type (crmdig:D12), literals for
100
110
  # the opaque upstream source (Tier 0: no genesis sub-graph)
@@ -97,9 +97,27 @@ class AcquisitionDescriptor:
97
97
 
98
98
  def origin(self) -> Dict[str, Any]:
99
99
  """The capability/origin envelope carried onto the shelf entry (for
100
- downstream tier badges): repo + capabilities + scope."""
101
- return {
100
+ downstream tier badges): repo + capabilities + scope, and — when the
101
+ asset says so — how it is REACHED.
102
+
103
+ ``access`` rides in the origin rather than in a channel of its own
104
+ because that is exactly what it is: a fact about where this resource came
105
+ from and how to get back to it. A URI-only entry has no bytes here, so
106
+ its origin is the only place that can answer "and how do I open it?".
107
+ """
108
+ out: Dict[str, Any] = {
102
109
  "repo": self.source.get("repo_id"),
103
110
  "capabilities": self.capabilities(),
104
111
  "scope": (self.payload_graph or {}).get("scope"), # None in Tier 0
105
112
  }
113
+ access = self.asset.get("access")
114
+ if access:
115
+ out["access"] = (dict(access) if isinstance(access, dict)
116
+ else {"mode": str(access)})
117
+ if self.asset.get("protocol"):
118
+ out["protocol"] = self.asset.get("protocol")
119
+ return out
120
+
121
+ def access(self) -> Optional[Dict[str, Any]]:
122
+ """``{mode, endpoint?}`` when the asset declared how it is reached."""
123
+ return self.origin().get("access")
@@ -25,7 +25,7 @@ from __future__ import annotations
25
25
  import copy
26
26
  import json
27
27
  from pathlib import Path
28
- from typing import Any, Dict
28
+ from typing import Any, Dict, Optional
29
29
 
30
30
  _MAPPINGS_DIR = (Path(__file__).resolve().parent.parent
31
31
  / "JSON_config" / "acquisition_mappings")
@@ -83,6 +83,77 @@ _FS_MEDIA_TYPES = {
83
83
  }
84
84
 
85
85
 
86
+ #: How you get to a resource you did not copy. TWO modes, because the practical
87
+ #: question a colleague asks is binary: can I click this, or do I have to ask
88
+ #: for access?
89
+ #:
90
+ #: * ``open`` — the link is freely reachable;
91
+ #: * ``subscribe`` — you subscribe/register/are granted access first (an
92
+ #: institutional repository, a shared drive, a IIIF endpoint behind a login).
93
+ #:
94
+ #: This is deliberately NOT a rights statement: `rights.license` says what you
95
+ #: may do with the object, `access.mode` says whether you can reach it at all.
96
+ #: A CC-BY image behind a login is both, and conflating them would make one of
97
+ #: the two unaskable.
98
+ ACCESS_MODES = ("open", "subscribe")
99
+
100
+
101
+ def uri_record(uri: str, *, protocol: Optional[str] = None,
102
+ access: Optional[Any] = None, name: Optional[str] = None,
103
+ media_type: Optional[str] = None,
104
+ repo_id: Optional[str] = None) -> Dict[str, Any]:
105
+ """Build a raw record for the ``uri`` mapping from a bare **URI**.
106
+
107
+ The asset nobody downloads: somebody pastes a link and what enters the shelf
108
+ is the URI plus the protocol it is reached through. **No bytes are copied**
109
+ and no object store is touched — that is the point, and the difference from
110
+ :func:`fs_record`.
111
+
112
+ ``access`` is ``{"mode": "open"|"subscribe", "endpoint": …}``, or just the
113
+ mode as a string (the common case). ``record_id`` is the URI itself, so
114
+ re-acquiring the same link lands on the same stable Resource id and the shelf
115
+ does not grow a second entry — the idempotence the fs record gets from the
116
+ absolute path.
117
+
118
+ Returns ``{uri, name, protocol, media_type, access, repo_id, record_id,
119
+ record_url}``.
120
+ """
121
+ import mimetypes
122
+ from urllib.parse import urlsplit
123
+
124
+ text = (uri or "").strip()
125
+ if not text:
126
+ raise ValueError("a URI-only entry needs a URI")
127
+ parts = urlsplit(text)
128
+ scheme = (protocol or parts.scheme or "").lower() or "http"
129
+ if isinstance(access, str):
130
+ access = {"mode": access}
131
+ access = dict(access or {})
132
+ mode = str(access.get("mode") or "open").lower()
133
+ if mode not in ACCESS_MODES:
134
+ raise ValueError(f"access.mode must be one of {list(ACCESS_MODES)}, "
135
+ f"got {access.get('mode')!r}")
136
+ access["mode"] = mode
137
+ tail = parts.path.rstrip("/").rsplit("/", 1)[-1]
138
+ guessed = media_type or (_FS_MEDIA_TYPES.get(tail.rsplit(".", 1)[-1].lower())
139
+ if "." in tail else None) \
140
+ or (mimetypes.guess_type(tail)[0] if "." in tail else None) or ""
141
+ return {
142
+ "uri": text,
143
+ # The host is the honest name when the tail is not a filename: a record
144
+ # page ends in an id, and "12345" is not what anybody is looking for.
145
+ "name": name or (tail if "." in tail else (parts.netloc or text)),
146
+ "protocol": scheme,
147
+ "media_type": guessed,
148
+ "access": access,
149
+ # …and the repo is the HOST unless told otherwise, so two links from the
150
+ # same institution group together without anybody configuring a repo.
151
+ "repo_id": repo_id or (parts.netloc or "uri"),
152
+ "record_id": text,
153
+ "record_url": text,
154
+ }
155
+
156
+
86
157
  def fs_record(path: str) -> Dict[str, Any]:
87
158
  """Build a raw FILE-SYSTEM record for the ``fs`` mapping from a local ``path``:
88
159
  ``{filename, path, record_id, record_url, size, ext, media_type}``. The local