Skip to main content

Searchable pandas text extension arrays for prototyping search

Project description

SearchArray

Python package | Discuss at Relevance Slack

SearchArray indexes an array of strings into a term index. It alows efficient BM25 / TFIDF scoring of phrases and individual tokens. Use it to search a numpy array of strings, list of strings, pandas column, or anything array-like.

IE consider the following pandas example:

from searcharray import SearchArray
import pandas as pd

df['title_indexed'] = SearchArray.index(df['title'])
np.sort(df['title_indexed'].array.score(['cat', 'in', 'the', 'hat']))   # Search w/ phrase

> BM25 scores:
> array([ 0.        ,  0.        ,  0.        , ..., 15.84568033, 15.84568033, 15.84568033])

Docs | Guide

SearchArray is documented in these notebooks:

SearchArray Guide | SearchArray Offline Experiment | About internals

Installation

pip install searcharray

Features

  • Search w/ terms by passing a string
  • Search w/ a phrase by passing a list[str]
  • Search w/ a phrase w/ edit-distance by passing slop=N.
  • Access raw stats arrays in termfreqs / docfreqs methods on the array
  • Bring your own tokenizer. Pass any (def tokenize(value: str) -> List[str]) when indexing.
  • Memory map by passing data_dir to index for memory mapped index
  • Accepts any python function to compute similarity. Here's one similarity
  • Scores the entire dataframe, allowing combination w/ other ranking attributes (recency, popularity, etc) or scores from other fields (ie boolean queries)
  • Implement's Solr's edismax query parser for efficient prototyping

Motivation

To simplify lexical search in the Python data stack.

Many ML / AI practitioners reach for a vector search solution, then realize they need to sprinkle in some degree of BM25 / lexical search. Let's get traditional full-text search to behave like other parts of the data stack.

SearchArray creates a Pandas-centric way of creating and using a search index as just part of a Pandas array. In a sense, it builds a search engine in Pandas - to allow anyone to prototype ideas and perform reranking, without external systems.

You can see a full end-to-end search relevance experiment in this colab notebook

IE, let's take a dataframe that has a bunch of text, like movie title and overviews:

In[1]: df = pd.DataFrame({'title': titles, 'overview': overviews}, index=ids)
Out[1]:
                                        title                                           overview
