| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,84 @@ | ||
| name: Benchmarks | ||
|
|
||
| on: | ||
| push: | ||
| branches: | ||
| - main | ||
| - "*.x.x" | ||
| merge_group: | ||
|
|
||
| # since we're writing to cloud storage, we don't want to have multiple | ||
| # instances of this job running at one time | ||
| concurrency: benchmarks-${{ github.repository }} | ||
|
|
||
| permissions: | ||
| # increase the rate limit for github operations, but limit token permissions | ||
| # to read-only | ||
| contents: read | ||
|
|
||
| jobs: | ||
| benchmarks: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: install python | ||
| uses: actions/setup-python@v5 | ||
| id: install_python | ||
| with: | ||
| python-version: "3.11" | ||
|
|
||
| - name: install poetry | ||
| run: pip install 'poetry==1.8.2' | ||
|
|
||
| - name: install system dependencies | ||
| run: sudo apt-get install -qq -y build-essential libgeos-dev freetds-dev unixodbc-dev | ||
|
|
||
| - name: install ibis | ||
| run: poetry install --without dev --without docs --all-extras | ||
|
|
||
| - name: make benchmark output dir | ||
| run: mkdir .benchmarks | ||
|
|
||
| - name: benchmark | ||
| run: poetry run pytest --benchmark-enable --benchmark-json .benchmarks/output.json ibis/tests/benchmarks | ||
|
|
||
| - uses: google-github-actions/auth@v2 | ||
| with: | ||
| credentials_json: ${{ secrets.GCP_CREDENTIALS }} | ||
|
|
||
| - uses: google-github-actions/setup-gcloud@v2 | ||
|
|
||
| - name: show gcloud info | ||
| run: gcloud info | ||
|
|
||
| - name: download the latest duckdb release | ||
| env: | ||
| GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} | ||
| run: | | ||
| set -euo pipefail | ||
| gh release download -R duckdb/duckdb --pattern 'duckdb_cli-linux-amd64.zip' | ||
| unzip duckdb_cli-linux-amd64.zip | ||
| - name: convert json data to parquet | ||
| run: | | ||
| set -euo pipefail | ||
| # sort json keys | ||
| jq --sort-keys -rcM < "$PWD/.benchmarks/output.json" > output.json | ||
| # connect to a file to allow spilling to disk | ||
| ./duckdb json2parquet.ddb <<EOF | ||
| COPY ( | ||
| SELECT * FROM read_ndjson_auto('output.json', maximum_object_size=2**27) | ||
| ) TO 'output.parquet' (FORMAT PARQUET, COMPRESSION ZSTD) | ||
| EOF | ||
| - name: copy data to gcs | ||
| run: | | ||
| set -euo pipefail | ||
| timestamp="$(date --iso-8601=ns --utc | tr ',' '.')" | ||
| gsutil cp output.parquet "gs://ibis-benchmark-data/ci/${timestamp}.parquet" |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| name: Docs main | ||
|
|
||
| on: | ||
| push: | ||
| branches: | ||
| - main | ||
| merge_group: | ||
|
|
||
| # only a single docs job that pushes to `main` can run at any given time | ||
| concurrency: docs-${{ github.repository }} | ||
|
|
||
| permissions: | ||
| # increase the rate limit for github operations, but limit token permissions | ||
| # to read-only | ||
| contents: read | ||
|
|
||
| jobs: | ||
| docs: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: install nix | ||
| uses: cachix/install-nix-action@v26 | ||
| with: | ||
| extra_nix_config: | | ||
| access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} | ||
| - name: setup cachix | ||
| uses: cachix/cachix-action@v14 | ||
| with: | ||
| name: ibis | ||
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | ||
| extraPullNames: nix-community,poetry2nix | ||
|
|
||
| - name: checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: run doctests | ||
| # keep HOME because duckdb (which we use for doctests) wants to use | ||
| # that for extensions | ||
| run: nix develop --ignore-environment --keep HOME --keep HYPOTHESIS_PROFILE -c just doctest | ||
|
|
||
| - name: build api docs | ||
| run: nix develop --ignore-environment -c just docs-apigen --verbose | ||
|
|
||
| - name: build docs | ||
| run: nix develop --ignore-environment --keep HOME -c just docs-render | ||
|
|
||
| - name: build jupyterlite | ||
| run: nix develop --ignore-environment --keep HOME -c just build-jupyterlite | ||
|
|
||
| - name: check that all frozen computations were done before push | ||
| run: git diff --exit-code --stat | ||
|
|
||
| - name: verify internal links | ||
| run: nix develop --ignore-environment '.#links' -c just checklinks --offline --no-progress | ||
|
|
||
| - name: deploy docs | ||
| run: nix develop --ignore-environment --keep NETLIFY_AUTH_TOKEN -c just docs-deploy | ||
| env: | ||
| NETLIFY_AUTH_TOKEN: ${{ secrets.NETLIFY_AUTH_TOKEN }} | ||
|
|
||
| # Upload index related | ||
| - name: Setup Python | ||
| uses: actions/setup-python@v5 | ||
| with: | ||
| python-version: "3.10" | ||
|
|
||
| - name: Install Algolia API Dependencies | ||
| run: | | ||
| python -m pip install --upgrade algoliasearch | ||
| - name: Create and Upload Index | ||
| run: | | ||
| python .github/workflows/upload-algolia.py | ||
| env: | ||
| ALGOLIA_WRITE_API_KEY: ${{ secrets.ALGOLIA_WRITE_API_KEY }} | ||
| ALGOLIA_APP_ID: HS77W8GWM1 | ||
| ALGOLIA_INDEX: prod_ibis |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,57 @@ | ||
| name: Docs PR | ||
|
|
||
| on: | ||
| pull_request: | ||
| branches: | ||
| - main | ||
| - "*.x.x" | ||
| merge_group: | ||
|
|
||
| concurrency: | ||
| group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} | ||
| cancel-in-progress: true | ||
|
|
||
| permissions: | ||
| # increase the rate limit for github operations, but limit token permissions | ||
| # to read-only | ||
| contents: read | ||
|
|
||
| jobs: | ||
| docs: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: install nix | ||
| uses: cachix/install-nix-action@v26 | ||
| with: | ||
| extra_nix_config: | | ||
| access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} | ||
| - name: setup cachix | ||
| uses: cachix/cachix-action@v14 | ||
| with: | ||
| name: ibis | ||
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | ||
| extraPullNames: nix-community,poetry2nix | ||
|
|
||
| - name: checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: run doctest | ||
| # keep HOME because duckdb (which we use for doctests) wants to use | ||
| # that for extensions | ||
| run: nix develop --ignore-environment --keep HOME --keep HYPOTHESIS_PROFILE -c just doctest | ||
|
|
||
| - name: generate api docs | ||
| run: nix develop --ignore-environment -c just docs-apigen --verbose | ||
|
|
||
| - name: build docs | ||
| run: nix develop --ignore-environment --keep HOME -c just docs-render | ||
|
|
||
| - name: build jupyterlite | ||
| run: nix develop --ignore-environment --keep HOME -c just build-jupyterlite | ||
|
|
||
| - name: check that all frozen computations were done before push | ||
| run: git diff --exit-code --stat | ||
|
|
||
| - name: verify internal links | ||
| run: nix develop --ignore-environment '.#links' -c just checklinks --offline --no-progress |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,103 @@ | ||
| name: Lint | ||
|
|
||
| on: | ||
| push: | ||
| branches: | ||
| - main | ||
| - "*.x.x" | ||
| pull_request: | ||
| branches: | ||
| - main | ||
| - "*.x.x" | ||
| merge_group: | ||
|
|
||
| concurrency: | ||
| group: ${{ github.repository }}-${{ github.head_ref || github.sha }}-${{ github.workflow }} | ||
| cancel-in-progress: true | ||
|
|
||
| permissions: | ||
| # increase the rate limit for github operations, but limit token permissions | ||
| # to read-only | ||
| contents: read | ||
|
|
||
| jobs: | ||
| lint: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: checkout | ||
| uses: actions/checkout@v4 | ||
|
|
||
| - name: install nix | ||
| uses: cachix/install-nix-action@v26 | ||
| with: | ||
| extra_nix_config: | | ||
| access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} | ||
| - name: setup cachix | ||
| uses: cachix/cachix-action@v14 | ||
| with: | ||
| name: ibis | ||
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | ||
| extraPullNames: nix-community,poetry2nix | ||
|
|
||
| # run against the full shell.nix on push so it gets pushed to cachix | ||
| - name: pre-commit checks | ||
| run: nix develop '.#preCommit' --ignore-environment --keep-going -c pre-commit run --all-files --show-diff-on-failure --color=always | ||
|
|
||
| release_notes_spellcheck: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - name: checkout | ||
| uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - name: install nix | ||
| uses: cachix/install-nix-action@v26 | ||
| with: | ||
| extra_nix_config: | | ||
| access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} | ||
| - name: setup cachix | ||
| uses: cachix/cachix-action@v14 | ||
| with: | ||
| name: ibis | ||
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | ||
| extraPullNames: nix-community,poetry2nix | ||
|
|
||
| - name: check generated release notes spelling | ||
| run: nix run '.#check-release-notes-spelling' | ||
|
|
||
| simulate_release: | ||
| runs-on: ubuntu-latest | ||
| steps: | ||
| - uses: actions/checkout@v4 | ||
| with: | ||
| fetch-depth: 0 | ||
|
|
||
| - uses: cachix/install-nix-action@v26 | ||
| with: | ||
| extra_nix_config: | | ||
| access-tokens = github.com=${{ secrets.GITHUB_TOKEN }} | ||
| - uses: cachix/cachix-action@v14 | ||
| with: | ||
| name: ibis | ||
| authToken: ${{ secrets.CACHIX_AUTH_TOKEN }} | ||
| extraPullNames: nix-community,poetry2nix | ||
|
|
||
| - name: Configure git info | ||
| run: | | ||
| set -euo pipefail | ||
| # not incredibly important what user we use here | ||
| # | ||
| # we're making a commit in a temporary worktree that is thrown away | ||
| # if the process exits successfully | ||
| # | ||
| # git requires user information to make commits | ||
| git config user.name 'ibis-squawk-bot[bot]' | ||
| git config user.email 'ibis-squawk-bot[bot]@users.noreply.github.com' | ||
| - name: run semantic-release | ||
| run: ./ci/release/dry_run.sh |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -36,8 +36,6 @@ jobs: | |
| - "3.9" | ||
| - "3.10" | ||
| - "3.11" | ||
| - "3.12" | ||
| steps: | ||
| - run: echo "No build required" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,60 @@ | ||
| from __future__ import annotations # noqa: INP001 | ||
|
|
||
| import json | ||
| import os | ||
| from urllib.request import urlopen | ||
|
|
||
| from algoliasearch.search_client import SearchClient | ||
|
|
||
| api_key = os.environ["ALGOLIA_WRITE_API_KEY"] | ||
| app_id = os.environ["ALGOLIA_APP_ID"] | ||
| index_name = os.environ["ALGOLIA_INDEX"] | ||
|
|
||
|
|
||
| def truncate_string(string, max_size): | ||
| # Encode the string to bytes using UTF-8 encoding | ||
| encoded_string = string.encode("utf-8") | ||
|
|
||
| # Truncate the bytes to ensure the size is smaller than max_bytes | ||
| truncated_bytes = encoded_string[: max_size - 1] | ||
|
|
||
| # Decode the truncated bytes back to string | ||
| truncated_string = truncated_bytes.decode("utf-8", errors="ignore") | ||
|
|
||
| return truncated_string | ||
|
|
||
|
|
||
| def main(): | ||
| client = SearchClient.create(app_id, api_key) | ||
| index = client.init_index(index_name) | ||
|
|
||
| # Download the index generated by quarto from the ibis website | ||
| with urlopen("https://ibis-project.org/search.json") as response: | ||
| search = json.loads(response.read()) | ||
|
|
||
| # According to algolia docs, for the build plan each record (in our case this | ||
| # is search[i]) has a limit of 10KB. | ||
| # (see https://support.algolia.com/hc/en-us/articles/4406981897617-Is-there-a-size-limit-for-my-index-records and | ||
| # https://www.algolia.com/doc/guides/scaling/algolia-service-limits/) | ||
| # Every key in our record is pretty small except for the "text" one. | ||
| # I tried truncating it to < 10_000 and even though we don't get a record | ||
| # size error, we keep hitting a AlgoliaUnreachableHostException | ||
| # I opened an issue because the error is unhelpful, and unclear. | ||
| # https://github.com/algolia/algoliasearch-client-python/issues/565 | ||
|
|
||
| # It wasn't until I cut the "text" field to max_size=1000 that I was able to | ||
| # get an index. My guess is we are hitting another limitation, but I was not | ||
| # able to find anything on the docs. | ||
|
|
||
| max_size = 1_000 | ||
| for obj in search: | ||
| if len(obj["text"].encode("utf-8")) > max_size: | ||
| obj["text"] = truncate_string(obj["text"], max_size) | ||
| size = len(obj["text"].encode("utf-8")) | ||
| assert size < max_size | ||
|
|
||
| index.replace_all_objects(search) | ||
|
|
||
|
|
||
| if __name__ == "__main__": | ||
| main() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -3,4 +3,4 @@ semi = true | |
| singleQuote = false | ||
| arrowParens = "avoid" | ||
| useTabs = false | ||
| trailingComma = "none" | ||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,170 @@ | ||
| CREATE OR REPLACE TABLE {dataset}.struct ( | ||
| abc STRUCT<a FLOAT64, b STRING, c INT64> | ||
| ); | ||
|
|
||
| INSERT INTO {dataset}.struct VALUES | ||
| (STRUCT(1.0, 'banana', 2)), | ||
| (STRUCT(2.0, 'apple', 3)), | ||
| (STRUCT(3.0, 'orange', 4)), | ||
| (STRUCT(NULL, 'banana', 2)), | ||
| (STRUCT(2.0, NULL, 3)), | ||
| (NULL), | ||
| (STRUCT(3.0, 'orange', NULL)); | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.array_types ( | ||
| x ARRAY<INT64>, | ||
| y ARRAY<STRING>, | ||
| z ARRAY<FLOAT64>, | ||
| grouper STRING, | ||
| scalar_column FLOAT64, | ||
| ); | ||
|
|
||
| INSERT INTO {dataset}.array_types VALUES | ||
| ([1, 2, 3], ['a', 'b', 'c'], [1.0, 2.0, 3.0], 'a', 1.0), | ||
| ([4, 5], ['d', 'e'], [4.0, 5.0], 'a', 2.0), | ||
| ([6], ['f'], [6.0], 'a', 3.0), | ||
| ([1], ['a'], [], 'b', 4.0), | ||
| ([2, 3], ['b', 'c'], NULL, 'b', 5.0), | ||
| ([4, 5], ['d', 'e'], [4.0, 5.0], 'c', 6.0); | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.win ( | ||
| g STRING, | ||
| x INT64, | ||
| y INT64 | ||
| ); | ||
|
|
||
| INSERT INTO {dataset}.win VALUES | ||
| ('a', 0, 3), | ||
| ('a', 1, 2), | ||
| ('a', 2, 0), | ||
| ('a', 3, 1), | ||
| ('a', 4, 1); | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.topk ( | ||
| x INT64 | ||
| ); | ||
|
|
||
| INSERT INTO {dataset}.topk VALUES (1), (1), (NULL); | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.numeric_table ( | ||
| string_col STRING, | ||
| numeric_col NUMERIC | ||
| ); | ||
|
|
||
| INSERT INTO {dataset}.numeric_table VALUES | ||
| ('1st value', 0.999999999), | ||
| ('2nd value', 0.000000002); | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.json_t ( | ||
| js JSON | ||
| ); | ||
|
|
||
| INSERT INTO {dataset}.json_t VALUES | ||
| (JSON '{{"a": [1,2,3,4], "b": 1}}'), | ||
| (JSON '{{"a":null,"b":2}}'), | ||
| (JSON '{{"a":"foo", "c":null}}'), | ||
| (JSON 'null'), | ||
| (JSON '[42,47,55]'), | ||
| (JSON '[]'), | ||
| (JSON '"a"'), | ||
| (JSON '""'), | ||
| (JSON '"b"'), | ||
| (NULL), | ||
| (JSON 'true'), | ||
| (JSON 'false'), | ||
| (JSON '42'), | ||
| (JSON '37.37'); | ||
|
|
||
|
|
||
| LOAD DATA OVERWRITE {dataset}.functional_alltypes ( | ||
| id INT64, | ||
| bool_col BOOLEAN, | ||
| tinyint_col INT64, | ||
| smallint_col INT64, | ||
| int_col INT64, | ||
| bigint_col INT64, | ||
| float_col FLOAT64, | ||
| double_col FLOAT64, | ||
| date_string_col STRING, | ||
| string_col STRING, | ||
| timestamp_col DATETIME, | ||
| year INT64, | ||
| month INT64 | ||
| ) | ||
| FROM FILES ( | ||
| format = 'PARQUET', | ||
| uris = ['gs://ibis-ci-data/functional_alltypes.parquet'] | ||
| ); | ||
|
|
||
| LOAD DATA OVERWRITE {dataset}.awards_players | ||
| FROM FILES ( | ||
| format = 'PARQUET', | ||
| uris = ['gs://ibis-ci-data/awards_players.parquet'] | ||
| ); | ||
|
|
||
| LOAD DATA OVERWRITE {dataset}.batting | ||
| FROM FILES ( | ||
| format = 'PARQUET', | ||
| uris = ['gs://ibis-ci-data/batting.parquet'] | ||
| ); | ||
|
|
||
| LOAD DATA OVERWRITE {dataset}.diamonds | ||
| FROM FILES ( | ||
| format = 'PARQUET', | ||
| uris = ['gs://ibis-ci-data/diamonds.parquet'] | ||
| ); | ||
|
|
||
| LOAD DATA OVERWRITE {dataset}.astronauts | ||
| FROM FILES ( | ||
| format = 'PARQUET', | ||
| uris = ['gs://ibis-ci-data/astronauts.parquet'] | ||
| ); | ||
|
|
||
| LOAD DATA OVERWRITE {dataset}.functional_alltypes_parted ( | ||
| id INT64, | ||
| bool_col BOOLEAN, | ||
| tinyint_col INT64, | ||
| smallint_col INT64, | ||
| int_col INT64, | ||
| bigint_col INT64, | ||
| float_col FLOAT64, | ||
| double_col FLOAT64, | ||
| date_string_col STRING, | ||
| string_col STRING, | ||
| timestamp_col DATETIME, | ||
| year INT64, | ||
| month INT64 | ||
| ) | ||
| PARTITION BY _PARTITIONDATE | ||
| FROM FILES ( | ||
| format = 'PARQUET', | ||
| uris = ['gs://ibis-ci-data/functional_alltypes.parquet'] | ||
| ); | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.timestamp_column_parted ( | ||
| my_timestamp_parted_col TIMESTAMP, | ||
| string_col STRING, | ||
| int_col INT64 | ||
| ) | ||
| PARTITION BY DATE(my_timestamp_parted_col); | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.date_column_parted ( | ||
| my_date_parted_col DATE, | ||
| string_col STRING, | ||
| int_col INT64 | ||
| ) | ||
| PARTITION BY my_date_parted_col; | ||
|
|
||
| CREATE OR REPLACE TABLE {dataset}.struct_table ( | ||
| array_of_structs_col ARRAY<STRUCT<int_field INTEGER, string_field STRING>>, | ||
| nested_struct_col STRUCT<sub_struct STRUCT<timestamp_col TIMESTAMP>>, | ||
| struct_col STRUCT<string_field STRING> | ||
| ); | ||
|
|
||
| INSERT INTO {dataset}.struct_table VALUES | ||
| ([(12345, 'abcdefg'), (NULL, NULL)], | ||
| STRUCT(STRUCT(NULL)), | ||
| STRUCT(NULL)), | ||
| ([(12345, 'abcdefg'), (NULL, 'hijklmnop')], | ||
| STRUCT(STRUCT('2017-10-20 16:37:50.000000')), | ||
| STRUCT('a')); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,101 @@ | ||
| name: ibis-dev-flink | ||
| channels: | ||
| - conda-forge | ||
| dependencies: | ||
| # runtime dependencies | ||
| - python =3.10 | ||
| - atpublic >=2.3 | ||
| - bidict >=0.22.1 | ||
| - black >=22.1.0,<25 | ||
| - clickhouse-connect >=0.5.23 | ||
| - dask >=2022.9.1 | ||
| - datafusion >=0.6 | ||
| - db-dtypes >=0.3.0,<2 | ||
| - deltalake | ||
| - duckdb-engine <1,>=0.1.8 | ||
| - filelock >=3.7.0,<4 | ||
| - fsspec >=2022.1.0 | ||
| - gcsfs | ||
| - geopandas >=0.6 | ||
| - google-cloud-bigquery >=3,<4 | ||
| - google-cloud-bigquery-storage >=2,<3 | ||
| - impyla >=0.17 | ||
| - numpy >=1.23.2,<2 | ||
| - oracledb >=1.3.1 | ||
| - packaging >=21.3 | ||
| - pandas >=1.5.3,<3 | ||
| - parsy >=2 | ||
| - pins >=0.8.2 | ||
| - poetry-core >=1.0.0 | ||
| - poetry-dynamic-versioning >=0.18.0 | ||
| - polars >=0.20.17 | ||
| - psycopg2 >=2.8.4 | ||
| - pyarrow =11.0.0 | ||
| - pyarrow-tests | ||
| - pyarrow-hotfix >=0.4 | ||
| - pydata-google-auth | ||
| - pydruid >=0.6.5 | ||
| - pymysql >=1 | ||
| - pyspark >=3 | ||
| - python-dateutil >=2.8.2 | ||
| - python-duckdb >=0.8.1 | ||
| - python-graphviz >=0.16 | ||
| - pytz >=2022.7 | ||
| - regex >=2021.7.6 | ||
| - requests >=2 | ||
| - rich >=12.4.4 | ||
| - shapely>=2,<3 | ||
| - snowflake-connector-python >=3.0.2 | ||
| - sqlglot >=22.5,<23.1 | ||
| - toolz >=0.11 | ||
| - trino-python-client >=0.321 | ||
| # geospatial | ||
| - leafmap >=0.29.6 | ||
| # streaming | ||
| - kafka-python | ||
| - openjdk <21 | ||
| # test dependencies | ||
| - filelock >=3.7.0,<4 | ||
| - hypothesis >=6.58.0,<7 | ||
| - pytest >=8.0.2,<9 | ||
| - pytest-benchmark >=3.4.1,<5 | ||
| - pytest-clarity >=1.0.1,<2 | ||
| - pytest-cov >=3.0.0,<5 | ||
| - pytest-httpserver >=1.0.5,<2 | ||
| - pytest-mock >=3.6.1,<4 | ||
| - pytest-randomly >=3.10.1,<4 | ||
| - pytest-repeat >=0.9.1,<0.10 | ||
| - pytest-snapshot >=0.9.0,<1 | ||
| - pytest-timeout >=2.3.1,<3 | ||
| - pytest-xdist >=2.3.0,<4 | ||
| - requests >=2,<3 | ||
| # docs | ||
| - quarto >=1.4 | ||
| - altair >=5.0.1 | ||
| - distributed >=2022.9.1 | ||
| - ipykernel >=6.25.1 | ||
| - itables >=1.6.3 | ||
| - jupyter-cache | ||
| - nbclient >=0.8.0 | ||
| - plotly >=5.16.1 | ||
| - plotnine >=0.12.2 | ||
| - py-cpuinfo >=9 | ||
| - quartodoc >=0.6.1 | ||
| - seaborn | ||
| # dev utilities | ||
| - codespell >=2.2.6 | ||
| - ipython | ||
| - poetry-plugin-export | ||
| - pre-commit | ||
| - prettier | ||
| - pydeps >=1.12.7 | ||
| - pyinstrument | ||
| - ruff >=0.1.8 | ||
| - taplo | ||
| - tqdm >=4.66.1 | ||
| - just | ||
| # needed for apache-flink >=1.18.0 | ||
| - py4j =0.10.9.7 | ||
| - pip | ||
| - pip: | ||
| - apache-flink >=1.19.0 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,98 @@ | ||
| name: ibis-dev-arm64 | ||
| channels: | ||
| - conda-forge | ||
| dependencies: | ||
| # runtime dependencies | ||
| - python >=3.10 | ||
| - atpublic >=2.3 | ||
| - bidict >=0.22.1 | ||
| - black >=22.1.0,<25 | ||
| - clickhouse-connect >=0.5.23 | ||
| - dask >=2022.9.1 | ||
| - datafusion >=0.6 | ||
| - db-dtypes >=0.3.0,<2 | ||
| - deltalake | ||
| - duckdb-engine <1,>=0.1.8 | ||
| - filelock >=3.7.0,<4 | ||
| - fsspec >=2022.1.0 | ||
| - gcsfs | ||
| - geopandas >=0.6 | ||
| - google-cloud-bigquery >=3,<4 | ||
| - google-cloud-bigquery-storage >=2,<3 | ||
| - impyla >=0.17 | ||
| - numpy >=1.23.2,<2 | ||
| - oracledb >=1.3.1 | ||
| - packaging >=21.3 | ||
| - pandas >=1.5.3,<3 | ||
| - parsy >=2 | ||
| - pins >=0.8.2 | ||
| - poetry-core >=1.0.0 | ||
| - poetry-dynamic-versioning >=0.18.0 | ||
| - polars >=0.20.17 | ||
| - psycopg2 >=2.8.4 | ||
| - pyarrow >=10.0.1 | ||
| - pyarrow-tests | ||
| - pyarrow-hotfix >=0.4 | ||
| - pydata-google-auth | ||
| - pydruid >=0.6.5 | ||
| - pymysql >=1 | ||
| - pyodbc >=4.0.39 | ||
| - pyspark >=3 | ||
| - python-dateutil >=2.8.2 | ||
| - python-duckdb >=0.8.1 | ||
| - python-graphviz >=0.16 | ||
| - pytz >=2022.7 | ||
| - regex >=2021.7.6 | ||
| - requests >=2 | ||
| - rich >=12.4.4 | ||
| - shapely>=2,<3 | ||
| - snowflake-connector-python >=3.0.2 | ||
| - sqlglot >=22.5,<23.1 | ||
| - toolz >=0.11 | ||
| - trino-python-client >=0.321 | ||
| - openjdk <21 | ||
| # geospatial | ||
| - leafmap >=0.29.6,<0.31 | ||
| # test dependencies | ||
| - filelock >=3.7.0,<4 | ||
| - hypothesis >=6.58.0,<7 | ||
| - pytest >=8.0.2,<9 | ||
| - pytest-benchmark >=3.4.1,<5 | ||
| - pytest-clarity >=1.0.1,<2 | ||
| - pytest-cov >=3.0.0,<5 | ||
| - pytest-httpserver >=1.0.5,<2 | ||
| - pytest-mock >=3.6.1,<4 | ||
| - pytest-randomly >=3.10.1,<4 | ||
| - pytest-repeat >=0.9.1,<0.10 | ||
| - pytest-snapshot >=0.9.0,<1 | ||
| - pytest-timeout >=2.3.1,<3 | ||
| - pytest-xdist >=2.3.0,<4 | ||
| - requests >=2,<3 | ||
| # docs | ||
| - quarto >=1.4 | ||
| - altair >=5.0.1 | ||
| - distributed >=2022.9.1 | ||
| - ipykernel >=6.25.1 | ||
| - itables >=1.6.3 | ||
| - jupyter-cache | ||
| - nbclient >=0.8.0 | ||
| - plotly >=5.16.1 | ||
| - plotnine >=0.12.2 | ||
| - py-cpuinfo >=9 | ||
| - quartodoc >=0.6.1 | ||
| - seaborn | ||
| # dev utilities | ||
| - codespell >=2.2.6 | ||
| - ipython | ||
| - poetry-plugin-export | ||
| - pre-commit | ||
| - prettier | ||
| - pydeps >=1.12.7 | ||
| - pyinstrument | ||
| - ruff >=0.1.8 | ||
| - taplo | ||
| - tqdm >=4.66.1 | ||
| - just | ||
| - pip | ||
| - pip: | ||
| - lonboard==0.4.0 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,102 @@ | ||
| name: ibis-dev | ||
| channels: | ||
| - conda-forge | ||
| dependencies: | ||
| # runtime dependencies | ||
| - apache-flink | ||
| - atpublic >=2.3 | ||
| - bidict >=0.22.1 | ||
| - black >=22.1.0,<25 | ||
| - clickhouse-connect >=0.5.23 | ||
| - dask >=2022.9.1 | ||
| - datafusion >=0.6 | ||
| - db-dtypes >=0.3.0,<2 | ||
| - deltalake | ||
| - duckdb-engine <1,>=0.1.8 | ||
| - filelock >=3.7.0,<4 | ||
| - fsspec >=2022.1.0 | ||
| - gcsfs | ||
| - geopandas >=0.6 | ||
| - google-cloud-bigquery >=3,<4 | ||
| - google-cloud-bigquery-storage >=2,<3 | ||
| - impyla >=0.17 | ||
| - numpy >=1.23.2,<2 | ||
| - oracledb >=1.3.1 | ||
| - packaging >=21.3 | ||
| - pandas >=1.5.3,<3 | ||
| - parsy >=2 | ||
| - pins >=0.8.2 | ||
| - pip | ||
| - poetry-core >=1.0.0 | ||
| - poetry-dynamic-versioning >=0.18.0 | ||
| - polars >=0.20.17 | ||
| - psycopg2 >=2.8.4 | ||
| - pyarrow >=10.0.1 | ||
| - pyarrow-hotfix >=0.4 | ||
| - pydata-google-auth | ||
| - pydruid >=0.6.5 | ||
| - pymysql >=1 | ||
| - pyodbc >=4.0.39 | ||
| - pyspark >=3 | ||
| - python >=3.10 | ||
| - python-dateutil >=2.8.2 | ||
| - python-duckdb >=0.8.1 | ||
| - python-graphviz >=0.16 | ||
| - pytz >=2022.7 | ||
| - regex >=2021.7.6 | ||
| - requests >=2 | ||
| - rich >=12.4.4 | ||
| - shapely >=2,<3 | ||
| - snowflake-connector-python >=3.0.2 | ||
| - sqlglot >=22.5,<23.1 | ||
| - toolz >=0.11 | ||
| - trino-python-client >=0.321 | ||
| - openjdk <21 | ||
| # geospatial | ||
| - leafmap >=0.29.6,<0.31 | ||
| # streaming | ||
| - kafka-python | ||
| # test dependencies | ||
| - filelock >=3.7.0,<4 | ||
| - hypothesis >=6.58.0,<7 | ||
| - pytest >=8.0.2,<9 | ||
| - pytest-benchmark >=3.4.1,<5 | ||
| - pytest-clarity >=1.0.1,<2 | ||
| - pytest-cov >=3.0.0,<5 | ||
| - pytest-httpserver >=1.0.5,<2 | ||
| - pytest-mock >=3.6.1,<4 | ||
| - pytest-randomly >=3.10.1,<4 | ||
| - pytest-repeat >=0.9.1,<0.10 | ||
| - pytest-snapshot >=0.9.0,<1 | ||
| - pytest-xdist >=2.3.0,<4 | ||
| - pytest-timeout >=2.3.1,<3 | ||
| - requests >=2,<3 | ||
| # docs | ||
| - quarto >=1.4 | ||
| - altair >=5.0.1 | ||
| - distributed >=2022.9.1 | ||
| - ipykernel >=6.25.1 | ||
| - itables >=1.6.3 | ||
| - jupyter-cache | ||
| - nbclient >=0.8.0 | ||
| - plotly >=5.16.1 | ||
| - plotnine >=0.12.2 | ||
| - py-cpuinfo >=9 | ||
| - quartodoc >=0.6.1 | ||
| - seaborn | ||
| # dev utilities | ||
| - codespell >=2.2.6 | ||
| - go-shfmt | ||
| - ipython | ||
| - poetry-plugin-export | ||
| - pre-commit | ||
| - prettier | ||
| - pydeps >=1.12.7 | ||
| - pyinstrument | ||
| - ruff >=0.1.8 | ||
| - taplo | ||
| - tqdm >=4.66.1 | ||
| - just | ||
| - pip | ||
| - pip: | ||
| - lonboard==0.4.0 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,17 @@ | ||
| ARG FLINK_VERSION=1.19.0 | ||
| FROM flink:${FLINK_VERSION} | ||
|
|
||
| # ibis-flink requires PyFlink dependency | ||
| ARG FLINK_VERSION=1.19.0 | ||
| RUN wget -nv -P $FLINK_HOME/lib/ https://repo1.maven.org/maven2/org/apache/flink/flink-python/${FLINK_VERSION}/flink-python-${FLINK_VERSION}.jar | ||
|
|
||
| # install python3 and pip3 | ||
| RUN apt-get update -y && \ | ||
| apt-get install -y python3 python3-pip python3-dev openjdk-11-jdk-headless && \ | ||
| rm -rf /var/lib/apt/lists/* | ||
| RUN ln -s /usr/bin/python3 /usr/bin/python | ||
|
|
||
| # install PyFlink | ||
| ARG BUILDARCH | ||
| ENV JAVA_HOME=/usr/lib/jvm/java-11-openjdk-${BUILDARCH:-amd64} | ||
| RUN pip3 install apache-flink==${FLINK_VERSION} |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,3 +1,5 @@ | ||
| CREATE USER 'ibis'@'localhost' IDENTIFIED BY 'ibis'; | ||
| CREATE SCHEMA IF NOT EXISTS test_schema; | ||
| GRANT CREATE, DROP ON *.* TO 'ibis'@'%'; | ||
| GRANT CREATE,SELECT,DROP ON `test_schema`.* TO 'ibis'@'%'; | ||
| FLUSH PRIVILEGES; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,2 +1,16 @@ | ||
| FROM postgis/postgis:15-3.3-alpine AS pgvector-builder | ||
| RUN apk add --no-cache git | ||
| RUN apk add --no-cache build-base | ||
| RUN apk add --no-cache clang15 | ||
| RUN apk add --no-cache llvm15-dev llvm15 | ||
| WORKDIR /tmp | ||
| RUN git clone --branch v0.6.2 https://github.com/pgvector/pgvector.git | ||
| WORKDIR /tmp/pgvector | ||
| RUN make | ||
| RUN make install | ||
|
|
||
| FROM postgis/postgis:15-3.3-alpine | ||
| RUN apk add --no-cache postgresql15-plpython3 | ||
| COPY --from=pgvector-builder /usr/local/lib/postgresql/bitcode/vector.index.bc /usr/local/lib/postgresql/bitcode/vector.index.bc | ||
| COPY --from=pgvector-builder /usr/local/lib/postgresql/vector.so /usr/local/lib/postgresql/vector.so | ||
| COPY --from=pgvector-builder /usr/local/share/postgresql/extension /usr/local/share/postgresql/extension |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -14,7 +14,6 @@ diamonds.json | |
| *.ndjson | ||
| reference/ | ||
| objects.json | ||
|
|
||
| # generated notebooks and files | ||
| *.ipynb | ||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -1,4 +1,6 @@ | ||
| --- | ||
| title: Page not found | ||
| --- | ||
|
|
||
| The page you requested cannot be found (perhaps it was moved or renamed). | ||
|
|
||
|
|
||
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,9 @@ | ||
| ::: {.callout-warning collapse="true"} | ||
| ## Ibis in the browser is experimental. | ||
|
|
||
| iOS is known to cause crashes on this page. | ||
|
|
||
| Mobile Firefox may also not work (the page won't crash though). | ||
|
|
||
| Please [open an issue on GitHub](https://github.com/ibis-project/ibis/issues/new/choose) if you encounter problems. | ||
| ::: |