Skip to main content

CI PyPI Python versions Downloads Code style: ruff License: GPL-3.0

fse

Fast Sentence Embeddings

Status

fse 1.x is in maintenance mode. 1.1.0 is the last feature release of the 1.x line. From here on, 1.x receives bug and compatibility fixes only.

fse 2.0 is in development as a rewrite by the maintainer. It will change the API and the file format of saved models; a migration guide and a way to export 1.x models will come with it. Until then, feature requests are closed.

  • Version 1.1.0 is tested on Python 3.11 to 3.13 with current numpy, scipy, gensim and huggingface-hub releases.
  • Python 3.14 and newer are not supported yet, because gensim does not build there (see gensim#3640).
  • Bug reports are welcome.

If you start a new project, also look at actively maintained libraries such as sentence-transformers or model2vec.

Upgrading from 1.0

  • SIF and uSIF give different vectors than 1.0. Their principal components are now computed exactly over all sentence vectors instead of from a random sample, and uSIF now weights the removed components like the reference implementation. Retrain SIF and uSIF models to get vectors that are comparable with new ones; uSIF models saved by 1.0 keep their old weighting when loaded. The STS Benchmark table below is remeasured.
  • Arguments are validated strictly: wrong types and out-of-range values raise a pydantic.ValidationError instead of being coerced or ignored.
  • fse 1.1 requires Python 3.11 or newer and adds the dependencies pydantic and threadpoolctl.

All changes are listed in CHANGELOG.md.

About

Fast Sentence Embeddings is a Python library that serves as an addition to Gensim. This library is intended to compute sentence vectors for large collections of sentences or documents with as little hassle as possible:

from fse import Vectors, Average, IndexedList

vecs = Vectors.from_pretrained("glove-wiki-gigaword-50")
model = Average(vecs)

sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]

model.train(IndexedList(sentences))

model.sv.similarity(0,1)

Audience

This package builds upon Gensim and is intended to compute sentence/paragraph vectors for large databases. Use this package if:

  • (Sentence) Transformers are too slow
  • Your dataset is too large for existing solutions (spacy)
  • Using GPUs is not an option.

The average (online) inference time for a well optimized (and batched) sentence-transformer is around 1ms-10ms per sentence. If that is not enough and you are willing to sacrifice a bit in terms of quality, this is your package.

Features

Find the corresponding blog post(s) here (code may be outdated):

fse implements three algorithms for sentence embeddings. You can choose between unweighted sentence averages, smooth inverse frequency averages, and unsupervised smooth inverse frequency averages.

Key features of fse are:

[X] Millions of sentences per second with several workers (1)

[X] Provides HUB access to various pre-trained models for convenience

[X] Supports Average, SIF, and uSIF Embeddings

[X] Full support for Gensims Word2Vec and all other compatible classes

[X] Full support for Gensims FastText with out-of-vocabulary words

[X] Induction of word frequencies for pre-trained embeddings

[X] Incredibly fast Cython core routines

[X] Dedicated input file formats for easy usage (including disk streaming)

[X] Ram-to-disk training for large corpora

[X] Disk-to-disk training for even larger corpora

[X] Many fail-safe checks for easy usage

[X] Simple interface for developing your own models

[X] Extensive documentation of all functions

[X] Optimized Input Classes

(1) Measured on 16 vCPUs of an AMD EPYC with 16 workers: up to 2.2 million sentences per second for Average and 1.7 million for SIF, reading a CorpusFile of 2 million sentences with 20 tokens and 300 dimensions; one worker reaches 180k to 440k. The numbers vary with the machine and its load; see Choosing an input class and measure your own setup with benchmarks/bench_train.py.

Installation

Pre-built wheels are available for Linux (x86_64, aarch64), macOS (arm64, x86_64) and Windows (x86_64) on Python 3.11 to 3.13:

pip install -U fse

or, with uv:

uv add fse

On other platforms pip builds the Cython extension from the source distribution. This needs a C compiler; Cython and numpy are installed automatically during the build. To build from a clone of this repository:

uv pip install .

If the C extension cannot be loaded, fse falls back to a much slower numpy implementation and emits a RuntimeWarning.

