geocase 1.0.0rc1__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 (643) hide show
  1. geocase-1.0.0rc1/.gitignore +38 -0
  2. geocase-1.0.0rc1/CHANGELOG.md +103 -0
  3. geocase-1.0.0rc1/LICENSE +21 -0
  4. geocase-1.0.0rc1/PKG-INFO +173 -0
  5. geocase-1.0.0rc1/README.md +112 -0
  6. geocase-1.0.0rc1/conftest.py +22 -0
  7. geocase-1.0.0rc1/examples/conftest.py +172 -0
  8. geocase-1.0.0rc1/pyproject.toml +142 -0
  9. geocase-1.0.0rc1/src/geocase/__init__.py +92 -0
  10. geocase-1.0.0rc1/src/geocase/api/__init__.py +68 -0
  11. geocase-1.0.0rc1/src/geocase/api/public.py +198 -0
  12. geocase-1.0.0rc1/src/geocase/api/types.py +60 -0
  13. geocase-1.0.0rc1/src/geocase/assertions/__init__.py +87 -0
  14. geocase-1.0.0rc1/src/geocase/assertions/crs.py +99 -0
  15. geocase-1.0.0rc1/src/geocase/assertions/footprint.py +102 -0
  16. geocase-1.0.0rc1/src/geocase/assertions/format_compliance.py +352 -0
  17. geocase-1.0.0rc1/src/geocase/assertions/geometry.py +124 -0
  18. geocase-1.0.0rc1/src/geocase/assertions/metadata.py +151 -0
  19. geocase-1.0.0rc1/src/geocase/assertions/raster.py +245 -0
  20. geocase-1.0.0rc1/src/geocase/assertions/topology.py +91 -0
  21. geocase-1.0.0rc1/src/geocase/cases/__init__.py +15 -0
  22. geocase-1.0.0rc1/src/geocase/cases/base.py +103 -0
  23. geocase-1.0.0rc1/src/geocase/cases/factory.py +40 -0
  24. geocase-1.0.0rc1/src/geocase/cases/netcdf.py +52 -0
  25. geocase-1.0.0rc1/src/geocase/cases/raster.py +74 -0
  26. geocase-1.0.0rc1/src/geocase/cases/vector.py +121 -0
  27. geocase-1.0.0rc1/src/geocase/catalog/__init__.py +48 -0
  28. geocase-1.0.0rc1/src/geocase/catalog/errors.py +64 -0
  29. geocase-1.0.0rc1/src/geocase/catalog/loader.py +111 -0
  30. geocase-1.0.0rc1/src/geocase/catalog/manifests.py +78 -0
  31. geocase-1.0.0rc1/src/geocase/catalog/models.py +200 -0
  32. geocase-1.0.0rc1/src/geocase/catalog/registry.py +278 -0
  33. geocase-1.0.0rc1/src/geocase/catalog/roots.py +76 -0
  34. geocase-1.0.0rc1/src/geocase/catalog/selectors.py +112 -0
  35. geocase-1.0.0rc1/src/geocase/catalog/suites/core-vector.yaml +30 -0
  36. geocase-1.0.0rc1/src/geocase/catalog/suites/crs-edge-cases.yaml +23 -0
  37. geocase-1.0.0rc1/src/geocase/catalog/suites/raster-nodata.yaml +21 -0
  38. geocase-1.0.0rc1/src/geocase/catalog/suites/vector-crs-edge.yaml +44 -0
  39. geocase-1.0.0rc1/src/geocase/catalog/suites/vector-schema-encoding.yaml +37 -0
  40. geocase-1.0.0rc1/src/geocase/catalog/suites/vector-topology.yaml +35 -0
  41. geocase-1.0.0rc1/src/geocase/catalog/suites.py +127 -0
  42. geocase-1.0.0rc1/src/geocase/data/core/netcdf/latlon_small/case.yaml +60 -0
  43. geocase-1.0.0rc1/src/geocase/data/core/netcdf/latlon_small/checksums.sha256 +1 -0
  44. geocase-1.0.0rc1/src/geocase/data/core/netcdf/latlon_small/latlon_sample.nc +0 -0
  45. geocase-1.0.0rc1/src/geocase/data/core/netcdf/latlon_small/notes.md +25 -0
  46. geocase-1.0.0rc1/src/geocase/data/core/raster/cog_multispectral_small/case.yaml +66 -0
  47. geocase-1.0.0rc1/src/geocase/data/core/raster/cog_multispectral_small/checksums.sha256 +1 -0
  48. geocase-1.0.0rc1/src/geocase/data/core/raster/cog_multispectral_small/cog_multispectral_small.tif +0 -0
  49. geocase-1.0.0rc1/src/geocase/data/core/raster/cog_singleband_small/case.yaml +59 -0
  50. geocase-1.0.0rc1/src/geocase/data/core/raster/cog_singleband_small/checksums.sha256 +1 -0
  51. geocase-1.0.0rc1/src/geocase/data/core/raster/cog_singleband_small/cog_singleband_small.tif +0 -0
  52. geocase-1.0.0rc1/src/geocase/data/core/raster/dem_nan_nodata_small/case.yaml +59 -0
  53. geocase-1.0.0rc1/src/geocase/data/core/raster/dem_nan_nodata_small/checksums.sha256 +1 -0
  54. geocase-1.0.0rc1/src/geocase/data/core/raster/dem_nan_nodata_small/dem_nan_nodata_small.tif +0 -0
  55. geocase-1.0.0rc1/src/geocase/data/core/raster/dem_small/case.yaml +63 -0
  56. geocase-1.0.0rc1/src/geocase/data/core/raster/dem_small/checksums.sha256 +1 -0
  57. geocase-1.0.0rc1/src/geocase/data/core/raster/dem_small/dem_small.tif +0 -0
  58. geocase-1.0.0rc1/src/geocase/data/core/raster/dem_small/notes.md +28 -0
  59. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/all_valid_rectangular.tif +0 -0
  60. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/all_valid_rectangular_footprint.geojson +47 -0
  61. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/case_all_valid_rectangular.yaml +50 -0
  62. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/case_hole_center_nodata.yaml +52 -0
  63. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/case_nonsquare_diagonal_sparse.yaml +51 -0
  64. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/case_rotated_two_islands.yaml +51 -0
  65. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/case_thin_corridor_shape.yaml +50 -0
  66. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/hole_center_nodata.tif +0 -0
  67. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/hole_center_nodata_footprint.geojson +47 -0
  68. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/nonsquare_diagonal_sparse.tif +0 -0
  69. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/nonsquare_diagonal_sparse_footprint.geojson +55 -0
  70. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/notes.md +29 -0
  71. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/rotated_two_islands.tif +0 -0
  72. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/rotated_two_islands_footprint.geojson +55 -0
  73. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/thin_corridor_shape.tif +0 -0
  74. geocase-1.0.0rc1/src/geocase/data/core/raster/footprint_edge_cases/thin_corridor_shape_footprint.geojson +59 -0
  75. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_external_overviews_small/case.yaml +59 -0
  76. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_external_overviews_small/checksums.sha256 +2 -0
  77. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_external_overviews_small/geotiff_external_overviews_small.tif +0 -0
  78. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_external_overviews_small/geotiff_external_overviews_small.tif.ovr +0 -0
  79. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_float64_small/case.yaml +56 -0
  80. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_float64_small/checksums.sha256 +1 -0
  81. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_float64_small/float64_sample.tif +0 -0
  82. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_float64_small/notes.md +12 -0
  83. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int16_small/case.yaml +56 -0
  84. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int16_small/checksums.sha256 +1 -0
  85. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int16_small/int16_sample.tif +0 -0
  86. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int16_small/notes.md +12 -0
  87. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int32_small/case.yaml +56 -0
  88. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int32_small/checksums.sha256 +1 -0
  89. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int32_small/int32_sample.tif +0 -0
  90. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int32_small/notes.md +12 -0
  91. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int8_small/case.yaml +56 -0
  92. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int8_small/checksums.sha256 +1 -0
  93. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int8_small/int8_sample.tif +0 -0
  94. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_int8_small/notes.md +12 -0
  95. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_multiband_small/case.yaml +56 -0
  96. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_multiband_small/checksums.sha256 +1 -0
  97. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_multiband_small/multiband_sample.tif +0 -0
  98. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_multiband_small/notes.md +25 -0
  99. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small/case.yaml +56 -0
  100. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small/checksums.sha256 +2 -0
  101. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small/nodata_sample.tif +0 -0
  102. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small/nodata_sample.tif.aux.xml +11 -0
  103. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small/notes.md +24 -0
  104. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small_shifted/case.yaml +59 -0
  105. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small_shifted/checksums.sha256 +1 -0
  106. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small_shifted/nodata_sample_shifted.tif +0 -0
  107. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_nodata_small_shifted/notes.md +6 -0
  108. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_utm_boundary/case.yaml +56 -0
  109. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_utm_boundary/checksums.sha256 +2 -0
  110. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_utm_boundary/notes.md +24 -0
  111. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_utm_boundary/utm_boundary.tif +0 -0
  112. geocase-1.0.0rc1/src/geocase/data/core/raster/geotiff_utm_boundary/utm_boundary.tif.aux.xml +11 -0
  113. geocase-1.0.0rc1/src/geocase/data/core/raster/landcover_small/case.yaml +64 -0
  114. geocase-1.0.0rc1/src/geocase/data/core/raster/landcover_small/checksums.sha256 +1 -0
  115. geocase-1.0.0rc1/src/geocase/data/core/raster/landcover_small/landcover_small.tif +0 -0
  116. geocase-1.0.0rc1/src/geocase/data/core/raster/multispectral_mixed_resolution_small/case.yaml +66 -0
  117. geocase-1.0.0rc1/src/geocase/data/core/raster/multispectral_mixed_resolution_small/checksums.sha256 +1 -0
  118. geocase-1.0.0rc1/src/geocase/data/core/raster/multispectral_mixed_resolution_small/multispectral_mixed_resolution_small.tif +0 -0
  119. geocase-1.0.0rc1/src/geocase/data/core/raster/multispectral_s2_like_small/case.yaml +67 -0
  120. geocase-1.0.0rc1/src/geocase/data/core/raster/multispectral_s2_like_small/checksums.sha256 +1 -0
  121. geocase-1.0.0rc1/src/geocase/data/core/raster/multispectral_s2_like_small/multispectral_s2_like_small.tif +0 -0
  122. geocase-1.0.0rc1/src/geocase/data/core/raster/multispectral_s2_like_small/notes.md +29 -0
  123. geocase-1.0.0rc1/src/geocase/data/core/raster/ndvi_scaled_int16_small/case.yaml +64 -0
  124. geocase-1.0.0rc1/src/geocase/data/core/raster/ndvi_scaled_int16_small/checksums.sha256 +1 -0
  125. geocase-1.0.0rc1/src/geocase/data/core/raster/ndvi_scaled_int16_small/ndvi_scaled_int16_small.tif +0 -0
  126. geocase-1.0.0rc1/src/geocase/data/core/raster/ndvi_small/case.yaml +61 -0
  127. geocase-1.0.0rc1/src/geocase/data/core/raster/ndvi_small/checksums.sha256 +1 -0
  128. geocase-1.0.0rc1/src/geocase/data/core/raster/ndvi_small/ndvi_small.tif +0 -0
  129. geocase-1.0.0rc1/src/geocase/data/core/raster/ndvi_small/notes.md +27 -0
  130. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_dateline_small/case.yaml +57 -0
  131. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_dateline_small/checksums.sha256 +1 -0
  132. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_dateline_small/optical_dateline_small.tif +0 -0
  133. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_equator_small/case.yaml +55 -0
  134. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_equator_small/checksums.sha256 +1 -0
  135. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_equator_small/optical_equator_small.tif +0 -0
  136. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_polar_small/case.yaml +56 -0
  137. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_polar_small/checksums.sha256 +1 -0
  138. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_polar_small/optical_polar_small.tif +0 -0
  139. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_rgb_small/case.yaml +61 -0
  140. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_rgb_small/checksums.sha256 +1 -0
  141. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_rgb_small/notes.md +28 -0
  142. geocase-1.0.0rc1/src/geocase/data/core/raster/optical_rgb_small/optical_rgb_small.tif +0 -0
  143. geocase-1.0.0rc1/src/geocase/data/core/raster/sar_dualpol_small/case.yaml +58 -0
  144. geocase-1.0.0rc1/src/geocase/data/core/raster/sar_dualpol_small/checksums.sha256 +1 -0
  145. geocase-1.0.0rc1/src/geocase/data/core/raster/sar_dualpol_small/sar_dualpol_small.tif +0 -0
  146. geocase-1.0.0rc1/src/geocase/data/core/raster/sar_vv_small/case.yaml +56 -0
  147. geocase-1.0.0rc1/src/geocase/data/core/raster/sar_vv_small/checksums.sha256 +1 -0
  148. geocase-1.0.0rc1/src/geocase/data/core/raster/sar_vv_small/sar_vv_small.tif +0 -0
  149. geocase-1.0.0rc1/src/geocase/data/core/raster/water_mask_small/case.yaml +67 -0
  150. geocase-1.0.0rc1/src/geocase/data/core/raster/water_mask_small/checksums.sha256 +1 -0
  151. geocase-1.0.0rc1/src/geocase/data/core/raster/water_mask_small/notes.md +27 -0
  152. geocase-1.0.0rc1/src/geocase/data/core/raster/water_mask_small/water_mask_small.tif +0 -0
  153. geocase-1.0.0rc1/src/geocase/data/core/vector/geometrycollection/geojson/case.yaml +54 -0
  154. geocase-1.0.0rc1/src/geocase/data/core/vector/geometrycollection/geojson/checksums.sha256 +1 -0
  155. geocase-1.0.0rc1/src/geocase/data/core/vector/geometrycollection/geojson/geometry.geojson +40 -0
  156. geocase-1.0.0rc1/src/geocase/data/core/vector/geometrycollection/geojson/notes.md +1 -0
  157. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/csv_wkt/linestring_csv_wkt_baseline/case.yaml +58 -0
  158. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/csv_wkt/linestring_csv_wkt_baseline/checksums.sha256 +1 -0
  159. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/csv_wkt/linestring_csv_wkt_baseline/geometry.csv +2 -0
  160. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/csv_wkt/linestring_csv_wkt_baseline/notes.md +1 -0
  161. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/flatgeobuf/linestring_flatgeobuf_baseline/case.yaml +55 -0
  162. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/flatgeobuf/linestring_flatgeobuf_baseline/checksums.sha256 +1 -0
  163. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/flatgeobuf/linestring_flatgeobuf_baseline/line.fgb +0 -0
  164. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/flatgeobuf/linestring_flatgeobuf_baseline/notes.md +1 -0
  165. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geoarrow/linestring_geoarrow_baseline/case.yaml +55 -0
  166. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geoarrow/linestring_geoarrow_baseline/checksums.sha256 +1 -0
  167. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geoarrow/linestring_geoarrow_baseline/geometry.arrow +0 -0
  168. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geoarrow/linestring_geoarrow_baseline/notes.md +1 -0
  169. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geojson/simple_valid_linestring/case.yaml +54 -0
  170. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geojson/simple_valid_linestring/checksums.sha256 +1 -0
  171. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geojson/simple_valid_linestring/geometry.geojson +19 -0
  172. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geojson/simple_valid_linestring/notes.md +1 -0
  173. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geopackage/linestring_geopackage_baseline/case.yaml +56 -0
  174. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geopackage/linestring_geopackage_baseline/checksums.sha256 +1 -0
  175. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geopackage/linestring_geopackage_baseline/data.gpkg +0 -0
  176. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/geopackage/linestring_geopackage_baseline/notes.md +13 -0
  177. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/gml/linestring_gml_baseline/case.yaml +56 -0
  178. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/gml/linestring_gml_baseline/checksums.sha256 +2 -0
  179. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/gml/linestring_gml_baseline/data.gml +18 -0
  180. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/gml/linestring_gml_baseline/data.xsd +60 -0
  181. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/gml/linestring_gml_baseline/notes.md +13 -0
  182. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/kml/linestring_kml_baseline/case.yaml +56 -0
  183. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/kml/linestring_kml_baseline/checksums.sha256 +1 -0
  184. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/kml/linestring_kml_baseline/data.kml +12 -0
  185. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/kml/linestring_kml_baseline/notes.md +13 -0
  186. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/case.yaml +56 -0
  187. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/checksums.sha256 +5 -0
  188. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/data.cpg +1 -0
  189. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/data.dbf +0 -0
  190. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/data.prj +1 -0
  191. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/data.shp +0 -0
  192. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/data.shx +0 -0
  193. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/shapefile/linestring_shapefile_baseline/notes.md +13 -0
  194. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/sqlite/linestring_sqlite_baseline/case.yaml +57 -0
  195. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/sqlite/linestring_sqlite_baseline/checksums.sha256 +1 -0
  196. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/sqlite/linestring_sqlite_baseline/data.sqlite +0 -0
  197. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/sqlite/linestring_sqlite_baseline/notes.md +13 -0
  198. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkb/linestring_wkb_baseline/case.yaml +54 -0
  199. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkb/linestring_wkb_baseline/checksums.sha256 +1 -0
  200. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkb/linestring_wkb_baseline/geometry.wkb +0 -0
  201. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkb/linestring_wkb_baseline/notes.md +11 -0
  202. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkt/linestring_wkt_baseline/case.yaml +54 -0
  203. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkt/linestring_wkt_baseline/checksums.sha256 +1 -0
  204. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkt/linestring_wkt_baseline/geometry.wkt +1 -0
  205. geocase-1.0.0rc1/src/geocase/data/core/vector/linestring/wkt/linestring_wkt_baseline/notes.md +11 -0
  206. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/csv_wkt/multilinestring_csv_wkt_baseline/case.yaml +56 -0
  207. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/csv_wkt/multilinestring_csv_wkt_baseline/checksums.sha256 +1 -0
  208. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/csv_wkt/multilinestring_csv_wkt_baseline/data.csv +2 -0
  209. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/csv_wkt/multilinestring_csv_wkt_baseline/notes.md +13 -0
  210. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/flatgeobuf/multilinestring_flatgeobuf_baseline/case.yaml +56 -0
  211. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/flatgeobuf/multilinestring_flatgeobuf_baseline/checksums.sha256 +1 -0
  212. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/flatgeobuf/multilinestring_flatgeobuf_baseline/data.fgb +0 -0
  213. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/flatgeobuf/multilinestring_flatgeobuf_baseline/notes.md +13 -0
  214. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geojson/simple_valid_multilinestring/case.yaml +54 -0
  215. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geojson/simple_valid_multilinestring/checksums.sha256 +1 -0
  216. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geojson/simple_valid_multilinestring/geometry.geojson +26 -0
  217. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geojson/simple_valid_multilinestring/notes.md +1 -0
  218. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geopackage/multilinestring_geopackage_baseline/case.yaml +56 -0
  219. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geopackage/multilinestring_geopackage_baseline/checksums.sha256 +1 -0
  220. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geopackage/multilinestring_geopackage_baseline/data.gpkg +0 -0
  221. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/geopackage/multilinestring_geopackage_baseline/notes.md +13 -0
  222. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/gml/multilinestring_gml_baseline/case.yaml +56 -0
  223. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/gml/multilinestring_gml_baseline/checksums.sha256 +2 -0
  224. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/gml/multilinestring_gml_baseline/data.gml +18 -0
  225. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/gml/multilinestring_gml_baseline/data.xsd +60 -0
  226. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/gml/multilinestring_gml_baseline/notes.md +13 -0
  227. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/kml/multilinestring_kml_baseline/case.yaml +56 -0
  228. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/kml/multilinestring_kml_baseline/checksums.sha256 +1 -0
  229. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/kml/multilinestring_kml_baseline/data.kml +12 -0
  230. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/kml/multilinestring_kml_baseline/notes.md +13 -0
  231. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/parquet/multilinestring_parquet_baseline/case.yaml +55 -0
  232. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/parquet/multilinestring_parquet_baseline/checksums.sha256 +1 -0
  233. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/parquet/multilinestring_parquet_baseline/geometry.parquet +0 -0
  234. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/parquet/multilinestring_parquet_baseline/notes.md +1 -0
  235. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/case.yaml +56 -0
  236. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/checksums.sha256 +5 -0
  237. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/data.cpg +1 -0
  238. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/data.dbf +0 -0
  239. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/data.prj +1 -0
  240. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/data.shp +0 -0
  241. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/data.shx +0 -0
  242. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/shapefile/multilinestring_shapefile_baseline/notes.md +13 -0
  243. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/sqlite/multilinestring_sqlite_baseline/case.yaml +57 -0
  244. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/sqlite/multilinestring_sqlite_baseline/checksums.sha256 +1 -0
  245. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/sqlite/multilinestring_sqlite_baseline/data.sqlite +0 -0
  246. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/sqlite/multilinestring_sqlite_baseline/notes.md +13 -0
  247. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkb/multilinestring_wkb_baseline/case.yaml +54 -0
  248. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkb/multilinestring_wkb_baseline/checksums.sha256 +1 -0
  249. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkb/multilinestring_wkb_baseline/geometry.wkb +0 -0
  250. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkb/multilinestring_wkb_baseline/notes.md +11 -0
  251. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkt/multilinestring_wkt_baseline/case.yaml +54 -0
  252. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkt/multilinestring_wkt_baseline/checksums.sha256 +1 -0
  253. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkt/multilinestring_wkt_baseline/geometry.wkt +1 -0
  254. geocase-1.0.0rc1/src/geocase/data/core/vector/multilinestring/wkt/multilinestring_wkt_baseline/notes.md +11 -0
  255. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/csv_wkt/multipoint_csv_wkt_baseline/case.yaml +56 -0
  256. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/csv_wkt/multipoint_csv_wkt_baseline/checksums.sha256 +1 -0
  257. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/csv_wkt/multipoint_csv_wkt_baseline/data.csv +2 -0
  258. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/csv_wkt/multipoint_csv_wkt_baseline/notes.md +13 -0
  259. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/feather/multipoint_feather_baseline/case.yaml +55 -0
  260. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/feather/multipoint_feather_baseline/checksums.sha256 +1 -0
  261. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/feather/multipoint_feather_baseline/geometry.feather +0 -0
  262. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/feather/multipoint_feather_baseline/notes.md +1 -0
  263. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/flatgeobuf/multipoint_flatgeobuf_baseline/case.yaml +56 -0
  264. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/flatgeobuf/multipoint_flatgeobuf_baseline/checksums.sha256 +1 -0
  265. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/flatgeobuf/multipoint_flatgeobuf_baseline/data.fgb +0 -0
  266. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/flatgeobuf/multipoint_flatgeobuf_baseline/notes.md +13 -0
  267. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geojson/simple_valid_multipoint/case.yaml +54 -0
  268. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geojson/simple_valid_multipoint/checksums.sha256 +1 -0
  269. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geojson/simple_valid_multipoint/geometry.geojson +19 -0
  270. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geojson/simple_valid_multipoint/notes.md +1 -0
  271. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geopackage/multipoint_geopackage_baseline/case.yaml +56 -0
  272. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geopackage/multipoint_geopackage_baseline/checksums.sha256 +1 -0
  273. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geopackage/multipoint_geopackage_baseline/data.gpkg +0 -0
  274. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/geopackage/multipoint_geopackage_baseline/notes.md +13 -0
  275. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/gml/multipoint_gml_baseline/case.yaml +56 -0
  276. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/gml/multipoint_gml_baseline/checksums.sha256 +2 -0
  277. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/gml/multipoint_gml_baseline/data.gml +18 -0
  278. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/gml/multipoint_gml_baseline/data.xsd +60 -0
  279. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/gml/multipoint_gml_baseline/notes.md +13 -0
  280. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/kml/multipoint_kml_baseline/case.yaml +56 -0
  281. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/kml/multipoint_kml_baseline/checksums.sha256 +1 -0
  282. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/kml/multipoint_kml_baseline/data.kml +11 -0
  283. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/kml/multipoint_kml_baseline/notes.md +13 -0
  284. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/case.yaml +56 -0
  285. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/checksums.sha256 +5 -0
  286. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/data.cpg +1 -0
  287. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/data.dbf +0 -0
  288. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/data.prj +1 -0
  289. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/data.shp +0 -0
  290. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/data.shx +0 -0
  291. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/shapefile/multipoint_shapefile_baseline/notes.md +13 -0
  292. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/sqlite/multipoint_sqlite_baseline/case.yaml +57 -0
  293. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/sqlite/multipoint_sqlite_baseline/checksums.sha256 +1 -0
  294. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/sqlite/multipoint_sqlite_baseline/data.sqlite +0 -0
  295. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/sqlite/multipoint_sqlite_baseline/notes.md +13 -0
  296. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkb/multipoint_wkb_baseline/case.yaml +54 -0
  297. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkb/multipoint_wkb_baseline/checksums.sha256 +1 -0
  298. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkb/multipoint_wkb_baseline/geometry.wkb +0 -0
  299. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkb/multipoint_wkb_baseline/notes.md +11 -0
  300. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkt/multipoint_wkt_baseline/case.yaml +54 -0
  301. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkt/multipoint_wkt_baseline/checksums.sha256 +1 -0
  302. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkt/multipoint_wkt_baseline/geometry.wkt +1 -0
  303. geocase-1.0.0rc1/src/geocase/data/core/vector/multipoint/wkt/multipoint_wkt_baseline/notes.md +11 -0
  304. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/csv_wkt/multipolygon_csv_wkt_baseline/case.yaml +56 -0
  305. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/csv_wkt/multipolygon_csv_wkt_baseline/checksums.sha256 +1 -0
  306. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/csv_wkt/multipolygon_csv_wkt_baseline/data.csv +2 -0
  307. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/csv_wkt/multipolygon_csv_wkt_baseline/notes.md +13 -0
  308. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/flatgeobuf/multipolygon_flatgeobuf_baseline/case.yaml +56 -0
  309. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/flatgeobuf/multipolygon_flatgeobuf_baseline/checksums.sha256 +1 -0
  310. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/flatgeobuf/multipolygon_flatgeobuf_baseline/data.fgb +0 -0
  311. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/flatgeobuf/multipolygon_flatgeobuf_baseline/notes.md +13 -0
  312. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geojson/simple_valid_multipolygon/case.yaml +54 -0
  313. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geojson/simple_valid_multipolygon/checksums.sha256 +1 -0
  314. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geojson/simple_valid_multipolygon/geometry.geojson +34 -0
  315. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geojson/simple_valid_multipolygon/notes.md +1 -0
  316. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geopackage/multipolygon_geopackage_baseline/case.yaml +56 -0
  317. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geopackage/multipolygon_geopackage_baseline/checksums.sha256 +1 -0
  318. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geopackage/multipolygon_geopackage_baseline/data.gpkg +0 -0
  319. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/geopackage/multipolygon_geopackage_baseline/notes.md +13 -0
  320. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/gml/multipolygon_gml_baseline/case.yaml +56 -0
  321. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/gml/multipolygon_gml_baseline/checksums.sha256 +2 -0
  322. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/gml/multipolygon_gml_baseline/data.gml +18 -0
  323. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/gml/multipolygon_gml_baseline/data.xsd +60 -0
  324. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/gml/multipolygon_gml_baseline/notes.md +13 -0
  325. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/kml/multipolygon_kml_baseline/case.yaml +56 -0
  326. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/kml/multipolygon_kml_baseline/checksums.sha256 +1 -0
  327. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/kml/multipolygon_kml_baseline/data.kml +12 -0
  328. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/kml/multipolygon_kml_baseline/notes.md +13 -0
  329. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/case.yaml +56 -0
  330. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/checksums.sha256 +5 -0
  331. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/data.cpg +1 -0
  332. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/data.dbf +0 -0
  333. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/data.prj +1 -0
  334. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/data.shp +0 -0
  335. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/data.shx +0 -0
  336. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/shapefile/multipolygon_shapefile_baseline/notes.md +13 -0
  337. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/sqlite/multipolygon_sqlite_baseline/case.yaml +57 -0
  338. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/sqlite/multipolygon_sqlite_baseline/checksums.sha256 +1 -0
  339. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/sqlite/multipolygon_sqlite_baseline/data.sqlite +0 -0
  340. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/sqlite/multipolygon_sqlite_baseline/notes.md +13 -0
  341. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkb/multipolygon_wkb_baseline/case.yaml +54 -0
  342. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkb/multipolygon_wkb_baseline/checksums.sha256 +1 -0
  343. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkb/multipolygon_wkb_baseline/geometry.wkb +0 -0
  344. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkb/multipolygon_wkb_baseline/notes.md +11 -0
  345. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkt/multipolygon_wkt_baseline/case.yaml +54 -0
  346. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkt/multipolygon_wkt_baseline/checksums.sha256 +1 -0
  347. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkt/multipolygon_wkt_baseline/geometry.wkt +1 -0
  348. geocase-1.0.0rc1/src/geocase/data/core/vector/multipolygon/wkt/multipolygon_wkt_baseline/notes.md +11 -0
  349. geocase-1.0.0rc1/src/geocase/data/core/vector/point/arrow/point_arrow_baseline/case.yaml +55 -0
  350. geocase-1.0.0rc1/src/geocase/data/core/vector/point/arrow/point_arrow_baseline/checksums.sha256 +1 -0
  351. geocase-1.0.0rc1/src/geocase/data/core/vector/point/arrow/point_arrow_baseline/geometry.arrow +0 -0
  352. geocase-1.0.0rc1/src/geocase/data/core/vector/point/arrow/point_arrow_baseline/notes.md +1 -0
  353. geocase-1.0.0rc1/src/geocase/data/core/vector/point/csv_wkt/point_csv_wkt_baseline/case.yaml +56 -0
  354. geocase-1.0.0rc1/src/geocase/data/core/vector/point/csv_wkt/point_csv_wkt_baseline/checksums.sha256 +1 -0
  355. geocase-1.0.0rc1/src/geocase/data/core/vector/point/csv_wkt/point_csv_wkt_baseline/data.csv +2 -0
  356. geocase-1.0.0rc1/src/geocase/data/core/vector/point/csv_wkt/point_csv_wkt_baseline/notes.md +14 -0
  357. geocase-1.0.0rc1/src/geocase/data/core/vector/point/feather/point_feather_baseline/case.yaml +55 -0
  358. geocase-1.0.0rc1/src/geocase/data/core/vector/point/feather/point_feather_baseline/checksums.sha256 +1 -0
  359. geocase-1.0.0rc1/src/geocase/data/core/vector/point/feather/point_feather_baseline/geometry.feather +0 -0
  360. geocase-1.0.0rc1/src/geocase/data/core/vector/point/feather/point_feather_baseline/notes.md +1 -0
  361. geocase-1.0.0rc1/src/geocase/data/core/vector/point/flatgeobuf/point_flatgeobuf_baseline/case.yaml +55 -0
  362. geocase-1.0.0rc1/src/geocase/data/core/vector/point/flatgeobuf/point_flatgeobuf_baseline/checksums.sha256 +1 -0
  363. geocase-1.0.0rc1/src/geocase/data/core/vector/point/flatgeobuf/point_flatgeobuf_baseline/notes.md +1 -0
  364. geocase-1.0.0rc1/src/geocase/data/core/vector/point/flatgeobuf/point_flatgeobuf_baseline/point.fgb +0 -0
  365. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geojson/simple_valid_point/case.yaml +54 -0
  366. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geojson/simple_valid_point/checksums.sha256 +1 -0
  367. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geojson/simple_valid_point/geometry.geojson +21 -0
  368. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geojson/simple_valid_point/notes.md +1 -0
  369. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geopackage/point_geopackage_baseline/case.yaml +56 -0
  370. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geopackage/point_geopackage_baseline/checksums.sha256 +1 -0
  371. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geopackage/point_geopackage_baseline/data.gpkg +0 -0
  372. geocase-1.0.0rc1/src/geocase/data/core/vector/point/geopackage/point_geopackage_baseline/notes.md +13 -0
  373. geocase-1.0.0rc1/src/geocase/data/core/vector/point/gml/point_gml_baseline/case.yaml +59 -0
  374. geocase-1.0.0rc1/src/geocase/data/core/vector/point/gml/point_gml_baseline/checksums.sha256 +2 -0
  375. geocase-1.0.0rc1/src/geocase/data/core/vector/point/gml/point_gml_baseline/geometry.gml +17 -0
  376. geocase-1.0.0rc1/src/geocase/data/core/vector/point/gml/point_gml_baseline/geometry.xsd +53 -0
  377. geocase-1.0.0rc1/src/geocase/data/core/vector/point/gml/point_gml_baseline/notes.md +1 -0
  378. geocase-1.0.0rc1/src/geocase/data/core/vector/point/kml/point_kml_baseline/case.yaml +57 -0
  379. geocase-1.0.0rc1/src/geocase/data/core/vector/point/kml/point_kml_baseline/checksums.sha256 +1 -0
  380. geocase-1.0.0rc1/src/geocase/data/core/vector/point/kml/point_kml_baseline/notes.md +1 -0
  381. geocase-1.0.0rc1/src/geocase/data/core/vector/point/kml/point_kml_baseline/point.kml +10 -0
  382. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/case.yaml +56 -0
  383. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/checksums.sha256 +5 -0
  384. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/data.cpg +1 -0
  385. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/data.dbf +0 -0
  386. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/data.prj +1 -0
  387. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/data.shp +0 -0
  388. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/data.shx +0 -0
  389. geocase-1.0.0rc1/src/geocase/data/core/vector/point/shapefile/point_shapefile_baseline/notes.md +14 -0
  390. geocase-1.0.0rc1/src/geocase/data/core/vector/point/sqlite/point_sqlite_baseline/case.yaml +57 -0
  391. geocase-1.0.0rc1/src/geocase/data/core/vector/point/sqlite/point_sqlite_baseline/checksums.sha256 +1 -0
  392. geocase-1.0.0rc1/src/geocase/data/core/vector/point/sqlite/point_sqlite_baseline/data.sqlite +0 -0
  393. geocase-1.0.0rc1/src/geocase/data/core/vector/point/sqlite/point_sqlite_baseline/notes.md +13 -0
  394. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkb/point_wkb_baseline/case.yaml +54 -0
  395. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkb/point_wkb_baseline/checksums.sha256 +1 -0
  396. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkb/point_wkb_baseline/geometry.wkb +0 -0
  397. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkb/point_wkb_baseline/notes.md +11 -0
  398. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkt/point_wkt_baseline/case.yaml +54 -0
  399. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkt/point_wkt_baseline/checksums.sha256 +1 -0
  400. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkt/point_wkt_baseline/geometry.wkt +1 -0
  401. geocase-1.0.0rc1/src/geocase/data/core/vector/point/wkt/point_wkt_baseline/notes.md +11 -0
  402. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/csv_wkt/polygon_csv_wkt_baseline/case.yaml +56 -0
  403. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/csv_wkt/polygon_csv_wkt_baseline/checksums.sha256 +1 -0
  404. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/csv_wkt/polygon_csv_wkt_baseline/data.csv +2 -0
  405. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/csv_wkt/polygon_csv_wkt_baseline/notes.md +13 -0
  406. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/flatgeobuf/polygon_flatgeobuf_baseline/case.yaml +57 -0
  407. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/flatgeobuf/polygon_flatgeobuf_baseline/checksums.sha256 +1 -0
  408. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/flatgeobuf/polygon_flatgeobuf_baseline/notes.md +1 -0
  409. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/flatgeobuf/polygon_flatgeobuf_baseline/polygon.fgb +0 -0
  410. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geojson/simple_valid_polygon/case.yaml +59 -0
  411. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geojson/simple_valid_polygon/checksums.sha256 +1 -0
  412. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geojson/simple_valid_polygon/geometry.geojson +24 -0
  413. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geojson/simple_valid_polygon/notes.md +25 -0
  414. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geopackage/polygon_geopackage_baseline/case.yaml +56 -0
  415. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geopackage/polygon_geopackage_baseline/checksums.sha256 +1 -0
  416. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geopackage/polygon_geopackage_baseline/data.gpkg +0 -0
  417. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/geopackage/polygon_geopackage_baseline/notes.md +13 -0
  418. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/gml/polygon_gml_baseline/case.yaml +55 -0
  419. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/gml/polygon_gml_baseline/checksums.sha256 +2 -0
  420. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/gml/polygon_gml_baseline/geometry.gml +17 -0
  421. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/gml/polygon_gml_baseline/geometry.xsd +53 -0
  422. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/gml/polygon_gml_baseline/notes.md +1 -0
  423. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/kml/polygon_kml_baseline/case.yaml +55 -0
  424. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/kml/polygon_kml_baseline/checksums.sha256 +1 -0
  425. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/kml/polygon_kml_baseline/notes.md +1 -0
  426. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/kml/polygon_kml_baseline/polygon.kml +11 -0
  427. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/parquet/polygon_parquet_baseline/case.yaml +55 -0
  428. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/parquet/polygon_parquet_baseline/checksums.sha256 +1 -0
  429. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/parquet/polygon_parquet_baseline/geometry.parquet +0 -0
  430. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/parquet/polygon_parquet_baseline/notes.md +1 -0
  431. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/case.yaml +56 -0
  432. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/checksums.sha256 +5 -0
  433. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/geometry.cpg +1 -0
  434. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/geometry.dbf +0 -0
  435. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/geometry.prj +1 -0
  436. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/geometry.shp +0 -0
  437. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/geometry.shx +0 -0
  438. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/shapefile/polygon_shapefile_baseline/notes.md +1 -0
  439. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/sqlite/polygon_sqlite_baseline/case.yaml +57 -0
  440. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/sqlite/polygon_sqlite_baseline/checksums.sha256 +1 -0
  441. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/sqlite/polygon_sqlite_baseline/geometry.sqlite +0 -0
  442. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/sqlite/polygon_sqlite_baseline/notes.md +1 -0
  443. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkb/polygon_wkb_baseline/case.yaml +57 -0
  444. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkb/polygon_wkb_baseline/checksums.sha256 +1 -0
  445. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkb/polygon_wkb_baseline/notes.md +1 -0
  446. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkb/polygon_wkb_baseline/polygon.wkb +0 -0
  447. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkt/polygon_wkt_baseline/case.yaml +57 -0
  448. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkt/polygon_wkt_baseline/checksums.sha256 +1 -0
  449. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkt/polygon_wkt_baseline/notes.md +1 -0
  450. geocase-1.0.0rc1/src/geocase/data/core/vector/polygon/wkt/polygon_wkt_baseline/polygon.wkt +1 -0
  451. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_crossing_line/case.yaml +56 -0
  452. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_crossing_line/checksums.sha256 +1 -0
  453. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_crossing_line/geometry.geojson +25 -0
  454. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_crossing_line/notes.md +1 -0
  455. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_polygon/case.yaml +63 -0
  456. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_polygon/checksums.sha256 +1 -0
  457. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_polygon/geometry.geojson +30 -0
  458. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/equator_polygon/notes.md +30 -0
  459. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_point/case.yaml +56 -0
  460. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_point/checksums.sha256 +1 -0
  461. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_point/geometry.geojson +21 -0
  462. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_point/notes.md +1 -0
  463. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_polygon/case.yaml +66 -0
  464. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_polygon/checksums.sha256 +1 -0
  465. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_polygon/geometry.geojson +30 -0
  466. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/north_pole_polygon/notes.md +30 -0
  467. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_utm33_polygon/case.yaml +52 -0
  468. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_utm33_polygon/checksums.sha256 +1 -0
  469. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_utm33_polygon/geometry.geojson +29 -0
  470. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_utm33_polygon/notes.md +3 -0
  471. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_wgs84_polygon/case.yaml +54 -0
  472. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_wgs84_polygon/checksums.sha256 +1 -0
  473. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_wgs84_polygon/geometry.geojson +23 -0
  474. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/rasterize_match_wgs84_polygon/notes.md +3 -0
  475. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_point/case.yaml +56 -0
  476. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_point/checksums.sha256 +1 -0
  477. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_point/geometry.geojson +21 -0
  478. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_point/notes.md +1 -0
  479. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_polygon/case.yaml +64 -0
  480. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_polygon/checksums.sha256 +1 -0
  481. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_polygon/geometry.geojson +30 -0
  482. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/south_pole_polygon/notes.md +25 -0
  483. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/svalbard_special_zone_polygon/case.yaml +57 -0
  484. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/svalbard_special_zone_polygon/checksums.sha256 +1 -0
  485. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/svalbard_special_zone_polygon/geometry.geojson +23 -0
  486. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/svalbard_special_zone_polygon/notes.md +3 -0
  487. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/utm_zone_33_polygon/case.yaml +54 -0
  488. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/utm_zone_33_polygon/checksums.sha256 +1 -0
  489. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/utm_zone_33_polygon/geometry.geojson +23 -0
  490. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/utm_zone_33_polygon/notes.md +3 -0
  491. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/web_mercator_baseline/case.yaml +57 -0
  492. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/web_mercator_baseline/checksums.sha256 +1 -0
  493. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/web_mercator_baseline/geometry.geojson +21 -0
  494. geocase-1.0.0rc1/src/geocase/data/core/vector/special/crs/web_mercator_baseline/notes.md +1 -0
  495. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/antimeridian_crossing_line/case.yaml +59 -0
  496. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/antimeridian_crossing_line/checksums.sha256 +1 -0
  497. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/antimeridian_crossing_line/geometry.geojson +19 -0
  498. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/antimeridian_crossing_line/notes.md +26 -0
  499. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/classic_antimeridian_polygon/case.yaml +55 -0
  500. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/classic_antimeridian_polygon/checksums.sha256 +1 -0
  501. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/classic_antimeridian_polygon/geometry.geojson +23 -0
  502. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/classic_antimeridian_polygon/notes.md +3 -0
  503. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_chain_cluster/case.yaml +62 -0
  504. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_chain_cluster/checksums.sha256 +1 -0
  505. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_chain_cluster/geometry.geojson +45 -0
  506. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_chain_cluster/notes.md +5 -0
  507. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_crossing_polygon/case.yaml +60 -0
  508. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_crossing_polygon/checksums.sha256 +1 -0
  509. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_crossing_polygon/geometry.geojson +24 -0
  510. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_crossing_polygon/notes.md +23 -0
  511. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_points_pair/case.yaml +58 -0
  512. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_points_pair/checksums.sha256 +1 -0
  513. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_points_pair/geometry.geojson +25 -0
  514. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/dateline_points_pair/notes.md +3 -0
  515. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/wrapped_longitude_point/case.yaml +59 -0
  516. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/wrapped_longitude_point/checksums.sha256 +1 -0
  517. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/wrapped_longitude_point/geometry.geojson +23 -0
  518. geocase-1.0.0rc1/src/geocase/data/core/vector/special/dateline/wrapped_longitude_point/notes.md +5 -0
  519. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/degenerate_but_parseable_line/case.yaml +60 -0
  520. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/degenerate_but_parseable_line/checksums.sha256 +1 -0
  521. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/degenerate_but_parseable_line/geometry.geojson +24 -0
  522. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/degenerate_but_parseable_line/notes.md +1 -0
  523. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/disjoint_polygons/case.yaml +51 -0
  524. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/disjoint_polygons/checksums.sha256 +1 -0
  525. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/disjoint_polygons/geometry.geojson +41 -0
  526. geocase-1.0.0rc1/src/geocase/data/core/vector/special/degenerate/disjoint_polygons/notes.md +3 -0
  527. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_geometry_gpkg/case.yaml +65 -0
  528. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_geometry_gpkg/checksums.sha256 +1 -0
  529. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_geometry_gpkg/empty_geom.gpkg +0 -0
  530. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_geometry_gpkg/notes.md +56 -0
  531. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_polygon/case.yaml +49 -0
  532. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_polygon/checksums.sha256 +1 -0
  533. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_polygon/geometry.geojson +15 -0
  534. geocase-1.0.0rc1/src/geocase/data/core/vector/special/empty/empty_polygon/notes.md +3 -0
  535. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/format_limited_kml_case/case.yaml +79 -0
  536. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/format_limited_kml_case/checksums.sha256 +1 -0
  537. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/format_limited_kml_case/notes.md +47 -0
  538. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/format_limited_kml_case/zones.kml +46 -0
  539. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/mixed_encoding_attributes/case.yaml +60 -0
  540. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/mixed_encoding_attributes/checksums.sha256 +1 -0
  541. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/mixed_encoding_attributes/mixed_attrs.gpkg +0 -0
  542. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/mixed_encoding_attributes/notes.md +24 -0
  543. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/parquet_mixed_schema_attributes/case.yaml +80 -0
  544. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/parquet_mixed_schema_attributes/checksums.sha256 +1 -0
  545. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/parquet_mixed_schema_attributes/mixed_attrs.parquet +0 -0
  546. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/parquet_mixed_schema_attributes/notes.md +30 -0
  547. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/case.yaml +77 -0
  548. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/checksums.sha256 +5 -0
  549. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/legacy_encoding.cpg +1 -0
  550. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/legacy_encoding.dbf +0 -0
  551. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/legacy_encoding.prj +1 -0
  552. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/legacy_encoding.shp +0 -0
  553. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/legacy_encoding.shx +0 -0
  554. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_encoding_legacy/notes.md +52 -0
  555. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/case.yaml +78 -0
  556. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/checksums.sha256 +5 -0
  557. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/notes.md +43 -0
  558. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/truncated_fields.cpg +1 -0
  559. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/truncated_fields.dbf +0 -0
  560. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/truncated_fields.prj +1 -0
  561. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/truncated_fields.shp +0 -0
  562. geocase-1.0.0rc1/src/geocase/data/core/vector/special/encoding/shapefile_field_truncation/truncated_fields.shx +0 -0
  563. geocase-1.0.0rc1/src/geocase/data/core/vector/special/holes/polygon_with_hole/case.yaml +57 -0
  564. geocase-1.0.0rc1/src/geocase/data/core/vector/special/holes/polygon_with_hole/checksums.sha256 +1 -0
  565. geocase-1.0.0rc1/src/geocase/data/core/vector/special/holes/polygon_with_hole/geometry.geojson +31 -0
  566. geocase-1.0.0rc1/src/geocase/data/core/vector/special/holes/polygon_with_hole/notes.md +24 -0
  567. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/ambiguous_engine_dependent_polygon/case.yaml +59 -0
  568. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/ambiguous_engine_dependent_polygon/checksums.sha256 +1 -0
  569. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/ambiguous_engine_dependent_polygon/geometry.geojson +36 -0
  570. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/ambiguous_engine_dependent_polygon/notes.md +1 -0
  571. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/null_island_point/case.yaml +65 -0
  572. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/null_island_point/checksums.sha256 +1 -0
  573. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/null_island_point/geometry.geojson +16 -0
  574. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/null_island_point/notes.md +27 -0
  575. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/out_of_bounds_coordinates/case.yaml +65 -0
  576. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/out_of_bounds_coordinates/checksums.sha256 +1 -0
  577. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/out_of_bounds_coordinates/geometry.geojson +17 -0
  578. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/out_of_bounds_coordinates/notes.md +29 -0
  579. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/self_intersecting_polygon/case.yaml +59 -0
  580. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/self_intersecting_polygon/checksums.sha256 +1 -0
  581. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/self_intersecting_polygon/geometry.geojson +24 -0
  582. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/self_intersecting_polygon/notes.md +24 -0
  583. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/spike_invalid_polygon/case.yaml +59 -0
  584. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/spike_invalid_polygon/checksums.sha256 +1 -0
  585. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/spike_invalid_polygon/geometry.geojson +34 -0
  586. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/spike_invalid_polygon/notes.md +5 -0
  587. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/unclosed_ring_polygon/case.yaml +62 -0
  588. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/unclosed_ring_polygon/checksums.sha256 +1 -0
  589. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/unclosed_ring_polygon/geometry.geojson +23 -0
  590. geocase-1.0.0rc1/src/geocase/data/core/vector/special/invalid/unclosed_ring_polygon/notes.md +18 -0
  591. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/format_limited_precision_polygon/case.yaml +61 -0
  592. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/format_limited_precision_polygon/checksums.sha256 +1 -0
  593. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/format_limited_precision_polygon/geometry.geojson +29 -0
  594. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/format_limited_precision_polygon/notes.md +1 -0
  595. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/nearby_points_cluster/case.yaml +53 -0
  596. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/nearby_points_cluster/checksums.sha256 +1 -0
  597. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/nearby_points_cluster/geometry.geojson +35 -0
  598. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/nearby_points_cluster/notes.md +3 -0
  599. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/precision_loss_geojson_roundtrip/case.yaml +69 -0
  600. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/precision_loss_geojson_roundtrip/checksums.sha256 +1 -0
  601. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/precision_loss_geojson_roundtrip/high_precision_points.geojson +47 -0
  602. geocase-1.0.0rc1/src/geocase/data/core/vector/special/precision/precision_loss_geojson_roundtrip/notes.md +51 -0
  603. geocase-1.0.0rc1/src/geocase/loaders/__init__.py +1 -0
  604. geocase-1.0.0rc1/src/geocase/loaders/generic.py +47 -0
  605. geocase-1.0.0rc1/src/geocase/loaders/geopandas_loader.py +22 -0
  606. geocase-1.0.0rc1/src/geocase/loaders/rasterio_loader.py +59 -0
  607. geocase-1.0.0rc1/src/geocase/loaders/xarray_loader.py +22 -0
  608. geocase-1.0.0rc1/src/geocase/metadata/case-index.yaml +136 -0
  609. geocase-1.0.0rc1/src/geocase/metadata/schemas/case.schema.yaml +241 -0
  610. geocase-1.0.0rc1/src/geocase/metadata/schemas/manifest.schema.yaml +67 -0
  611. geocase-1.0.0rc1/src/geocase/metadata/schemas/suite.schema.yaml +75 -0
  612. geocase-1.0.0rc1/src/geocase/metadata/suite-index.yaml +9 -0
  613. geocase-1.0.0rc1/src/geocase/py.typed +0 -0
  614. geocase-1.0.0rc1/src/geocase/pytest_plugin/__init__.py +60 -0
  615. geocase-1.0.0rc1/src/geocase/pytest_plugin/case_diagnostics.py +91 -0
  616. geocase-1.0.0rc1/src/geocase/pytest_plugin/fixtures.py +134 -0
  617. geocase-1.0.0rc1/src/geocase/pytest_plugin/markers.py +29 -0
  618. geocase-1.0.0rc1/src/geocase/storage/__init__.py +1 -0
  619. geocase-1.0.0rc1/src/geocase/storage/hashing.py +62 -0
  620. geocase-1.0.0rc1/src/geocase/templates/new_case.yaml +61 -0
  621. geocase-1.0.0rc1/src/geocase/templates/notes.md +1 -0
  622. geocase-1.0.0rc1/tests/fixtures/expected_hashes.yaml +1 -0
  623. geocase-1.0.0rc1/tests/integration/test_core_raster_suite.py +78 -0
  624. geocase-1.0.0rc1/tests/unit/test_assertions.py +498 -0
  625. geocase-1.0.0rc1/tests/unit/test_case_models.py +361 -0
  626. geocase-1.0.0rc1/tests/unit/test_cases.py +1193 -0
  627. geocase-1.0.0rc1/tests/unit/test_catalog_diagrams.py +106 -0
  628. geocase-1.0.0rc1/tests/unit/test_format_compliance.py +197 -0
  629. geocase-1.0.0rc1/tests/unit/test_format_specific_cases.py +269 -0
  630. geocase-1.0.0rc1/tests/unit/test_loader.py +207 -0
  631. geocase-1.0.0rc1/tests/unit/test_manifests.py +148 -0
  632. geocase-1.0.0rc1/tests/unit/test_public_api.py +182 -0
  633. geocase-1.0.0rc1/tests/unit/test_pytest_plugin.py +184 -0
  634. geocase-1.0.0rc1/tests/unit/test_raster_action_plan.py +243 -0
  635. geocase-1.0.0rc1/tests/unit/test_raster_loaders.py +69 -0
  636. geocase-1.0.0rc1/tests/unit/test_raster_manifest_followon.py +239 -0
  637. geocase-1.0.0rc1/tests/unit/test_raster_priority2_4_families.py +277 -0
  638. geocase-1.0.0rc1/tests/unit/test_registry.py +292 -0
  639. geocase-1.0.0rc1/tests/unit/test_remote_cases.py +311 -0
  640. geocase-1.0.0rc1/tests/unit/test_selectors.py +300 -0
  641. geocase-1.0.0rc1/tests/unit/test_suites.py +276 -0
  642. geocase-1.0.0rc1/tests/unit/test_validate_catalog_manifests.py +209 -0
  643. geocase-1.0.0rc1/tests/unit/test_verify_dist.py +69 -0
