hscida 0.1.0__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.
- hscida-0.1.0/.github/workflows/tests.yml +29 -0
- hscida-0.1.0/.gitignore +4 -0
- hscida-0.1.0/.history/.github/workflows/publish_20260605151839.yml +56 -0
- hscida-0.1.0/.history/.github/workflows/tests_20260605151436.yml +29 -0
- hscida-0.1.0/.history/.github/workflows/tests_20260605151454.yml +29 -0
- hscida-0.1.0/.history/README_20260605151243.md +15 -0
- hscida-0.1.0/.history/README_20260605151302.md +15 -0
- hscida-0.1.0/.history/README_20260605151839.md +37 -0
- hscida-0.1.0/.history/README_20260605151903.md +39 -0
- hscida-0.1.0/.history/README_20260605151949.md +41 -0
- hscida-0.1.0/.history/README_20260605152141.md +39 -0
- hscida-0.1.0/.history/README_20260605152217.md +39 -0
- hscida-0.1.0/.history/hscida_20260605143229.py +82 -0
- hscida-0.1.0/.history/hscida_20260605151106.py +81 -0
- hscida-0.1.0/.history/hscida_20260605151110.py +78 -0
- hscida-0.1.0/.history/hscida_20260605151111.py +77 -0
- hscida-0.1.0/.history/hscida_20260605151120.py +77 -0
- hscida-0.1.0/.history/hscida_20260605151131.py +77 -0
- hscida-0.1.0/.history/hscida_20260605151134.py +77 -0
- hscida-0.1.0/.history/hscida_20260605151227.py +77 -0
- hscida-0.1.0/.history/hscida_20260605151228.py +77 -0
- hscida-0.1.0/.history/pyproject_20260605151240.toml +32 -0
- hscida-0.1.0/.history/pyproject_20260605151302.toml +32 -0
- hscida-0.1.0/.history/pyproject_20260605151310.toml +33 -0
- hscida-0.1.0/.history/pyproject_20260605151419.toml +33 -0
- hscida-0.1.0/.history/pyproject_20260605151903.toml +37 -0
- hscida-0.1.0/.history/pyproject_20260605151948.toml +37 -0
- hscida-0.1.0/.history/pyproject_20260605152141.toml +33 -0
- hscida-0.1.0/.history/pyproject_20260605152217.toml +33 -0
- hscida-0.1.0/.history/pyproject_20260605152709.toml +33 -0
- hscida-0.1.0/.history/scripts/publish_20260605151907.sh +24 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605151235.py +133 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605151302.py +133 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152315.py +82 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152318.py +81 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152326.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152330.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152519.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152521.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152526.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152528.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152532.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152534.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152537.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152542.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152557.py +77 -0
- hscida-0.1.0/.history/src/hscida/__init___20260605152559.py +77 -0
- hscida-0.1.0/.history/tests/test_hscida_20260605151235.py +57 -0
- hscida-0.1.0/.history/tests/test_hscida_20260605151302.py +57 -0
- hscida-0.1.0/.history/tests/test_hscida_20260605152430.py +56 -0
- hscida-0.1.0/PKG-INFO +53 -0
- hscida-0.1.0/README.md +39 -0
- hscida-0.1.0/hscida.R +56 -0
- hscida-0.1.0/pyproject.toml +33 -0
- hscida-0.1.0/rproject.toml +13 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/DESCRIPTION +46 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/INDEX +69 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/Meta/Rd.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/Meta/features.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/Meta/hsearch.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/Meta/links.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/Meta/nsInfo.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/Meta/package.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/Meta/vignette.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/NAMESPACE +134 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/NEWS.md +590 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/R/DBI +27 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/R/DBI.rdb +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/R/DBI.rdx +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/README.md +170 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-1.Rmd +706 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-1.html +1099 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-advanced.R +197 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-advanced.Rmd +346 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-advanced.html +809 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-arrow.R +87 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-arrow.Rmd +196 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-arrow.html +582 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-history.Rmd +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-history.html +335 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-proposal.Rmd +757 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI-proposal.html +1166 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI.R +66 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI.Rmd +184 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/DBI.html +594 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/backend.R +111 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/backend.Rmd +267 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/backend.html +633 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/index.html +65 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/spec.R +3 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/spec.Rmd +28 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/doc/spec.html +5552 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/AnIndex +221 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/DBI.rdb +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/DBI.rdx +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/aliases.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-archived.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-defunct.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-deprecated.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-experimental.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-maturing.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-questioning.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-soft-deprecated.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-stable.svg +29 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/figures/lifecycle-superseded.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/help/paths.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/html/00Index.html +170 -0
- hscida-0.1.0/rv/library/4.6/arm64/DBI/html/R.css +142 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/DESCRIPTION +19 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/INDEX +4 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/LICENSE +2 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/Meta/Rd.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/Meta/features.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/Meta/hsearch.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/Meta/links.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/Meta/nsInfo.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/Meta/package.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/NAMESPACE +3 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/NEWS.md +16 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/R/dotenv +27 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/R/dotenv.rdb +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/R/dotenv.rdx +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/README.md +67 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/help/AnIndex +2 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/help/aliases.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/help/dotenv.rdb +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/help/dotenv.rdx +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/help/paths.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/html/00Index.html +31 -0
- hscida-0.1.0/rv/library/4.6/arm64/dotenv/html/R.css +142 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/DESCRIPTION +94 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/INDEX +9 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/LICENSE +2 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/Meta/Rd.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/Meta/features.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/Meta/hsearch.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/Meta/links.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/Meta/nsInfo.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/Meta/package.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/NAMESPACE +61 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/NEWS.md +1118 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/R/duckdb +27 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/R/duckdb.rdb +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/R/duckdb.rdx +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/README.md +101 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/AnIndex +97 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/aliases.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/duckdb.rdb +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/duckdb.rdx +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/figures/lifecycle-deprecated.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/figures/lifecycle-experimental.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/figures/lifecycle-stable.svg +29 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/figures/lifecycle-superseded.svg +21 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/figures/logo.png +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/help/paths.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/html/00Index.html +73 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/html/R.css +142 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/icons/duckdb.png +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/R.hpp +137 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/altrep.hpp +8 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/as.hpp +338 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/attribute_proxy.hpp +50 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/data_frame.hpp +104 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/declarations.hpp +63 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/doubles.hpp +100 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/environment.hpp +58 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/external_pointer.hpp +180 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/function.hpp +149 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/integers.hpp +106 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/list.hpp +104 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/list_of.hpp +73 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/logicals.hpp +79 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/matrix.hpp +232 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/named_arg.hpp +50 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/protect.hpp +332 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/r_bool.hpp +83 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/r_string.hpp +105 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/r_vector.hpp +1459 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/raws.hpp +87 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/sexp.hpp +79 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11/strings.hpp +150 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/cpp11.hpp +26 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/include/duckdb_types.hpp +12 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/libs/duckdb.so +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/libs/symbols.rds +0 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/rstudio/connections/DuckDB.R +12 -0
- hscida-0.1.0/rv/library/4.6/arm64/duckdb/rstudio/connections.dcf +3 -0
- hscida-0.1.0/rv.lock +27 -0
- hscida-0.1.0/src/hsci_da.egg-info/PKG-INFO +29 -0
- hscida-0.1.0/src/hsci_da.egg-info/SOURCES.txt +9 -0
- hscida-0.1.0/src/hsci_da.egg-info/dependency_links.txt +1 -0
- hscida-0.1.0/src/hsci_da.egg-info/requires.txt +7 -0
- hscida-0.1.0/src/hsci_da.egg-info/top_level.txt +1 -0
- hscida-0.1.0/src/hscida/__init__.py +77 -0
- hscida-0.1.0/tests/test_hscida.py +56 -0
- hscida-0.1.0/uv.lock +882 -0
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- "**"
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
|
|
22
|
+
- name: Install uv
|
|
23
|
+
uses: astral-sh/setup-uv@v4
|
|
24
|
+
|
|
25
|
+
- name: Sync dependencies
|
|
26
|
+
run: uv sync --dev
|
|
27
|
+
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: uv run pytest -q
|
hscida-0.1.0/.gitignore
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
name: Publish
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags:
|
|
6
|
+
- "v*"
|
|
7
|
+
|
|
8
|
+
jobs:
|
|
9
|
+
build:
|
|
10
|
+
runs-on: ubuntu-latest
|
|
11
|
+
|
|
12
|
+
steps:
|
|
13
|
+
- name: Checkout
|
|
14
|
+
uses: actions/checkout@v4
|
|
15
|
+
|
|
16
|
+
- name: Set up Python
|
|
17
|
+
uses: actions/setup-python@v5
|
|
18
|
+
with:
|
|
19
|
+
python-version: "3.12"
|
|
20
|
+
|
|
21
|
+
- name: Install uv
|
|
22
|
+
uses: astral-sh/setup-uv@v4
|
|
23
|
+
|
|
24
|
+
- name: Sync dependencies
|
|
25
|
+
run: uv sync --dev
|
|
26
|
+
|
|
27
|
+
- name: Run tests
|
|
28
|
+
run: uv run pytest -q
|
|
29
|
+
|
|
30
|
+
- name: Build package
|
|
31
|
+
run: uv build
|
|
32
|
+
|
|
33
|
+
- name: Upload artifacts
|
|
34
|
+
uses: actions/upload-artifact@v4
|
|
35
|
+
with:
|
|
36
|
+
name: dist
|
|
37
|
+
path: dist/
|
|
38
|
+
|
|
39
|
+
publish:
|
|
40
|
+
runs-on: ubuntu-latest
|
|
41
|
+
needs: build
|
|
42
|
+
permissions:
|
|
43
|
+
id-token: write
|
|
44
|
+
|
|
45
|
+
environment:
|
|
46
|
+
name: pypi
|
|
47
|
+
|
|
48
|
+
steps:
|
|
49
|
+
- name: Download artifacts
|
|
50
|
+
uses: actions/download-artifact@v4
|
|
51
|
+
with:
|
|
52
|
+
name: dist
|
|
53
|
+
path: dist/
|
|
54
|
+
|
|
55
|
+
- name: Publish to PyPI
|
|
56
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- '**'
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: '3.12'
|
|
21
|
+
|
|
22
|
+
- name: Install uv
|
|
23
|
+
uses: astral-sh/setup-uv@v4
|
|
24
|
+
|
|
25
|
+
- name: Sync dependencies
|
|
26
|
+
run: uv sync --dev
|
|
27
|
+
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: uv run pytest -q
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
name: Tests
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- "**"
|
|
7
|
+
pull_request:
|
|
8
|
+
|
|
9
|
+
jobs:
|
|
10
|
+
test:
|
|
11
|
+
runs-on: ubuntu-latest
|
|
12
|
+
|
|
13
|
+
steps:
|
|
14
|
+
- name: Checkout
|
|
15
|
+
uses: actions/checkout@v4
|
|
16
|
+
|
|
17
|
+
- name: Set up Python
|
|
18
|
+
uses: actions/setup-python@v5
|
|
19
|
+
with:
|
|
20
|
+
python-version: "3.12"
|
|
21
|
+
|
|
22
|
+
- name: Install uv
|
|
23
|
+
uses: astral-sh/setup-uv@v4
|
|
24
|
+
|
|
25
|
+
- name: Sync dependencies
|
|
26
|
+
run: uv sync --dev
|
|
27
|
+
|
|
28
|
+
- name: Run tests
|
|
29
|
+
run: uv run pytest -q
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# hsci-da
|
|
2
|
+
|
|
3
|
+
Installable Python package for HSCI data access utilities built on DuckDB and Narwhals.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install .
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Run tests
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pytest
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Publish To PyPI
|
|
18
|
+
|
|
19
|
+
This repository includes GitHub Actions publishing in [.github/workflows/publish.yml](.github/workflows/publish.yml) using PyPI Trusted Publishing.
|
|
20
|
+
|
|
21
|
+
One-time setup on PyPI:
|
|
22
|
+
|
|
23
|
+
1. Create a PyPI project named `hsci-da`.
|
|
24
|
+
2. In PyPI project settings, add a Trusted Publisher for this GitHub repository and workflow file `.github/workflows/publish.yml`.
|
|
25
|
+
|
|
26
|
+
Release flow:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
uv run pytest -q
|
|
30
|
+
# bump version in pyproject.toml
|
|
31
|
+
git add pyproject.toml
|
|
32
|
+
git commit -m "Release v0.1.1"
|
|
33
|
+
git tag v0.1.1
|
|
34
|
+
git push && git push --tags
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Pushing a tag like `v0.1.1` will run tests, build artifacts, and publish to PyPI.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# hsci-da
|
|
2
|
+
|
|
3
|
+
Installable Python package for HSCI data access utilities built on DuckDB and Narwhals.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install .
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Run tests
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pytest
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Publish To PyPI (Local)
|
|
18
|
+
|
|
19
|
+
Set your token once in your shell profile:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
export TWINE_USERNAME=__token__
|
|
23
|
+
export TWINE_PASSWORD=pypi-xxxx
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Release flow from your machine:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# bump version in pyproject.toml first
|
|
30
|
+
uv sync --group publish --dev
|
|
31
|
+
uv run pytest -q
|
|
32
|
+
./scripts/publish.sh pypi
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Dry-run against TestPyPI:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
./scripts/publish.sh testpypi
|
|
39
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# hsci-da
|
|
2
|
+
|
|
3
|
+
Installable Python package for HSCI data access utilities built on DuckDB and Narwhals.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install .
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Run tests
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pytest
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Publish To PyPI (Local)
|
|
18
|
+
|
|
19
|
+
Set your token once in your shell profile:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
export TWINE_USERNAME=__token__
|
|
23
|
+
export TWINE_PASSWORD=pypi-xxxx
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Release flow from your machine:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
# bump version in pyproject.toml first
|
|
30
|
+
uv sync --group publish --dev
|
|
31
|
+
uv run pytest -q
|
|
32
|
+
uv run --group publish python -m build
|
|
33
|
+
uv run --group publish twine check dist/*
|
|
34
|
+
uv run --group publish twine upload dist/*
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Dry-run against TestPyPI:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
uv run --group publish twine upload --repository testpypi dist/*
|
|
41
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# hsci-da
|
|
2
|
+
|
|
3
|
+
Installable Python package for HSCI data access utilities built on DuckDB and Narwhals.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install .
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Run tests
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pytest
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Publish To PyPI (Local)
|
|
18
|
+
|
|
19
|
+
Set your token once in your shell profile:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
export UV_PUBLISH_TOKEN=pypi-xxxx
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Release flow from your machine:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# bump version in pyproject.toml first
|
|
29
|
+
uv sync --dev
|
|
30
|
+
uv run pytest -q
|
|
31
|
+
uv build
|
|
32
|
+
uv publish
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Dry-run against TestPyPI:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
uv publish --publish-url https://test.pypi.org/legacy/
|
|
39
|
+
```
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# hsci-da
|
|
2
|
+
|
|
3
|
+
Installable Python package for HSCI data access utilities built on DuckDB and Narwhals.
|
|
4
|
+
|
|
5
|
+
## Install
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
pip install .
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
## Run tests
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
pytest
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Publish To PyPI (Local)
|
|
18
|
+
|
|
19
|
+
Set your token once in your shell profile:
|
|
20
|
+
|
|
21
|
+
```bash
|
|
22
|
+
export UV_PUBLISH_TOKEN=pypi-xxxx
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
Release flow from your machine:
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
# bump version in pyproject.toml first
|
|
29
|
+
uv sync --dev
|
|
30
|
+
uv run pytest -q
|
|
31
|
+
uv build
|
|
32
|
+
uv publish
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Dry-run against TestPyPI:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
uv publish --publish-url https://test.pypi.org/legacy/
|
|
39
|
+
```
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
from typing import Any, cast
|
|
3
|
+
from hereutil import here
|
|
4
|
+
import narwhals as nw
|
|
5
|
+
import duckdb
|
|
6
|
+
import sqlglot
|
|
7
|
+
import os
|
|
8
|
+
import polars as pl
|
|
9
|
+
|
|
10
|
+
from dotenv import dotenv_values
|
|
11
|
+
|
|
12
|
+
_DEFAULT_DUCKDB_CONFIG = dict(parquet_metadata_cache="true", preserve_insertion_order="false", enable_fsst_vectors="true")
|
|
13
|
+
_PROJROOT = str(here())
|
|
14
|
+
|
|
15
|
+
@dataclass
|
|
16
|
+
class DataAccessConfig:
|
|
17
|
+
glob_pattern: str
|
|
18
|
+
init_sql: str
|
|
19
|
+
duckdb_config: dict[str, Any] = field(default_factory=lambda: _DEFAULT_DUCKDB_CONFIG)
|
|
20
|
+
projroot: str = _PROJROOT
|
|
21
|
+
|
|
22
|
+
def config_from_env() -> DataAccessConfig:
|
|
23
|
+
c = {
|
|
24
|
+
**dotenv_values(),
|
|
25
|
+
**os.environ,
|
|
26
|
+
}
|
|
27
|
+
return DataAccessConfig(
|
|
28
|
+
glob_pattern=c['GLOB_PATTERN'],
|
|
29
|
+
init_sql=c['INIT_SQL'],
|
|
30
|
+
duckdb_config={k: v for k, v in [pair.split('=') for pair in c['DUCKDB_CONFIG'].split(',')] } if 'DUCKDB_CONFIG' in c else _DEFAULT_DUCKDB_CONFIG,
|
|
31
|
+
projroot=c.get('PROJROOT', _PROJROOT)
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
class DataAccess:
|
|
35
|
+
def __init__(self, config: DataAccessConfig = config_from_env()) -> None:
|
|
36
|
+
self.con = duckdb.connect(config=config.duckdb_config)
|
|
37
|
+
self.con.sql(config.init_sql)
|
|
38
|
+
self.datasets = dict[str, nw.LazyFrame[duckdb.DuckDBPyRelation]]()
|
|
39
|
+
self.config = config
|
|
40
|
+
|
|
41
|
+
def register_files_as_view(self, table_name: str, *paths: str, replace: bool = False) -> None:
|
|
42
|
+
self.con.sql(f"CREATE {('OR REPLACE' if replace else '')} VIEW {'IF NOT EXISTS' if not replace else ''} {table_name} AS FROM read_{'parquet' if paths[0].endswith('.parquet') else 'csv'}(['{"', '".join(paths)}'], hive_partitioning=true);")
|
|
43
|
+
|
|
44
|
+
def f(self, dataset: str, *paths: str,replace: bool = False, debug: bool = False) -> nw.LazyFrame[duckdb.DuckDBPyRelation]:
|
|
45
|
+
if dataset not in self.datasets or replace:
|
|
46
|
+
if not paths:
|
|
47
|
+
paths = tuple(path[0] for path in self.con.sql("FROM "+self.config.glob_pattern.format(dataset=dataset,projroot=self.config.projroot)).fetchall())
|
|
48
|
+
if debug:
|
|
49
|
+
print(f"DEBUG: Found paths for dataset {dataset}: {paths}")
|
|
50
|
+
if not paths:
|
|
51
|
+
print(f"No files found for dataset {dataset} in {self.config.glob_pattern.format(dataset=dataset,projroot=self.config.projroot)}")
|
|
52
|
+
return cast(nw.LazyFrame[duckdb.DuckDBPyRelation], None)
|
|
53
|
+
self.register_files_as_view(dataset, *paths, replace=replace)
|
|
54
|
+
self.datasets[dataset] = nw.from_native(self.con.sql(f'FROM {dataset}'))
|
|
55
|
+
return self.datasets[dataset]
|
|
56
|
+
|
|
57
|
+
c = nw.col
|
|
58
|
+
l = nw.lit
|
|
59
|
+
|
|
60
|
+
def to_narwhals(duckdb_relation: duckdb.DuckDBPyRelation) -> nw.LazyFrame[duckdb.DuckDBPyRelation]:
|
|
61
|
+
return nw.from_native(duckdb_relation)
|
|
62
|
+
|
|
63
|
+
n = to_narwhals
|
|
64
|
+
|
|
65
|
+
def to_duckdb(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]) -> duckdb.DuckDBPyRelation:
|
|
66
|
+
return lnf.to_native()
|
|
67
|
+
|
|
68
|
+
d = to_duckdb
|
|
69
|
+
|
|
70
|
+
def to_polars(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]) -> pl.DataFrame:
|
|
71
|
+
return lnf.collect(backend='polars').to_native()
|
|
72
|
+
|
|
73
|
+
p = to_polars
|
|
74
|
+
|
|
75
|
+
def to_pandas(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]):
|
|
76
|
+
return d(lnf).df()
|
|
77
|
+
|
|
78
|
+
def format_sql(query: str, read:str = 'duckdb', write:str = 'duckb') -> str:
|
|
79
|
+
return sqlglot.transpile(query, read=read, write=write, pretty=True)[0]
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
__all__ = [ "DataAccess", "c", "l", "to_narwhals", "n", "to_duckdb", "d", "to_polars", "p","to_pandas", "format_sql" ]
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
from typing import Any, cast
|
|
3
|
+
from hereutil import here
|
|
4
|
+
import narwhals as nw
|
|
5
|
+
import duckdb
|
|
6
|
+
import os
|
|
7
|
+
import polars as pl
|
|
8
|
+
|
|
9
|
+
from dotenv import dotenv_values
|
|
10
|
+
|
|
11
|
+
_DEFAULT_DUCKDB_CONFIG = dict(parquet_metadata_cache="true", preserve_insertion_order="false", enable_fsst_vectors="true")
|
|
12
|
+
_PROJROOT = str(here())
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class DataAccessConfig:
|
|
16
|
+
glob_pattern: str
|
|
17
|
+
init_sql: str
|
|
18
|
+
duckdb_config: dict[str, Any] = field(default_factory=lambda: _DEFAULT_DUCKDB_CONFIG)
|
|
19
|
+
projroot: str = _PROJROOT
|
|
20
|
+
|
|
21
|
+
def config_from_env() -> DataAccessConfig:
|
|
22
|
+
c = {
|
|
23
|
+
**dotenv_values(),
|
|
24
|
+
**os.environ,
|
|
25
|
+
}
|
|
26
|
+
return DataAccessConfig(
|
|
27
|
+
glob_pattern=c['GLOB_PATTERN'],
|
|
28
|
+
init_sql=c['INIT_SQL'],
|
|
29
|
+
duckdb_config={k: v for k, v in [pair.split('=') for pair in c['DUCKDB_CONFIG'].split(',')] } if 'DUCKDB_CONFIG' in c else _DEFAULT_DUCKDB_CONFIG,
|
|
30
|
+
projroot=c.get('PROJROOT', _PROJROOT)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
class DataAccess:
|
|
34
|
+
def __init__(self, config: DataAccessConfig = config_from_env()) -> None:
|
|
35
|
+
self.con = duckdb.connect(config=config.duckdb_config)
|
|
36
|
+
self.con.sql(config.init_sql)
|
|
37
|
+
self.datasets = dict[str, nw.LazyFrame[duckdb.DuckDBPyRelation]]()
|
|
38
|
+
self.config = config
|
|
39
|
+
|
|
40
|
+
def register_files_as_view(self, table_name: str, *paths: str, replace: bool = False) -> None:
|
|
41
|
+
self.con.sql(f"CREATE {('OR REPLACE' if replace else '')} VIEW {'IF NOT EXISTS' if not replace else ''} {table_name} AS FROM read_{'parquet' if paths[0].endswith('.parquet') else 'csv'}(['{"', '".join(paths)}'], hive_partitioning=true);")
|
|
42
|
+
|
|
43
|
+
def f(self, dataset: str, *paths: str,replace: bool = False, debug: bool = False) -> nw.LazyFrame[duckdb.DuckDBPyRelation]:
|
|
44
|
+
if dataset not in self.datasets or replace:
|
|
45
|
+
if not paths:
|
|
46
|
+
paths = tuple(path[0] for path in self.con.sql("FROM "+self.config.glob_pattern.format(dataset=dataset,projroot=self.config.projroot)).fetchall())
|
|
47
|
+
if debug:
|
|
48
|
+
print(f"DEBUG: Found paths for dataset {dataset}: {paths}")
|
|
49
|
+
if not paths:
|
|
50
|
+
print(f"No files found for dataset {dataset} in {self.config.glob_pattern.format(dataset=dataset,projroot=self.config.projroot)}")
|
|
51
|
+
return cast(nw.LazyFrame[duckdb.DuckDBPyRelation], None)
|
|
52
|
+
self.register_files_as_view(dataset, *paths, replace=replace)
|
|
53
|
+
self.datasets[dataset] = nw.from_native(self.con.sql(f'FROM {dataset}'))
|
|
54
|
+
return self.datasets[dataset]
|
|
55
|
+
|
|
56
|
+
c = nw.col
|
|
57
|
+
l = nw.lit
|
|
58
|
+
|
|
59
|
+
def to_narwhals(duckdb_relation: duckdb.DuckDBPyRelation) -> nw.LazyFrame[duckdb.DuckDBPyRelation]:
|
|
60
|
+
return nw.from_native(duckdb_relation)
|
|
61
|
+
|
|
62
|
+
n = to_narwhals
|
|
63
|
+
|
|
64
|
+
def to_duckdb(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]) -> duckdb.DuckDBPyRelation:
|
|
65
|
+
return lnf.to_native()
|
|
66
|
+
|
|
67
|
+
d = to_duckdb
|
|
68
|
+
|
|
69
|
+
def to_polars(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]) -> pl.DataFrame:
|
|
70
|
+
return lnf.collect(backend='polars').to_native()
|
|
71
|
+
|
|
72
|
+
p = to_polars
|
|
73
|
+
|
|
74
|
+
def to_pandas(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]):
|
|
75
|
+
return d(lnf).df()
|
|
76
|
+
|
|
77
|
+
def format_sql(query: str, read:str = 'duckdb', write:str = 'duckb') -> str:
|
|
78
|
+
return sqlglot.transpile(query, read=read, write=write, pretty=True)[0]
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
__all__ = [ "DataAccess", "c", "l", "to_narwhals", "n", "to_duckdb", "d", "to_polars", "p","to_pandas", "format_sql" ]
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
from dataclasses import dataclass, field
|
|
2
|
+
from typing import Any, cast
|
|
3
|
+
from hereutil import here
|
|
4
|
+
import narwhals as nw
|
|
5
|
+
import duckdb
|
|
6
|
+
import os
|
|
7
|
+
import polars as pl
|
|
8
|
+
|
|
9
|
+
from dotenv import dotenv_values
|
|
10
|
+
|
|
11
|
+
_DEFAULT_DUCKDB_CONFIG = dict(parquet_metadata_cache="true", preserve_insertion_order="false", enable_fsst_vectors="true")
|
|
12
|
+
_PROJROOT = str(here())
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class DataAccessConfig:
|
|
16
|
+
glob_pattern: str
|
|
17
|
+
init_sql: str
|
|
18
|
+
duckdb_config: dict[str, Any] = field(default_factory=lambda: _DEFAULT_DUCKDB_CONFIG)
|
|
19
|
+
projroot: str = _PROJROOT
|
|
20
|
+
|
|
21
|
+
def config_from_env() -> DataAccessConfig:
|
|
22
|
+
c = {
|
|
23
|
+
**dotenv_values(),
|
|
24
|
+
**os.environ,
|
|
25
|
+
}
|
|
26
|
+
return DataAccessConfig(
|
|
27
|
+
glob_pattern=c['GLOB_PATTERN'],
|
|
28
|
+
init_sql=c['INIT_SQL'],
|
|
29
|
+
duckdb_config={k: v for k, v in [pair.split('=') for pair in c['DUCKDB_CONFIG'].split(',')] } if 'DUCKDB_CONFIG' in c else _DEFAULT_DUCKDB_CONFIG,
|
|
30
|
+
projroot=c.get('PROJROOT', _PROJROOT)
|
|
31
|
+
)
|
|
32
|
+
|
|
33
|
+
class DataAccess:
|
|
34
|
+
def __init__(self, config: DataAccessConfig = config_from_env()) -> None:
|
|
35
|
+
self.con = duckdb.connect(config=config.duckdb_config)
|
|
36
|
+
self.con.sql(config.init_sql)
|
|
37
|
+
self.datasets = dict[str, nw.LazyFrame[duckdb.DuckDBPyRelation]]()
|
|
38
|
+
self.config = config
|
|
39
|
+
|
|
40
|
+
def register_files_as_view(self, table_name: str, *paths: str, replace: bool = False) -> None:
|
|
41
|
+
self.con.sql(f"CREATE {('OR REPLACE' if replace else '')} VIEW {'IF NOT EXISTS' if not replace else ''} {table_name} AS FROM read_{'parquet' if paths[0].endswith('.parquet') else 'csv'}(['{"', '".join(paths)}'], hive_partitioning=true);")
|
|
42
|
+
|
|
43
|
+
def f(self, dataset: str, *paths: str,replace: bool = False, debug: bool = False) -> nw.LazyFrame[duckdb.DuckDBPyRelation]:
|
|
44
|
+
if dataset not in self.datasets or replace:
|
|
45
|
+
if not paths:
|
|
46
|
+
paths = tuple(path[0] for path in self.con.sql("FROM "+self.config.glob_pattern.format(dataset=dataset,projroot=self.config.projroot)).fetchall())
|
|
47
|
+
if debug:
|
|
48
|
+
print(f"DEBUG: Found paths for dataset {dataset}: {paths}")
|
|
49
|
+
if not paths:
|
|
50
|
+
print(f"No files found for dataset {dataset} in {self.config.glob_pattern.format(dataset=dataset,projroot=self.config.projroot)}")
|
|
51
|
+
return cast(nw.LazyFrame[duckdb.DuckDBPyRelation], None)
|
|
52
|
+
self.register_files_as_view(dataset, *paths, replace=replace)
|
|
53
|
+
self.datasets[dataset] = nw.from_native(self.con.sql(f'FROM {dataset}'))
|
|
54
|
+
return self.datasets[dataset]
|
|
55
|
+
|
|
56
|
+
c = nw.col
|
|
57
|
+
l = nw.lit
|
|
58
|
+
|
|
59
|
+
def to_narwhals(duckdb_relation: duckdb.DuckDBPyRelation) -> nw.LazyFrame[duckdb.DuckDBPyRelation]:
|
|
60
|
+
return nw.from_native(duckdb_relation)
|
|
61
|
+
|
|
62
|
+
n = to_narwhals
|
|
63
|
+
|
|
64
|
+
def to_duckdb(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]) -> duckdb.DuckDBPyRelation:
|
|
65
|
+
return lnf.to_native()
|
|
66
|
+
|
|
67
|
+
d = to_duckdb
|
|
68
|
+
|
|
69
|
+
def to_polars(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]) -> pl.DataFrame:
|
|
70
|
+
return lnf.collect(backend='polars').to_native()
|
|
71
|
+
|
|
72
|
+
p = to_polars
|
|
73
|
+
|
|
74
|
+
def to_pandas(lnf: nw.LazyFrame[duckdb.DuckDBPyRelation]):
|
|
75
|
+
return d(lnf).df()
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
__all__ = [ "DataAccess", "c", "l", "to_narwhals", "n", "to_duckdb", "d", "to_polars", "p","to_pandas", "format_sql" ]
|