Metadata-Version: 2.4
Name: arraylake
Version: 0.15.1
Summary: Python client for ArrayLake
Project-URL: Documentation, https://docs.earthmover.io/
Project-URL: Changelog, https://docs.earthmover.io/changelog
Author-email: Joseph Hamman <joe@earthmover.io>
License-Expression: MIT
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Requires-Python: <3.13,>=3.10
Requires-Dist: aiobotocore[boto3]<3.0,>=2.10.0
Requires-Dist: aioitertools~=0.11
Requires-Dist: boto3<2.0,>=1.33.2
Requires-Dist: botocore>=1.33.2
Requires-Dist: cachetools<6.0,>=5.3.2
Requires-Dist: click~=8.1
Requires-Dist: donfig<1.0,>=0.7
Requires-Dist: fsspec>=2024.2.0
Requires-Dist: gcsfs>=2024.2.0
Requires-Dist: httpx<0.28,>=0.23
Requires-Dist: humanize~=4.9.0
Requires-Dist: numcodecs>=0.13.1
Requires-Dist: numpy<3.0,>=1.23
Requires-Dist: packaging>=23.0
Requires-Dist: pydantic[email]<2.10,>=2.3
Requires-Dist: rich<14.0,>=12.6
Requires-Dist: ruamel-yaml~=0.17
Requires-Dist: s3fs>=2024.02.0
Requires-Dist: sqlitedict~=2.1
Requires-Dist: structlog~=24.1
Requires-Dist: tenacity<9.0,>=8.4.1
Requires-Dist: typer<1.0,>=0.6.1
Requires-Dist: zarr>=2.18
Provides-Extra: grib
Requires-Dist: cfgrib~=0.9; extra == 'grib'
Requires-Dist: eccodes>=2.37; extra == 'grib'
Requires-Dist: kerchunk!=0.2.1,~=0.1; extra == 'grib'
Provides-Extra: icechunk
Requires-Dist: icechunk<0.3.0,>=0.2.3; extra == 'icechunk'
Provides-Extra: maximal
Requires-Dist: dask>=2022.10.2; extra == 'maximal'
Requires-Dist: distributed>=2022.10.2; extra == 'maximal'
Requires-Dist: netcdf4<2.0,>=1.6.1; extra == 'maximal'
Requires-Dist: pandas~=2.0; extra == 'maximal'
Requires-Dist: rioxarray~=0.15; extra == 'maximal'
Requires-Dist: scipy~=1.10; extra == 'maximal'
Provides-Extra: min-reqs
Requires-Dist: aiobotocore[boto3]==2.10.0; extra == 'min-reqs'
Requires-Dist: aioitertools==0.11.0; extra == 'min-reqs'
Requires-Dist: boto3==1.33.2; extra == 'min-reqs'
Requires-Dist: botocore==1.33.2; extra == 'min-reqs'
Requires-Dist: cachetools==5.3.2; extra == 'min-reqs'
Requires-Dist: click==8.1.0; extra == 'min-reqs'
Requires-Dist: donfig==0.7.0; extra == 'min-reqs'
Requires-Dist: fsspec==2024.2.0; extra == 'min-reqs'
Requires-Dist: gcsfs==2024.2.0; extra == 'min-reqs'
Requires-Dist: httpx==0.23.0; extra == 'min-reqs'
Requires-Dist: humanize==4.9.0; extra == 'min-reqs'
Requires-Dist: numcodecs==0.13.1; extra == 'min-reqs'
Requires-Dist: numpy==1.23.0; extra == 'min-reqs'
Requires-Dist: packaging==23.0; extra == 'min-reqs'
Requires-Dist: pydantic[email]==2.3.0; extra == 'min-reqs'
Requires-Dist: rich==12.6.0; extra == 'min-reqs'
Requires-Dist: ruamel-yaml==0.17.2; extra == 'min-reqs'
Requires-Dist: s3fs==2024.2.0; extra == 'min-reqs'
Requires-Dist: sqlitedict==2.1.0; extra == 'min-reqs'
Requires-Dist: structlog==24.1.0; extra == 'min-reqs'
Requires-Dist: tenacity==8.4.1; extra == 'min-reqs'
Requires-Dist: typer==0.6.1; extra == 'min-reqs'
Requires-Dist: zarr==2.18.0; extra == 'min-reqs'
Provides-Extra: virtual
Requires-Dist: h5py; extra == 'virtual'
Requires-Dist: imagecodecs; extra == 'virtual'
Requires-Dist: kerchunk!=0.2.1,~=0.1; extra == 'virtual'
Requires-Dist: tifffile>=2023.2.27; extra == 'virtual'
Provides-Extra: widgets
Requires-Dist: ipytree~=0.2.2; extra == 'widgets'
Provides-Extra: xarray
Requires-Dist: xarray<=2024.09.0,>=2022.12.0; extra == 'xarray'
Description-Content-Type: text/markdown

