Metadata-Version: 2.1
Name: oxenai
Version: 0.3.2
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Dist: pandas ==2.0.1
Requires-Dist: polars ==0.17.11
Requires-Dist: pyarrow ==12.0.0
Requires-Dist: opencv-python ==4.7.0.72
Requires-Dist: numpy ==1.24.3
Requires-Dist: tqdm ==4.65.0
Requires-Dist: toml ==0.10.2
Summary: Data version control for machine learning
Requires-Python: >=3.7
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM

# 🐂 🐍 Oxen Python Interface 

The Oxen python interface makes it easy to integrate Oxen datasets directly into machine learning dataloaders or other data pipelines.

## Repositories

There are two types of repositories one can interact with, a `LocalRepo` and a `RemoteRepo`.


## Local Repo

To fully clone all the data to your local machine, you can use the `LocalRepo` class.

```python
import oxen

repo = LocalRepo("path/to/repository")
repo.clone("https://hub.oxen.ai/ox/CatDogBBox")
```

If there is a specific version of your data you want to access, you can specify the `branch` when cloning.

```python
repo.clone("https://hub.oxen.ai/ox/CatDogBBox", branch="my-pets")
```

Once you have a repository locally, you can perform the same operations you might via the command line, through the python api.

For example, you can checkout a branch, add a file, commit, and push the data to the same remote you cloned it from.

```python
import oxen

repo = LocalRepo("path/to/repository")
repo.clone("https://hub.oxen.ai/ox/CatDogBBox")
repo.checkout()
```

## Remote Repo

If you don't want to download the data locally, you can use the `RemoteRepo` class to interact with a remote repository on OxenHub.

```python
import oxen 

repo = RemoteRepo("https://hub.oxen.ai/ox/CatDogBBox")
```

To stage and commit files to a specific version of the data, you can `checkout` an existing branch or create a new one.

```python
repo.create_branch("dev")
repo.checkout("dev")
```

You can then stage files to the remote repository by specifying the file path and destination directory.

```python
repo.add("new-cat.png", "images") # Stage to images/new-cat.png on remote
repo.commit("Adding another training image")
```

Note that no "push" command is required here, since the above code creates a commit directly on the remote branch.