Usage

Using pre-trained models with fse is easy. You can just use them from the hub and download them accordingly. They will be stored locally so you can re-use them later.

from fse import Vectors, Average, IndexedList
vecs = Vectors.from_pretrained("glove-wiki-gigaword-50")
model = Average(vecs)

sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]

model.train(IndexedList(sentences))

model.sv.similarity(0,1)

If your vectors are large and you don't have a lot of RAM, you can supply the mmap argument as follows to read the vectors from disk instead of loading them into RAM:

Vectors.from_pretrained("glove-wiki-gigaword-50", mmap="r")

To check which vectors are on the hub, please check: https://huggingface.co/fse. For example, you will find:

  • glove-twitter-25
  • glove-twitter-50
  • glove-twitter-100
  • glove-twitter-200
  • glove-wiki-gigaword-100
  • glove-wiki-gigaword-300
  • word2vec-google-news-300
  • paragram-25
  • paranmt-300
  • paragram-300-sl999
  • paragram-300-ws353
  • fasttext-wiki-news-subwords-300
  • fasttext-crawl-subwords-300 (Use with FTVectors)

Only load models you trust. Vectors.from_pretrained, FTVectors.from_pretrained and the load methods of all models unpickle the downloaded or stored files, and unpickling untrusted data can execute arbitrary code.

In order to use fse with a custom model you must first estimate a Gensim model which contains a gensim.models.keyedvectors.KeyedVectors class, for example Word2Vec or Fasttext. Then you can proceed to compute sentence embeddings for a corpus as follows:

from gensim.models import FastText
sentences = [["cat", "say", "meow"], ["dog", "say", "woof"]]
ft = FastText(sentences, min_count=1, vector_size=10)

from fse import Average, IndexedList
model = Average(ft)
model.train(IndexedList(sentences))

model.sv.similarity(0,1)

Choosing an input class

Every model trains on (tokens, index) tuples; the input classes produce them. Training uses one thread unless you pass workers; on a machine with several cores, pass workers=os.cpu_count(). With two or more workers, IndexedList, CIndexedList, SplitIndexedList, TextList and CorpusFile are read by every worker for its own part of the input, so they scale with workers; IndexedLineDocument, SplitCIndexedList and the classes with your own splitting are read in Python by one producer thread, which limits them from about two to four workers on. While a model with several workers trains, fse limits the threads of BLAS (OpenBLAS, MKL, Accelerate) to share the cores, for the whole process.

Measured on 16 vCPUs of an AMD EPYC (2 million sentences of 20 tokens, 300 dimensions; the vectors are bit-identical to those of the single producer thread), in sentences per second:

Input Model 1 worker 8 workers 16 workers
IndexedList Average 439k 1.5M 1.7M
SplitIndexedList Average 284k 939k 1.1M
CorpusFile Average 311k 1.6M 2.2M
IndexedList SIF 239k 611k 1.4M
CorpusFile SIF 179k 624k 1.7M

With the single producer thread before #88, 8 workers reached 325k (IndexedList, Average) and 191k (IndexedList, SIF) sentences per second on the same machine. The numbers vary with the load of the machine; measure your own setup with benchmarks/bench_train.py.

Your data Input class Splitting Index
Tokenized sentences in memory IndexedList(sentences) already split position
Raw strings in memory TextList(strings) like str.split(), native position
A local UTF-8 text file, one sentence per line CorpusFile(path) like str.split(), native line number
A compressed local file (.gz, .bz2, ... via smart_open) IndexedLineDocument(path) str.split() in Python line number
Your own splitting or indices CSplitIndexedList, CIndexedList, CSplitCIndexedList your function yours
import os

from fse import Average, CorpusFile, TextList

model = Average(ft, workers=os.cpu_count())
model.train(CorpusFile("sentences.txt"))  # line i of the file is sentence i
vectors = model.infer(TextList(["cat say meow", "dog say woof"]))

CorpusFile and TextList give exactly the sentences of IndexedLineDocument and SplitIndexedList: a line ends at \n, text is decoded strictly as UTF-8, and words are split at every character for which str.isspace() is true. Invalid UTF-8 raises a UnicodeDecodeError that names the sentence. The file must not change from the scan to the end of training: changes that alter its size, modification time or inode raise an error, but truncating a memory-mapped file while it is read can end the process on Linux.

