Full Code of getml/getml-community for AI

main e742f8b98896 cached
392 files
19.5 MB
5.1M tokens
1806 symbols
1 requests
Copy disabled (too large) Download .txt
Showing preview only (20,497K chars total). Download the full file to get everything.
Repository: getml/getml-community
Branch: main
Commit: e742f8b98896
Files: 392
Total size: 19.5 MB

Directory structure:
gitextract_kz0ipva0/

├── .git-blame-ignore-revs
├── .gitattributes
├── .gitignore
├── .gitlab-ci.yml
├── BUILD.md
├── CHANGELOG.md
├── Dockerfile
├── INSTALL.md
├── LICENSE.txt
├── README.md
├── VERSION
├── benchmarks/
│   ├── Dockerfile
│   ├── README.md
│   ├── benchmark_plots.ipynb
│   ├── benchmarks/
│   │   ├── __init__.py
│   │   ├── benchmarks.py
│   │   ├── demo/
│   │   │   ├── __init__.py
│   │   │   ├── add_original_columns.py
│   │   │   ├── benchmark.py
│   │   │   ├── cesiumml_builder.py
│   │   │   ├── ft_time_series_builder.py
│   │   │   ├── kats_builder.py
│   │   │   ├── load.py
│   │   │   ├── print_time_taken.py
│   │   │   ├── remove_target_column.py
│   │   │   ├── rolling.py
│   │   │   ├── tsfel_builder.py
│   │   │   ├── tsfel_builder_roll.py
│   │   │   ├── tsflex_aggregations.py
│   │   │   ├── tsflex_builder.py
│   │   │   └── tsfresh_builder.py
│   │   ├── drivers/
│   │   │   ├── __init__.py
│   │   │   ├── drive_getml.py
│   │   │   └── drive_wrappers.py
│   │   ├── pyproject.toml
│   │   ├── run_all.py
│   │   └── utils.py
│   ├── docker-compose.yml
│   ├── paper_data.txt
│   ├── requirements.for-fbprophet.txt
│   ├── requirements.for-kats.txt
│   ├── requirements.for-pystan.txt
│   ├── requirements.txt
│   ├── run_benchmarks.py
│   └── run_benchmarks.sh
├── demo-notebooks/
│   ├── Dockerfile
│   ├── README.md
│   ├── adventure_works.ipynb
│   ├── docker-compose.yml
│   ├── formula1.ipynb
│   ├── interstate94.ipynb
│   ├── loans.ipynb
│   ├── requirements.txt
│   ├── robot.ipynb
│   └── seznam.ipynb
├── docker-bake.hcl
├── mise.toml
├── runtime/
│   ├── Dockerfile
│   ├── README.md
│   ├── docker-compose.yml
│   └── entrypoint.sh
├── scripts/
│   └── build
└── src/
    ├── getml-app/
    │   ├── README.md
    │   ├── format.sh
    │   ├── setup.sh
    │   └── src/
    │       ├── changeToResourceDir.go
    │       ├── commands/
    │       │   ├── Parse.go
    │       │   ├── addHomeDirFlag.go
    │       │   ├── loadConfig.go
    │       │   ├── makeInstallCommand.go
    │       │   ├── makeRunCommand.go
    │       │   ├── makeStopCommand.go
    │       │   ├── makeUninstallCommand.go
    │       │   ├── parseHomeDirFlag.go
    │       │   └── printHelpMenu.go
    │       ├── config/
    │       │   ├── CommandLine.go
    │       │   ├── Config.go
    │       │   ├── Load.go
    │       │   ├── MonitorConfig.go
    │       │   └── parseHomeDirFlag.go
    │       ├── createConnectionToEngine.go
    │       ├── data/
    │       │   ├── Projects.go
    │       │   └── StandardVariables.go
    │       ├── go.mod
    │       ├── install/
    │       │   ├── All.go
    │       │   ├── FileExists.go
    │       │   ├── GetBinDir.go
    │       │   ├── GetConfigPath.go
    │       │   ├── GetHomeDir.go
    │       │   ├── GetMainDir.go
    │       │   ├── UsrLocal.go
    │       │   ├── copyDir.go
    │       │   ├── copyFile.go
    │       │   ├── copyResources.go
    │       │   └── filesExists.go
    │       ├── main.go
    │       ├── makePackageName.go
    │       ├── printStartMessage.go
    │       ├── stopExistingProcess.go
    │       ├── tcp/
    │       │   ├── MainHandler.go
    │       │   ├── Server.go
    │       │   ├── basicCommand.go
    │       │   ├── cmd.go
    │       │   ├── command.go
    │       │   ├── createConnectionToEngine.go
    │       │   ├── isAlive.go
    │       │   ├── loadPipelineFromDisc.go
    │       │   ├── logger.go
    │       │   ├── makeUniqueProjectName.go
    │       │   ├── marshalCommand.go
    │       │   ├── portIsOccupied.go
    │       │   ├── progressLogger.go
    │       │   ├── recvBytes.go
    │       │   ├── recvCmd.go
    │       │   ├── recvString.go
    │       │   ├── sendBytes.go
    │       │   ├── sendCommand.go
    │       │   ├── sendString.go
    │       │   └── startProcess.go
    │       └── uninstall.go
    ├── package-build-imports/
    │   ├── config.json
    │   ├── environment.json
    │   ├── jwks.pub.json
    │   └── tests/
    │       ├── test1/
    │       │   ├── PERIPHERAL.CSV
    │       │   └── POPULATION.CSV
    │       └── test2/
    │           ├── PERIPHERAL.CSV
    │           └── POPULATION.CSV
    └── python-api/
        ├── LICENSE
        ├── README.md
        ├── getml/
        │   ├── __init__.py
        │   ├── communication.py
        │   ├── constants.py
        │   ├── cross_validation.py
        │   ├── data/
        │   │   ├── __init__.py
        │   │   ├── _io/
        │   │   │   ├── arrow.py
        │   │   │   ├── csv.py
        │   │   │   └── parquet.py
        │   │   ├── access.py
        │   │   ├── columns/
        │   │   │   ├── __init__.py
        │   │   │   ├── aggregation.py
        │   │   │   ├── collect_footer_data.py
        │   │   │   ├── column.py
        │   │   │   ├── columns.py
        │   │   │   ├── constants.py
        │   │   │   ├── format.py
        │   │   │   ├── from_value.py
        │   │   │   ├── get_scalar.py
        │   │   │   ├── last_change.py
        │   │   │   ├── last_change_from_col.py
        │   │   │   ├── length.py
        │   │   │   ├── length_property.py
        │   │   │   ├── make_iter.py
        │   │   │   ├── parse.py
        │   │   │   ├── random.py
        │   │   │   ├── repr.py
        │   │   │   ├── repr_html.py
        │   │   │   ├── subroles.py
        │   │   │   ├── to_arrow.py
        │   │   │   ├── to_numpy.py
        │   │   │   ├── unique.py
        │   │   │   └── unit.py
        │   │   ├── concat.py
        │   │   ├── container.py
        │   │   ├── data_frame.py
        │   │   ├── data_model.py
        │   │   ├── diagram.py
        │   │   ├── helpers.py
        │   │   ├── helpers2.py
        │   │   ├── load_container.py
        │   │   ├── placeholder.py
        │   │   ├── relationship.py
        │   │   ├── roles/
        │   │   │   ├── __init__.py
        │   │   │   ├── container.py
        │   │   │   ├── roles.py
        │   │   │   ├── sets.py
        │   │   │   └── types.py
        │   │   ├── split/
        │   │   │   ├── __init__.py
        │   │   │   ├── concat.py
        │   │   │   ├── random.py
        │   │   │   └── time.py
        │   │   ├── staging.py
        │   │   ├── star_schema.py
        │   │   ├── subroles/
        │   │   │   ├── __init__.py
        │   │   │   ├── exclude.py
        │   │   │   ├── include.py
        │   │   │   ├── only.py
        │   │   │   ├── sets.py
        │   │   │   └── types.py
        │   │   ├── subset.py
        │   │   ├── time.py
        │   │   ├── time_series.py
        │   │   └── view.py
        │   ├── database/
        │   │   ├── __init__.py
        │   │   ├── connect_bigquery.py
        │   │   ├── connect_duckdb.py
        │   │   ├── connect_greenplum.py
        │   │   ├── connect_hana.py
        │   │   ├── connect_mariadb.py
        │   │   ├── connect_mysql.py
        │   │   ├── connect_odbc.py
        │   │   ├── connect_postgres.py
        │   │   ├── connect_sqlite3.py
        │   │   ├── connection.py
        │   │   ├── copy_table.py
        │   │   ├── drop_table.py
        │   │   ├── exceptions.py
        │   │   ├── execute.py
        │   │   ├── get.py
        │   │   ├── get_colnames.py
        │   │   ├── helpers.py
        │   │   ├── list_connections.py
        │   │   ├── list_tables.py
        │   │   ├── read_csv.py
        │   │   ├── read_s3.py
        │   │   ├── sniff_csv.py
        │   │   └── sniff_s3.py
        │   ├── datasets/
        │   │   ├── __init__.py
        │   │   ├── base.py
        │   │   └── samples_generator.py
        │   ├── engine/
        │   │   ├── __init__.py
        │   │   ├── _launch.py
        │   │   └── helpers.py
        │   ├── events/
        │   │   ├── __init__.py
        │   │   ├── dispatchers.py
        │   │   ├── emitters.py
        │   │   ├── handlers.py
        │   │   ├── parsers.py
        │   │   ├── regex.py
        │   │   └── types.py
        │   ├── exceptions.py
        │   ├── feature_learning/
        │   │   ├── __init__.py
        │   │   ├── aggregations/
        │   │   │   ├── __init__.py
        │   │   │   ├── aggregations.py
        │   │   │   ├── sets.py
        │   │   │   └── types.py
        │   │   ├── fastboost.py
        │   │   ├── fastprop.py
        │   │   ├── feature_learner.py
        │   │   ├── loss_functions.py
        │   │   ├── multirel.py
        │   │   ├── relboost.py
        │   │   ├── relmt.py
        │   │   └── validation.py
        │   ├── helpers.py
        │   ├── hyperopt/
        │   │   ├── __init__.py
        │   │   ├── burn_in.py
        │   │   ├── helpers.py
        │   │   ├── hyperopt.py
        │   │   ├── kernels.py
        │   │   ├── load_hyperopt.py
        │   │   ├── optimization.py
        │   │   ├── tuning.py
        │   │   └── validation.py
        │   ├── log.py
        │   ├── pipeline/
        │   │   ├── __init__.py
        │   │   ├── column.py
        │   │   ├── columns.py
        │   │   ├── dialect.py
        │   │   ├── feature.py
        │   │   ├── features.py
        │   │   ├── helpers.py
        │   │   ├── helpers2.py
        │   │   ├── issues.py
        │   │   ├── metadata.py
        │   │   ├── metrics.py
        │   │   ├── pipeline.py
        │   │   ├── plots.py
        │   │   ├── score.py
        │   │   ├── scores_container.py
        │   │   ├── sql_code.py
        │   │   ├── sql_string.py
        │   │   ├── table.py
        │   │   ├── tables.py
        │   │   └── tags.py
        │   ├── predictors/
        │   │   ├── __init__.py
        │   │   ├── linear_regression.py
        │   │   ├── logistic_regression.py
        │   │   ├── predictor.py
        │   │   ├── scale_gbm_classifier.py
        │   │   ├── scale_gbm_regressor.py
        │   │   ├── xgboost_classifier.py
        │   │   └── xgboost_regressor.py
        │   ├── preprocessors/
        │   │   ├── __init__.py
        │   │   ├── category_trimmer.py
        │   │   ├── email_domain.py
        │   │   ├── imputation.py
        │   │   ├── mapping.py
        │   │   ├── preprocessor.py
        │   │   ├── seasonal.py
        │   │   ├── substring.py
        │   │   ├── text_field_splitter.py
        │   │   └── validate.py
        │   ├── project/
        │   │   ├── __init__.py
        │   │   ├── attrs.py
        │   │   └── containers/
        │   │       ├── __init__.py
        │   │       ├── data_frames.py
        │   │       ├── hyperopts.py
        │   │       └── pipelines.py
        │   ├── spark.py
        │   ├── sqlite3/
        │   │   ├── __init__.py
        │   │   ├── connect.py
        │   │   ├── contains.py
        │   │   ├── count_above_mean.py
        │   │   ├── count_below_mean.py
        │   │   ├── count_distinct_over_count.py
        │   │   ├── email_domain.py
        │   │   ├── ewma.py
        │   │   ├── ewma_trend.py
        │   │   ├── execute.py
        │   │   ├── first.py
        │   │   ├── get_word.py
        │   │   ├── helpers.py
        │   │   ├── kurtosis.py
        │   │   ├── last.py
        │   │   ├── median.py
        │   │   ├── mode.py
        │   │   ├── num_max.py
        │   │   ├── num_min.py
        │   │   ├── num_words.py
        │   │   ├── quantiles.py
        │   │   ├── read_csv.py
        │   │   ├── read_list.py
        │   │   ├── read_pandas.py
        │   │   ├── skew.py
        │   │   ├── sniff_csv.py
        │   │   ├── sniff_pandas.py
        │   │   ├── split_text_field.py
        │   │   ├── stddev.py
        │   │   ├── time_since_first_maximum.py
        │   │   ├── time_since_first_minimum.py
        │   │   ├── time_since_last_maximum.py
        │   │   ├── time_since_last_minimum.py
        │   │   ├── to_list.py
        │   │   ├── to_pandas.py
        │   │   ├── trend.py
        │   │   ├── var.py
        │   │   └── variation_coefficient.py
        │   ├── utilities/
        │   │   ├── __init__.py
        │   │   ├── formatting/
        │   │   │   ├── __init__.py
        │   │   │   ├── cell_formatter.py
        │   │   │   ├── column_formatter.py
        │   │   │   ├── data_frame_formatter.py
        │   │   │   ├── ellipsis.py
        │   │   │   ├── formatter.py
        │   │   │   ├── helpers.py
        │   │   │   ├── signature_formatter.py
        │   │   │   └── view_formatter.py
        │   │   ├── progress.py
        │   │   └── templates/
        │   │       ├── __init__.py
        │   │       ├── column.jinja2
        │   │       ├── container.jinja2
        │   │       └── data_frame.jinja2
        │   └── version.py
        ├── hatch_build.py
        ├── pyproject.toml
        └── tests/
            ├── __init__.py
            ├── conftest.py
            ├── data/
            │   ├── __init__.py
            │   ├── conftest.py
            │   ├── test_arrow_type_casts.py
            │   ├── test_columns.py
            │   ├── test_concat.py
            │   ├── test_data_frame.py
            │   ├── test_data_frames.py
            │   ├── test_from_query.py
            │   ├── test_io_read.py
            │   ├── test_io_stream.py
            │   ├── test_io_write.py
            │   ├── test_save_and_load.py
            │   └── test_subsetting.py
            ├── datasets/
            │   ├── __init__.py
            │   └── test_base.py
            ├── engine/
            │   ├── test_launch.py
            │   ├── test_set_project.py
            │   └── test_shutdown.py
            ├── pipeline/
            │   ├── __init__.py
            │   ├── test_adventure_works.py
            │   ├── test_interstate94.py
            │   ├── test_loans.py
            │   ├── test_pipelines_save_load.py
            │   └── test_robot.py
            ├── project/
            │   └── test_project_save_load.py
            └── unit/
                ├── __init__.py
                ├── conftest.py
                ├── data/
                │   ├── test_arrow_schema_processors.py
                │   ├── test_data_frame_init.py
                │   └── test_subsetting.py
                ├── test_events.py
                ├── test_exceptions.py
                ├── test_import_all.py
                ├── test_locate.py
                └── test_progress_bar.py

================================================
FILE CONTENTS
================================================

================================================
FILE: .git-blame-ignore-revs
================================================
# Switch to ruff for formatting
5ec353baae51d6f23ac4d0a1050b03da9ed2d804


================================================
FILE: .gitattributes
================================================
demo-notebooks/** linguist-vendored


================================================
FILE: .gitignore
================================================
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib

# workdir for history rewrite/repo sync
.github_sync

# Test binary, built with `go test -c`
*.test

# Output of the go coverage tool, specifically when used with LiteIDE
*.out

*.swp
*.swo
/**/.DS_Store

/**/__pycache__/
*.pyc
*.whl

*~
#~
/**/cmake_build/
/**/build/
/**/bin/
!bin/

/**/linux/version.sh
/**/macos/version.sh
/**/windows/version.sh
linux-x64/version.sh

/**/src/frontend/node_modules
/**/src/frontend/dist

/**/src/goutils/lib

/**/pkg
/**/src/dependencies
/**/src/frontend/package-lock.json
/**/src/monitor/src/github.com/segmentio
/**/src/monitor/src/github.com/shirou
/**/src/monitor/src/github.com/StackExchange
/**/src/monitor/src/github.com/go-ole
/**/src/monitor/src/github.com/xtgo
/**/src/monitor/src/golang.org
/**/src/monitor/src/gonum.org
/**/src/goutils/include/libgoutils.h
/**/src/goutils/src/github.com
/**/src/goutils/src/golang.org/
/**/src/engine
/**/src/poco-*
/**/src/xgboost
/**/src/mariadb-connector-c
/**/vcpkg
/**/rcedit
/**/range-v3
/**/src/documentation/docs/api/**
/**/src/documentation/html/**
/docker/notebooks/**
/docker/projects/**
/docker/python-api/**
/**/src/arrow
/**/src/utf8proc 
/**/src/vcpkg 
/**/python-api/getml/.getML/

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/

# Vim swap files
*.swp
*.swo

.DS_Store

# Emacs temporary files
*~

# jetbrains environment
.idea/
.vscode/*
**/.vscode

# Vim project config directory
**/.vim/

proxy_url.sh
getml-infra-service-key.json

.ccache


================================================
FILE: .gitlab-ci.yml
================================================
.job_template: &job_definition
  image: python:$VERSION
  cache:
    when: always
    paths:
      - .cache/pip
  parallel:
    matrix:
      - VERSION: ["3.8", "3.9", "3.10", "3.11", "3.12"]
  variables:
    PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
      changes:
        - "src/python-api/**/*"
    - if: $CI_COMMIT_REF_PROTECTED == "true"
    - if: $CI_COMMIT_TAG

.default_scripts: &setup_python_venv
    - cd $CI_PROJECT_DIR/src/python-api
    - pip install hatch
    - hatch config set dirs.env.virtual .venv 
    - hatch env create
    - source "$(hatch env find)/bin/activate"

stages:
  - dummy
  - lint
  - import-test

dummy:
  stage: dummy
  needs: []
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
  script:
    - echo "I run to pass pipeline validation in merge requests for non python parts"

lint:
  stage: lint
  <<: *job_definition
  needs: []
  script:
    - *setup_python_venv
    - EXIT_STATUS=0
    - ruff check . || EXIT_STATUS=$?
    - ruff format --check . || EXIT_STATUS=$?
    - if [ "$EXIT_STATUS" != "0" ]; then exit 1; fi

import-test:
  stage: import-test
  <<: *job_definition
  needs: ["lint"]
  script:
    - *setup_python_venv
    - pytest ./tests/unit/test_import_all.py


================================================
FILE: BUILD.md
================================================
# BUILD.md

## Building getML from Source

getML is a complex software package, and to simplify the build process, we use Docker for our build environment. This guide will walk you through setting up, building, and interacting with getML. Whether you are targeting a single platform or building for multiple architectures, follow the instructions below to compile getML from source.

### Prerequisites

- [Docker](https://docs.docker.com/get-started/get-docker) installed and running on your system.
- [Docker Buildx](https://github.com/docker/buildx/blob/master/README.md#installing) installed for multi-platform builds.
- Optionally, ensure [QEMU](https://docs.docker.com/build/building/multi-platform/#qemu) is set up for cross-platform builds.

Verify if Docker Buildx is installed by running:

```bash
docker buildx version
```

### Enabling Multi-Platform Support

#### Docker Desktop

1. Open **Settings**.
2. In the **General** tab, enable **Use containerd for pulling and storing images**.

#### Docker Engine (non-Docker Desktop)

1. Add the following to `/etc/docker/daemon.json`:

   ```json
   {
     "features": {
       "containerd-snapshotter": true
     }
   }
   ```

2. Restart Docker:

   ```bash
   sudo systemctl restart docker
   ```

For more details, refer to Docker's [multi-platform guide](https://docs.docker.com/build/building/multi-platform/#enable-the-containerd-image-store).

---

## Quick Start: Local Development

To simplify development and manage build processes, we provide a script-based interface. Begin by navigating to the `scripts` directory and using the `getml` wrapper to initiate the build process:

```bash
./scripts/build
```

### Available Subcommands

| Subcommand  | Description                                                  |
| ----------- | ------------------------------------------------------------ |
| `build`     | Build utilities                                               |
| `help`      | Show help for available commands                              |

Within the `build` subcommand, you can build various components of getML:

```bash
./scripts/build <subcommand> [options]
```

| Subcommand               | Description                                                                              |
|--------------------------|------------------------------------------------------------------------------------------|
| `all`                    | Build the entire package, including CLI, Engine, Python API, and tarball archive.        |
| `cli`                    | Build the CLI (Command Line Interface).                                                  |
| `engine`                 | Build the C++ Engine.                                                                    |
| `package`                | Export runnable Engine + CLI package.                                                    |
| `python`                 | Package the Python API.                                                                  |
| `python-copy-artifacts`  | Package the Python API, copying engine build artifacts.                                  |
| `docker`                 | Build the Docker runtime image.                                                          |
| `docker-copy-artifacts`  | Build the Docker runtime image, copying the engine build artifacts.                      |
| `archive`                | Create a tarball (`.tar.gz`) archive of the package.                                     |
| `archive-copy-artifacts` | Create a tarball (`.tar.gz`) archive of the package, copying the engine build artifacts. |

#### Common Build Options

> [!NOTE]
> Sometimes, the CMake build preset is cached in dangling state. [If you want to reset the CMake build preset](src/engine/README.md#build-using-docker), set `GETML_CMAKE_FRESH_FRESET=true`:
> 
> ```bash
> GETML_CMAKE_FRESH_PRESET=true ./scripts/build <subcommand> [options]
> ```

| Option         | Description                                                               |
| -------------- | ------------------------------------------------------------------------- |
| `-b <args>`    | Specify build arguments (e.g., `-b VERSION=1.5.0`) to be passed to Docker. |
| `-h`           | Display help information.                                                 |
| `-o <path>`    | Set the output path (default: `build`).                                   |
| `-p <platform>`| Set the target platform (`linux/amd64`, `linux/arm64`), default: native.   |

For most cases, you may want to build the Engine:

```bash
./scripts/build engine
```

If you are building the entire package for distribution:

```bash
./scripts/build package
```

This command will generate all the required artifacts, which will be placed in the output folder. To create a compressed tarball for distribution, use the `archive` subcommand:

```bash
./scripts/build archive
```

---

## Multi-platform Builds

By default, the target is only built for the native platform (`BUILDPLATFORM`). If you want to also build the target for the foreign platform you need to explicitly set the target's [`platform` argument](https://docs.docker.com/reference/cli/docker/buildx/build/#platform). The `build` wrapper supplies the shorthand option `-p` to do so. E.g. for the whole package:

```bash
./scripts/build package -p linux/arm64,linux/amd64
```

For specifics on multiplatform builds regarding the Docker runtime, see [runtime/README.md](./runtime/README.md#multiplatform-builds).

---

## Advanced: Interacting Directly with Docker

If you prefer interacting directly with Docker, the build pipeline uses multi-stage Docker builds, orchestrated with [Docker Bake](https://docs.docker.com/build/bake/). There are two main `Dockerfile`s:

- **CLI and Python packaging**: [`./Dockerfile`](./Dockerfile)
- **Engine and dependencies**: [`./src/engine/Dockerfile`](./src/engine/Dockerfile)

To build specific targets using Docker Bake:

```bash
VERSION=1.5.0 docker buildx bake engine
```

To override specific build arguments:

```bash
docker buildx bake engine --set engine.args.VERSION=1.5.0
```

For more information, refer to Docker's [Bake documentation](https://docs.docker.com/reference/cli/docker/buildx/bake/).

---

## Running the Docker Image

After building the runtime, you can run the Docker image:

```bash
docker run -it getml/getml -p 1708-1733:11708-11733
```

---

## Troubleshooting

- **Docker Build Fails**: Ensure that Docker and Docker Buildx are installed and properly configured. For multi-platform builds, confirm that QEMU is set up for cross-platform emulation.
- **Missing Artifacts**: Ensure that all required build artifacts for the target platforms are present in the output directory before running a multi-platform build.
- **Permission Errors**: If you encounter permission issues, try running commands with `sudo`, or ensure your user has proper permissions to interact with Docker.

For additional help, consult the [getML documentation](https://getml.com) or raise an [issue](https://github.com/getml/getml-community/issues) in the repository.


================================================
FILE: CHANGELOG.md
================================================
# Release Notes

## For getML Enterprise & Community editions 

### 1.5.1   <small>May 15, 2025</small>
#### Features
- Expose arrow streams
- Preserve metadata (roles) of getml dataframes when converting to pandas, arrow, parquet
- Support python 3.13
#### Developer-focused
- More efficient build chain
- Expose `GETML_CMAKE_FRESH_PRESET`
- Use uv for env mangement
- Introduce mise
#### Bug fixes
- Fix slow parquet writing (by using the exposed arrow stream instead of materializing batches as arrow tables on the engine side)
- Fix XGBoost deprecation warnings
- Support numpy>=2.0.0
- Fix parquet reader for parquet files containing custom metadata
- Set unit when setting time_stamp role directly in `from_...` factories


### 1.5.0   <small>Sep 24, 2024</small>
#### Features
- Overhaul and better integration of API documentation and web page:
    - Switch from [sphinx](https://www.sphinx-doc.org/en/master/) to [mkdocs](https://www.mkdocs.org/)
    - Restructuring of [User Guide](https://getml.com/latest/user_guide/), multiple amendments to documentation 
- Introduce strict typing regiment for [feature learning aggregations](https://getml.com/latest/reference/feature_learning/aggregations/) and [loss functions](https://getml.com/latest/reference/feature_learning/loss_functions)
- Clean up and maintenance of [example notebooks](https://getml.com/latest/examples/), make them executable in [Colab](https://colab.google/)
- More informative progress bar and status updates using [rich](https://github.com/Textualize/rich?tab=readme-ov-file)
- Completely reworked IO
    - Leveraging [PyArrow](https://arrow.apache.org/docs/python/index.html) to improve reliability, speed and maintainability
- Introduce [reflect-cpp](https://github.com/getml/reflect-cpp) for parsing and de/serialization
- Introduce overhauled getML Docker runtime [available from Docker Hub](https://hub.docker.com/r/getml/getml), allowing for easy setup
  - See [docker-related section of the new getML documentation](https://getml.com/latest/install/packages/docker/) for details
#### Developer-focused
- Complete rework of the build pipeline (docker and linux native)
    - Introduce [CCache](https://ccache.dev/), [conan](https://conan.io/), [vcpkg](https://vcpkg.io/en/)
    - User multi-stage docker builds leveraging buildx and buildkit
    - Centralized `VERSION`
- [Ruff](https://docs.astral.sh/ruff/) for linting and formatting
- [Hatch](https://hatch.pypa.io/latest/) for python package management
#### Bug fixes
- Generalization of [`Placeholder.join`](https://getml.com/latest/reference/data/placeholder/#getml.data.Placeholder.join)'s `on` argument 
- Improved timestamp handling
- Slicing improvements
    - Slicing of `DataFrames` returned wrong results: Remove short circuit for slices with upper bound
    - Introduce set semantics for slicing of `DataFrame` (return empty collections instead of erroring)
- Fix displaying of parameter lists with values that exceed the presentable width
- Fix displaying of [`DataFrames`](https://getml.com/latest/reference/data/data_frame/) with one row or less
- Fix progress bar output on Google Colab

### 1.4.0	<small>Oct 17, 2023</small>
- Accelerated feature learning through [Fastboost](https://getml.com/latest/reference/feature_learning/fastboost)
- Improved modelling on huge datasets through [ScaleGBMClassifier](https://getml.com/latest/reference/predictors/scale_gbm_classifier) and [ScaleGBMRegressor](https://getml.com/latest/reference/predictors/scale_gbm_regressor)
- Advanced trend aggregations using [EWMATrend aggregations](https://getml.com/latest/reference/feature_learning/aggregations/#getml.feature_learning.aggregations.EWMA_1S)
- Faster JSON parsing using YYJSON

### 1.3.2	<small>Jan 26, 2023</small>
- Minor bugfixes

### 1.3.1	<small>Dec 20, 2022</small>
- Implement `tqdm` for progress bars
- Minor bugfixes

### 1.3.0	<small>Aug 28, 2022</small>
- Use websockets instead of polling
- Size [threshold](https://getml.com/latest/reference/pipeline.Features.to_sql) for better visualization of feature code
- Faster reading of memory-mapped data, relevant for all feature learners and predictors
- Introduce [CategoryTrimmer](https://getml.com/latest/reference/preprocessors/#getml.preprocessors.CategoryTrimmer) as preprocessor

### 1.2.0	<small>May 20, 2022</small>
- Support for [SQL transpilation](https://getml.com/latest/reference/pipeline/dialect/): TSQL, Postgres, MySQL, BigQuery, Spark
- Support for memory mapping

### 1.1.0	<small>Nov 21, 2021</small>
- Enhance data processing by introducing Spark (e.g. [spark_sql](https://getml.com/latest/reference/pipeline/dialect/#getml.pipeline.dialect.spark_sql)) and Arrow (e.g. [from_arrow()](https://getml.com/latest/reference/data/data_frame/#getml.data.DataFrame.from_arrow))
- Integrate Vcpkg for dependency management
- Improve code transpilation for seasonal variables
- Better control of predictor training and hyperparamter optimization through introduction of early stopping (e.g. in [ScaleGBMClassifier](https://getml.com/latest/reference/predictors/scale_gbm_classifier/))
- Introduce [TREND](https://getml.com/latest/reference/feature_learning/aggregations/#getml.feature_learning.aggregations.TREND) aggregation
- Better progress logging

### 1.0.0	<small>Sep 23, 2021</small>
- Introduction of [Containers](https://getml.com/latest/reference/data/container/) for data storage
- Complete overhaul of the API including [Views](https://getml.com/latest/reference/data/view/), [StarSchema](https://getml.com/latest/reference/data/star_schema/), [TimeSeries](https://getml.com/latest/reference/data/time_series/)
- Add [subroles](https://getml.com/latest/reference/data/subroles/) for fine grained data control
- Improved model evaluation through [Plots](https://getml.com/latest/reference/pipeline/plots/) and [Scores](https://getml.com/latest/reference/pipeline/scores_container/) container
- Introduce [slicing](https://getml.com/latest/reference/data/view/#getml.data.View.where) of Views
- Add [datetime()](https://getml.com/latest/reference/data/time/#getml.data.time.datetime) utility

### 0.16.0 <small>May 25, 2021</small>
- Add the [Mapping](https://getml.com/latest/reference/preprocessors/#getml.preprocessors.Mapping) and [TextFieldSplitter](https://getml.com/latest/reference/preprocessors/#getml.preprocessors.TextFieldSplitter) preprocessors

### 0.15.0 <small>Feb 23, 2021</small>
- Add the [Fastprop](https://getml.com/latest/reference/feature_learning/fastprop/) feature learner
- Overhaul the way RelMT and Relboost generate features, making them more efficient

### 0.14.0 <small>Jan 18, 2021</small>
- Significant improvement of  project management:
    -  [project.restart()](https://getml.com/latest/reference/project/#getml.project.attrs.restart), [project.suspend()](https://getml.com/latest/reference/project/#getml.project.attrs.suspend), and [project.switch()](https://getml.com/latest/reference/project/#getml.project.attrs.switch)
    - multiple project support
- Add custom `__getattr__` and `__dir__` methods to DataFrame, enabling column retrieval through autocomplete

### 0.13.0 <small>Nov 13, 2020</small>
- Introduce new feature learner: 
    - RelMTModel [now [RelMT](https://getml.com/latest/reference/feature_learning/relmt/)], 
    - RelMTTimeSeries [now integrated in [TimeSeries](https://getml.com/latest/reference/data/time_series/)]

### 0.12.0 <small>Oct 1, 2020</small>
- Extend dataframe handling: [delete()](https://getml.com/latest/reference/data/data_frame/#getml.data.DataFrame.delete), [exists()](https://getml.com/latest/reference/data/#getml.data.exists)
- Data set provisioning: [load_air_pollution()](https://getml.com/latest/reference/datasets/datasets/#getml.datasets.load_air_pollution), [load_atherosclerosis()](https://getml.com/latest/reference/datasets/datasets/#getml.datasets.load_atherosclerosis), [load_biodegradability()](https://getml.com/latest/reference/datasets/datasets/#getml.datasets.load_biodegradability), [load_consumer_expenditures()](https://getml.com/latest/reference/datasets/datasets/#getml.datasets.load_consumer_expenditures), [load_interstate94()](https://getml.com/latest/reference/datasets/datasets/#getml.datasets.load_interstate94), [load_loans()](https://getml.com/latest/reference/datasets/datasets/#getml.datasets.load_loans), [load_occupancy()](https://getml.com/latest/reference/datasets/datasets/#getml.datasets.load_occupancy)
- High-level hyperopt handlers: [tune_feature_learners()](https://getml.com/latest/reference/hyperopt/#getml.hyperopt.tune_feature_learners), [tune_predictors()](https://getml.com/latest/reference/hyperopt/#getml.hyperopt.tune_predictors)
- Improve pipeline functionality: [delete()](https://getml.com/latest/reference/pipeline/#getml.pipeline.delete), [exists()](https://getml.com/latest/reference/pipeline/#getml.pipeline.exists), [Columns](https://getml.com/latest/reference/pipeline/columns/)
- Introduce preprocessors: [EmailDomain](https://getml.com/latest/reference/preprocessors/#getml.preprocessors.EmailDomain), [Imputation](https://getml.com/latest/reference/preprocessors/#getml.preprocessors.Imputation), [Seasonal](https://getml.com/latest/reference/preprocessors/#getml.preprocessors.Seasonal), [Substring](https://getml.com/latest/reference/preprocessors/#getml.preprocessors.Substring)

### 0.11.1 <small>Jul 13, 2020</small>
- Add pipeline functionality: [Pipeline](https://getml.com/latest/reference/pipeline/pipeline/), [list_pipelines()](https://getml.com/latest/reference/pipeline/#getml.pipeline.list_pipelines), [Features](https://getml.com/latest/reference/pipeline/features/), [Metrics](https://getml.com/latest/reference/pipeline/metrics/), [SQLCode](https://getml.com/latest/reference/pipeline/sql_code/), [Scores](https://getml.com/latest/reference/pipeline/scores_container/)
- Better control of hyperparameter optimization: [burn_in](https://getml.com/latest/reference/hyperopt/#getml.hyperopt.burn_in), [kernels](https://getml.com/latest/reference/hyperopt/#getml.hyperopt.kernels), [optimization](https://getml.com/latest/reference/hyperopt/#getml.hyperopt.optimization)
- Handling of time stamps: [time](https://getml.com/latest/reference/data/time/)
- Improve database I/O: [connect_odbc()](https://getml.com/latest/reference/database/database/#getml.database.connect_odbc.connect_odbc), [copy_table()](https://getml.com/latest/reference/database/database/#getml.database.copy_table.copy_table), [list_connections()](https://getml.com/latest/reference/database/database/#getml.database.list_connections.list_connections), [read_s3()](https://getml.com/latest/reference/data/data_frame/#getml.data.DataFrame.read_s3), [sniff_s3()](https://getml.com/latest/reference/database/database/#getml.database.sniff_s3.sniff_s3)
- Enable S3 access: [set_s3_access_key_id()](https://getml.com/latest/reference/data/access/#getml.data.access.set_s3_access_key_id), [set_s3_secret_access_key()](https://getml.com/latest/reference/data/access/#getml.data.access.set_s3_secret_access_key)
- New Feature Learner: MultirelTimeSeries, RelboostTimeSeries [now both integrated in [TimeSeries](https://getml.com/latest/reference/data/time_series/)]

### 0.10.0 <small>Mar 17, 2020</small>
- Add [XGBoostClassifier](https://getml.com/latest/reference/predictors/xgboost_classifier/) and [XGBoostRegressor](https://getml.com/latest/reference/predictors/xgboost_regressor/) for improved predictive power
- Overhaul of documentation 
    - Introduction of "getML in one minute" (now [Quickstart](https://getml.com/latest/user_guide/quick_start/)) and "How to use this guide" (now [User Guide](https://getml.com/latest/user_guide/))
    - Introduction of User Guide (now [Concepts](https://getml.com/latest/user_guide/concepts/)) to include data annotation, feature engineering, hyperparameter optimization and more
- Integration with additional databases like [Greenplum](https://getml.com/latest/reference/database/database/#getml.database.connect_greenplum.connect_greenplum), [MariaDB](https://getml.com/latest/reference/database/database/#getml.database.connect_mariadb.connect_mariadb), [MySQL](https://getml.com/latest/reference/database/database/#getml.database.connect_mysql.connect_mysql), and extended [PostgreSQL](https://getml.com/latest/reference/database/database/#getml.database.connect_postgres.connect_postgres) support

### 0.9.1	<small>Mar 17, 2020</small>
- Include hotfix for new domain getml.com

### 0.9	<small>Dec 9, 2019</small>
- Rework hyperopt design and handling, added [load_hyperopt()](https://getml.com/latest/reference/hyperopt/#getml.hyperopt.load_hyperopt.load_hyperopt)
- Improved dataframe handling: add [to_placeholder()](https://getml.com/latest/reference/data/data_frame/#getml.data.DataFrame.to_placeholder) and [nrows()](https://getml.com/latest/reference/data/data_frame/#getml.data.DataFrame.nrows)

### 0.8	<small>Oct 22, 2019</small>
- Rename Autosql to [Multirel](https://getml.com/latest/reference/feature_learning/multirel/)
- Boolean and categorical columns: Add support for boolean columns and operators, along with enhanced categorical column handling.
- Introduce API improvements: fitting, saving/loading of models, data transformation
- Add support for various aggregation functions such as [MEDIAN](https://getml.com/latest/reference/feature_learning/aggregations/#getml.feature_learning.aggregations.MEDIAN), [VAR](https://getml.com/latest/reference/feature_learning/aggregations/#getml.feature_learning.aggregations.VAR), [STDDEV](https://getml.com/latest/reference/feature_learning/aggregations/#getml.feature_learning.aggregations.STDDEV), and [COUNT_DISTINCT](https://getml.com/latest/reference/feature_learning/aggregations/#getml.feature_learning.aggregations.COUNT_DISTINCT)
- Move from closed beta to [pip](https://pypi.org/project/getml/)
- Introduce basic hyperopt algorithms: [LatinHypercubeSearch](https://getml.com/latest/reference/hyperopt/latin/), [RandomSearch](https://getml.com/latest/reference/hyperopt/random/)


================================================
FILE: Dockerfile
================================================
ARG OUTPUT_DIR
ARG VERSION
ARG PACKAGE_NAME="getml-community-$VERSION-$TARGETARCH-$TARGETOS"
ARG BUILD_OR_COPY_ARTIFACTS="build"

FROM --platform=$BUILDPLATFORM golang:1.22 AS cli-build
ARG TARGETOS
ARG TARGETARCH
ARG VERSION
WORKDIR /cli/src
COPY src/getml-app/src .

RUN --mount=type=cache,target=/go/pkg/mod/ \
    CGO_ENABLED=0 GOOS=${TARGETOS} GOARCH=${TARGETARCH} go build -o /cli/build/getml-cli -ldflags "-X main.version=$VERSION" . \
    && mkdir /cli/release \
    && cp /cli/build/getml-cli /cli/release/getml-cli

FROM scratch AS cli
ARG PACKAGE_NAME
COPY --from=cli-build /cli/release/getml-cli $PACKAGE_NAME/getML

FROM scratch AS export
ARG PACKAGE_NAME
COPY --from=cli / .
COPY --from=engine-package . .
COPY LICENSE.txt INSTALL.md $PACKAGE_NAME
COPY src/package-build-imports $PACKAGE_NAME

FROM --platform=$BUILDPLATFORM python:3.11-slim AS python-base
ARG TARGETPLATFORM
ARG BUILDPLATFORM
ARG PACKAGE_NAME
ARG VERSION
WORKDIR /python-api/src
RUN pip install hatch
COPY src/python-api/ .
RUN echo $VERSION > getml/VERSION
RUN hatch build -t wheel
RUN mkdir -p /python-api/src/getml/.getML

FROM python-base AS python-base-arm64
ARG WHEEL_PLATFORM="manylinux_2_28_aarch64"
# HACK: Remove the any platform wheel on one of the branches
# to avoid multi-platform artifact name collision
RUN if [ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]; then rm -rf dist/*.whl; fi

FROM python-base AS python-base-amd64
ARG WHEEL_PLATFORM="manylinux_2_28_x86_64"
RUN if [ "$TARGETPLATFORM" != "$BUILDPLATFORM" ]; then rm -rf dist/*.whl; fi

FROM python-base-$TARGETARCH AS python-build-artifacts
COPY --from=export /$PACKAGE_NAME getml/.getML/$PACKAGE_NAME

FROM python-base-$TARGETARCH AS python-copy-artifacts
ARG OUTPUT_DIR
COPY $OUTPUT_DIR/$PACKAGE_NAME getml/.getML/$PACKAGE_NAME

FROM python-${BUILD_OR_COPY_ARTIFACTS}-artifacts AS python-build
RUN hatch build -t wheel

FROM scratch AS python
COPY --from=python-build python-api/src/dist python-api

FROM alpine AS archive-build-artifacts
ARG PACKAGE_NAME
COPY --from=export / /

FROM alpine AS archive-copy-artifacts
ARG PACKAGE_NAME
ARG OUTPUT_DIR
COPY $OUTPUT_DIR/$PACKAGE_NAME $PACKAGE_NAME

FROM archive-${BUILD_OR_COPY_ARTIFACTS}-artifacts AS archive-export
RUN mkdir /out
RUN tar czf /out/$PACKAGE_NAME.tar.gz $PACKAGE_NAME
WORKDIR /out
RUN sha256sum $PACKAGE_NAME.tar.gz > $PACKAGE_NAME.tar.gz.sha256

FROM scratch AS archive
COPY --from=archive-export /out/ .

FROM scratch AS all
COPY --from=export / .
COPY --from=python / .
COPY --from=archive / .


================================================
FILE: INSTALL.md
================================================
## Table of Contents

* [Overview](#overview)
* [Installation](#installation)
  * [Python API](#python-api)
  * [Engine](#engine)
    * [Linux](#engine-linux)
    * [Docker (macOS, Windows, Linux)](#engine-docker)
* [Deinstallation](#deinstallation)
  * [Python API](#deinstallation-python-api)
  * [Linux](#deinstallation-linux)
* [Compiling from Source](#compiling-from-source)

## Overview <a name="overview"></a>

There are three components of the getML Community edition:

1. The Python API | Helps you interact with the getML Engine
2. The getML Engine | The C++ backend of getML
3. The CLI | A command line interface to install and interact with the Engine

On Linux, the getML Community edition binary of the Engine is shipped with the Python API.
On macOS and Windows, you will have to run the Engine in a Docker container.
We are working on providing native support for macOS and Windows in the near future.
The Python API is available for all platforms that support Python 3.8 or above.

## Installation <a name="installation"></a>

### Python API <a name="python-api"></a>

The Python API can be installed from the Python Package Index by executing the following command in a terminal:

```bash
pip install getml
```

Alternatively, if you want to install the API from the source,
you will have to install the Engine separately unless you install the wheel file provided by following the steps in the [Compiling from Source](#compiling-from-source) section.

```bash
pip install -e ./src/python-api # path to getml python-api
```

### Engine <a name="engine"></a>

Even though the Community edition of the Engine is shipped with the Python API on Linux platforms,
in some cases it might be preferred to install it separately. For example, if you want to use the [Enterprise edition](https://.....) of the Engine.

#### Linux <a name="engine-linux"></a>

Please execute the following commands, replacing `ARCH` with either `x64` or `arm64`, depending on your architecture.
If you are unsure, `x64` is probably the right choice.
You can also use `uname -m` to figure out the architecture.
If it says something like `aarch64` or `arm64`, you need to use [`arm64`](https://static.getml.com/download/1.5.0/getml-1.5.0-arm64-community-edition-linux.tar.gz), otherwise go with [`x64`](https://static.getml.com/download/1.5.0/getml-1.5.0-x64-community-edition-linux.tar.gz).

```bash
# Download the tar file of the Engine
wget https://static.getml.com/download/1.5.0/getml-community-1.5.0-<arch>-linux.tar.gz

# Extract the tar file
tar -xzf getml-community-1.5.0-<arch>-linux.tar.gz

# Change directory 
cd getml-community-1.5.0-<arch>-linux

# Install the Engine
./getML install
```

The output of the `install` command will tell you where the Engine has been installed.
It will look something like this:

```bash
getml@laptop src % ./getML install        
Installing getML...
Could not install into '/usr/local': mkdir /usr/local/getML: permission denied
Global installation failed, most likely due to missing root rights. Trying local installation instead.
Installing getML...
Successfully installed getML into '/Users/getml/.getML/getml-community-1.5.0-arm64-linux'.
Installation successful. To be able to call 'getML' from anywhere, add the following path to PATH:
/home/getml/.getML/getml-community-1.5.0-arm64-linux
```

To run the Engine, execute:

```bash
./getML
```

If the Engine was installed to the user home directory, you can add the installation directory to your PATH if you want to call the getML CLI from anywhere.

```bash
export PATH=$PATH:/path/to/getml-community-1.5.0-<arch>-linux
```

To make the changes permanent, you will have to add the line to your `.bashrc` or `.bash_profile` file.

#### Docker (macOS, Windows, Linux) <a name="engine-docker"></a>

Before the installation, make sure your system has [Docker](https://www.docker.com/) installed and running. On Linux, make sure that you follow these post-installation steps to run Docker without root rights/sudo: <https://docs.docker.com/engine/install/linux-postinstall/>

We offer two ways to start the Docker container. One is to use the provided docker-compose file and the other is to use the `docker run` command.

The docker-compose file is the recommended way to start the container and will be used in the following as it will automatically mount the necessary volumes, map the ports on the host system, and start the container.

First, download the docker-compose file in your project directory by executing the following command in a terminal:

```bash
curl -LO https://raw.githubusercontent.com/getml/getml-community/1.5.0/runtime/docker-compose.yml
```

By executing the following command, the getML service will be started. Further, a local directory `getml` will be created if it doesn't exist yet and mounted into the container. It will contain the files of the project. Also, the ports required for the Python API to communicate with the Engine will be mapped to the host system.

```bash
docker compose up
```

The docker compose file can also be piped into the docker compose command directly.

```bash
curl -L https://raw.githubusercontent.com/getml/getml-community/1.5.0/runtime/docker-compose.yml | docker-compose up -f -
```

To shut down the service after you are done, press `Ctrl+c`.

## Deinstallation <a name="deinstallation"></a>

### Python API <a name="deinstallation-python-api"></a>

> :warning: **Project data might be deleted**: If you have not installed the Engine separately and have not set the home directory to a custom location on Engine launch, the project data will be deleted when you uninstall the Python API.

To uninstall the Python API, execute the following command in a terminal:

```bash
pip uninstall getml
```

### Linux <a name="deinstallation-linux"></a>

> :warning: **Project data might be deleted**: If you have not set the home directory to a custom location on Engine launch, the project data will be deleted when you remove the `.getML` directory.

You will have to remove the folder `.getML` from your home directory. To do so, execute the following command in a terminal:

```bash
rm -r $HOME/.getML
```

## Compiling from Source <a name="compiling-from-source"></a>

Refer to [BUILD.md](BUILD.md) for instructions on how to compile from source and build the getML Suite.


================================================
FILE: LICENSE.txt
================================================
Elastic License 2.0 (ELv2)

Elastic License

Acceptance
By using the software, you agree to all of the terms and conditions below.

Copyright License
The licensor grants you a non-exclusive, royalty-free, worldwide, non-sublicensable, non-transferable license to use, copy, distribute, make available, and prepare derivative works of the software, in each case subject to the limitations and conditions below.

Limitations
You may not provide the software to third parties as a hosted or managed service, where the service provides users with access to any substantial set of the features or functionality of the software.

You may not move, change, disable, or circumvent the license key functionality in the software, and you may not remove or obscure any functionality in the software that is protected by the license key.

You may not alter, remove, or obscure any licensing, copyright, or other notices of the licensor in the software. Any use of the licensor’s trademarks is subject to applicable law.

Patents
The licensor grants you a license, under any patent claims the licensor can license, or becomes able to license, to make, have made, use, sell, offer for sale, import and have imported the software, in each case subject to the limitations and conditions in this license. This license does not cover any patent claims that you cause to be infringed by modifications or additions to the software. If you or your company make any written claim that the software infringes or contributes to infringement of any patent, your patent license for the software granted under these terms ends immediately. If your company makes such a claim, your patent license ends immediately for work on behalf of your company.

Notices
You must ensure that anyone who gets a copy of any part of the software from you also gets a copy of these terms.

If you modify the software, you must include in any modified copies of the software prominent notices stating that you have modified the software.

No Other Rights
These terms do not imply any licenses other than those expressly granted in these terms.

Termination
If you use the software in violation of these terms, such use is not licensed, and your licenses will automatically terminate. If the licensor provides you with a notice of your violation, and you cease all violation of this license no later than 30 days after you receive that notice, your licenses will be reinstated retroactively. However, if you violate these terms after such reinstatement, any additional violation of these terms will cause your licenses to terminate automatically and permanently.

No Liability
As far as the law allows, the software comes as is, without any warranty or condition, and the licensor will not be liable to you for any damages arising out of these terms or the use or nature of the software, under any kind of legal claim.

Definitions
The licensor is the entity offering these terms, and the software is the software the licensor makes available under these terms, including any portion of it.

you refers to the individual or entity agreeing to these terms.

your company is any legal entity, sole proprietorship, or other kind of organization that you work for, plus all organizations that have control over, are under the control of, or are under common control with that organization. control means ownership of substantially all the assets of an entity, or the power to direct its management and policies by vote, contract, or otherwise. Control can be direct or indirect.

your licenses are all the licenses granted to you for the software under these terms.

use means anything you do with the software requiring one of your licenses.

trademark means trademarks, service marks, and similar rights.


================================================
FILE: README.md
================================================

<p align="center" style="text-align: center;">
    <img width="400" style="width: 50% !important; max-width: 400px;" src="assets/getml_logo_dark.png#gh-dark-mode-only" />
    <img width="400" style="width: 50% !important; max-width: 400px;" src="assets/getml_logo.png#gh-light-mode-only" />
</p>

<p align="center" style="text-align: center;">
        <a href="https://getml.com/latest/contact" target="_blank">
        <img src="https://img.shields.io/badge/schedule-a_meeting-blueviolet.svg" /></a>
        <a href="mailto:hello@getml.com" target="_blank">
        <img src="https://img.shields.io/badge/contact-us_by_mail-orange.svg" /></a>
        <a href="LICENSE.txt" target="_blank">
        <img src="https://img.shields.io/badge/LICENSE-ELv2-green" /></a>
</p>

# getML - Automated Feature Engineering for Relational Data and Time Series

## Introduction

getML is a tool for automating feature engineering on relational data and time series. It includes a specifically customized database Engine for this very purpose.

This results in a speedup between _60_ to _1000_ times (see [Benchmarks](#benchmarks)) over other open-source tools like [featuretools](https://www.featuretools.com) and [tsfresh](https://tsfresh.com) for automated feature engineering. Also check out our [demonstrational notebooks](https://getml.com/latest/examples) to see more comparisons.

## Table of Contents

* [Introduction](#introduction)
* [Table of Contents](#table-of-contents)
* [Quick Start](#quick-start)
* [Key benefits of using getML](#key-benefits-of-using-getml)
  * [Features generate by getML](#features-generate-by-getml)
  * [Documentation](#documentation)
* [Benchmarks](#benchmarks)
* [Demo notebooks](#demo-notebooks)
* [Example](#example)
* [Release Notes](#release-notes)
* [Development](#development)

## Quick Start

As getML is available on [PyPI](https://pypi.org/project/getml), you can install it simply via

```bash
pip install getml
```

> [!NOTE]
> To get started on macOS and Windows, you first need to [start the getML docker service](https://getml.com/latest/install/packages/docker/):
> ```sh
> # run the lastest version
> curl -L https://raw.githubusercontent.com/getml/getml-community/refs/heads/main/runtime/docker-compose.yml | docker compose -f - up
> 
> # run a specific version, e.g. 1.5.1
> # curl https://raw.githubusercontent.com/getml/getml-community/1.5.1/runtime/docker-compose.yml | docker compose -f - up
> ```

Check out [the Example](#example) and the [demonstrational notebooks](https://getml.com/latest/examples) to get started with getML. A [detailed walkthrough guide](https://getml.com/latest/user_guide/walkthrough) and [the documentation](https://getml.com/latest) will also help you on your way with getML.

To learn, how to build and contribute to getML, check out [BUILD.md](BUILD.md) for instructions on how to build getML from source.

## Key benefits of using getML

One big key feature over other tools like [featuretools](https://www.featuretools.com), [tsfresh](https://tsfresh.com) and [prophet](https://facebook.github.io/prophet) is the runtime performance. Our own implementation of propositionalization, FastProp (short for fast propositionalization), reaches improvements of about _60_ to _1000_ times faster run times (see specifically [FastProp Benchmarks](https://getml.com/latest/examples/enterprise-notebooks/fastprop_benchmark) within our notebooks). This leads to faster iterations for data scientists, giving them more time to tweak variables to achieve even better results.

FastProp is not only faster, but can also provide an increased accuracy.

For even better accuracy, getML provides advanced algorithms in its [professional and Enterprise feature-sets](https://getml.com/latest/enterprise/benefits), namely [Multirel](https://getml.com/latest/user_guide/concepts/feature_engineering/#feature-engineering-algorithms-multirel), [Relboost](https://getml.com/latest/user_guide/concepts/feature_engineering/#feature-engineering-algorithms-relboost), [Fastboost](https://getml.com/latest/user_guide/concepts/feature_engineering/#feature-engineering-algorithms-fastboost) and [RelMT](https://getml.com/latest/user_guide/concepts/feature_engineering/#feature-engineering-algorithms-relmt).

The standard version includes [preprocessors](https://getml.com/latest/user_guide/concepts/preprocessing) (like CategoryTrimmer, EmailDomain, Imputation, Mapping, Seasonal, Substring, TextFieldSplitter), [predictors](https://getml.com/latest/user_guide/concepts/predicting) (like LinearRegression, LogisticRegression, XGBoostClassifier, XGBoostRegressor) and [hyperparameter optimizer](https://getml.com/latest/user_guide/concepts/hyperopt) (like RandomSearch, LatinHypercubeSearch, GaussianHyperparameterSearch).

It also gives access to [the getML Monitor](https://getml.com/latest/user_guide/concepts/getml_suite/#monitor-concepts), which provides valuable information about projects, pipelines, features, important columns, accuracies, performances, and more. Those information give insights and help understand and improve the results.

getML can [import data from various sources](https://getml.com/latest/user_guide/concepts/importing_data) like CSV, Pandas, JSON, SQLite, MySQL, MariaDB, PostgreSQL, Greenplum, ODBC.

While the standard version is open source, can be run on your local machine, and gets basic support via EMail and via this repository, it must not be used for productive purposes. The [professional and Enterprise versions](https://getml.com/latest/enterprise/benefits) in contrast allows productive uses, gets also support via phone and chat, offers training sessions, as well as on-premise and cloud hosting, and export and deployment features. Get in [contact via email](mailto:hello@getml.com) or directly [schedule a meeting](https://getml.com/latest/contact).

### Features generate by getML

getML generates features for relational data and time series. These include, but are not limited to:

* **Various aggregations**, i.e. average, sum, minimum, maximum, quantiles, exponentially weighted moving average, trend, exponentially weighted trends, ...
* **Aggregations within a certain time frame**, i.e. maximum in the last 30 days, minimum in the last 7 days
* **Seasonal factors from time stamps**, such as month, day of the week, hour, ...
* **Seasonal aggregations**, i.e. maximum for the same weekday as the prediction point, minimum for the same hour as the prediction point, ...

In other words, it generates the kind of features you would normally build manually. But it automatically generates thousands of features and then automatically picks the best, saving you a lot of manual work.

### Documentation

Check out the full documentation on <https://getml.com/latest>

## Benchmarks

We evaluated the performance of [getML's FastProp algorithm](https://getml.com/latest/user_guide/concepts/feature_engineering/#feature-engineering-algorithms-fastprop) against five other open-source tools for automated feature engineering on relational data and time series: [_tsflex_](https://github.com/predict-idlab/tsflex), [_featuretools_](https://www.featuretools.com), [_tsfel_](https://github.com/fraunhoferportugal/tsfel), [_tsfresh_](https://github.com/blue-yonder/tsfresh) and [_kats_](https://github.com/facebookresearch/Kats). The datasets used include:

1. Air Pollution
    * Hourly data on air pollution and weather in Beijing, China.
2. Interstate94
    * Hourly data on traffic volume on the Interstate 94 from Minneapolis to St. Paul.
3. Dodgers
    * Five-minute measurements of traffic near Los Angeles, affected by games hosted by the LA Dodgers.
4. Energy
    * Ten-minute measurements of the electricity consumption of a single household.
5. Tetouan
    * Ten-minute electricity consumption of three different zones in Tetouan City, north Morocco

The plots shown below contain the _runtime per feature_ calculated relative to the runtime per feature of the fastest approach. The fastest approach turns out to be the getML's FastProp, so it gets a value 1.

We observe, that for all datasets, the features produced by the different tools are quite similar, but **getML is 60-1000 times faster** than other open-source tools.

<p align="center">
    <img style="width: 80%" src="assets/benchmarks_plot_linear.png" />
</p>

In fact, the speed-up is so big that we need a logarithmic scale to even see the bar for getML.

<p align="center">
    <img style="width: 80%" src="assets/benchmarks_plot_log.png" />
</p>

To reproduce those results, refer to the [benchmarks folder](benchmarks) in this repository.

## Demo notebooks

To experience getML in action, the following example notebooks are provided in the [demo-notebooks](demo-notebooks) directory:

| Notebook                                                      | Prediction Type  | Population Size | Data Type   | Target  | Domain           | Difficulty | Comments                                        |
| ------------------------------------------------------------- | ---------------- | --------------- | ----------- |-------- | ---------------- | ---------- | ----------------------------------------------- |
| [adventure_works.ipynb](demo-notebooks/adventure_works.ipynb) | Classification   | 19,704          | Relational  | Churn   | Customer loyalty | Hard       | Good reference for a complex data model         |
| [formula1.ipynb](demo-notebooks/formula1.ipynb)               | Classification   | 31,578          | Relational  | Win     | Sports           | Medium     |                                                 |
| [interstate94.ipynb](demo-notebooks/interstate94.ipynb)       | Regression       | 24,096          | Time Series | Traffic | Transportation   | Easy       | Good notebook to get started on time series     |
| [loans.ipynb](demo-notebooks/loans.ipynb)                     | Classification   | 682             | Relational  | Default | Finance          | Easy       | Good notebook to get started on relational data |
| [robot.ipynb](demo-notebooks/robot.ipynb)                     | Regression       | 15,001          | Time Series | Force   | Robotics         | Medium     |                                                 |
| [seznam.ipynb](demo-notebooks/seznam.ipynb)                   | Regression       | 1,462,078       | Relational  | Volume  | E-commerce       | Medium     |                                                 |

For an extensive list of demonstrational and benchmarking notebooks, have a look at [our docs examples section](https://getml.com/latest/examples) or [the notebook source repository](https://github.com/getml/getml-demo).

## Example

Here is how you can build a complete Data Science pipeline for a time series problem with seasonalities with just a few lines of code:

```python
import getml

getml.engine.launch()
getml.set_project("interstate94")

# Load the data.
traffic = getml.datasets.load_interstate94(roles=False, units=False)

# Set the roles, so getML knows what you want to predict
# and which columns you want to use.
traffic.set_role("ds", getml.data.roles.time_stamp)
traffic.set_role("holiday", getml.data.roles.categorical)
traffic.set_role("traffic_volume", getml.data.roles.target)

# Generate a train/test split using 2018/03/15 as the cutoff date.
split = getml.data.split.time(traffic, "ds", test=getml.data.time.datetime(2018, 3, 15))

# Set up the data:
# - We want to predict the traffic volume for the next hour.
# - We want to use data from the seven days before the reference date.
# - We want to use lagged targets (autocorrelated features are allowed).
time_series = getml.data.TimeSeries(
    population=traffic,
    split=split,
    time_stamps="ds",
    horizon=getml.data.time.hours(1),
    memory=getml.data.time.days(7),
    lagged_targets=True,
)

# The Seasonal preprocessor extracts seasonal
# components from the time stamps.
seasonal = getml.preprocessors.Seasonal()

# FastProp extracts features from the time series.
fast_prop = getml.feature_learning.FastProp(
    loss_function=getml.feature_learning.loss_functions.SquareLoss,
    num_threads=1,    
    num_features=20,
)

# Use XGBoost for the predictions (it comes out-of-the-box).
predictor = getml.predictors.XGBoostRegressor()

# Combine them all in a pipeline.
pipe = getml.pipeline.Pipeline(
    tags=["memory: 7d", "horizon: 1h", "fast_prop"],
    data_model=time_series.data_model,
    preprocessors=[seasonal],
    feature_learners=[fast_prop],
    predictors=[predictor],
)

# Fit on the train set and evaluate on the testing set.
pipe.fit(time_series.train)
pipe.score(time_series.test)
predictions = pipe.predict(time_series.test)
```

To see the full example, check out the Interstate94 notebook ([interstate94.ipynb](https://getml.com/latest/examples/community-notebooks/interstate94)).

## Release Notes
See [CHANGELOG.md](CHANGELOG.md) for release notes.

## Development
### Python venv
To create the virtual environment for the [python api](src/python-api) just run
`uv sync` from anywhere in the project. If you have 
[mise hooked into your shell](https://mise.jdx.dev/getting-started.html#activate-mise) the 
environment will be activated automatically whenever you your prompt is reloaded
inside the project. If you don't have mise hooked into your shell, you can drop
into a shell populated with the environment by running `mise en`.

> [!NOTE]
> mise doesn't pick up the environment automatically after creating the environment with `uv sync`.
> To create and activate the environment in one go run:
> ```sh
> uv sync && mise en
> ```

### Building getml
Refer to [BUILD.md](BUILD.md) for build instructions.


================================================
FILE: VERSION
================================================
1.5.1


================================================
FILE: benchmarks/Dockerfile
================================================
# Copyright 2025 Code17 GmbH
#
# This file is licensed under the Elastic License 2.0 (ELv2).
# Refer to the LICENSE.txt file in the root of the repository
# for details.
#

FROM python:3.8.18

RUN apt-get update \
    && apt-get install -y \
    locales \
    && echo "en_US.UTF-8 UTF-8" > /etc/locale.gen \
    && locale-gen

RUN useradd getml
USER getml
WORKDIR /home/getml

ENV PATH="/home/getml/.local/bin:${PATH}"

RUN pip install --user --upgrade pip

COPY requirements.for-pystan.txt requirements.for-fbprophet.txt requirements.for-kats.txt requirements.txt ./
RUN pip install --user -r requirements.for-pystan.txt \
    && pip install --user -r requirements.for-fbprophet.txt \
    && pip install --user -r requirements.for-kats.txt \
    && pip install --user -r requirements.txt
 
ARG VERSION_NUMBER
ARG GETML_VERSION

WORKDIR /home/getml
RUN mkdir /home/getml/.getML

RUN mkdir engine | curl https://static.getml.com/download/$VERSION_NUMBER/$GETML_VERSION.tar.gz | tar -xz --strip-components=1 -C engine -f - ${GETML_VERSION}
RUN curl https://static.getml.com/download/$VERSION_NUMBER/python.tar.gz | tar -xzf -
WORKDIR /home/getml/python
RUN pip3 install .

COPY --chown=getml:getml . /home/getml/benchmarks/
WORKDIR /home/getml/benchmarks
CMD [ "/home/getml/benchmarks/run_benchmarks.sh" ]

================================================
FILE: benchmarks/README.md
================================================
# Benchmarks

## About

The benchmarks evaluate the performance of getML's FastProp algorithm against five other open-source libraries for automated feature engineering on relational data and time series.

Data-Sets:

<details>
  <summary>air_pollution</summary>

  The dataset contains hourly data on air pollution and weather in Beijing, China. The challenge is to predict the pm2.5 concentration for the next hour.

  S. De Vito, E. Massera, M. Piga, L. Martinotto, and G. Di Francia,“On field calibration of an electronic nose for benzene estimation in an urban pollution monitoring scenario,” Sensors and Actuators B: Chemical, vol. 129, no. 2, pp. 750–757, 2008. [Online]. Available: https://www.sciencedirect.com/science/article/pii/S0925400507007691

  A detailed demonstration of how to handle this data-set can be found in the [getML-demo repository](https://github.com/getml/getml-demo?tab=readme-ov-file#descriptions)
</details>
<details>
  <summary>dodgers</summary>

  The dataset contains five-minute measurements of traffic near Los Angeles. The traffic volume can be affected by a game hosted by the LA Dodgers in the nearby stadium, but not to the extent that it is very obvious to spot such an event in the data. The LA Dodgers are a popular baseball team from Los Angeles.  The challenge is to predict the traffic volume for the next five-minute interval.

  A. Ihler, J. Hutchins, and P. Smyth, “Adaptive event detection with time-varying poisson processes,” in Proceedings of the 12th ACM SIGKDD international conference on Knowledge discovery and data mining, 2006, pp. 207–216.

  A detailed demonstration of how to handle this data-set can be found in the [getML-demo repository](https://github.com/getml/getml-demo?tab=readme-ov-file#descriptions)
</details>
<details>
  <summary>energy</summary>

  The dataset contains measurements of the electricity consumption of a single household in ten-minute-intervals. The challenge is to predict the energy consumption of all household appliances for the next ten-minute interval.
</details>
<details>
  <summary>interstate94</summary>

  The dataset contains hourly data on traffic volume on the Interstate 94 from Minneapolis to StPaul. The challenge is to predict the traffic volume for the next hour.

  A detailed demonstration of how to handle this data-set can be found in the [getML-demo repository](https://github.com/getml/getml-demo?tab=readme-ov-file#descriptions)
</details>
<details>
  <summary>tetouan</summary>

  The dataset contains the electricity consumption of three different zones in Tetouan City, north Morocco measured in ten-minute intervals. The challenge is to predict the electricity consumption in Zone 1 for the next ten-minute interval.

  A. Salam and A. El Hibaoui, “Comparison of machine learning algorithms for the power consumption prediction:-case study of tetouan city–,” in 2018 6th International Renewable and Sustainable Energy Conference (IRSEC). IEEE, 2018, pp. 1–5.
</details>

Libraries:

* [getML fastprop](https://getml.com/latest/user_guide/concepts/feature_engineering/#feature-engineering-algorithms-fastprop)
* [tsflex](https://github.com/predict-idlab/tsflex)
* [featuretools](https://www.featuretools.com)
* [tsfel](https://github.com/fraunhoferportugal/tsfel)
* [tsfresh](https://github.com/blue-yonder/tsfresh)
* [kats](https://github.com/facebookresearch/Kats)

## Build

Build the image with necessary Python version and libraries installed

```bash
$ docker compose build
```

> [!IMPORTANT]
> Because of the used libraries, this benchmarks only run on the x86_64 architecture.

## Run

Run the benchmarks inside a container based on the build image

```bash
$ docker compose up benchmarks
```

## View logs

The logs written by the benchmarks are written to the terminal in the [Run](#run) step. They can be recalled later via

```bash
$ docker compose logs benchmarks
```

For better reading and scrolling use for example

```bash
$ docker compose logs benchmarks 2>&1 | sed 's/\r/\n/g' | less
```

## Clean

Remove the container, its images, logs and volumes

```bash
$ docker compose down --volumes --rmi all
```

> [!NOTE]
> *--rmi* for removing images does currently not work with podman compose.
> Images have to be removed separately for example via `podman image prune --all`


================================================
FILE: benchmarks/benchmark_plots.ipynb
================================================
{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "616dcd3b-7498-4a0d-8369-dc6b528f044e",
   "metadata": {
    "tags": []
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from matplotlib.ticker import MultipleLocator\n",
    "from brokenaxes import brokenaxes\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "04e5d265-f72d-4500-8985-f18caf94b571",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>algorithm</th>\n",
       "      <th>features</th>\n",
       "      <th>runtime</th>\n",
       "      <th>runtime/feat.</th>\n",
       "      <th>R2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>fastprop</td>\n",
       "      <td>453</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.949</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tsflex</td>\n",
       "      <td>259</td>\n",
       "      <td>63.5</td>\n",
       "      <td>99.3</td>\n",
       "      <td>0.944</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>featuretools</td>\n",
       "      <td>125</td>\n",
       "      <td>85.5</td>\n",
       "      <td>309.7</td>\n",
       "      <td>0.948</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tsfel</td>\n",
       "      <td>378</td>\n",
       "      <td>254.3</td>\n",
       "      <td>304.8</td>\n",
       "      <td>0.308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tsfresh</td>\n",
       "      <td>84</td>\n",
       "      <td>47.7</td>\n",
       "      <td>257.0</td>\n",
       "      <td>0.781</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>kats</td>\n",
       "      <td>189</td>\n",
       "      <td>482.7</td>\n",
       "      <td>1156.7</td>\n",
       "      <td>0.349</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      algorithm  features  runtime  runtime/feat.     R2\n",
       "0      fastprop       453      1.0            1.0  0.949\n",
       "1        tsflex       259     63.5           99.3  0.944\n",
       "2  featuretools       125     85.5          309.7  0.948\n",
       "3         tsfel       378    254.3          304.8  0.308\n",
       "4       tsfresh        84     47.7          257.0  0.781\n",
       "5          kats       189    482.7         1156.7  0.349"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_pollution = pd.read_csv('paper_data.txt', skiprows=545, skipfooter=(733-552),\n",
    "                       engine='python', sep=' ')\n",
    "df_pollution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "38ff3423-fa3b-407c-9a99-7b4028774869",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>algorithm</th>\n",
       "      <th>features</th>\n",
       "      <th>runtime</th>\n",
       "      <th>runtime/feat.</th>\n",
       "      <th>R2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>fastprop</td>\n",
       "      <td>125</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.979</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tsflex</td>\n",
       "      <td>36</td>\n",
       "      <td>18.8</td>\n",
       "      <td>59.3</td>\n",
       "      <td>0.979</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>featuretools</td>\n",
       "      <td>59</td>\n",
       "      <td>74.1</td>\n",
       "      <td>157.9</td>\n",
       "      <td>0.972</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tsfel</td>\n",
       "      <td>54</td>\n",
       "      <td>97.1</td>\n",
       "      <td>224.8</td>\n",
       "      <td>0.876</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tsfresh</td>\n",
       "      <td>12</td>\n",
       "      <td>20.7</td>\n",
       "      <td>215.8</td>\n",
       "      <td>0.172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>kats</td>\n",
       "      <td>27</td>\n",
       "      <td>141.1</td>\n",
       "      <td>653.3</td>\n",
       "      <td>0.941</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      algorithm  features  runtime  runtime/feat.     R2\n",
       "0      fastprop       125      1.0            1.0  0.979\n",
       "1        tsflex        36     18.8           59.3  0.979\n",
       "2  featuretools        59     74.1          157.9  0.972\n",
       "3         tsfel        54     97.1          224.8  0.876\n",
       "4       tsfresh        12     20.7          215.8  0.172\n",
       "5          kats        27    141.1          653.3  0.941"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_interstate = pd.read_csv('paper_data.txt', skiprows=554, skipfooter=(733-561),\n",
    "                       engine='python', sep=' ')\n",
    "df_interstate"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ff6d5b05-3133-45ee-acca-ec1ea5c2d9ab",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>algorithm</th>\n",
       "      <th>features</th>\n",
       "      <th>runtime</th>\n",
       "      <th>runtime/feat.</th>\n",
       "      <th>R2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>fastprop</td>\n",
       "      <td>207</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.795</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tsflex</td>\n",
       "      <td>38</td>\n",
       "      <td>14.8</td>\n",
       "      <td>70.9</td>\n",
       "      <td>0.802</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>featuretools</td>\n",
       "      <td>59</td>\n",
       "      <td>57.3</td>\n",
       "      <td>201.1</td>\n",
       "      <td>0.794</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tsfel</td>\n",
       "      <td>54</td>\n",
       "      <td>74.5</td>\n",
       "      <td>285.5</td>\n",
       "      <td>0.000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tsfresh</td>\n",
       "      <td>12</td>\n",
       "      <td>14.8</td>\n",
       "      <td>255.6</td>\n",
       "      <td>0.667</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>kats</td>\n",
       "      <td>27</td>\n",
       "      <td>95.6</td>\n",
       "      <td>732.6</td>\n",
       "      <td>0.001</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      algorithm  features  runtime  runtime/feat.     R2\n",
       "0      fastprop       207      1.0            1.0  0.795\n",
       "1        tsflex        38     14.8           70.9  0.802\n",
       "2  featuretools        59     57.3          201.1  0.794\n",
       "3         tsfel        54     74.5          285.5  0.000\n",
       "4       tsfresh        12     14.8          255.6  0.667\n",
       "5          kats        27     95.6          732.6  0.001"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_dodgers = pd.read_csv('paper_data.txt', skiprows=580, skipfooter=(733-587),\n",
    "                       engine='python', sep=' ')\n",
    "df_dodgers"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "c6054cbd-52d6-4059-a5c6-408de3d07d9f",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>algorithm</th>\n",
       "      <th>features</th>\n",
       "      <th>runtime</th>\n",
       "      <th>runtime/feat.</th>\n",
       "      <th>R2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>fastprop</td>\n",
       "      <td>1273.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.171</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tsflex</td>\n",
       "      <td>1058.0</td>\n",
       "      <td>87.1</td>\n",
       "      <td>108.6</td>\n",
       "      <td>0.114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>featuretools</td>\n",
       "      <td>367.0</td>\n",
       "      <td>77.7</td>\n",
       "      <td>269.7</td>\n",
       "      <td>0.100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tsfel</td>\n",
       "      <td>1566.0</td>\n",
       "      <td>72.0</td>\n",
       "      <td>58.5</td>\n",
       "      <td>0.114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tsfresh</td>\n",
       "      <td>348.0</td>\n",
       "      <td>59.3</td>\n",
       "      <td>217.0</td>\n",
       "      <td>0.108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>kats1</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      algorithm  features  runtime  runtime/feat.     R2\n",
       "0      fastprop    1273.0      1.0            1.0  0.171\n",
       "1        tsflex    1058.0     87.1          108.6  0.114\n",
       "2  featuretools     367.0     77.7          269.7  0.100\n",
       "3         tsfel    1566.0     72.0           58.5  0.114\n",
       "4       tsfresh     348.0     59.3          217.0  0.108\n",
       "5         kats1       NaN      NaN            NaN    NaN"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_energy = pd.read_csv('paper_data.txt', skiprows=589, skipfooter=(733-596),\n",
    "                       engine='python', sep=' ')\n",
    "df_energy"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "089598c0-9daa-4d54-a970-7d7b33668eaa",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>algorithm</th>\n",
       "      <th>features</th>\n",
       "      <th>runtime</th>\n",
       "      <th>runtime/feat.</th>\n",
       "      <th>R2</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>fastprop</td>\n",
       "      <td>412</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>0.997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>tsflex</td>\n",
       "      <td>296</td>\n",
       "      <td>69.8</td>\n",
       "      <td>85.1</td>\n",
       "      <td>0.996</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>featuretools</td>\n",
       "      <td>136</td>\n",
       "      <td>88.1</td>\n",
       "      <td>266.9</td>\n",
       "      <td>0.981</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>tsfel</td>\n",
       "      <td>432</td>\n",
       "      <td>275.6</td>\n",
       "      <td>262.8</td>\n",
       "      <td>0.983</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>tsfresh</td>\n",
       "      <td>96</td>\n",
       "      <td>52.9</td>\n",
       "      <td>227.0</td>\n",
       "      <td>0.940</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>kats</td>\n",
       "      <td>216</td>\n",
       "      <td>556.5</td>\n",
       "      <td>1061.5</td>\n",
       "      <td>0.978</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      algorithm  features  runtime  runtime/feat.     R2\n",
       "0      fastprop       412      1.0            1.0  0.997\n",
       "1        tsflex       296     69.8           85.1  0.996\n",
       "2  featuretools       136     88.1          266.9  0.981\n",
       "3         tsfel       432    275.6          262.8  0.983\n",
       "4       tsfresh        96     52.9          227.0  0.940\n",
       "5          kats       216    556.5         1061.5  0.978"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df_tetouan = pd.read_csv('paper_data.txt', skiprows=617, skipfooter=(733-624),\n",
    "                       engine='python', sep=' ')\n",
    "df_tetouan"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "105c4ad1-79a5-4050-95c2-11b3888709af",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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o6DkaYbYTyYzrdR2zq3FS9qO1DYFuMd/hGoboe4svJvJIvUznsxbnrUNqxMxzpDjS4CrjhSvX28k3t7E4eWH8JL9hzM1ylz3WbxfEo5Up0/Y65nAzOz6FhERCYLU1FSmT59Ou3btMqzfbdmyJePGjeOjjz6iY8eO2fZTv379XJ132LBhtG7dmpiYGI4//niaNGmSfrPehg3erUInn3xyhjaxsbE0aNAg/Xg05TbG2rVrZ7ohr1KlSvz4448UV/m5ZEJERESkwCxYsIDNmzczffp0pk+fnul4UlJSjhLi0qVL5+q8zZo14+KLL85Vm7zKameInM5+54eYmMibdqXd0FccKSEWERGRIiEpKYlq1arx7LOZ/+D65ptv8tZbbzFp0qRcJ7xHo25d7+MEfv75Zxo0aJBefuDAAdatW5frRLpSpUrs2rUrU3mkmeacbquW3zEWR0qIRUREpNBLTk7mzTffpEePHnTv3j3T8Zo1a/Laa68xa9YsrrnmmmMW18UXX0xsbCxPP/00l1xySXqS+uKLL7J79266dMndh5A0bNiQ3bt38+OPP3LaaacBsHnzZt56661MdcuWLRsxeS7oGIujfLupTkRERKSgzJo1iz/++IMrrrgi4vFzzz33iB/SUVCqVq3KAw88wAcffMAll1zCs88+y+DBg7njjjs455xzst0BIty1115L2bJl6datG0899RSjR4+mZcuWnHTSSZnqNm/enPnz5zN+/HimT5/O119/fUxiLI40QywiIhIQ+fGRydGSlJREfHw8HTp0iHi8RIkSdOnShaSkJHbs2JG+R/CxkJiYSNWqVXnmmWe46667qFy5MrfccgujRo2iVKlSueqrSpUqvPXWW9x9993cd9991K9fn9GjR7Nq1SoWL16coe748eO55ZZbePDBB0lOTqZ37960bNmywGMsjqw4L5CWjMwsAVi2bNkyfVKdiEgxlbY1VuhaUZHCJiffp8uXL6dp06YATZ1zywsyHi2ZEBEREZFAU0IsIiIiIoGmhFhEREREAk0JsYiIiIgEmhJiEREREQk0JcQiIiIiEmhKiEVEREQk0JQQi4iIiEigKSEWERERkUBTQiwiIiIigaaEWEREREQCTQmxiIiIiARayWgHIMfeayO+5oTKW6IdRia3TWof7RBERKSQmzJlCn379uXbb7/l7LPPzte+V6xYwYwZ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TGDs2LGcckou1kJGmRJiERERKfb69evHzp07ad++PbVr12bDhg1MmDCBM844I31bsjPOOIOYmBgee+wxdu/eTVxcHO3bt6datWo899xz9OrVi7POOotrr72WqlWrsnHjRmbPnk2rVq145plnjnj+BQsWcPvtt9OjRw9OOukkDh06xLRp04iJieGqq65Kr9e8eXPmz5/P+PHjqVmzJvXr16dly5ZcdtllTJs2jQoVKnDqqafy5ZdfMn/+/AxJfn5dwyuvvMLMmTNp06YN5cqVY/78+cyYMYN+/fpliLVjx46ZrjMtEb/wwgv10c0iIiIihUnPnj2ZPHkyEydOZNeuXdSoUYNrrrmGxMTE9PW+NWrUYNKkSYwePZqbb76Z1NRUPv74Y6pVq8b1119PzZo1GTNmDE888QQpKSnUqlWL1q1b07dv32zPf/rpp9OpUyfeffddNm3aRJkyZTj99NOZM2cO5557bnq98ePHc8stt/Dggw+SnJxM7969admyJU899RQxMTEkJSWxf/9+WrVqxfz58+nUqVOG8+THNZx00kns3LmTRx55hOTkZE4++WQmTZqUvjdycWTh0+9SfJlZArDsnXr1C+UuE7mhXSZERCJL22qsQYMGUY5EJGs5+T5dvnw5TZs2BWjqnFueZcV8oBniAPpr/xjia0XnS7+099KonFdEREQkK0V70zgRERERkaOkhFhEREREAk0JsYiIiIgEmhJiEREREQk0JcQiIiIiEmhKiEVEREQk0LTtWgC9/etmEg7EFPyJEncX/DlEREREjpJmiEVEREQk0JQQi4iIiEigKSEWERERkUBTQiwiIiIigaaEOB+ZWXUze8PMdpiZM7MhZtbW/3fbaMcnIiIiuZOYmIiZRTsMKWDaZSKMmZ0PdASedM7tymXzfwCdgBHAb8B3QI18DVBERCSPmk1tFu0QAFjae2me206ZMoW+ffumv46Li6Ny5co0a9aMLl260LdvX8qXL58fYUqAKCHO7HxgODAF2JXLtu2Bd5xzY9MKzKzQJcQdUh4ndn/dgj/R32bnSzfrx3TJl35ERKT4ePjhh6lfvz4HDx7kt99+Y+HChQwZMoTx48cza9YsTjvttGiHKEWIEuL8VY3cJ9EiIiKSS507d+bss89Of/3AAw+wYMECLrvsMq644gp++uknSpcuHcUIj87+/fuJjY2lRAmtbj0WNMohzCwReMJ/uc5f++vMrJ6ZdTCzz8xsl5ntNbOfzWyU366PmTnAgNvS2mVzrpZm9oGZ7TazP81skZm1CjnexMySzezlsHYXmFmqmT2WrxcvIiJSxLVv356HHnqIDRs28Morr6SXL1iwgNatW1O2bFkqVqzIlVdeyU8//ZSp/WeffcY555xDfHw8DRs25Pnnn494nuTkZAYPHszxxx9P+fLlueKKK9i0aRNmRmJiYoa6mzZt4qabbqJ69erExcWRkJDAv/71rwx1Fi5ciJkxffp0HnzwQWrVqkWZMmXYs2cPBw8eZMSIETRu3Jj4+HiqVKnCBRdcwLx5845+wCSdZogzehM4CbgOuAvY7peXBd4DfgSGASlAIyAtgf0E6AVMA+YBGZLYcGbWHpgDfI+33vgw0BdYYGatnXPfOOd+MrOHgCfM7A3n3CwzK4u3lGOlH8eRzlENqBpW3PCIVy8iIlLE9erVi6FDh/Lhhx/Sv39/5s+fT+fOnWnQoAGJiYkkJyczYcIEWrVqxeLFi6lXrx4AS5cupWPHjlStWpXExEQOHTrE8OHDqV69eqZz9OnThxkzZtCrVy/OPfdcFi1aRJcumZf3bdmyhXPPPRcz4/bbb6dq1arMmTOHm2++mT179jBkyJAM9R955BFiY2O55557SElJITY2lsTEREaPHk2/fv1o0aIFe/bs4bvvvmPx4sV06NChIIYwkJQQh3DO/Whmi/ES4redc+sBzGwIEAt0ds5tj9BuLbDWzKYBvzjnXgmvk8a8W1UnAR/7/Tm//HlgOTAS76Y+gPHAlcBkM/scL3muC5znnEvJ5nIG4a2FFhERCYzatWtToUIF1qxZA8C9995L5cqV+fLLL6lcuTIAXbt25cwzz2T48OFMnToVgGHDhuGc49NPP6VOnToAXHXVVTRrlvFGxMWLFzNjxgyGDBnCP/7xDwAGDRpE3759+b//+78Mdf/+97+TmprK0qVLqVKlCgADBw7kuuuuIzExkQEDBmRY1rF//36+++67DGWzZ8/m0ksvZfLkyfk5TBJGSyZyZpf/fKWZHe2YnQE0Bl4FqpjZ8WZ2PN4s9EdAm7RzOOcOA32AcngzyoOA0c6573JwnolA07DHlUcZu4iISKFXrlw5/vjjDzZv3sySJUvo06dPejIMcNppp9GhQwfef/99AFJTU5k7dy5du3ZNT4YBmjRpQqdOnTL0/cEHHwBeEhzqjjvuyPDaOcfMmTO5/PLLcc6xffv29EenTp3YvXs3ixcvztCmd+/emdY9V6xYkeXLl7Nq1ao8jobkhBLinPk38DnwArDFzKab2dV5TI4b+89TgW1hj35AHFAhrbJzbg2QCJyDN4P8SE5O4pzb6pxbHvoA1uQhXhERkSJl7969lC9fng0bNgBw8sknZ6rTpEkTtm/fzr59+9i2bRvJyck0btw4U73wths2bKBEiRLUr18/Q3mjRo0yvN62bRu7du1i8uTJVK1aNcMjbdu4rVu3ZmgT3id4u2ns2rWLk046iWbNmnHvvffy448/5mAUJDe0ZCIHnHPJZtYGaAd0AS4BrsFb89vROZeai+7Skuh7gSVZ1Nkb9jptCUVNoAreHsd5Nu/uC0lISDiaLkRERAqlX3/9ld27d2dKUI+1w4cPA9CzZ0969+4dsU741nCRdsVo06YNa9as4Z133uHDDz/khRde4B//+AeTJk2iX79++R94QCkhzizi7hD+8oWP/MfdZjYUeBQvSZ6fi/7TZmn3OOeybWdmA4EOwN+BB4Dn0dIHERGRiKZNmwZAp06dqFvX23P/559/zlRv5cqVHH/88ZQtW5b4+HhKly4dcVlCeNu6dety+PBh1q1bl2FGefXq1RnqVa1alfLly5OamsrFF198VNdUuXJl+vbtS9++fdm7dy9t2rQhMTFRCXE+0pKJzPb5zxXTCsyscoR6S/znuFz2/z1eUnyPmZULP2hmVUP+XR9vG7iZzrlRwD3AFWZ2Yy7PKSIiUuwtWLCARx55hPr163PDDTdwwgkncMYZZzB16lR27dqVXm/ZsmV8+OGHXHrppQDExMTQqVMn3n77bTZu3Jhe76effmLu3LkZzpG2pnjixIkZyidMmJDhdUxMDFdddRUzZ85k2bJlmWLdtm1bjq5px44dGV6XK1eORo0akZKS3b31khuaIc7se//5UTObDhwELjKz5sBsYAPeB3AMAn4FPstN5865w2bWD+8mueVm9hKwCaiFN9u8B7jc343iX0AycKvf9nkzuwp4yszmO+f+e3SXKiIiUjTNmTOHlStXcujQIbZs2cKCBQuYN28edevWZdasWcTHxwPwxBNP0LlzZ8477zxuvvnm9G3XKlSokGHP4BEjRvDBBx/QunVrBg0axKFDh5gwYQIJCQkZ1uw2b96cq666iieffJIdO3akb7v2yy+/AOD99+0ZM2YMH3/8MS1btqR///6ceuqp7Ny5k8WLFzN//nx27tyZ7XWeeuqptG3blubNm1O5cmW+++473njjDW6//fZ8GkkBvLsg9cj4AB7ES3ZT8ZZQ3AS8jZe4pvjPrwKNw9o54JmwsrZ+eduw8jOAmXh7He8H1uPdvNfePz7Yb/eXsHYnAruB2Xm4rgTALVu2zImISPG0Zs0at2bNmmiHUWBeeukl5///6AAXGxvratSo4Tp06OCeeuopt2fPnkxt5s+f71q1auVKly7tjjvuOHf55Ze7FStWZKq3aNEi17x5cxcbG+saNGjgJk2a5IYPH+68dOl/9u3b52677TZXuXJlV65cOde1a1f3888/O8CNGTMmQ90tW7a42267zZ144omuVKlSrkaNGu6iiy5ykydPTq/z8ccfO8C9/vrrmWIaOXKka9GihatYsaIrXbq0O+WUU9yjjz7qDhw4kNchLBRy8n26bNmytK9zgivg3M+cO+IHqkkxYmYJwLJly5bppjoRkWJq7dq1ADRo0CDKkQTLkiVLOPPMM3nllVe44YYboh1OoZeT79Ply5fTtGlTgKbO2y2rwGgNsYiIiEguJCcnZyp78sknKVGiBG3atIlCRHK0tIZYREREJBcef/xxvv/+e9q1a0fJkiWZM2cOc+bM4ZZbbuHEE0+MdniSB0qIRURERHLh/PPPZ968eTzyyCPs3buXOnXqkJiYyN///vdohyZ5pIRYREREJBc6dOhAhw4doh2G5COtIRYRERGRQFNCLCIiIiKBpoRYRERERAJNCbGIiIiIBJoSYhEREREJNCXEIiIiIhJoSohFREREJNCUEIuIiIhIoCkhFhERkSJjypQpmFmWj6+++iraIUoRpE+qExERCYifTmkS7RAAaLLyp6Pu4+GHH6Z+/fqZyhs1anTUfUvwKCEWERGRIqdz586cffbZUY1h3759lC1bNqoxSP7QkgkREREpVtavX4+ZMXbsWCZPnkzDhg2Ji4vjnHPO4dtvv81Uf+XKlXTv3p3KlSsTHx/P2WefzaxZszLUSVuqsWjRIgYNGkS1atWoXbt2+vFnn32WBg0aULp0aVq0aMGnn35K27Ztadu2LQB79+6lbNmy3HnnnZnO/+uvvxITE8Po0aPzdyAkxzRDLCIiIkXO7t272b59e4YyM6NKlSrpr1999VX++OMPBgwYgJnx+OOP85e//IW1a9dSqlQpAJYvX06rVq2oVasWf/vb3yhbtiwzZsyga9euzJw5k27dumU4x6BBg6hatSrDhg1j3759ADz33HPcfvvttG7dmrvuuov169fTtWtXKlWqlJ40lytXjm7duvHvf/+b8ePHExMTk97na6+9hnOOG264oUDGSrKnhFhERESKnIsvvjhTWVxcHPv3709/vXHjRlatWkWlSpUAOPnkk7nyyiuZO3cul112GQB33nknderU4dtvvyUuLg7wkt4LLriA+++/P1NCXLlyZT766KP0hPbAgQM89NBDnHPOOSxYsICSJb3U6rTTTqNPnz4ZZpFvvPFGkpKSmDdvHpdcckl6+SuvvEKbNm2oU6dOfgyN5IGWTIiIiEiR8+yzzzJv3rwMjzlz5mSoc80116QnwwCtW7cGYO3atQDs3LmTBQsWcPXVV/PHH3+wfft2tm/fzo4dO+jUqROrVq1i06ZNGfrs379/htnd7777jh07dtC/f//0ZBjghhtuyHBu8JL4mjVrkpSUlF62bNkyfvzxR3r27HmUIyJHQzPEIiIiUuS0aNEi25vqwmdc0xLU33//HYDVq1fjnOOhhx7ioYceitjH1q1bqVWrVvrr8J0tNmzYAGTe3aJkyZLUq1cvQ1mJEiW44YYbeO655/jzzz8pU6YMSUlJxMfH06NHjyNeixQsJcQiIiJSLIXO5IZyzgFw+PBhAO655x46deoUsW54olu6dOmjiunGG2/kiSee4O233+a6667j1Vdf5bLLLqNChQpH1a8cHSXEIiIiEkgNGjQAoFSpUhHXJOdE3bp1AW+2uV27dunlhw4dYv369Zx22mkZ6jdt2pQzzzyTpKQkateuzcaNG5kwYUIer0Dyi9YQi4iISCBVq1aNtm3b8vzzz7N58+ZMx7dt25ZtH2effTZVqlThn//8J4cOHUovT0pKSl+aEa5Xr158+OGHPPnkk1SpUoXOnTvn/SIkX2iGWERERIqcOXPmsHLlykzl559/PiVK5Hy+79lnn+WCCy6gWbNm9O/fnwYNGrBlyxa+/PJLfv31V/7v//7viO1jY2NJTEzkjjvuoH379lx99dWsX7+eKVOm0LBhQ8wsU5vrr7+e++67j7feeotbb701fQs4iR4lxCIiIgGRHx+Z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\n",
      "text/plain": [
       "<Figure size 720x480 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_axis = np.arange(len(df_pollution['algorithm']))\n",
    "\n",
    "height = 0.12\n",
    "\n",
    "plt.figure(dpi=120)\n",
    "\n",
    "plt.barh(x_axis, df_pollution['runtime/feat.'], height=height, label='Air Pollution')\n",
    "plt.barh(x_axis + height, df_interstate['runtime/feat.'], height=height, label='Insterstate94')\n",
    "plt.barh(x_axis + (2*height), df_dodgers['runtime/feat.'], height=height, label='Dodgers')\n",
    "plt.barh(x_axis + (3*height), df_energy['runtime/feat.'], height=height, label='Energy')\n",
    "plt.barh(x_axis + (4*height), df_tetouan['runtime/feat.'], height=height, label='Tetouan')\n",
    "\n",
    "plt.gca().xaxis.set_minor_locator(MultipleLocator(100))\n",
    "\n",
    "plt.yticks(x_axis, df_pollution['algorithm'])\n",
    "plt.xlabel('Runtime / Feature')\n",
    "plt.legend();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "db8f9e5c-74e5-4ca8-ab42-8c42fd1d6541",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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wYNcf/31XH/99TRu3Dgnb5uIiOSzScMWZvuIRrrkLYUmNTWVHj160L59e8aPH8+CBQt45JFHaNy4MVdffTXg9Qm89NJL+cc//sG4ceMA+PHHH/nss8+4/vrrOf300xkxYgRPPPEEd955J82aNQNIf54+fToDBgygR48ejBs3jr/++ounnnoq/TJw4OXlQ4cO0aNHDzp27Mj48eMpV64cBw4coEePHuzfv5/rrruOmjVrsmHDBt5991127txJpUqVmD59OldddRXt2rVjyJAhAOkB2tdff83nn3/OJZdcQp06dVi7di1PPfUUnTt35ocffqBcuXIR2Ye0y9Vly5bNdJzLlSvHihUr+OOPP6hZs2Z6+oQJE9ixYwd33303b7zxRsTeVxERKXkUUEqh2bdvHxdffDH33HMPAMOGDeOkk07i+eefTw8oZ8+eTcWKFZk7dy4xMTGZttGoUSM6derEE088Qbdu3ejcuXP6sj///JMRI0Zw1VVXMWXKlPT0AQMGcOyxxzJ69OgM6fv376dv376MGTMmPW3ZsmWsWbOGmTNn0qdPn/T0kSNHpv/dr18/hg0bRqNGjejXr1+G+vXq1SvDegDnnnsup556Kq+//jr9+/ePyD7UqFGDypUr89lnn2Uoa9u2bfzwww8AbNiwIT2g/OOPPxg1ahTjx4+nYsWKmY6riIhIbuiStxSqYcOGZXjdqVMnVq9enf66cuXK7N27l/nz5+d62/Pnz2fnzp1ceumlbN26Nf0RExND+/bt+fDDDzOtkxbIpqlUyRsMNXfuXP76669c1yGwxfDgwYNs27aNJk2aULlyZZYuXRqxfShVqhRDhw7lgw8+4I477mDlypV88803XHTRRRw4cACAlJSU9O2m9be86qqrcr1PIiIiwRRQSqGJj4/PNPK4SpUq7NixI/318OHDadq0KT179qROnTr861//4v3338/R9leuXAlA165dqV69eobHvHnz2Lx5c4b8pUuXpk6dOhnSGjZsyE033cRzzz3HUUcdRY8ePZg0aVJ6/8nspKSkMHLkSOrWrUtcXBxHHXUU1atXZ+fOnTnaRm724f777+fKK6/koYceomnTprRt25bSpUtz5ZVXApCQkADAl19+yfTp03nssccoVUpfASIiEj5d8pZCE+oSdrDExESWLVvG3LlzmTNnDnPmzOGFF17giiuuYNq0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5jMzSzIzBywv7LqIiIiI5AcFlPnMOZfknDOgRWHXRURERCQ/6E45RcSPxzUr7CrQ7Kcf87zu1KlTGTRoUJbLv/jiC0455ZQ8b19EREQKjwJKKVD3338/DRs2zJTepEmTQqiNiIiIRIICSilQPXv2pG3btoVah71791K+fPlCrYOIiEhxoj6UEjXWrl2LmTF+/HimTJlC48aNiYuL4+STT+brr7/OlP+nn36iT58+VK1alfj4eNq2bcusWbMy5Jk6dSpmxkcffcTw4cNJTEykTp066csnTZpEo0aNKFu2LO3ateOTTz6hc+fOdO7cGYA///yT8uXLc/3112cq/7fffiMmJoYxY8ZE9kCIiIgUMWqhlAK1a9cutm7dmiHNzKhWrVr665dffpk9e/YwdOhQzIyHHnqIf/7zn6xevZoyZcoAsGLFCjp06MDRRx/N7bffTvny5Xn11Vfp3bs3r7/+OhdccEGGMoYPH0716tUZOXIke/fuBeCpp57i2muvpVOnTtx4442sXbuW3r17U6VKlfSgMyEhgQsuuID//ve/PProo8TExKRv85VXXsE5x+WXX54vx0pERKSoUEApBerMM8/MlBYXF8e+ffvSX69fv56VK1dSpUoVAI499ljOP/985s6dyznnnAPA9ddfT7169fj666+Ji4sDvKCxY8eO3HbbbZkCyqpVq/LBBx+kB4QHDhzgnnvu4eSTT2bhwoWULu19FFq1asXAgQMztGJeccUVJCcnM3/+fM4666z09JdeeonTTz+devXqReLQiIiIFFm65C0FatKkScyfPz/DY86cORnyXHzxxenBJECnTp0AWL16NQDbt29n4cKFXHTRRezZs4etW7eydetWtm3bRo8ePVi5ciUbNmzIsM3BgwdnaF1csmQJ27ZtY/DgwenBJMDll1+eoWzwguDatWuTnJycnrZ8+XK+++47+vXrF+YRERERKfrUQikFql27dtkOyglu8UsL8Hbs2AHAL7/8gnOOe+65h3vuuSfkNjZv3szRRx+d/jp4ZPm6deuAzKPLS5cuTYMGDTKklSpVissvv5ynnnqKv/76i3LlypGcnEx8fDx9+/Y94r6IiIiUBAooJeoEtiQGcs4BcPjwYQBuvvlmevToETJvcKBYtmzZsOp0xRVX8PDDD/PWW29x6aWX8vLLL3POOedQqVKlsLYrIiJSHCig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ioNiGVCa2XHAJOALYJqfXNZ/3h9ilX0BefYHPB8p35EMB+7NaX1FREREirJiF1CaWU1gNt5I7j4Bg2dS/Oe4EKvFB+VJyWG+rEzGG3EeqDHwdjbriYiIiBQ5xSqgNLNKwBygMtDJOfd7wOK0y9W1gtfz07b7l7vT8nYxf46goHwAv3MEzrnNwOaguuVoH0RERESKmmIzKMfM4oF3gKbAOc65HwKXO+c2AFuAtiFWbwcsC3i9DChHxhHiAO0DlouIiIgIxSSgNLMY4L940/n0dc59kUXW14FzzKxuwLr/wAtCAy9Rvw0cxOsLmZbPgGHABuDziO6AiIiISBFWXC55PwKch9dCWdXM+gUudM695P85GugLfGhmj+PdKecWvAnQXwjI/5uZTQBuMbMyeHfK6Q10Ai7XpOYiIiIifysuAeWJ/vO5/iPYSwDOuV/N7Ay8O+uMBQ7gDeD5d0D/yTS3AzuAoXh30VkJ9HPOvRzpyouIiIgUZcUioHTOdc5F3hVAjxzkOwyM8R8iIiIikoVi0YdSRERERAqPAkoRERERCYsCShEREREJiwJKEREREQlLsRiUIyKSQVKl7PM0rJf/9RARKSHUQikiIiIiYVFAKSIiIiJhUUApIiIiImFRQCkiIiIiYVFAKSIiIiJhUUApIiIiImFRQCkiIiIiYVFAKSIiIiJhUUApIiIiImFRQCkiIiIiYVFAKSIiIiJhUUApIiIiImFRQCkiIiIiYVFAKSIiIiJhKV3YFRCRnPvxuGbZ5mn2048FUBMREZG/qYVSRERERMKigDKfmVmSmTlgeWHXRURERCQ/6JJ3PnPOJQFJZtYcBZXFToPbZ2ebZ+3YXgVQExERkcKjFkoRERERCYsCShEREREJiwJKEREREQmL+lCKFDOThi3MNs81T3ctgJqIiEhJoRZKEREREQmLAkoRERERCYsCShEREREJi/pQikSJltNaZpvn1QKoh4iISG6phVJEREREwqKAUkRERETCooBSRERERMKiPpQi+S2pUs7yNayXv/UQiXI/HtcsZxk7T8rfiohIrqmFUkRERETCooBSRERERMKigFJEREREwqKAUkRERETCooBSRERERMKigFJEREREwqKAUkRERETCooBSRERERMKigFJEREREwqKAUkRERETCooBSRERERMKigPIIzCzOzMaZ2e9mlmJmX5lZt8Kul4iIiEg0UUB5ZFOBm4Bk4HogFXjPzDoWZqVEREREoknpwq5AtDKzdsAlwC3OufF+2ovAcuAh4LRCrJ6IiIhI1FALZdb64LVITklLcM7tA54HTjWzuoVVMREREZFoohbKrLUGfnbO7Q5KX+w/nwj8GmpFM0sEqgclHwfwyy+/RLCKUtgObFmXbZ4Vcak52ta+2H3Z5lm5P/ttbdy+Nts8K1asyEmVok5Ojjfk7JgX5PGG4n3MC/J4g87xSB1v0HdKQX+H5+Q4RcvxDohXYnOS35xz+VebIszMlgObnHP/CEo/HlgBDHPOPZPFuknAvfleSREREZH8db5zblZ2mdRCmbWywP4Q6fsClmdlMjAzKC0BaIrXB/NA2LXLucbA28D5wKoCLLek0vEuWDreBUvHu2DpeBc8HfO/xQJ1gY9yklkBZdZSgLgQ6fEBy0Nyzm0GNodY9FUE6pUrZpb25yrnXNG8JlGE6HgXLB3vgqXjXbB0vAuejnkm3+Y0owblZG0jUCtEelra7wVYFxEREZGopYAya8uApmZWMSi9fcByERERkRJPAWXWXgNigCFpCWYWBwwCvnLOhRzhLSIiIlLSqA9lFpxzX5nZTGCMPw3QL8AAoAFwZWHWLZe2APf5z5L/dLwLlo53wdLxLlg63gVPxzyPNG3QEZhZPDAK6AdUAb4D7nHOzS3UiomIiIhEEQWUIiIiIhIW9aEUERERkbAooBQRERGRsCigFBEREZGwKKAUERERkbAooMxnZnaymX1uZnvNzJnZiYVdJwmfmdUws9fMbJv/vt5gZp39vzsXdv1yQ+do5JnZVDNbW9j1iLRQ530u13dmlpQ/tSsawj2GYZa91szeLajyCouZJfnH9qjCrktJonko85GZlQFmAvuAG4G/gHUR3P5lQKJzbkKktlmSmNlpQHdggnNuZy5XfwzogTdf2R/AEqBmRCtYAPL7HPXLqI13g4C3nHPLIrntXNYjnPe72MiH877E0TEsOcxsOPCXc25qYdcl2imgzF+NgfrAYOfcc/mw/cuAFsCEfNh2SXAacC8wFdiZy3W7Am8758anJZhZkQsoyf9zFKA23nFeS+HesjSc97s4ieh5X0LpGJYcw4GteO+1HIEueeevRP95Z2FWIrfMrFxh16EISKSIva9ZKJLnKHg3HjAzfYcVrOJy3hemHB1DMyuf/1URiSDnnB758MD7b8YFPRYBrfxlq/EuM/4B/AeoFrR+BbyWx7XAfmAzMB84yV++KMT21/rLOvuvLwZG+2XsBWYBdYPKWQQsB9oAH+Nd8pzgL0sEngc2+XX9P2BA0PoN/LJuxrtkug5IAT4CWhT2+3CE9ycpxPFz/v50Az7F+9L/E/gfMNpfb2Co9YKOe+egstoD7wO7/OP7EdAhYHkz/5i9GLReRyAVGFeQ56i/7Di8+9lv99/7JcB5QetXBcYD3/vHaTcwBzghIE/nEGU4YKC/fC0wNUTdFqXVJWg7lwAPABuAw0DlHB7jLN9vf3lp4B5gFd7nbS3eZycuRN2GAyv8fL8Dk9LqEXRs1walXQJ8A+zxj9X3wPVF/bz3l1fG+7761T8uvwC3AaWCyndAUmF//qPtGAYsOwOYjPd9vyOgzJ7AJ3jf43uA2UDzoHrVBF4AfvPfg43A22nneMDn7V2875bFeJ/t1cAVhX1c8+k9Oiogrb5/Xi4HagCDgIX+sd4P/ABcHbSdtSHes0X+sjJ4rdQr/eO4zX/vuxX2/hfWQ5e8888zeD96dwJPAF/jBWbdgEZ4H/w/gOZ4/cuam9kpzj9TgaeBPsCTeCd6NbwvgWbAUuBBoBJQBy+QA+8LLNBdeB+AcXjB4Q3AAjM70TmXEpCvGl4gMAN4CdhkZmXxftSb+HVYA/QFpppZZefc40FlXYEXBE8C4oHrgYVm1tI5tymnB60AvQE0BS7FO35b/fTyeF+43wEj8b5omgAd/OUfA/2B6XgB/otHKsTMuuId22/w+kwdxv8iM7NOzrnFzrkfzewe4GEze805N8tvnZgK/OTXIz+EPEfNrDnwmb9sLN6P2EXAW2Z2oXPuTX/9RkBvvD6Ya/C+pIcCH5nZ8c6534Ef/frfD0zB+1EE+DyPdb4HOIAXyMYBB3JyjMn6/U67X+9zwAC8IPoRvAD1DrzP2wVphfsDSu4FFgBPAccCVwMnm1kH59zBUJU2s27AK8AHeIEW/rY7AMGfpfwU8fPev6LxEXA03jm1Hu+S8BigFt73TnGSn98dk/HOyfv97WFm/YFpwFy8c6cc3jn3qZm1ds6t9dd9He/3ZCJeIJSI93tTz3+dpgneef68v91/4X2vf+OcW5Hro1EEmFljvOBxO17At9XMrsb7x3AWcAg4F5hsZqWcc5P8VW/AO55/4v3mgvc7Dl7Qegfed8dioCLQFjgJ7/0teQo7oi3OD/5uVekTkFY2RL5L/HydAtJ2Ak9ms/13CWoFCSr3N6BCQHpfP31EQNoiP21o0Dau99MvD0grgxcI7EnbLn+3UP4FHB2Qt52f/mhhvw9HOH43E9BK5afdQNB/tlms64LfH4JaKAEDfsZrObPAcwCvVWBeQFopvGDrD7wA/0ngINC2EM7RBXg/inEBaYYXZP4ckBZH5haoBnj/rd8TkNaWgFbJoPxryV0L5arAz1Auj3Gm99tPP8FPfzYo/WE/vYv/ujpekDA3cL+Ba/x8gwLSphLw2cRrvdsFxBTD8/5uvB/cY4LSx+D9UNcNWj+psI9BFB7DgX76J4HnCJAA7ACmBOWvgfcbMcV/Xdlf/+Zsyl5L5t+a6v5ndnxhH9cIvj9Jae8F3tWWDXhBX5WAPKF+i98HVgWlLQ/8LgpIXwa8W9j7Gk0P9T8qYC6gZdDvA3YU8KWfdFJA1p1Ae3+EbF696JzbE/D6NbzLIGcH5duP12Ia6Gy84OaVgLofxGvJSsC7NBPoLefchoC8i4GvQpQV7Xb6z+dHoH/eicAxwMtANTM7yn+/y+O1VJ2eVoZz7jDej0oCXmvbcGCMc65AR4CaWVW8QQOvAhUC6lwNL5A6xsyO9uu83683ZhZjZtX4+zLfSSELCN80l7F1/URyeIyPIO0cfTQo/RH/uZf/fCYQi9cl5HBAvmfxLmH3Ims7/Tp1y6YuhWWn/5yX874vXiC0I+34++/BAiAGOD1y1YxqO/3ncL47nnXOpQa87oYXLL4SdGxT8b5fu/j5UvBa7jubWZVsyvjBOZd2pQDn3Ba8z2yjPNY5mrXAaz1fC5zpnNuRtiDot7iSf1w/AhqZWaUcbHsn3pXFYyJa4yJMAWUBM7OqZva4mW3C+xLYgne5ELxL2Gluxfsw/Gpmi/15tXL7gV8Z+MJ5/1b9gteKFGiDc+5AUFp9YGXQDyd4lzDTlmdZlu/nEGVFu//itcQ9h3f5d4aZXZTHH4i0L5ppeO9z4OMqvBa+9PfcObcK7z/rk/EuxYzK4z6Eowleq98oMtf5Pj9PIoCZlTKzG81sJd4/JVv9fK3IeC5H0pqg17k6xlmoj3eZ/JfAROfcH3g/GvUD8oH34xuY7wBea2jwZyLQZLzPwxwz+83M/mNmZ2VTr4IUznl/DHAWmY//An95YhbrFTeR+O7I6vxeSObj2x3/2Drn9uNdDu/pl/2xmd2axcwT60Ok7QCyC0SLonfwrqj1cM7tDlxgZh3MbIGZ7cX7nG/B6zcNOfv+GokX7P9sZt+b2cNm1ipiNS+C1Iey4L2K17/oYbwm8z/xAvv3CQjwnXOvmtkneP23ugO3ALeZ2T+dc3MiXKeU7LOUDM65FDM7He8//154P5QX4/XH6x7UepCdtPfzFrKeLie432t3/7k2XqvgH7koLxLS6jwer0UylLTA6068wPM/eH0bt+MFZhPI+T+rLov0GLxWmGDB52pejnFu6xI259xmf8L4Hng/+j2BQWb2onNuQH6Vm1Nhnvel8PqMPZTF8p8jWtkoFaHvjqzO7/6E/i44FFD+BDN7B69fcw+8z+YdZtbVOfdtwDpZ1cNyUL+i5nW8vtGX4/XvBdL7VH6A10f9JrzBZAfwrlbcSA6+v5xzH/vbOR/ve/sq4EYzG+bybwq2qKaAsgD5lyL+AdzrnLs/ID1kk7lzbiNey8ZkM0vEG4xzF94lUcj+BzDDds3M8FqgvstBddcBrfwOyoGtlMcFLM+yLF9TMnYGjzYhj5+/vx/4j5vM7E68Dtld+LvVJSdW+c+7nXPZrmdmw/Aucd2F19n7Gbwvq4K02n8+mIM69wE+dM5dGZhoZpX5e6ACHPk83YH3X36w+gF1OZLcHOOs6rEO7wfkGP5ugcfMavh1WxeQD7yBOKsD8sUCDcnm3PBbMt8B3vFbrSYDQ81slHPulyOtG2GRPu9XAQk5OceLkfz+7kiTdn5vzsnx9a9yPAI84v+uLAP+DfTLQ9nFwS14QfdkM9vjnHvZTz8X7+rFec659BZbM+sSYhtZfn8557bjdRd7wcwS8AZeJeG1Upc4uuRdsNL+Mwz+T/CGwBd+f7QMTe7Ouc14U5TEBSTv5chN81eYWYWA133wRl3mpIXzPbxpKC4OqFdp4Dq8Fp+PgvL3Tutb5+dthzdSNtKtqZG013+unJbg9yEMtsx/jgux7Ei+wftBuNn/ssnAzKoH/N0Qr9X6defcaLxO/+eZ2RW5LDMs/nm2CC/QqRW8PLDOeOezBS3vizfaN1Cm4xxgFXCKH5SlbeMcoG4Oq5zjY3yEerznP98QlH6T/zzbf16A14oxwv/nLM2VeJ/D2WTB71+azg880v6xy+15Fa5In/evAqeaWY/gBWZW2f/eKG7y+7sjzVy8/rl3mndXqwzSzm8zK2dm8UGLV+Fd7i3o8yuaOLxZVF4DppnZeX56pt9i/zd3UIht7CXEd1eIz/SfeFdvSuzxLo4f9KjlnNttZh8Dt/pfDhvwmsobBmWtAPxmZq/hzf34J96AgJPx/ttM8w1wsZk9ijfly5/OuXcClm/Hm1riBbxRgTfgnfDP5qC6U/CmgJlqZm3wWhr74E2BcUPQYB/87X5qZk/hfaBuwJuXK6vLYNHgG//5QTObgTeq+h/+/s7Ga5FKxBsg8xveHGM55pw7bGZX4QXVK/z3YQNewNUF74fiXD84+Q/e5a6r/XWfMbMLgcfNbIHzpuApKNfg7ev3ZvYsXmtcDeBUvGmqTvDzvQuM9Pfrc6Al3qWl4JbFVXh9lIaZ2R68L+ivnHNr8P6T7wO8b2av4t25px9/t8wcUU6PsZ891Pv9jnPu/8xsGjDEb139CG+WggF4g80+9MvaYmZj8KYNet/MZuG1Vg7H+/y9dISqPucHHAvxzqX6eP+cLSOgVbSARPq8fxg4D3jXzKb62y+Pdz70wetHvTWrlYuofP3uSOP/ZlyNN9XQUr+sLXhTAfXC67N5Ld7VoA/8z9APeK1yF+B9bmfkaQ+LCf87oh/wFvCqmZ0NzMP75/AdM3sGbzDkYLw5KYP/kf4GuNrM7sb7ndvsnFsI/GBmi/zl2/Fms0ib6q9kKuxh5sX5QegpWY7Gm8dsB96P7Kt4J3D6dBp4I0kfwvux2Y0XUC4j86Sr5YFkf1uOzBObX4LXyXgT3rQ+7wL1graxCFieRf0T8QKdLXiDLr4jaOoXMk5sfhNeh+99eE3/rQr7PcjBe3Q33hd+qr8f/8L74tng7/MGvBHEwVOihJr6I+24dw5KPxGvL89W/9isxevA39VfPsJf759B69XFm2pmdkGeo356I7yBLhvxvnh/w7tce2FAnji8vpa/++fXp8ApBE354+c9D2+g0UGCphDyz5vf/GPzKd4k+xm2kVU9c3qMj/B+N/DTS+N1sl/t7+96sp7Y/Bq8IPAAXr+2yWQzsTlwIV5r0yb/vFqHN9dszaJ+3vvpCf7xShugtQUv2Pk3UCZo/aTC2OdoPob8PW1QyGnC/PP/fbzfjBS8wOYFoI2/PG2qsR/xfi924s0e0jdoO2sJMdVN8OetqD8IPbF52tzKe/Cunp2L12CTgjcY6la8Fsr07wV/vRp4v527yTix+V14I+134H3//YjXr7xMQe5rND3MPzBSjJhZZ+BDvC+T1/K5rAZ4H8ZbnO5NKyIiUiKpD6WIiIiIhEUBpYiIiIiERQGliIiIiIRFfShFREREJCxqoRQRERGRsCigFBEREZGwKKAUERERkbAooBQRERGRsCigFBEREZGwKKAUERERkbAooBQRERGRsCigFBEREZGwKKAUERERkbAooBQRERGRsPw/rsXi3YgqzYgAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 720x480 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_axis = np.arange(len(df_pollution['algorithm']))\n",
    "\n",
    "width = 0.1\n",
    "\n",
    "plt.figure(dpi=120)\n",
    "\n",
    "plt.bar(x_axis, df_pollution['runtime/feat.'], width=width, label='Air Pollution')\n",
    "plt.bar(x_axis + width, df_interstate['runtime/feat.'], width=width, label='Insterstate94')\n",
    "plt.bar(x_axis + (2*width), df_dodgers['runtime/feat.'], width=width, label='Dodgers')\n",
    "plt.bar(x_axis + (3*width), df_energy['runtime/feat.'], width=width, label='Energy')\n",
    "plt.bar(x_axis + (4*width), df_tetouan['runtime/feat.'], width=width, label='Tetouan')\n",
    "\n",
    "plt.gca().yaxis.set_minor_locator(MultipleLocator(100))\n",
    "\n",
    "plt.xticks(x_axis, df_pollution['algorithm'])\n",
    "plt.ylabel('Runtime / Feature')\n",
    "plt.legend()\n",
    "plt.savefig('../assets/benchmarks_plot.png');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "33037788-b647-451f-91f6-967a502de159",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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5MmT05vV+/btC2Td5zFIGdu3b8/xxx/P0qVL6dChA2XLlqV27do88sgjOT4WERGRnFDwKHlm6tSp/O1vfyMhIYHLL7+c5cuX8/XXXwdev2fPnvz55588/PDD9O/fP8f7X7FiBQDVqlUDvMDu+uuvp1atWowePZqLL76YZ555hs6dO+fZRNhTpkwhMTGRdu3aMWXKFKZMmcKAAQOyzJ+TMm7dupVzzjmHE044gdGjR3Psscdy5513MmvWrDw5FhEREVCfR8kj3377LT/++CNjx44FoG3bttSpU4epU6dyyimnBNrGCSecwEsvvRR4nzt37mTTpk0cOHCA7777jptuugkz4+KLL2bjxo0MHz6czp07M2vWrPRJ2o899lhuuOEGXnzxRfr165fzA81Gr169GDhwIA0bNqRXr16HzZvTMv7222+88MIL9O7dG4Crr76aevXq8dxzz9G1a9eYH4uIiAio5lHyyNSpU6lRowYdOnQAvObbSy+9lGnTppGamhpoGwMHDszRPv/+979TvXp1atWqRbdu3dKbi1u1asW8efPYv38/N998c4a7+/Tv35+KFSsyc2bBD1LKaRnLly+fISBNSEjg1FNPLRQjzEVEpPhSzaPEXGpqKtOmTaNDhw4Z+hu2bt2a0aNH8/7779O5c+dst9OgQYMc7XfIkCG0a9eO+Ph4jjjiCJo2bZo+EGf16tUAHHPMMRnWSUhIoGHDhunLC1JOy1inTp1Mg22qVKnC999/n7cFFRGREk3Bo8Tc/PnzWb9+PdOmTWPatGmZlk+dOjVQ8FimTJkc7bd58+acffbZOVont7IaIR20VjUW4uPjI6brXtQiIpKXFDxKzE2dOpXk5GTGjRuXadnrr7/OG2+8wdNPP53j4DAa9erVA+Cnn36iYcOG6en79+9n1apVOQ46q1SpEnGUdqQazKBT8cS6jCIiInlBwaPE1J49e3j99dfp2bMnPXr0yLS8Vq1avPzyy8yYMYNLL70038p19tlnk5CQwJNPPsk555yTHtA999xzbN++nW7dcjYpeqNGjdi+fTvff/89LVq0AGD9+vW88cYbmfKWK1cu0HRAsS6jiIhIXtCAGYmpGTNmsHPnTi644IKIy0877bTDThieV6pXr87dd9/Ne++9xznnnMO4ceMYPHgwN954I6ecckq2I6HDXXbZZZQrV46LLrqIJ554guHDh9O6dWuaNGmSKW/Lli2ZN28ejz32GNOmTePLL7/MlzKKiIjkBQWPElNTp04lKSmJTp06RVweFxdHt27deO+999i8eXO+lm3o0KE89dRTrFmzhltuuYXp06dz7bXXMmfOHEqXLp2jbVWrVo033niDsmXLcscddzB58mSGDx/O+eefnynvY489RsuWLbnvvvu4/PLLmTBhQr6UUUREJC+YOtfHnpk1AxYvXryYZs2aZVqeNpVKaL82kcJI16qIFBf17wo2JVvKiBLbRSjwvXJV8ygiIiIigSl4FBEREZHAFDyKiIiISGAKHkVEREQkMAWPIiIiIhKYgkcRERERCUzBo4iIiIgEpuBRRERERAJT8CgiIiIigSl4FBEREZHAFDyKiIiISGAKHkVEREQkMAWPEnOTJk3CzPjmm29ivu2lS5cydOhQUlJSYr7toB5++GHefPPNXK8fq2OYO3cubdu2pWzZslSpUoUePXpku80VK1aQlJSUZ++PiIgUfwoepUhZunQpDz74YJEPHqM9hnfeeYdzzjmHffv2MWLECP7xj3/w4Ycf0rZtWzZu3JjlerfccgulSpXK9X5FRET0K1IYDa1U0CWAodsLugT5avfu3ZQrV66gixHYnXfeScOGDfn0009JSEgA4Pzzz+fkk09mxIgRjB49OtM6s2fPZvbs2dxxxx3885//zO8ii4hIMaGaR8lzffv2pXz58qxbt47u3btTvnx5qlevzm233UZqamqGvNOmTaNly5ZUqFCBihUr0rx5c5544gnAaw7v2bMnAB06dMDMMDMWLFiQvv6sWbNo164d5cqVo0KFCnTr1o0lS5ZELM+KFSs499xzqVChAldeeSUAy5cv5+KLL6ZmzZokJSVRp04dLrvsMrZv94JpM2P37t1Mnjw5ff99+/YFYPXq1QwaNIhjjjmGMmXKUK1aNXr27JmhhjEWx7BlyxaWLl3KRRddlB44Apxwwgk0bdqUadOmZXoPDhw4wE033cRNN91Eo0aNgrxtIiIiEanmUfJFamoqXbp0oXXr1owaNYp58+YxevRoGjVqxHXXXQd4ffguv/xy/u///o+RI0cCsGzZMj799FNuuukmzjzzTAYPHsyTTz7JPffcQ9OmTQHSn6dMmUKfPn3o0qULI0eO5M8//2TChAm0bduW7777jvr166eX5+DBg3Tp0oW2bdsyatQoypYty/79++nSpQv79u3jxhtvpGbNmqxbt4533nmHbdu2UalSJaZMmcI111zDqaeeyrXXXguQHox9/fXXfPbZZ1x22WXUqVOHlJQUJkyYQPv27Vm6dClly5aNyTHs27cPgDJlymQ6z2XLlmXJkiX8/vvv1KxZMz19zJgxbN26lfvuu4/XX389Zu+riIjk3riB87PNc/3THfOhJDmj4FHyxd69e7n00ku5//77ARg4cCAnn3wyzz33XHrwOHPmTCpWrMjs2bOJj4/PtI2GDRvSrl07nnzySTp16kT79u3Tl+3atYvBgwdzzTXXMHHixPT0Pn36cMwxx/Dwww9nSN+3bx89e/Zk+PDh6WmLFi1i1apVvPLKK/To0SM9fciQIel/9+rVi4EDB9KwYUN69eqVoXzdunXLsB54Tcmnn346r732Gr17947JMdSoUYPKlSvz6aefZtjX5s2bWbp0KQDr1q1LDx5///13hg0bxqhRo6hYsWKm8yoiIpITaraWfDNw4MAMr9u1a8fKlSvTX1euXJndu3czd+7cHG977ty5bNu2jcsvv5xNmzalP+Lj42ndujUffPBBpnXSgtY0lSp5fU1nz57Nn3/+meMyhNYEHjhwgM2bN9O4cWMqV67MwoULY3YMcXFxDBgwgPfff5+7776b5cuX8+2333LJJZewf/9+APbs2ZO+3bT+kddcc02Oj0lERCScgkfJF0lJSVSvXj1DWpUqVdi6dWv660GDBtGkSRO6du1KnTp1+Pvf/857770XaPvLly8HoGPHjlSvXj3DY86cOWzYsCFD/lKlSlGnTp0MaQ0aNODWW2/l2Wef5YgjjqBLly6MGzcuvb9jdvbs2cOQIUM46qijSExM5IgjjqB69eps27Yt0DZycgwPPfQQV199NY888ghNmjShVatWlCpViquvvhqA8uXLA/DFF18wZcoUHn/8ceLi9HEXEZHoqdla8kWkZuhwycnJLFq0iNmzZzNr1ixmzZrF888/z1VXXcXkyZMPu+6hQ4cAr89gaF+/NOHT0yQmJkYMpkaPHk3fvn156623mDNnDoMHD2b48OF88cUXmYLNcDfeeCPPP/88N998M6effjqVKlXCzLjsssvSyxerY0hISODZZ5/lX//6Fz///DM1atSgSZMmXHHFFcTFxdG4cWMA7rjjDtq1a0eDBg3SB+5s2rQJ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7du3p3379gDs2rWLcuXKcdNNN2Xa/9q1a4mPj2f48OGxPREiIiJFjGoeJc9s376dTZs2ZUgzM6pVq5b++qWXXmLnzp0MGDAAM+ORRx7hb3/7GytXrqR06dIALFmyhDZt2lC7dm3uuusuypUrx/Tp0+nevTuvvfYaF110UYZ9DBo0iOrVqzNkyBB2794NwIQJE7jhhhto164dt9xyCykpKXTv3p0qVaqkB5jly5fnoosu4r///S+PPfYY8fHx6dt8+eWXcc5x5ZVX5sm5EhERKSoUPEqeOfvsszOlJSYmsnfv3vTXa9asYfny5VSpUgWAY445hgsvvJDZs2dz3nnnAXDTTTdRt25dvv76axITEwEvQGzbti133nlnpuCxatWqvP/+++nB3/79+7n//vs55ZRTmD9/PqVKeZd9ixYt6Nu3b4bayauuuoqpU6cyd+5czjnnnPT0F198kTPPPJO6devG4tSIiIgUWWq2ljwzbtw45s6dm+Exa9asDHkuvfTS9MARoF27dgCsXLkSgC1btjB//nwuueQSdu7cyaZNm9i0aRObN2+mS5cuLF++nHXr1mXYZv/+/TPUGn7zzTds3ryZ/v37pweOAFdeeWWGfYMX8NaqVYupU6empy1evJjvv/+eXr16RXlGREREij7VPEqeOfXUU7MdMBNek5cWzG3duhWAX375Becc999/P/fff3/EbWzYsIHatWunvw4f4b169Wog8yjvUqVKUb9+/QxpcXFxXHnllUyYMIE///yTsmXLMnXqVJKSkujZs+dhj0VERKQkUPAoBSq0hjCUcw6AQ4cOAXDbbbfRpUuXiHnDg8IyZcpEVaarrrqKRx99lDfffJPLL7+cl156ifPOO49KlSpFtV0REZHiQMGjFGoNGzYEoHTp0hH7UAZRr149wKvF7NChQ3r6wYMHSUlJoUWLFhnyH3/88Zx00klMnTqVOnXqsGbNGsaOHZvLIxARESle1OdRCrXk5GTat2/PM888w/r16zMt37hxY7bbaNWqFdWqVePf//43Bw8eTE+fOnVqevN4uN69ezNnzhzGjBlDtWrV6Nq1a+4PQkREpBhRzaPkmVmzZvHjjz9mSj/jjDOIiwv+f8u4ceNo27YtzZs3p3///jRs2JA//viDzz//nLVr1/K///3vsOsnJCQwdOhQbrzxRjp27Mgll1xCSkoKkyZN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\n",
      "text/plain": [
       "<Figure size 720x480 with 3 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_axis = np.arange(len(df_pollution['algorithm']))\n",
    "\n",
    "width = 0.1\n",
    "\n",
    "plt.figure(dpi=120)\n",
    "\n",
    "baxes = brokenaxes(ylims=((1,400),(600,1200)))\n",
    "\n",
    "baxes.bar(x_axis, df_pollution['runtime/feat.'], width=width, label='Air Pollution')\n",
    "baxes.bar(x_axis + width, df_interstate['runtime/feat.'], width=width, label='Insterstate94')\n",
    "baxes.bar(x_axis + (2*width), df_dodgers['runtime/feat.'], width=width, label='Dodgers')\n",
    "baxes.bar(x_axis + (3*width), df_energy['runtime/feat.'], width=width, label='Energy')\n",
    "baxes.bar(x_axis + (4*width), df_tetouan['runtime/feat.'], width=width, label='Tetouan')\n",
    "\n",
    "# plt.gca().yaxis.set_minor_locator(MultipleLocator(100))\n",
    "\n",
    "baxes.set_xticks(x_axis, df_pollution['algorithm'])\n",
    "baxes.set_ylabel('Runtime / Feature')\n",
    "\n",
    "baxes.legend(loc='upper left');"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "3d738228-ae06-4269-914b-f51732baaca3",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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x759+7jhhhsCd7AZPHgwNWrUYNas2A8Mym8dq1WrFgg64+Pjad++PT///HOx1VlERMqnstKCWBnYm036nojl+C2MXbPJdyjDgXsKXrWyJz09nenTp9O1a9dA/78OHTrw8MMP8/7773P22Wfnup3mzZvnq9zRo0fTuXNn4uLiqFevHscee2zm4JfVq1cDcPTRRwfWiY+Pp0WLFpnLYym/dWzUqFGWAS61a9fm22+/LdqKiohIuVdWAsQ0ILu5RBIjlhfUZGBGVFpL4F+F2GapNn/+fNavX8/06dOZPn16luWpqal5ChArV66cr3Lbtm1L9+7d87VOQeU08jivraNhiIuLyzZdg+5FRKSolZUAcT3eZNfRDvef/1fQDTvnNgAbItPK+7QlqampJCUlMWnSpCzLXn/9dd544w2eeuqpfAeAhdG0aVMAfvjhh8DE2fv27WPlypX5Dixr166d7ejn7Foi83o8hF1HERGRolJWAsRFQFczqxE1UKVDxHIJQVpaGq+//jp9+/alT58+WZY3bNiQl19+mZkzZ3LZZZcVW726d+9OfHw8jz/+OOecc05m0Pbss8+yfft2evXK36TgLVu2ZPv27Xz77be0a9cOgPXr1/PGG29kyVu1atU8TaUTdh1FRESKSlkZpPIqEAcMyUjw76wyCPj8EFPcSD7NnDmTnTt3csEFF2S7vGPHjoecNLuo1K9fn9tvv513332Xc845h0mTJjFq1ChGjhzJqaeemusI42iXX345VatW5aKLLuKxxx5j3LhxdOjQgaOOOipL3pNPPpl58+bxyCOPMH369BxvORh2HUVERIpKiW9BNLMRQC3+GIl8vpk18v+e6Jzb7pz73MxmAOPMLAn4CRgANAOuCbEuKZTzASupqakkJibSo0ePbJdXqFCBXr16kZqayubNmzPnKCwOKSkp1K9fnyeeeIIbb7yROnXqMGTIEMaOHZvvORDr1q3LG2+8wU033cStt95K8+bNGTduHMuXL2fhwoWBvI888ghDhgzhrrvuIi0tjQEDBtChQ4dstxtmHUVERIqKlfQO72a2Cmiaw+LmzrlVfr5EYAzQjz/uxXy3c25OEdSpNbBkyZIltG7dOts8GVORRPY1EylpdJyKSFnS7K+5T2m26v7i7c5TEibKXrp0KW3atAFo45xbmpd1SnwLonOuWR7z7cG7HV+Ot+QTERERkdyVlT6IIiIiIhISBYgiIiIiEqAAUUREREQCFCDmg5mlmJkDlsS6LiIiIiJFRQFiPjjnUpxzBrSJdV1EREREiooCRBEREREJUIAoIiIiIgElfh5EERERkeLUdlrbXPMsHrC4GGoSO2pBFBEREZEABYj5oFHMIiIiUh4oQMwHjWIWERGR8kABohTI1KlTMTO++uqr0Le9bNkyUlJSWLVqVejbzquxY8fy5ptvFnj9sN7D3Llz6dSpE1WqVKF27dr06dMn122uWLGCxMTEIvt8RESk7NMgFSlxli1bxr333kuXLl1o1qxZTOowduxY+vTpQ+/evQu0fhjv4e233+bCCy/kpJNO4v7772fHjh089thjdOrUiW+++Yb69etnu96NN95IxYoV2bt3b4HKFREp01Jq5p6neZOir0cJpwAxFvJycBaHlO2xrkGx2r17N1WrVo11NfLstttuo0WLFnz88cfEx8cDcP7552cGjA8//HCWdebMmcOcOXO49dZb+dvf/lbcVRYRkTJCl5glFAMHDqRatWqsW7eO3r17U61aNerXr8/NN99Menp6IO/06dM5+eSTqV69OjVq1KBt27Y89thjgHfpum/fvgB07doVM8PMWLBgQeb6s2fPpnPnzlStWpXq1avTq1cvli5dmm19VqxYwbnnnkv16tW56qqrAFi+fDmXXHIJhx12GImJiTRq1IjLL7+c7du9gNnM2L17N9OmTcssf+DAgQCsXr2a4cOHc/TRR1O5cmXq1q1L3759A5d9w3gPW7ZsYdmyZVx00UWZwSHA8ccfz7HHHsv06dOzfAb79+/n+uuv5/rrr6dly5Z5+dhERESypRZECU16ejrJycl06NCB8ePHM2/ePB5++GFatmzJddddB3h96q644gr+9Kc/8cADDwDw3Xff8fHHH3P99ddz5plnMmrUKB5//HHuuOMOjj32WIDM5xdeeIEBAwaQnJzMAw88wO+//86TTz6Zedk18nLugQMHSE5OplOnTowfP54qVaqwb98+kpOT2bt3LyNHjuSwww5j3bp1vP3222zbto2aNWvywgsvcO2119K+fXuGDBkCkBlwffnll3zyySdcfvnlNGrUiFWrVvHkk0/SpUsXli1bRpUqVUJ5DxmXhytXrpxlP1epUoWlS5fy66+/cthhh2WmT5gwga1bt3LXXXfx+uuvh/a5iohI+aMAMR/MLAW4J9b1KKn27NnDZZddxt133w3AsGHDOOmkk3j22WczA8RZs2ZRo0YN5syZQ1xcXJZttGjRgs6dO/P444/To0cPunTpkrls165djBo1imuvvZYpU6Zkpg8YMICjjz6asWPHBtL37t1L3759GTduXGbaokWLWLlyJTNmzKBPnz6Z6aNHj878u1+/fgwbNowWLVrQr1+/QP169eoVWA+8y76nnXYar732Gv379w/lPTRo0IBatWrx8ccfB8ravHkzy5YtA2DdunWZAeKvv/7KmDFjGD9+PDVq1MiyX0VERPJDl5jzQdPc5G7YsGGB1507d+bnn3/OfF2rVi12797N3Llz873tuXPnsm3bNq644go2bdqU+YiLi6NDhw588MEHWdbJCEwz1Kzp9f+cM2cOv//+e77rENmit3//fjZv3kyrVq2oVasWCxcuDO09VKhQgaFDh/L+++9z++23s3z5cr7++msuvfRS9u3bB0BaWlrmdjP6K1577bX5fk8iIiLRFCBKaBITE7OMrK1duzZbt27NfD18+HCOOuooevbsSaNGjfjzn//Mu+++m6ftL1++HIBu3bpRv379wOO9995jw4YNgfwVK1akUaNGgbTmzZtz00038cwzz1CvXj2Sk5OZNGlSZv/D3KSlpTF69GgaN25MQkIC9erVo379+mzbti1P28jPe7jvvvu45pprePDBBznqqKM45ZRTqFixItdccw0A1apVA+Czzz7jhRde4NFHH6VCBX2lRUSk8HSJWUKT3SXjaElJSSxatIg5c+Ywe/ZsZs+ezXPPPcfVV1/NtGnTDrnuwYMHAa8PX2TfuwwVKwYP54SEhGwDpocffpiBAwfyr3/9i/fee49Ro0Yxbtw4PvvssywBZbSRI0fy3HPPccMNN3DaaadRs2ZNzIzLL788s35hvYf4+HieeeYZ/v73v/Pjjz/SoEEDjjrqKK688koqVKhAq1atALj11lvp3LkzzZs3zxwss2nTJgDWr1/PmjVraNJEUzaIiEjeKUCUYhcfH8/555/P+eefz8GDBxk+fDhPP/00d999N61atcLMsl0vY6BIUlIS3bt3L1Qd2rZtS9u2bbnrrrv45JNPOOOMM3jqqacyp4bJqQ6vvvoqAwYMCEwxs2fPHrZt2xbIF+Z7aNCgAQ0aNAC8gUALFiygQ4cOmS2Ia9as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u1HXZ555JitWrOBf//oX7733Hs888wyPPvooTz31FNdee234FRcREYkhBYhSJF544QUAkpOTadq0KQA//PBDlnzff/899erVo2rVqiQmJlK5cuVsL+NGr9u0aVMOHjzIypUrAy2OP/30UyBf/fr1qV69Ounp6XTv3r1Q76lOnToMGjSIQYMGsWvXLs4880xSUlIUIBZCs7/OyjXPqvuzDjwSEZGipQAxH8wsBbgn1vUo6ebPn8+YMWNo3rw5V111FYmJiZxwwglMmzaN22+/nVq1agGwZMkS3nvvPfr16wdAXFwcycnJvPnmm6xZsyazH+J3333HnDlzAmUkJydz5513Mnny5MxBKgATJ04M5IuLi+OSSy7hpZdeYsmSJbRpE7yN9saNG6lfv36u72nz5s2ZA1zA61/ZqlUrfvnll7zvGJEYy0tADgrKRUQBYr4451KAFDNrDSyJcXVKhNmzZ/P9999z4MABfvvtN+bPn8/cuXNp2rQpM2fOJDExEYCHHnqInj17ctppp3HNNddkTnNTs2bNwJyF9957L++++y6dO3dm+PDhHDhwgIkTJ9K6detAn7+TTz6ZSy65hAkTJrB58+bMaW5+/PFHgMB9m++//34++OADOnTowODBgznuuOPYsmULCxcuZN68eWzZsiXX93ncccfRpUsXTj75ZOrUqcNXX33Fq6++yogRI0LakyIiIiWHAkQplNGjRwMQHx9PnTp1aNu2LRMmTGDQoEFUr149M1/37t159913ueeeexg9ejSVKlXirLPO4oEHHggMCmnXrh1z5szhpptuYvTo0TRq1Ih7772X9evXZxkU8vzzz3PYYYfx8ssv88Ybb9C9e3f++c9/cvTRR2cGpgANGjTgiy++4L777uP1119n8uTJ1K1bl9atW/PAAw/k6X2OGjWKmTNn8t5777F3716aNm3K3/72N2655ZbC7D4REZESyZxzsa5DqZPRgrhkyRJat26dbZ6ff/4ZgBYtWhRjzWTRokWceOKJvPjii1x11VWxrk6JF+vjVH0Qi1eYl5jzck/5MO73LpIfeTqnJF6Za562zZvkmievx/ekYfNzzfOXp7rlaVsFtXTp0owuVm2cc0vzso6muZFSKy0tLUvahAkTqFChAmeeeWYMaiQiIlI26BKzlFoPPvggX3/9NV27dqVixYrMnj2b2bNnM2TIEBo3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FRERESnjwhjF3CW3PGZmzrnc5krMyc14U+ZkuNh/ALwIbPf/vhoYQ/BezOc55/5dwHKzyBgBbWat8abvERERESlzinSQipnF490T+WbgqIJswznXLI/59gC3+A8RERERKaACB4h+8HcB3pQvW4G3nXP/85dVAUYANwCHASsKXVMRERERKRYFChDNrCGwAC84zJjzJc3MLgD2AS/hTTvzBTASeL3QNRURERGRYlHQFsS/A82BB4GP/L9HA1OAesBSoJ9z7sMwKikiIiIixaegAWIP4Dnn3O0ZCWb2K94dR2YBFzrnDoZQvxJFo5hFRESkPCjoRNkNgM+i0jJe/6MsBofgjWJ2zhnQJtZ1ERERESkqBQ0Q44A9UWkZr7cjIiIiIqVWYaa5aWZmJ0W8ruk/H2lm26IzO+cWFqIsERERESkmhQkQx/iPaJOjXhvenVXiClGWiIiIiBSTggaIg0KthYiIiIiUGAUKEJ1z08KuSGmgUcwiIiJSHhR0kEq5pFHMIiIiUh4oQBQRERGRAAWIIiIiIhKgAFFEREREAhQgioiIiEiAAkQRERERCVCAmA9mlmJmDlgS67qIiIiIFBUFiPmgaW5ERESkPFCAKCIiIiIBChBFREREJEABooiIiIgEKEAUERERkQAFiCIiIiISoABRRERERAIUIIqIiIhIgALEfNBE2SIiIlIeKEDMB02ULSIiIuWBAkQRERERCVCAKCIiIiIBChBFREREJEABooiIiIgEKEAUERERkQAFiCIiIiISoABRRERERAIUIIqIiIhIgALEfNCdVERERKQ8UICYD7qTioiIiJQHChBFREREJEABooiIiIgEKEAUERERkQAFiCIiIiISoABRRERERAIUIIqIiIhIgAJEEREREQlQgCgiIiIiAQoQRURERCRAAaKIiIiIBChAFBEREZEABYgiIiIiEqAAMR/MLMXMHLAk1nURERERKSoKEPPBOZfinDOgTazrIiIiIlJUFCCKiIiISIACRBEREREJUIAoIiIiIgEKEEVEREQkQAGiiIiIiAQoQBQRERGRAAWIIiIiIhKgAFFEREREAhQgioiIiEiAAkQRERERCVCAKCIiIiIBChBFREREJEABooiIiIgEKEAUERERkQAFiCIiIiISoABRRERERAIUIOaDmaWYmQOWxLouIiIiIkVFAWI+OOdSnHMGtIl1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\n",
      "text/plain": [
       "<Figure size 720x480 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "x_axis = np.arange(len(df_pollution['algorithm']))\n",
    "\n",
    "width = 0.1\n",
    "\n",
    "plt.figure(dpi=120)\n",
    "\n",
    "plt.bar(x_axis, df_pollution['runtime/feat.'], width=width, label='Air Pollution')\n",
    "plt.bar(x_axis + width, df_interstate['runtime/feat.'], width=width, label='Insterstate94')\n",
    "plt.bar(x_axis + (2*width), df_dodgers['runtime/feat.'], width=width, label='Dodgers')\n",
    "plt.bar(x_axis + (3*width), df_energy['runtime/feat.'], width=width, label='Energy')\n",
    "plt.bar(x_axis + (4*width), df_tetouan['runtime/feat.'], width=width, label='Tetouan')\n",
    "\n",
    "plt.xticks(x_axis, df_pollution['algorithm'])\n",
    "plt.ylabel('Runtime / Feature')\n",
    "plt.yscale('log')\n",
    "plt.legend();"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "1bf3712c-cdec-42c4-81c9-c76270baf702",
   "metadata": {
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAoQAAAGgCAYAAAAzYnbyAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjUuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8qNh9FAAAACXBIWXMAABJ0AAASdAHeZh94AABSRklEQVR4nO3dd3gU1f7H8feXUAKETkAB6WKhWECwgAIXRMSCCopKVRTkIpafXcQo94IFFEVQuXoFMcpFsKBIvYi9I1cBC1IVUZoUERDC+f0xk7jZbJINmSQb9vN6nn02e+bMnLOzs7PfnDnnjDnnEBEREZH4VaKoKyAiIiIiRUsBoYiIiEicU0AoIiIiEucUEIqIiIjEOQWEIiIiInFOAaGIiIhInFNAKCIiIhLnFBCKiIiIxDkFhCIiIiJxTgGhiIiISJwrWdQVKC7MrBJwFvAj8GcRV0dEREQkJ6WBo4B3nHM7csusgDB6ZwGvF3UlRERERPLgQmBWbpkUEEbvR4DXXnuNxo0bF3VdRERERLL1ww8/0L17d/Djl9woIIzenwCNGzemadOmRV0XERERkWhE1c1Ng0pERERE4pwCQhEREZE4p4BQREREJM4pIBQRERGJcwoIRUREROKcAkIRERGROKeAUERERCTOKSAUERERiXMxHRCaWZKZ3Wdmc81sm5k5M+ufh/Urm9kkM9tsZrvN7G0zO7kAqywiIiJS7MR0QAhUB0YAxwH/y8uKZlYCmA1cATwB3AbUABab2dEB11NERESk2Ir1W9dtBI50zv1iZq2Az/Kwbg/gdKCnc24GgJlNB74H7sMLFEVERETiXky3EDrn9jnnfjnE1XsAvwKvhGxvMzAduNDMygRQRREREZFiL6YDwnw6CVjinDsYlv4pUA5oUvhVEhEREYk9sX7JOD+OBN6NkL7Rf64FfB1pRTOrASSHJTcKrmoiIiIiseNwDgjLAvsipO8NWZ6dIcC9gdcoCvXvmJ1rnrWJ0XV/bN6gbq55po8+kGueRe0n5Jrn7091jKpOIiIiEnsO54BwDxCpn2BiyPLsTAReDktrBLweQL1EREREYsrhHBBuxLtsHC497efsVnTObQI2haaZWXA1ExEREYkhh/OgkqXAyf58hKHaAH/gTT8jIiIiEvcOi4DQzI40s2PNrFRI8gygJnBxSL7qQE/gDedcpP6FIiIiInEn5i8Zm9lQoDLeqGCA882sjv/3eOfcDmA00A9oAKz1l80APgaeM7PjgS14g0USKKIBIyIiIiKxKOYDQuAWoF7I64v5q9XvBWBHpJWcc2lmdi7wMDAMb1TxZ0B/59x3BVddERERkeIl5gNC51z9KPL0B/pHSP8NGOg/RERERCSCw6IPoYiIiIgcOgWEIiIiInFOAaGIiIhInFNAKCIiIhLnFBCKiIiIxDkFhCIiIiJxTgGhiIiISJxTQCgiIiIS5xQQioiIiMQ5BYQiIiIicU4BoYiIiEicU0AoIiIiEucUEIqIiIjEOQWEIiIiInFOAaGIiIhInFNAKCIiIhLnFBCKiIiIxDkFhCIiIiJxTgGhiIiISJxTQCgiIiIS5xQQioiIiMQ5BYQiIiIicU4BoYiIiEicU0AoIiIiEucUEIqIiIjEOQWEIiIiInFOAaGIiIhInFNAKCIiIhLnFBCKiIiIxDkFhCIiIiJxTgGhiIiISJxTQCgiIiIS5xQQioiIiMQ5BYQiIiIicU4BoYiIiEicU0AoIiIiEucUEIqIiIjEOQWEIiIiInFOAaGIiIhInFNAKCIiIhLnFBCKiIiIxDkFhCIiIiJxTgGhiIiISJxTQCgiIiIS5xQQioi
Download .txt
gitextract_kz0ipva0/

├── .git-blame-ignore-revs
├── .gitattributes
├── .gitignore
├── .gitlab-ci.yml
├── BUILD.md
├── CHANGELOG.md
├── Dockerfile
├── INSTALL.md
├── LICENSE.txt
├── README.md
├── VERSION
├── benchmarks/
│   ├── Dockerfile
│   ├── README.md
│   ├── benchmark_plots.ipynb
│   ├── benchmarks/
│   │   ├── __init__.py
│   │   ├── benchmarks.py
│   │   ├── demo/
│   │   │   ├── __init__.py
│   │   │   ├── add_original_columns.py
│   │   │   ├── benchmark.py
│   │   │   ├── cesiumml_builder.py
│   │   │   ├── ft_time_series_builder.py
│   │   │   ├── kats_builder.py
│   │   │   ├── load.py
│   │   │   ├── print_time_taken.py
│   │   │   ├── remove_target_column.py
│   │   │   ├── rolling.py
│   │   │   ├── tsfel_builder.py
│   │   │   ├── tsfel_builder_roll.py
│   │   │   ├── tsflex_aggregations.py
│   │   │   ├── tsflex_builder.py
│   │   │   └── tsfresh_builder.py
│   │   ├── drivers/
│   │   │   ├── __init__.py
│   │   │   ├── drive_getml.py
│   │   │   └── drive_wrappers.py
│   │   ├── pyproject.toml
│   │   ├── run_all.py
│   │   └── utils.py
│   ├── docker-compose.yml
│   ├── paper_data.txt
│   ├── requirements.for-fbprophet.txt
│   ├── requirements.for-kats.txt
│   ├── requirements.for-pystan.txt
│   ├── requirements.txt
│   ├── run_benchmarks.py
│   └── run_benchmarks.sh
├── demo-notebooks/
│   ├── Dockerfile
│   ├── README.md
│   ├── adventure_works.ipynb
│   ├── docker-compose.yml
│   ├── formula1.ipynb
│   ├── interstate94.ipynb
│   ├── loans.ipynb
│   ├── requirements.txt
│   ├── robot.ipynb
│   └── seznam.ipynb
├── docker-bake.hcl
├── mise.toml
├── runtime/
│   ├── Dockerfile
│   ├── README.md
│   ├── docker-compose.yml
│   └── entrypoint.sh
├── scripts/
│   └── build
└── src/
    ├── getml-app/
    │   ├── README.md
    │   ├── format.sh
    │   ├── setup.sh
    │   └── src/
    │       ├── changeToResourceDir.go
    │       ├── commands/
    │       │   ├── Parse.go
    │       │   ├── addHomeDirFlag.go
    │       │   ├── loadConfig.go
    │       │   ├── makeInstallCommand.go
    │       │   ├── makeRunCommand.go
    │       │   ├── makeStopCommand.go
    │       │   ├── makeUninstallCommand.go
    │       │   ├── parseHomeDirFlag.go
    │       │   └── printHelpMenu.go
    │       ├── config/
    │       │   ├── CommandLine.go
    │       │   ├── Config.go
    │       │   ├── Load.go
    │       │   ├── MonitorConfig.go
    │       │   └── parseHomeDirFlag.go
    │       ├── createConnectionToEngine.go
    │       ├── data/
    │       │   ├── Projects.go
    │       │   └── StandardVariables.go
    │       ├── go.mod
    │       ├── install/
    │       │   ├── All.go
    │       │   ├── FileExists.go
    │       │   ├── GetBinDir.go
    │       │   ├── GetConfigPath.go
    │       │   ├── GetHomeDir.go
    │       │   ├── GetMainDir.go
    │       │   ├── UsrLocal.go
    │       │   ├── copyDir.go
    │       │   ├── copyFile.go
    │       │   ├── copyResources.go
    │       │   └── filesExists.go
    │       ├── main.go
    │       ├── makePackageName.go
    │       ├── printStartMessage.go
    │       ├── stopExistingProcess.go
    │       ├── tcp/
    │       │   ├── MainHandler.go
    │       │   ├── Server.go
    │       │   ├── basicCommand.go
    │       │   ├── cmd.go
    │       │   ├── command.go
    │       │   ├── createConnectionToEngine.go
    │       │   ├── isAlive.go
    │       │   ├── loadPipelineFromDisc.go
    │       │   ├── logger.go
    │       │   ├── makeUniqueProjectName.go
    │       │   ├── marshalCommand.go
    │       │   ├── portIsOccupied.go
    │       │   ├── progressLogger.go
    │       │   ├── recvBytes.go
    │       │   ├── recvCmd.go
    │       │   ├── recvString.go
    │       │   ├── sendBytes.go
    │       │   ├── sendCommand.go
    │       │   ├── sendString.go
    │       │   └── startProcess.go
    │       └── uninstall.go
    ├── package-build-imports/
    │   ├── config.json
    │   ├── environment.json
    │   ├── jwks.pub.json
    │   └── tests/
    │       ├── test1/
    │       │   ├── PERIPHERAL.CSV
    │       │   └── POPULATION.CSV
    │       └── test2/
    │           ├── PERIPHERAL.CSV
    │           └── POPULATION.CSV
    └── python-api/
        ├── LICENSE
        ├── README.md
        ├── getml/
        │   ├── __init__.py
        │   ├── communication.py
        │   ├── constants.py
        │   ├── cross_validation.py
        │   ├── data/
        │   │   ├── __init__.py
        │   │   ├── _io/
        │   │   │   ├── arrow.py
        │   │   │   ├── csv.py
        │   │   │   └── parquet.py
        │   │   ├── access.py
        │   │   ├── columns/
        │   │   │   ├── __init__.py
        │   │   │   ├── aggregation.py
        │   │   │   ├── collect_footer_data.py
        │   │   │   ├── column.py
        │   │   │   ├── columns.py
        │   │   │   ├── constants.py
        │   │   │   ├── format.py
        │   │   │   ├── from_value.py
        │   │   │   ├── get_scalar.py
        │   │   │   ├── last_change.py
        │   │   │   ├── last_change_from_col.py
        │   │   │   ├── length.py
        │   │   │   ├── length_property.py
        │   │   │   ├── make_iter.py
        │   │   │   ├── parse.py
        │   │   │   ├── random.py
        │   │   │   ├── repr.py
        │   │   │   ├── repr_html.py
        │   │   │   ├── subroles.py
        │   │   │   ├── to_arrow.py
        │   │   │   ├── to_numpy.py
        │   │   │   ├── unique.py
        │   │   │   └── unit.py
        │   │   ├── concat.py
        │   │   ├── container.py
        │   │   ├── data_frame.py
        │   │   ├── data_model.py
        │   │   ├── diagram.py
        │   │   ├── helpers.py
        │   │   ├── helpers2.py
        │   │   ├── load_container.py
        │   │   ├── placeholder.py
        │   │   ├── relationship.py
        │   │   ├── roles/
        │   │   │   ├── __init__.py
        │   │   │   ├── container.py
        │   │   │   ├── roles.py
        │   │   │   ├── sets.py
        │   │   │   └── types.py
        │   │   ├── split/
        │   │   │   ├── __init__.py
        │   │   │   ├── concat.py
        │   │   │   ├── random.py
        │   │   │   └── time.py
        │   │   ├── staging.py
        │   │   ├── star_schema.py
        │   │   ├── subroles/
        │   │   │   ├── __init__.py
        │   │   │   ├── exclude.py
        │   │   │   ├── include.py
        │   │   │   ├── only.py
        │   │   │   ├── sets.py
        │   │   │   └── types.py
        │   │   ├── subset.py
        │   │   ├── time.py
        │   │   ├── time_series.py
        │   │   └── view.py
        │   ├── database/
        │   │   ├── __init__.py
        │   │   ├── connect_bigquery.py
        │   │   ├── connect_duckdb.py
        │   │   ├── connect_greenplum.py
        │   │   ├── connect_hana.py
        │   │   ├── connect_mariadb.py
        │   │   ├── connect_mysql.py
        │   │   ├── connect_odbc.py
        │   │   ├── connect_postgres.py
        │   │   ├── connect_sqlite3.py
        │   │   ├── connection.py
        │   │   ├── copy_table.py
        │   │   ├── drop_table.py
        │   │   ├── exceptions.py
        │   │   ├── execute.py
        │   │   ├── get.py
        │   │   ├── get_colnames.py
        │   │   ├── helpers.py
        │   │   ├── list_connections.py
        │   │   ├── list_tables.py
        │   │   ├── read_csv.py
        │   │   ├── read_s3.py
        │   │   ├── sniff_csv.py
        │   │   └── sniff_s3.py
        │   ├── datasets/
        │   │   ├── __init__.py
        │   │   ├── base.py
        │   │   └── samples_generator.py
        │   ├── engine/
        │   │   ├── __init__.py
        │   │   ├── _launch.py
        │   │   └── helpers.py
        │   ├── events/
        │   │   ├── __init__.py
        │   │   ├── dispatchers.py
        │   │   ├── emitters.py
        │   │   ├── handlers.py
        │   │   ├── parsers.py
        │   │   ├── regex.py
        │   │   └── types.py
        │   ├── exceptions.py
        │   ├── feature_learning/
        │   │   ├── __init__.py
        │   │   ├── aggregations/
        │   │   │   ├── __init__.py
        │   │   │   ├── aggregations.py
        │   │   │   ├── sets.py
        │   │   │   └── types.py
        │   │   ├── fastboost.py
        │   │   ├── fastprop.py
        │   │   ├── feature_learner.py
        │   │   ├── loss_functions.py
        │   │   ├── multirel.py
        │   │   ├── relboost.py
        │   │   ├── relmt.py
        │   │   └── validation.py
        │   ├── helpers.py
        │   ├── hyperopt/
        │   │   ├── __init__.py
        │   │   ├── burn_in.py
        │   │   ├── helpers.py
        │   │   ├── hyperopt.py
        │   │   ├── kernels.py
        │   │   ├── load_hyperopt.py
        │   │   ├── optimization.py
        │   │   ├── tuning.py
        │   │   └── validation.py
        │   ├── log.py
        │   ├── pipeline/
        │   │   ├── __init__.py
        │   │   ├── column.py
        │   │   ├── columns.py
        │   │   ├── dialect.py
        │   │   ├── feature.py
        │   │   ├── features.py
        │   │   ├── helpers.py
        │   │   ├── helpers2.py
        │   │   ├── issues.py
        │   │   ├── metadata.py
        │   │   ├── metrics.py
        │   │   ├── pipeline.py
        │   │   ├── plots.py
        │   │   ├── score.py
        │   │   ├── scores_container.py
        │   │   ├── sql_code.py
        │   │   ├── sql_string.py
        │   │   ├── table.py
        │   │   ├── tables.py
        │   │   └── tags.py
        │   ├── predictors/
        │   │   ├── __init__.py
        │   │   ├── linear_regression.py
        │   │   ├── logistic_regression.py
        │   │   ├── predictor.py
        │   │   ├── scale_gbm_classifier.py
        │   │   ├── scale_gbm_regressor.py
        │   │   ├── xgboost_classifier.py
        │   │   └── xgboost_regressor.py
        │   ├── preprocessors/
        │   │   ├── __init__.py
        │   │   ├── category_trimmer.py
        │   │   ├── email_domain.py
        │   │   ├── imputation.py
        │   │   ├── mapping.py
        │   │   ├── preprocessor.py
        │   │   ├── seasonal.py
        │   │   ├── substring.py
        │   │   ├── text_field_splitter.py
        │   │   └── validate.py
        │   ├── project/
        │   │   ├── __init__.py
        │   │   ├── attrs.py
        │   │   └── containers/
        │   │       ├── __init__.py
        │   │       ├── data_frames.py
        │   │       ├── hyperopts.py
        │   │       └── pipelines.py
        │   ├── spark.py
        │   ├── sqlite3/
        │   │   ├── __init__.py
        │   │   ├── connect.py
        │   │   ├── contains.py
        │   │   ├── count_above_mean.py
        │   │   ├── count_below_mean.py
        │   │   ├── count_distinct_over_count.py
        │   │   ├── email_domain.py
        │   │   ├── ewma.py
        │   │   ├── ewma_trend.py
        │   │   ├── execute.py
        │   │   ├── first.py
        │   │   ├── get_word.py
        │   │   ├── helpers.py
        │   │   ├── kurtosis.py
        │   │   ├── last.py
        │   │   ├── median.py
        │   │   ├── mode.py
        │   │   ├── num_max.py
        │   │   ├── num_min.py
        │   │   ├── num_words.py
        │   │   ├── quantiles.py
        │   │   ├── read_csv.py
        │   │   ├── read_list.py
        │   │   ├── read_pandas.py
        │   │   ├── skew.py
        │   │   ├── sniff_csv.py
        │   │   ├── sniff_pandas.py
        │   │   ├── split_text_field.py
        │   │   ├── stddev.py
        │   │   ├── time_since_first_maximum.py
        │   │   ├── time_since_first_minimum.py
        │   │   ├── time_since_last_maximum.py
        │   │   ├── time_since_last_minimum.py
        │   │   ├── to_list.py
        │   │   ├── to_pandas.py
        │   │   ├── trend.py
        │   │   ├── var.py
        │   │   └── variation_coefficient.py
        │   ├── utilities/
        │   │   ├── __init__.py
        │   │   ├── formatting/
        │   │   │   ├── __init__.py
        │   │   │   ├── cell_formatter.py
        │   │   │   ├── column_formatter.py
        │   │   │   ├── data_frame_formatter.py
        │   │   │   ├── ellipsis.py
        │   │   │   ├── formatter.py
        │   │   │   ├── helpers.py
        │   │   │   ├── signature_formatter.py
        │   │   │   └── view_formatter.py
        │   │   ├── progress.py
        │   │   └── templates/
        │   │       ├── __init__.py
        │   │       ├── column.jinja2
        │   │       ├── container.jinja2
        │   │       └── data_frame.jinja2
        │   └── version.py
        ├── hatch_build.py
        ├── pyproject.toml
        └── tests/
            ├── __init__.py
            ├── conftest.py
            ├── data/
            │   ├── __init__.py
            │   ├── conftest.py
            │   ├── test_arrow_type_casts.py
            │   ├── test_columns.py
            │   ├── test_concat.py
            │   ├── test_data_frame.py
            │   ├── test_data_frames.py
            │   ├── test_from_query.py
            │   ├── test_io_read.py
            │   ├── test_io_stream.py
            │   ├── test_io_write.py
            │   ├── test_save_and_load.py
            │   └── test_subsetting.py
            ├── datasets/
            │   ├── __init__.py
            │   └── test_base.py
            ├── engine/
            │   ├── test_launch.py
            │   ├── test_set_project.py
            │   └── test_shutdown.py
            ├── pipeline/
            │   ├── __init__.py
            │   ├── test_adventure_works.py
            │   ├── test_interstate94.py
            │   ├── test_loans.py
            │   ├── test_pipelines_save_load.py
            │   └── test_robot.py
            ├── project/
            │   └── test_project_save_load.py
            └── unit/
                ├── __init__.py
                ├── conftest.py
                ├── data/
                │   ├── test_arrow_schema_processors.py
                │   ├── test_data_frame_init.py
                │   └── test_subsetting.py
                ├── test_events.py
                ├── test_exceptions.py
                ├── test_import_all.py
                ├── test_locate.py
                └── test_progress_bar.py
Download .txt
SYMBOL INDEX (1806 symbols across 285 files)

FILE: benchmarks/benchmarks/benchmarks.py
  function _load_csv (line 19) | def _load_csv(fname: str, url: str) -> pd.DataFrame:
  function _zero_padding (line 25) | def _zero_padding(date_time: str) -> str:
  function benchmark_air_pollution (line 37) | def benchmark_air_pollution(
  function benchmark_dodgers (line 89) | def benchmark_dodgers(
  function benchmark_energy (line 147) | def benchmark_energy(benchmark_drivers: Sequence[Callable], runs: int = ...
  function benchmark_interstate94 (line 202) | def benchmark_interstate94(benchmark_drivers: Sequence[Callable], runs=1...
  function benchmark_tetuan (line 246) | def benchmark_tetuan(benchmark_drivers: Sequence[Callable], runs: int = ...

FILE: benchmarks/benchmarks/demo/add_original_columns.py
  function _add_original_columns (line 4) | def _add_original_columns(original_df, df_selected, cutoff=0):

FILE: benchmarks/benchmarks/demo/benchmark.py
  class BenchmarkData (line 15) | class BenchmarkData:
  class Row (line 24) | class Row:
    method to_list (line 31) | def to_list(
  function _make_row (line 50) | def _make_row(data: BenchmarkData) -> Row:
  class Benchmark (line 62) | class Benchmark:
    method __init__ (line 63) | def __init__(self, ds_name: str) -> None:
    method __call__ (line 68) | def __call__(self, lib_name: str) -> Generator[None, None, None]:
    method __getattr__ (line 72) | def __getattr__(self, lib_name) -> BenchmarkData:
    method __repr__ (line 78) | def __repr__(self) -> str:
    method _benchmark_runtime (line 107) | def _benchmark_runtime(self, lib_name: str) -> Generator[Benchmark, No...
    method benchmark (line 115) | def benchmark(self, lib_name: str) -> Generator[Benchmark, None, None]:
    method runtimes (line 124) | def runtimes(self) -> Dict[str, List]:
    method scores (line 128) | def scores(self) -> Dict[str, List]:
    method write_scores (line 131) | def write_scores(self, lib_name: str, pipe: Pipeline, num_features: in...

FILE: benchmarks/benchmarks/demo/cesiumml_builder.py
  class _ChunkMaker (line 24) | class _ChunkMaker(NamedTuple):
    method make_chunk (line 35) | def make_chunk(self, current_id: str, now: pd.Timedelta) -> pd.DataFrame:
  function _roll_data_frame (line 54) | def _roll_data_frame(
  function _aggregate_chunk (line 77) | def _aggregate_chunk(
  function _aggregate_chunks (line 101) | def _aggregate_chunks(
  class CesiumMLBuilder (line 116) | class CesiumMLBuilder:
    method __init__ (line 142) | def __init__(
    method _extract_features (line 171) | def _extract_features(self, data_frame):
    method _select_features (line 185) | def _select_features(self, data_frame, target):
    method fit (line 207) | def fit(self, data_frame):
    method runtime (line 230) | def runtime(self):
    method transform (line 234) | def transform(self, data_frame):

FILE: benchmarks/benchmarks/demo/ft_time_series_builder.py
  class _ChunkMaker (line 17) | class _ChunkMaker:
    method __init__ (line 22) | def __init__(self, data_frame, id_col, time_col, horizon, memory):
    method make_chunk (line 29) | def make_chunk(self, current_id, now, index):
  function _make_entity_set (line 50) | def _make_entity_set(data_frame, rolled, time_stamp):
  function _roll_data_frame (line 74) | def _roll_data_frame(data_frame, column_id, time_stamp, horizon, memory):
  class FTTimeSeriesBuilder (line 94) | class FTTimeSeriesBuilder:
    method __init__ (line 116) | def __init__(
    method _extract_features (line 144) | def _extract_features(self, data_frame):
    method _select_features (line 177) | def _select_features(self, data_frame, target):
    method fit (line 198) | def fit(self, data_frame):
    method runtime (line 221) | def runtime(self):
    method transform (line 225) | def transform(self, data_frame):

FILE: benchmarks/benchmarks/demo/kats_builder.py
  function disable_logging (line 30) | def disable_logging(highest_level=logging.CRITICAL):
  class _ChunkMaker (line 44) | class _ChunkMaker(NamedTuple):
    method make_chunk (line 56) | def make_chunk(self, current_id: str, now: pd.Timedelta) -> pd.DataFrame:
  function _flatten_aggs (line 77) | def _flatten_aggs(aggs: KATSAggs, domains: Optional[List[str]] = None) -...
  function _get_aggs_by_domain (line 82) | def _get_aggs_by_domain(aggs: KATSAggs, domain: str) -> KATSAggs:
  function _roll_data_frame (line 89) | def _roll_data_frame(
  function _aggregate_chunk (line 115) | def _aggregate_chunk(
  function _aggregate_chunks (line 150) | def _aggregate_chunks(
  class KATSBuilder (line 169) | class KATSBuilder:
    method __init__ (line 224) | def __init__(
    method _extract_features (line 254) | def _extract_features(self, data_frame: pd.DataFrame) -> pd.DataFrame:
    method _select_features (line 276) | def _select_features(
    method fit (line 294) | def fit(self, data_frame: pd.DataFrame) -> pd.DataFrame:
    method runtime (line 322) | def runtime(self) -> Union[None, datetime.timedelta]:
    method transform (line 326) | def transform(self, data_frame: pd.DataFrame) -> pd.DataFrame:

FILE: benchmarks/benchmarks/demo/load.py
  function load_or_query (line 6) | def load_or_query(conn, name, **kwargs):
  function load_or_retrieve (line 27) | def load_or_retrieve(csv_file, name=None, **kwargs):

FILE: benchmarks/benchmarks/demo/print_time_taken.py
  function _print_time_taken (line 1) | def _print_time_taken(begin, end):

FILE: benchmarks/benchmarks/demo/remove_target_column.py
  function _remove_target_column (line 5) | def _remove_target_column(data_frame: pd.DataFrame, target: str) -> pd.D...

FILE: benchmarks/benchmarks/demo/rolling.py
  function _is_int (line 17) | def _is_int(val: object) -> TypeGuard[int]:
  function _is_timedelta (line 21) | def _is_timedelta(val: object) -> TypeGuard[pd.Timedelta]:
  class _ChunkMaker (line 25) | class _ChunkMaker(NamedTuple):
    method make_chunk (line 35) | def make_chunk(self, now: IndexT) -> pd.DataFrame:
  function _roll_data_frame (line 65) | def _roll_data_frame(
  function _roll_strided (line 106) | def _roll_strided(arr: np.ndarray, horizon: int, memory: int) -> np.ndar...

FILE: benchmarks/benchmarks/demo/tsfel_builder.py
  class TSFELAgg (line 22) | class TSFELAgg(TypedDict):
  function _aggregate_chunk (line 41) | def _aggregate_chunk(
  function _aggregate_chunks (line 65) | def _aggregate_chunks(
  function _flatten_aggs (line 83) | def _flatten_aggs(
  function _infer_required_obs (line 99) | def _infer_required_obs(aggs: TSFELAggs) -> int:
  class TSFELBuilder (line 116) | class TSFELBuilder:
    method __init__ (line 148) | def __init__(
    method _extract_features (line 178) | def _extract_features(self, data_frame: pd.DataFrame) -> pd.DataFrame:
    method _select_features (line 193) | def _select_features(
    method fit (line 208) | def fit(self, data_frame: pd.DataFrame) -> pd.DataFrame:
    method runtime (line 233) | def runtime(self) -> Union[None, datetime.timedelta]:
    method transform (line 237) | def transform(self, data_frame):

FILE: benchmarks/benchmarks/demo/tsfel_builder_roll.py
  class TSFELAgg (line 22) | class TSFELAgg(TypedDict):
  function _flatten_aggs (line 41) | def _flatten_aggs(
  function _infer_required_obs (line 57) | def _infer_required_obs(aggs: TSFELAggs) -> int:
  function _aggregate_chunk (line 74) | def _aggregate_chunk(
  function _aggregate_chunks (line 102) | def _aggregate_chunks(
  class TSFELBuilder (line 117) | class TSFELBuilder:
    method __init__ (line 143) | def __init__(
    method _extract_features (line 171) | def _extract_features(self, data_frame: pd.DataFrame) -> pd.DataFrame:
    method _select_features (line 189) | def _select_features(
    method fit (line 213) | def fit(self, data_frame: pd.DataFrame) -> pd.DataFrame:
    method runtime (line 237) | def runtime(self) -> Union[None, datetime.timedelta]:
    method transform (line 241) | def transform(self, data_frame: pd.DataFrame) -> pd.DataFrame:

FILE: benchmarks/benchmarks/demo/tsflex_aggregations.py
  function _avg (line 14) | def _avg(arr) -> float:
  function _count_above_mean (line 20) | def _count_above_mean(arr) -> float:
  function _count_below_mean (line 34) | def _count_below_mean(arr) -> float:
  function _count_distinct (line 48) | def _count_distinct(arr) -> float:
  function _count_distinct_over_count (line 52) | def _count_distinct_over_count(arr) -> float:
  function _count_minus_count_distinct (line 59) | def _count_minus_count_distinct(arr) -> float:
  function _is_earlier (line 66) | def _is_earlier(tup1, tup2):
  function _first (line 72) | def _first(arr: pd.Series) -> float:
  function _kurtosis (line 78) | def _kurtosis(arr) -> float:
  function _last (line 90) | def _last(arr: pd.Series) -> float:
  function _make_tuples (line 96) | def _make_tuples(arr, descending=False) -> List[Tuple[float, float]]:
  function _max (line 104) | def _max(arr) -> float:
  function _median (line 110) | def _median(arr) -> float:
  function _min (line 116) | def _min(arr) -> float:
  function _mode (line 122) | def _mode(arr) -> float:
  function _num_max (line 132) | def _num_max(arr) -> float:
  function _num_min (line 140) | def _num_min(arr) -> float:
  function _quantile (line 148) | def _quantile(arr, quantile) -> float:
  function _q1 (line 154) | def _q1(arr) -> float:
  function _q5 (line 158) | def _q5(arr) -> float:
  function _q10 (line 162) | def _q10(arr) -> float:
  function _q25 (line 166) | def _q25(arr) -> float:
  function _q75 (line 170) | def _q75(arr) -> float:
  function _q90 (line 174) | def _q90(arr) -> float:
  function _q95 (line 178) | def _q95(arr) -> float:
  function _q99 (line 182) | def _q99(arr) -> float:
  function _skew (line 186) | def _skew(arr) -> float:
  function _sum (line 198) | def _sum(arr) -> float:
  function _stddev (line 204) | def _stddev(arr) -> float:
  function _time_since_first_maximum (line 210) | def _time_since_first_maximum(arr) -> float:
  function _time_since_first_minimum (line 228) | def _time_since_first_minimum(arr) -> float:
  function _time_since_last_maximum (line 246) | def _time_since_last_maximum(arr) -> float:
  function _time_since_last_minimum (line 264) | def _time_since_last_minimum(arr) -> float:
  function _trend (line 282) | def _trend(arr) -> float:
  function _var (line 296) | def _var(arr) -> float:
  function _variation_coefficient (line 302) | def _variation_coefficient(arr) -> float:
  function _ewma (line 309) | def _ewma(arr, half_life: float) -> float:
  function _make_ewma_aggs (line 319) | def _make_ewma_aggs(freq: float) -> List[Callable[[Any], float]]:
  function make_fastprop_aggregations (line 365) | def make_fastprop_aggregations(frequency: float) -> List[Callable[[Any],...

FILE: benchmarks/benchmarks/demo/tsflex_builder.py
  function _wrap_aggregation (line 23) | def _wrap_aggregation(func) -> Callable:
  class TsflexBuilder (line 33) | class TsflexBuilder:
    method __init__ (line 60) | def __init__(
    method _extract_features (line 94) | def _extract_features(self, data_frame: pd.DataFrame) -> pd.DataFrame:
    method _select_features (line 118) | def _select_features(
    method fit (line 132) | def fit(
    method runtime (line 165) | def runtime(self) -> Union[None, datetime.timedelta]:
    method transform (line 169) | def transform(

FILE: benchmarks/benchmarks/demo/tsfresh_builder.py
  function _ts_to_float (line 20) | def _ts_to_float(col):
  class TSFreshBuilder (line 25) | class TSFreshBuilder:
    method __init__ (line 43) | def __init__(
    method _extract_features (line 68) | def _extract_features(self, data_frame):
    method _remove_target_column (line 115) | def _remove_target_column(self, data_frame):
    method _select_features (line 125) | def _select_features(self, data_frame, target):
    method fit (line 147) | def fit(self, data_frame):
    method runtime (line 179) | def runtime(self):
    method transform (line 182) | def transform(self, data_frame):

FILE: benchmarks/benchmarks/drivers/drive_getml.py
  function drive_getml (line 15) | def drive_getml(

FILE: benchmarks/benchmarks/drivers/drive_wrappers.py
  function _drive_wrapper (line 22) | def _drive_wrapper(
  function drive_featuretools (line 95) | def drive_featuretools(
  function drive_kats (line 119) | def drive_kats(
  function drive_tsfresh (line 142) | def drive_tsfresh(
  function drive_tsfel (line 174) | def drive_tsfel(
  function drive_tsflex (line 197) | def drive_tsflex(

FILE: benchmarks/benchmarks/utils.py
  function project (line 9) | def project(name: str) -> Generator[None, None, None]:
  function log_run (line 19) | def log_run(

FILE: src/getml-app/src/changeToResourceDir.go
  function changeToResourceDir (line 18) | func changeToResourceDir(packageName string) {

FILE: src/getml-app/src/commands/Parse.go
  function Parse (line 18) | func Parse(packageName string) (*config.CommandLine, config.Config) {

FILE: src/getml-app/src/commands/addHomeDirFlag.go
  function addHomeDirFlag (line 16) | func addHomeDirFlag(cmd *flag.FlagSet, commandLine *config.CommandLine) {

FILE: src/getml-app/src/commands/loadConfig.go
  function loadConfig (line 15) | func loadConfig(forceInstall bool, homeDir string, packageName string) c...

FILE: src/getml-app/src/commands/makeInstallCommand.go
  function makeInstallCommand (line 15) | func makeInstallCommand(commandLine *config.CommandLine) *flag.FlagSet {

FILE: src/getml-app/src/commands/makeRunCommand.go
  function makeRunCommand (line 15) | func makeRunCommand(

FILE: src/getml-app/src/commands/makeStopCommand.go
  function makeStopCommand (line 15) | func makeStopCommand(conf *config.Config) *flag.FlagSet {

FILE: src/getml-app/src/commands/makeUninstallCommand.go
  function makeUninstallCommand (line 15) | func makeUninstallCommand(commandLine *config.CommandLine) *flag.FlagSet {

FILE: src/getml-app/src/commands/parseHomeDirFlag.go
  function parseHomeDirFlag (line 15) | func parseHomeDirFlag() string {

FILE: src/getml-app/src/commands/printHelpMenu.go
  function printHelpMenu (line 16) | func printHelpMenu(packageName string, runCmd *flag.FlagSet) bool {

FILE: src/getml-app/src/config/CommandLine.go
  type CommandLine (line 13) | type CommandLine struct
  function DefaultCommandLine (line 28) | func DefaultCommandLine() *CommandLine {

FILE: src/getml-app/src/config/Config.go
  type Config (line 22) | type Config struct
    method GetFromFile (line 35) | func (c *Config) GetFromFile(fname string) {
    method ToFlags (line 64) | func (c *Config) ToFlags() []string {
    method WriteToFile (line 96) | func (c *Config) WriteToFile() error {

FILE: src/getml-app/src/config/Load.go
  function Load (line 15) | func Load(fname string) Config {

FILE: src/getml-app/src/config/MonitorConfig.go
  type MonitorConfig (line 12) | type MonitorConfig struct

FILE: src/getml-app/src/config/parseHomeDirFlag.go
  function parseHomeDirFlag (line 15) | func parseHomeDirFlag() string {

FILE: src/getml-app/src/createConnectionToEngine.go
  function createConnectionToEngine (line 16) | func createConnectionToEngine(tcpPort int) (*net.TCPConn, error) {

FILE: src/getml-app/src/data/Projects.go
  type Projects (line 27) | type Projects struct
    method Add (line 67) | func (p *Projects) Add(project string, cmd *exec.Cmd, port int) {
    method GetStandardVars (line 88) | func (p Projects) GetStandardVars(project string) (*StandardVariables,...
    method IsRunning (line 106) | func (p Projects) IsRunning(project string) bool {
    method List (line 119) | func (p *Projects) List() []string {
    method PortTaken (line 138) | func (p *Projects) PortTaken(port int) bool {
    method deleteTempDir (line 164) | func (p *Projects) deleteTempDir(stdVars StandardVariables) error {
    method Stop (line 178) | func (p *Projects) Stop(project string) error {
    method KillAll (line 205) | func (p *Projects) KillAll() {
  function NewProjects (line 44) | func NewProjects(

FILE: src/getml-app/src/data/StandardVariables.go
  type StandardVariables (line 20) | type StandardVariables struct
  function NewStandardVariables (line 41) | func NewStandardVariables(

FILE: src/getml-app/src/install/All.go
  function All (line 11) | func All(homeDir string, version string) {

FILE: src/getml-app/src/install/FileExists.go
  function FileExists (line 13) | func FileExists(name string) bool {

FILE: src/getml-app/src/install/GetBinDir.go
  function GetBinDir (line 17) | func GetBinDir(homeDir string, packageName string) string {

FILE: src/getml-app/src/install/GetConfigPath.go
  function GetConfigPath (line 16) | func GetConfigPath(homeDir string, packageName string) string {

FILE: src/getml-app/src/install/GetHomeDir.go
  function GetHomeDir (line 15) | func GetHomeDir(homeDir string) string {

FILE: src/getml-app/src/install/GetMainDir.go
  function GetMainDir (line 17) | func GetMainDir(targetDir string, packageName string) string {

FILE: src/getml-app/src/install/UsrLocal.go
  constant UsrLocal (line 11) | UsrLocal = "/usr/local"
  constant UsrLocalBin (line 14) | UsrLocalBin = "/usr/local/bin"

FILE: src/getml-app/src/install/copyDir.go
  function copyDir (line 16) | func copyDir(sourceDir string, mainDir string, overwrite bool) error {

FILE: src/getml-app/src/install/copyFile.go
  function copyFile (line 16) | func copyFile(

FILE: src/getml-app/src/install/copyResources.go
  function copyResources (line 17) | func copyResources(targetDir string, version string) (string, error) {

FILE: src/getml-app/src/install/filesExists.go
  function filesExists (line 12) | func filesExists(filenames []string) bool {

FILE: src/getml-app/src/main.go
  function main (line 23) | func main() {

FILE: src/getml-app/src/makePackageName.go
  function makePackageName (line 15) | func makePackageName() string {

FILE: src/getml-app/src/printStartMessage.go
  function printStartMessage (line 10) | func printStartMessage(packageName string) {

FILE: src/getml-app/src/stopExistingProcess.go
  function stopExistingProcess (line 14) | func stopExistingProcess(tcpPort int) error {

FILE: src/getml-app/src/tcp/MainHandler.go
  function handleEngineExit (line 30) | func handleEngineExit(exitCode int) error {
  function handleName (line 34) | func handleName(nameByte []byte) (string, error) {
  type MainHandler (line 54) | type MainHandler struct
    method bundleProject (line 79) | func (m *MainHandler) bundleProject(name string, writer *zip.Writer) e...
    method extractBundle (line 102) | func (m *MainHandler) extractBundle(name string, r *zip.Reader, logger...
    method makeZipper (line 188) | func (m *MainHandler) makeZipper(name string, projectDirectory string,...
    method DeleteProject (line 230) | func (m *MainHandler) DeleteProject(nameByte []byte, c net.Conn) {
    method Exit (line 259) | func (m *MainHandler) Exit() {
    method findFreePort (line 267) | func (m *MainHandler) findFreePort() (int, error) {
    method IsAlive (line 287) | func (m *MainHandler) IsAlive(c net.Conn) {
    method GetStartMessage (line 294) | func (m *MainHandler) GetStartMessage(c net.Conn) {
    method listDirectories (line 310) | func (m *MainHandler) listDirectories(directory string) []string {
    method loadAllPipelines (line 333) | func (m *MainHandler) loadAllPipelines(
    method GetVersion (line 367) | func (m *MainHandler) GetVersion(c net.Conn) {
    method loadProjectBundle (line 374) | func (m *MainHandler) loadProjectBundle(c net.Conn, name string, data ...
    method LoadProject (line 399) | func (m *MainHandler) LoadProject(
    method LoadProjectBundle (line 447) | func (m *MainHandler) LoadProjectBundle(
    method ListAllProjects (line 489) | func (m *MainHandler) ListAllProjects(c net.Conn) {
    method ListRunningProjects (line 532) | func (m *MainHandler) ListRunningProjects(c net.Conn) {
    method RestartProject (line 558) | func (m *MainHandler) RestartProject(
    method BundleProject (line 584) | func (m *MainHandler) BundleProject(
    method setProject (line 635) | func (m *MainHandler) setProject(
    method SetProject (line 697) | func (m *MainHandler) SetProject(
    method SuspendProject (line 716) | func (m *MainHandler) SuspendProject(nameByte []byte, c net.Conn) {
    method ShutdownLocal (line 739) | func (m *MainHandler) ShutdownLocal() {
  function NewMainHandler (line 65) | func NewMainHandler(version string,

FILE: src/getml-app/src/tcp/Server.go
  type Server (line 21) | type Server struct
    method Launch (line 44) | func (s *Server) Launch() {
    method handleConnection (line 73) | func (s *Server) handleConnection(c net.Conn) {
  function NewServer (line 30) | func NewServer(

FILE: src/getml-app/src/tcp/basicCommand.go
  type basicCommand (line 12) | type basicCommand struct
    method send (line 18) | func (b basicCommand) send(conn *net.TCPConn) error {

FILE: src/getml-app/src/tcp/cmd.go
  type cmd (line 12) | type cmd struct

FILE: src/getml-app/src/tcp/command.go
  type command (line 12) | type command interface

FILE: src/getml-app/src/tcp/createConnectionToEngine.go
  function createConnectionToEngine (line 17) | func createConnectionToEngine(port int) (*net.TCPConn, error) {

FILE: src/getml-app/src/tcp/isAlive.go
  function isAlive (line 10) | func isAlive(port int) (bool, error) {

FILE: src/getml-app/src/tcp/loadPipelineFromDisc.go
  function loadPipelineFromDisc (line 14) | func loadPipelineFromDisc(name string, port int) error {

FILE: src/getml-app/src/tcp/logger.go
  type logger (line 14) | type logger struct
    method log (line 22) | func (l *logger) log(msg string) {
  function newLogger (line 18) | func newLogger(c net.Conn) *logger {

FILE: src/getml-app/src/tcp/makeUniqueProjectName.go
  function makeUniqueProjectName (line 17) | func makeUniqueProjectName(projectDirectory string, projectName string) ...

FILE: src/getml-app/src/tcp/marshalCommand.go
  function marshalCommand (line 13) | func marshalCommand(command *command) (string, error) {

FILE: src/getml-app/src/tcp/portIsOccupied.go
  function portIsOccupied (line 16) | func portIsOccupied(port int) bool {

FILE: src/getml-app/src/tcp/progressLogger.go
  type progressLogger (line 16) | type progressLogger struct
    method log (line 41) | func (l *progressLogger) log(msg string) {
    method increment (line 47) | func (l *progressLogger) increment() {
    method numRemaining (line 53) | func (l *progressLogger) numRemaining() int {
  function newProgressLogger (line 24) | func newProgressLogger(

FILE: src/getml-app/src/tcp/recvBytes.go
  function recvBytes (line 15) | func recvBytes(conn io.Reader) ([]byte, error) {

FILE: src/getml-app/src/tcp/recvCmd.go
  function recvCmd (line 15) | func recvCmd(c net.Conn) (cmd, error) {

FILE: src/getml-app/src/tcp/recvString.go
  function recvString (line 14) | func recvString(conn io.Reader) (string, error) {

FILE: src/getml-app/src/tcp/sendBytes.go
  function sendBytes (line 16) | func sendBytes(conn io.Writer, data []byte) error {

FILE: src/getml-app/src/tcp/sendCommand.go
  function sendCommand (line 14) | func sendCommand(command command, conn *net.TCPConn) error {

FILE: src/getml-app/src/tcp/sendString.go
  function sendString (line 16) | func sendString(conn io.Writer, str string) error {
  function SendString (line 30) | func SendString(conn io.Writer, str string) error {

FILE: src/getml-app/src/tcp/startProcess.go
  function startProcess (line 15) | func startProcess(fname string, workDir string, log bool, args []string)...

FILE: src/getml-app/src/uninstall.go
  function uninstall (line 10) | func uninstall(homeDir string, version string) {

FILE: src/python-api/getml/communication.py
  class LogStreamListener (line 58) | class LogStreamListener:
    method __init__ (line 63) | def __init__(
    method __enter__ (line 71) | def __enter__(self) -> LogStreamListener:
    method __exit__ (line 75) | def __exit__(
    method listen (line 87) | def listen(self, socket: socket.socket, exit_on: Callable[[str], bool]...
  function is_monitor_alive (line 159) | def is_monitor_alive() -> bool:
  function is_engine_alive (line 186) | def is_engine_alive() -> bool:
  class _GetmlEncoder (line 215) | class _GetmlEncoder(json.JSONEncoder):
    method default (line 218) | def default(self, obj):  # type: ignore
  function _make_error_msg (line 265) | def _make_error_msg() -> str:
  function recv_data (line 278) | def recv_data(sock: socket.socket, size: Union[numbers.Real, int]) -> by...
  function recv_float_matrix (line 323) | def recv_float_matrix(sock: socket.socket) -> np.ndarray:
  function recv_bytes (line 371) | def recv_bytes(sock: socket.socket) -> bytes:
  function recv_string (line 393) | def recv_string(sock: socket.socket) -> str:
  function recv_string_column (line 425) | def recv_string_column(sock: socket.socket) -> np.ndarray:
  class _Issue (line 460) | class _Issue(NamedTuple):
  function recv_issues (line 474) | def recv_issues(sock: socket.socket) -> List[_Issue]:
  function send (line 508) | def send(cmd: Dict[str, Any]) -> None:
  function send_and_get_socket (line 564) | def send_and_get_socket(
  function send_bytes (line 620) | def send_bytes(sock: socket.socket, data: bytes):
  function send_string (line 646) | def send_string(sock: socket.socket, string: str):
  function log (line 671) | def log(sock: socket.socket, extra: Optional[Dict[str, Any]] = None) -> ...
  function _delete_project (line 703) | def _delete_project(name: str):
  function _delete_project_with_retry (line 713) | def _delete_project_with_retry(name: str, retries: int, delay: float):
  function _get_project_name (line 741) | def _get_project_name() -> str:
  function _load_project (line 755) | def _load_project(bundle: Union[PathLike, str], name: Optional[str] = No...
  function _list_projects_impl (line 800) | def _list_projects_impl(running_only: bool) -> List[str]:
  function _monitor_url (line 834) | def _monitor_url() -> Optional[str]:
  function _check_version (line 847) | def _check_version():
  function _save_project (line 872) | def _save_project(
  function _project_url (line 926) | def _project_url() -> Optional[str]:
  function _set_project (line 934) | def _set_project(name: str, restart: bool = False):
  function _shutdown (line 979) | def _shutdown():
  function _suspend_project (line 1011) | def _suspend_project(name: str):

FILE: src/python-api/getml/cross_validation.py
  function cross_validation (line 24) | def cross_validation(

FILE: src/python-api/getml/data/_io/arrow.py
  class Processors (line 166) | class Processors:
    method __getitem__ (line 182) | def __getitem__(self, role: Role) -> List[Callable[[pa.Field], pa.Fiel...
  class ArrowSchemaFieldProcessorRegistry (line 186) | class ArrowSchemaFieldProcessorRegistry:
    method __init__ (line 197) | def __init__(self):
    method __call__ (line 200) | def __call__(
    method register (line 208) | def register(
    method retrieve (line 225) | def retrieve(self, role: Role) -> List[Callable[[pa.Field], pa.Field]]:
  function _create_arrow_metadata (line 271) | def _create_arrow_metadata(
  function _establish_arrow_stream (line 284) | def _establish_arrow_stream(
  function _is_numerical_type_arrow (line 310) | def _is_numerical_type_arrow(coltype: pa.DataType) -> bool:
  function _is_unsupported_type_arrow (line 320) | def _is_unsupported_type_arrow(coltype: pa.DataType) -> bool:
  function preprocess_timestamp_cast_to_microseconds (line 325) | def preprocess_timestamp_cast_to_microseconds(field: pa.Field) -> pa.Field:
  function preprocess_types_cast_to_string (line 338) | def preprocess_types_cast_to_string(field: pa.Field) -> pa.Field:
  function preprocess_unparameterized_type (line 349) | def preprocess_unparameterized_type(field: pa.Field) -> pa.Field:
  function preprocess_parameterized_type (line 364) | def preprocess_parameterized_type(field: pa.Field) -> pa.Field:
  function postprocess_timestamp_drop_timezone (line 381) | def postprocess_timestamp_drop_timezone(field: pa.Field) -> pa.Field:
  function postprocess_timestamp_cast_to_string (line 408) | def postprocess_timestamp_cast_to_string(field: pa.Field) -> pa.Field:
  function _process_arrow_schema (line 417) | def _process_arrow_schema(
  function postprocess_arrow_schema (line 432) | def postprocess_arrow_schema(schema: pa.Schema, roles: Roles) -> pa.Schema:
  function preprocess_arrow_schema (line 436) | def preprocess_arrow_schema(schema: pa.Schema, roles: Roles) -> pa.Schema:
  function sniff_schema (line 440) | def sniff_schema(schema: pa.Schema, colnames: Iterable[str] = ()) -> Roles:
  function to_arrow (line 477) | def to_arrow(df_or_view: Union[DataFrame, View]) -> pa.Table:
  function to_arrow_stream (line 483) | def to_arrow_stream(
  function to_arrow_batches (line 489) | def to_arrow_batches(
  function handle_int64_to_float64_exc (line 512) | def handle_int64_to_float64_exc(
  function handle_binary_to_string_exc (line 525) | def handle_binary_to_string_exc(
  function cast_arrow_batch (line 536) | def cast_arrow_batch(
  function read_arrow_batches (line 562) | def read_arrow_batches(

FILE: src/python-api/getml/data/_io/csv.py
  function sniff_csv (line 35) | def sniff_csv(
  function to_csv (line 99) | def to_csv(
  function _prepare_csv_options (line 139) | def _prepare_csv_options(
  function stream_csv (line 170) | def stream_csv(
  function read_csv (line 197) | def read_csv(

FILE: src/python-api/getml/data/_io/parquet.py
  function sniff_parquet (line 28) | def sniff_parquet(fnames: Iterable[str], colnames: Iterable[str]) -> Roles:
  function to_parquet (line 42) | def to_parquet(

FILE: src/python-api/getml/data/access.py
  function set_s3_access_key_id (line 21) | def set_s3_access_key_id(value: str):
  function set_s3_secret_access_key (line 64) | def set_s3_secret_access_key(value: str):

FILE: src/python-api/getml/data/columns/aggregation.py
  class Aggregation (line 18) | class Aggregation:
    method __init__ (line 29) | def __init__(self, alias, col, agg_type):
    method __repr__ (line 37) | def __repr__(self):
    method __str__ (line 42) | def __str__(self):
    method get (line 48) | def get(self):

FILE: src/python-api/getml/data/columns/collect_footer_data.py
  class Footer (line 16) | class Footer(NamedTuple):
  function _collect_footer_data (line 29) | def _collect_footer_data(self) -> Footer:

FILE: src/python-api/getml/data/columns/column.py
  class _Column (line 16) | class _Column:
    method __init__ (line 23) | def __init__(self):
    method _monitor_url (line 29) | def _monitor_url(self) -> Optional[str]:
    method name (line 50) | def name(self):
    method role (line 59) | def role(self):

FILE: src/python-api/getml/data/columns/columns.py
  class _View (line 76) | class _View(ABC):
  function _infer_column_name_recursive (line 83) | def _infer_column_name_recursive(cmd: Dict[str, Any]) -> str:
  function arange (line 112) | def arange(
  function rowid (line 162) | def rowid() -> FloatColumnView:
  function _make_slicing_operand (line 175) | def _make_slicing_operand(column, slc):
  function _value_to_cmd (line 190) | def _value_to_cmd(val: OperandType):
  class BooleanColumnView (line 218) | class BooleanColumnView(_View):
    method __init__ (line 296) | def __init__(
    method __and__ (line 316) | def __and__(self, other):
    method __eq__ (line 325) | def __eq__(self, other):
    method __invert__ (line 334) | def __invert__(self):
    method __or__ (line 339) | def __or__(self, other):
    method __ne__ (line 348) | def __ne__(self, other):
    method __xor__ (line 357) | def __xor__(self, other):
    method _parse_operand (line 366) | def _parse_operand(
    method is_false (line 388) | def is_false(self):
    method as_num (line 398) | def as_num(self):
  class StringColumn (line 410) | class StringColumn(_Column):
    method __init__ (line 479) | def __init__(self, name: str = "", role: str = "categorical", df_name:...
  class StringColumnView (line 498) | class StringColumnView(_View):
    method __init__ (line 568) | def __init__(
    method _parse_operand (line 585) | def _parse_operand(self, operand: Union[str, _Column, _View]):
  class FloatColumn (line 636) | class FloatColumn(_Column):
    method __init__ (line 708) | def __init__(self, name: str = "", role: str = "numerical", df_name: s...
  class FloatColumnView (line 731) | class FloatColumnView(_View):
    method __init__ (line 739) | def __init__(
    method _parse_operand (line 759) | def _parse_operand(self, operand: FloatOperandType):
  function _abs (line 816) | def _abs(self):
  function _acos (line 827) | def _acos(self):
  function _add (line 839) | def _add(self, other: OperandType):
  function _radd (line 846) | def _radd(self, other: OperandType):
  function _assert_equal (line 863) | def _assert_equal(self, alias: str = "new_column"):
  function _asin (line 883) | def _asin(self):
  function _atan (line 894) | def _atan(self):
  function _avg (line 905) | def _avg(self, alias: str = "new_column"):
  function _cbrt (line 921) | def _cbrt(self):
  function _ceil (line 933) | def _ceil(self):
  function _to_str (line 953) | def _to_str(col: Any):
  function _concat (line 963) | def _concat(self, other: Any):
  function _rconcat (line 971) | def _rconcat(self, other: Any):
  function _check_inferred_time_stamps (line 988) | def _check_inferred_time_stamps(self):
  function _contains (line 1015) | def _contains(self, other: StringOperandType):
  function _cos (line 1034) | def _cos(self):
  function _count (line 1045) | def _count(self, alias: str = "new_column"):
  function _count_categorical (line 1061) | def _count_categorical(self, alias: str = "new_column"):
  function _count_distinct (line 1077) | def _count_distinct(self, alias: str = "new_column"):
  function _day (line 1093) | def _day(self):
  function _eq_num (line 1109) | def _eq_num(self, other: FloatOperandType):
  function _eq_str (line 1124) | def _eq_str(self, other: StringOperandType):
  function _erf (line 1149) | def _erf(self):
  function _exp (line 1160) | def _exp(self):
  function _floor (line 1171) | def _floor(self):
  function _gamma (line 1190) | def _gamma(self):
  function _ge (line 1205) | def _ge(self, other: Any):
  function _gt (line 1219) | def _gt(self, other):
  function _hour (line 1233) | def _hour(self):
  function _is_inf (line 1249) | def _is_inf(self):
  function _is_nan (line 1264) | def _is_nan(self):
  function _is_null (line 1282) | def _is_null(self):
  function _le (line 1313) | def _le(self, other):
  function _lgamma (line 1343) | def _lgamma(self):
  function _log (line 1358) | def _log(self):
  function _lt (line 1369) | def _lt(self, other):
  function _max (line 1379) | def _max(self, alias: str = "new_column"):
  function _median (line 1395) | def _median(self, alias: str = "new_column"):
  function _min (line 1411) | def _min(self, alias="new_column"):
  function _minute (line 1426) | def _minute(self):
  function _mod (line 1446) | def _mod(self, other):
  function _rmod (line 1450) | def _rmod(self, other):
  function _month (line 1463) | def _month(self):
  function _mul (line 1479) | def _mul(self, other):
  function _ne_num (line 1496) | def _ne_num(self, other):
  function _ne_str (line 1504) | def _ne_str(self, other):
  function _neg (line 1521) | def _neg(self):
  function _pow (line 1535) | def _pow(self, other: FloatOperandType):
  function _rpow (line 1539) | def _rpow(self, other: FloatOperandType):
  function _round (line 1568) | def _round(self):
  function _second (line 1579) | def _second(self):
  function _sin (line 1599) | def _sin(self):
  function _sqrt (line 1610) | def _sqrt(self):
  function _stddev (line 1621) | def _stddev(self, alias: str = "new_column"):
  function _sub (line 1637) | def _sub(self, other):
  function _rsub (line 1645) | def _rsub(self, other):
  function _subselection_bool (line 1669) | def _subselection_bool(self, indices):
  function _subselection_float (line 1688) | def _subselection_float(self, indices):
  function _subselection_string (line 1708) | def _subselection_string(self, indices):
  function _substr (line 1728) | def _substr(self, begin: int, length: int):
  function _sum (line 1752) | def _sum(self, alias: str = "new_column"):
  function _tan (line 1768) | def _tan(self):
  function _as_num (line 1779) | def _as_num(self):
  function _as_str (line 1802) | def _as_str(self):
  function _as_ts (line 1819) | def _as_ts(self, time_formats: Optional[Union[str, Iterable[str]]] = None):
  function _truediv (line 1847) | def _truediv(self, other: FloatOperandType):
  function _rtruediv (line 1855) | def _rtruediv(self, other: FloatOperandType):
  function _update_float (line 1886) | def _update_float(self, condition: BooleanColumnView, values: FloatOpera...
  function _update_str (line 1915) | def _update_str(self, condition: BooleanColumnView, values: StringOperan...
  function _var (line 1944) | def _var(self, alias: str = "new_column"):
  function _weekday (line 1960) | def _weekday(self):
  function _with_subroles_float (line 1980) | def _with_subroles_float(self, subroles: Union[str, List[str]], append: ...
  function _with_subroles_string (line 2017) | def _with_subroles_string(self, subroles: Union[str, List[str]], append:...
  function _with_unit_float (line 2053) | def _with_unit_float(self, unit: str):
  function _with_unit_string (line 2076) | def _with_unit_string(self, unit: str):
  function _year (line 2098) | def _year(self):
  function _yearday (line 2114) | def _yearday(self):

FILE: src/python-api/getml/data/columns/format.py
  function _format (line 14) | def _format(self):

FILE: src/python-api/getml/data/columns/from_value.py
  function from_value (line 30) | def from_value(val: Union[bool, str, int, float, np.datetime64]) -> Retu...

FILE: src/python-api/getml/data/columns/get_scalar.py
  function _get_scalar (line 9) | def _get_scalar(column, index) -> float:

FILE: src/python-api/getml/data/columns/last_change.py
  function _last_change (line 18) | def _last_change(df_name) -> str:

FILE: src/python-api/getml/data/columns/last_change_from_col.py
  function _last_change_from_col (line 17) | def _last_change_from_col(self):

FILE: src/python-api/getml/data/columns/length.py
  function _length (line 16) | def _length(col) -> int:

FILE: src/python-api/getml/data/columns/length_property.py
  function _length_property (line 23) | def _length_property(col) -> Union[int, str]:

FILE: src/python-api/getml/data/columns/make_iter.py
  function _make_iter (line 23) | def _make_iter(

FILE: src/python-api/getml/data/columns/parse.py
  function _make_column (line 38) | def _make_column(cmd: Dict[str, Any], col: Coltype):
  function _parse (line 43) | def _parse(

FILE: src/python-api/getml/data/columns/random.py
  function random (line 18) | def random(seed: int = 5849) -> FloatColumnView:

FILE: src/python-api/getml/data/columns/repr.py
  function _repr (line 14) | def _repr(self):

FILE: src/python-api/getml/data/columns/repr_html.py
  function _repr_html (line 13) | def _repr_html(self):

FILE: src/python-api/getml/data/columns/subroles.py
  function _subroles (line 21) | def _subroles(self) -> List[str]:

FILE: src/python-api/getml/data/columns/to_arrow.py
  function _to_arrow (line 20) | def _to_arrow(self: Any, unique: bool = False) -> pa.ChunkedArray:

FILE: src/python-api/getml/data/columns/to_numpy.py
  function _to_numpy (line 20) | def _to_numpy(self: Any) -> np.ndarray:

FILE: src/python-api/getml/data/columns/unique.py
  function _unique (line 18) | def _unique(self) -> np.ndarray:

FILE: src/python-api/getml/data/columns/unit.py
  function _unit (line 21) | def _unit(self) -> str:

FILE: src/python-api/getml/data/concat.py
  function concat (line 24) | def concat(name: str, data_frames: List[Union[DataFrame, View]]):

FILE: src/python-api/getml/data/container.py
  class Container (line 36) | class Container:
    method __init__ (line 232) | def __init__(
    method __dir__ (line 343) | def __dir__(self):
    method __getattr__ (line 348) | def __getattr__(self, key) -> Subset:
    method __getitem__ (line 354) | def __getitem__(self, key) -> Subset:
    method __repr__ (line 401) | def __repr__(self):
    method _repr_html_ (line 416) | def _repr_html_(self):
    method _format (line 436) | def _format(self):
    method _getml_deserialize (line 467) | def _getml_deserialize(self):
    method _ipython_key_completion (line 486) | def _ipython_key_completion(self):
    method __setattr__ (line 493) | def __setattr__(self, name, value):
    method add (line 498) | def add(self, *args, **kwargs):
    method freeze (line 535) | def freeze(self):
    method save (line 547) | def save(self):
    method sync (line 560) | def sync(self):
    method to_pandas (line 573) | def to_pandas(self) -> Dict[str, pd.DataFrame]:

FILE: src/python-api/getml/data/data_frame.py
  class DataFrame (line 111) | class DataFrame:
    method __init__ (line 208) | def __init__(
    method _columns (line 275) | def _columns(self):
    method _delete (line 289) | def _delete(self, mem_only: bool = False):
    method __delitem__ (line 315) | def __delitem__(self, colname: str):
    method __eq__ (line 320) | def __eq__(self, other):
    method __getattr__ (line 346) | def __getattr__(self, name: str) -> Union[FloatColumn, StringColumn]:
    method __getitem__ (line 355) | def __getitem__(self, name: str) -> Union[FloatColumn, StringColumn]: ...
    method __getitem__ (line 358) | def __getitem__(
    method __getitem__ (line 370) | def __getitem__(
    method _getml_deserialize (line 404) | def _getml_deserialize(self) -> Dict[str, Any]:
    method _dir (line 414) | def _dir(self) -> List[str]:
    method __len__ (line 419) | def __len__(self) -> int:
    method __repr__ (line 424) | def __repr__(self) -> str:
    method _repr_html_ (line 436) | def _repr_html_(self) -> str:
    method __setattr__ (line 441) | def __setattr__(self, name, value) -> None:
    method __setitem__ (line 449) | def __setitem__(self, name, col) -> None:
    method _add_categorical_column (line 454) | def _add_categorical_column(self, col, name, role, subroles, unit):
    method _add_column (line 475) | def _add_column(self, col, name, role, subroles, unit):
    method _add_numpy_array (line 497) | def _add_numpy_array(self, numpy_array, name, role, subroles, unit):
    method _check_duplicates (line 530) | def _check_duplicates(self) -> None:
    method _check_plausibility (line 549) | def _check_plausibility(self, data_frame):
    method _collect_footer_data (line 582) | def _collect_footer_data(self):
    method _close (line 598) | def _close(self, sock):
    method _drop (line 612) | def _drop(self, colname: str):
    method _format (line 629) | def _format(self):
    method _set_role (line 635) | def _set_role(self, name, role, time_formats):
    method _set_subroles (line 656) | def _set_subroles(
    method _set_unit (line 679) | def _set_unit(self, name: str, unit: str):
    method add (line 697) | def add(
    method _categorical_names (line 779) | def _categorical_names(self) -> List[str]:
    method colnames (line 785) | def colnames(self) -> List[str]:
    method columns (line 805) | def columns(self) -> List[str]:
    method copy (line 816) | def copy(self, name: str) -> DataFrame:
    method delete (line 844) | def delete(self):
    method drop (line 855) | def drop(
    method freeze (line 880) | def freeze(self):
    method from_arrow (line 898) | def from_arrow(
    method from_arrow (line 909) | def from_arrow(
    method from_arrow (line 919) | def from_arrow(
    method from_csv (line 996) | def from_csv(
    method from_csv (line 1014) | def from_csv(
    method from_csv (line 1031) | def from_csv(
    method from_db (line 1246) | def from_db(
    method from_db (line 1258) | def from_db(
    method from_db (line 1269) | def from_db(
    method from_dict (line 1384) | def from_dict(
    method from_dict (line 1395) | def from_dict(
    method from_dict (line 1405) | def from_dict(
    method from_json (line 1464) | def from_json(
    method from_json (line 1475) | def from_json(
    method from_json (line 1485) | def from_json(
    method from_pandas (line 1550) | def from_pandas(
    method from_pandas (line 1561) | def from_pandas(
    method from_pandas (line 1571) | def from_pandas(
    method from_parquet (line 1657) | def from_parquet(
    method from_parquet (line 1669) | def from_parquet(
    method from_parquet (line 1680) | def from_parquet(
    method from_pyspark (line 1761) | def from_pyspark(
    method from_pyspark (line 1772) | def from_pyspark(
    method from_pyspark (line 1782) | def from_pyspark(
    method from_query (line 1863) | def from_query(
    method from_query (line 1875) | def from_query(
    method from_query (line 1886) | def from_query(
    method from_s3 (line 1994) | def from_s3(
    method from_s3 (line 2012) | def from_s3(
    method from_s3 (line 2029) | def from_s3(
    method from_view (line 2214) | def from_view(
    method from_view (line 2223) | def from_view(
    method from_view (line 2231) | def from_view(
    method iter_batches (line 2284) | def iter_batches(self, batch_size: int = DEFAULT_BATCH_SIZE) -> Iterat...
    method _join_key_names (line 2290) | def _join_key_names(self) -> Iterable[str]:
    method last_change (line 2296) | def last_change(self) -> str:
    method load (line 2304) | def load(self) -> DataFrame:
    method memory_usage (line 2377) | def memory_usage(self):
    method _monitor_url (line 2386) | def _monitor_url(self) -> Optional[str]:
    method nbytes (line 2399) | def nbytes(self) -> np.uint64:
    method ncols (line 2423) | def ncols(self) -> int:
    method nrows (line 2434) | def nrows(self) -> int:
    method _numerical_names (line 2458) | def _numerical_names(self):
    method read_arrow (line 2463) | def read_arrow(
    method read_csv (line 2520) | def read_csv(
    method read_json (line 2695) | def read_json(
    method read_parquet (line 2804) | def read_parquet(
    method read_s3 (line 2872) | def read_s3(
    method read_view (line 3039) | def read_view(
    method read_db (line 3084) | def read_db(
    method read_pandas (line 3151) | def read_pandas(self, pandas_df: pd.DataFrame, append: bool = False) -...
    method read_pyspark (line 3196) | def read_pyspark(
    method read_query (line 3240) | def read_query(
    method refresh (line 3309) | def refresh(self) -> DataFrame:
    method roles (line 3342) | def roles(self):
    method remove_subroles (line 3360) | def remove_subroles(
    method remove_unit (line 3382) | def remove_unit(
    method rowid (line 3405) | def rowid(self):
    method save (line 3413) | def save(self) -> DataFrame:
    method set_role (line 3432) | def set_role(
    method set_subroles (line 3519) | def set_subroles(
    method set_unit (line 3560) | def set_unit(
    method shape (line 3603) | def shape(self):
    method _target_names (line 3614) | def _target_names(self):
    method _text_names (line 3620) | def _text_names(self):
    method _time_stamp_names (line 3626) | def _time_stamp_names(self):
    method to_arrow (line 3631) | def to_arrow(self) -> pa.Table:
    method to_arrow_stream (line 3645) | def to_arrow_stream(self) -> Iterator[pa.RecordBatchReader]:
    method to_csv (line 3710) | def to_csv(
    method to_db (line 3762) | def to_db(self, table_name: str, conn: Optional[Connection] = None):
    method to_html (line 3799) | def to_html(self, max_rows: int = 10):
    method to_json (line 3821) | def to_json(self):
    method to_pandas (line 3831) | def to_pandas(self) -> pd.DataFrame:
    method to_parquet (line 3849) | def to_parquet(
    method to_placeholder (line 3873) | def to_placeholder(self, name: Optional[str] = None) -> Placeholder:
    method to_pyspark (line 3892) | def to_pyspark(
    method to_s3 (line 3922) | def to_s3(
    method _unused_float_names (line 4009) | def _unused_float_names(self):
    method _unused_names (line 4015) | def _unused_names(self):
    method _unused_string_names (line 4021) | def _unused_string_names(self):
    method unload (line 4026) | def unload(self):
    method where (line 4037) | def where(
    method with_column (line 4101) | def with_column(
    method with_name (line 4192) | def with_name(self, name: str) -> View:
    method with_role (line 4206) | def with_role(
    method with_subroles (line 4249) | def with_subroles(
    method with_unit (line 4284) | def with_unit(

FILE: src/python-api/getml/data/data_model.py
  class DataModel (line 25) | class DataModel:
    method __init__ (line 164) | def __init__(self, population: Union[Placeholder, str]):
    method _add (line 179) | def _add(self, placeholder):
    method __dir__ (line 191) | def __dir__(self):
    method __getattr__ (line 196) | def __getattr__(self, key) -> Placeholder:
    method __getitem__ (line 202) | def __getitem__(self, key) -> Placeholder:
    method _getml_deserialize (line 214) | def _getml_deserialize(self):
    method __iter__ (line 226) | def __iter__(self):
    method __repr__ (line 229) | def __repr__(self):
    method _make_diagram (line 232) | def _make_diagram(self):
    method _make_staging (line 235) | def _make_staging(self):
    method _repr_html_ (line 241) | def _repr_html_(self):
    method add (line 258) | def add(self, *placeholders: Union[Placeholder, List[Placeholder]]):
    method names (line 286) | def names(self) -> List[str]:

FILE: src/python-api/getml/data/diagram.py
  function _make_line (line 30) | def _make_line(origin, target, color, width):
  function _make_icon (line 46) | def _make_icon(origin, size=48):
  function _make_table (line 93) | def _make_table(name, origin):
  function _make_triangle_down (line 121) | def _make_triangle_down(origin):
  function _make_triangle_right (line 137) | def _make_triangle_right(origin):
  function _make_label (line 153) | def _make_label(content, origin):
  function _make_arrow (line 190) | def _make_arrow(label, origin, target):
  function _split_multiple_join_keys (line 237) | def _split_multiple_join_keys(multiple):
  function _make_join_keys (line 243) | def _make_join_keys(placeholder, i):
  function _make_time_stamps (line 262) | def _make_time_stamps(placeholder, i):
  function _make_window (line 286) | def _make_window(diff, ts_used):
  function _make_label_content (line 308) | def _make_label_content(placeholder, i):
  class _Diagram (line 356) | class _Diagram:
    method __init__ (line 357) | def __init__(self, placeholder):
    method _add_children (line 368) | def _add_children(self, depth, placeholder):
    method _add_links (line 381) | def _add_links(self, placeholder, child_ids, parent_id):
    method _add_placeholder (line 390) | def _add_placeholder(self, depth, placeholder):
    method _calc_positions (line 398) | def _calc_positions(self):
    method _calc_size (line 411) | def _calc_size(self):
    method _find_max_depth (line 416) | def _find_max_depth(self):
    method _make_structure (line 425) | def _make_structure(self, depth, placeholder):
    method to_html (line 430) | def to_html(self):

FILE: src/python-api/getml/data/helpers.py
  function list_data_frames (line 79) | def list_data_frames() -> Dict[str, List[str]]:
  function _check_if_exists (line 118) | def _check_if_exists(colnames: List[str], all_colnames: List[str]):
  function _check_join_key (line 131) | def _check_join_key(candidates: Any, roles: Roles, name: str):
  function _empty_data_frame (line 162) | def _empty_data_frame() -> str:
  function _exists_in_memory (line 169) | def _exists_in_memory(name: str) -> bool:
  function _finditems (line 181) | def _finditems(key: str, dct: Dict[str, Any]) -> Any:
  function _get_column (line 192) | def _get_column(name, columns):
  function _handle_cols (line 202) | def _handle_cols(
  function _handle_multiple_join_keys (line 242) | def _handle_multiple_join_keys(
  function _handle_on (line 251) | def _handle_on(on: OnType) -> Union[List[Tuple[str, str]], List[Tuple[No...
  function _handle_ts (line 268) | def _handle_ts(ts):
  function _is_numerical_type_numpy (line 277) | def _is_numerical_type_numpy(coltype) -> bool:
  function _is_subclass_list (line 299) | def _is_subclass_list(some_list, parent) -> bool:
  function _is_typed_dict (line 312) | def _is_typed_dict(some_dict, key_types, value_types) -> bool:
  function _is_typed_list (line 335) | def _is_typed_list(some_list, types) -> bool:
  function _is_non_empty_typed_list (line 349) | def _is_non_empty_typed_list(some_list, types) -> bool:
  function _iter_batches (line 356) | def _iter_batches(
  function _make_id (line 368) | def _make_id() -> str:
  function _infer_arange_args_from_slice (line 376) | def _infer_arange_args_from_slice(
  function _serialize_join_keys (line 418) | def _serialize_join_keys(on: OnType) -> Tuple[str, str]:
  function _prepare_roles (line 456) | def _prepare_roles(
  function _remove_trailing_underscores (line 481) | def _remove_trailing_underscores(some_dict: Dict[str, Any]) -> Dict[str,...
  function _replace_non_alphanumeric (line 508) | def _replace_non_alphanumeric(string: str) -> str:
  function _replace_non_alphanumeric_cols (line 520) | def _replace_non_alphanumeric_cols(df_or_view):
  function _make_table (line 554) | def _make_table(col, numpy_array) -> pa.Table:
  function _send_numpy_array (line 563) | def _send_numpy_array(col, numpy_array: np.ndarray):
  function _sniff_db (line 582) | def _sniff_db(table_name: str, conn: Optional[Connection] = None) -> Roles:
  function _sniff_query (line 618) | def _sniff_query(query: str, name: str, conn: Optional[Connection] = Non...
  function _sniff_s3 (line 652) | def _sniff_s3(
  function _to_pyspark (line 719) | def _to_pyspark(df_or_view: Any, name: str, spark: Any):
  function _transform_col (line 740) | def _transform_col(col, role, is_boolean, is_float, is_string, time_form...
  function _where (line 758) | def _where(
  function _with_column (line 796) | def _with_column(
  function _with_role (line 909) | def _with_role(
  function _with_subroles (line 973) | def _with_subroles(
  function _with_unit (line 1030) | def _with_unit(

FILE: src/python-api/getml/data/helpers2.py
  function _decode_data_model (line 35) | def _decode_data_model(cmd: Dict[str, Any]):
  function _decode_multiple_join_keys (line 57) | def _decode_multiple_join_keys(jk_used, other_jk_used):
  function _decode_placeholder (line 76) | def _decode_placeholder(dictionary):
  function _deep_copy (line 117) | def _deep_copy(df_or_view, container_id):
  function _get_last_change (line 128) | def _get_last_change(population, peripheral, subsets):
  function _make_subsets_from_kwargs (line 139) | def _make_subsets_from_kwargs(train, validation, test, **kwargs):
  function _make_subsets_from_split (line 152) | def _make_subsets_from_split(
  function load_data_frame (line 187) | def load_data_frame(name: str) -> DataFrame:
  function _load_dependent_data_frames (line 229) | def _load_dependent_data_frames(cmd):
  function _load_added (line 240) | def _load_added(cmd):
  function _load_subselection (line 253) | def _load_subselection(cmd):
  function _load_view (line 263) | def _load_view(cmd):
  function exists (line 286) | def exists(name: str):
  function delete (line 305) | def delete(name: str):
  function make_target_columns (line 324) | def make_target_columns(base: Union[DataFrame, View], colname: str) -> V...
  function to_placeholder (line 375) | def to_placeholder(

FILE: src/python-api/getml/data/load_container.py
  function load_container (line 21) | def load_container(container_id: str) -> Container:

FILE: src/python-api/getml/data/placeholder.py
  class Placeholder (line 40) | class Placeholder:
    method __init__ (line 185) | def __init__(
    method __dir__ (line 200) | def __dir__(self):
    method __getattr__ (line 205) | def __getattr__(self, key):
    method __getitem__ (line 211) | def __getitem__(self, key):
    method _getml_deserialize (line 219) | def _getml_deserialize(self):
    method __repr__ (line 262) | def __repr__(self) -> str:
    method _ipython_key_completions_ (line 321) | def _ipython_key_completions_(self):
    method children (line 325) | def children(self):
    method name (line 329) | def name(self) -> str:
    method join (line 332) | def join(
    method population (line 446) | def population(self):
    method roles (line 452) | def roles(self) -> Roles:
    method roles (line 456) | def roles(self, roles):
    method to_list (line 464) | def to_list(self):
    method to_dict (line 470) | def to_dict(self):
    method columns (line 486) | def columns(self):
  class Join (line 494) | class Join:
    method __eq__ (line 506) | def __eq__(self, other):
    method __getitem__ (line 509) | def __getitem__(self, key):
    method __iter__ (line 515) | def __iter__(self):
    method __len__ (line 518) | def __len__(self):
    method __repr__ (line 521) | def __repr__(self):

FILE: src/python-api/getml/data/roles/container.py
  class Roles (line 35) | class Roles:
    method __post_init__ (line 92) | def __post_init__(self):
    method __getitem__ (line 99) | def __getitem__(self, key) -> Tuple[str, ...]:
    method __iter__ (line 105) | def __iter__(self) -> Iterator[Role]:
    method __len__ (line 108) | def __len__(self) -> int:
    method __repr__ (line 111) | def __repr__(self) -> str:
    method columns (line 129) | def columns(self) -> Tuple[str, ...]:
    method column (line 138) | def column(self, colname: str) -> Role:
    method from_dict (line 155) | def from_dict(cls, roles_dict: Mapping[Union[Role, str], Iterable[str]...
    method from_mapping (line 177) | def from_mapping(cls, roles_mapping: Mapping[str, Role]) -> Roles:
    method infer (line 195) | def infer(self, colname: str) -> Role:
    method to_dict (line 213) | def to_dict(self) -> Dict[Role, List[str]]:
    method to_list (line 222) | def to_list(self) -> List[Role]:
    method to_mapping (line 232) | def to_mapping(self) -> Dict[str, Role]:
    method unused (line 242) | def unused(self) -> List[str]:
    method update (line 251) | def update(self, other: Roles) -> Roles:
    method validate (line 270) | def validate(self) -> None:

FILE: src/python-api/getml/data/split/concat.py
  function concat (line 24) | def concat(name: str, **kwargs: DataFrame) -> Tuple[DataFrame, StringCol...

FILE: src/python-api/getml/data/split/random.py
  function random (line 23) | def random(

FILE: src/python-api/getml/data/split/time.py
  function time (line 25) | def time(

FILE: src/python-api/getml/data/staging.py
  function _compare_join (line 26) | def _compare_join(join1: Join, join2: Join) -> bool:
  function _compare_joins (line 42) | def _compare_joins(pair1: Pair, pair2: Pair) -> bool:
  function _is_same (line 49) | def _is_same(pair1: Pair, pair2: Pair) -> bool:
  function _is_to_one (line 62) | def _is_to_one(relationship: Optional[str]) -> bool:
  function _make_names (line 78) | def _make_names(placeholder: Placeholder) -> List[str]:
  function _make_joins (line 90) | def _make_joins(placeholder: Placeholder) -> List[Join]:
  function _make_pair (line 102) | def _make_pair(placeholder: Placeholder) -> Pair:
  function _make_list_of_pairs (line 112) | def _make_list_of_pairs(placeholder: Placeholder, include_head=True) -> ...
  function _make_staging_overview (line 124) | def _make_staging_overview(placeholder: Placeholder) -> List[List[str]]:
  function _remove_duplicates (line 148) | def _remove_duplicates(sorted_list_of_pairs: List[Pair]) -> List[Pair]:

FILE: src/python-api/getml/data/star_schema.py
  class StarSchema (line 28) | class StarSchema:
    method __init__ (line 212) | def __init__(
    method __dir__ (line 258) | def __dir__(self):
    method __iter__ (line 264) | def __iter__(self):
    method __getattr__ (line 267) | def __getattr__(self, key):
    method __getitem__ (line 273) | def __getitem__(self, key):
    method __repr__ (line 287) | def __repr__(self):
    method _repr_html_ (line 305) | def _repr_html_(self):
    method container (line 320) | def container(self) -> Container:
    method data_model (line 330) | def data_model(self) -> DataModel:
    method join (line 339) | def join(
    method sync (line 564) | def sync(self):

FILE: src/python-api/getml/data/subset.py
  class Subset (line 24) | class Subset:
    method _format (line 69) | def _format(self):
    method __repr__ (line 90) | def __repr__(self):
    method _repr_html_ (line 108) | def _repr_html_(self):

FILE: src/python-api/getml/data/time.py
  function seconds (line 23) | def seconds(num: float) -> float:
  function minutes (line 40) | def minutes(num: float) -> float:
  function hours (line 57) | def hours(num: float) -> float:
  function days (line 74) | def days(num: float) -> float:
  function weeks (line 91) | def weeks(num: float) -> float:
  function milliseconds (line 108) | def milliseconds(num: float) -> float:
  function microseconds (line 125) | def microseconds(num: float) -> float:
  function datetime (line 142) | def datetime(

FILE: src/python-api/getml/data/time_series.py
  class TimeSeries (line 26) | class TimeSeries(StarSchema):
    method __init__ (line 129) | def __init__(
    method _add_joins (line 186) | def _add_joins(self, on):

FILE: src/python-api/getml/data/view.py
  class View (line 87) | class View:
    method __init__ (line 173) | def __init__(
    method _apply_subselection (line 199) | def _apply_subselection(self, col):
    method _collect_footer_data (line 206) | def _collect_footer_data(self):
    method _format (line 219) | def _format(self):
    method __getattr__ (line 224) | def __getattr__(self, name):
    method __getitem__ (line 232) | def __getitem__(self, name):
    method __len__ (line 265) | def __len__(self) -> int:
    method _getml_deserialize (line 270) | def _getml_deserialize(self) -> Dict[str, Any]:
    method _modify_colnames (line 296) | def _modify_colnames(self, base_names, role):
    method __repr__ (line 313) | def __repr__(self):
    method _repr_html_ (line 322) | def _repr_html_(self):
    method added (line 332) | def added(self) -> Dict:
    method base (line 344) | def base(self) -> Union[DataFrame, View]:
    method _categorical_names (line 357) | def _categorical_names(self):
    method check (line 362) | def check(self):
    method colnames (line 384) | def colnames(self) -> List[str]:
    method columns (line 404) | def columns(self) -> List[str]:
    method drop (line 415) | def drop(self, cols: Union[str, List[str]]) -> View:
    method dropped (line 436) | def dropped(self) -> List[str]:
    method iter_batches (line 447) | def iter_batches(self, batch_size: int = DEFAULT_BATCH_SIZE) -> Iterat...
    method last_change (line 453) | def last_change(self) -> str:
    method _join_key_names (line 465) | def _join_key_names(self):
    method name (line 471) | def name(self) -> str:
    method ncols (line 486) | def ncols(self) -> int:
    method nrows (line 497) | def nrows(self, force: bool = False) -> Union[int, str]:
    method _numerical_names (line 544) | def _numerical_names(self):
    method refresh (line 549) | def refresh(self) -> View:
    method roles (line 564) | def roles(self) -> Roles:
    method rowid (line 586) | def rowid(self) -> List[int]:
    method subselection (line 598) | def subselection(self) -> Union[BooleanColumnView, FloatColumn, FloatC...
    method _target_names (line 610) | def _target_names(self):
    method _text_names (line 616) | def _text_names(self):
    method _time_stamp_names (line 622) | def _time_stamp_names(self):
    method shape (line 628) | def shape(self) -> Tuple[Union[int, str], int]:
    method to_arrow (line 637) | def to_arrow(self) -> pa.Table:
    method to_arrow_stream (line 652) | def to_arrow_stream(self) -> Iterator[pa.RecordBatchReader]:
    method to_json (line 708) | def to_json(self) -> str:
    method to_csv (line 720) | def to_csv(
    method to_db (line 772) | def to_db(self, table_name: str, conn: Optional[Connection] = None):
    method to_df (line 812) | def to_df(self, name) -> DataFrame:
    method to_pandas (line 821) | def to_pandas(self) -> pd.DataFrame:
    method to_placeholder (line 835) | def to_placeholder(self, name: Optional[str] = None) -> Placeholder:
    method to_parquet (line 855) | def to_parquet(
    method to_pyspark (line 879) | def to_pyspark(
    method to_s3 (line 910) | def to_s3(
    method _unused_float_names (line 992) | def _unused_float_names(self):
    method _unused_names (line 998) | def _unused_names(self):
    method _unused_string_names (line 1004) | def _unused_string_names(self):
    method where (line 1009) | def where(
    method with_column (line 1069) | def with_column(
    method with_name (line 1162) | def with_name(self, name: str) -> View:
    method with_role (line 1176) | def with_role(
    method with_subroles (line 1209) | def with_subroles(
    method with_unit (line 1235) | def with_unit(

FILE: src/python-api/getml/database/connect_bigquery.py
  function connect_bigquery (line 23) | def connect_bigquery(

FILE: src/python-api/getml/database/connect_duckdb.py
  function connect_duckdb (line 22) | def connect_duckdb(

FILE: src/python-api/getml/database/connect_greenplum.py
  function connect_greenplum (line 21) | def connect_greenplum(

FILE: src/python-api/getml/database/connect_hana.py
  function connect_hana (line 21) | def connect_hana(

FILE: src/python-api/getml/database/connect_mariadb.py
  function connect_mariadb (line 21) | def connect_mariadb(

FILE: src/python-api/getml/database/connect_mysql.py
  function connect_mysql (line 21) | def connect_mysql(

FILE: src/python-api/getml/database/connect_odbc.py
  function connect_odbc (line 21) | def connect_odbc(

FILE: src/python-api/getml/database/connect_postgres.py
  function connect_postgres (line 21) | def connect_postgres(

FILE: src/python-api/getml/database/connect_sqlite3.py
  function connect_sqlite3 (line 22) | def connect_sqlite3(

FILE: src/python-api/getml/database/connection.py
  class Connection (line 20) | class Connection:
    method __init__ (line 36) | def __init__(self, conn_id: str = "default"):
    method __repr__ (line 39) | def __repr__(self):
    method __str__ (line 42) | def __str__(self):

FILE: src/python-api/getml/database/copy_table.py
  function copy_table (line 20) | def copy_table(

FILE: src/python-api/getml/database/drop_table.py
  function drop_table (line 20) | def drop_table(name: str, conn: Optional[Connection] = None):

FILE: src/python-api/getml/database/exceptions.py
  function handle_database_file_system_mismatch_error (line 33) | def handle_database_file_system_mismatch_error(msg: str, extra: Dict[str...

FILE: src/python-api/getml/database/execute.py
  function execute (line 20) | def execute(query: str, conn: Optional[Connection] = None):

FILE: src/python-api/getml/database/get.py
  function get (line 24) | def get(query: str, conn: Optional[Connection] = None) -> pd.DataFrame:

FILE: src/python-api/getml/database/get_colnames.py
  function get_colnames (line 21) | def get_colnames(name: str, conn: Optional[Connection] = None) -> List[s...

FILE: src/python-api/getml/database/helpers.py
  class CSVCmdType (line 46) | class CSVCmdType(Enum):
  function _load_to_file (line 54) | def _load_to_file(url: str, file_path: Path, description: Optional[str] ...
  function _retrieve_temp_dir (line 76) | def _retrieve_temp_dir() -> Path:
  function _retrieve_url (line 85) | def _retrieve_url(
  function _retrieve_urls (line 114) | def _retrieve_urls(
  function _retrieve_urls_for_engine (line 136) | def _retrieve_urls_for_engine(fnames: Iterable[str], verbose: bool = Tru...
  function _read_csv (line 149) | def _read_csv(
  function _read_csv (line 163) | def _read_csv(
  function _read_csv (line 176) | def _read_csv(

FILE: src/python-api/getml/database/list_connections.py
  function list_connections (line 22) | def list_connections() -> List[Connection]:

FILE: src/python-api/getml/database/list_tables.py
  function list_tables (line 21) | def list_tables(conn: Optional[Connection] = None) -> List[str]:

FILE: src/python-api/getml/database/read_csv.py
  function read_csv (line 22) | def read_csv(

FILE: src/python-api/getml/database/read_s3.py
  function read_s3 (line 20) | def read_s3(

FILE: src/python-api/getml/database/sniff_csv.py
  function sniff_csv (line 19) | def sniff_csv(

FILE: src/python-api/getml/database/sniff_s3.py
  function sniff_s3 (line 20) | def sniff_s3(

FILE: src/python-api/getml/datasets/base.py
  function _load_dataset (line 74) | def _load_dataset(
  function load_air_pollution (line 153) | def load_air_pollution(
  function load_atherosclerosis (line 216) | def load_atherosclerosis(
  function load_biodegradability (line 294) | def load_biodegradability(
  function load_consumer_expenditures (line 379) | def load_consumer_expenditures(
  function load_interstate94 (line 456) | def load_interstate94(
  function load_loans (line 527) | def load_loans(
  function load_occupancy (line 619) | def load_occupancy(

FILE: src/python-api/getml/datasets/samples_generator.py
  function _aggregate (line 25) | def _aggregate(
  function make_categorical (line 83) | def make_categorical(
  function make_discrete (line 253) | def make_discrete(
  function make_numerical (line 421) | def make_numerical(
  function make_same_units_categorical (line 589) | def make_same_units_categorical(
  function make_same_units_numerical (line 787) | def make_same_units_numerical(
  function make_snowflake (line 979) | def make_snowflake(

FILE: src/python-api/getml/engine/_launch.py
  class Edition (line 42) | class Edition(str, Enum):
  class Arch (line 47) | class Arch(str, Enum):
  class Os (line 52) | class Os(str, Enum):
  function _handle_option_name (line 130) | def _handle_option_name(name: str) -> str:
  function _handle_option_value (line 134) | def _handle_option_value(value: Union[bool, int, str, PathLike, None]) -...
  class _Options (line 139) | class _Options:
    method to_cmd (line 152) | def to_cmd(self) -> List[str]:
  function create_log_dir (line 164) | def create_log_dir(getml_home_directory: Path) -> Path:
  function locate_installed_packages_by_edition (line 170) | def locate_installed_packages_by_edition() -> Dict[Edition, List[Path]]:
  function locate_executable (line 185) | def locate_executable() -> Optional[Path]:
  function launch (line 206) | def launch(

FILE: src/python-api/getml/engine/helpers.py
  function delete_project (line 32) | def delete_project(name: str):
  function list_projects (line 50) | def list_projects() -> List[str]:
  function list_running_projects (line 63) | def list_running_projects() -> List[str]:
  function set_project (line 76) | def set_project(name: str):
  function shutdown (line 91) | def shutdown():
  function suspend_project (line 106) | def suspend_project(name: str):

FILE: src/python-api/getml/events/dispatchers.py
  class PoolEventDispatcher (line 25) | class PoolEventDispatcher:
    method __init__ (line 37) | def __init__(
    method __enter__ (line 55) | def __enter__(self):
    method __exit__ (line 59) | def __exit__(
    method dispatch (line 70) | def dispatch(self, events: Sequence[Event]):
    method process (line 86) | def process(
    method start (line 111) | def start(self):
    method stop (line 120) | def stop(self, wait: bool = True):

FILE: src/python-api/getml/events/emitters.py
  class DispatcherEventEmitter (line 21) | class DispatcherEventEmitter:
    method __init__ (line 26) | def __init__(
    method __enter__ (line 32) | def __enter__(self):
    method __exit__ (line 36) | def __exit__(
    method emit (line 44) | def emit(self, events: Sequence[Event]):

FILE: src/python-api/getml/events/handlers.py
  class HandlerMetadata (line 23) | class HandlerMetadata:
  class EventHandlerRegistry (line 30) | class EventHandlerRegistry:
    method __init__ (line 33) | def __init__(self, source: EventSource):
    method __call__ (line 38) | def __call__(self, handler: H) -> H: ...
    method __call__ (line 41) | def __call__(self, *, sync: bool = False) -> Callable[[H], H]: ...
    method __call__ (line 43) | def __call__(
    method register_handler (line 74) | def register_handler(
    method unregister_handler (line 89) | def unregister_handler(cls, source: EventSource, handler: EventHandler):

FILE: src/python-api/getml/events/parsers.py
  function _coerce_attribute_values (line 31) | def _coerce_attribute_values(attributes: Dict[str, str]) -> Dict[str, Un...
  function _process_attributes (line 44) | def _process_attributes(
  function _create_attributes (line 56) | def _create_attributes(
  class LogMessageEventParser (line 77) | class LogMessageEventParser:
    method __init__ (line 86) | def __init__(self, context: EventContext):
    method parse (line 97) | def parse(self, message: str) -> List[Event]:
    method _try_parse_unspecified_progress_event (line 118) | def _try_parse_unspecified_progress_event(self, body: str) -> Optional...
    method _try_reattach_model (line 133) | def _try_reattach_model(self, event: Event) -> Event:
    method _try_reattach_type (line 144) | def _try_reattach_type(self, event: Event) -> Event:
    method _try_parse_typed_event (line 154) | def _try_parse_typed_event(self, body: str) -> Optional[Event]:
    method _try_create_end_event (line 176) | def _try_create_end_event(self) -> Optional[Event]:

FILE: src/python-api/getml/events/regex.py
  class EventMessageRegex (line 30) | class EventMessageRegex(Enum):
    method with_prefix (line 82) | def with_prefix(cls, prefix: str) -> Iterator[Tuple[EventType, re.Patt...

FILE: src/python-api/getml/events/types.py
  class Shutdown (line 18) | class Shutdown:
  class EventTypeState (line 26) | class EventTypeState(str, Enum):
  class EventType (line 32) | class EventType(str, Enum):
    method progress (line 102) | def progress(self) -> EventType:
    method state (line 116) | def state(self) -> EventTypeState:
    method transition_to (line 126) | def transition_to(self, state: EventTypeState) -> EventType:
  class EventSource (line 133) | class EventSource(str, Enum):
  class EventContext (line 139) | class EventContext:
  class Event (line 145) | class Event:
    method progress (line 152) | def progress(self) -> Event:
  class EventParser (line 162) | class EventParser(Protocol):
    method parse (line 165) | def parse(self, message: str) -> Sequence[Event]: ...
  class EventDispatcher (line 168) | class EventDispatcher(Protocol):
    method __enter__ (line 169) | def __enter__(self) -> EventDispatcher: ...
    method __exit__ (line 170) | def __exit__(
    method start (line 176) | def start(self): ...
    method stop (line 177) | def stop(self, wait: bool = True): ...
    method dispatch (line 178) | def dispatch(self, events: Sequence[Event]): ...
  class EventEmitter (line 181) | class EventEmitter(Protocol):
    method __enter__ (line 184) | def __enter__(self) -> EventEmitter: ...
    method __exit__ (line 185) | def __exit__(
    method emit (line 191) | def emit(self, events: Sequence[Event]): ...

FILE: src/python-api/getml/exceptions.py
  class ArrowExceptionHandler (line 18) | class ArrowExceptionHandler(Protocol):
    method __call__ (line 19) | def __call__(
  function _nop_arrow_cast_exception_handler (line 41) | def _nop_arrow_cast_exception_handler(exc: Exception, field: pa.Field) -...
  class ArrowCastExceptionHandlerRegistry (line 45) | class ArrowCastExceptionHandlerRegistry:
    method __call__ (line 61) | def __call__(
    method register (line 69) | def register(
    method retrieve (line 81) | def retrieve(
  class EngineExceptionHandlerRegistry (line 92) | class EngineExceptionHandlerRegistry:
    method __call__ (line 105) | def __call__(
    method register (line 111) | def register(cls, handler: Callable[[str, Dict[str, Any]], None]):
  function handle_engine_exception (line 119) | def handle_engine_exception(msg: str, extra: Optional[Dict[str, Any]] = ...
  function handle_enterprise_feature_not_available_error (line 143) | def handle_enterprise_feature_not_available_error(msg: str, extra: Dict[...

FILE: src/python-api/getml/feature_learning/aggregations/sets.py
  class AggregationsSets (line 184) | class AggregationsSets:
    method All (line 195) | def All(self) -> FrozenSet[Aggregations]:
    method Default (line 199) | def Default(self) -> FrozenSet[Aggregations]:
    method Minimal (line 203) | def Minimal(self) -> FrozenSet[Aggregations]:
  class MappingAggregationsSets (line 208) | class MappingAggregationsSets(AggregationsSets):
  class FastPropAggregationsSets (line 219) | class FastPropAggregationsSets(AggregationsSets):
  class MultirelAggregationsSets (line 230) | class MultirelAggregationsSets(AggregationsSets):

FILE: src/python-api/getml/feature_learning/fastboost.py
  class Fastboost (line 22) | class Fastboost(_FeatureLearner):
    method validate (line 126) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/feature_learning/fastprop.py
  class FastProp (line 27) | class FastProp(_FeatureLearner):
    method validate (line 142) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/feature_learning/feature_learner.py
  class _FeatureLearner (line 28) | class _FeatureLearner(ABC):
    method __post_init__ (line 35) | def __post_init__(self) -> None:
    method __eq__ (line 42) | def __eq__(self, other: object) -> bool:
    method __repr__ (line 80) | def __repr__(self) -> str:
    method __setattr__ (line 85) | def __setattr__(self, name: str, value: Any) -> None:
    method __str__ (line 95) | def __str__(self) -> str:
    method _getml_deserialize (line 101) | def _getml_deserialize(self) -> Dict[str, Any]:
    method type (line 117) | def type(self) -> str:
    method validate (line 123) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/feature_learning/multirel.py
  class Multirel (line 30) | class Multirel(_FeatureLearner):
    method validate (line 232) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/feature_learning/relboost.py
  class Relboost (line 25) | class Relboost(_FeatureLearner):
    method validate (line 181) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/feature_learning/relmt.py
  class RelMT (line 25) | class RelMT(_FeatureLearner):
    method validate (line 181) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/feature_learning/validation.py
  class Validator (line 30) | class Validator:
    method __init__ (line 31) | def __init__(self, name: str) -> None:
    method __set__ (line 34) | def __set__(self, instance: feature_learning._FeatureLearner, value: A...
  function _validate_fastprop_parameters (line 44) | def _validate_fastprop_parameters(**kwargs: Any) -> None:
  function _validate_fastboost_parameters (line 137) | def _validate_fastboost_parameters(**kwargs: Any) -> None:
  function _validate_multirel_parameters (line 209) | def _validate_multirel_parameters(**kwargs: Any) -> None:
  function _validate_relboost_parameters (line 369) | def _validate_relboost_parameters(**kwargs: Any) -> None:
  function _validate_time_series_parameters (line 490) | def _validate_time_series_parameters(**kwargs: Any) -> None:

FILE: src/python-api/getml/helpers.py
  function _check_parameter_bounds (line 30) | def _check_parameter_bounds(parameter, parameter_name, bounds):
  function _is_iterable_not_str (line 57) | def _is_iterable_not_str(
  function _is_iterable_not_str_of_type (line 70) | def _is_iterable_not_str_of_type(
  function _is_collection_not_str (line 85) | def _is_collection_not_str(
  function _is_collection_not_str_of_type (line 98) | def _is_collection_not_str_of_type(
  function _is_nonempty_collection_not_str (line 113) | def _is_nonempty_collection_not_str(

FILE: src/python-api/getml/hyperopt/helpers.py
  function list_hyperopts (line 19) | def list_hyperopts() -> List[str]:
  function exists (line 50) | def exists(name: str) -> bool:
  function delete (line 68) | def delete(name: str) -> None:

FILE: src/python-api/getml/hyperopt/hyperopt.py
  function _get_json_obj (line 37) | def _get_json_obj(name):
  class _Hyperopt (line 60) | class _Hyperopt:
    method __init__ (line 65) | def __init__(
    method __repr__ (line 115) | def __repr__(self):
    method _append_underscore (line 120) | def _append_underscore(self, some_dict):
    method _best_pipeline_name (line 145) | def _best_pipeline_name(self):
    method _getml_deserialize (line 158) | def _getml_deserialize(self) -> Dict[str, Any]:
    method _parse_json_obj (line 179) | def _parse_json_obj(self, json_obj: Dict[str, Any]) -> _Hyperopt:
    method _save (line 211) | def _save(self):
    method _send (line 220) | def _send(self):
    method best_pipeline (line 230) | def best_pipeline(self) -> Pipeline:
    method clean_up (line 246) | def clean_up(self) -> None:
    method fit (line 261) | def fit(
    method id (line 342) | def id(self) -> str:
    method name (line 355) | def name(self) -> str:
    method refresh (line 367) | def refresh(self) -> _Hyperopt:
    method score (line 380) | def score(self) -> str:
    method type (line 392) | def type(self) -> str:
  class GaussianHyperparameterSearch (line 405) | class GaussianHyperparameterSearch(_Hyperopt):
    method __init__ (line 739) | def __init__(
    method __str__ (line 783) | def __str__(self):
    method validate (line 795) | def validate(self) -> None:
  class LatinHypercubeSearch (line 805) | class LatinHypercubeSearch(_Hyperopt):
    method __init__ (line 1005) | def __init__(
    method __str__ (line 1031) | def __str__(self):
    method validate (line 1042) | def validate(self) -> None:
  class RandomSearch (line 1060) | class RandomSearch(_Hyperopt):
    method __init__ (line 1250) | def __init__(
    method __str__ (line 1276) | def __str__(self):
    method validate (line 1287) | def validate(self) -> None:

FILE: src/python-api/getml/hyperopt/load_hyperopt.py
  function load_hyperopt (line 23) | def load_hyperopt(

FILE: src/python-api/getml/hyperopt/tuning.py
  function _infer_score (line 30) | def _infer_score(pipeline):
  function _make_final_pipeline (line 39) | def _make_final_pipeline(
  function _tune (line 66) | def _tune(
  function _tune_feature_learner (line 143) | def _tune_feature_learner(
  function _tune_predictor (line 177) | def _tune_predictor(
  function tune_feature_learners (line 229) | def tune_feature_learners(
  function tune_predictors (line 333) | def tune_predictors(

FILE: src/python-api/getml/hyperopt/validation.py
  function _validate_bounds (line 29) | def _validate_bounds(subspace, component):
  function _validate_dimension (line 62) | def _validate_dimension(subspace, original_subspace):
  function _validate_components (line 77) | def _validate_components(param_space, original_param_space, components, ...
  function _validate_param_space (line 131) | def _validate_param_space(kwargs):
  function _validate_hyperopt (line 185) | def _validate_hyperopt(supported_params, **kwargs):

FILE: src/python-api/getml/pipeline/column.py
  class Column (line 19) | class Column:

FILE: src/python-api/getml/pipeline/columns.py
  class Columns (line 35) | class Columns:
    method __init__ (line 88) | def __init__(
    method __len__ (line 116) | def __len__(self) -> int:
    method __iter__ (line 121) | def __iter__(self) -> Iterator[Column]:
    method __getitem__ (line 126) | def __getitem__(
    method __repr__ (line 151) | def __repr__(self) -> str:
    method _repr_html_ (line 156) | def _repr_html_(self) -> str:
    method _get_column_importances (line 161) | def _get_column_importances(
    method _format (line 204) | def _format(self) -> _Formatter:
    method _load_columns (line 230) | def _load_columns(self) -> None:
    method _make_columns (line 259) | def _make_columns(self, data: Sequence[Column]) -> Columns:
    method _pivot (line 268) | def _pivot(self, field: str) -> Any:
    method filter (line 276) | def filter(self, conditional: Callable[[Column], bool]) -> Columns:
    method importances (line 298) | def importances(
    method names (line 351) | def names(self) -> List[str]:
    method select (line 365) | def select(
    method sort (line 442) | def sort(
    method to_pandas (line 512) | def to_pandas(self) -> pd.DataFrame:

FILE: src/python-api/getml/pipeline/dialect.py
  function _drop_table (line 137) | def _drop_table(dialect: str, key: str) -> str:
  function _table_pattern (line 158) | def _table_pattern(dialect: str) -> Pattern:

FILE: src/python-api/getml/pipeline/feature.py
  class Feature (line 20) | class Feature:

FILE: src/python-api/getml/pipeline/features.py
  class Features (line 46) | class Features:
    method __init__ (line 92) | def __init__(
    method __repr__ (line 116) | def __repr__(self) -> str:
    method _repr_html_ (line 121) | def _repr_html_(self) -> str:
    method __getitem__ (line 126) | def __getitem__(
    method __iter__ (line 146) | def __iter__(self) -> Iterator[Feature]:
    method __len__ (line 151) | def __len__(self) -> int:
    method _pivot (line 156) | def _pivot(self, field: str) -> List[Any]:
    method _load_features (line 164) | def _load_features(self) -> List[Feature]:
    method _format (line 204) | def _format(self) -> _Formatter:
    method _make_features (line 221) | def _make_features(self, data: Sequence[Feature]) -> Features:
    method _to_pandas (line 230) | def _to_pandas(self) -> pd.DataFrame:
    method correlation (line 253) | def correlation(self) -> List[float]:
    method correlations (line 267) | def correlations(
    method filter (line 330) | def filter(self, conditional: Callable[[Feature], bool]) -> Features:
    method importance (line 353) | def importance(self) -> List[float]:
    method importances (line 367) | def importances(
    method name (line 434) | def name(self) -> List[str]:
    method names (line 449) | def names(self) -> List[str]:
    method sort (line 463) | def sort(
    method to_pandas (line 549) | def to_pandas(self) -> pd.DataFrame:
    method to_sql (line 561) | def to_sql(

FILE: src/python-api/getml/pipeline/helpers.py
  function _attach_empty (line 68) | def _attach_empty(my_list: List, max_length: int, empty_val: Any) -> List:
  function _check_df_types (line 77) | def _check_df_types(
  function _drop (line 116) | def _drop(
  function _edit_table_name (line 148) | def _edit_table_name(table_name: str) -> str:
  function _edit_windows_filename (line 157) | def _edit_windows_filename(file_name: str) -> str:
  function _extract_df_by_name (line 164) | def _extract_df_by_name(
  function _extract_dfs (line 194) | def _extract_dfs(
  function _infer_peripheral (line 209) | def _infer_peripheral(population: Placeholder) -> List[Placeholder]:
  function _handle_loss_function (line 224) | def _handle_loss_function(
  function _make_id (line 262) | def _make_id() -> str:
  function _parse_fe (line 270) | def _parse_fe(
  function _parse_metadata (line 303) | def _parse_metadata(dict_: Dict[str, Any]) -> Metadata:
  function _parse_pred (line 310) | def _parse_pred(
  function _parse_preprocessor (line 350) | def _parse_preprocessor(
  function _print_time_taken (line 394) | def _print_time_taken(begin: float, end: float, msg: str) -> None:
  function _replace_with_nan_maybe (line 425) | def _replace_with_nan_maybe(dict_: Dict[str, Any]) -> Dict[str, Any]:
  function _transform_peripheral (line 438) | def _transform_peripheral(
  function _unlist_maybe (line 466) | def _unlist_maybe(list_: list) -> Union[List[Any], Any]:

FILE: src/python-api/getml/pipeline/helpers2.py
  function _make_dummy (line 24) | def _make_dummy(name: str) -> Pipeline:
  function _from_json (line 34) | def _from_json(json_obj: Dict[str, Any]) -> Pipeline:
  function _refresh_all (line 43) | def _refresh_all() -> List[Pipeline]:
  function list_pipelines (line 63) | def list_pipelines() -> List[str]:
  function load (line 95) | def load(name: str) -> Pipeline:
  function exists (line 111) | def exists(name: str) -> bool:
  function delete (line 133) | def delete(name: str) -> None:

FILE: src/python-api/getml/pipeline/issues.py
  class Issues (line 23) | class Issues:
    method __init__ (line 35) | def __init__(self, data: Sequence[_Issue]) -> None:
    method __iter__ (line 38) | def __iter__(self):
    method __len__ (line 41) | def __len__(self) -> int:
    method __repr__ (line 44) | def __repr__(self) -> str:
    method _repr_html_ (line 47) | def _repr_html_(self) -> str:
    method _format (line 50) | def _format(self) -> _Formatter:
    method info (line 56) | def info(self) -> Issues:
    method warnings (line 68) | def warnings(self) -> Issues:

FILE: src/python-api/getml/pipeline/metadata.py
  class Metadata (line 20) | class Metadata(NamedTuple):
  class AllMetadata (line 37) | class AllMetadata(NamedTuple):

FILE: src/python-api/getml/pipeline/pipeline.py
  class Pipeline (line 110) | class Pipeline:
    method __init__ (line 439) | def __init__(
    method __eq__ (line 592) | def __eq__(self, other: object) -> bool:
    method __repr__ (line 615) | def __repr__(self) -> str:
    method _repr_html_ (line 629) | def _repr_html_(self) -> str:
    method _check_classification_or_regression (line 656) | def _check_classification_or_regression(self) -> bool:
    method _check_whether_fitted (line 709) | def _check_whether_fitted(self) -> None:
    method _close (line 715) | def _close(self, sock: socket.socket) -> None:
    method _get_latest_score (line 732) | def _get_latest_score(self, score: str) -> List[float]:
    method _getml_deserialize (line 751) | def _getml_deserialize(self) -> Dict[str, Any]:
    method _make_object_dict (line 774) | def _make_object_dict(self) -> Dict[str, Any]:
    method _make_score_history (line 793) | def _make_score_history(self) -> List[Union[ClassificationScore, Regre...
    method _make_url (line 830) | def _make_url(self) -> Optional[str]:
    method _parse_cmd (line 839) | def _parse_cmd(self, json_obj: Dict[str, Any]) -> Pipeline:
    method _parse_json_obj (line 897) | def _parse_json_obj(self, all_json_objs: Dict[str, Any]) -> Pipeline:
    method _save (line 927) | def _save(self) -> None:
    method _send (line 940) | def _send(self, additional_tags: Optional[List[str]] = None) -> Pipeline:
    method _transform (line 956) | def _transform(
    method accuracy (line 1015) | def accuracy(self) -> Union[float, List[float]]:
    method auc (line 1030) | def auc(self) -> Union[float, List[float]]:
    method check (line 1044) | def check(
    method columns (line 1124) | def columns(self) -> Columns:
    method cross_entropy (line 1139) | def cross_entropy(self) -> Union[float, List[float]]:
    method delete (line 1153) | def delete(self) -> None:
    method deploy (line 1173) | def deploy(self, deploy: bool) -> None:
    method features (line 1200) | def features(self) -> Features:
    method fit (line 1214) | def fit(
    method fitted (line 1337) | def fitted(self) -> bool:
    method mae (line 1349) | def mae(self) -> Union[float, List[float]]:
    method plots (line 1364) | def plots(self) -> Plots:
    method id (line 1379) | def id(self) -> str:
    method is_classification (line 1392) | def is_classification(self) -> bool:
    method is_regression (line 1404) | def is_regression(self) -> bool:
    method metadata (line 1416) | def metadata(self) -> Optional[AllMetadata]:
    method name (line 1433) | def name(self) -> str:
    method predict (line 1445) | def predict(
    method refresh (line 1534) | def refresh(self) -> Pipeline:
    method rmse (line 1563) | def rmse(self) -> Union[float, List[float]]:
    method rsquared (line 1578) | def rsquared(self) -> Union[float, List[float]]:
    method score (line 1592) | def score(
    method scores (line 1680) | def scores(self) -> Scores:
    method scored (line 1699) | def scored(self) -> bool:
    method tables (line 1713) | def tables(self) -> Tables:
    method targets (line 1728) | def targets(self) -> List[str]:
    method transform (line 1740) | def transform(
    method _validate (line 1850) | def _validate(self) -> None:

FILE: src/python-api/getml/pipeline/plots.py
  class Plots (line 21) | class Plots:
    method __init__ (line 40) | def __init__(self, name: str) -> None:
    method lift_curve (line 48) | def lift_curve(self, target_num: int = 0) -> Tuple[np.ndarray, np.ndar...
    method precision_recall_curve (line 86) | def precision_recall_curve(
    method roc_curve (line 127) | def roc_curve(self, target_num: int = 0) -> Tuple[np.ndarray, np.ndarr...

FILE: src/python-api/getml/pipeline/score.py
  class Score (line 17) | class Score(ABC):
    method __repr__ (line 23) | def __repr__(self):
    method __iter__ (line 26) | def __iter__(self):
  class ClassificationScore (line 34) | class ClassificationScore(Score):
    method __repr__ (line 51) | def __repr__(self) -> str:
  class RegressionScore (line 59) | class RegressionScore(Score):
    method __repr__ (line 76) | def __repr__(self) -> str:

FILE: src/python-api/getml/pipeline/scores_container.py
  class Scores (line 24) | class Scores:
    method __init__ (line 38) | def __init__(self, data: Sequence[Score], latest: Dict[str, List[float...
    method __getitem__ (line 53) | def __getitem__(self, key: Union[int, slice, str]):
    method __iter__ (line 76) | def __iter__(self):
    method __len__ (line 81) | def __len__(self) -> int:
    method __repr__ (line 86) | def __repr__(self) -> str:
    method _repr_html_ (line 91) | def _repr_html_(self) -> str:
    method _format (line 96) | def _format(self) -> _Formatter:
    method accuracy (line 110) | def accuracy(self) -> Union[float, List[float]]:
    method auc (line 119) | def auc(self) -> Union[float, List[float]]:
    method cross_entropy (line 128) | def cross_entropy(self) -> Union[float, List[float]]:
    method filter (line 136) | def filter(self, conditional: Callable[[Score], bool]) -> Scores:
    method mae (line 161) | def mae(self) -> Union[float, List[float]]:
    method rmse (line 173) | def rmse(self) -> Union[float, List[float]]:
    method rsquared (line 185) | def rsquared(self) -> Union[float, List[float]]:
    method sort (line 196) | def sort(

FILE: src/python-api/getml/pipeline/sql_code.py
  class SQLCode (line 30) | class SQLCode:
    method __init__ (line 67) | def __init__(
    method __getitem__ (line 84) | def __getitem__(self, key: Union[int, slice, str]) -> Union[SQLCode, S...
    method __iter__ (line 101) | def __iter__(self) -> Iterator[SQLString]:
    method __len__ (line 104) | def __len__(self) -> int:
    method __repr__ (line 107) | def __repr__(self) -> str:
    method _repr_markdown_ (line 110) | def _repr_markdown_(self) -> str:
    method find (line 113) | def find(self, keyword: str) -> SQLCode:
    method save (line 129) | def save(self, fname: str, split: bool = True, remove: bool = False) -...
    method to_str (line 181) | def to_str(self) -> str:

FILE: src/python-api/getml/pipeline/sql_string.py
  class SQLString (line 14) | class SQLString(str):
    method _repr_markdown_ (line 19) | def _repr_markdown_(self) -> str:

FILE: src/python-api/getml/pipeline/table.py
  class Table (line 16) | class Table:

FILE: src/python-api/getml/pipeline/tables.py
  class Tables (line 27) | class Tables:
    method __init__ (line 60) | def __init__(
    method __getitem__ (line 83) | def __getitem__(
    method __iter__ (line 112) | def __iter__(self) -> Iterator[Table]:
    method __len__ (line 117) | def __len__(self) -> int:
    method __repr__ (line 122) | def __repr__(self) -> str:
    method _repr_html_ (line 127) | def _repr_html_(self) -> str:
    method _format (line 132) | def _format(self) -> _Formatter:
    method _load_tables (line 149) | def _load_tables(self) -> None:
    method _make_tables (line 190) | def _make_tables(self, data: Sequence[Table]) -> Tables:
    method filter (line 200) | def filter(self, conditional: Callable[[Table], bool]) -> Tables:
    method importances (line 222) | def importances(
    method names (line 266) | def names(self) -> List[str]:
    method sort (line 280) | def sort(
    method targets (line 343) | def targets(self) -> List[str]:
    method to_pandas (line 357) | def to_pandas(self) -> pd.DataFrame:

FILE: src/python-api/getml/pipeline/tags.py
  class Tags (line 14) | class Tags(list):
    method __contains__ (line 19) | def __contains__(self, substr: object) -> bool:

FILE: src/python-api/getml/predictors/linear_regression.py
  class LinearRegression (line 27) | class LinearRegression(_Predictor):
    method validate (line 73) | def validate(self, params: Optional[dict] = None):
  function _validate_linear_model_parameters (line 109) | def _validate_linear_model_parameters(parameters: dict):

FILE: src/python-api/getml/predictors/logistic_regression.py
  class LogisticRegression (line 23) | class LogisticRegression(_Predictor):
    method validate (line 71) | def validate(self, params: Optional[dict] = None):

FILE: src/python-api/getml/predictors/predictor.py
  class _Predictor (line 27) | class _Predictor(ABC):
    method __post_init__ (line 36) | def __post_init__(self):
    method __eq__ (line 46) | def __eq__(self, other):
    method __repr__ (line 77) | def __repr__(self):
    method __setattr__ (line 82) | def __setattr__(self, name, value):
    method __str__ (line 92) | def __str__(self):
    method _getml_deserialize (line 98) | def _getml_deserialize(self):
    method type (line 113) | def type(self):
    method validate (line 119) | def validate(self, params=None):

FILE: src/python-api/getml/predictors/scale_gbm_classifier.py
  function _validate_scalegbm_parameters (line 24) | def _validate_scalegbm_parameters(parameters: Dict[str, Any]):
  class ScaleGBMClassifier (line 121) | class ScaleGBMClassifier(_Predictor):
    method validate (line 323) | def validate(self, params: Optional[dict] = None):

FILE: src/python-api/getml/predictors/scale_gbm_regressor.py
  class ScaleGBMRegressor (line 21) | class ScaleGBMRegressor(_Predictor):
    method validate (line 221) | def validate(self, params=None):

FILE: src/python-api/getml/predictors/xgboost_classifier.py
  function _validate_xgboost_parameters (line 26) | def _validate_xgboost_parameters(parameters: Dict[str, Any]):
  class XGBoostClassifier (line 235) | class XGBoostClassifier(_Predictor):
    method validate (line 550) | def validate(self, params: Optional[dict] = None):

FILE: src/python-api/getml/predictors/xgboost_regressor.py
  class XGBoostRegressor (line 23) | class XGBoostRegressor(_Predictor):
    method validate (line 336) | def validate(self, params: Optional[dict] = None):

FILE: src/python-api/getml/preprocessors/category_trimmer.py
  class CategoryTrimmer (line 21) | class CategoryTrimmer(_Preprocessor):
    method validate (line 54) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/preprocessors/email_domain.py
  class EmailDomain (line 21) | class EmailDomain(_Preprocessor):
    method validate (line 54) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/preprocessors/imputation.py
  class Imputation (line 21) | class Imputation(_Preprocessor):
    method validate (line 53) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/preprocessors/mapping.py
  class Mapping (line 26) | class Mapping(_Preprocessor):
    method validate (line 85) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/preprocessors/preprocessor.py
  class _Preprocessor (line 25) | class _Preprocessor(ABC):
    method __post_init__ (line 30) | def __post_init__(self: "_Preprocessor"):
    method __eq__ (line 38) | def __eq__(self, other):
    method _getml_deserialize (line 61) | def _getml_deserialize(self):
    method __repr__ (line 73) | def __repr__(self):
    method __setattr__ (line 78) | def __setattr__(self, name, value):
    method __str__ (line 88) | def __str__(self):
    method _supported_params (line 95) | def _supported_params(self) -> List[str]:
    method type (line 101) | def type(self):
    method validate (line 107) | def validate(self, params=None):

FILE: src/python-api/getml/preprocessors/seasonal.py
  class Seasonal (line 21) | class Seasonal(_Preprocessor):
    method validate (line 85) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/preprocessors/substring.py
  class Substring (line 21) | class Substring(_Preprocessor):
    method validate (line 81) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/preprocessors/text_field_splitter.py
  class TextFieldSplitter (line 24) | class TextFieldSplitter(_Preprocessor):
    method validate (line 55) | def validate(self, params: Optional[Dict[str, Any]] = None) -> None:

FILE: src/python-api/getml/preprocessors/validate.py
  function _validate (line 14) | def _validate(instance, params):

FILE: src/python-api/getml/project/__init__.py
  function __dir__ (line 31) | def __dir__():
  class ProjectModule (line 41) | class ProjectModule(ModuleType):
    method __repr__ (line 42) | def __repr__(self):

FILE: src/python-api/getml/project/attrs.py
  function __getattr__ (line 31) | def __getattr__(key):
  function module_function (line 45) | def module_function(func):
  function module_prop (line 50) | def module_prop(prop):
  function _data_frames (line 56) | def _data_frames():
  function _hyperopts (line 61) | def _hyperopts():
  function _pipelines (line 66) | def _pipelines():
  function _name (line 71) | def _name():
  function load (line 76) | def load(bundle: str, name: Optional[str] = None) -> None:
  function delete (line 90) | def delete() -> None:
  function restart (line 99) | def restart() -> None:
  function save (line 108) | def save(
  function suspend (line 135) | def suspend() -> None:
  function switch (line 143) | def switch(name: str) -> None:

FILE: src/python-api/getml/project/containers/data_frames.py
  class DataFrames (line 25) | class DataFrames:
    method __init__ (line 34) | def __init__(self, data=None):
    method __getitem__ (line 45) | def __getitem__(self, key):
    method __len__ (line 63) | def __len__(self):
    method __repr__ (line 68) | def __repr__(self):
    method _repr_html_ (line 82) | def _repr_html_(self):
    method _format (line 96) | def _format(self):
    method delete (line 109) | def delete(self) -> None:
    method in_memory (line 120) | def in_memory(self) -> List[str]:
    method filter (line 131) | def filter(self, conditional: Callable) -> DataFrames:
    method load (line 153) | def load(self) -> None:
    method on_disk (line 165) | def on_disk(self) -> List[str]:
    method retrieve (line 173) | def retrieve(self):
    method save (line 182) | def save(self) -> None:
    method sort (line 192) | def sort(self, key: Callable, descending: bool = False) -> DataFrames:
    method unload (line 217) | def unload(self) -> None:

FILE: src/python-api/getml/project/containers/hyperopts.py
  class Hyperopts (line 24) | class Hyperopts:
    method __init__ (line 32) | def __init__(self, data=None):
    method __getitem__ (line 42) | def __getitem__(self, key):
    method __len__ (line 58) | def __len__(self):
    method __repr__ (line 63) | def __repr__(self):
    method _repr_html_ (line 71) | def _repr_html_(self):
    method _format (line 79) | def _format(self):
    method filter (line 91) | def filter(self, conditional: Callable) -> Hyperopts:
    method sort (line 114) | def sort(self, key: Callable, descending: bool = False) -> Hyperopts:

FILE: src/python-api/getml/project/containers/pipelines.py
  class Pipelines (line 24) | class Pipelines:
    method __init__ (line 50) | def __init__(self, data=None):
    method __getitem__ (line 60) | def __getitem__(self, key):
    method __len__ (line 76) | def __len__(self):
    method __repr__ (line 81) | def __repr__(self):
    method _repr_html_ (line 89) | def _repr_html_(self):
    method _contains_regresion_pipelines (line 97) | def _contains_regresion_pipelines(self):
    method _contains_classification_pipelines (line 103) | def _contains_classification_pipelines(self):
    method _format (line 108) | def _format(self):
    method sort (line 187) | def sort(self, key: Callable, descending: bool = False) -> Pipelines:
    method filter (line 212) | def filter(self, conditional: Callable) -> Pipelines:

FILE: src/python-api/getml/spark.py
  function execute (line 26) | def execute(spark: pyspark.sql.session.SparkSession, fname: str) -> None:

FILE: src/python-api/getml/sqlite3/connect.py
  function connect (line 73) | def connect(database: str) -> sqlite3.Connection:

FILE: src/python-api/getml/sqlite3/contains.py
  function _contains (line 16) | def _contains(textfield, keyword):

FILE: src/python-api/getml/sqlite3/count_above_mean.py
  class _CountAboveMean (line 20) | class _CountAboveMean:
    method __init__ (line 21) | def __init__(self):
    method step (line 24) | def step(self, value: Optional[float]):
    method finalize (line 31) | def finalize(self) -> float:

FILE: src/python-api/getml/sqlite3/count_below_mean.py
  class _CountBelowMean (line 20) | class _CountBelowMean:
    method __init__ (line 21) | def __init__(self):
    method step (line 24) | def step(self, value: Optional[float]):
    method finalize (line 31) | def finalize(self) -> float:

FILE: src/python-api/getml/sqlite3/count_distinct_over_count.py
  class _CountDistinctOverCount (line 20) | class _CountDistinctOverCount:
    method __init__ (line 21) | def __init__(self):
    method step (line 25) | def step(self, value: Optional[float]):
    method finalize (line 33) | def finalize(self) -> Optional[float]:

FILE: src/python-api/getml/sqlite3/email_domain.py
  function _email_domain (line 14) | def _email_domain(textfield):

FILE: src/python-api/getml/sqlite3/ewma.py
  class _EWMA (line 20) | class _EWMA:
    method __init__ (line 32) | def __init__(self, half_life):
    method step (line 36) | def step(self, value, time_stamp):
    method finalize (line 43) | def finalize(self):
  class _EWMA1S (line 58) | class _EWMA1S(_EWMA):
    method __init__ (line 59) | def __init__(self):
  class _EWMA1M (line 66) | class _EWMA1M(_EWMA):
    method __init__ (line 67) | def __init__(self):
  class _EWMA1H (line 74) | class _EWMA1H(_EWMA):
    method __init__ (line 75) | def __init__(self):
  class _EWMA1D (line 82) | class _EWMA1D(_EWMA):
    method __init__ (line 83) | def __init__(self):
  class _EWMA7D (line 90) | class _EWMA7D(_EWMA):
    method __init__ (line 91) | def __init__(self):
  class _EWMA30D (line 98) | class _EWMA30D(_EWMA):
    method __init__ (line 99) | def __init__(self):
  class _EWMA90D (line 106) | class _EWMA90D(_EWMA):
    method __init__ (line 107) | def __init__(self):
  class _EWMA365D (line 114) | class _EWMA365D(_EWMA):
    method __init__ (line 115) | def __init__(self):

FILE: src/python-api/getml/sqlite3/ewma_trend.py
  class _EWMATrend (line 22) | class _EWMATrend:
    method __init__ (line 34) | def __init__(self, half_life):
    method step (line 38) | def step(self, value, time_stamp):
    method finalize (line 45) | def finalize(self) -> Optional[float]:
  class _EWMATrend1S (line 78) | class _EWMATrend1S(_EWMATrend):
    method __init__ (line 79) | def __init__(self):
  class _EWMATrend1M (line 86) | class _EWMATrend1M(_EWMATrend):
    method __init__ (line 87) | def __init__(self):
  class _EWMATrend1H (line 94) | class _EWMATrend1H(_EWMATrend):
    method __init__ (line 95) | def __init__(self):
  class _EWMATrend1D (line 102) | class _EWMATrend1D(_EWMATrend):
    method __init__ (line 103) | def __init__(self):
  class _EWMATrend7D (line 110) | class _EWMATrend7D(_EWMATrend):
    method __init__ (line 111) | def __init__(self):
  class _EWMATrend30D (line 118) | class _EWMATrend30D(_EWMATrend):
    method __init__ (line 119) | def __init__(self):
  class _EWMATrend90D (line 126) | class _EWMATrend90D(_EWMATrend):
    method __init__ (line 127) | def __init__(self):
  class _EWMATrend365D (line 134) | class _EWMATrend365D(_EWMATrend):
    method __init__ (line 135) | def __init__(self):

FILE: src/python-api/getml/sqlite3/execute.py
  function _retrieve_scripts (line 24) | def _retrieve_scripts(folder: str, file_type: str) -> List[str]:
  function execute (line 37) | def execute(conn: sqlite3.Connection, fname: str) -> None:

FILE: src/python-api/getml/sqlite3/first.py
  function _is_earlier (line 20) | def _is_earlier(tup1, tup2):
  class _First (line 29) | class _First:
    method __init__ (line 30) | def __init__(self):
    method step (line 33) | def step(self, value, time_stamp):
    method finalize (line 40) | def finalize(self):

FILE: src/python-api/getml/sqlite3/get_word.py
  function _get_word (line 18) | def _get_word(textfield, i):

FILE: src/python-api/getml/sqlite3/helpers.py
  function _try_import_scipy (line 23) | def _try_import_scipy():
  function _create_table (line 35) | def _create_table(conn, table_name, schema, if_exists="append"):
  function _generate_schema (line 54) | def _generate_schema(name, sql_types):
  function _get_colnames (line 83) | def _get_colnames(conn, table_name):
  function _get_num_columns (line 92) | def _get_num_columns(conn, table_name):
  function _is_int_type (line 99) | def _is_int_type(coltype):
  function _log (line 117) | def _log(msg):
  function _not_null (line 125) | def _not_null(value: Optional[float]):
  function _table_exists (line 132) | def _table_exists(conn, table_name):

FILE: src/python-api/getml/sqlite3/kurtosis.py
  class _Kurtosis (line 18) | class _Kurtosis:
    method __init__ (line 19) | def __init__(self):
    method step (line 23) | def step(self, value):
    method finalize (line 30) | def finalize(self):

FILE: src/python-api/getml/sqlite3/last.py
  function _is_later (line 20) | def _is_later(tup1, tup2):
  class _Last (line 29) | class _Last:
    method __init__ (line 30) | def __init__(self):
    method step (line 33) | def step(self, value, time_stamp):
    method finalize (line 40) | def finalize(self):

FILE: src/python-api/getml/sqlite3/median.py
  class _Median (line 18) | class _Median:
    method __init__ (line 19) | def __init__(self):
    method step (line 22) | def step(self, value):
    method finalize (line 29) | def finalize(self):

FILE: src/python-api/getml/sqlite3/mode.py
  class _Mode (line 16) | class _Mode:
    method __init__ (line 17) | def __init__(self):
    method step (line 21) | def step(self, value):
    method finalize (line 28) | def finalize(self):

FILE: src/python-api/getml/sqlite3/num_max.py
  class _NumMax (line 20) | class _NumMax:
    method __init__ (line 21) | def __init__(self):
    method step (line 24) | def step(self, value: Optional[float]):
    method finalize (line 31) | def finalize(self) -> Optional[float]:

FILE: src/python-api/getml/sqlite3/num_min.py
  class _NumMin (line 20) | class _NumMin:
    method __init__ (line 21) | def __init__(self):
    method step (line 24) | def step(self, value: Optional[float]):
    method finalize (line 31) | def finalize(self) -> Optional[float]:

FILE: src/python-api/getml/sqlite3/num_words.py
  function _num_words (line 16) | def _num_words(textfield):

FILE: src/python-api/getml/sqlite3/quantiles.py
  class _Quantile (line 22) | class _Quantile:
    method __init__ (line 23) | def __init__(self, quantile: float):
    method step (line 27) | def step(self, value: Optional[float]):
    method finalize (line 34) | def finalize(self) -> float:
  class _Q1 (line 44) | class _Q1(_Quantile):
    method __init__ (line 45) | def __init__(self):
  class _Q5 (line 52) | class _Q5(_Quantile):
    method __init__ (line 53) | def __init__(self):
  class _Q10 (line 60) | class _Q10(_Quantile):
    method __init__ (line 61) | def __init__(self):
  class _Q25 (line 68) | class _Q25(_Quantile):
    method __init__ (line 69) | def __init__(self):
  class _Q75 (line 76) | class _Q75(_Quantile):
    method __init__ (line 77) | def __init__(self):
  class _Q90 (line 84) | class _Q90(_Quantile):
    method __init__ (line 85) | def __init__(self):
  class _Q95 (line 92) | class _Q95(_Quantile):
    method __init__ (line 93) | def __init__(self):
  class _Q99 (line 100) | class _Q99(_Quantile):
    method __init__ (line 101) | def __init__(self):

FILE: src/python-api/getml/sqlite3/read_csv.py
  function _read_csv_file (line 29) | def _read_csv_file(fname, sep, quotechar, header, skip=0):
  function read_csv (line 40) | def read_csv(

FILE: src/python-api/getml/sqlite3/read_list.py
  function read_list (line 21) | def read_list(conn: sqlite3.Connection, table_name: str, data: List[List...

FILE: src/python-api/getml/sqlite3/read_pandas.py
  function read_pandas (line 27) | def read_pandas(

FILE: src/python-api/getml/sqlite3/skew.py
  class _Skew (line 18) | class _Skew:
    method __init__ (line 19) | def __init__(self):
    method step (line 23) | def step(self, value):
    method finalize (line 30) | def finalize(self):

FILE: src/python-api/getml/sqlite3/sniff_csv.py
  function sniff_csv (line 24) | def sniff_csv(

FILE: src/python-api/getml/sqlite3/sniff_pandas.py
  function sniff_pandas (line 24) | def sniff_pandas(table_name: str, data_frame: pd.DataFrame) -> str:

FILE: src/python-api/getml/sqlite3/split_text_field.py
  function _split_text_field (line 18) | def _split_text_field(textfield):

FILE: src/python-api/getml/sqlite3/stddev.py
  class _Stddev (line 18) | class _Stddev:
    method __init__ (line 19) | def __init__(self):
    method step (line 22) | def step(self, value):
    method finalize (line 29) | def finalize(self):

FILE: src/python-api/getml/sqlite3/time_since_first_maximum.py
  function _is_better (line 20) | def _is_better(tup1, tup2):
  class _TimeSinceFirstMaximum (line 33) | class _TimeSinceFirstMaximum:
    method __init__ (line 34) | def __init__(self):
    method step (line 37) | def step(self, value, time_stamp):
    method finalize (line 44) | def finalize(self):

FILE: src/python-api/getml/sqlite3/time_since_first_minimum.py
  function _is_better (line 20) | def _is_better(tup1, tup2):
  class _TimeSinceFirstMinimum (line 33) | class _TimeSinceFirstMinimum:
    method __init__ (line 34) | def __init__(self):
    method step (line 37) | def step(self, value, time_stamp):
    method finalize (line 44) | def finalize(self):

FILE: src/python-api/getml/sqlite3/time_since_last_maximum.py
  function _is_better (line 20) | def _is_better(tup1, tup2):
  class _TimeSinceLastMaximum (line 33) | class _TimeSinceLastMaximum:
    method __init__ (line 34) | def __init__(self):
    method step (line 37) | def step(self, value, time_stamp):
    method finalize (line 44) | def finalize(self):

FILE: src/python-api/getml/sqlite3/time_since_last_minimum.py
  function _is_better (line 20) | def _is_better(tup1, tup2):
  class _TimeSinceLastMinimum (line 33) | class _TimeSinceLastMinimum:
    method __init__ (line 34) | def __init__(self):
    method step (line 37) | def step(self, value, time_stamp):
    method finalize (line 44) | def finalize(self):

FILE: src/python-api/getml/sqlite3/to_list.py
  function _handle_query (line 21) | def _handle_query(query):
  function to_list (line 30) | def to_list(conn: sqlite3.Connection, query: str) -> Tuple[List[str], Li...

FILE: src/python-api/getml/sqlite3/to_pandas.py
  function to_pandas (line 22) | def to_pandas(conn: sqlite3.Connection, query: str) -> pd.DataFrame:

FILE: src/python-api/getml/sqlite3/trend.py
  class _Trend (line 20) | class _Trend:
    method __init__ (line 21) | def __init__(self):
    method step (line 24) | def step(self, value, time_stamp):
    method finalize (line 31) | def finalize(self):

FILE: src/python-api/getml/sqlite3/var.py
  class _Var (line 18) | class _Var:
    method __init__ (line 19) | def __init__(self):
    method step (line 22) | def step(self, value):
    method finalize (line 29) | def finalize(self):

FILE: src/python-api/getml/sqlite3/variation_coefficient.py
  class _VariationCoefficient (line 18) | class _VariationCoefficient:
    method __init__ (line 19) | def __init__(self):
    method step (line 22) | def step(self, value):
    method finalize (line 29) | def finalize(self):

FILE: src/python-api/getml/utilities/formatting/cell_formatter.py
  class CellFormatter (line 12) | class CellFormatter(string.Formatter):
    method format_field (line 29) | def format_field(self, value, format_spec):
    method _format_float_decimal_point (line 40) | def _format_float_decimal_point(self, value, format_spec):
    method _format_string_decimal_point (line 58) | def _format_string_decimal_point(self, value, format_spec):

FILE: src/python-api/getml/utilities/formatting/column_formatter.py
  class _ColumnFormatter (line 26) | class _ColumnFormatter(_DataFrameFormatter):
    method __init__ (line 33) | def __init__(self, col, num_head=max_rows // 2, num_tail=max_rows // 2):
    method _render_footer_lines (line 110) | def _render_footer_lines(self, footer):
    method _render_body (line 125) | def _render_body(self, as_html=False):

FILE: src/python-api/getml/utilities/formatting/data_frame_formatter.py
  function _get_subroles (line 59) | def _get_subroles(col):
  function _parse_subrole (line 84) | def _parse_subrole(subrole):
  function _structure_subroles (line 92) | def _structure_subroles(df):
  function _infer_resolution (line 106) | def _infer_resolution(cells):
  function _max_digits (line 121) | def _max_digits(cells):
  class _DataFrameFormatter (line 131) | class _DataFrameFormatter(_Formatter):
    method __init__ (line 142) | def __init__(self, df, num_head=max_rows // 2, num_tail=max_rows // 2):
    method __len__ (line 213) | def __len__(self):
    method _render_footer_lines (line 218) | def _render_footer_lines(self, footer):
    method _add_index (line 239) | def _add_index(self, headers):
    method _render_html (line 250) | def _render_html(self, footer=None):
    method _render_body (line 271) | def _render_body(self, as_html=False):
    method _render_string (line 291) | def _render_string(self, footer=None):
    method roles (line 299) | def roles(self):
  class _DataFrameFormatColumn (line 306) | class _DataFrameFormatColumn(_FormatColumn):
    method __init__ (line 315) | def __init__(self, *args, n_cells, role=None, **kwargs):
    method __len__ (line 330) | def __len__(self):
    method _format_cells (line 335) | def _format_cells(self):
    method _clip (line 351) | def _clip(self):
    method _parse_cells (line 366) | def _parse_cells(self):
    method default_cell_template (line 401) | def default_cell_template(self):
    method default_header_template (line 418) | def default_header_template(self):

FILE: src/python-api/getml/utilities/formatting/ellipsis.py
  class _Ellipsis (line 14) | class _Ellipsis(str):
    method __repr__ (line 19) | def __repr__(self):

FILE: src/python-api/getml/utilities/formatting/formatter.py
  function _clip_lines (line 41) | def _clip_lines(lines, max_cols):
  function _expand_cells (line 56) | def _expand_cells(cells, depths, width=4):
  function _clip_cell (line 74) | def _clip_cell(cell, width):
  function _get_depth (line 83) | def _get_depth(cell):
  function _get_width (line 90) | def _get_width(cell, decimal_places=None):
  function _infer_precision (line 103) | def _infer_precision(cells):
  function _split_lines (line 128) | def _split_lines(lines, margin, max_width):
  function _truncate_line (line 152) | def _truncate_line(line, margin, max_width, template="{}"):
  class _Formatter (line 170) | class _Formatter:
    method __init__ (line 186) | def __init__(self, headers, rows):
    method __getitem__ (line 210) | def __getitem__(self, key):
    method __len__ (line 229) | def __len__(self):
    method __repr__ (line 234) | def __repr__(self):
    method _pivot (line 244) | def _pivot(self):
    method _add_index (line 250) | def _add_index(self):
    method _remove_index (line 261) | def _remove_index(self):
    method _render_head (line 267) | def _render_head(self):
    method _render_body (line 290) | def _render_body(self, as_html=False):
    method _render_string (line 311) | def _render_string(self):
    method _render_html (line 326) | def _render_html(self):
    method index (line 350) | def index(self):
  class _FormatColumn (line 361) | class _FormatColumn:
    method __init__ (line 366) | def __init__(self, headers, cells, max_cells, depths=None, index=None):
    method __len__ (line 385) | def __len__(self):
    method __repr__ (line 390) | def __repr__(self):
    method _expand_cells (line 408) | def _expand_cells(self):
    method _format_cells (line 413) | def _format_cells(self):
    method _instances_are (line 461) | def _instances_are(self, type_):
    method _unnest (line 468) | def _unnest(self):
    method _unnest_and_strip_html (line 475) | def _unnest_and_strip_html(self):
    method default_cell_template (line 486) | def default_cell_template(self):
    method default_header_template (line 502) | def default_header_template(self):
    method _clip (line 517) | def _clip(self, ellipses="...") -> _FormatColumn:
    method dtype (line 533) | def dtype(self):
    method name (line 557) | def name(self):
    method nested (line 566) | def nested(self):
    method width (line 578) | def width(self):
  class _IndexColumn (line 592) | class _IndexColumn(_FormatColumn):
    method __init__ (line 593) | def __init__(self, headers, n_cells, length):
    method _clip (line 603) | def _clip(self):
    method name (line 609) | def name(self):

FILE: src/python-api/getml/utilities/formatting/helpers.py
  function _get_column_content (line 20) | def _get_column_content(col, coltype, start, length):
  function _get_data_frame_content (line 64) | def _get_data_frame_content(name, start, length):
  function _get_view_content (line 108) | def _get_view_content(start, length, cols):

FILE: src/python-api/getml/utilities/formatting/signature_formatter.py
  function _split_value (line 25) | def _split_value(value, indent, max_width, initial_indent=None):
  function _format_list (line 51) | def _format_list(values, indent, value_indent, template):
  function _remove_private (line 61) | def _remove_private(dict):
  class _SignatureFormatter (line 68) | class _SignatureFormatter:
    method __init__ (line 83) | def __init__(self, obj=None, data=None):
    method _format_pep8 (line 101) | def _format_pep8(self, suppress_none=False):
    method _format_black (line 140) | def _format_black(self, suppress_none=False):
    method _format_compact (line 175) | def _format_compact(self, suppress_none=False):
    method _format (line 192) | def _format(self, suppress_none=False, style=None):
    method indentation (line 211) | def indentation(self):
    method value_indentation (line 217) | def value_indentation(self):
    method params_formatted (line 223) | def params_formatted(self):

FILE: src/python-api/getml/utilities/formatting/view_formatter.py
  class _ViewFormatter (line 29) | class _ViewFormatter(_DataFrameFormatter):
    method __init__ (line 36) | def __init__(self, view, num_head=max_rows):
    method _add_index (line 100) | def _add_index(self, headers):
    method _render_footer_lines (line 114) | def _render_footer_lines(self, footer):
  class _ViewFormatColumn (line 128) | class _ViewFormatColumn(_DataFrameFormatColumn):
    method _clip (line 131) | def _clip(self, placeholder="...") -> _FormatColumn:

FILE: src/python-api/getml/utilities/progress.py
  function _is_emacs_kernel (line 39) | def _is_emacs_kernel() -> bool:
  function _is_jupyter (line 54) | def _is_jupyter() -> bool:
  function _is_vscode (line 58) | def _is_vscode() -> bool:
  function _is_jupyter_without_ipywidgets (line 62) | def _is_jupyter_without_ipywidgets() -> bool:
  function _should_enforce_textual_output (line 75) | def _should_enforce_textual_output() -> bool:
  function _should_enforce_monochrome_output (line 89) | def _should_enforce_monochrome_output() -> bool:
  function _should_show_ipywidgets_warning (line 97) | def _should_show_ipywidgets_warning() -> bool:
  function _should_disable_progress_bars (line 103) | def _should_disable_progress_bars() -> bool:
  function _pad_description (line 152) | def _pad_description(description: str) -> str:
  class ProgressBarStyle (line 160) | class ProgressBarStyle(Enum):
  class ProgressBarColumns (line 174) | class ProgressBarColumns(Enum):
  class ProgressType (line 201) | class ProgressType(Enum):
    method columns (line 210) | def columns(self):
  class Progress (line 214) | class Progress:
    method __init__ (line 221) | def __init__(
    method add_task (line 254) | def add_task(
    method advance (line 276) | def advance(self, task_id: TaskID, *, steps: float = 1):
    method console (line 281) | def console(self) -> Console:
    method finish (line 284) | def finish(self, task_id: TaskID, refresh: bool = True):
    method finish_all (line 290) | def finish_all(self):
    method finished (line 295) | def finished(self):
    method live (line 299) | def live(self):
    method new_task (line 302) | def new_task(
    method new_task_and_reconstruct_renderable_maybe (line 319) | def new_task_and_reconstruct_renderable_maybe(
    method refresh (line 340) | def refresh(self):
    method _reconstruct_renderable (line 343) | def _reconstruct_renderable(self):
    method _reset_description (line 352) | def _reset_description(self, task_id: TaskID):
    method _set_finished_time (line 360) | def _set_finished_time(self, task_id: TaskID):
    method set_all_failed (line 365) | def set_all_failed(self):
    method tasks (line 371) | def tasks(self):
    method task_ids (line 375) | def task_ids(self):
    method start (line 378) | def start(self):
    method stop (line 381) | def stop(self, failed: bool = False):
    method update (line 388) | def update(
    method __enter__ (line 409) | def __enter__(self) -> Progress:
    method __exit__ (line 415) | def __exit__(
  class ProgressEventHandler (line 426) | class ProgressEventHandler:
    method __init__ (line 427) | def __init__(self, progress: Progress):
    method live_renderable (line 431) | def live_renderable(self, event: Event) -> Iterator[Live]:
    method create_or_update_progress (line 437) | def create_or_update_progress(self, event: Event):
  function show_progress (line 465) | def show_progress(event: Event):

FILE: src/python-api/hatch_build.py
  class PlatformTag (line 18) | class PlatformTag(BuildHookInterface):
    method initialize (line 19) | def initialize(self, version: str, build_data: dict) -> None:

FILE: src/python-api/tests/conftest.py
  function pytest_addoption (line 17) | def pytest_addoption(parser):
  function pytest_collection_modifyitems (line 26) | def pytest_collection_modifyitems(config, items):
  function change_workdir (line 41) | def change_workdir(request, monkeypatch):
  function workdir (line 54) | def workdir(dir: str):
  function getml_engine (line 64) | def getml_engine():
  function getml_project (line 80) | def getml_project(request, getml_engine):
  function csv_file_with_changing_type_in_row_2 (line 92) | def csv_file_with_changing_type_in_row_2():
  function df_or_view (line 109) | def df_or_view(request, df):
  function df (line 142) | def df():
  function view (line 169) | def view(df):
  function tmpdir (line 195) | def tmpdir():
  function timestamp_with_utc_tz_batch (line 202) | def timestamp_with_utc_tz_batch():
  function timestamp_with_non_utc_tz_batch (line 215) | def timestamp_with_non_utc_tz_batch():
  function timestamp_without_tz_batch (line 228) | def timestamp_without_tz_batch():
  function int_batch (line 236) | def int_batch():
  function decimal_batch (line 254) | def decimal_batch():
  function timestamp_batch (line 262) | def timestamp_batch(

FILE: src/python-api/tests/data/conftest.py
  function parquet_file (line 17) | def parquet_file():
  function csv_file (line 25) | def csv_file():
  function csv_file_custom_ts (line 44) | def csv_file_custom_ts():
  function json_payload (line 63) | def json_payload():
  function pandas_df (line 76) | def pandas_df():
  function arrow_table (line 86) | def arrow_table(pandas_df):
  function df1 (line 99) | def df1():
  function df2 (line 119) | def df2():
  function df3 (line 141) | def df3():
  function duckdb_conn (line 160) | def duckdb_conn():
  function prepopulated_duckdb_conn (line 166) | def prepopulated_duckdb_conn(duckdb_conn):

FILE: src/python-api/tests/data/test_arrow_type_casts.py
  function test_from_arrow_utc_timestamp (line 12) | def test_from_arrow_utc_timestamp(getml_project, timestamp_with_utc_tz_b...
  function test_from_arrow_non_utc_timestamp (line 36) | def test_from_arrow_non_utc_timestamp(getml_project, timestamp_with_non_...
  function test_from_arrow_no_tz_timestamp (line 49) | def test_from_arrow_no_tz_timestamp(getml_project, timestamp_without_tz_...
  function test_from_arrow_int (line 63) | def test_from_arrow_int(getml_project, int_batch):

FILE: src/python-api/tests/data/test_columns.py
  function test_column_eq_missmatch (line 19) | def test_column_eq_missmatch(getml_project, df_or_view):
  function test_column_operators (line 33) | def test_column_operators(getml_project):
  function test_as_ts (line 232) | def test_as_ts(getml_project, df):

FILE: src/python-api/tests/data/test_concat.py
  function make_df1 (line 13) | def make_df1():
  function make_df2 (line 35) | def make_df2():
  function test_concat (line 59) | def test_concat(getml_project):
  function test_concat_views (line 69) | def test_concat_views(getml_project):

FILE: src/python-api/tests/data/test_data_frame.py
  function test_from_pandas (line 20) | def test_from_pandas(getml_project, pandas_df):
  function test_from_pandas_with_roles (line 30) | def test_from_pandas_with_roles(getml_project, pandas_df):
  function test_from_pandas_round_trip_roles (line 47) | def test_from_pandas_round_trip_roles(getml_project, pandas_df):
  function test_to_pandas (line 63) | def test_to_pandas(getml_project, pandas_df):
  function test_to_pandas_metadata (line 76) | def test_to_pandas_metadata(getml_project, df):
  function test_from_arrow (line 87) | def test_from_arrow(getml_project, arrow_table):
  function test_from_arrow_with_roles (line 97) | def test_from_arrow_with_roles(getml_project, arrow_table):
  function test_from_arrow_round_trip_roles (line 115) | def test_from_arrow_round_trip_roles(getml_project, arrow_table):
  function test_to_arrow (line 131) | def test_to_arrow(getml_project, arrow_table):
  function test_to_arrow_metadata (line 144) | def test_to_arrow_metadata(getml_project, df):
  function test_read_pandas (line 156) | def test_read_pandas(getml_project, pandas_df):
  function test_from_db (line 178) | def test_from_db():
  function test_from_json (line 185) | def test_from_json(getml_project, json_payload):
  function test_from_dict (line 194) | def test_from_dict(getml_project):
  function test_from_csv (line 208) | def test_from_csv(getml_project, csv_file):
  function test_list_data_frames (line 217) | def test_list_data_frames(getml_project, pandas_df):
  function test_load_data_frames (line 233) | def test_load_data_frames(getml_project, pandas_df):
  function test_set_roles (line 242) | def test_set_roles(getml_project):
  function test_compare (line 272) | def test_compare(getml_project):
  function test_print (line 294) | def test_print(getml_project):
  function test_delete (line 302) | def test_delete(getml_project):

FILE: src/python-api/tests/data/test_data_frames.py
  function make_populations (line 17) | def make_populations(base, percentiles):
  function test_data_frames (line 32) | def test_data_frames(getml_project):

FILE: src/python-api/tests/data/test_from_query.py
  function test_from_query (line 59) | def test_from_query(

FILE: src/python-api/tests/data/test_io_read.py
  function test_read_parquet (line 10) | def test_read_parquet(getml_project, parquet_file):
  function test_read_parquet_round_trip_roles (line 19) | def test_read_parquet_round_trip_roles(getml_project, df):
  function test_read_csv (line 26) | def test_read_csv(getml_project, csv_file):
  function test_read_csv_num_lines_sniffed_deprecation_warning (line 40) | def test_read_csv_num_lines_sniffed_deprecation_warning(getml_project, c...
  function test_read_csv_custom_ts (line 45) | def test_read_csv_custom_ts(getml_project, csv_file_custom_ts):
  function test_read_csv_changing_type_in_row_2 (line 53) | def test_read_csv_changing_type_in_row_2(

FILE: src/python-api/tests/data/test_io_stream.py
  function test_read_arrow_stream (line 5) | def test_read_arrow_stream(getml_project, df):

FILE: src/python-api/tests/data/test_io_write.py
  function test_write_csv (line 10) | def test_write_csv(getml_project, tmpdir):
  function test_write_parquet (line 26) | def test_write_parquet(getml_project, tmpdir):
  function test_to_parquet_metadata (line 43) | def test_to_parquet_metadata(getml_project, df, tmpdir):

FILE: src/python-api/tests/data/test_save_and_load.py
  function load_if_needed (line 11) | def load_if_needed(name):
  function make_target_columns (line 25) | def make_target_columns(data_frame, class_label):
  function test_save_and_load (line 33) | def test_save_and_load(getml_project):

FILE: src/python-api/tests/data/test_subsetting.py
  function test_boolean_subsetting (line 8) | def test_boolean_subsetting(getml_project, df_or_view):
  function test_scalar_subsetting (line 25) | def test_scalar_subsetting(getml_project, df_or_view):
  function test_slicing (line 35) | def test_slicing(getml_project, df_or_view):
  function test_by_column (line 52) | def test_by_column(getml_project, df_or_view):

FILE: src/python-api/tests/datasets/test_base.py
  function test_load_loans (line 17) | def test_load_loans(getml_project):
  function test_load_occupancy (line 45) | def test_load_occupancy(getml_project):
  function test_load_interstate94 (line 61) | def test_load_interstate94(getml_project):
  function test_load_air_pollution (line 73) | def test_load_air_pollution(getml_project):

FILE: src/python-api/tests/engine/test_launch.py
  function test_launch_non_native (line 17) | def test_launch_non_native(mock_platform_system, mock_getml_is_monitor_a...
  function test_launch (line 44) | def test_launch():
  function test_launch_quiet (line 66) | def test_launch_quiet(capsys):

FILE: src/python-api/tests/engine/test_set_project.py
  function test_set_project_implicit_launch (line 23) | def test_set_project_implicit_launch(request):

FILE: src/python-api/tests/engine/test_shutdown.py
  function test_shutdown (line 33) | def test_shutdown(loop):

FILE: src/python-api/tests/pipeline/test_adventure_works.py
  function test_adventure_works (line 19) | def test_adventure_works(getml_project):
  function _load_if_needed (line 63) | def _load_if_needed(name: str, conn: getml.database.Connection):
  function _make_product (line 77) | def _make_product(conn: getml.database.Connection) -> getml.DataFrame:
  function _make_sales_order_detail (line 91) | def _make_sales_order_detail(conn: getml.database.Connection) -> getml.D...
  function _make_sales_order_header (line 105) | def _make_sales_order_header(conn: getml.database.Connection) -> getml.D...
  function _calculate_churn (line 144) | def _calculate_churn(sales_order_header: getml.DataFrame) -> np.ndarray:
  function _make_sales_order_reason (line 180) | def _make_sales_order_reason(conn: getml.database.Connection) -> getml.D...
  function _make_special_offer (line 187) | def _make_special_offer(conn: getml.database.Connection) -> getml.DataFr...
  function _make_store (line 198) | def _make_store(conn: getml.database.Connection) -> getml.DataFrame:
  function _make_container (line 205) | def _make_container(conn: getml.database.Connection) -> getml.data.Conta...
  function _make_data_model (line 228) | def _make_data_model(container: getml.data.Container) -> getml.data.Data...

FILE: src/python-api/tests/pipeline/test_interstate94.py
  function test_interstate94 (line 16) | def test_interstate94(getml_project):

FILE: src/python-api/tests/pipeline/test_loans.py
  function test_loans (line 16) | def test_loans(getml_project):
  function _make_star_schema (line 50) | def _make_star_schema() -> getml.data.StarSchema:

FILE: src/python-api/tests/pipeline/test_pipelines_save_load.py
  function test_save_load (line 19) | def test_save_load(getml_project):
  function _make_star_schema (line 67) | def _make_star_schema() -> getml.data.StarSchema:

FILE: src/python-api/tests/pipeline/test_robot.py
  function test_robot (line 16) | def test_robot(getml_project):

FILE: src/python-api/tests/project/test_project_save_load.py
  function bundle (line 13) | def bundle(getml_project, df, tmpdir):
  function test_save_project_bundle (line 21) | def test_save_project_bundle(getml_project, bundle, df):
  function test_save_project_bundle_default_name (line 36) | def test_save_project_bundle_default_name(getml_project, df, tmpdir):
  function test_load_project (line 41) | def test_load_project(getml_project, bundle, df):

FILE: src/python-api/tests/unit/conftest.py
  class FakePath (line 13) | class FakePath:
    method __init__ (line 17) | def __init__(self, path: str):
    method __eq__ (line 20) | def __eq__(self, other: FakePath) -> bool:
    method __str__ (line 23) | def __str__(self) -> str:
    method __repr__ (line 26) | def __repr__(self) -> str:
    method __fspath__ (line 29) | def __fspath__(self) -> str:
    method exists (line 32) | def exists(self) -> bool:
    method glob (line 35) | def glob(self, pattern: str) -> List[FakePath]:
    method is_file (line 43) | def is_file(self) -> bool:
    method is_dir (line 46) | def is_dir(self) -> bool:
    method name (line 50) | def name(self) -> str:
    method read_text (line 53) | def read_text(self) -> str:
    method write_text (line 59) | def write_text(self, content) -> None:
  function fake_path (line 68) | def fake_path(request) -> Type[FakePath]:
  class MockSocket (line 74) | class MockSocket:
    method __init__ (line 82) | def __init__(self, messages: Iterable[str]):
    method _buffer_messages (line 87) | def _buffer_messages(self):
    method recv (line 92) | def recv(self, size: int) -> bytes:
    method getpeername (line 97) | def getpeername(self):
  function pipeline_fit_context_messages (line 101) | def pipeline_fit_context_messages() -> Tuple[EventContext, List[str]]:
  function pipeline_transform_context_messages (line 987) | def pipeline_transform_context_messages() -> Tuple[EventContext, List[st...
  function pipeline_context (line 1107) | def pipeline_context(request):

FILE: src/python-api/tests/unit/data/test_arrow_schema_processors.py
  function schema (line 19) | def schema() -> pa.Schema:
  function _get_inferrence_blob_block_size (line 30) | def _get_inferrence_blob_block_size(csv_blob: str, n_lines_inferred: int...
  function test_process_timestamp (line 36) | def test_process_timestamp(timestamp_batch):
  function test_process_int (line 101) | def test_process_int(int_batch):
  function test_process_decimal (line 108) | def test_process_decimal(decimal_batch):
  function test_schema_preprocessing (line 122) | def test_schema_preprocessing(schema):
  function test_schema_postprocessing (line 144) | def test_schema_postprocessing(schema):
  function test_arrow_inference_csv_changing_type (line 176) | def test_arrow_inference_csv_changing_type(csv_file_with_changing_type_i...

FILE: src/python-api/tests/unit/data/test_data_frame_init.py
  function test_init (line 6) | def test_init():

FILE: src/python-api/tests/unit/data/test_subsetting.py
  class FakeDFHasLen (line 9) | class FakeDFHasLen:
    method __len__ (line 12) | def __len__(self) -> int:
  function fake_df_has_len_10 (line 17) | def fake_df_has_len_10():
  function test_infer_arange_args_from_slice (line 61) | def test_infer_arange_args_from_slice(fake_df_has_len_10, given_slice, e...

FILE: src/python-api/tests/unit/test_events.py
  function tracked_events (line 25) | def tracked_events():
  function test_log_stream_listener (line 41) | def test_log_stream_listener(monkeypatch, pipeline_context, tracked_even...
  function failing_event_handler (line 81) | def failing_event_handler():
  function test_event_handler_exception (line 94) | def test_event_handler_exception(failing_event_handler):
  function test_sync_handler_execution (line 115) | def test_sync_handler_execution():

FILE: src/python-api/tests/unit/test_exceptions.py
  function test_handle_enterprise_feature_not_available_error (line 17) | def test_handle_enterprise_feature_not_available_error():

FILE: src/python-api/tests/unit/test_import_all.py
  function test_import_all (line 12) | def test_import_all():

FILE: src/python-api/tests/unit/test_locate.py
  function access (line 11) | def access(path: str, mode: str):
  function test_locate_installed_packages_by_edition (line 55) | def test_locate_installed_packages_by_edition(fake_path, install_locatio...
  function test_locate_executable (line 132) | def test_locate_executable(fake_path, install_locations, expected):

FILE: src/python-api/tests/unit/test_progress_bar.py
  function test_exception_in_progress_bar (line 6) | def test_exception_in_progress_bar(capsys):
  function test_finished_on_stop (line 20) | def test_finished_on_stop(finish_all_tasks_on_stop: bool, expected: str,...
  function test_progress_reset_description (line 34) | def test_progress_reset_description(
Copy disabled (too large) Download .json
Condensed preview — 392 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (21,208K chars).
[
  {
    "path": ".git-blame-ignore-revs",
    "chars": 73,
    "preview": "# Switch to ruff for formatting\n5ec353baae51d6f23ac4d0a1050b03da9ed2d804\n"
  },
  {
    "path": ".gitattributes",
    "chars": 36,
    "preview": "demo-notebooks/** linguist-vendored\n"
  },
  {
    "path": ".gitignore",
    "chars": 2668,
    "preview": "# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n\n# workdir for history rewrite/repo sync\n.github_syn"
  },
  {
    "path": ".gitlab-ci.yml",
    "chars": 1291,
    "preview": ".job_template: &job_definition\n  image: python:$VERSION\n  cache:\n    when: always\n    paths:\n      - .cache/pip\n  parall"
  },
  {
    "path": "BUILD.md",
    "chars": 7074,
    "preview": "# BUILD.md\n\n## Building getML from Source\n\ngetML is a complex software package, and to simplify the build process, we us"
  },
  {
    "path": "CHANGELOG.md",
    "chars": 14053,
    "preview": "# Release Notes\n\n## For getML Enterprise & Community editions \n\n### 1.5.1   <small>May 15, 2025</small>\n#### Features\n- "
  },
  {
    "path": "Dockerfile",
    "chars": 2514,
    "preview": "ARG OUTPUT_DIR\nARG VERSION\nARG PACKAGE_NAME=\"getml-community-$VERSION-$TARGETARCH-$TARGETOS\"\nARG BUILD_OR_COPY_ARTIFACTS"
  },
  {
    "path": "INSTALL.md",
    "chars": 6323,
    "preview": "## Table of Contents\n\n* [Overview](#overview)\n* [Installation](#installation)\n  * [Python API](#python-api)\n  * [Engine]"
  },
  {
    "path": "LICENSE.txt",
    "chars": 3757,
    "preview": "Elastic License 2.0 (ELv2)\n\nElastic License\n\nAcceptance\nBy using the software, you agree to all of the terms and conditi"
  },
  {
    "path": "README.md",
    "chars": 13668,
    "preview": "\n<p align=\"center\" style=\"text-align: center;\">\n    <img width=\"400\" style=\"width: 50% !important; max-width: 400px;\" sr"
  },
  {
    "path": "VERSION",
    "chars": 6,
    "preview": "1.5.1\n"
  },
  {
    "path": "benchmarks/Dockerfile",
    "chars": 1303,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "benchmarks/README.md",
    "chars": 4314,
    "preview": "# Benchmarks\n\n## About\n\nThe benchmarks evaluate the performance of getML's FastProp algorithm against five other open-so"
  },
  {
    "path": "benchmarks/benchmark_plots.ipynb",
    "chars": 417873,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"code\",\n   \"execution_count\": 1,\n   \"id\": \"616dcd3b-7498-4a0d-8369-dc6b528f044e\",\n   \""
  },
  {
    "path": "benchmarks/benchmarks/__init__.py",
    "chars": 174,
    "preview": "from . import drivers\nfrom .benchmarks import (\n    benchmark_air_pollution,\n    benchmark_dodgers,\n    benchmark_energy"
  },
  {
    "path": "benchmarks/benchmarks/benchmarks.py",
    "chars": 10186,
    "preview": "\"\"\"\nContains the main benchmark functions\n\"\"\"\n\nimport logging\nimport os\nfrom typing import Callable, Sequence\nfrom urlli"
  },
  {
    "path": "benchmarks/benchmarks/demo/__init__.py",
    "chars": 349,
    "preview": "from .benchmark import Benchmark\nfrom .cesiumml_builder import CesiumMLBuilder\nfrom .ft_time_series_builder import FTTim"
  },
  {
    "path": "benchmarks/benchmarks/demo/add_original_columns.py",
    "chars": 248,
    "preview": "import numpy as np\n\n\ndef _add_original_columns(original_df, df_selected, cutoff=0):\n    cutoff = max(0, cutoff)\n    for "
  },
  {
    "path": "benchmarks/benchmarks/demo/benchmark.py",
    "chars": 4210,
    "preview": "from __future__ import annotations\n\nfrom contextlib import contextmanager\nfrom dataclasses import dataclass, field\nfrom "
  },
  {
    "path": "benchmarks/benchmarks/demo/cesiumml_builder.py",
    "chars": 8021,
    "preview": "\"\"\"\nWrapper around CesiumML\n\"\"\"\n\nimport datetime\nimport time\nimport warnings\nfrom typing import Generator, List, NamedTu"
  },
  {
    "path": "benchmarks/benchmarks/demo/ft_time_series_builder.py",
    "chars": 7335,
    "preview": "import datetime\nimport time\n\nimport featuretools as ft\nimport numpy as np\nimport pandas as pd\nfrom pandas.api.types impo"
  },
  {
    "path": "benchmarks/benchmarks/demo/kats_builder.py",
    "chars": 11014,
    "preview": "\"\"\"\nWrapper around KATS.tsfeatures\n\"\"\"\n\nimport datetime\nimport itertools as it\nimport logging\nimport time\nimport warning"
  },
  {
    "path": "benchmarks/benchmarks/demo/load.py",
    "chars": 1288,
    "preview": "from pathlib import Path\n\nimport getml\n\n\ndef load_or_query(conn, name, **kwargs):\n    \"\"\"\n    Loads the data from disk ("
  },
  {
    "path": "benchmarks/benchmarks/demo/print_time_taken.py",
    "chars": 329,
    "preview": "def _print_time_taken(begin, end):\n    seconds = end - begin\n\n    hours = int(seconds / 3600)\n    seconds -= float(hours"
  },
  {
    "path": "benchmarks/benchmarks/demo/remove_target_column.py",
    "chars": 308,
    "preview": "import numpy as np\nimport pandas as pd\n\n\ndef _remove_target_column(data_frame: pd.DataFrame, target: str) -> pd.DataFram"
  },
  {
    "path": "benchmarks/benchmarks/demo/rolling.py",
    "chars": 3552,
    "preview": "\"\"\"\nUtilties for rolling data frames.\n\"\"\"\n\nimport warnings\nfrom typing import Generic, Iterator, NamedTuple, Optional, T"
  },
  {
    "path": "benchmarks/benchmarks/demo/tsfel_builder.py",
    "chars": 7595,
    "preview": "\"\"\"\nWrapper around TSFEL\n\"\"\"\n\nimport datetime\nimport time\nimport warnings\nfrom typing import Dict, Iterator, List, Optio"
  },
  {
    "path": "benchmarks/benchmarks/demo/tsfel_builder_roll.py",
    "chars": 7953,
    "preview": "\"\"\"\nWrapper around TSFEL\n\"\"\"\n\nimport datetime\nimport time\nimport warnings\nfrom typing import Dict, Generator, List, Name"
  },
  {
    "path": "benchmarks/benchmarks/demo/tsflex_aggregations.py",
    "chars": 8552,
    "preview": "\"\"\"\nCustom implementations of FastProp aggregations\nfor tsflex.\n\"\"\"\n\nimport functools\nfrom typing import Any, Callable, "
  },
  {
    "path": "benchmarks/benchmarks/demo/tsflex_builder.py",
    "chars": 6010,
    "preview": "\"\"\"\nWrapper around tsflex\n\"\"\"\n\nimport datetime\nimport time\nimport warnings\nfrom typing import Callable, List, Optional, "
  },
  {
    "path": "benchmarks/benchmarks/demo/tsfresh_builder.py",
    "chars": 5435,
    "preview": "\"\"\"\nUtility wrapper around tsfresh.\n\"\"\"\n\nimport datetime\nimport gc\nimport time\nfrom typing import List, Optional\n\nimport"
  },
  {
    "path": "benchmarks/benchmarks/drivers/__init__.py",
    "chars": 163,
    "preview": "from .drive_getml import drive_getml\nfrom .drive_wrappers import (\n    drive_featuretools,\n    drive_kats,\n    drive_tsf"
  },
  {
    "path": "benchmarks/benchmarks/drivers/drive_getml.py",
    "chars": 1859,
    "preview": "import logging\nfrom datetime import timedelta\nfrom typing import Any, Union\n\nfrom getml.data.time_series import TimeSeri"
  },
  {
    "path": "benchmarks/benchmarks/drivers/drive_wrappers.py",
    "chars": 5518,
    "preview": "from datetime import timedelta\nfrom typing import Optional, Type, Union\n\nimport numpy as np\nimport pandas as pd  # type:"
  },
  {
    "path": "benchmarks/benchmarks/pyproject.toml",
    "chars": 196,
    "preview": "[tool.mypy]\ningnore_errors = true\n\n[tool.isort]\nmulti_line_output = 3\nprofile = \"black\"\nsections = ['FUTURE', 'STDLIB', "
  },
  {
    "path": "benchmarks/benchmarks/run_all.py",
    "chars": 283,
    "preview": "\"\"\"\nRuns the benchmark scripts\n\"\"\"\n\nfrom .benchmarks import benchmark_interstate94\nfrom .drivers import (\n    drive_feat"
  },
  {
    "path": "benchmarks/benchmarks/utils.py",
    "chars": 760,
    "preview": "import logging\nfrom contextlib import contextmanager\nfrom typing import Callable, Generator\n\nfrom getml.engine import de"
  },
  {
    "path": "benchmarks/docker-compose.yml",
    "chars": 319,
    "preview": "services:\n  benchmarks:\n    build:\n      context: ./\n      dockerfile: Dockerfile\n      platforms:\n        - \"linux/amd6"
  },
  {
    "path": "benchmarks/paper_data.txt",
    "chars": 37200,
    "preview": "FASTPROP: A CUSTOMIZED DATABASE ENGINE FOR FAST PROPOSITIONALIZATION 1\r\nFastProp: A Customized Database Engine for Fast\r"
  },
  {
    "path": "benchmarks/requirements.for-fbprophet.txt",
    "chars": 129,
    "preview": "-r requirements.for-pystan.txt\nconvertdate==2.4.0\nholidays==0.23\nLunarCalendar==0.0.9\npandas==1.3.5\npystan==2.19.1.1\ntqd"
  },
  {
    "path": "benchmarks/requirements.for-kats.txt",
    "chars": 66,
    "preview": "-r requirements.for-fbprophet.txt\nfbprophet==0.7.1\npackaging==21.3"
  },
  {
    "path": "benchmarks/requirements.for-pystan.txt",
    "chars": 27,
    "preview": "Cython==3.0.9\nNumPy==1.21.6"
  },
  {
    "path": "benchmarks/requirements.txt",
    "chars": 117,
    "preview": "-r requirements.for-kats.txt\nkats==0.2.0\ntsfresh==0.18\nfeaturetools==1.12.1\ntsflex==0.3.0\ncesium==0.12.1\ntsfel==0.1.4"
  },
  {
    "path": "benchmarks/run_benchmarks.py",
    "chars": 1072,
    "preview": "\"\"\"\nRuns the benchmark scripts\n\"\"\"\n\nfrom typing import Callable, Sequence\n\nfrom benchmarks import (\n    benchmark_air_po"
  },
  {
    "path": "benchmarks/run_benchmarks.sh",
    "chars": 143,
    "preview": "#!/bin/sh\ncd /home/getml/engine\n./getML --install --home-directory=/home/getml/storage &\n\ncd /home/getml/benchmarks\npyth"
  },
  {
    "path": "demo-notebooks/Dockerfile",
    "chars": 579,
    "preview": "FROM python:3.11.9\n\nRUN apt-get update \\\n    && apt-get install -y \\\n    locales \\\n    && echo \"en_US.UTF-8 UTF-8\" > /et"
  },
  {
    "path": "demo-notebooks/README.md",
    "chars": 3057,
    "preview": "# Usage\n\nThe provided notebooks can be checked and used in different ways. \n\n  * [Reading Online](#reading-online)\n  * ["
  },
  {
    "path": "demo-notebooks/adventure_works.ipynb",
    "chars": 1171591,
    "preview": "{\n    \"cells\": [\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n    "
  },
  {
    "path": "demo-notebooks/docker-compose.yml",
    "chars": 203,
    "preview": "services:\n  notebooks:\n    build:\n      context: ./\n      dockerfile: Dockerfile\n    networks:\n      - notebooks_network"
  },
  {
    "path": "demo-notebooks/formula1.ipynb",
    "chars": 648650,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Formula 1 - Predicting the winner"
  },
  {
    "path": "demo-notebooks/interstate94.ipynb",
    "chars": 554716,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Interstate 94 - Multivariate time"
  },
  {
    "path": "demo-notebooks/loans.ipynb",
    "chars": 594457,
    "preview": "{\n    \"cells\": [\n        {\n            \"cell_type\": \"markdown\",\n            \"metadata\": {},\n            \"source\": [\n    "
  },
  {
    "path": "demo-notebooks/requirements.txt",
    "chars": 31,
    "preview": "jupyterlab~=4.2\nipywidgets~=8.1"
  },
  {
    "path": "demo-notebooks/robot.ipynb",
    "chars": 2047533,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Robot - Feature engineering on se"
  },
  {
    "path": "demo-notebooks/seznam.ipynb",
    "chars": 137463,
    "preview": "{\n \"cells\": [\n  {\n   \"cell_type\": \"markdown\",\n   \"metadata\": {},\n   \"source\": [\n    \"# Seznam - Predicting transaction v"
  },
  {
    "path": "docker-bake.hcl",
    "chars": 3458,
    "preview": "variable \"GETML_VERSION\" {\n  default = \"0.0.0\"\n}\n\nvariable \"GETML_BUILD_OUTPUT_DIR\" {\n  default = \"build\"\n}\n\nvariable \"G"
  },
  {
    "path": "mise.toml",
    "chars": 341,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "runtime/Dockerfile",
    "chars": 1149,
    "preview": "ARG VERSION=\"0.0.0\"\nARG PACKAGE_NAME=\"getml-community-$VERSION-$TARGETARCH-linux\"\nARG OUTPUT_DIR=\"build\"\nARG BUILD_OR_CO"
  },
  {
    "path": "runtime/README.md",
    "chars": 2295,
    "preview": "# getML docker runtime\n## Multiplatform builds\n> [!IMPORTANT]\n> Until we have native cross compilation for the engine, i"
  },
  {
    "path": "runtime/docker-compose.yml",
    "chars": 540,
    "preview": "services:\n  getml:\n    image: getml/getml\n    environment:\n      GETML_ALLOW_PUSH_NOTIFICATIONS: false\n      GETML_ALLOW"
  },
  {
    "path": "runtime/entrypoint.sh",
    "chars": 585,
    "preview": "#!/usr/bin/env bash\n\nfor port in $(seq \"$PORT_MIN\" \"$PORT_MAX\"); do\n    socat tcp-l:$((port + 10000)),fork,reuseaddr tcp"
  },
  {
    "path": "scripts/build",
    "chars": 2619,
    "preview": "#!/usr/bin/env bash\n\nSCRIPTS_DIR=$(dirname -- \"$(realpath -- \"$0\")\")\nPLATFORM=${GETML_BUILD_PLATFORM}\n\nparse_opt_multipl"
  },
  {
    "path": "src/getml-app/README.md",
    "chars": 151,
    "preview": "# getml-app\n\nThe getML App is used by the Windows and Linux version as the main entry point.\n\n(The macOS Version uses a "
  },
  {
    "path": "src/getml-app/format.sh",
    "chars": 40,
    "preview": "#!/bin/bash\ngo fmt getML config install\n"
  },
  {
    "path": "src/getml-app/setup.sh",
    "chars": 31,
    "preview": "#!/bin/bash\n\ncd src \n\ngo build\n"
  },
  {
    "path": "src/getml-app/src/changeToResourceDir.go",
    "chars": 586,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/commands/Parse.go",
    "chars": 1661,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/commands/addHomeDirFlag.go",
    "chars": 668,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/commands/loadConfig.go",
    "chars": 465,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/commands/makeInstallCommand.go",
    "chars": 415,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/commands/makeRunCommand.go",
    "chars": 2751,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/commands/makeStopCommand.go",
    "chars": 503,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/commands/makeUninstallCommand.go",
    "chars": 419,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/commands/parseHomeDirFlag.go",
    "chars": 921,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/commands/printHelpMenu.go",
    "chars": 994,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/config/CommandLine.go",
    "chars": 736,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/config/Config.go",
    "chars": 2731,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/config/Load.go",
    "chars": 432,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/config/MonitorConfig.go",
    "chars": 716,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/config/parseHomeDirFlag.go",
    "chars": 919,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/createConnectionToEngine.go",
    "chars": 629,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/data/Projects.go",
    "chars": 4167,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/data/StandardVariables.go",
    "chars": 1378,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/go.mod",
    "chars": 22,
    "preview": "module getML\n\ngo 1.17\n"
  },
  {
    "path": "src/getml-app/src/install/All.go",
    "chars": 1033,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/FileExists.go",
    "chars": 350,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/install/GetBinDir.go",
    "chars": 451,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/GetConfigPath.go",
    "chars": 491,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/GetHomeDir.go",
    "chars": 495,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/install/GetMainDir.go",
    "chars": 599,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/UsrLocal.go",
    "chars": 384,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/copyDir.go",
    "chars": 671,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/copyFile.go",
    "chars": 1062,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/copyResources.go",
    "chars": 1610,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/install/filesExists.go",
    "chars": 475,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/main.go",
    "chars": 1385,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/makePackageName.go",
    "chars": 386,
    "preview": "// Copyright 2025 The SQLNet Company GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to "
  },
  {
    "path": "src/getml-app/src/printStartMessage.go",
    "chars": 370,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/stopExistingProcess.go",
    "chars": 467,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/MainHandler.go",
    "chars": 14539,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/Server.go",
    "chars": 2657,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/basicCommand.go",
    "chars": 382,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/cmd.go",
    "chars": 341,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/command.go",
    "chars": 268,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/createConnectionToEngine.go",
    "chars": 712,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/isAlive.go",
    "chars": 466,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/loadPipelineFromDisc.go",
    "chars": 616,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/logger.go",
    "chars": 380,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/makeUniqueProjectName.go",
    "chars": 1007,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/marshalCommand.go",
    "chars": 405,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/portIsOccupied.go",
    "chars": 516,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/progressLogger.go",
    "chars": 1118,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/recvBytes.go",
    "chars": 517,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/recvCmd.go",
    "chars": 418,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/recvString.go",
    "chars": 361,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/sendBytes.go",
    "chars": 469,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/sendCommand.go",
    "chars": 429,
    "preview": "// Copyright 2025 Code17 GmbH\n// \n// This file is licensed under the Elastic License 2.0 (ELv2). \n// Refer to the LICENS"
  },
  {
    "path": "src/getml-app/src/tcp/sendString.go",
    "chars": 633,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/tcp/startProcess.go",
    "chars": 776,
    "preview": "// Copyright 2025 Code17 GmbH\n//\n// This file is licensed under the Elastic License 2.0 (ELv2).\n// Refer to the LICENSE."
  },
  {
    "path": "src/getml-app/src/uninstall.go",
    "chars": 322,
    "preview": "package main\n\nimport (\n\t\"getML/install\"\n\t\"os\"\n\t\"path\"\n\t\"runtime\"\n)\n\nfunc uninstall(homeDir string, version string) {\n\tif"
  },
  {
    "path": "src/package-build-imports/config.json",
    "chars": 333,
    "preview": "{\n    \"engine\": {\n        \"port\": 1708\n    },\n    \"monitor\": {\n        \"allowPushNotifications\": true,\n        \"allowRem"
  },
  {
    "path": "src/package-build-imports/environment.json",
    "chars": 383,
    "preview": "{\n  \"authentication\": {\n    \"key\": \"AIzaSyD5qdERurTk7_rQ-IaAB7lo8IBCISr8hmk\",\n    \"refreshToken\": \"\",\n    \"userId\": \"\"\n "
  },
  {
    "path": "src/package-build-imports/jwks.pub.json",
    "chars": 916,
    "preview": "{\"keys\":[{\"alg\":\"RS256\",\"e\":\"AQAB\",\"kid\":\"+9t1ICrLlypXIww/+oiRsO4QqH+U8tsaklxr3FYiJa4=\",\"kty\":\"RSA\",\"n\":\"uHaKA6TVzsagf9f"
  },
  {
    "path": "src/package-build-imports/tests/test1/PERIPHERAL.CSV",
    "chars": 5353185,
    "preview": "column_01,join_key,time_stamp\n-0.22804997786540682,215,0.3749729408665977\n0.4929153494914289,473,0.5345968465379225\n0.43"
  },
  {
    "path": "src/package-build-imports/tests/test1/POPULATION.CSV",
    "chars": 24244,
    "preview": "column_01,join_key,time_stamp,targets\n0.09902457667435494,0,0.7386545235592108,113.0\n-0.9258536088048561,1,0.56884290330"
  },
  {
    "path": "src/package-build-imports/tests/test2/PERIPHERAL.CSV",
    "chars": 7713690,
    "preview": "column_01,join_key,time_stamp,upper_time_stamp\n0.058190119360496784,300,0.16815186866558163,1.0656840088005848\n-0.397574"
  },
  {
    "path": "src/package-build-imports/tests/test2/POPULATION.CSV",
    "chars": 24018,
    "preview": "column_01,join_key,time_stamp,targets\n-0.6193979529639182,0,0.3416345456328761,65.0\n-0.5502140020916659,1,0.871801864752"
  },
  {
    "path": "src/python-api/LICENSE",
    "chars": 3756,
    "preview": "Elastic License 2.0 (ELv2)\n\nElastic License\n\nAcceptance\nBy using the software, you agree to all of the terms and conditi"
  },
  {
    "path": "src/python-api/README.md",
    "chars": 804,
    "preview": "# getML - Automated Feature Engineering for Relational Data and Time Series\n\ngetML ([https://getml.com](https://getml.co"
  },
  {
    "path": "src/python-api/getml/__init__.py",
    "chars": 1476,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/communication.py",
    "chars": 27103,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/constants.py",
    "chars": 2343,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/cross_validation.py",
    "chars": 2482,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/__init__.py",
    "chars": 7612,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/_io/arrow.py",
    "chars": 20185,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/_io/csv.py",
    "chars": 5527,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/_io/parquet.py",
    "chars": 1916,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/access.py",
    "chars": 2959,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/__init__.py",
    "chars": 2684,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/aggregation.py",
    "chars": 1612,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/collect_footer_data.py",
    "chars": 1047,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/column.py",
    "chars": 1516,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/columns.py",
    "chars": 58625,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/constants.py",
    "chars": 542,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/format.py",
    "chars": 336,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/from_value.py",
    "chars": 1958,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/get_scalar.py",
    "chars": 323,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/last_change.py",
    "chars": 657,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/last_change_from_col.py",
    "chars": 1002,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/length.py",
    "chars": 489,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/length_property.py",
    "chars": 1212,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/make_iter.py",
    "chars": 844,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/parse.py",
    "chars": 1418,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/random.py",
    "chars": 1155,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/repr.py",
    "chars": 360,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/repr_html.py",
    "chars": 361,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/subroles.py",
    "chars": 941,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/to_arrow.py",
    "chars": 954,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/to_numpy.py",
    "chars": 428,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/unique.py",
    "chars": 462,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/columns/unit.py",
    "chars": 905,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/concat.py",
    "chars": 1674,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/container.py",
    "chars": 20294,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/data_frame.py",
    "chars": 141758,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/data_model.py",
    "chars": 9558,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/diagram.py",
    "chars": 12347,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/helpers.py",
    "chars": 28042,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/helpers2.py",
    "chars": 12182,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/load_container.py",
    "chars": 1731,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/placeholder.py",
    "chars": 17110,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/relationship.py",
    "chars": 2435,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/roles/__init__.py",
    "chars": 485,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/roles/container.py",
    "chars": 8522,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/roles/roles.py",
    "chars": 7466,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/roles/sets.py",
    "chars": 841,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/roles/types.py",
    "chars": 894,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/split/__init__.py",
    "chars": 364,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/split/concat.py",
    "chars": 2586,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/split/random.py",
    "chars": 2678,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/split/time.py",
    "chars": 4513,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/staging.py",
    "chars": 4896,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/star_schema.py",
    "chars": 19082,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/subroles/__init__.py",
    "chars": 1160,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/subroles/exclude.py",
    "chars": 2858,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/subroles/include.py",
    "chars": 1065,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/subroles/only.py",
    "chars": 1237,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/subroles/sets.py",
    "chars": 1401,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/subroles/types.py",
    "chars": 1442,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/subset.py",
    "chars": 3310,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/time.py",
    "chars": 4190,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/time_series.py",
    "chars": 6437,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/data/view.py",
    "chars": 40041,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/__init__.py",
    "chars": 3009,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/connect_bigquery.py",
    "chars": 3692,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/connect_duckdb.py",
    "chars": 4347,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/connect_greenplum.py",
    "chars": 5001,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/connect_hana.py",
    "chars": 3929,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/connect_mariadb.py",
    "chars": 4902,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/connect_mysql.py",
    "chars": 5235,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  },
  {
    "path": "src/python-api/getml/database/connect_odbc.py",
    "chars": 5570,
    "preview": "# Copyright 2025 Code17 GmbH\n#\n# This file is licensed under the Elastic License 2.0 (ELv2).\n# Refer to the LICENSE.txt "
  }
]

// ... and 192 more files (download for full content)

About this extraction

This page contains the full source code of the getml/getml-community GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 392 files (19.5 MB), approximately 5.1M tokens, and a symbol index with 1806 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.

Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.

Copied to clipboard!