core-lens 0.1.dev108__tar.gz → 0.1.dev109__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 (75) hide show
  1. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/PKG-INFO +1 -1
  2. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/_version.py +2 -2
  3. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/aoi.py +1 -1
  4. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/base/namespaces/plot.py +5 -3
  5. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/base/result.py +1 -5
  6. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/utils/spatial.py +7 -11
  7. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.github/pull_request_template.md +0 -0
  8. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.github/workflows/ci.yml +0 -0
  9. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.github/workflows/gh-pages.yml +0 -0
  10. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.github/workflows/pre-release.yml +0 -0
  11. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.github/workflows/release.yml +0 -0
  12. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.gitignore +0 -0
  13. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.gitmessage +0 -0
  14. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.pre-commit-config.yaml +0 -0
  15. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/.python-version +0 -0
  16. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/CONTRIBUTING.md +0 -0
  17. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/LICENSE +0 -0
  18. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/README.md +0 -0
  19. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/SKILLS.md +0 -0
  20. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/Makefile +0 -0
  21. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/make.bat +0 -0
  22. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/concepts.md +0 -0
  23. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/conf.py +0 -0
  24. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/index.rst +0 -0
  25. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/intro.md +0 -0
  26. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/plots.md +0 -0
  27. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/plugins.md +0 -0
  28. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/queries.md +0 -0
  29. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/quickstart.md +0 -0
  30. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/docs/source/stats.md +0 -0
  31. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/examples/demo_mws.py +0 -0
  32. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/examples/demo_tehsil.py +0 -0
  33. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/hooks/mypy.sh +0 -0
  34. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/hooks/no-parquet-outside-fixtures.sh +0 -0
  35. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/hooks/pytest.sh +0 -0
  36. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/pyproject.toml +0 -0
  37. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/__init__.py +0 -0
  38. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/__main__.py +0 -0
  39. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/base/__init__.py +0 -0
  40. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/base/entity.py +0 -0
  41. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/base/namespaces/__init__.py +0 -0
  42. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/base/namespaces/stats.py +0 -0
  43. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/base/view.py +0 -0
  44. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/entities/__init__.py +0 -0
  45. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/entities/mws.py +0 -0
  46. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/entities/tehsil.py +0 -0
  47. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/entities/waterbody.py +0 -0
  48. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/export/__init__.py +0 -0
  49. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/export/formats.py +0 -0
  50. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/py.typed +0 -0
  51. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/schema/__init__.py +0 -0
  52. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/schema/detection.py +0 -0
  53. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/schema/profile.py +0 -0
  54. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/utils/__init__.py +0 -0
  55. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/utils/polars_utils.py +0 -0
  56. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/src/core_lens/utils/season.py +0 -0
  57. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/fixtures/generate_fixtures.py +0 -0
  58. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/conftest.py +0 -0
  59. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_aoi.py +0 -0
  60. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_entities.py +0 -0
  61. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_entity.py +0 -0
  62. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_export.py +0 -0
  63. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_main.py +0 -0
  64. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_plot.py +0 -0
  65. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_polars_utils.py +0 -0
  66. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_profile.py +0 -0
  67. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_result.py +0 -0
  68. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_schema_detection.py +0 -0
  69. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_schema_profile.py +0 -0
  70. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_season.py +0 -0
  71. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_season_config.py +0 -0
  72. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_spatial.py +0 -0
  73. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_stats.py +0 -0
  74. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/tests/unit/test_view.py +0 -0
  75. {core_lens-0.1.dev108 → core_lens-0.1.dev109}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: core-lens
3
- Version: 0.1.dev108
3
+ Version: 0.1.dev109
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.dev108'
22
- __version_tuple__ = version_tuple = (0, 1, 'dev108')
21
+ __version__ = version = '0.1.dev109'
22
+ __version_tuple__ = version_tuple = (0, 1, 'dev109')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -360,7 +360,7 @@ class AoI:
360
360
  or col in candidate.schema_profile.extra_static_cols