To keep only close matches, pass min_similarity to most_similar or the similar_by_* methods:

model.sv.most_similar(0, topn=10, min_similarity=0.8)

Smaller sentence vectors

sv_dtype="float16" halves the memory of the sentence vectors and sv_dtype="int8" quarters it. The vectors are still computed in float32; they are only stored smaller, and every read (sv[i], get_vector, get_vectors, iter_blocks) returns float32. Training, updates, infer, the similarity searches, save/load and memory-mapped files (sv_mapfile_path) work as with float32.

from fse import SIF, CorpusFile

model = SIF(ft, sv_dtype="int8", sv_mapfile_path="vectors", workers=8)
model.train(CorpusFile("sentences.txt"))
model.sv.most_similar(0, topn=10)

model.sv.convert("float16")  # change the format of trained or loaded vectors

int8 stores one float32 scale per vector, so the cosine of two stored int8 vectors equals the cosine of the vectors they represent. On the STS Benchmark (all 15 vector sets of the table below, with CBOW, SIF-10 and uSIF), float16 changes the scores by at most 0.01 points and int8 by at most 0.02 points. Both round the vectors, so close neighbours can swap places: float16 changes at most 0.4 % and int8 up to 7 % of the 10 nearest neighbours of a sentence. Keep float32 where neighbour lists must match it exactly.

With index i for the i-th sentence (every input class except the C* lists with custom indices) and the compiled extension, training holds a ring of float32 windows of about 256 MB each instead of a float32 matrix of all sentences, and stores every finished window right away. Jobs hold at most 65,536 sentences, so the ring has two windows for up to 1,024 dimensions and a few more beyond. SIF and uSIF read the input twice for that, once to learn the principal components and once to store the vectors. Other inputs, and subclasses that replace the training hooks, train into a float32 matrix of all new rows first, and the log says why.

To apply a model to all vectors, for example a logistic regression, use score. It reads float16 and int8 vectors as stored, in parallel, and can write into a memmap:

import numpy as np

logits = model.sv.score(clf.coef_.T, clf.intercept_)  # X @ W + b, in blocks of rows
probabilities = 1 / (1 + np.exp(-logits))

for first_row, block in model.sv.iter_blocks():  # float32 blocks, for anything else
    ...

Smaller word vectors

wv_dtype="float16" or "int8" makes the model keep the word vectors it averages (and the ngram vectors of FastText models) in half or a quarter of the memory. The model quantizes a copy once when it is created; the word vectors you pass in stay unchanged. To keep their float32 values out of RAM as well, load them memory-mapped, for example Vectors.from_pretrained("word2vec-google-news-300", mmap="r"). With wv_mapfile_path the codes are written to a file and memory-mapped.

from fse import SIF, CorpusFile, Vectors

vectors = Vectors.from_pretrained("word2vec-google-news-300", mmap="r")
model = SIF(vectors, wv_dtype="int8", sv_dtype="int8", workers=8)
model.train(CorpusFile("sentences.txt"))

On the STS Benchmark (all 15 vector sets, with CBOW, SIF-10 and uSIF), float16 word vectors change the scores by at most 0.01 points and int8 by at most 0.12 points (glove-twitter-25 with SIF-10; every 300-dimensional set stays within 0.02 points).

The main benefit is memory. Averaging also gets somewhat faster where fse reads the codes with vector instructions: on x86-64 Linux and macOS with AVX2, FMA and F16C (Intel since Haswell, AMD since Zen), and on Apple Silicon and other arm64 CPUs with NEON; fse picks the routines when it is imported. Measured end to end (training from a CorpusFile of 2 million sentences, 300 dimensions, Average and SIF), int8 word vectors were, compared with float32 word vectors in fse 1.0:

Machine 1 worker 8 workers
Apple M1 Pro, 400,000 words 1.4 to 1.5 times as fast 1.2 to 1.4 times as fast
AMD EPYC (Zen 5, shared cloud machine), 400,000 and 3 million words 1.0 to 1.4 times as fast 0.7 to 1.15 times, mostly about the same

