core-lens 0.1.dev162__tar.gz → 0.1.dev164__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.
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/PKG-INFO +1 -1
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/_version.py +2 -2
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/base/entity.py +8 -2
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/base/namespaces/plot.py +8 -13
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/ISSUE_TEMPLATE/blank-proposal.yaml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/pull_request_template.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/workflows/ci.yml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/workflows/gh-pages.yml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/workflows/pre-release.yml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.github/workflows/release.yml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.gitignore +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.gitmessage +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.pre-commit-config.yaml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/.python-version +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/CONTRIBUTING.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/LICENSE +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/README.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/SKILLS.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/README.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_aoi.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_export.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_polars_utils.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_result.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_schema.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_season.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_spatial.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/bench_view.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/benchmarks/run_all.sh +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/Makefile +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/make.bat +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/concepts.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/conf.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/export.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/index.rst +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/intro.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/logging.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/plots.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/plugins.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/queries.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/quickstart.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/docs/source/stats.md +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/examples/demo_mws.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/examples/demo_tehsil.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/hooks/mypy.sh +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/hooks/no-parquet-outside-fixtures.sh +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/hooks/pytest.sh +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/pyproject.toml +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/__init__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/__main__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/aoi.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/base/__init__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/base/namespaces/__init__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/base/namespaces/stats.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/base/result.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/base/view.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/entities/__init__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/entities/mws.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/entities/tehsil.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/entities/waterbody.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/export/__init__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/export/formats.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/py.typed +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/schema/__init__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/schema/detection.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/schema/profile.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/utils/__init__.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/utils/paths.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/utils/polars_utils.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/utils/season.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/src/core_lens/utils/spatial.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/fixtures/generate_fixtures.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/conftest.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_aoi.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_entities.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_entity.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_export.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_main.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_plot.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_polars_utils.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_profile.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_result.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_schema_detection.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_schema_profile.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_season.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_season_config.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_spatial.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_stats.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/tests/unit/test_view.py +0 -0
- {core_lens-0.1.dev162 → core_lens-0.1.dev164}/uv.lock +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: core-lens
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.dev164
|
|
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.
|
|
22
|
-
__version_tuple__ = version_tuple = (0, 1, '
|
|
21
|
+
__version__ = version = '0.1.dev164'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 'dev164')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -226,13 +226,15 @@ class BaseEntity(ABC):
|
|
|
226
226
|
FileNotFoundError: For *local* paths that do not exist after resolution.
|
|
227
227
|
|
|
228
228
|
"""
|
|
229
|
+
import pathlib as _pathlib
|
|
230
|
+
|
|
229
231
|
# Fully-qualified cloud URI — return as-is.
|
|
230
232
|
if is_cloud_uri(path):
|
|
233
|
+
if not path.endswith("/") and not _pathlib.Path(path).suffix:
|
|
234
|
+
return path + "/"
|
|
231
235
|
return path
|
|
232
236
|
|
|
233
237
|
# Relative path — join against data_root (which may itself be a cloud URI).
|
|
234
|
-
import pathlib as _pathlib
|
|
235
|
-
|
|
236
238
|
p = _pathlib.Path(path)
|
|
237
239
|
if not p.is_absolute():
|
|
238
240
|
root = (
|
|
@@ -244,6 +246,10 @@ class BaseEntity(ABC):
|
|
|
244
246
|
else:
|
|
245
247
|
resolved = str(p)
|
|
246
248
|
|
|
249
|
+
# Polars cloud directory scanning requires a trailing slash.
|
|
250
|
+
if is_cloud_uri(resolved) and not resolved.endswith("/") and not p.suffix:
|
|
251
|
+
resolved += "/"
|
|
252
|
+
|
|
247
253
|
# For local resolved paths only: eager existence check.
|
|
248
254
|
if not is_cloud_uri(resolved) and not path_exists(resolved):
|
|
249
255
|
if path_exists(resolved + ".parquet"):
|
|
@@ -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
|
|
209
|
+
from bokeh.models.annotations import Title
|
|
210
210
|
|
|
211
|
-
subtitle =
|
|
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
|
-
|
|
220
|
-
|
|
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
|
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|