core-lens 0.1.dev174__tar.gz → 0.1.dev175__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.dev174 → core_lens-0.1.dev175}/PKG-INFO +1 -1
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_view.py +1 -1
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/_version.py +2 -2
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/base/namespaces/plot.py +32 -18
- core_lens-0.1.dev174/parse_scalene.py +0 -50
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/ISSUE_TEMPLATE/blank-proposal.yaml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/ISSUE_TEMPLATE/bug-report.yaml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/ISSUE_TEMPLATE/feature-request.yaml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/pull_request_template.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/workflows/ci.yml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/workflows/gh-pages.yml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/workflows/pre-release.yml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.github/workflows/release.yml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.gitignore +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.gitmessage +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.pre-commit-config.yaml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/.python-version +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/CONTRIBUTING.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/LICENSE +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/README.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/SKILLS.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/README.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_aoi.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_entity.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_export.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_polars_utils.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_result.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_schema.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_season.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/bench_spatial.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/benchmarks/run_all.sh +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/Makefile +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/make.bat +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/concepts.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/conf.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/export.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/index.rst +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/intro.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/logging.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/plots.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/plugins.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/queries.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/quickstart.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/docs/source/stats.md +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/examples/demo_mws.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/examples/demo_tehsil.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/hooks/mypy.sh +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/hooks/no-parquet-outside-fixtures.sh +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/hooks/pytest.sh +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/pyproject.toml +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/__init__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/__main__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/aoi.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/base/__init__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/base/entity.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/base/namespaces/__init__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/base/namespaces/stats.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/base/result.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/base/view.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/entities/__init__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/entities/mws.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/entities/tehsil.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/entities/waterbody.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/export/__init__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/export/formats.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/py.typed +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/schema/__init__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/schema/detection.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/schema/profile.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/utils/__init__.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/utils/paths.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/utils/polars_utils.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/utils/season.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/src/core_lens/utils/spatial.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/fixtures/generate_fixtures.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/conftest.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_aoi.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_entities.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_entity.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_export.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_main.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_plot.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_polars_utils.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_profile.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_result.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_schema_detection.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_schema_profile.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_season.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_season_config.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_spatial.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_stats.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/tests/unit/test_view.py +0 -0
- {core_lens-0.1.dev174 → core_lens-0.1.dev175}/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.dev175
|
|
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
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
=======================================================
|
|
3
3
|
Targets:
|
|
4
4
|
- View.where() attribute filter (Polars semi-join on static file)
|
|
5
|
-
- View.spatial_filter()
|
|
5
|
+
- View.spatial_filter() vectorized centroid test (or STRtree for area)
|
|
6
6
|
- View.between() time-filter dict construction (no I/O)
|
|
7
7
|
- View.between(season=CURRENT) current-season resolution
|
|
8
8
|
- View.between(year=tuple) year-range season filter
|
|
@@ -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.dev175'
|
|
22
|
+
__version_tuple__ = version_tuple = (0, 1, 'dev175')
|
|
23
23
|
|
|
24
24
|
__commit_id__ = commit_id = None
|
|
@@ -731,31 +731,45 @@ class PlotNamespace:
|
|
|
731
731
|
)
|
|
732
732
|
|
|
733
733
|
entities = df.get_column(key_col).unique().to_list()
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
for c in hover_cols:
|
|
740
|
-
if c in row.columns:
|
|
741
|
-
lst = row.get_column(c).to_list()
|
|
742
|
-
if row.schema[c].is_numeric():
|
|
743
|
-
lst = [float("nan") if v is None else v for v in lst]
|
|
744
|
-
source_data[c] = lst
|
|
745
|
-
|
|
746
|
-
source = ColumnDataSource(source_data) # type: ignore[arg-type]
|
|
734
|
+
|
|
735
|
+
if len(entities) > 20:
|
|
736
|
+
# Fast path: single dataset, single colour, no legend
|
|
737
|
+
pdf = df.drop_nulls(subset=[x, y_col]).select(hover_cols).to_pandas()
|
|
738
|
+
source = ColumnDataSource(pdf)
|
|
747
739
|
fig.scatter(
|
|
748
740
|
x=x,
|
|
749
741
|
y=y_col,
|
|
750
742
|
source=source,
|
|
751
|
-
color=_color_for(
|
|
752
|
-
legend_label=str(entity),
|
|
743
|
+
color=_color_for(0),
|
|
753
744
|
size=8,
|
|
754
745
|
alpha=0.7,
|
|
755
746
|
)
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
747
|
+
else:
|
|
748
|
+
for i, entity in enumerate(entities):
|
|
749
|
+
row = df.filter(pl.col(key_col) == entity)
|
|
750
|
+
|
|
751
|
+
# Replace None with NaN for numeric columns to prevent Bokeh JS rendering crashes
|
|
752
|
+
source_data = {}
|
|
753
|
+
for c in hover_cols:
|
|
754
|
+
if c in row.columns:
|
|
755
|
+
lst = row.get_column(c).to_list()
|
|
756
|
+
if row.schema[c].is_numeric():
|
|
757
|
+
lst = [float("nan") if v is None else v for v in lst]
|
|
758
|
+
source_data[c] = lst
|
|
759
|
+
|
|
760
|
+
source = ColumnDataSource(source_data) # type: ignore[arg-type]
|
|
761
|
+
fig.scatter(
|
|
762
|
+
x=x,
|
|
763
|
+
y=y_col,
|
|
764
|
+
source=source,
|
|
765
|
+
color=_color_for(i),
|
|
766
|
+
legend_label=str(entity),
|
|
767
|
+
size=8,
|
|
768
|
+
alpha=0.7,
|
|
769
|
+
)
|
|
770
|
+
if fig.legend:
|
|
771
|
+
fig.legend.click_policy = "hide"
|
|
772
|
+
fig.add_layout(fig.legend[0], "right")
|
|
759
773
|
_apply_theme(fig, self.result, "Scatter Distribution")
|
|
760
774
|
return fig
|
|
761
775
|
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import json
|
|
2
|
-
import glob
|
|
3
|
-
import os
|
|
4
|
-
|
|
5
|
-
profiles = glob.glob('/home/akashyap54/workstation/Projects/benchmarks/profiles/*_profile.json')
|
|
6
|
-
|
|
7
|
-
for profile in profiles:
|
|
8
|
-
name = os.path.basename(profile).replace('_profile.json', '')
|
|
9
|
-
try:
|
|
10
|
-
d = json.load(open(profile))
|
|
11
|
-
except Exception as e:
|
|
12
|
-
print(f"Error loading {name}: {e}")
|
|
13
|
-
continue
|
|
14
|
-
|
|
15
|
-
print(f"\n# {name.upper()}")
|
|
16
|
-
print("-" * 40)
|
|
17
|
-
|
|
18
|
-
line_stats = []
|
|
19
|
-
|
|
20
|
-
for filename, f_data in d.get('files', {}).items():
|
|
21
|
-
short_filename = os.path.basename(filename)
|
|
22
|
-
for line_data in f_data.get('lines', []):
|
|
23
|
-
cpu_percent = line_data.get('n_cpu_percent_c', 0) + line_data.get('n_cpu_percent_python', 0)
|
|
24
|
-
malloc_mb = line_data.get('n_malloc_mb', 0)
|
|
25
|
-
peak_mb = line_data.get('n_peak_mb', 0)
|
|
26
|
-
line_str = line_data.get('line', '').strip()
|
|
27
|
-
lineno = line_data.get('lineno', 0)
|
|
28
|
-
|
|
29
|
-
if cpu_percent > 0 or malloc_mb > 0 or peak_mb > 0:
|
|
30
|
-
line_stats.append({
|
|
31
|
-
'file': short_filename,
|
|
32
|
-
'lineno': lineno,
|
|
33
|
-
'line': line_str[:60] + ('...' if len(line_str) > 60 else ''),
|
|
34
|
-
'cpu': cpu_percent,
|
|
35
|
-
'malloc_mb': malloc_mb,
|
|
36
|
-
'peak_mb': peak_mb
|
|
37
|
-
})
|
|
38
|
-
|
|
39
|
-
# Top 5 by CPU
|
|
40
|
-
print(f"Top 5 lines by CPU %:")
|
|
41
|
-
top_cpu = sorted(line_stats, key=lambda x: x['cpu'], reverse=True)[:5]
|
|
42
|
-
for x in top_cpu:
|
|
43
|
-
print(f" {x['file']}:{x['lineno']} | CPU: {x['cpu']:.1f}% | Line: {x['line']}")
|
|
44
|
-
|
|
45
|
-
# Top 5 by Malloc
|
|
46
|
-
print(f"\nTop 5 lines by Memory Allocation (MB):")
|
|
47
|
-
top_mem = sorted(line_stats, key=lambda x: x['malloc_mb'], reverse=True)[:5]
|
|
48
|
-
for x in top_mem:
|
|
49
|
-
if x['malloc_mb'] > 0:
|
|
50
|
-
print(f" {x['file']}:{x['lineno']} | Malloc: {x['malloc_mb']:.1f} MB | Line: {x['line']}")
|
|
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
|