core-lens 0.1.dev120__tar.gz → 0.1.dev121__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.dev120 → core_lens-0.1.dev121}/PKG-INFO +1 -1
  2. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/examples/demo_mws.py +4 -3
  3. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/examples/demo_tehsil.py +6 -5
  4. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/_version.py +2 -2
  5. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/base/namespaces/plot.py +12 -7
  6. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.github/pull_request_template.md +0 -0
  7. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.github/workflows/ci.yml +0 -0
  8. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.github/workflows/gh-pages.yml +0 -0
  9. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.github/workflows/pre-release.yml +0 -0
  10. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.github/workflows/release.yml +0 -0
  11. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.gitignore +0 -0
  12. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.gitmessage +0 -0
  13. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.pre-commit-config.yaml +0 -0
  14. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/.python-version +0 -0
  15. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/CONTRIBUTING.md +0 -0
  16. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/LICENSE +0 -0
  17. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/README.md +0 -0
  18. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/SKILLS.md +0 -0
  19. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/Makefile +0 -0
  20. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/make.bat +0 -0
  21. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/concepts.md +0 -0
  22. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/conf.py +0 -0
  23. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/export.md +0 -0
  24. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/index.rst +0 -0
  25. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/intro.md +0 -0
  26. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/logging.md +0 -0
  27. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/plots.md +0 -0
  28. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/plugins.md +0 -0
  29. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/queries.md +0 -0
  30. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/quickstart.md +0 -0
  31. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/docs/source/stats.md +0 -0
  32. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/hooks/mypy.sh +0 -0
  33. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/hooks/no-parquet-outside-fixtures.sh +0 -0
  34. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/hooks/pytest.sh +0 -0
  35. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/pyproject.toml +0 -0
  36. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/__init__.py +0 -0
  37. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/__main__.py +0 -0
  38. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/aoi.py +0 -0
  39. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/base/__init__.py +0 -0
  40. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/base/entity.py +0 -0
  41. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/base/namespaces/__init__.py +0 -0
  42. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/base/namespaces/stats.py +0 -0
  43. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/base/result.py +0 -0
  44. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/base/view.py +0 -0
  45. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/entities/__init__.py +0 -0
  46. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/entities/mws.py +0 -0
  47. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/entities/tehsil.py +0 -0
  48. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/entities/waterbody.py +0 -0
  49. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/export/__init__.py +0 -0
  50. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/export/formats.py +0 -0
  51. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/py.typed +0 -0
  52. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/schema/__init__.py +0 -0
  53. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/schema/detection.py +0 -0
  54. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/schema/profile.py +0 -0
  55. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/utils/__init__.py +0 -0
  56. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/utils/polars_utils.py +0 -0
  57. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/utils/season.py +0 -0
  58. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/src/core_lens/utils/spatial.py +0 -0
  59. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/fixtures/generate_fixtures.py +0 -0
  60. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/conftest.py +0 -0
  61. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_aoi.py +0 -0
  62. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_entities.py +0 -0
  63. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_entity.py +0 -0
  64. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_export.py +0 -0
  65. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_main.py +0 -0
  66. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_plot.py +0 -0
  67. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_polars_utils.py +0 -0
  68. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_profile.py +0 -0
  69. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_result.py +0 -0
  70. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_schema_detection.py +0 -0
  71. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_schema_profile.py +0 -0
  72. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_season.py +0 -0
  73. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_season_config.py +0 -0
  74. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_spatial.py +0 -0
  75. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_stats.py +0 -0
  76. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/tests/unit/test_view.py +0 -0
  77. {core_lens-0.1.dev120 → core_lens-0.1.dev121}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: core-lens
3
- Version: 0.1.dev120
3
+ Version: 0.1.dev121
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
@@ -7,7 +7,7 @@ geometry, derive, stats, plot, temporal queries, and export.
7
7
 
8
8
  Prerequisites
9
9
  -------------
10
- pip install core-lens geopandas shapely polars scipy plotly lonboard
10
+ pip install core-lens geopandas shapely polars scipy bokeh lonboard
11
11
 
12
12
  Data layout expected
13
13
  --------------------
@@ -30,6 +30,7 @@ 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
34
 
34
35
  from core_lens import AoI, SeasonConfig
35
36
  from core_lens.entities import MWSEntity
@@ -253,7 +254,7 @@ except Exception:
253
254
 
254
255
  try:
