core-lens 0.1.dev161__tar.gz → 0.1.dev163__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.dev161 → core_lens-0.1.dev163}/PKG-INFO +1 -1
  2. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/pyproject.toml +15 -0
  3. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/_version.py +2 -2
  4. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/base/namespaces/plot.py +9 -14
  5. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/export/formats.py +1 -1
  6. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/utils/spatial.py +1 -1
  7. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/ISSUE_TEMPLATE/blank-proposal.yaml +0 -0
  8. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
  9. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
  10. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/pull_request_template.md +0 -0
  11. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/workflows/ci.yml +0 -0
  12. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/workflows/gh-pages.yml +0 -0
  13. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/workflows/pre-release.yml +0 -0
  14. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.github/workflows/release.yml +0 -0
  15. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.gitignore +0 -0
  16. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.gitmessage +0 -0
  17. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.pre-commit-config.yaml +0 -0
  18. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/.python-version +0 -0
  19. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/CONTRIBUTING.md +0 -0
  20. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/LICENSE +0 -0
  21. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/README.md +0 -0
  22. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/SKILLS.md +0 -0
  23. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/README.md +0 -0
  24. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_aoi.py +0 -0
  25. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_export.py +0 -0
  26. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_polars_utils.py +0 -0
  27. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_result.py +0 -0
  28. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_schema.py +0 -0
  29. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_season.py +0 -0
  30. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_spatial.py +0 -0
  31. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/bench_view.py +0 -0
  32. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/benchmarks/run_all.sh +0 -0
  33. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/Makefile +0 -0
  34. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/make.bat +0 -0
  35. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/concepts.md +0 -0
  36. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/conf.py +0 -0
  37. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/export.md +0 -0
  38. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/index.rst +0 -0
  39. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/intro.md +0 -0
  40. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/logging.md +0 -0
  41. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/plots.md +0 -0
  42. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/plugins.md +0 -0
  43. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/queries.md +0 -0
  44. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/quickstart.md +0 -0
  45. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/docs/source/stats.md +0 -0
  46. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/examples/demo_mws.py +0 -0
  47. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/examples/demo_tehsil.py +0 -0
  48. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/hooks/mypy.sh +0 -0
  49. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/hooks/no-parquet-outside-fixtures.sh +0 -0
  50. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/hooks/pytest.sh +0 -0
  51. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/__init__.py +0 -0
  52. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/__main__.py +0 -0
  53. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/aoi.py +0 -0
  54. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/base/__init__.py +0 -0
  55. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/base/entity.py +0 -0
  56. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/base/namespaces/__init__.py +0 -0
  57. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/base/namespaces/stats.py +0 -0
  58. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/base/result.py +0 -0
  59. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/base/view.py +0 -0
  60. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/entities/__init__.py +0 -0
  61. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/entities/mws.py +0 -0
  62. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/entities/tehsil.py +0 -0
  63. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/entities/waterbody.py +0 -0
  64. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/export/__init__.py +0 -0
  65. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/py.typed +0 -0
  66. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/schema/__init__.py +0 -0
  67. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/schema/detection.py +0 -0
  68. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/schema/profile.py +0 -0
  69. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/utils/__init__.py +0 -0
  70. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/utils/paths.py +0 -0
  71. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/utils/polars_utils.py +0 -0
  72. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/src/core_lens/utils/season.py +0 -0
  73. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/fixtures/generate_fixtures.py +0 -0
  74. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/conftest.py +0 -0
  75. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_aoi.py +0 -0
  76. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_entities.py +0 -0
  77. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_entity.py +0 -0
  78. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_export.py +0 -0
  79. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_main.py +0 -0
  80. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_plot.py +0 -0
  81. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_polars_utils.py +0 -0
  82. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_profile.py +0 -0
  83. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_result.py +0 -0
  84. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_schema_detection.py +0 -0
  85. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_schema_profile.py +0 -0
  86. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_season.py +0 -0
  87. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_season_config.py +0 -0
  88. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_spatial.py +0 -0
  89. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_stats.py +0 -0
  90. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/tests/unit/test_view.py +0 -0
  91. {core_lens-0.1.dev161 → core_lens-0.1.dev163}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: core-lens
3
- Version: 0.1.dev161
3
+ Version: 0.1.dev163
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
@@ -122,3 +122,18 @@ cudf-polars-cu13 = { index = "nvidia" }
122
122
 
123
123
  [tool.coverage.run]
124
124
  source = ["src/core_lens"]
