core-lens 0.1.dev121__tar.gz → 0.1.dev123__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 (77) hide show
  1. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/PKG-INFO +1 -1
  2. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/examples/demo_mws.py +12 -6
  3. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/examples/demo_tehsil.py +1 -1
  4. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/_version.py +2 -2
  5. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/base/namespaces/plot.py +25 -4
  6. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.github/pull_request_template.md +0 -0
  7. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.github/workflows/ci.yml +0 -0
  8. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.github/workflows/gh-pages.yml +0 -0
  9. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.github/workflows/pre-release.yml +0 -0
  10. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.github/workflows/release.yml +0 -0
  11. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.gitignore +0 -0
  12. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.gitmessage +0 -0
  13. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.pre-commit-config.yaml +0 -0
  14. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/.python-version +0 -0
  15. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/CONTRIBUTING.md +0 -0
  16. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/LICENSE +0 -0
  17. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/README.md +0 -0
  18. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/SKILLS.md +0 -0
  19. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/Makefile +0 -0
  20. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/make.bat +0 -0
  21. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/concepts.md +0 -0
  22. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/conf.py +0 -0
  23. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/export.md +0 -0
  24. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/index.rst +0 -0
  25. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/intro.md +0 -0
  26. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/logging.md +0 -0
  27. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/plots.md +0 -0
  28. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/plugins.md +0 -0
  29. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/queries.md +0 -0
  30. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/quickstart.md +0 -0
  31. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/docs/source/stats.md +0 -0
  32. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/hooks/mypy.sh +0 -0
  33. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/hooks/no-parquet-outside-fixtures.sh +0 -0
  34. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/hooks/pytest.sh +0 -0
  35. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/pyproject.toml +0 -0
  36. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/__init__.py +0 -0
  37. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/__main__.py +0 -0
  38. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/aoi.py +0 -0
  39. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/base/__init__.py +0 -0
  40. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/base/entity.py +0 -0
  41. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/base/namespaces/__init__.py +0 -0
  42. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/base/namespaces/stats.py +0 -0
  43. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/base/result.py +0 -0
  44. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/base/view.py +0 -0
  45. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/entities/__init__.py +0 -0
  46. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/entities/mws.py +0 -0
  47. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/entities/tehsil.py +0 -0
  48. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/entities/waterbody.py +0 -0
  49. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/export/__init__.py +0 -0
  50. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/export/formats.py +0 -0
  51. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/py.typed +0 -0
  52. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/schema/__init__.py +0 -0
  53. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/schema/detection.py +0 -0
  54. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/schema/profile.py +0 -0
  55. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/utils/__init__.py +0 -0
  56. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/utils/polars_utils.py +0 -0
  57. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/utils/season.py +0 -0
  58. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/src/core_lens/utils/spatial.py +0 -0
  59. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/fixtures/generate_fixtures.py +0 -0
  60. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/conftest.py +0 -0
  61. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_aoi.py +0 -0
  62. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_entities.py +0 -0
  63. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_entity.py +0 -0
  64. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_export.py +0 -0
  65. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_main.py +0 -0
  66. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_plot.py +0 -0
  67. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_polars_utils.py +0 -0
  68. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_profile.py +0 -0
  69. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_result.py +0 -0
  70. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_schema_detection.py +0 -0
  71. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_schema_profile.py +0 -0
  72. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_season.py +0 -0
  73. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_season_config.py +0 -0
  74. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_spatial.py +0 -0
  75. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_stats.py +0 -0
  76. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/tests/unit/test_view.py +0 -0
  77. {core_lens-0.1.dev121 → core_lens-0.1.dev123}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: core-lens
3
- Version: 0.1.dev121
3
+ Version: 0.1.dev123
4
4
  Summary: Query, analyse, and visualise CoreStack's microwatershed and Earth science data through a clean, composable Python API.
5
5
  Project-URL: Homepage, https://github.com/ApoorvaKashyap/core-lens
6
6
  Project-URL: Issues, https://github.com/ApoorvaKashyap/core-lens/issues
@@ -30,11 +30,17 @@ from __future__ import annotations
30
30
 
31
31
  import polars as pl
32
32
  import shapely.geometry as sgeom
33
- from bokeh.io import show, save
33
+ from bokeh.io import save
34
34
 
35
35
  from core_lens import AoI, SeasonConfig
36
36
  from core_lens.entities import MWSEntity
37
37
  from core_lens.export import geoparquet
38
+ from core_lens.base.namespaces.stats import (
39
+ CorrelateMethod,
40
+ SimilarityMethod,
41
+ TestMethod,
42
+ )
43
+ from core_lens.base.view import Season
38
44
 
39
45
  DATA_ROOT = "/home/akashyap/Finals"
40
46
 