On x86-64 CPUs without AVX2 and on Windows, fse uses portable routines instead: float16 and int8 then save memory but train 20 to 35 % slower (measured on the AMD machine with the portable routines forced). float32 itself keeps its results unchanged; prefetching the rows of the next words made it up to about 1.2 times as fast.

Additional Information

Within the folder notebooks you can find the following guides, run with fse 1.1.0:

Tutorial.ipynb offers a walk-through of the most important functions: the input classes, training with several workers, inference, similarity queries, smaller vectors and score.

STS-Benchmarks.ipynb contains an example of how to use the library with pre-trained models to replicate the STS Benchmark results [4] reported in the papers; it produces the table under Results.

Speed Comparison.ipynb times training for the input classes, numbers of workers and storage formats. It replaces Speed Comparision.ipynb, which compared the numpy and Cython routines through internals that no longer exist.

In order to use the fse model, you first need some pre-trained gensim word embedding model, which is then used by fse to compute the sentence embeddings.

After computing sentence embeddings, you can use them in supervised or unsupervised NLP applications, as they serve as a formidable baseline.

The models presented are based on

  • Deep-averaging embeddings [1]
  • Smooth inverse frequency embeddings [2]
  • Unsupervised smooth inverse frequency embeddings [3]

Credits to Radim Řehůřek and all contributors for the awesome library and code that Gensim provides. A whole lot of the code found in this lib is based on Gensim.

Results

Pearson correlation (x100) on the test set of the STS Benchmark, computed with the procedure of notebooks/STS-Benchmarks.ipynb (lang_freq="en") with fse 1.1.0 on Python 3.13, numpy 2.5, scipy 1.18, gensim 4.4, wordfreq 3.1 and nltk 3.10. SIF and uSIF compute their principal components exactly since 1.1.0; against the randomized SVD of scikit-learn 1.9 used before, in the same environment, SIF-10 scores move by at most 0.04 points and uSIF scores not at all. Compared with the table published for fse 1.0, uSIF scores rise by 0.2 to 1.4 points. Most of that comes from a fix in 1.1.0 to how uSIF weights the removed principal components, worth 0.2 to 1.3 points when both formulas run in this environment (see CHANGELOG.md). Newer dependency versions shift SIF scores by up to 0.3 points and CBOW scores by up to 0.04 points.

Model Vectors params STS Benchmark
CBOW paranmt-300 79.82
uSIF paranmt-300 length=11 79.20
SIF-10 paranmt-300 components=10 76.74
SIF-10 paragram-300-sl999 components=10 74.29
SIF-10 paragram-300-ws353 components=10 74.09
uSIF paragram-300-sl999 length=11 73.60
SIF-10 fasttext-crawl-subwords-300 components=10 73.58
uSIF paragram-300-ws353 length=11 72.63
SIF-10 fasttext-wiki-news-subwords-300 components=10 72.24
SIF-10 glove-twitter-200 components=10 71.67
SIF-10 glove-wiki-gigaword-300 components=10 71.43
SIF-10 word2vec-google-news-300 components=10 71.18
SIF-10 glove-wiki-gigaword-200 components=10 70.73
uSIF fasttext-crawl-subwords-300 length=11 70.02
SIF-10 glove-twitter-100 components=10 69.70
uSIF fasttext-wiki-news-subwords-300 length=11 69.33
uSIF glove-wiki-gigaword-300 length=11 68.82
SIF-10 glove-wiki-gigaword-100 components=10 68.43
uSIF glove-wiki-gigaword-200 length=11 68.13
uSIF glove-twitter-200 length=11 67.60
uSIF word2vec-google-news-300 length=11 67.60
uSIF glove-wiki-gigaword-100 length=11 66.35
SIF-10 glove-twitter-50 components=10 65.57
uSIF glove-twitter-100 length=11 65.41
uSIF paragram-25 length=11 64.60
SIF-10 glove-wiki-gigaword-50 components=10 64.20
uSIF glove-wiki-gigaword-50 length=11 63.37
uSIF glove-twitter-50 length=11 61.80
CBOW word2vec-google-news-300 61.54
SIF-10 paragram-25 components=10 59.18
uSIF glove-twitter-25 length=11 56.30
CBOW paragram-300-ws353 54.72
SIF-10 glove-twitter-25 components=10 54.41
CBOW paragram-300-sl999 51.46
CBOW fasttext-crawl-subwords-300 48.53
CBOW glove-wiki-gigaword-300 44.46
CBOW glove-wiki-gigaword-200 42.40
CBOW paragram-25 40.13
CBOW glove-wiki-gigaword-100 38.12
CBOW glove-wiki-gigaword-50 37.47
CBOW glove-twitter-200 34.94
CBOW glove-twitter-100 33.81
CBOW glove-twitter-50 30.78
CBOW glove-twitter-25 26.15
CBOW fasttext-wiki-news-subwords-300 26.08

