Skip to main content

A modular framework for registering and running haphazard datasets and models.

Project description

Haphazard

A Python package for haphazard dataset and model management.
Provides a standardized interface for loading datasets and models, running experiments, and extending with custom datasets or models.


Table of Contents


Installation

Install via pip (after packaging):

pip install haphazard

Or for local development:

git clone <repo_url>
cd haphazard
pip install -e .

Project Structure

The Haphazard package has a modular layout:

haphazard/
├── __init__.py                    # Top-level package
├── data/                          # Dataset related modules
│   ├── __init__.py
│   ├── base_dataset.py            # Abstract BaseDataset class
│   └── datasets/                  # All dataset implementations
│       ├── __init__.py
│       └── dummy_dataset/
│           └── __init__.py
├── models/                        # Model related modules
│   ├── __init__.py
│   ├── base_model.py              # Abstract BaseModel class
│   └── model_zoo/                 # All model implementations
│       ├── __init__.py
│       └── dummy_model/
│           └── __init__.py
└── utils/                         # Optional helper functions
    └── ...

Notes:

  • data/base_dataset.py defines BaseDataset.
  • data/datasets/ contains registered datasets; each dataset is a submodule with __init__.py.
  • models/base_model.py defines BaseModel.
  • models/model_zoo/ contains registered models; each model is a submodule with __init__.py.
  • utils/ is optional, for shared helpers.

This layout allows dynamic registration of datasets and models via decorators.


Quick Start

from haphazard import load_dataset, load_model

# Load dataset
dataset = load_dataset("dummy", n_samples=100, n_features=10)

# Load model
model = load_model("dummy")

# Run model
outputs = model(dataset)
print(outputs)

Datasets

  • All datasets must inherit from BaseDataset.
  • Example dataset: DummyDataset.
  • Main interface:
from haphazard import load_dataset

dataset = load_dataset("dummy", base_path="./data")
x, y = dataset.load_data()
mask = dataset.load_mask(scheme="probabilistic", availability_prob=0.5)

Dataset Attributes

  • name : str — Dataset name.
  • task : "classification" | "regression".
  • haphazard_type : "controlled" | "intrinsic".
  • n_samples, n_features : int.
  • num_classes : int (for classification).

Models

  • All models must inherit from BaseModel.
  • Example model: DummyModel.
  • Main interface:
from haphazard import load_model

model = load_model("dummy")
outputs = model(dataset)

Output

  • Classification: labels, preds, logits, time_taken, is_logit.
  • Regression: targets, preds, time_taken.

Contributing

Haphazard is designed for easy extensibility. You can add new datasets and models.

Adding a new dataset

  1. Create a new folder under haphazard/data/datasets/, e.g., my_dataset/.
  2. Add __init__.py:
from ...base_dataset import BaseDataset
from ...datasets import register_dataset
import numpy as np

@register_dataset("my_dataset")
class MyDataset(BaseDataset):
    def __init__(self, base_path="./", **kwargs):
        self.name = "my_dataset"
        self.haphazard_type = "controlled"
        self.task = "classification"
        super().__init__(base_path=base_path, **kwargs)

    def read_data(self, base_path="./"):
        # Load or generate x, y
        x = np.random.random((100, 10))
        y = np.random.randint(0, 2, 100)
        return x, y
  1. The dataset is automatically registered and can be loaded with load_dataset("my_dataset").

Adding a new model

  1. Create a new folder under haphazard/models/model_zoo/, e.g., my_model/.
  2. Add __init__.py:
from ...base_model import BaseModel, BaseDataset
from ...model_zoo import register_model
import numpy as np

@register_model("my_model")
class MyModel(BaseModel):
    def __init__(self, **kwargs):
        self.name = "MyModel"
        self.tasks = {"classification", "regression"}
        self.deterministic = True
        self.hyperparameters = set()
        super().__init__(**kwargs)

    def fit(self, dataset: BaseDataset, mask_params=None, model_params=None, seed=42):
        # Dummy implementation
        x, y = dataset.load_data()
        mask = dataset.load_mask(**mask_params)
        preds = np.random.randint(0, 2, size=y.shape[0])
        if dataset.task == "classification":
            return {
                "labels": y,
                "preds": preds,
                "logits": preds.astype(float),
                "time_taken": 0.0,
                "is_logit": True
            }
        elif dataset.task == "regression":
            return {
                "targets": y,
                "preds": preds,
                "time_taken": 0.0,
            }
  1. The model is automatically registered and can be loaded with load_model("my_model").

License

MIT License.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

haphazard-0.1.1.tar.gz (24.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

haphazard-0.1.1-py3-none-any.whl (29.9 kB view details)

Uploaded Python 3

File details

Details for the file haphazard-0.1.1.tar.gz.

File metadata

  • Download URL: haphazard-0.1.1.tar.gz
  • Upload date:
  • Size: 24.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for haphazard-0.1.1.tar.gz
Algorithm Hash digest
SHA256 819f1ce0658c5d7d647005d7d75baef8fab402a99ee5a9750df505f48c4a8aa7
MD5 9ce9a5d9c973ffb5d392fa7fdc02f496
BLAKE2b-256 a1e36da5da5a7e9ca7b829b7b77bb43e1221284c10f30c95253e063ad7c74846

See more details on using hashes here.

File details

Details for the file haphazard-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: haphazard-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 29.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for haphazard-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f85f14c7f8286e4cb2e6d1fbbafb914a8fe8b39e700c0c2a35ca01f7eaef5040
MD5 f33531b0c943f3ff8ca831e6f266505d
BLAKE2b-256 52370568df259ebcfa7c483950133fe362f5d7516d55d8ecf29dca36b27e657d

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page