core-lens 0.1.dev153__tar.gz → 0.1.dev154__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 (91) hide show
  1. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/PKG-INFO +1 -1
  2. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/_version.py +2 -2
  3. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/base/namespaces/stats.py +41 -8
  4. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/ISSUE_TEMPLATE/blank-proposal.yaml +0 -0
  5. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
  6. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
  7. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/pull_request_template.md +0 -0
  8. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/workflows/ci.yml +0 -0
  9. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/workflows/gh-pages.yml +0 -0
  10. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/workflows/pre-release.yml +0 -0
  11. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.github/workflows/release.yml +0 -0
  12. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.gitignore +0 -0
  13. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.gitmessage +0 -0
  14. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.pre-commit-config.yaml +0 -0
  15. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/.python-version +0 -0
  16. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/CONTRIBUTING.md +0 -0
  17. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/LICENSE +0 -0
  18. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/README.md +0 -0
  19. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/SKILLS.md +0 -0
  20. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/README.md +0 -0
  21. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_aoi.py +0 -0
  22. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_export.py +0 -0
  23. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_polars_utils.py +0 -0
  24. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_result.py +0 -0
  25. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_schema.py +0 -0
  26. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_season.py +0 -0
  27. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_spatial.py +0 -0
  28. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/bench_view.py +0 -0
  29. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/benchmarks/run_all.sh +0 -0
  30. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/Makefile +0 -0
  31. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/make.bat +0 -0
  32. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/concepts.md +0 -0
  33. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/conf.py +0 -0
  34. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/export.md +0 -0
  35. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/index.rst +0 -0
  36. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/intro.md +0 -0
  37. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/logging.md +0 -0
  38. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/plots.md +0 -0
  39. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/plugins.md +0 -0
  40. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/queries.md +0 -0
  41. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/quickstart.md +0 -0
  42. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/docs/source/stats.md +0 -0
  43. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/examples/demo_mws.py +0 -0
  44. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/examples/demo_tehsil.py +0 -0
  45. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/hooks/mypy.sh +0 -0
  46. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/hooks/no-parquet-outside-fixtures.sh +0 -0
  47. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/hooks/pytest.sh +0 -0
  48. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/pyproject.toml +0 -0
  49. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/__init__.py +0 -0
  50. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/__main__.py +0 -0
  51. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/aoi.py +0 -0
  52. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/base/__init__.py +0 -0
  53. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/base/entity.py +0 -0
  54. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/base/namespaces/__init__.py +0 -0
  55. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/base/namespaces/plot.py +0 -0
  56. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/base/result.py +0 -0
  57. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/base/view.py +0 -0
  58. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/entities/__init__.py +0 -0
  59. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/entities/mws.py +0 -0
  60. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/entities/tehsil.py +0 -0
  61. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/entities/waterbody.py +0 -0
  62. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/export/__init__.py +0 -0
  63. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/export/formats.py +0 -0
  64. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/py.typed +0 -0
  65. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/schema/__init__.py +0 -0
  66. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/schema/detection.py +0 -0
  67. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/schema/profile.py +0 -0
  68. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/utils/__init__.py +0 -0
  69. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/utils/paths.py +0 -0
  70. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/utils/polars_utils.py +0 -0
  71. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/utils/season.py +0 -0
  72. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/src/core_lens/utils/spatial.py +0 -0
  73. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/fixtures/generate_fixtures.py +0 -0
  74. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/conftest.py +0 -0
  75. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_aoi.py +0 -0
  76. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_entities.py +0 -0
  77. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_entity.py +0 -0
  78. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_export.py +0 -0
  79. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_main.py +0 -0
  80. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_plot.py +0 -0
  81. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_polars_utils.py +0 -0
  82. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_profile.py +0 -0
  83. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_result.py +0 -0
  84. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_schema_detection.py +0 -0
  85. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_schema_profile.py +0 -0
  86. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_season.py +0 -0
  87. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_season_config.py +0 -0
  88. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_spatial.py +0 -0
  89. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_stats.py +0 -0
  90. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/tests/unit/test_view.py +0 -0
  91. {core_lens-0.1.dev153 → core_lens-0.1.dev154}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: core-lens
3
- Version: 0.1.dev153
3
+ Version: 0.1.dev154
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.dev153'
22
- __version_tuple__ = version_tuple = (0, 1, 'dev153')
21
+ __version__ = version = '0.1.dev154'
22
+ __version_tuple__ = version_tuple = (0, 1, 'dev154')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -859,9 +859,12 @@ class StatsNamespace:
859
859
  df = self._r.df()
860
860
  key = self._r.key_cols[0]
861
861
 
862
+ min_year: int | None = None
863
+ max_year: int | None = None
864
+
862
865
  # --- Build feature DataFrame ------------------------------------------
863
866
  # Universe of entity keys from result.data.
864
- feat = df.select([key])
867
+ feat = df.select([key]).unique()
865
868
 
866
869
  for col_name, spec in columns.items():
867
870
  if spec is None:
@@ -881,6 +884,23 @@ class StatsNamespace:
881
884
  resolution_str, filter_dict = spec
882
885
  filter_dict = dict(filter_dict) if filter_dict else {}
883
886
 
887
+ if "year" in filter_dict:
888
+ yr = filter_dict["year"]
889
+ y0: int | None = None
890
+ y1: int | None = None
891
+
892
+ if isinstance(yr, (list, tuple)) and len(yr) >= 2:
893
+ y0, y1 = int(yr[0]), int(yr[1])
894
+ elif isinstance(yr, int):
895
+ y0, y1 = yr, yr
896
+
897
+ if y0 is not None:
898
+ if min_year is None or y0 < min_year:
899
+ min_year = y0
900
+ if y1 is not None:
901
+ if max_year is None or y1 > max_year:
902
+ max_year = y1
903
+
884
904
  entity = self._r.entity
885
905
  path: str | None
886
906
  if resolution_str == "static":
@@ -1006,13 +1026,26 @@ class StatsNamespace:
1006
1026
  dists[tidx] = float("inf") # exclude target itself
1007
1027
  top_idx = np.argsort(dists)[:top_n]
1008
1028
 
1009
- data = pl.DataFrame(
1010
- {
1011
- key: [ids[i] for i in top_idx],
1012
- "similarity_score": [float(1.0 / (1.0 + dists[i])) for i in top_idx],
1013
- "rank": list(range(1, len(top_idx) + 1)),
1014
- }
1015
- )
1029
+ if min_year is None and max_year is None:
1030
+ year_col = self._year_col()
1031
+ if year_col and year_col in df.columns:
1032
+ yr_min = df[year_col].min()
1033
+ yr_max = df[year_col].max()
1034
+ if yr_min is not None and yr_max is not None:
1035
+ min_year = int(cast(int, yr_min))
1036
+ max_year = int(cast(int, yr_max))
1037
+
1038
+ output_dict: dict[str, Any] = {
1039
+ key: [ids[i] for i in top_idx],
1040
+ "similarity_score": [float(1.0 / (1.0 + dists[i])) for i in top_idx],
1041
+ "rank": list(range(1, len(top_idx) + 1)),
1042
+ }
1043
+
1044
+ if min_year is not None and max_year is not None:
1045
+ output_dict["year_from"] = [min_year] * len(top_idx)
1046
+ output_dict["year_to"] = [max_year] * len(top_idx)
1047
+
1048
+ data = pl.DataFrame(output_dict)
1016
1049
  metadata: dict[str, Any] = {
1017
1050
  "method": method.value if method is not None else None,
1018
1051
  "target": target,
File without changes
File without changes
File without changes
File without changes