374430          Black Mirror: White Christmas  This feature-length special consists of three ...
19404   The Brave-Hearted Will Take the Bride  Raj is a rich, carefree, happy-go-lucky second...
278                  The Shawshank Redemption  Framed in the 1940s for the double murder of h...
372058                             Your Name.  High schoolers Mitsuha and Taki are complete s...
238                             The Godfather  Spanning the years 1945 to 1955, a chronicle o...
...                                       ...                                                ...
65513                          They Came Back  The lives of the residents of a small French t...
65515                       The Eleventh Hour  An ex-Navy SEAL, Michael Adams, (Matthew Reese...
65521                      Pyaar Ka Punchnama  Outspoken and overly critical Nishant Agarwal ...
32767                                  Romero  Romero is a compelling and deeply moving look ...

Index the text:

In[2]: df['title_indexed'] = SearchArray.index(df['title'])
       df

Out[2]:
                                        title                                           overview                                      title_indexed
374430          Black Mirror: White Christmas  This feature-length special consists of three ...  Terms({'Black', 'Mirror:', 'White'...
19404   The Brave-Hearted Will Take the Bride  Raj is a rich, carefree, happy-go-lucky second...  Terms({'The', 'Brave-Hearted', 'Wi...
278                  The Shawshank Redemption  Framed in the 1940s for the double murder of h...  Terms({'The', 'Shawshank', 'Redemp...
372058                             Your Name.  High schoolers Mitsuha and Taki are complete s...  Terms({'Your', 'Name.'}, {'Your': ...
238                             The Godfather  Spanning the years 1945 to 1955, a chronicle o...  Terms({'The', 'Godfather'}, {'The'...
...                                       ...                                                ...                                                ...
65513                          They Came Back  The lives of the residents of a small French t...  Terms({'Back', 'They', 'Came'},...
65515                       The Eleventh Hour  An ex-Navy SEAL, Michael Adams, (Matthew Reese...  Terms({'The', 'Hour', 'Eleventh': ...
65521                      Pyaar Ka Punchnama  Outspoken and overly critical Nishant Agarwal ...  Terms({'Ka', 'Pyaar', 'Punchnama':...
32767                                  Romero  Romero is a compelling and deeply moving look ...        Terms({'Romero'})
65534                                  Poison  Paul Braconnier and his wife Blandine only hav...        Terms({'Poison'})```

(notice the dumb tokenization - no worries you can pass your own tokenizer).

Then search, getting top N with Cat

In[3]: np.sort(df['title_indexed'].array.score('Cat'))
Out[3]: array([ 0.        ,  0.        ,  0.        , ..., 15.84568033,
                15.84568033, 15.84568033])

In[4]: df['title_indexed'].score('Cat').argsort()
Out[4]: 

array([0, 18561, 18560, ..., 15038, 19012,  4392])

And since its just pandas, we can, of course just retrieve the top matches

In[5]: df.iloc[top_n_cat[-10:]]
Out[5]:
                  title                                           overview                                      title_indexed
24106     The Black Cat  American honeymooners in Hungary are trapped i...  Terms({'Black': 1, 'The': 1, 'Cat': 1}, ...
12593     Fritz the Cat  A hypocritical swinging college student cat ra...  Terms({'Cat': 1, 'the': 1, 'Fritz': 1}, ...
39853  The Cat Concerto  Tom enters from stage left in white tie and ta...  Terms({'The': 1, 'Cat': 1, 'Concerto': 1...
75491   The Rabbi's Cat  Based on the best-selling graphic novel by Joa...  Terms({'The': 1, 'Cat': 1, "Rabbi's": 1}...
57353           Cat Run  When a sexy, high-end escort holds the key evi...  Terms({'Cat': 1, 'Run': 1}, {'Cat': [0],...
25508        Cat People  Sketch artist Irena Dubrovna (Simon) and Ameri...  Terms({'Cat': 1, 'People': 1}, {'Cat': [...
11694        Cat Ballou  A woman seeking revenge for her murdered fathe...  Terms({'Cat': 1, 'Ballou': 1}, {'Cat': [...
25078          Cat Soup  The surreal black comedy follows Nyatta, an an...  Terms({'Cat': 1, 'Soup': 1}, {'Cat': [0]...
35888        Cat Chaser  A Miami hotel owner finds danger when be becom...  Terms({'Cat': 1, 'Chaser': 1}, {'Cat': [...
6217         Cat People  After years of separation, Irina (Nastassja Ki...  Terms({'Cat': 1, 'People': 1}, {'Cat': [...

More use cases can be seen in the colab notebook

Goals

The overall goals are to recreate a lot of the lexical features (term / phrase search) of a search engine like Solr or Elasticsearch, but in a Pandas dataframe.

Memory efficient and fast text index

We want the index to be as memory efficient and fast at searching as possible. We want using it to have a minimal overhead.

We want you to be able to work with a reasonable dataset (100X-1M docs) relatively efficiently for offline evaluation. And 1000s for fast reranking in a service.

Experimentation, reranking, functionality over scalability

Instead of building for 'big data' our goal is to build for small-data. That is, focus on capabilities and expressiveness of Pandas, over limiting functionality in favor of scalability.

To this end, the applications of searcharray will tend to be focused on experimentation and top N candidate reranking. For experimentation, we want any ideas expressed in Pandas to have a somewhat clear path / "contract" in how they'd be implemented in a classical lexical search engine. For reranking, we want to load some top N results from a base system and be able to modify them.

Make lexical search compatible with the data stack

We know in search, RAG, and other retrieval problems hybrid search techniques dominate. Yet often its cast in terms of a giant, weird, big data lexical search engine that looks odd to most data scientists being joined with a vector database. We want lexical search to be more approachable to data scientists and ML engineers building these systems.

Non-goals

You need to bring your own tokenization

Python libraries already do tokenization really well. Even exceeding what Lucene can do... giving you the ability to simulate and/or exceed the abilities of Lucene's tokenization.

In SearchArray, a tokenizer is a function takes a string and emits a series of tokens. IE dumb, default whitespace tokenization:

def ws_tokenizer(string):
    return string.split()

And you can pass any tokenizer that matches this signature to index:

def ws_lowercase_tokenizer(string):
    return string.lower().split()

df['title_indexed'] = SearchArray.index(df['title'], tokenizer=ws_lowercase_tokenizer)

Create your own using stemming libraries, or whatever Python functionality you want.

Use Pandas instead of function queries

Solr has its own unique function query syntax. Elasticsearch has Painless.

Instead of recreating these, simply use Pandas on existing Pandas columns. Then later, if you need to implement this in Solr or Elasticsearch, attempt to recreate the functionality. Arguably what's in Solr / ES would be a subset of what you could do in Pandas.

# Calculate the number of hours into the past
df['hrs_into_past'] = (now - df['timestamp']).dt.total_seconds() / 3600

Then multiply by BM25 if you want:

df['score'] = df['title_indexed'].score('Cat') * df['hrs_into_past']

Vector search

We focus on the lexical, ie "BM25-ish" and adjacent problems. There are other great tools for vector search out there.

Need help?

Visit the #searcharray channel on Relevance Slack

TODOs / Future Work / Known issues

  • Always more efficient
  • Support tokenizers with overlapping positions (ie synonyms, etc)
  • Improve support for phrase slop
  • Helper functions (like this start at edismax that help recreate Solr / Elasticsearch lexical queries)
  • Fuzzy search
  • Efficient way to "slurp" some top N results from retrieval system into a dataframe

Project details


Release history Release notifications | RSS feed

Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

searcharray-0.0.73-pp310-pypy310_pp73-win_amd64.whl (546.2 kB view details)

Uploaded PyPyWindows x86-64

searcharray-0.0.73-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (638.1 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

searcharray-0.0.73-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (594.4 kB view details)

Uploaded PyPymanylinux: glibc 2.17+ ARM64

searcharray-0.0.73-pp310-pypy310_pp73-macosx_11_0_arm64.whl (536.5 kB view details)

Uploaded PyPymacOS 11.0+ ARM64

searcharray-0.0.73-pp310-pypy310_pp73-macosx_10_15_x86_64.whl (534.8 kB view details)

Uploaded PyPymacOS 10.15+ x86-64

searcharray-0.0.73-cp313-cp313-win_arm64.whl (493.4 kB view details)

Uploaded CPython 3.13Windows ARM64

searcharray-0.0.73-cp313-cp313-win_amd64.whl (586.2 kB view details)

Uploaded CPython 3.13Windows x86-64

searcharray-0.0.73-cp313-cp313-musllinux_1_2_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ x86-64

searcharray-0.0.73-cp313-cp313-musllinux_1_2_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.13musllinux: musl 1.2+ ARM64

searcharray-0.0.73-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ x86-64

searcharray-0.0.73-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.17+ ARM64

searcharray-0.0.73-cp313-cp313-macosx_11_0_arm64.whl (654.2 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

searcharray-0.0.73-cp313-cp313-macosx_10_13_x86_64.whl (641.1 kB view details)

Uploaded CPython 3.13macOS 10.13+ x86-64

searcharray-0.0.73-cp312-cp312-win_arm64.whl (494.9 kB view details)

Uploaded CPython 3.12Windows ARM64

searcharray-0.0.73-cp312-cp312-win_amd64.whl (589.0 kB view details)

Uploaded CPython 3.12Windows x86-64

searcharray-0.0.73-cp312-cp312-musllinux_1_2_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ x86-64

searcharray-0.0.73-cp312-cp312-musllinux_1_2_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.12musllinux: musl 1.2+ ARM64

searcharray-0.0.73-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

searcharray-0.0.73-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.6 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

searcharray-0.0.73-cp312-cp312-macosx_11_0_arm64.whl (661.4 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

searcharray-0.0.73-cp312-cp312-macosx_10_13_x86_64.whl (649.0 kB view details)

Uploaded CPython 3.12macOS 10.13+ x86-64

searcharray-0.0.73-cp311-cp311-win_arm64.whl (498.9 kB view details)

Uploaded CPython 3.11Windows ARM64

searcharray-0.0.73-cp311-cp311-win_amd64.whl (586.1 kB view details)

Uploaded CPython 3.11Windows x86-64

searcharray-0.0.73-cp311-cp311-musllinux_1_2_x86_64.whl (3.9 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ x86-64

searcharray-0.0.73-cp311-cp311-musllinux_1_2_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.11musllinux: musl 1.2+ ARM64

searcharray-0.0.73-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

searcharray-0.0.73-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

searcharray-0.0.73-cp311-cp311-macosx_11_0_arm64.whl (658.1 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

searcharray-0.0.73-cp311-cp311-macosx_10_9_x86_64.whl (647.5 kB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

searcharray-0.0.73-cp310-cp310-win_arm64.whl (501.6 kB view details)

Uploaded CPython 3.10Windows ARM64

searcharray-0.0.73-cp310-cp310-win_amd64.whl (586.7 kB view details)

Uploaded CPython 3.10Windows x86-64

searcharray-0.0.73-cp310-cp310-musllinux_1_2_x86_64.whl (3.7 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ x86-64

searcharray-0.0.73-cp310-cp310-musllinux_1_2_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.10musllinux: musl 1.2+ ARM64

searcharray-0.0.73-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

searcharray-0.0.73-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

searcharray-0.0.73-cp310-cp310-macosx_11_0_arm64.whl (659.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

searcharray-0.0.73-cp310-cp310-macosx_10_9_x86_64.whl (649.2 kB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

File details

Details for the file searcharray-0.0.73-pp310-pypy310_pp73-win_amd64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-pp310-pypy310_pp73-win_amd64.whl
Algorithm Hash digest
SHA256 ac2a95a873ff2b78ca747b54908014c7b48b34e45d4f5726a083cb67628f8868
MD5 641a521bc4b5625f827024aa0011fd08
BLAKE2b-256 3b2b0578c62fb41cc101932fe23724cc5e989625c4a315eb80afb97708393527

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 13ee042d53192d0b8cb61055d88d84e28fe5b5bb9193141f50cb7a1f04472b9b
MD5 fee18df5a992622b42f0210b4798f924
BLAKE2b-256 b1b65a913265caec4a4e27c2c7db2e9b9eb2e128ca10187f9f6cd111aa1657e3

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 46500b6c035038b0326c561a515f819355bb4bd3fbbe54a548fba859c41d92d5
MD5 3f4435dcc36fbd036ceff4ea2518192c
BLAKE2b-256 1820806df4f2fff44b1f0c033ed02995d5b31e0147690e26098438049be9156a

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-pp310-pypy310_pp73-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-pp310-pypy310_pp73-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5256ede916e1b7cdd16c098d7a8bcbd261240c53e9cd447a5f8c802126c4d655
MD5 2e60dc880307fbed18f52c54b3ca0e33
BLAKE2b-256 e9a796cc33686c2914a31da13ed43d62cffba4ab6badad4b7457bbf24acbc810

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-pp310-pypy310_pp73-macosx_10_15_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-pp310-pypy310_pp73-macosx_10_15_x86_64.whl
Algorithm Hash digest
SHA256 bf5f2a230fc9b92db2f2f4ba831aef5524d103914c3307b8d46722e2c521f0da
MD5 a0a3f1c91e4281d79d25a740dd83a0d2
BLAKE2b-256 0fbecae7bf6bab17678e2bd4387d850d9b3545c087442c3a339018ac2eb89482

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-win_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-win_arm64.whl
Algorithm Hash digest
SHA256 f247cfa5c5282c55c99c887f5de8124d7a19aabeb7ab60da16d9cf446a49ab12
MD5 e11e37f3ea77cbaa64910df0aebb7edd
BLAKE2b-256 724e482ded831799e89360d1ed0c9fdb4d289cb3282763429ffbfd68c55c54ce

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-win_amd64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 61554dd3e191786686facb167c3291c570a9d96014920a0508c212d08f296e20
MD5 fc4f91587acf28250cfb567a83f8045d
BLAKE2b-256 ca476f1e7a01683f25839a09b3ca36890e20c79ddcf569ba9a7b1b5732d9fbf4

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ff08679e4a4e23ed1963d3626a73efe8432de34164d81ff3948cdf1da197d6c9
MD5 80ece31305c81ad17d4a7bcb9c121a6d
BLAKE2b-256 c2b38cd0719ecbe511363defbe5c39f2f0971d61e453c1fbda885ba1eb5c11ac

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 88922af9d5188a25a11f4a3cc38d3312d9f345a593d26c5cf682ebcb21bacc64
MD5 d8671880fd5a0fee62c012aad393028d
BLAKE2b-256 e9dba0f7c73fee2b9ca0f5e67d2cf78f5fae73eb1ea52fd2beda9d6f6e4a4fb1

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 47f6e79f5d7d229dad12581289521db9580910ca1e944c582484bbd8533d722d
MD5 a2336756d1597f5574b5b24ab843bd77
BLAKE2b-256 1db5d20fc769a4fd265d2c9c6a798a7ce5a98436d903e00346c98437b3019571

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 2f8e50b2b25fc5739320bc5ff5672ae807b467e6709d450e902948a37a0f1463
MD5 f4599643de9cafe97894074bc9323f16
BLAKE2b-256 05a77596125624aaf1e70498b30fa5dcb990c59c439e95b3d54af0aa2997714d

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d7107a7bb995cc8f52e73ef78cef667a85f6013af072d23ad495aa98328d220a
MD5 4a86577dcc8781c4124a47dc18eb0bed
BLAKE2b-256 fbfc68eb05a7d0f7af9dabc26bdfbd96fe74f35918f1a2aef143d6ea612c52a1

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp313-cp313-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp313-cp313-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 55d16ba5aeb4a1c32d36dce10657d916b11019157526a9f2db73f3ea79659f2c
MD5 06e2fe4114dd3df38cb4e4b531bf1664
BLAKE2b-256 c4804763815ef4fa9837af5cffda447114dc70105a9a811b64d22c8d18c9671a

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-win_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-win_arm64.whl
Algorithm Hash digest
SHA256 da6cf44ebcb43669c813c0487be3e93428ef3e0148f0031330774aafc0c95b84
MD5 e736759c40c3552ad4687b696c4352ef
BLAKE2b-256 d66560efdbd096cd81ae38ded4f3b90463fae15016b7494873d746429a7ce3e8

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 a894332e3597ad00442f7d45f8a52d90c69ad38d456416e130181a04e6390113
MD5 99ee44ed71500f653ce3fcbafab165c2
BLAKE2b-256 350022859854f0d31c315f405765cb95df3f5cc3a9082d11e3f1e69ed8f1933a

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 0dcac300f5f4320183ad8af03a37112fde8515ea04d6372bbca5ee7abfcef619
MD5 3d1100c7518c39a8d81649caec9dec24
BLAKE2b-256 37c740425331d0ad32ac0c3ec1a795d64e12d38bb306a5f1d1146d42dfe618ff

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 296f7fbf3c925d427a553bf69cd7e171f98093e8a0e14e99d46eea2f3a09318e
MD5 ee5599743ab5ed11c13bfe57986181c8
BLAKE2b-256 599709b5faa73f7dbaaf81810c21adafbb9b7a34384156ab3d34b33715d6813a

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7d28507d3f5d5b4ef089a25913a275c10bbc9bfb28856f8527382b393f592798
MD5 e2029bed58a5bb77840c23eadaf949dd
BLAKE2b-256 5f36f8ffbd3e518fd2e889e314bd33a16a29004128e714732591571e199d7d78

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 237d466be353db93e2a4f704b287e9649121139bfcdab9165739416c6ad74ade
MD5 775f77f44664229a8cbf11adf6f54018
BLAKE2b-256 ad27bd87a66325557462ac0c59c06d05d0b5490be7c5ae684d0ecaa44c046821

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 17c91bfa9021f008d9d17af8863753cbeb532afecce45a38ede1ff856e0d3aff
MD5 e4015a086892446b3ef604802269b87b
BLAKE2b-256 9c6901944aeee5534f1636b0ad5acbec9e1c5d377f2700749a56c39d77370712

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp312-cp312-macosx_10_13_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp312-cp312-macosx_10_13_x86_64.whl
Algorithm Hash digest
SHA256 ce5a56832c24fb556b5cdbeb918d3158b0a27bb576ece55efe4db55d991c3bbb
MD5 f0b2fa3c018febbdc384455a5568b2f9
BLAKE2b-256 123cb5e27c6b6cac8a3fa1b7096688761e7c77c996fe7ffbe20e55f5245186d2

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-win_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-win_arm64.whl
Algorithm Hash digest
SHA256 264d861a992fee86befb93be05bc35631be9619916cfc8c9b010de718a283803
MD5 82e325ac49a3cf1ba57b8f0d5321ee42
BLAKE2b-256 99e188b0f6530c71d42e590cabfc7cd7c2fbac06b94644dfbedf917d1e79c721

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 cfcc9ac5be73a0f619bee72dac9ef1dcba560d4f8422901308c925aa7d4b8874
MD5 bcd35684bd05760fad2ed89268faadac
BLAKE2b-256 a7b31d79c47e07bb5dc3a90249fcc280810aa77fa759f5d1c4947cb65351f475

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 617e064976572284d765564940efb49e7f8daf9ddf656e84d71fc2d75994dfd9
MD5 e845c1659e561083487c9a91b96baee5
BLAKE2b-256 83c1dc7a3d233ffef79015d064e7b17c4ed93c96c17d3b6dd893068b0e49ac4d

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 d65ac4ff653ae390276f8519b10998806a50f29664857430e9ec29c0aa85ddef
MD5 225d10d9c851b31026373816507164f1
BLAKE2b-256 0103e02c2bce46870c5b63a12247ff67add9e68b8d8b32707834dcbda00f0dea

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 0c4b6575769c156c71d962f9afb7a6e74ee9ff62797171fd73da5dcc0d5efc37
MD5 7c55aee01b86923e3ecfd0a2b85b20eb
BLAKE2b-256 55d906df5859b4aeb2546bb662de6c3602f43174eba2493bbd75973f7dc8d4ea

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 4684d62bb183dcd6d51bae1b174e76c1836f0555266c2d477dcac713f4fab765
MD5 0d91373c7cee6bc3a714b20039800a00
BLAKE2b-256 29c35677fbf76711b80d9568f388d346b3a52309fc14cbe0a736da384c0cfae1

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8127b9c04d44ffe88925b22b3265c38e8f8c97d665981e414fbba272213d114f
MD5 7db761246e34e3581b3fda6bd893f1b9
BLAKE2b-256 68d550457c5b28c52e0e964ffd11b0a84d17606b7b7137213a9ba27555a863af

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 9d55fb8c1f516e8891c7c9bf3ff3e5c8b39076d8e218d31bede1c3a48e865781
MD5 21ff9cf028ef21654e034c722cee15cf
BLAKE2b-256 f11ffc4913815741b4038a6e32decf8a7e01ba0ca19537c349316e68a7f96a7f

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-win_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-win_arm64.whl
Algorithm Hash digest
SHA256 50ac4eaf5063f3a313d9b148a1c714ba3e2138413ca00180c2e63c27b0636c12
MD5 23cc3ecf0f7000bde319a9315e222354
BLAKE2b-256 e63e3a6e73deee757108b5e51b578a15b8736782aee79a49b3e1121724fbda35

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-win_amd64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 d7b55def13cab798134cf8ebc8f0c95b3c61f855153d3d8bdd388b0b0a61ded7
MD5 51afdb54552a55700d7a18c210a6b9b2
BLAKE2b-256 3c979b5f860e3b76d97e4b72b05fbc3f1a464e252cd3973f8b2501951d78f6f9

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4fb5433a145e97897aec0f56153d7fd59a2e043784315ce550331ef367f7b5c9
MD5 e83e968d1883ba604ce6982f8930da52
BLAKE2b-256 36efe8098b98d32b13b9f5ca81a4f67684dbe52a795c8388f838f47fcbff9e5c

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 dbd6b370b63134285023f9891b3ab136506144c8516c1e661832ef31d701101f
MD5 309be2701a3f81e59f9f33c80f4ca02f
BLAKE2b-256 9d195124ad81f4477ecb5dfec2721d5e1ebaf622170e17fb36d69a78fe7ba1a4

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7ec26161c0197d322365a9990beb6b23922e1e860a84b99ef5c6161a3f294b94
MD5 956ea9259b4361222b5ae8b2c9fb10cd
BLAKE2b-256 ad2fd6238ad751458afa65a0c46d849d4bbfb5eea7e01566cd8255cf60c4791a

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 bafde532df5f4faf36bf83f084f06c55ba879862e7b3bd1e98e5c33cc05044ae
MD5 636a6634abfef313733fc275d4505e9a
BLAKE2b-256 02f730f81cad3af5b0f1d302f8f3d724a224146316664feacdb2e15848043f86

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8def36816353e3642ed72bed6400112112648d9a06f219e443212940913b9577
MD5 db0fdc828bbf07f0c0582bb5f1489508
BLAKE2b-256 9c69b65df7f93141c1561e182bfe054ef05ad55b46fe200a8b35771893ed0cb0

See more details on using hashes here.

File details

Details for the file searcharray-0.0.73-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for searcharray-0.0.73-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 994fc6decbe4adc99c0d40cc9f689661ae16922145c8c296a3c2609b23e8b9d2
MD5 8a3991b537406147a4eec9598045ab5a
BLAKE2b-256 ec4326dd7e820239b39437681811ba80cce65d00ce74c9fa482e701b1bac665d

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