Literature

  1. Iyyer M, Manjunatha V, Boyd-Graber J, Daumé III H (2015) Deep Unordered Composition Rivals Syntactic Methods for Text Classification. Proc. 53rd Annu. Meet. Assoc. Comput. Linguist. 7th Int. Jt. Conf. Nat. Lang. Process., 1681-1691.

  2. Arora S, Liang Y, Ma T (2017) A Simple but Tough-to-Beat Baseline for Sentence Embeddings. Int. Conf. Learn. Represent. (Toulon, France), 1-16.

  3. Ethayarajh K (2018) Unsupervised Random Walk Sentence Embeddings: A Strong but Simple Baseline. Proceedings of the 3rd Workshop on Representation Learning for NLP. (Toulon, France), 91-100.

  4. Eneko Agirre, Daniel Cer, Mona Diab, Iñigo Lopez-Gazpio, Lucia Specia. Semeval-2017 Task 1: Semantic Textual Similarity Multilingual and Crosslingual Focused Evaluation. Proceedings of SemEval 2017.

Changelog

See CHANGELOG.md.

Development

The project uses uv and a Makefile:

make install   # create the environment and build the extension
make check     # format check, lint, type check and tests

See CONTRIBUTING.md for details and SECURITY.md for reporting vulnerabilities.

Author

Built by Dr. Oliver Borchers. For questions that do not belong in a GitHub issue, use the contact page.

Copyright (C) 2019 to 2026 Oliver Borchers, licensed under the GNU General Public License v3.0.

Citation

If you found this software useful, please cite it in your publication.