@@ -128,7 +134,7 @@ print("Resolution :", result_annual.resolution)
128
134
  print("Has geometry :", result_annual.has_geometry) # False by default
129
135
 
130
136
  # Fortnightly data for a specific season and year
131
- result_fn = view_barmer.between(season="kharif", year=2021).fortnightly
137
+ result_fn = view_barmer.between(season=Season.KHARIF, year=2021).fortnightly
132
138
  print("\nFortnightly columns (first 10):", result_fn.columns[:10])
133
139
 
134
140
 
@@ -171,7 +177,7 @@ print(desc_annual_by_entity.df().head(5))
171
177
  # Pairwise correlations on fortnightly data
172
178
  corr = result_fn.stats.correlate(
173
179
  columns=["df_precipitation", "df_et"],
174
- method="pearson",
180
+ method=CorrelateMethod.PEARSON,
175
181
  across="entity",
176
182
  )
177
183
  print("\nCorrelation (Precipitation vs ET):")
@@ -184,7 +190,7 @@ print(corr.df())
184
190
  test_result = result_static_derived.stats.test(
185
191
  column="di_avg_dryspe",
186
192
  groups="district",
187
- method="mann-whitney",
193
+ method=TestMethod.MANN_WHITNEY,
188
194
  )
189
195
  print("\nHypothesis test — dryspell by district:")
190
196
  print(test_result.df())
@@ -213,7 +219,7 @@ sim = result_static_derived.stats.similarity(
213
219
  "area_in_ha": None,
214
220
  "di_avg_dryspe": None,
215
221
  },
216
- method="euclidean",
222
+ method=SimilarityMethod.EUCLIDEAN,
217
223
  top_n=5,
218
224
  )
219
225
  print(f"\nMost similar MWS to {target_id}:")
@@ -290,7 +296,7 @@ print("GeoParquet written: output_mws.geoparquet")
290
296
 
291
297
  final = (
292
298
  aoi.mws.where(ba_name="Barmer")
293
- .between(season="kharif", year=2021)
299
+ .between(season=Season.KHARIF, year=2021)
294
300
  .fortnightly.derive(
295
301
  "et_ratio", (pl.col("df_et") / pl.col("df_precipitation")).round(3)
296
302
  )
@@ -33,7 +33,7 @@ from core_lens.base.namespaces.stats import (
33
33
  TestMethod,
34
34
  )
35
35
  import shapely.geometry as sgeom
36
- from bokeh.io import show, save
36
+ from bokeh.io import show
37
37
 
38
38
 
39
39
  DATA_ROOT = "data/"
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '0.1.dev121'
22
- __version_tuple__ = version_tuple = (0, 1, 'dev121')
21
+ __version__ = version = '0.1.dev123'
22
+ __version_tuple__ = version_tuple = (0, 1, 'dev123')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -144,12 +144,33 @@ def _wkb_to_arrow_table(
144
144
  idx = arrow_table.schema.get_field_index(geom_col)
145
145
  schema = arrow_table.schema.remove(idx)
146
146
 
147
+ import json
148
+
149
+ arr_geo = ac.Array(geo_col)
150
+ ac_geo = ac.ChunkedArray([arr_geo])
151
+ geom_field = arr_geo.field.with_name(geom_col)
152
+
153
+ ext_meta = dict(geom_field.metadata or {})
154
+ geo_meta = {}
155
+ if b"ARROW:extension:metadata" in ext_meta:
156
+ try:
157
+ geo_meta = json.loads(ext_meta[b"ARROW:extension:metadata"].decode("utf-8"))
158
+ except Exception:
159
+ pass
160
+ geo_meta["crs"] = "EPSG:4326"
161
+ ext_meta[b"ARROW:extension:metadata"] = json.dumps(geo_meta).encode("utf-8")
162
+ new_geom_field = geom_field.with_metadata(ext_meta)
163
+
164
+ new_fields = [
165
+ ac.Field.from_arrow(schema.field(i)) for i in range(len(schema.names))
166
+ ]
167
+ new_fields.insert(idx, new_geom_field)
168
+ new_schema = ac.Schema(new_fields)
169
+
147
170
  tbl_cols = [ac.ChunkedArray(arrow_table.column(c)) for c in schema.names]
148
- tbl_cols.insert(idx, ac.ChunkedArray([ac.Array(geo_col)]))
149
- names = list(schema.names)
150
- names.insert(idx, geom_col)
171
+ tbl_cols.insert(idx, ac_geo)
151
172
 
152
- tbl = ac.Table.from_arrays(tbl_cols, names=names)
173
+ tbl = ac.Table.from_arrays(tbl_cols, schema=new_schema)
153
174
  return tbl
154
175
 
155
176
 
File without changes
File without changes
File without changes
File without changes