@@ -0,0 +1,38 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # Distribution / packaging
7
+ build/
8
+ dist/
9
+ *.egg-info/
10
+ *.egg
11
+
12
+ # Virtual environments
13
+ .venv/
14
+ venv/
15
+ env/
16
+
17
+ # IDE
18
+ .vscode/
19
+ .idea/
20
+ *.swp
21
+ *.swo
22
+
23
+ # Testing
24
+ .pytest_cache/
25
+ .coverage
26
+ htmlcov/
27
+ .mypy_cache/
28
+ .ruff_cache/
29
+
30
+ # MkDocs
31
+ site/
32
+
33
+ # OS files
34
+ .DS_Store
35
+ Thumbs.db
36
+
37
+ # GeoCase storage cache
38
+ .geocase_cache/
@@ -0,0 +1,103 @@
1
+ # Changelog
2
+
3
+ All notable changes to GeoCase are documented here.
4
+
5
+ The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this
6
+ project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [1.0.0] — 2026-08-02
9
+
10
+ First stable release, and the first release published to PyPI. Version `0.1.0` was never
11
+ uploaded.
12
+
13
+ ### The compatibility promise
14
+
15
+ v1.0 makes a stability commitment on **two surfaces only**:
16
+
17
+ 1. **The pytest workflow** — the `geocase_case` / `geocase` fixtures and the
18
+ `geocase_case`, `geocase_suite`, and `geocase_select` markers.
19
+ 2. **The public API** — the 27 names exported from `import geocase`, pinned against a
20
+ literal in `tests/unit/test_public_api.py`.
21
+
22
+ Everything else — module layout, internal helpers, the shape of `geocase.catalog` — is
23
+ internal and may change in a minor release. The promise is deliberately narrow because
24
+ those two surfaces are the genuinely mature ones; a wider claim would make the 1.0 label
25
+ dishonest.
26
+
27
+ ### Breaking changes
28
+
29
+ - **The command-line interface and its `[project.scripts]` entry point have been
30
+ removed.** The declared `geocase` console script was broken in every install — it
31
+ pointed at a module that raised `ImportError` — so no working usage can depend on it.
32
+ There is no CLI in v1.0. Use the Python API or the pytest plugin.
33
+
34
+ ### Added
35
+
36
+ - **Public API** (`import geocase`): a pinned 27-name surface covering case discovery,
37
+ loading, and inspection — `list_cases`, `get_case`, `load_case`, `show_case`,
38
+ `list_suites`, `get_suite`, `__version__`, the case classes, the metadata models and
39
+ enums, and `RemoteCaseUnavailableError`.
40
+ - **`docs/dataset-catalog.md`**: what the catalog contains, why each format was chosen,
41
+ the geodetic rationale for every coordinate cluster, and an honest list of coverage
42
+ gaps.
43
+ - **Generated catalog pages** under `docs/_generated/catalog/`: an index plus one page
44
+ per case, per risk type, and per format, carrying `schema.org/Dataset` JSON-LD.
45
+ - **Manifest support**: `extended-manifests/*.yaml` parse and resolve, remote case ids are
46
+ discoverable through the registry and `show_case`, and `GEOCASE_MANIFESTS` selects which
47
+ manifests are loaded.
48
+ - **CI quality gates**: `ruff check` and `ruff format --check`, `mypy`, a Python
49
+ 3.11/3.14 test matrix, and non-blocking coverage reporting.
50
+ - **Catalog integrity gates**: orphaned case metadata, manifest validity (shadowed ids,
51
+ cross-manifest duplicates, malformed digests, dangling `bundled_analog` references),
52
+ `size_class` versus real on-disk payload, generated-page drift, and case ids named in
53
+ hand-written docs.
54
+
55
+ ### Changed
56
+
57
+ - **Bundled data shrank from 36 MB to 4.2 MB.** Five SpatiaLite fixtures declared
58
+ `size_class: tiny` were 6.7 MB each; `size_class` now has enforced byte thresholds.
59
+ - `cases/raster.py` loads through `loaders/rasterio_loader.py`, making it the single
60
+ raster load path.
61
+ - `requires-python` is `>=3.11`, with classifiers for 3.11 through 3.14 — the versions
62
+ actually tested rather than the ones plausibly supported.
63
+ - Development status classifier: `3 - Alpha` → `5 - Production/Stable`.
64
+ - `project.urls` now point at GitLab, where the project actually lives.
65
+ - The case schema's `format` enum went from 7 values to 17, and its `assertions` block
66
+ from 6 documented fields to all 16. Both are now pinned to the models by a test.
67
+
68
+ ### Fixed
69
+
70
+ - The raster coverage matrix reported 25 of 30 cases: the generator's glob missed the five
71
+ `footprint_edge_cases` files. Because the artifact was gated by `git diff --exit-code`,
72
+ CI was actively enforcing the wrong number.
73
+ - Case pages linked risk hubs at `../../risk/`, one level too high, producing 187 broken
74
+ links. `mkdocs build --strict` now passes.
75
+ - `materialize_case` raised an internal `No case root found` for manifest cases instead of
76
+ an actionable error; both error paths are now asserted in tests.
77
+ - The registry singleton ignored `GEOCASE_MANIFESTS` changes after first use; resolved
78
+ manifest paths are part of the cache key.
79
+
80
+ ### Removed
81
+
82
+ - The `cli/` package and its entry point (see Breaking changes).
83
+ - `catalog/validators.py` — an empty stub nothing imported.
84
+ - `raster/affine_transform_quirk/` — an empty case directory that shipped in the wheel
85
+ while appearing in no index. The rotated/skewed-transform coverage it implied is a
86
+ genuine gap, now tracked on the v1.1 list rather than implied by a placeholder.
87
+
88
+ ### Deferred to v1.1
89
+
90
+ Stated as decisions, not omissions:
91
+
92
+ - **Remote dataset transport.** Declared remote cases are discoverable and raise clear
93
+ errors, but nothing downloads, caches, or unpacks. Both manifests are entirely
94
+ placeholder — every `sha256` is `replace_me`, every `base_uri` is `example.org`. The
95
+ gate for reopening this is concrete: at least one real published archive with a real
96
+ sha256.
97
+ - **Rotated/skewed affine transforms and non-square pixels**, and **southern-hemisphere
98
+ UTM coverage** — see the coverage gaps in the dataset catalog.
99
+
100
+ ### Known numbers
101
+
102
+ 134 bundled cases (103 vector, 30 raster, 1 NetCDF) across 16 formats, 4.2 MB of bundled
103
+ data, 780 passing tests, 54% line coverage.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2024 Farzin Ashouri
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,173 @@
1
+ Metadata-Version: 2.4
2
+ Name: geocase
3
+ Version: 1.0.0rc1
4
+ Summary: A curated library of geospatial test cases for automated and parameterized testing.
5
+ Project-URL: Homepage, https://github.com/farzinashouri/geocase
6
+ Project-URL: Documentation, https://farzinashouri.github.io/geocase
7
+ Project-URL: Repository, https://github.com/farzinashouri/geocase
8
+ Project-URL: Issues, https://github.com/farzinashouri/geocase/issues
9
+ Project-URL: Changelog, https://github.com/farzinashouri/geocase/blob/main/CHANGELOG.md
10
+ Author: Farzin Ashouri
11
+ License-Expression: MIT
12
+ License-File: LICENSE
13
+ Keywords: geospatial,gis,pytest,test-cases,testing
14
+ Classifier: Development Status :: 5 - Production/Stable
15
+ Classifier: Framework :: Pytest
16
+ Classifier: Intended Audience :: Developers
17
+ Classifier: License :: OSI Approved :: MIT License
18
+ Classifier: Programming Language :: Python :: 3
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Classifier: Programming Language :: Python :: 3.14
23
+ Classifier: Topic :: Scientific/Engineering :: GIS
24
+ Classifier: Topic :: Software Development :: Testing
25
+ Requires-Python: >=3.11
26
+ Requires-Dist: pydantic>=2.0
27
+ Requires-Dist: pyyaml>=6.0
28
+ Provides-Extra: all
29
+ Requires-Dist: geopandas>=0.14; extra == 'all'
30
+ Requires-Dist: netcdf4>=1.6; extra == 'all'
31
+ Requires-Dist: pyarrow>=14.0; extra == 'all'
32
+ Requires-Dist: rasterio>=1.3; extra == 'all'
33
+ Requires-Dist: shapely>=2.0; extra == 'all'
34
+ Requires-Dist: xarray>=2023.1; extra == 'all'
35
+ Provides-Extra: dev
36
+ Requires-Dist: geopandas>=0.14; extra == 'dev'
37
+ Requires-Dist: mypy>=1.0; extra == 'dev'
38
+ Requires-Dist: netcdf4>=1.6; extra == 'dev'
39
+ Requires-Dist: pyarrow>=14.0; extra == 'dev'
40
+ Requires-Dist: pytest-cov>=4.0; extra == 'dev'
41
+ Requires-Dist: pytest>=7.0; extra == 'dev'
42
+ Requires-Dist: rasterio>=1.3; extra == 'dev'
43
+ Requires-Dist: ruff<0.16,>=0.15.7; extra == 'dev'
44
+ Requires-Dist: shapely>=2.0; extra == 'dev'
45
+ Requires-Dist: types-pyyaml; extra == 'dev'
46
+ Requires-Dist: types-shapely; extra == 'dev'
47
+ Requires-Dist: xarray>=2023.1; extra == 'dev'
48
+ Provides-Extra: docs
49
+ Requires-Dist: mkdocs-material>=9.0; extra == 'docs'
50
+ Requires-Dist: mkdocs>=1.5; extra == 'docs'
51
+ Provides-Extra: netcdf
52
+ Requires-Dist: netcdf4>=1.6; extra == 'netcdf'
53
+ Requires-Dist: xarray>=2023.1; extra == 'netcdf'
54
+ Provides-Extra: raster
55
+ Requires-Dist: rasterio>=1.3; extra == 'raster'
56
+ Provides-Extra: vector
57
+ Requires-Dist: geopandas>=0.14; extra == 'vector'
58
+ Requires-Dist: pyarrow>=14.0; extra == 'vector'
59
+ Requires-Dist: shapely>=2.0; extra == 'vector'
60
+ Description-Content-Type: text/markdown
61
+
62
+ # GeoCase
63
+
64
+ GeoCase is a geospatial testing toolkit and case catalog for realistic, reproducible `pytest` tests.
65
+
66
+ > Status: **1.0**. The compatibility promise covers two surfaces — the `pytest` workflow (fixtures and markers) and the `import geocase` public API. 134 bundled cases, 4.2 MB. Remote dataset transport is deferred to v1.1; see the [changelog](CHANGELOG.md).
67
+
68
+ The main goal is simple: use plain `pytest` with a few GeoCase fixtures and markers to run your geospatial code against curated edge cases.
69
+
70
+ Instead of hand-picking random sample files, you select packaged cases (vector, raster, NetCDF) and run your function against scenarios such as CRS issues, dateline crossing, topology problems, and NoData behavior.
71
+
72
+ ## Quick Start
73
+
74
+ ### 1) Install
75
+
76
+ For local development in this repo:
77
+
78
+ ```bash
79
+ pip install -e ".[dev]"
80
+ ```
81
+
82
+ When a package release is published, install from the package index:
83
+
84
+ ```bash
85
+ pip install "geocase[all]"
86
+ ```
87
+
88
+ Or from conda-forge — note the extras are not packaged there, since bundling
89
+ GDAL would make the conda package far heavier than the PyPI equivalent:
90
+
91
+ ```bash
92
+ conda install -c conda-forge geocase
93
+ ```
94
+
95
+ ### 2) Write a test with GeoCase markers
96
+
97
+ ```python
98
+ import pytest
99
+
100
+
101
+ @pytest.mark.geocase_case("dateline_crossing_polygon")
102
+ def test_vector_case_loads(geocase_case) -> None:
103
+ gdf = geocase_case.load()
104
+ assert geocase_case.id == "dateline_crossing_polygon"
105
+ assert gdf.crs is not None
106
+
107
+
108
+ @pytest.mark.geocase_select(category="raster")
109
+ def test_all_raster_cases_have_pixels(geocase) -> None:
110
+ data, _, _ = geocase.read(1)
111
+ assert data.size > 0
112
+ ```
113
+
114
+ ### 3) Run tests
115
+
116
+ ```bash
117
+ pytest -v
118
+ ```
119
+
120
+ Run only GeoCase-marked tests:
121
+
122
+ ```bash
123
+ pytest -m "geocase_case or geocase_suite or geocase_select" -v
124
+ ```
125
+
126
+ ## CI Jobs
127
+
128
+ This repository uses GitHub Actions, defined in `.github/workflows/`.
129
+
130
+ `ci.yml` runs on pushes to `main` and on pull requests:
131
+
132
+ - `catalog` — catalog integrity checks (`build_case_index.py` smoke check,
133
+ `validate_catalog.py`, fixture and checksum gates, generated-page freshness)
134
+ - `tests` — the whole `tests/` directory on Python 3.11 and 3.14, reporting
135
+ coverage (not gated)
136
+ - `lint` — `ruff format --check` and `ruff check` over `src` and `tests`
137
+ - `typecheck` — `mypy src`
138
+ - `docs` — `mkdocs build --strict`
139
+
140
+ `release.yml` runs only on `vX.Y.Z` tags; see
141
+ [Releasing](contributing/releasing.md).
142
+
143
+ Local equivalents:
144
+
145
+ ```bash
146
+ python scripts/build_case_index.py --check
147
+ python scripts/validate_catalog.py
148
+
149
+ python -m pytest tests -q
150
+ ruff format --check src tests && ruff check src tests
151
+ ```
152
+
153
+ ## Core Concepts
154
+
155
+ - `@pytest.mark.geocase_case(...)`: select explicit case IDs.
156
+ - `@pytest.mark.geocase_suite(...)`: use named suites.
157
+ - `@pytest.mark.geocase_select(...)`: select by metadata (`category`, `format`, `geometry_type`, `tags`, `risk_types_any`, etc.).
158
+ - `geocase`: auto-parameterized fixture (one invocation per resolved case).
159
+ - `geocase_case`: convenience fixture for exactly one resolved case.
160
+ - CLI tooling is optional; the primary workflow is plain `pytest`.
161
+
162
+ If a GeoCase marker is missing, resolves no cases, refers to an unknown suite, or `geocase_case` resolves more than one case, the plugin now raises a focused `pytest.UsageError` that explains what to fix.
163
+
164
+ ## Learn More
165
+
166
+ - [`docs/getting-started.md`](docs/getting-started.md)
167
+ - [`docs/testing-your-function-with-geocase.md`](docs/testing-your-function-with-geocase.md)
168
+ - [`docs/case-discovery.md`](docs/case-discovery.md)
169
+ - [`docs/assertions-reference.md`](docs/assertions-reference.md)
170
+ - [`docs/examples-index.md`](docs/examples-index.md)
171
+ - [`docs/plans/development-plan.md`](docs/plans/development-plan.md)
172
+ - [`docs/contributing/workflow.md`](docs/contributing/workflow.md)
173
+ - [`docs/design/case-recommendation-service.md`](docs/design/case-recommendation-service.md)
@@ -0,0 +1,112 @@
1
+ # GeoCase
2
+
3
+ GeoCase is a geospatial testing toolkit and case catalog for realistic, reproducible `pytest` tests.
4
+
5
+ > Status: **1.0**. The compatibility promise covers two surfaces — the `pytest` workflow (fixtures and markers) and the `import geocase` public API. 134 bundled cases, 4.2 MB. Remote dataset transport is deferred to v1.1; see the [changelog](CHANGELOG.md).
6
+
7
+ The main goal is simple: use plain `pytest` with a few GeoCase fixtures and markers to run your geospatial code against curated edge cases.
8
+
9
+ Instead of hand-picking random sample files, you select packaged cases (vector, raster, NetCDF) and run your function against scenarios such as CRS issues, dateline crossing, topology problems, and NoData behavior.
10
+
11
+ ## Quick Start
12
+
13
+ ### 1) Install
14
+
15
+ For local development in this repo:
16
+
17
+ ```bash
18
+ pip install -e ".[dev]"
19
+ ```
20
+
21
+ When a package release is published, install from the package index:
22
+
23
+ ```bash
24
+ pip install "geocase[all]"
25
+ ```
26
+
27
+ Or from conda-forge — note the extras are not packaged there, since bundling
28
+ GDAL would make the conda package far heavier than the PyPI equivalent:
29
+
30
+ ```bash
31
+ conda install -c conda-forge geocase
32
+ ```
33
+
34
+ ### 2) Write a test with GeoCase markers
35
+
36
+ ```python
37
+ import pytest
38
+
39
+
40
+ @pytest.mark.geocase_case("dateline_crossing_polygon")
41
+ def test_vector_case_loads(geocase_case) -> None:
42
+ gdf = geocase_case.load()
43
+ assert geocase_case.id == "dateline_crossing_polygon"
44
+ assert gdf.crs is not None
45
+
46
+
47
+ @pytest.mark.geocase_select(category="raster")
48
+ def test_all_raster_cases_have_pixels(geocase) -> None:
49
+ data, _, _ = geocase.read(1)
50
+ assert data.size > 0
51
+ ```
52
+
53
+ ### 3) Run tests
54
+
55
+ ```bash
56
+ pytest -v
57
+ ```
58
+
59
+ Run only GeoCase-marked tests:
60
+
61
+ ```bash
62
+ pytest -m "geocase_case or geocase_suite or geocase_select" -v
63
+ ```
64
+
65
+ ## CI Jobs
66
+
67
+ This repository uses GitHub Actions, defined in `.github/workflows/`.
68
+
69
+ `ci.yml` runs on pushes to `main` and on pull requests:
70
+
71
+ - `catalog` — catalog integrity checks (`build_case_index.py` smoke check,
72
+ `validate_catalog.py`, fixture and checksum gates, generated-page freshness)
73
+ - `tests` — the whole `tests/` directory on Python 3.11 and 3.14, reporting
74
+ coverage (not gated)
75
+ - `lint` — `ruff format --check` and `ruff check` over `src` and `tests`
76
+ - `typecheck` — `mypy src`
77
+ - `docs` — `mkdocs build --strict`
78
+
79
+ `release.yml` runs only on `vX.Y.Z` tags; see
80
+ [Releasing](contributing/releasing.md).
81
+
82
+ Local equivalents:
83
+
84
+ ```bash
85
+ python scripts/build_case_index.py --check
86
+ python scripts/validate_catalog.py
87
+
88
+ python -m pytest tests -q
89
+ ruff format --check src tests && ruff check src tests
90
+ ```
91
+
92
+ ## Core Concepts
93
+
94
+ - `@pytest.mark.geocase_case(...)`: select explicit case IDs.
95
+ - `@pytest.mark.geocase_suite(...)`: use named suites.
96
+ - `@pytest.mark.geocase_select(...)`: select by metadata (`category`, `format`, `geometry_type`, `tags`, `risk_types_any`, etc.).
97
+ - `geocase`: auto-parameterized fixture (one invocation per resolved case).
98
+ - `geocase_case`: convenience fixture for exactly one resolved case.
99
+ - CLI tooling is optional; the primary workflow is plain `pytest`.
100
+
101
+ If a GeoCase marker is missing, resolves no cases, refers to an unknown suite, or `geocase_case` resolves more than one case, the plugin now raises a focused `pytest.UsageError` that explains what to fix.
102
+
103
+ ## Learn More
104
+
105
+ - [`docs/getting-started.md`](docs/getting-started.md)
106
+ - [`docs/testing-your-function-with-geocase.md`](docs/testing-your-function-with-geocase.md)
107
+ - [`docs/case-discovery.md`](docs/case-discovery.md)
108
+ - [`docs/assertions-reference.md`](docs/assertions-reference.md)
109
+ - [`docs/examples-index.md`](docs/examples-index.md)
110
+ - [`docs/plans/development-plan.md`](docs/plans/development-plan.md)
111
+ - [`docs/contributing/workflow.md`](docs/contributing/workflow.md)
112
+ - [`docs/design/case-recommendation-service.md`](docs/design/case-recommendation-service.md)
@@ -0,0 +1,22 @@
1
+ from __future__ import annotations
2
+
3
+ from importlib import metadata
4
+ import sys
5
+ from pathlib import Path
6
+
7
+ ROOT = Path(__file__).resolve().parent
8
+ SRC = ROOT / "src"
9
+
10
+ if str(SRC) not in sys.path:
11
+ sys.path.insert(0, str(SRC))
12
+
13
+
14
+ def _has_geocase_pytest_entry_point() -> bool:
15
+ try:
16
+ metadata.version("geocase")
17
+ except metadata.PackageNotFoundError:
18
+ return False
19
+ return True
20
+
21
+
22
+ pytest_plugins = [] if _has_geocase_pytest_entry_point() else ["geocase.pytest_plugin"]
@@ -0,0 +1,172 @@
1
+ """Pytest configuration for the GeoCase example suites.
2
+
3
+ The "simple" interview suite (``test_easy_geospatial_interview_questions_simple``)
4
+ runs the shared edge-case scenarios against the *naive* reference
5
+ implementation. Those scenarios are "expose"/"discover" demonstrations: they
6
+ assert the correct, edge-case-aware behaviour that only the ``_perfect``
7
+ implementation provides, so the simple helper is expected to fail exactly the
8
+ inputs listed below (every other input, and every ``_perfect`` counterpart,
9
+ passes).
10
+
11
+ We mark only those specific nodes ``xfail(strict=True)`` from here, instead of
12
+ marking whole test functions, so that:
13
+
14
+ * the parametrized "handles_all_cases" tests still report normal ``passed`` on
15
+ the inputs the simple helper *does* handle (no ``xpassed`` noise), and
16
+ * if the simple helper is ever improved to handle one of these inputs, the
17
+ strict xfail turns into a failure and prompts us to drop it from this list.
18
+ """
19
+
20
+ from __future__ import annotations
21
+
22
+ _SIMPLE_SUITE_FILENAME = "test_easy_geospatial_interview_questions_simple.py"
23
+
24
+ # One reason per demonstration scenario, keyed by the (unparametrized) test
25
+ # function name.
26
+ _SIMPLE_LIMITATION_REASONS: dict[str, str] = {
27
+ "test_reproject_point_normalizes_wrapped_longitude_fixture": (
28
+ "simple reproject_point does not normalize wrapped longitudes"
29
+ ),
30
+ "test_reproject_point_handles_all_point_cases": (
31
+ "simple reproject_point does not normalize dateline-wrapped longitudes"
32
+ ),
33
+ "test_point_in_polygon_excludes_boundary_point": (
34
+ "simple point_in_polygon treats boundary points as inside"
35
+ ),
36
+ "test_get_bbox_classic_antimeridian_polygon_uses_minimal_span": (
37
+ "simple get_bbox does not compute the minimal antimeridian span"
38
+ ),
39
+ "test_get_bbox_handles_all_polygon_cases": (
40
+ "simple get_bbox does not compute the minimal antimeridian span"
41
+ ),
42
+ "test_buffer_in_meters_keeps_dateline_polygon_valid": (
43
+ "simple buffer_in_meters does not handle dateline-crossing geometries"
44
+ ),
45
+ "test_buffer_in_meters_handles_all_polygon_cases": (
46
+ "simple buffer_in_meters assumes WGS84 input and breaks on projected/"
47
+ "dateline geometries"
48
+ ),
49
+ "test_get_utm_epsg_handles_svalbard_special_zone": (
50
+ "simple get_utm_epsg lacks Svalbard/Norway special-zone handling"
51
+ ),
52
+ "test_get_utm_epsg_handles_all_utm_polygon_cases": (
53
+ "simple get_utm_epsg lacks UTM special-zone handling"
54
+ ),
55
+ "test_area_m2_rejects_invalid_self_intersection": (
56
+ "simple area_m2 does not validate or reject invalid geometries"
57
+ ),
58
+ "test_area_m2_handles_all_polygon_cases": (
59
+ "simple area_m2 assumes WGS84 input and does not reject invalid geometries"
60
+ ),
61
+ "test_dissolve_polygons_repairs_invalid_inputs_before_union": (
62
+ "simple dissolve_polygons does not repair invalid inputs before union"
63
+ ),
64
+ "test_dissolve_polygons_handles_all_polygon_cases": (
65
+ "simple dissolve_polygons does not repair invalid inputs before union"
66
+ ),
67
+ "test_clip_raster_accepts_wgs84_bbox_for_projected_raster": (
68
+ "simple clip_raster assumes the bbox CRS matches the raster CRS"
69
+ ),
70
+ "test_pixel_to_world_returns_pixel_center_coordinates": (
71
+ "simple pixel_to_world returns the pixel corner, not its center"
72
+ ),
73
+ "test_rasters_aligned_accepts_shifted_raster_on_same_pixel_lattice": (
74
+ "simple rasters_aligned is overly strict about origin offsets"
75
+ ),
76
+ "test_reproject_geometry_handles_all_polygon_cases": (
77
+ "simple reproject_geometry does not normalize dateline longitudes"
78
+ ),
79
+ "test_reproject_geometry_normalizes_dateline_case_longitudes": (
80
+ "simple reproject_geometry does not normalize dateline longitudes"
81
+ ),
82
+ "test_find_intersections_reports_metric_area": (
83
+ "simple find_intersections reports area in degrees, not metres"
84
+ ),
85
+ "test_validate_polygon_geometry_accepts_repairable_invalid_polygon": (
86
+ "simple validate_polygon_geometry does not repair fixable invalid polygons"
87
+ ),
88
+ "test_validate_polygon_geometry_handles_all_polygon_cases": (
89
+ "simple validate_polygon_geometry does not repair fixable invalid polygons"
90
+ ),
91
+ "test_sample_raster_at_lonlat_masks_nodata_pixel": (
92
+ "simple sample_raster_at_lonlat returns the raw NoData sentinel"
93
+ ),
94
+ "test_cluster_points_keeps_dateline_chain_connected": (
95
+ "simple cluster_points does not keep a transitive dateline chain together"
96
+ ),
97
+ "test_cluster_points_handles_all_point_cases": (
98
+ "simple cluster_points assumes WGS84 input and breaks on projected/dateline "
99
+ "points"
100
+ ),
101
+ "test_fix_geometry_returns_polygonal_output_for_spike_case": (
102
+ "simple fix_geometry returns mixed-geometry output for spike fixtures"
103
+ ),
104
+ "test_rasterize_geometries_burns_pixels_for_geocase_polygon": (
105
+ "simple rasterize_geometries does not reproject geometry to the raster CRS"
106
+ ),
107
+ "test_rasterize_geometries_handles_all_rasterization_polygon_cases": (
108
+ "simple rasterize_geometries does not reproject geometry to the raster CRS"
109
+ ),
110
+ "test_crosses_antimeridian_matches_case_expectation": (
111
+ "simple crosses_antimeridian misses >180-degree dateline encodings"
112
+ ),
113
+ "test_crosses_antimeridian_handles_all_polygon_cases": (
114
+ "simple crosses_antimeridian misses >180-degree encodings and 3D coords"
115
+ ),
116
+ }
117
+
118
+ # The exact set of node names (``item.name``, including any ``[param]`` suffix)
119
+ # in the simple suite that the naive implementation is expected to fail.
120
+ _SIMPLE_EXPECTED_FAILURES: frozenset[str] = frozenset({
121
+ "test_reproject_point_normalizes_wrapped_longitude_fixture",
122
+ "test_reproject_point_handles_all_point_cases[vector-point-epsg4326-dateline-longitude-wrapping-reprojection]",
123
+ "test_point_in_polygon_excludes_boundary_point",
124
+ "test_get_bbox_classic_antimeridian_polygon_uses_minimal_span",
125
+ "test_get_bbox_handles_all_polygon_cases[vector-polygon-epsg4326-antimeridian-dateline]",
126
+ "test_buffer_in_meters_keeps_dateline_polygon_valid",
127
+ "test_buffer_in_meters_handles_all_polygon_cases[vector-polygon-epsg32633-rasterization-utm]",
128
+ "test_buffer_in_meters_handles_all_polygon_cases[vector-polygon-epsg4326-antimeridian-dateline-2]",
129
+ "test_get_utm_epsg_handles_svalbard_special_zone",
130
+ "test_get_utm_epsg_handles_all_utm_polygon_cases",
131
+ "test_area_m2_rejects_invalid_self_intersection",
132
+ "test_area_m2_handles_all_polygon_cases[vector-polygon-epsg32633-rasterization-utm]",
133
+ "test_area_m2_handles_all_polygon_cases[vector-polygon-epsg4326-invalid-self-intersection-topology]",
134
+ "test_area_m2_handles_all_polygon_cases[vector-polygon-epsg4326-invalid-repair-spike]",
135
+ "test_dissolve_polygons_repairs_invalid_inputs_before_union",
136
+ "test_dissolve_polygons_handles_all_polygon_cases[vector-polygon-epsg4326-invalid-self-intersection-topology]",
137
+ "test_dissolve_polygons_handles_all_polygon_cases[vector-polygon-epsg4326-invalid-repair-spike]",
138
+ "test_clip_raster_accepts_wgs84_bbox_for_projected_raster",
139
+ "test_pixel_to_world_returns_pixel_center_coordinates",
140
+ "test_rasters_aligned_accepts_shifted_raster_on_same_pixel_lattice",
141
+ "test_reproject_geometry_handles_all_polygon_cases[vector-polygon-epsg4326-antimeridian-dateline-2]",
142
+ "test_reproject_geometry_normalizes_dateline_case_longitudes",
143
+ "test_find_intersections_reports_metric_area",
144
+ "test_validate_polygon_geometry_accepts_repairable_invalid_polygon",
145
+ "test_validate_polygon_geometry_handles_all_polygon_cases[vector-polygon-epsg32633-rasterization-utm]",
146
+ "test_sample_raster_at_lonlat_masks_nodata_pixel",
147
+ "test_cluster_points_keeps_dateline_chain_connected",
148
+ "test_cluster_points_handles_all_point_cases[vector-point-epsg3857-epsg3857-valid-web-mercator]",
149
+ "test_cluster_points_handles_all_point_cases[vector-point-epsg4326-clustering-dateline-transitive-connectivity]",
150
+ "test_fix_geometry_returns_polygonal_output_for_spike_case",
151
+ "test_rasterize_geometries_burns_pixels_for_geocase_polygon",
152
+ "test_rasterize_geometries_handles_all_rasterization_polygon_cases",
153
+ "test_crosses_antimeridian_matches_case_expectation[_dateline_polygon_geometry-True]",
154
+ "test_crosses_antimeridian_handles_all_polygon_cases[vector-polygon-epsg32633-rasterization-utm]",
155
+ "test_crosses_antimeridian_handles_all_polygon_cases[vector-polygon-epsg4326-antimeridian-dateline-2]",
156
+ "test_crosses_antimeridian_handles_all_polygon_cases[vector-polygon-epsg4326-attributes-format-limitation-format-specific]",
157
+ })
158
+
159
+
160
+ def pytest_collection_modifyitems(config, items): # noqa: ARG001
161
+ """Mark the known simple-implementation deficiencies as strict xfails."""
162
+ import pytest
163
+
164
+ for item in items:
165
+ if item.fspath.basename != _SIMPLE_SUITE_FILENAME:
166
+ continue
167
+ if item.name not in _SIMPLE_EXPECTED_FAILURES:
168
+ continue
169
+ reason = _SIMPLE_LIMITATION_REASONS.get(item.originalname)
170
+ if reason is None:
171
+ continue
172
+ item.add_marker(pytest.mark.xfail(reason=reason, strict=True))