Skip to main content

dantArrays: Enhanced NumPy Arrays with Rich, Computed Metadata


Overview

dantArrays extends standard NumPy arrays by embedding rich, computed metadata directly into array slices, rows, or columns. This integration allows you to keep data tightly coupled with its descriptive context, computed metrics, or dynamic annotations—without losing NumPy's efficiency and versatility.


Key Features

  • Rich Metadata Integration: Attach structured metadata (using Pydantic models) to slices of NumPy arrays.
  • Automatic Computations: Define metadata fields computed directly from array data.
  • Data Safety: Safe mechanisms to access and modify underlying array data without corrupting computed metadata.
  • Flexibility: Easily update array slices or metadata, automatically recalculating dependent computed fields.
  • Usability: Clear, Pythonic API for both simple and complex data manipulation tasks.

Installation

pip install dantarrays

Quickstart Example

Here's how easily you can add metadata to your arrays:

import numpy as np
from pydantic import BaseModel
from dantarrays import DantArray, mean_value_field

class StockMetadata(BaseModel):
    symbol: str
    mean_price: float = mean_value_field()

price_data = np.array([
    [100, 101, 102],
    [50, 49, 51],
])

stocks = DantArray(data=price_data, metadata_class=StockMetadata, major_axis=0)

stocks.update_metadata(0, symbol="AAPL")
stocks.update_metadata(1, symbol="MSFT")

print(stocks.meta(0).mean_price)  # Automatically computed mean price
# Output: 101.0

Usage

Defining Metadata Models

Use Pydantic models to define structured metadata:

from pydantic import BaseModel
from dantarrays import max_value_field, mean_value_field

class ExperimentMetadata(BaseModel):
    experiment_id: str
    max_measurement: float = max_value_field()
    avg_measurement: float = mean_value_field()

Creating a DantArray

import numpy as np
from dantarrays import DantArray

data = np.random.rand(5, 10)
experiments = DantArray(data=data, metadata_class=ExperimentMetadata, major_axis=0)

Updating Metadata

experiments.update_metadata(0, experiment_id="EXP001")

Accessing Metadata

metadata = experiments.get_metadata(0)
print(metadata.max_measurement)

Using the .meta() API for Convenient Field Access

The .meta() method provides ergonomic, attribute-style access to metadata fields:

experiments.meta(0).experiment_id = "EXP002"
print(experiments.meta(0).experiment_id)
# Output: EXP002

You can also update multiple fields conveniently:

experiments.meta(0).update(experiment_id="EXP003", avg_measurement=0.75)

Editing Data Safely

with experiments.edit_data() as data:
    data[0, :] = np.random.rand(10)

Immutable Updates

updated_experiments = experiments.with_updated_slice(0, np.zeros(10))

Advanced Examples

Batch Metadata Creation

indices = [0, 1, 2]
experiments.batch_create(indices, experiment_id="default")

Computed Fields Based on Data

Create a metadata field dynamically computed from the data slice:

from dantarrays import data_based_field

class ImageMetadata(BaseModel):
    brightness: float = data_based_field(lambda slice: float(np.mean(slice)))

Accessing Full Metadata

for idx, meta in experiments.get_existing_metadata():
    print(f"Experiment {meta.experiment_id} avg: {meta.avg_measurement}")

Data Validation and Safety

Direct access to the internal data array triggers warnings, ensuring safe data manipulation:

experiments._data_unsafe  # Warns about unsafe access

Contextual Computations

Computed fields have access to context about their array slice:

from dantarrays import ComputedFieldContext

class CustomComputation:
    def __call__(self, ctx: ComputedFieldContext):
        return ctx.size * np.mean(ctx.get_slice())

API Reference

DantArray

  • .update_metadata(idx, **kwargs): Update metadata fields.
  • .get_metadata(idx): Retrieve metadata.
  • .meta(idx): Convenient, attribute-style metadata accessor.
  • .batch_create(indices, **kwargs): Batch create metadata entries.
  • .with_updated_data(new_data): Immutable data update.
  • .apply_with_metadata(func): Apply function to array slices and metadata.
  • .refresh_computed_fields(): Refresh computed fields after data changes.

Use Cases

  • Financial time-series analysis
  • Image datasets with annotations
  • Scientific experiment tracking
  • Feature metadata management in machine learning

Release files for dantArrays 0.0.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dantArrays 0.0.4
File Size Uploaded
dantarrays-0.0.4.tar.gz 36.3 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for dantArrays 0.0.4
File Interpreter ABI Platform
dantarrays-0.0.4-py3-none-any.whl Python 3 none any Details

Total release size: 48.2 kB

Release files / dantarrays-0.0.4.tar.gz

Download URL dantarrays-0.0.4.tar.gz
Size 36.3 kB
Tags Source
SHA-256 checksum
How to use checksums
401d895236a31de14b6643c8541e0972090fb8931dfa7abd762d7d24da697985
BLAKE2b-256 checksum
How to use checksums
b7de733b275ff0c6b95c053de8e860d9d5b4635b3c15e23831b94f70834759d7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.5.26

Release files / dantarrays-0.0.4-py3-none-any.whl

Download URL dantarrays-0.0.4-py3-none-any.whl
Size 11.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f18220e01cad46c926ce80cff1a8470e5d10d8c2b8ddcba9fb46c5d34677b5d7
BLAKE2b-256 checksum
How to use checksums
fcfe3cc73d59c946071ec11d564d0d5df9c218239a9229a6ff93c158a8160d65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.5.26

Release history Release notifications | RSS feed

This release

0.0.4 This release

2 release files

0.0.3

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page