Skip to main content

aind-behavior-core-analysis

Documentation CI PyPI - Version License ruff uv

A repository with core primitives for analysis shared across all Aind.Behavior tasks.

This repository is part of a bigger infrastructure that is summarized here.

⚠️ Caution:
This repository is currently under active development and is subject to frequent changes. Features and APIs may evolve without prior notice.

Installing and Upgrading

If you choose to clone the repository, you can install the package by running the following command from the root directory of the repository:

pip install .

Otherwise, you can use pip:

pip install aind-behavior-core-analysis

Getting started and API usage

The library provides two main functionalities: data contracts for standardized data loading and quality control tools for data validation.

Creating and Using Data Contracts

Data contracts provide a standard way to access and load data from various sources. Here's a simple example:

from pathlib import Path
from aind_behavior_core_analysis.contract import Dataset, DataStreamCollection
from aind_behavior_core_analysis.contract.csv import Csv
from aind_behavior_core_analysis.contract.text import Text

# Define the dataset structure
dataset_root = Path("path/to/dataset")
my_dataset = Dataset(
    name="my_dataset",
    version="1.0.0",
    description="Example dataset",
    data_streams=[
        DataStreamCollection(
            name="Behavior",
            description="Behavior data",
            data_streams=[
                Csv(
                    "Position",
                    description="Animal position data",
                    reader_params=Csv.make_params(
                        path=dataset_root / "behavior/position.csv",
                    ),
                ),
                Text(
                    name="Log",
                    description="Session log file",
                    reader_params=Text.make_params(
                        path=dataset_root / "behavior/session.log",
                    ),
                ),
            ],
        ),
    ],
)

# Load a specific stream
position_data = my_dataset["Behavior"]["Position"].load().data
print(f"Position data shape: {position_data.shape}")

# Load all streams and handle errors
my_dataset.load_all()

Quality Control of Primary Data

The QC module helps validate your data to ensure it meets specific requirements:

import aind_behavior_core_analysis.qc as qc

# Using the dataset created above
data_stream = my_dataset["Behavior"]["Position"]

# Create and run test suites
runner = qc.Runner()

# Add test suites for different data types
runner.add_suite(qc.csv.CsvTestSuite(data_stream))

# Or create your own custom test suite
class MyCustomTestSuite(qc.Suite):
    def __init__(self, data_stream):
        self.data_stream = data_stream
        
    def test_has_expected_columns(self):
        """Check if data has required columns."""
        expected_cols = {"timestamp", "x", "y", "speed"}
        if not expected_cols.issubset(self.data_stream.data.columns):
            missing = expected_cols - set(self.data_stream.data.columns)
            return self.fail_test(None, f"Missing columns: {missing}")
        return self.pass_test(None, "All required columns present")

runner.add_suite(MyCustomTestSuite(data_stream))

# Run all tests and display results
results = runner.run_all_with_progress()

For more detailed examples, please check the Examples folder.


Contributors

Contributions to this repository are welcome! However, please ensure that your code adheres to the recommended DevOps practices below:

Linting

We use ruff as our primary linting tool.

Testing

Attempt to add tests when new features are added. To run the currently available tests, run uv run pytest from the root of the repository.

Lock files

We use uv to manage our lock files and therefore encourage everyone to use uv as a package manager as well.

Metadata

Release files for aind-behavior-core-analysis 0.2.1

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

Source distribution (sdist)

Source distribution for aind-behavior-core-analysis 0.2.1
File Size Uploaded
aind_behavior_core_analysis-0.2.1.tar.gz 152.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for aind-behavior-core-analysis 0.2.1
File Interpreter ABI Platform
aind_behavior_core_analysis-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 193.2 kB

Release files / aind_behavior_core_analysis-0.2.1.tar.gz

Download URL aind_behavior_core_analysis-0.2.1.tar.gz
Size 152.0 kB
Tags Source
SHA-256 checksum
How to use checksums
8ca9c3cf706ebad7853c9e2622897479530167a6f7b9e61df34b37694f6ab98d
BLAKE2b-256 checksum
How to use checksums
27d4d31e05fa5130f5c595c0f06b60c8de9d378932c413eb3522a805faee7431
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.8

Release files / aind_behavior_core_analysis-0.2.1-py3-none-any.whl

Download URL aind_behavior_core_analysis-0.2.1-py3-none-any.whl
Size 41.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9a954c68875465dbdddc1bffcc2a2bc1056b801527452a795a5afb3dc8552470
BLAKE2b-256 checksum
How to use checksums
42dec80312eb80a1406fd719e409f994eec75acfa1e1fc142faed6939581ee6f
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.7.8

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

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