Skip to main content

mmap_ninja_dataframe: Memory mapped data structures

Project description

mmap_ninja_dataframe

Memory-mapped dataframe abstraction based on mmap_ninja

Run tests:

uvx --with-editable . --with joblib --with zstandard --with dnn_cool_synthetic_dataset --with opencv-contrib-python --with transformers pytest

TextPropertiesMmap

TextPropertiesMmap stores unique texts and their computed properties (e.g. embeddings, token counts) as memory-mapped arrays. Texts are deduplicated by content hash. Properties can be added incrementally — a property does not need to be fully computed before the store is used.

Create from a list of texts

from mmap_ninja_dataframe import TextPropertiesMmap

store = TextPropertiesMmap.from_texts(
    out_dir="my_store",
    texts=["Hello, world!", "Memory maps are fast.", "Another sentence."],
)

Add a text and get its index

idx = store.add("A new sentence.")
# Returns the index. If the text already exists, returns its existing index without duplicating.

Add multiple texts

indices = store.update(["First.", "Second.", "Hello, world!"])
# "Hello, world!" already exists — its existing index is returned, store does not grow.

Add a computed property

import numpy as np

embeddings = [np.random.rand(768).astype(np.float32) for _ in range(len(store))]
store.add_property("embedding", embeddings)

Properties can be added partially — the array does not need to cover all texts yet:

store.add_property("token_count", [np.array([5]), np.array([4])])  # only first two texts

Query property status

result = store.get_property("embedding")
print(result.unprocessed_count)    # number of texts without this property computed
print(result.staging_files_count)  # number of pending staged result files
print(len(result.mmap))            # number of computed results

Get unprocessed indices

indices = store.get_unprocessed_indices_for_property("embedding")
texts_to_process = store.text[indices]

Stage and flush results

Use set_results_for_property to stage results (e.g. from a batch inference job). Results are flushed automatically when they can be applied in order:

batch_texts = ["First.", "Second."]
batch_embeddings = [np.random.rand(768).astype(np.float32) for _ in batch_texts]
store.set_results_for_property("embedding", batch_texts, batch_embeddings)

# Explicitly flush any remaining staged results:
store.flush_results_for_property_if_possible("embedding")

Look up properties by text

props = store.get_text_properties("Hello, world!")
# {"embedding": array([...]), "token_count": array([5])}
# If a property is not yet computed for this text, it appears in props["unprocessed"]

Fetch properties for multiple texts

result = store.get_properties_for_texts(["Hello, world!", "Memory maps are fast."])
# {"text": [...], "content_hash": [...], "idx": [0, 1], "embedding": [...]}
# Raises KeyError for unknown texts, ValueError if any property is not fully computed.

Check overall status

status = store.get_status()
# Returns a list of PropertyResult for properties that are not yet fully computed.
for r in status:
    print(r)

Delete a property

store.delete_property("embedding")
# Removes the mmap directory and any staged files for that property.

List computed properties

store.get_properties()  # ["embedding", "token_count"]
# Does not include "text" or "content_hash" — use store.text and store.content_hash directly.

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

mmap_ninja_dataframe-0.7.0.tar.gz (13.4 kB view details)

Uploaded Source

Built Distribution

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

mmap_ninja_dataframe-0.7.0-py3-none-any.whl (10.9 kB view details)

Uploaded Python 3

File details

Details for the file mmap_ninja_dataframe-0.7.0.tar.gz.

File metadata

  • Download URL: mmap_ninja_dataframe-0.7.0.tar.gz
  • Upload date:
  • Size: 13.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.9

File hashes

Hashes for mmap_ninja_dataframe-0.7.0.tar.gz
Algorithm Hash digest
SHA256 5f3b2b949a4618d12beaf7ba60ea5e2b6d64839e45d11bdfa9a70ca3e08f1371
MD5 49b7706f214184d24f860657c5bc821c
BLAKE2b-256 f8f4494f5f00ad46049284ebaaa33be151378959d75599c4a8ca170ff1d79188

See more details on using hashes here.

File details

Details for the file mmap_ninja_dataframe-0.7.0-py3-none-any.whl.

File metadata

File hashes

Hashes for mmap_ninja_dataframe-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 03ed47425e6d0962a82beb59a6ccb967843888768dc8cf95e1977d770dbe8ae4
MD5 9a18051cc9b3296465e468c43e43eea2
BLAKE2b-256 cd2fdcd9c9d16f99cc746f32b10329244209a4982c1a75efbe923bfd5fd47ea9

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