core-lens 0.1.dev133__tar.gz → 0.1.dev134__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.dev133 → core_lens-0.1.dev134}/PKG-INFO +4 -1
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/pyproject.toml +1 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/_version.py +2 -2
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/export/formats.py +43 -13
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/uv.lock +309 -272
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/ISSUE_TEMPLATE/blank-proposal.yaml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/pull_request_template.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/workflows/ci.yml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/workflows/gh-pages.yml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/workflows/pre-release.yml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.github/workflows/release.yml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.gitignore +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.gitmessage +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.pre-commit-config.yaml +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/.python-version +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/CONTRIBUTING.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/LICENSE +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/README.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/SKILLS.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/README.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_aoi.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_export.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_polars_utils.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_result.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_schema.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_season.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_spatial.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/bench_view.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/benchmarks/run_all.sh +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/Makefile +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/make.bat +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/concepts.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/conf.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/export.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/index.rst +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/intro.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/logging.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/plots.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/plugins.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/queries.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/quickstart.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/docs/source/stats.md +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/examples/demo_mws.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/examples/demo_tehsil.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/hooks/mypy.sh +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/hooks/no-parquet-outside-fixtures.sh +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/hooks/pytest.sh +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/__init__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/__main__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/aoi.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/base/__init__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/base/entity.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/base/namespaces/__init__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/base/namespaces/plot.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/base/namespaces/stats.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/base/result.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/base/view.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/entities/__init__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/entities/mws.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/entities/tehsil.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/entities/waterbody.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/export/__init__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/py.typed +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/schema/__init__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/schema/detection.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/schema/profile.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/utils/__init__.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/utils/paths.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/utils/polars_utils.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/utils/season.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/src/core_lens/utils/spatial.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/fixtures/generate_fixtures.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/conftest.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_aoi.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_entities.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_entity.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_export.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_main.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_plot.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_polars_utils.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_profile.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_result.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_schema_detection.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_schema_profile.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_season.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_season_config.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_spatial.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_stats.py +0 -0
- {core_lens-0.1.dev133 → core_lens-0.1.dev134}/tests/unit/test_view.py +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.dev134
|
|
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
|
|
@@ -34,6 +34,7 @@ Requires-Dist: matplotlib<4,>=3.10.9; extra == 'full'
|
|
|
34
34
|
Requires-Dist: polars<2,>=1.39.0; extra == 'full'
|
|
35
35
|
Requires-Dist: pyarrow<25,>=23.0.0; extra == 'full'
|
|
36
36
|
Requires-Dist: pydantic<3,>=2.13.3; extra == 'full'
|
|
37
|
+
Requires-Dist: pyogrio<1,>=0.10.0; extra == 'full'
|
|
37
38
|
Requires-Dist: pyproj<4,>=3.7.2; extra == 'full'
|
|
38
39
|
Requires-Dist: scipy<2,>=1.17.1; extra == 'full'
|
|
39
40
|
Requires-Dist: shapely<3,>=2.1.2; extra == 'full'
|
|
@@ -52,6 +53,7 @@ Requires-Dist: matplotlib<4,>=3.10.9; extra == 'full-gpu'
|
|
|
52
53
|
Requires-Dist: polars<2,>=1.39.0; extra == 'full-gpu'
|
|
53
54
|
Requires-Dist: pyarrow<25,>=23.0.0; extra == 'full-gpu'
|
|
54
55
|
Requires-Dist: pydantic<3,>=2.13.3; extra == 'full-gpu'
|
|
56
|
+
Requires-Dist: pyogrio<1,>=0.10.0; extra == 'full-gpu'
|
|
55
57
|
Requires-Dist: pyproj<4,>=3.7.2; extra == 'full-gpu'
|
|
56
58
|
Requires-Dist: scipy<2,>=1.17.1; extra == 'full-gpu'
|
|
57
59
|
Requires-Dist: shapely<3,>=2.1.2; extra == 'full-gpu'
|
|
@@ -72,6 +74,7 @@ Requires-Dist: loguru>=0.7.3; extra == 'spatial'
|
|
|
72
74
|
Requires-Dist: polars<2,>=1.39.0; extra == 'spatial'
|
|
73
75
|
Requires-Dist: pyarrow<25,>=23.0.0; extra == 'spatial'
|
|
74
76
|
Requires-Dist: pydantic<3,>=2.13.3; extra == 'spatial'
|
|
77
|
+
Requires-Dist: pyogrio<1,>=0.10.0; extra == 'spatial'
|
|
75
78
|
Requires-Dist: pyproj<4,>=3.7.2; extra == 'spatial'
|
|
76
79
|
Requires-Dist: shapely<3,>=2.1.2; extra == 'spatial'
|
|
77
80
|
Provides-Extra: stats
|
|
@@ -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.dev134'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 'dev134')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -187,20 +187,50 @@ def geojson(result: "Result", path: str | pathlib.Path, **kwargs: Any) -> None:
|
|
|
187
187
|
"Call .with_geometry() first to join the static geometry column before exporting to geojson."
|
|
188
188
|
)
|
|
189
189
|
|
|
190
|
-
|
|
190
|
+
geom_col = result.entity.geometry_col
|
|
191
|
+
data = result.data
|
|
192
|
+
|
|
193
|
+
driver = kwargs.pop("driver", "GeoJSON")
|
|
194
|
+
is_seq = driver == "GeoJSONSeq"
|
|
195
|
+
|
|
196
|
+
if kwargs:
|
|
197
|
+
from loguru import logger
|
|
198
|
+
|
|
199
|
+
logger.warning(
|
|
200
|
+
"geojson() now uses a custom streaming Polars writer. "
|
|
201
|
+
"Driver-specific kwargs ({}) are ignored.",
|
|
202
|
+
list(kwargs.keys()),
|
|
203
|
+
)
|
|
191
204
|
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
engine = kwargs.pop("engine", None)
|
|
195
|
-
if engine is None:
|
|
196
|
-
try:
|
|
197
|
-
import pyogrio as _ # type: ignore[import-untyped] # noqa: F401
|
|
205
|
+
import shapely
|
|
206
|
+
import tempfile
|
|
198
207
|
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
208
|
+
wkb_arr = data[geom_col].to_numpy()
|
|
209
|
+
geoms = shapely.from_wkb(wkb_arr)
|
|
210
|
+
geom_strs = shapely.to_geojson(geoms)
|
|
202
211
|
|
|
203
|
-
|
|
204
|
-
|
|
212
|
+
with tempfile.NamedTemporaryFile(mode="w+") as tmp:
|
|
213
|
+
data.drop(geom_col).write_ndjson(tmp.name)
|
|
214
|
+
tmp.seek(0)
|
|
205
215
|
|
|
206
|
-
|
|
216
|
+
with open(path, "w") as out:
|
|
217
|
+
if not is_seq:
|
|
218
|
+
out.write('{"type": "FeatureCollection", "features": [\n')
|
|
219
|
+
|
|
220
|
+
first = True
|
|
221
|
+
for i, prop_json_str in enumerate(tmp):
|
|
222
|
+
if not first:
|
|
223
|
+
out.write("\n" if is_seq else ",\n")
|
|
224
|
+
else:
|
|
225
|
+
first = False
|
|
226
|
+
|
|
227
|
+
# construct the Feature JSON manually to avoid parsing/re-serialising
|
|
228
|
+
out.write(
|
|
229
|
+
f'{{"type": "Feature", "geometry": {geom_strs[i]}, '
|
|
230
|
+
f'"properties": {prop_json_str.strip()}}}'
|
|
231
|
+
)
|
|
232
|
+
|
|
233
|
+
if not is_seq:
|
|
234
|
+
out.write("\n]}\n")
|
|
235
|
+
else:
|
|
236
|
+
out.write("\n")
|