core-lens 0.1.dev159__tar.gz → 0.1.dev160__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.dev159 → core_lens-0.1.dev160}/PKG-INFO +1 -1
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/_version.py +2 -2
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/base/namespaces/plot.py +33 -8
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/ISSUE_TEMPLATE/blank-proposal.yaml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/pull_request_template.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/workflows/ci.yml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/workflows/gh-pages.yml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/workflows/pre-release.yml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.github/workflows/release.yml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.gitignore +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.gitmessage +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.pre-commit-config.yaml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/.python-version +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/CONTRIBUTING.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/LICENSE +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/README.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/SKILLS.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/README.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_aoi.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_export.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_polars_utils.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_result.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_schema.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_season.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_spatial.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/bench_view.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/benchmarks/run_all.sh +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/Makefile +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/make.bat +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/concepts.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/conf.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/export.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/index.rst +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/intro.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/logging.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/plots.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/plugins.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/queries.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/quickstart.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/docs/source/stats.md +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/examples/demo_mws.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/examples/demo_tehsil.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/hooks/mypy.sh +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/hooks/no-parquet-outside-fixtures.sh +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/hooks/pytest.sh +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/pyproject.toml +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/__init__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/__main__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/aoi.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/base/__init__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/base/entity.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/base/namespaces/__init__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/base/namespaces/stats.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/base/result.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/base/view.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/entities/__init__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/entities/mws.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/entities/tehsil.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/entities/waterbody.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/export/__init__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/export/formats.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/py.typed +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/schema/__init__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/schema/detection.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/schema/profile.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/utils/__init__.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/utils/paths.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/utils/polars_utils.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/utils/season.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/src/core_lens/utils/spatial.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/fixtures/generate_fixtures.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/conftest.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_aoi.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_entities.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_entity.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_export.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_main.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_plot.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_polars_utils.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_profile.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_result.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_schema_detection.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_schema_profile.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_season.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_season_config.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_spatial.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_stats.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/tests/unit/test_view.py +0 -0
- {core_lens-0.1.dev159 → core_lens-0.1.dev160}/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.dev160
|
|
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.dev160'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 'dev160')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -233,12 +233,16 @@ class MapWithLegend:
|
|
|
233
233
|
v_min: float,
|
|
234
234
|
v_max: float,
|
|
235
235
|
column_name: str,
|
|
236
|
+
clamped_min: bool = False,
|
|
237
|
+
clamped_max: bool = False,
|
|
236
238
|
) -> None:
|
|
237
239
|
self._map = map_widget
|
|
238
240
|
self._cmap = cmap
|
|
239
241
|
self._v_min = v_min
|
|
240
242
|
self._v_max = v_max
|
|
241
243
|
self._column_name = column_name
|
|
244
|
+
self._clamped_min = clamped_min
|
|
245
|
+
self._clamped_max = clamped_max
|
|
242
246
|
|
|
243
247
|
def __getattr__(self, name: str) -> Any:
|
|
244
248
|
return getattr(self._map, name)
|
|
@@ -273,12 +277,19 @@ class MapWithLegend:
|
|
|
273
277
|
val = self._v_min + frac * (self._v_max - self._v_min)
|
|
274
278
|
rgba = self._cmap(frac)
|
|
275
279
|
hex_color = mcolors.to_hex(rgba)
|
|
280
|
+
|
|
281
|
+
prefix = ""
|
|
282
|
+
if i == stops - 1 and self._clamped_min:
|
|
283
|
+
prefix = "< "
|
|
284
|
+
elif i == 0 and self._clamped_max:
|
|
285
|
+
prefix = "> "
|
|
286
|
+
|
|
276
287
|
html.append(
|
|
277
288
|
f'<div style="margin-top:2px;">'
|
|
278
289
|
f'<span style="background:{hex_color};width:12px;height:12px;'
|
|
279
290
|
f"display:inline-block;margin-right:8px;vertical-align:middle;"
|
|
280
291
|
f'border:1px solid #ccc;"></span>'
|
|
281
|
-
f'<span style="vertical-align:middle;">{val:.2f}</span></div>'
|
|
292
|
+
f'<span style="vertical-align:middle;">{prefix}{val:.2f}</span></div>'
|
|
282
293
|
)
|
|
283
294
|
html.append("</div>")
|
|
284
295
|
return "".join(html)
|
|
@@ -333,7 +344,11 @@ class PlotNamespace:
|
|
|
333
344
|
self.result = result
|
|
334
345
|
|
|
335
346
|
def choropleth(
|
|
336
|
-
self,
|
|
347
|
+
self,
|
|
348
|
+
column: str,
|
|
349
|
+
subplot_on: SubplotOn | None = None,
|
|
350
|
+
v_min: float | None = None,
|
|
351
|
+
v_max: float | None = None,
|
|
337
352
|
) -> "MapWithLegend":
|
|
338
353
|
"""Render an interactive choropleth map using Lonboard.
|
|
339
354
|
|
|
@@ -407,23 +422,33 @@ class PlotNamespace:
|
|
|
407
422
|
|
|
408
423
|
with warnings.catch_warnings():
|
|
409
424
|
warnings.simplefilter("ignore", category=RuntimeWarning)
|
|
410
|
-
|
|
425
|
+
actual_min, actual_max = np.nanmin(values), np.nanmax(values)
|
|
426
|
+
|
|
427
|
+
calc_v_min = float(v_min) if v_min is not None else float(actual_min)
|
|
428
|
+
calc_v_max = float(v_max) if v_max is not None else float(actual_max)
|
|
411
429
|
|
|
412
|
-
|
|
430
|
+
clamped_min = v_min is not None and actual_min < v_min
|
|
431
|
+
clamped_max = v_max is not None and actual_max > v_max
|
|
432
|
+
|
|
433
|
+
if np.isnan(calc_v_min) or np.isnan(calc_v_max) or calc_v_min >= calc_v_max:
|
|
413
434
|
norm_values = np.where(np.isnan(values), np.nan, 0.0)
|
|
414
435
|
else:
|
|
415
|
-
norm_values = (
|
|
436
|
+
norm_values = np.clip(
|
|
437
|
+
(values - calc_v_min) / (calc_v_max - calc_v_min), 0.0, 1.0
|
|
438
|
+
)
|
|
416
439
|
|
|
417
440
|
cmap = mpl.colormaps["plasma_r"]
|
|
418
441
|
|
|
419
442
|
layer = lonboard.PolygonLayer(
|
|
420
443
|
arrow_table,
|
|
421
444
|
get_fill_color=apply_continuous_cmap(norm_values, cmap),
|
|
422
|
-
get_line_color=[
|
|
423
|
-
line_width_min_pixels=0.
|
|
445
|
+
get_line_color=[255, 255, 255, 180],
|
|
446
|
+
line_width_min_pixels=0.25,
|
|
424
447
|
)
|
|
425
448
|
map_widget = lonboard.Map(layers=[layer])
|
|
426
|
-
return MapWithLegend(
|
|
449
|
+
return MapWithLegend(
|
|
450
|
+
map_widget, cmap, calc_v_min, calc_v_max, column, clamped_min, clamped_max
|
|
451
|
+
)
|
|
427
452
|
|
|
428
453
|
def timeseries(
|
|
429
454
|
self,
|
|
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
|
|
File without changes
|