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.1.tar.gz (13.6 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.1-py3-none-any.whl (11.1 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mmap_ninja_dataframe-0.7.1.tar.gz
  • Upload date:
  • Size: 13.6 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.1.tar.gz
Algorithm Hash digest
SHA256 db7569c51f07b9c6dc7b3b6b0e40b7e128fe391b30c7e067bc0e786d779b98e8
MD5 dd4134c58ac5bd0d1b51d069aa49b4eb
BLAKE2b-256 8345f0de33f155307968d166b0ad3f9c2643ff87dee1e1d75f386b97d8ca9b4d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for mmap_ninja_dataframe-0.7.1-py3-none-any.whl
Algorithm Hash digest
SHA256 580ece8cd46677a3d8798206e515f7634f9ffaf105f47292f9a3b53e3773533a
MD5 ea29fd962e687c0add941b7c5590d58e
BLAKE2b-256 b09b4d9157f28b22380c604a7dd88dc6f53b79ed54fe393e27fe17b323876e6d

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