core-lens 0.1.dev99__tar.gz → 0.1.dev100__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 (74) hide show
  1. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/PKG-INFO +1 -1
  2. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/_version.py +2 -2
  3. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/base/namespaces/plot.py +40 -16
  4. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.github/pull_request_template.md +0 -0
  5. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.github/workflows/ci.yml +0 -0
  6. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.github/workflows/gh-pages.yml +0 -0
  7. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.github/workflows/pre-release.yml +0 -0
  8. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.github/workflows/release.yml +0 -0
  9. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.gitignore +0 -0
  10. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.gitmessage +0 -0
  11. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.pre-commit-config.yaml +0 -0
  12. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/.python-version +0 -0
  13. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/CONTRIBUTING.md +0 -0
  14. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/LICENSE +0 -0
  15. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/README.md +0 -0
  16. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/SKILLS.md +0 -0
  17. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/Makefile +0 -0
  18. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/make.bat +0 -0
  19. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/concepts.md +0 -0
  20. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/conf.py +0 -0
  21. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/index.rst +0 -0
  22. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/intro.md +0 -0
  23. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/plots.md +0 -0
  24. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/plugins.md +0 -0
  25. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/queries.md +0 -0
  26. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/quickstart.md +0 -0
  27. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/docs/source/stats.md +0 -0
  28. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/examples/demo_mws.py +0 -0
  29. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/examples/demo_tehsil.py +0 -0
  30. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/hooks/mypy.sh +0 -0
  31. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/hooks/no-parquet-outside-fixtures.sh +0 -0
  32. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/hooks/pytest.sh +0 -0
  33. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/pyproject.toml +0 -0
  34. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/__init__.py +0 -0
  35. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/__main__.py +0 -0
  36. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/aoi.py +0 -0
  37. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/base/__init__.py +0 -0
  38. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/base/entity.py +0 -0
  39. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/base/namespaces/__init__.py +0 -0
  40. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/base/namespaces/stats.py +0 -0
  41. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/base/result.py +0 -0
  42. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/base/view.py +0 -0
  43. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/entities/__init__.py +0 -0
  44. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/entities/mws.py +0 -0
  45. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/entities/tehsil.py +0 -0
  46. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/export/__init__.py +0 -0
  47. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/export/formats.py +0 -0
  48. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/py.typed +0 -0
  49. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/schema/__init__.py +0 -0
  50. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/schema/detection.py +0 -0
  51. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/schema/profile.py +0 -0
  52. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/utils/__init__.py +0 -0
  53. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/utils/polars_utils.py +0 -0
  54. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/utils/season.py +0 -0
  55. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/src/core_lens/utils/spatial.py +0 -0
  56. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/fixtures/generate_fixtures.py +0 -0
  57. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/conftest.py +0 -0
  58. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_aoi.py +0 -0
  59. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_entities.py +0 -0
  60. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_entity.py +0 -0
  61. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_export.py +0 -0
  62. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_main.py +0 -0
  63. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_plot.py +0 -0
  64. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_polars_utils.py +0 -0
  65. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_profile.py +0 -0
  66. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_result.py +0 -0
  67. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_schema_detection.py +0 -0
  68. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_schema_profile.py +0 -0
  69. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_season.py +0 -0
  70. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_season_config.py +0 -0
  71. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_spatial.py +0 -0
  72. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_stats.py +0 -0
  73. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/tests/unit/test_view.py +0 -0
  74. {core_lens-0.1.dev99 → core_lens-0.1.dev100}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: core-lens
3
- Version: 0.1.dev99
3
+ Version: 0.1.dev100
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
@@ -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.dev99'
22
- __version_tuple__ = version_tuple = (0, 1, 'dev99')
21
+ __version__ = version = '0.1.dev100'
22
+ __version_tuple__ = version_tuple = (0, 1, 'dev100')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -261,9 +261,8 @@ class PlotNamespace:
261
261
  y_col = y_cols[0]
262
262
 
263
263
  def _make_fig(pdf: Any, title: str) -> "BokehFigure":