361
361
  ):
362
362
  if isinstance(val, list):
363
- filter_expr = filter_expr & pl.col(col).is_in(val)
363
+ lf = lf.join(pl.LazyFrame({col: val}), on=col, how="inner")
364
364
  else:
365
365
  filter_expr = filter_expr & (pl.col(col) == val)
366
366
 
@@ -460,7 +460,9 @@ class PlotNamespace:
460
460
  unique_entities = entity_df[key_col].unique()
461
461
  if len(unique_entities) > top_n:
462
462
  entities = unique_entities.limit(top_n).to_list()
463
- entity_df = entity_df.filter(pl.col(key_col).is_in(entities))
463
+ entity_df = entity_df.join(
464
+ pl.DataFrame({key_col: entities}), on=key_col, how="inner"
465
+ )
464
466
  entity_pdf = entity_df.to_pandas()
465
467
 
466
468
  fig_entity = _make_fig(entity_pdf, f"Timeseries — {y_col} (Per Entity)")
@@ -512,7 +514,7 @@ class PlotNamespace:
512
514
  unique_entities = df[key_col].unique()
513
515
  if len(unique_entities) > top_n:
514
516
  entities = unique_entities.limit(top_n).to_list()
515
- df = df.filter(pl.col(key_col).is_in(entities))
517
+ df = df.join(pl.DataFrame({key_col: entities}), on=key_col, how="inner")
516
518
 
517
519
  df_pd = df.to_pandas()
518
520
 
@@ -583,7 +585,7 @@ class PlotNamespace:
583
585
  unique_entities = df[key_col].unique()
584
586
  if len(unique_entities) > top_n:
585
587
  entities = unique_entities.limit(top_n).to_list()
586
- df = df.filter(pl.col(key_col).is_in(entities))
588
+ df = df.join(pl.DataFrame({key_col: entities}), on=key_col, how="inner")
587
589
 
588
590
  df_pd = df.to_pandas()
589
591
 
@@ -148,11 +148,7 @@ class Result:
148
148
  geo_df = collect_lf(
149
149
  pl.scan_parquet(static_path)
150
150
  .select(key_cols + [geom_col])
151
- .filter(
152
- pl.col(key_cols[0]).is_in(self.data[key_cols[0]].to_list())
153
- if len(key_cols) == 1
154
- else pl.lit(True)
155
- )
151
+ .join(self.data.select(key_cols).unique().lazy(), on=key_cols, how="inner")
156
152
  )
157
153
 
158
154
  joined = self.data.join(geo_df, on=key_cols, how="left")
@@ -182,17 +182,13 @@ def exact_spatial_filter(
182
182
  if candidates.is_empty():
183
183
  return candidates.select(key_cols)
184
184
 
185
- # Build a filter expression to read only the candidate rows.
186
- full_df = pl.read_parquet(static_path, columns=key_cols + [geometry_col])
187
-
188
- # Filter to candidate keys.
189
- if len(key_cols) == 1:
190
- key = key_cols[0]
191
- candidate_keys = candidates[key].to_list()
192
- full_df = full_df.filter(pl.col(key).is_in(candidate_keys))
193
- else:
194
- # Composite key: join on all key columns.
195
- full_df = full_df.join(candidates.select(key_cols), on=key_cols, how="inner")
185
+ # Build a lazy scan and push down an inner join to load only required geometries.
186
+ full_df = (
187
+ pl.scan_parquet(static_path)
188
+ .select(key_cols + [geometry_col])
189
+ .join(candidates.select(key_cols).lazy(), on=key_cols, how="inner")
190
+ .collect()
191
+ )
196
192
 
197
193
  geom_array = full_df[geometry_col].to_numpy()
198
194
  if geometry_type == "wkb":
File without changes
File without changes
File without changes
File without changes