<p align="center">
<img src="https://earthmover-web-assets.s3.amazonaws.com/04-Arraylake-Lockup-Midnight-RGB-LARGE.png" width="80%" alt="Arraylake">
</p>

<p align="center">
  <a href="https://earthmover.io" rel="nofollow">earthmover.io</a> -
  <a href="https://docs.earthmover.io" rel="nofollow">documentation</a>
</p>

Arraylake is a cloud-based platform that understands a wide array of multidimensional scientific data. Organize, analyze, build, and collaborate—effortlessly.

Check out the [documentation](https://docs.earthmover.io) to get started.

## Install

```
# using pip
pip install arraylake

# using conda
conda install arraylake
```

## Using hatch for Project Management

This project uses Hatch for dependency management, virtual environment management, and packaging. For further details, refer to the [official hatch documentation](https://hatch.pypa.io/latest/).

### Prerequisites

Before you can use Hatch with this project, make sure you have the following installed:

- **Python** (version 3.10 or higher)
- **Hatch** (installed via `pip`)

You can install Hatch globally by running:

```bash
pip install hatch
```

Hatch can also be installed via Homebrew:

```bash
brew install hatch
```

### Setting Up the Project
**1. Clone the Repository:**

If you haven't already, clone the arraylake repository to your local machine:

```bash
git clone https://github.com/earth-mover/arraylake.git
cd client
```

** 2. Create a Virtual Environment:**

To create a new environment for the project, run:

```bash
hatch env create
```

This will create a virtual environment with the necessary dependencies based on the project's configuration.

** 3. Install Dependencies:**

After creating the virtual environment, you can install the project’s dependencies by running:

```bash
hatch install
```

This will install the dependencies listed in the pyproject.toml file under [tool.hatch.dependencies].

### Managing Environments
Hatch allows you to manage multiple environments for a project. Here’s how you can work with them:

To create a specific environment, use the following command:

```bash
hatch env create <env_name>
```

To list all available environments:

```bash
hatch env list
```

To activate an environment:

```bash
hatch env use <env_name>
```

To deactivate the current environment:

```bash
hatch env deactivate
```

The following are the available environments for the arraylake client:

* `dev`: Contains the project dependencies (including Zarr v2) and dev dependencies
* `standard`: Contains the project dependencies (including Zarr v2), dev dependencies, and all extras
* `icechunk`: Contains the project dependencies (including Zarr v3), dev dependencies, xarray extras, and icechunk extras
* `minimal`: Contains the minimum versions of the project dependencies (including Zarr v2) and dev dependencies
* `minimal-latest-python`:  Contains the minimum versions of the project dependencies (including Zarr v2), dev dependencies, and `widgets`, `virtual`, `xarray`, and `maximal` extras on Python 3.12.
* `upstream`: Contains all of the upstream versions of the project dependencies (Zarr is pinned to v2), dev dependencies, and all extras
* `performance`: Contains the performance dependencies.


### Versioning and Packaging
We also use Hatch to manage versioning and packaging.

Hatch supports automatic version bumps and is configured to update the version based on the git tags.

To make sure your local build is configured with the correct version, run the following to fetch the latest tags:

```bash
git fetch --tags
```

To build a distributable package (e.g., for PyPI):

```bash
hatch build
```

This will create a `dist/` directory with your package. This will also update the `_version.py` file with the latest tag from git. __Do not commit `_version.py` to git!__

To print out the version to the terminal without modifying the source directory, run:

```bash
hatch version
```

To publish to PyPI:

```bash
hatch publish
```

### Running tests

It is recommended that the `standard` environment be used to run tests.

```bash
hatch -e standard run run-tests
```

Alternatively, run:

```bash
hatch -e standard run pytest -vvv tests/
```

or

```bash
hatch -e standard shell
pytest -vvv tests/
```

To run Icehunk and Zarr v3 specific tests, run:

```bash
hatch -e icechunk run run-tests
```