264
- tooltips = [
265
- (c, f"@{{{c}}}") for c in pdf.columns if c not in ("geometry", "geom")
266
- ]
264
+ hover_cols = [c for c in pdf.columns if c not in ("geometry", "geom")]
265
+ tooltips = [(c, f"@{{{c}}}") for c in hover_cols]
267
266
  fig = figure( # type: ignore[call-arg]
268
267
  width=900,
269
268
  height=400,
@@ -275,6 +274,13 @@ class PlotNamespace:
275
274
  fig.xaxis.axis_label_text_font = "Inter, sans-serif"
276
275
  fig.yaxis.axis_label_text_font = "Inter, sans-serif"
277
276
 
277
+ from bokeh.models import ColumnDataSource
278
+
279
+ def _src(row: Any) -> ColumnDataSource:
280
+ return ColumnDataSource(
281
+ {c: row[c].tolist() for c in hover_cols if c in row.columns}
282
+ )
283
+
278
284
  if subplot_col and subplot_col in pdf.columns:
279
285
  # One sub-panel per unique subplot_col value via colour coding.
280
286
  unique_vals = sorted(pdf[subplot_col].dropna().unique())
@@ -287,16 +293,19 @@ class PlotNamespace:
287
293
  row = sub[sub[key_col] == entity] if entity is not None else sub
288
294
  color = _color_for(vi * len(entities) + ei)
289
295
  label = f"{entity} ({val})" if entity is not None else str(val)
296
+ source = _src(row)
290
297
  fig.line(
291
- x=row[x].tolist(),
292
- y=row[y_col].tolist(),
298
+ x=x,
299
+ y=y_col,
300
+ source=source,
293
301
  color=color,
294
302
  legend_label=label,
295
303
  line_width=2,
296
304
  )
297
305
  fig.scatter(
298
- x=row[x].tolist(),
299
- y=row[y_col].tolist(),
306
+ x=x,
307
+ y=y_col,
308
+ source=source,
300
309
  color=color,
301
310
  size=5,
302
311
  )
@@ -304,26 +313,35 @@ class PlotNamespace:
304
313
  for i, entity in enumerate(pdf[key_col].unique()):
305
314
  row = pdf[pdf[key_col] == entity]
306
315
  color = _color_for(i)
316
+ source = _src(row)
307
317
  fig.line(
308
- x=row[x].tolist(),
309
- y=row[y_col].tolist(),
318
+ x=x,
319
+ y=y_col,
320
+ source=source,
310
321
  color=color,
311
322
  legend_label=str(entity),
312
323
  line_width=2,
313
324
  )
314
325
  fig.scatter(
315
- x=row[x].tolist(), y=row[y_col].tolist(), color=color, size=5
326
+ x=x,
327
+ y=y_col,
328
+ source=source,
329
+ color=color,
330
+ size=5,
316
331
  )
317
332
  else:
333
+ source = _src(pdf)
318
334
  fig.line(
319
- x=pdf[x].tolist(),
320
- y=pdf[y_col].tolist(),
335
+ x=x,
336
+ y=y_col,
337
+ source=source,
321
338
  color=_color_for(0),
322
339
  line_width=2,
323
340
  )
324
341
  fig.scatter(
325
- x=pdf[x].tolist(),
326
- y=pdf[y_col].tolist(),
342
+ x=x,
343
+ y=y_col,
344
+ source=source,
327
345
  color=_color_for(0),
328
346
  size=5,
329
347
  )
@@ -407,6 +425,8 @@ class PlotNamespace:
407
425
  df_pd = df.to_pandas()
408
426
 
409
427
  def _make_scatter(y_col: str) -> "BokehFigure":
428
+ from bokeh.models import ColumnDataSource
429
+
410
430
  fig = figure( # type: ignore[call-arg]
411
431
  width=800,
412
432
  height=450,
@@ -417,9 +437,13 @@ class PlotNamespace:
417
437
  )
418
438
  for i, entity in enumerate(df_pd[key_col].unique()):
419
439
  row = df_pd[df_pd[key_col] == entity]
440
+ source = ColumnDataSource(
441
+ {c: row[c].tolist() for c in hover_cols if c in row.columns}
442
+ )
420
443
  fig.scatter(
421
- x=row[x].tolist(),
422
- y=row[y_col].tolist(),
444
+ x=x,
445
+ y=y_col,
446
+ source=source,
423
447
  color=_color_for(i),
424
448
  legend_label=str(entity),
425
449
  size=8,
File without changes
File without changes
File without changes
File without changes
File without changes