@misc{Borchers2019,
	author = {Borchers, Oliver},
	title = {Fast sentence embeddings},
	year = {2019},
	publisher = {GitHub},
	journal = {GitHub Repository},
	howpublished = {\url{https://github.com/oborchers/Fast_Sentence_Embeddings}},
}

Metadata

Release files for fse 1.1.0

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

Source distribution (sdist)

Source distribution for fse 1.1.0
File Size Uploaded Provenance Actions
fse-1.1.0.tar.gz 346.9 kB With provenance Details for fse-1.1.0.tar.gz

Built distributions (wheels)

Table of built distributions (wheels) for fse 1.1.0
File Actions
fse-1.1.0-cp313-cp313-win_amd64.whl CPython 3.13 CPython 3.13 Windows x86-64 Details for fse-1.1.0-cp313-cp313-win_amd64.whl
fse-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.13 CPython 3.13 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details for fse-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
fse-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.13 CPython 3.13 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details for fse-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
fse-1.1.0-cp313-cp313-macosx_11_0_arm64.whl CPython 3.13 CPython 3.13 macOS 11.0+ ARM64 Details for fse-1.1.0-cp313-cp313-macosx_11_0_arm64.whl
fse-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl CPython 3.13 CPython 3.13 macOS 10.13+ x86-64 Details for fse-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl
fse-1.1.0-cp312-cp312-win_amd64.whl CPython 3.12 CPython 3.12 Windows x86-64 Details for fse-1.1.0-cp312-cp312-win_amd64.whl
fse-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ x86-64, Linux glibc 2.28+ x86-64 Details for fse-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
fse-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.12 CPython 3.12 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details for fse-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
fse-1.1.0-cp312-cp312-macosx_11_0_arm64.whl CPython 3.12 CPython 3.12 macOS 11.0+ ARM64 Details for fse-1.1.0-cp312-cp312-macosx_11_0_arm64.whl
fse-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl CPython 3.12 CPython 3.12 macOS 10.13+ x86-64 Details for fse-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl
fse-1.1.0-cp311-cp311-win_amd64.whl CPython 3.11 CPython 3.11 Windows x86-64 Details for fse-1.1.0-cp311-cp311-win_amd64.whl
fse-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl CPython 3.11 CPython 3.11 Linux glibc 2.28+ x86-64, Linux glibc 2.17+ x86-64 Details for fse-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
fse-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl CPython 3.11 CPython 3.11 Linux glibc 2.17+ ARM64, Linux glibc 2.28+ ARM64 Details for fse-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
fse-1.1.0-cp311-cp311-macosx_11_0_arm64.whl CPython 3.11 CPython 3.11 macOS 11.0+ ARM64 Details for fse-1.1.0-cp311-cp311-macosx_11_0_arm64.whl
fse-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl CPython 3.11 CPython 3.11 macOS 10.9+ x86-64 Details for fse-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl

Total release size: 12.0 MB

Release files / fse-1.1.0.tar.gz

Download URL fse-1.1.0.tar.gz
Size 346.9 kB
Tags Source
SHA-256 checksum
How to use checksums
50e8a74bece6c0f52d7b58bcd3b2207479ecf020b7a663baee3e6bff48b08ec0
BLAKE2b-256 checksum
How to use checksums
0d242d384244dcbbf2dd5c27ba5345a7ddfdd051520e3917faa31aa8c1d8399c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp313-cp313-win_amd64.whl

Download URL fse-1.1.0-cp313-cp313-win_amd64.whl
Size 290.1 kB
Tags CPython 3.13 Windows x86-64
SHA-256 checksum
How to use checksums
4a07f3d50d5807dc6c3568d6f6e65a35502c192f5ca48f7284dfa08ea6627b4b
BLAKE2b-256 checksum
How to use checksums
709b38da8182a31d361682579ab0cb4b8d6e1503c8c0d8bf7ece3f5648d560d1
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL fse-1.1.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.5 MB
Tags CPython 3.13 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
8fffdf325d71fa043bfdc1f47cdd2adc74487b905770c7d01b1608b74fa7b3f8
BLAKE2b-256 checksum
How to use checksums
d9e056440eae476fe473a0b5c3da748ce3ca2f5a0426090d50acb1a7156e8777
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL fse-1.1.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 1.4 MB
Tags CPython 3.13 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
5f5d44c6dd02d0e2bc537b0797730820ca01a384a5debc99ede810670f2ac26d
BLAKE2b-256 checksum
How to use checksums
2d7bce5506419b1128831e882c2ea25e92842649168cc9053d957aa7aa19d8b9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp313-cp313-macosx_11_0_arm64.whl

Download URL fse-1.1.0-cp313-cp313-macosx_11_0_arm64.whl
Size 332.9 kB
Tags CPython 3.13 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
78ff940c5e42a0561be32b803083083063509d156ba217d4587f0af966d0be7f
BLAKE2b-256 checksum
How to use checksums
de3611c27f35983bcedc117575c41ae21ad6de3f73f3977af10178b1ad27e7d9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl

Download URL fse-1.1.0-cp313-cp313-macosx_10_13_x86_64.whl
Size 341.1 kB
Tags CPython 3.13 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
07617efeaabe9e3ff7d2234fc66502cf138f292594df2b95425b971aa5c82ee3
BLAKE2b-256 checksum
How to use checksums
8ee84b41de186450a894f5f8db13d1da418ffc9e0bbb74855cac830e7dfffd58
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp312-cp312-win_amd64.whl

Download URL fse-1.1.0-cp312-cp312-win_amd64.whl
Size 290.5 kB
Tags CPython 3.12 Windows x86-64
SHA-256 checksum
How to use checksums
14fabd451960fac6ddc527024c23017ec635204703c28ac92b293a4615b456fe
BLAKE2b-256 checksum
How to use checksums
f66a5f73649592591db82a635761555dc1a56e897ea16ed52c159ad559d5bed9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL fse-1.1.0-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.5 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
fcfc908632a95a4059407f696c7c5beadf67060b45d4e0aeef06eaf4a6ba374e
BLAKE2b-256 checksum
How to use checksums
4ab823564c77566bdd45df9735ac6dfaacb54a4e71a06c33f20817282700e6c0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL fse-1.1.0-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 1.4 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
b43c156ff1dbce5d613bb0587b7579b96cf8fc52fded9617aa0c81dc58573974
BLAKE2b-256 checksum
How to use checksums
a17b4c1119c992b8f6ca8cfbc743f0635a499f936dba3fa50171a684f30fc35c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp312-cp312-macosx_11_0_arm64.whl

Download URL fse-1.1.0-cp312-cp312-macosx_11_0_arm64.whl
Size 333.5 kB
Tags CPython 3.12 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
6b38f4b59dd2f243fc321eedb32f337fa97a14cef8100613d9439fcd709b2828
BLAKE2b-256 checksum
How to use checksums
bf0b14859e6839d9af263823d04ef16e207422ba3287acb1065bc6a6dd08fcae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl

Download URL fse-1.1.0-cp312-cp312-macosx_10_13_x86_64.whl
Size 341.4 kB
Tags CPython 3.12 macOS 10.13+ x86-64
SHA-256 checksum
How to use checksums
692efda9077782a9f8abc0ad378d2fdfc9a02826c460999974ef22f53b280373
BLAKE2b-256 checksum
How to use checksums
dddd78561e3ce32299903c179fe4777903149ce0245f1438a2c2103afed503fa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp311-cp311-win_amd64.whl

Download URL fse-1.1.0-cp311-cp311-win_amd64.whl
Size 294.4 kB
Tags CPython 3.11 Windows x86-64
SHA-256 checksum
How to use checksums
fbb56ca62d1046af338884cb3cf63b4510e4e98f6999c45d074fdaf090de0149
BLAKE2b-256 checksum
How to use checksums
d5be9474b4fafb6522f9a4e83ed88e444cf030db0cc5488206a0022072f5c559
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl

Download URL fse-1.1.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl
Size 1.5 MB
Tags CPython 3.11 Linux glibc 2.17+ x86-64 Linux glibc 2.28+ x86-64
SHA-256 checksum
How to use checksums
c56c0f7cc3dc07c4e73221e5d67896d113587811c4d96c469cf366004c87b700
BLAKE2b-256 checksum
How to use checksums
a795f69b5e19be9467be1f9e580f6247a15a8e15544b85d033b6699beefd6719
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl

Download URL fse-1.1.0-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl
Size 1.5 MB
Tags CPython 3.11 Linux glibc 2.17+ ARM64 Linux glibc 2.28+ ARM64
SHA-256 checksum
How to use checksums
bd12070800e822ec5651c45b958f5478c904ea11e970903b69d6db3a91dc67ab
BLAKE2b-256 checksum
How to use checksums
b378c125cdb651d582c28990fa4f04dab709813278b9c2b8c51e949f4a5f61e4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp311-cp311-macosx_11_0_arm64.whl

Download URL fse-1.1.0-cp311-cp311-macosx_11_0_arm64.whl
Size 332.1 kB
Tags CPython 3.11 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
7b2c1d2208891d353949c39b843af68468832fba00de6da489f5b971caaab2be
BLAKE2b-256 checksum
How to use checksums
d63c244d89414753a2007d84004d79cbea185785e5cffd9bf7ab7373ce974068
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Release files / fse-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl

Download URL fse-1.1.0-cp311-cp311-macosx_10_9_x86_64.whl
Size 342.5 kB
Tags CPython 3.11 macOS 10.9+ x86-64
SHA-256 checksum
How to use checksums
b042cbcd957bd56cd601f1eb7640518dbc5691f029c1202db0121bf27b5b19b4
BLAKE2b-256 checksum
How to use checksums
32e5137381b08fb02a1c37a092528ed86f587784802c379b2134d766e693d3a7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

Security for fse 1.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 16 files in this release have been uploaded with provenance metadata.

Select from 16 files

Attestation for fse-1.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 27, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

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