255
256
  line_fig = result_annual.plot.timeseries(x="year", y="dw_et")
256
- line_fig.write_html("mws_et_trend.html")
257
+ save(line_fig, filename="mws_et_trend.html")
257
258
  print("Saved line plot to mws_et_trend.html")
258
259
  except Exception:
259
260
  pass
@@ -262,7 +263,7 @@ except Exception:
262
263
  # ── 21. Plot — scatter ───────────────────────────────────────────────────────
263
264
  try:
264
265
  scatter_fig = result_static_derived.plot.scatter(x="area_km2", y="dryspell_score")
265
- scatter_fig.write_html("mws_scatter.html")
266
+ save(scatter_fig, filename="mws_scatter.html")
266
267
  except Exception:
267
268
  pass
268
269
 
@@ -7,7 +7,7 @@ geometry, derive, stats, plot, and export.
7
7
 
8
8
  Prerequisites
9
9
  -------------
10
- pip install core-lens geopandas shapely polars scipy plotly lonboard
10
+ pip install core-lens geopandas shapely polars scipy bokeh lonboard
11
11
 
12
12
  Data layout expected
13
13
  --------------------
@@ -33,6 +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
37
 
37
38
 
38
39
  DATA_ROOT = "data/"
@@ -288,19 +289,19 @@ result_plot = (
288
289
 
289
290
  # ── 19. Plot — scatter ────────────────────────────────────────────────────────
290
291
  scatter_fig = result_plot.plot.scatter(x="area_km2", y="Shape_Leng")
291
- scatter_fig.show()
292
+ show(scatter_fig)
292
293
 
293
294
 
294
295
  # ── 20. Plot — distribution ───────────────────────────────────────────────────
295
296
  dist_fig = result_plot.plot.distribution(x="area_km2")
296
- dist_fig.show()
297
+ show(dist_fig)
297
298
 
298
299
 
299
300
  # ── 21. Plot — correlation matrix ────────────────────────────────────────────
300
301
  corr_fig = result_plot.plot.correlation(
301
302
  columns=["area_km2", "Shape_Leng", "compactness"]
302
303
  )
303
- corr_fig.show()
304
+ show(corr_fig)
304
305
 
305
306
 
306
307
  # ── 22. Plot — heatmap ────────────────────────────────────────────────────────
@@ -312,7 +313,7 @@ heatmap_fig = result_plot.plot.heatmap(
312
313
  y="STATE",
313
314
  value="area_km2",
314
315
  )
315
- heatmap_fig.show()
316
+ show(heatmap_fig)
316
317
 
317
318
 
318
319
  # ── 23. AoI map ───────────────────────────────────────────────────────────────
@@ -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.dev120'
22
- __version_tuple__ = version_tuple = (0, 1, 'dev120')
21
+ __version__ = version = '0.1.dev121'
22
+ __version_tuple__ = version_tuple = (0, 1, 'dev121')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -277,15 +277,20 @@ class PlotNamespace:
277
277
  # --- Direct Polars → GeoArrow → Lonboard path (zero Shapely, zero GeoPandas) ---
278
278
  arrow_table = _wkb_to_arrow_table(df, geom_col, extra_cols=extra)
279
279
 
280
+ import warnings
281
+
280
282
  # Extract colormap values from the already-filtered arrow_table.
281
283
  # arrow_table has the same row order as df post-filter, so indices align.
282
- values = np.asarray(arrow_table.column(column).to_pylist())
283
- v_min, v_max = np.nanmin(values), np.nanmax(values)
284
- norm_values = (
285
- (values - v_min) / (v_max - v_min)
286
- if v_max > v_min
287
- else np.zeros_like(values)
288
- )
284
+ values = np.asarray(arrow_table.column(column).to_pylist(), dtype=float)
285
+
286
+ with warnings.catch_warnings():
287
+ warnings.simplefilter("ignore", category=RuntimeWarning)
288
+ v_min, v_max = np.nanmin(values), np.nanmax(values)
289
+
290
+ if np.isnan(v_min) or np.isnan(v_max) or v_min >= v_max:
291
+ norm_values = np.where(np.isnan(values), np.nan, 0.0)
292
+ else:
293
+ norm_values = (values - v_min) / (v_max - v_min)
289
294
 
290
295
  cmap = mpl.colormaps["plasma"]
291
296
 
File without changes
File without changes
File without changes
File without changes