125
+
126
+ [tool.ruff.lint]
127
+ select = [
128
+ "E",
129
+ "F", # Default rules (Error and Pyflakes)
130
+ "S", # Enable all flake8-bandit security rules
131
+ ]
132
+ ignore = [
133
+ "E501", # line too long
134
+ "S101", # use of assert
135
+ ]
136
+
137
+ [tool.ruff.lint.per-file-ignores]
138
+ "tests/*" = ["S"]
139
+ "examples/*" = ["S"]
@@ -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.dev161'
22
- __version_tuple__ = version_tuple = (0, 1, 'dev161')
21
+ __version__ = version = '0.1.dev163'
22
+ __version_tuple__ = version_tuple = (0, 1, 'dev163')
23
23
 
24
24
  __commit_id__ = commit_id = None
@@ -157,7 +157,7 @@ def _wkb_to_arrow_table(
157
157
  if b"ARROW:extension:metadata" in ext_meta:
158
158
  try:
159
159
  geo_meta = json.loads(ext_meta[b"ARROW:extension:metadata"].decode("utf-8"))
160
- except Exception:
160
+ except Exception: # noqa: S110
161
161
  pass
162
162
  geo_meta["crs"] = "EPSG:4326"
163
163
  ext_meta[b"ARROW:extension:metadata"] = json.dumps(geo_meta).encode("utf-8")
@@ -206,21 +206,16 @@ def _apply_theme(fig: Any, result: "Result", title: str) -> None:
206
206
  fig.title.text_font = "Inter, sans-serif"
207
207
  fig.title.text_font_size = "14pt"
208
208
 
209
- from bokeh.models.annotations import Label
209
+ from bokeh.models.annotations import Title
210
210
 
211
- subtitle = Label(
212
- x=fig.plot_width if hasattr(fig, "plot_width") else 800,
213
- y=0,
214
- x_units="screen",
215
- y_units="screen",
211
+ subtitle = Title(
216
212
  text=f"Entity: {entity_name} | Visualised with Bokeh",
217
213
  text_font_size="9pt",
218
214
  text_color="gray",
219
- x_offset=-8,
220
- y_offset=4,
221
- text_align="right",
215
+ align="right",
216
+ text_font="Inter, sans-serif",
222
217
  )
223
- fig.add_layout(subtitle)
218
+ fig.add_layout(subtitle, "below")
224
219
 
225
220
 
226
221
  class MapWithLegend:
@@ -607,8 +602,8 @@ class PlotNamespace:
607
602
  )
608
603
 
609
604
  if fig.legend:
610
- fig.legend.location = "top_left"
611
605
  fig.legend.click_policy = "hide"
606
+ fig.add_layout(fig.legend[0], "right")
612
607
  _apply_theme(fig, self.result, title)
613
608
  return fig
614
609
 
@@ -720,8 +715,8 @@ class PlotNamespace:
720
715
  alpha=0.7,
721
716
  )
722
717
  if fig.legend:
723
- fig.legend.location = "top_left"
724
718
  fig.legend.click_policy = "hide"
719
+ fig.add_layout(fig.legend[0], "right")
725
720
  _apply_theme(fig, self.result, "Scatter Distribution")
726
721
  return fig
727
722
 
@@ -791,8 +786,8 @@ class PlotNamespace:
791
786
  legend_label=str(entity),
792
787
  )
793
788
  if fig.legend:
794
- fig.legend.location = "top_right"
795
789
  fig.legend.click_policy = "hide"
790
+ fig.add_layout(fig.legend[0], "right")
796
791
  _apply_theme(fig, self.result, "Distribution")
797
792
  return fig
798
793
 
@@ -159,7 +159,7 @@ def geoparquet(result: "Result", path: str | pathlib.Path, **kwargs: Any) -> Non
159
159
  SELECT {select_clause}
160
160
  FROM df
161
161
  ) TO '{path_str}' ({options_str});
162
- """
162
+ """ # noqa: S608
163
163
  conn.execute(query)
164
164
 
165
165
 
@@ -59,7 +59,7 @@ def _bbox_sidecar_path(static_path: str) -> pathlib.Path | None:
59
59
  # Fallback to user cache dir.
60
60
  import hashlib
61
61
 
62
- fingerprint = hashlib.sha1(static_path.encode()).hexdigest()[:16]
62
+ fingerprint = hashlib.sha256(static_path.encode()).hexdigest()[:16]
63
63
  _CACHE_DIR.mkdir(parents=True, exist_ok=True)
64
64
  sidecar = _CACHE_DIR / (fingerprint + _SIDECAR_SUFFIX)
65
65
  return sidecar
File without changes
File without changes
File without changes
File without changes