# Apache Fory™ Python
[](https://github.com/apache/fory/actions/workflows/ci.yml)
[](https://pypi.org/project/pyfory/)
[](https://join.slack.com/t/fory-project/shared_invite/zt-36g0qouzm-kcQSvV_dtfbtBKHRwT5gsw)
[](https://x.com/ApacheFory)
**Apache Fory** (formerly _Fury_) is a blazing fast multi-language serialization framework powered by **JIT** (just-in-time compilation) and **zero-copy**, providing up to 170x performance and ease of use.
This package provides the Python bindings for Apache Fory.
## Installation
You can install `pyfory` using pip:
```bash
pip install pyfory
```
## Quickstart
Here are a few examples of how to use `pyfory` for serialization.
### Basic Serialization
This example shows how to serialize and deserialize a simple Python object.
```python
from typing import Dict
import pyfory
class SomeClass:
f1: "SomeClass"
f2: Dict[str, str]
f3: Dict[str, str]
fory = pyfory.Fory(ref_tracking=True)
fory.register_type(SomeClass, typename="example.SomeClass")
obj = SomeClass()
obj.f2 = {"k1": "v1", "k2": "v2"}
obj.f1, obj.f3 = obj, obj.f2
data = fory.serialize(obj)
# bytes can be data serialized by other languages.
print(fory.deserialize(data))
```
### Cross-language Serialization
Apache Fory excels at cross-language serialization. You can serialize data in Python and deserialize it in another language like Java or Go, and vice-versa.
Here's an example of how to serialize an object in Python and deserialize it in Java:
**Python**
```python
from typing import Dict
import pyfory
class SomeClass:
f1: "SomeClass"
f2: Dict[str, str]
f3: Dict[str, str]
fory = pyfory.Fory(ref_tracking=True)
fory.register_type(SomeClass, typename="example.SomeClass")
obj = SomeClass()
obj.f2 = {"k1": "v1", "k2": "v2"}
obj.f1, obj.f3 = obj, obj.f2
data = fory.serialize(obj)
# `data` can now be sent to a Java application
```
**Java**
```java
import org.apache.fory.*;
import org.apache.fory.config.*;
import java.util.*;
public class ReferenceExample {
public static class SomeClass {
SomeClass f1;
Map<String, String> f2;
Map<String, String> f3;
}
public static void main(String[] args) {
Fory fory = Fory.builder().withLanguage(Language.XLANG)
.withRefTracking(true).build();
fory.register(SomeClass.class, "example.SomeClass");
// `bytes` would be the data received from the Python application
byte[] bytes = ...
System.out.println(fory.deserialize(bytes));
}
}
```
### Row Format Zero-Copy Partial Serialzation
Apache Fory provide a random-access row format, which supports map a typed nested struct into a binary and read its nested element without deserializing the whole binary. This can be used to minimize teh deserialization overhead for huge objects in the case where you only needs to access part of the data. You can even encode huge objects into binary and write to file, then mmap that file into memory to reduce memory overhead too.
**Python**
```python
@dataclass
class Bar:
f1: str
f2: List[pa.int64]
@dataclass
class Foo:
f1: pa.int32
f2: List[pa.int32]
f3: Dict[str, pa.int32]
f4: List[Bar]
encoder = pyfory.encoder(Foo)
foo = Foo(f1=10, f2=list(range(1000_000)),
f3={f"k{i}": i for i in range(1000_000)},
f4=[Bar(f1=f"s{i}", f2=list(range(10))) for i in range(1000_000)])
binary: bytes = encoder.to_row(foo).to_bytes()
foo_row = pyfory.RowData(encoder.schema, binary)
print(foo_row.f2[100000], foo_row.f4[100000].f1, foo_row.f4[200000].f2[5])
```
**Java**
```java
public class Bar {
String f1;
List<Long> f2;
}
public class Foo {
int f1;
List<Integer> f2;
Map<String, Integer> f3;
List<Bar> f4;
}
RowEncoder<Foo> encoder = Encoders.bean(Foo.class);
Foo foo = new Foo();
foo.f1 = 10;
foo.f2 = IntStream.range(0, 1000000).boxed().collect(Collectors.toList());
foo.f3 = IntStream.range(0, 1000000).boxed().collect(Collectors.toMap(i -> "k"+i, i->i));
List<Bar> bars = new ArrayList<>(1000000);
for (int i = 0; i < 1000000; i++) {
Bar bar = new Bar();
bar.f1 = "s"+i;
bar.f2 = LongStream.range(0, 10).boxed().collect(Collectors.toList());
bars.add(bar);
}
foo.f4 = bars;
// Can be zero-copy read by python
BinaryRow binaryRow = encoder.toRow(foo);
// can be data from python
Foo newFoo = encoder.fromRow(binaryRow);
// zero-copy read List<Integer> f2
BinaryArray binaryArray2 = binaryRow.getArray(1);
// zero-copy read List<Bar> f4
BinaryArray binaryArray4 = binaryRow.getArray(3);
// zero-copy read 11th element of `readList<Bar> f4`
BinaryRow barStruct = binaryArray4.getStruct(10);
// zero-copy read 6th of f2 of 11th element of `readList<Bar> f4`
barStruct.getArray(1).getInt64(5);
RowEncoder<Bar> barEncoder = Encoders.bean(Bar.class);
// deserialize part of data.
Bar newBar = barEncoder.fromRow(barStruct);
Bar newBar2 = barEncoder.fromRow(binaryArray4.getStruct(20));
```
## Useful Links
- **[Project Website](https://fory.apache.org)**
- **[Documentation](https://fory.apache.org/docs/latest/python_guide/)**
- **[GitHub Repository](https://github.com/apache/fory)**
- **[Issue Tracker](https://github.com/apache/fory/issues)**
- **[Slack Channel](https://join.slack.com/t/fory-project/shared_invite/zt-36g0qouzm-kcQSvV_dtfbtBKHRwT5gsw)**
Raw data
{
"_id": null,
"home_page": null,
"name": "pyfory",
"maintainer": null,
"docs_url": null,
"requires_python": null,
"maintainer_email": "\"https://github.com/chaokunyang\" <shawn.ck.yang@gmail.com>",
"keywords": "fory, serialization, multi-language, fast, row-format, jit, codegen, polymorphic, zero-copy",
"author": null,
"author_email": "chaokunyang <shawn.ck.yang@gmail.com>",
"download_url": null,
"platform": null,
"description": "# Apache Fory\u2122 Python\n\n[](https://github.com/apache/fory/actions/workflows/ci.yml)\n[](https://pypi.org/project/pyfory/)\n[](https://join.slack.com/t/fory-project/shared_invite/zt-36g0qouzm-kcQSvV_dtfbtBKHRwT5gsw)\n[](https://x.com/ApacheFory)\n\n**Apache Fory** (formerly _Fury_) is a blazing fast multi-language serialization framework powered by **JIT** (just-in-time compilation) and **zero-copy**, providing up to 170x performance and ease of use.\n\nThis package provides the Python bindings for Apache Fory.\n\n## Installation\n\nYou can install `pyfory` using pip:\n\n```bash\npip install pyfory\n```\n\n## Quickstart\n\nHere are a few examples of how to use `pyfory` for serialization.\n\n### Basic Serialization\n\nThis example shows how to serialize and deserialize a simple Python object.\n\n```python\nfrom typing import Dict\nimport pyfory\n\nclass SomeClass:\n f1: \"SomeClass\"\n f2: Dict[str, str]\n f3: Dict[str, str]\n\nfory = pyfory.Fory(ref_tracking=True)\nfory.register_type(SomeClass, typename=\"example.SomeClass\")\nobj = SomeClass()\nobj.f2 = {\"k1\": \"v1\", \"k2\": \"v2\"}\nobj.f1, obj.f3 = obj, obj.f2\ndata = fory.serialize(obj)\n# bytes can be data serialized by other languages.\nprint(fory.deserialize(data))\n```\n\n### Cross-language Serialization\n\nApache Fory excels at cross-language serialization. You can serialize data in Python and deserialize it in another language like Java or Go, and vice-versa.\n\nHere's an example of how to serialize an object in Python and deserialize it in Java:\n\n**Python**\n\n```python\nfrom typing import Dict\nimport pyfory\n\nclass SomeClass:\n f1: \"SomeClass\"\n f2: Dict[str, str]\n f3: Dict[str, str]\n\nfory = pyfory.Fory(ref_tracking=True)\nfory.register_type(SomeClass, typename=\"example.SomeClass\")\nobj = SomeClass()\nobj.f2 = {\"k1\": \"v1\", \"k2\": \"v2\"}\nobj.f1, obj.f3 = obj, obj.f2\ndata = fory.serialize(obj)\n# `data` can now be sent to a Java application\n```\n\n**Java**\n\n```java\nimport org.apache.fory.*;\nimport org.apache.fory.config.*;\nimport java.util.*;\n\npublic class ReferenceExample {\n public static class SomeClass {\n SomeClass f1;\n Map<String, String> f2;\n Map<String, String> f3;\n }\n\n public static void main(String[] args) {\n Fory fory = Fory.builder().withLanguage(Language.XLANG)\n .withRefTracking(true).build();\n fory.register(SomeClass.class, \"example.SomeClass\");\n // `bytes` would be the data received from the Python application\n byte[] bytes = ...\n System.out.println(fory.deserialize(bytes));\n }\n}\n```\n\n### Row Format Zero-Copy Partial Serialzation\n\nApache Fory provide a random-access row format, which supports map a typed nested struct into a binary and read its nested element without deserializing the whole binary. This can be used to minimize teh deserialization overhead for huge objects in the case where you only needs to access part of the data. You can even encode huge objects into binary and write to file, then mmap that file into memory to reduce memory overhead too.\n\n**Python**\n\n```python\n@dataclass\nclass Bar:\n f1: str\n f2: List[pa.int64]\n@dataclass\nclass Foo:\n f1: pa.int32\n f2: List[pa.int32]\n f3: Dict[str, pa.int32]\n f4: List[Bar]\n\nencoder = pyfory.encoder(Foo)\nfoo = Foo(f1=10, f2=list(range(1000_000)),\n f3={f\"k{i}\": i for i in range(1000_000)},\n f4=[Bar(f1=f\"s{i}\", f2=list(range(10))) for i in range(1000_000)])\nbinary: bytes = encoder.to_row(foo).to_bytes()\nfoo_row = pyfory.RowData(encoder.schema, binary)\nprint(foo_row.f2[100000], foo_row.f4[100000].f1, foo_row.f4[200000].f2[5])\n```\n\n**Java**\n\n```java\npublic class Bar {\n String f1;\n List<Long> f2;\n}\n\npublic class Foo {\n int f1;\n List<Integer> f2;\n Map<String, Integer> f3;\n List<Bar> f4;\n}\n\nRowEncoder<Foo> encoder = Encoders.bean(Foo.class);\nFoo foo = new Foo();\nfoo.f1 = 10;\nfoo.f2 = IntStream.range(0, 1000000).boxed().collect(Collectors.toList());\nfoo.f3 = IntStream.range(0, 1000000).boxed().collect(Collectors.toMap(i -> \"k\"+i, i->i));\nList<Bar> bars = new ArrayList<>(1000000);\nfor (int i = 0; i < 1000000; i++) {\n Bar bar = new Bar();\n bar.f1 = \"s\"+i;\n bar.f2 = LongStream.range(0, 10).boxed().collect(Collectors.toList());\n bars.add(bar);\n}\nfoo.f4 = bars;\n// Can be zero-copy read by python\nBinaryRow binaryRow = encoder.toRow(foo);\n// can be data from python\nFoo newFoo = encoder.fromRow(binaryRow);\n// zero-copy read List<Integer> f2\nBinaryArray binaryArray2 = binaryRow.getArray(1);\n// zero-copy read List<Bar> f4\nBinaryArray binaryArray4 = binaryRow.getArray(3);\n// zero-copy read 11th element of `readList<Bar> f4`\nBinaryRow barStruct = binaryArray4.getStruct(10);\n\n// zero-copy read 6th of f2 of 11th element of `readList<Bar> f4`\nbarStruct.getArray(1).getInt64(5);\nRowEncoder<Bar> barEncoder = Encoders.bean(Bar.class);\n// deserialize part of data.\nBar newBar = barEncoder.fromRow(barStruct);\nBar newBar2 = barEncoder.fromRow(binaryArray4.getStruct(20));\n```\n\n## Useful Links\n\n- **[Project Website](https://fory.apache.org)**\n- **[Documentation](https://fory.apache.org/docs/latest/python_guide/)**\n- **[GitHub Repository](https://github.com/apache/fory)**\n- **[Issue Tracker](https://github.com/apache/fory/issues)**\n- **[Slack Channel](https://join.slack.com/t/fory-project/shared_invite/zt-36g0qouzm-kcQSvV_dtfbtBKHRwT5gsw)**\n",
"bugtrack_url": null,
"license": null,
"summary": "Apache Fory\u2122 is a blazingly fast multi-language serialization framework powered by jit and zero-copy",
"version": "0.12.2",
"project_urls": null,
"split_keywords": [
"fory",
" serialization",
" multi-language",
" fast",
" row-format",
" jit",
" codegen",
" polymorphic",
" zero-copy"
],
"urls": [
{
"comment_text": null,
"digests": {
"blake2b_256": "7db659e00434fad591203ad1229e6f97f12fb0aea2cc8e273b240c53d7230e7a",
"md5": "0d22ea9f781e74e9647fba611f6417d0",
"sha256": "b142404243e5ca4206f636a50053aebffa4304fd2c2da00a421637eaf59d8cb2"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp310-cp310-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "0d22ea9f781e74e9647fba611f6417d0",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 817935,
"upload_time": "2025-09-08T06:07:36",
"upload_time_iso_8601": "2025-09-08T06:07:36.501192Z",
"url": "https://files.pythonhosted.org/packages/7d/b6/59e00434fad591203ad1229e6f97f12fb0aea2cc8e273b240c53d7230e7a/pyfory-0.12.2-cp310-cp310-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "33a5fdc0c420a16a3dffa6ebecd7b113a9cc6d5bd228030ac0e7b51339bba97d",
"md5": "6e18bbaa715396966cb96cc158fe4e54",
"sha256": "dff6c192293ffb486e5d78efa353a91fa288da7dbd160dada4a502e813291b7e"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp310-cp310-macosx_15_0_universal2.whl",
"has_sig": false,
"md5_digest": "6e18bbaa715396966cb96cc158fe4e54",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 801573,
"upload_time": "2025-09-08T06:07:38",
"upload_time_iso_8601": "2025-09-08T06:07:38.489786Z",
"url": "https://files.pythonhosted.org/packages/33/a5/fdc0c420a16a3dffa6ebecd7b113a9cc6d5bd228030ac0e7b51339bba97d/pyfory-0.12.2-cp310-cp310-macosx_15_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "381e482793ee668ddc0b49990075b231d15ca1606865f6eb9691eb551b977fce",
"md5": "b5f9610ddba80691fc2822b65fbeef1e",
"sha256": "df275505fc81601e34c6dc495ea1b417ee3b53481d2145627bc2dab6f1afcc49"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "b5f9610ddba80691fc2822b65fbeef1e",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 1001667,
"upload_time": "2025-09-08T06:13:48",
"upload_time_iso_8601": "2025-09-08T06:13:48.882439Z",
"url": "https://files.pythonhosted.org/packages/38/1e/482793ee668ddc0b49990075b231d15ca1606865f6eb9691eb551b977fce/pyfory-0.12.2-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d3b744a1d59e1c9e7f0a7e5e36682999502e853678c37af3e53cb031def0180f",
"md5": "b436ebc8129c0fdfb167a7da9e3d5fbc",
"sha256": "a5d0498e09444aa49b29a7fbaa644dda22081c73974359e64b56e308246b7190"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "b436ebc8129c0fdfb167a7da9e3d5fbc",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 1021852,
"upload_time": "2025-09-08T06:13:50",
"upload_time_iso_8601": "2025-09-08T06:13:50.520107Z",
"url": "https://files.pythonhosted.org/packages/d3/b7/44a1d59e1c9e7f0a7e5e36682999502e853678c37af3e53cb031def0180f/pyfory-0.12.2-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ce9aceeb023e735c4298ff374b66416a0b99f630c3a154ed6fb1bc3cd6c3d219",
"md5": "039c8682d63b5725c30c8982fefa72f1",
"sha256": "c5582fe4a85df57fffa6ef9f110f1fe0f6fae37c42252d0b20694f2fa0db16d8"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp310-cp310-win_amd64.whl",
"has_sig": false,
"md5_digest": "039c8682d63b5725c30c8982fefa72f1",
"packagetype": "bdist_wheel",
"python_version": "cp310",
"requires_python": null,
"size": 714726,
"upload_time": "2025-09-08T06:07:40",
"upload_time_iso_8601": "2025-09-08T06:07:40.339944Z",
"url": "https://files.pythonhosted.org/packages/ce/9a/ceeb023e735c4298ff374b66416a0b99f630c3a154ed6fb1bc3cd6c3d219/pyfory-0.12.2-cp310-cp310-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "cd3478ed2441bf57658a7f953fdaf92a76d898a0c8eed6f03ff146de36975013",
"md5": "7d574b54e2aba0d07bd4e6c214a6fb08",
"sha256": "380eb347fad2cc8cccbba644992905e9913fc03d5b77268b7be03f8357ef7117"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp311-cp311-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "7d574b54e2aba0d07bd4e6c214a6fb08",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 830957,
"upload_time": "2025-09-08T06:07:41",
"upload_time_iso_8601": "2025-09-08T06:07:41.873851Z",
"url": "https://files.pythonhosted.org/packages/cd/34/78ed2441bf57658a7f953fdaf92a76d898a0c8eed6f03ff146de36975013/pyfory-0.12.2-cp311-cp311-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "90d6732bb89f9f48084ccd6a76eefca31c1a93b04e52bc83f55e377cdb0777ec",
"md5": "264bb77bf47bfe4b093d367dcea15573",
"sha256": "40b31cbb2f752be5fe6bcb4ea4098287dd21fa86d30600eb884b3c69138516bf"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp311-cp311-macosx_15_0_universal2.whl",
"has_sig": false,
"md5_digest": "264bb77bf47bfe4b093d367dcea15573",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 812977,
"upload_time": "2025-09-08T06:07:43",
"upload_time_iso_8601": "2025-09-08T06:07:43.580533Z",
"url": "https://files.pythonhosted.org/packages/90/d6/732bb89f9f48084ccd6a76eefca31c1a93b04e52bc83f55e377cdb0777ec/pyfory-0.12.2-cp311-cp311-macosx_15_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "616089c015d119c0ed3a95cf6ed80af8324ac5065b3c15ca612ea00304a3e716",
"md5": "c6c763d3920dc243414ebda977f5c236",
"sha256": "3f3b508442afd66ca4a274101fe10bbaf0f2b22ab0c35ae93ba31d57547835f2"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "c6c763d3920dc243414ebda977f5c236",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 1015110,
"upload_time": "2025-09-08T06:13:52",
"upload_time_iso_8601": "2025-09-08T06:13:52.168010Z",
"url": "https://files.pythonhosted.org/packages/61/60/89c015d119c0ed3a95cf6ed80af8324ac5065b3c15ca612ea00304a3e716/pyfory-0.12.2-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "adfc148001b835d30023678aca0089863a04e006acaf080833d3945b73503b57",
"md5": "482ac7f0e21814b2eadc32ba42ae3b62",
"sha256": "b1946af1d50f810da1d643efcef68634d2ab589a3fe1c639917cf33bfab4b559"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "482ac7f0e21814b2eadc32ba42ae3b62",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 1036912,
"upload_time": "2025-09-08T06:13:53",
"upload_time_iso_8601": "2025-09-08T06:13:53.659043Z",
"url": "https://files.pythonhosted.org/packages/ad/fc/148001b835d30023678aca0089863a04e006acaf080833d3945b73503b57/pyfory-0.12.2-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "91976a5d7743d539e53c44a422b1f206664fa3f20697840a6a96ce7d1a164f0a",
"md5": "40f9f651862d44ec0a3fee173b47af7a",
"sha256": "ac1e4f0d675db2475dfc5c9625b24053b39a477c1bacd0f8da8965d0cd177200"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp311-cp311-win_amd64.whl",
"has_sig": false,
"md5_digest": "40f9f651862d44ec0a3fee173b47af7a",
"packagetype": "bdist_wheel",
"python_version": "cp311",
"requires_python": null,
"size": 715100,
"upload_time": "2025-09-08T06:07:45",
"upload_time_iso_8601": "2025-09-08T06:07:45.005682Z",
"url": "https://files.pythonhosted.org/packages/91/97/6a5d7743d539e53c44a422b1f206664fa3f20697840a6a96ce7d1a164f0a/pyfory-0.12.2-cp311-cp311-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "78d2dd55b32635136a911999682ebbcc3315ceb1dad9e933641a37adbf560c2a",
"md5": "5b412f39b4e728ac602beac94c2b3d5c",
"sha256": "e0f88e215953d3d0325d361d092ff4133f2b979a698e6fd9155cd73c8a69045e"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp312-cp312-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "5b412f39b4e728ac602beac94c2b3d5c",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 831380,
"upload_time": "2025-09-08T06:07:47",
"upload_time_iso_8601": "2025-09-08T06:07:47.037864Z",
"url": "https://files.pythonhosted.org/packages/78/d2/dd55b32635136a911999682ebbcc3315ceb1dad9e933641a37adbf560c2a/pyfory-0.12.2-cp312-cp312-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a5dc17d7ef95baec5a7d7c5549a9f496a251ad9b96bb555260d1b8c2b6cf5f35",
"md5": "3b9e6c66457ccbe3dd9e10391456f6d9",
"sha256": "fa6cb67d13db01b90f1f64d9cee349d1c3bbe4d17ef8c89d0526973ecd709661"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp312-cp312-macosx_15_0_universal2.whl",
"has_sig": false,
"md5_digest": "3b9e6c66457ccbe3dd9e10391456f6d9",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 811021,
"upload_time": "2025-09-08T06:07:48",
"upload_time_iso_8601": "2025-09-08T06:07:48.638082Z",
"url": "https://files.pythonhosted.org/packages/a5/dc/17d7ef95baec5a7d7c5549a9f496a251ad9b96bb555260d1b8c2b6cf5f35/pyfory-0.12.2-cp312-cp312-macosx_15_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "ae70dbc930e3399d28641d5b4f8d2e60cece5177f21028aba7511dec3009ef2d",
"md5": "5a260c65b041ea81664967d26710eb50",
"sha256": "323e3a6c395e7e3f00d09f5f0a9ff0f414536467380bd1e2712027c8ead1b3e5"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "5a260c65b041ea81664967d26710eb50",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 1013749,
"upload_time": "2025-09-08T06:13:55",
"upload_time_iso_8601": "2025-09-08T06:13:55.209776Z",
"url": "https://files.pythonhosted.org/packages/ae/70/dbc930e3399d28641d5b4f8d2e60cece5177f21028aba7511dec3009ef2d/pyfory-0.12.2-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e3ff9c70a89f1b328dd68acb322b7d60499c1183fd305c6835f26c6889605b4f",
"md5": "beb569b92bd6147114460685187fc14f",
"sha256": "c6fa72493bdfb657069d4ac2d3c9152cbc44143f8619cfe14ac11aebc28e8d0e"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "beb569b92bd6147114460685187fc14f",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 1038814,
"upload_time": "2025-09-08T06:13:56",
"upload_time_iso_8601": "2025-09-08T06:13:56.492526Z",
"url": "https://files.pythonhosted.org/packages/e3/ff/9c70a89f1b328dd68acb322b7d60499c1183fd305c6835f26c6889605b4f/pyfory-0.12.2-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "2505c7147128519e12d375c9f59ff61ad706f93db0f26b002d2acac2f62beae9",
"md5": "ab7e5b5b1322060c1651ee23d0a2c999",
"sha256": "335be1614c880e938b9e379d9c3d134117619582f6f0c66876f1466180919504"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp312-cp312-win_amd64.whl",
"has_sig": false,
"md5_digest": "ab7e5b5b1322060c1651ee23d0a2c999",
"packagetype": "bdist_wheel",
"python_version": "cp312",
"requires_python": null,
"size": 675374,
"upload_time": "2025-09-08T06:07:50",
"upload_time_iso_8601": "2025-09-08T06:07:50.456929Z",
"url": "https://files.pythonhosted.org/packages/25/05/c7147128519e12d375c9f59ff61ad706f93db0f26b002d2acac2f62beae9/pyfory-0.12.2-cp312-cp312-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "80166d08721fe40bef41d8a83b0464e39126ae1f8466799ebe64a4b35cefaa4e",
"md5": "226465771128cf483588e0c79e268c38",
"sha256": "294020fb42072e590e5b13d72155fb2186ae86cbe097190c81207a95597c5d4f"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp313-cp313-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "226465771128cf483588e0c79e268c38",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": null,
"size": 828145,
"upload_time": "2025-09-08T06:07:51",
"upload_time_iso_8601": "2025-09-08T06:07:51.982013Z",
"url": "https://files.pythonhosted.org/packages/80/16/6d08721fe40bef41d8a83b0464e39126ae1f8466799ebe64a4b35cefaa4e/pyfory-0.12.2-cp313-cp313-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "e0e6534323b6b5caedd78fc023131db81c8063e9c9314c89a97492da14ce3c6b",
"md5": "fe0505800025e56f9ca5139d36279181",
"sha256": "cc1fb1844c622fb8215e87d06da171cc3b64675ee8b309caa0cac8732895a522"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp313-cp313-macosx_15_0_universal2.whl",
"has_sig": false,
"md5_digest": "fe0505800025e56f9ca5139d36279181",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": null,
"size": 808481,
"upload_time": "2025-09-08T06:07:53",
"upload_time_iso_8601": "2025-09-08T06:07:53.428500Z",
"url": "https://files.pythonhosted.org/packages/e0/e6/534323b6b5caedd78fc023131db81c8063e9c9314c89a97492da14ce3c6b/pyfory-0.12.2-cp313-cp313-macosx_15_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5f91f061640363bc2548cab62349e501d2791af22ddda236ed990f1a45ccae39",
"md5": "262c48479fa6e954c53d193685feb5f2",
"sha256": "cc76998720197f51e3dbcf73dace1aa9d5ed31e75caa78ac28f8f0264cfbf1cd"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "262c48479fa6e954c53d193685feb5f2",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": null,
"size": 1013585,
"upload_time": "2025-09-08T06:13:57",
"upload_time_iso_8601": "2025-09-08T06:13:57.864072Z",
"url": "https://files.pythonhosted.org/packages/5f/91/f061640363bc2548cab62349e501d2791af22ddda236ed990f1a45ccae39/pyfory-0.12.2-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "afa0523f8cd71b7db8b4e41a17119f65f6099d1bc262a5cb5de58f201df7940a",
"md5": "00abca436eea92e283571592346c818e",
"sha256": "65a00336a25f96133ac0d8aa4fb53ad785cb8089b1bc96e57aaa379f154c99d4"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "00abca436eea92e283571592346c818e",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": null,
"size": 1037492,
"upload_time": "2025-09-08T06:13:59",
"upload_time_iso_8601": "2025-09-08T06:13:59.808489Z",
"url": "https://files.pythonhosted.org/packages/af/a0/523f8cd71b7db8b4e41a17119f65f6099d1bc262a5cb5de58f201df7940a/pyfory-0.12.2-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5043c1e97e121b89487300ca31d98ea8ff4daa23e39b02389998bc44d7b475f6",
"md5": "20f383915394c6562238a1bb8e0cddb4",
"sha256": "639b16f6a81d5acc76d4afbce291675d40b3a7e6766fbad58267938d07687f58"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp313-cp313-win_amd64.whl",
"has_sig": false,
"md5_digest": "20f383915394c6562238a1bb8e0cddb4",
"packagetype": "bdist_wheel",
"python_version": "cp313",
"requires_python": null,
"size": 675557,
"upload_time": "2025-09-08T06:07:54",
"upload_time_iso_8601": "2025-09-08T06:07:54.886305Z",
"url": "https://files.pythonhosted.org/packages/50/43/c1e97e121b89487300ca31d98ea8ff4daa23e39b02389998bc44d7b475f6/pyfory-0.12.2-cp313-cp313-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "a75e6fdcc282a0829bd653dcabaf7a7b7b487be9cc722e159b29f172b388750e",
"md5": "63bea52156e1fc9fb78b805110052a22",
"sha256": "19f5c963230914e5b1ad89ce1fbf2732c23e04c73a574bcbd27b3f263ce2073f"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp38-cp38-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "63bea52156e1fc9fb78b805110052a22",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 829937,
"upload_time": "2025-09-08T06:07:56",
"upload_time_iso_8601": "2025-09-08T06:07:56.692546Z",
"url": "https://files.pythonhosted.org/packages/a7/5e/6fdcc282a0829bd653dcabaf7a7b7b487be9cc722e159b29f172b388750e/pyfory-0.12.2-cp38-cp38-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "993c54c34b839038bd8944ac5e5ad469d85cd49b8b3d67edc947b97d8f4b982e",
"md5": "a662df230e30cadceed2b80f5148656c",
"sha256": "7ecd62fd3fc74a2b3488f815efa243658e725d1239056e8c60638d177767a90b"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp38-cp38-macosx_15_0_universal2.whl",
"has_sig": false,
"md5_digest": "a662df230e30cadceed2b80f5148656c",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 811470,
"upload_time": "2025-09-08T06:07:58",
"upload_time_iso_8601": "2025-09-08T06:07:58.664913Z",
"url": "https://files.pythonhosted.org/packages/99/3c/54c34b839038bd8944ac5e5ad469d85cd49b8b3d67edc947b97d8f4b982e/pyfory-0.12.2-cp38-cp38-macosx_15_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "5d6e6bf236af5d2e0250314dc4763854b501b5a2627a859a9c66fbb4d709db23",
"md5": "1defb53443b0204681da23aafcdb363f",
"sha256": "f25e1a1dce2f93487c0e2ae94050ab87519dc5c14f52bc9f6b5f0963114bfcca"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"has_sig": false,
"md5_digest": "1defb53443b0204681da23aafcdb363f",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 22978515,
"upload_time": "2025-09-08T06:14:01",
"upload_time_iso_8601": "2025-09-08T06:14:01.917204Z",
"url": "https://files.pythonhosted.org/packages/5d/6e/6bf236af5d2e0250314dc4763854b501b5a2627a859a9c66fbb4d709db23/pyfory-0.12.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "bd594148f39cc0fd996982094475e5725a0ef2c16fd13ca0818eff80cd987bbe",
"md5": "0e7030e68f266727e95a0c454b6aace2",
"sha256": "85e84b2f0c4996c9968302ee447deaff1f67f5c6a90e460902afdd663cf143df"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"has_sig": false,
"md5_digest": "0e7030e68f266727e95a0c454b6aace2",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 24626406,
"upload_time": "2025-09-08T06:14:04",
"upload_time_iso_8601": "2025-09-08T06:14:04.311325Z",
"url": "https://files.pythonhosted.org/packages/bd/59/4148f39cc0fd996982094475e5725a0ef2c16fd13ca0818eff80cd987bbe/pyfory-0.12.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "fd2bd7e869a3dc6ee1c2a8e28ef366ecacc547325625be8369afaadccc4e5e9a",
"md5": "f74b1fed98666dfdd1d0166e632e2e17",
"sha256": "0163ec479193ec2ecc09aa5c4b141eecdecfc3e968f78837897aa79b961e49ee"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp38-cp38-win_amd64.whl",
"has_sig": false,
"md5_digest": "f74b1fed98666dfdd1d0166e632e2e17",
"packagetype": "bdist_wheel",
"python_version": "cp38",
"requires_python": null,
"size": 717254,
"upload_time": "2025-09-08T06:07:59",
"upload_time_iso_8601": "2025-09-08T06:07:59.982680Z",
"url": "https://files.pythonhosted.org/packages/fd/2b/d7e869a3dc6ee1c2a8e28ef366ecacc547325625be8369afaadccc4e5e9a/pyfory-0.12.2-cp38-cp38-win_amd64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "840e55bc266bc96ef9fb5e8c845169527e5b4cbeb079f110640c545c1ab68600",
"md5": "7bdaa1e33c70a1982ebfbd5f117420be",
"sha256": "54b649d3d28688e99f803b99b0786f5b649251b3b1bb77cb5d64433897baf46d"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp39-cp39-macosx_10_13_x86_64.whl",
"has_sig": false,
"md5_digest": "7bdaa1e33c70a1982ebfbd5f117420be",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 819928,
"upload_time": "2025-09-08T06:08:01",
"upload_time_iso_8601": "2025-09-08T06:08:01.553180Z",
"url": "https://files.pythonhosted.org/packages/84/0e/55bc266bc96ef9fb5e8c845169527e5b4cbeb079f110640c545c1ab68600/pyfory-0.12.2-cp39-cp39-macosx_10_13_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "de5398ed6bbca3319717ced588fd6b305a3e9419b7ba25234495359edbdeb741",
"md5": "b1c8c5a33de71ee4b83365543405dd41",
"sha256": "8a203ad7aa038ffb2e05257108cbe103b1ea825343af4eebd111a1ab5692a20f"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp39-cp39-macosx_15_0_universal2.whl",
"has_sig": false,
"md5_digest": "b1c8c5a33de71ee4b83365543405dd41",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 803771,
"upload_time": "2025-09-08T06:08:03",
"upload_time_iso_8601": "2025-09-08T06:08:03.023556Z",
"url": "https://files.pythonhosted.org/packages/de/53/98ed6bbca3319717ced588fd6b305a3e9419b7ba25234495359edbdeb741/pyfory-0.12.2-cp39-cp39-macosx_15_0_universal2.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "98946d515f5322f782d8634ca90a6fc388b63406c896d1e94009018e1a7b745c",
"md5": "c32a8ce7cfbe0be72248c39bde386e5a",
"sha256": "ffb31b719697cdd41e7b68d9742203f3019aa7342f4eb7ebdc8e2964259947f5"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"has_sig": false,
"md5_digest": "c32a8ce7cfbe0be72248c39bde386e5a",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 1003535,
"upload_time": "2025-09-08T06:14:06",
"upload_time_iso_8601": "2025-09-08T06:14:06.813876Z",
"url": "https://files.pythonhosted.org/packages/98/94/6d515f5322f782d8634ca90a6fc388b63406c896d1e94009018e1a7b745c/pyfory-0.12.2-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "831e5db90cfa6049abd0474d57b7be7f2bd4fd53d356589f177e208bf3ed6307",
"md5": "ec8c86a89e8b49f78597be9f0b6142a7",
"sha256": "e3114a57f221255d1674be7e73e59f74380a1b40e7d6c48c00c0bdecdcdd5ec4"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"has_sig": false,
"md5_digest": "ec8c86a89e8b49f78597be9f0b6142a7",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 1023914,
"upload_time": "2025-09-08T06:14:08",
"upload_time_iso_8601": "2025-09-08T06:14:08.793007Z",
"url": "https://files.pythonhosted.org/packages/83/1e/5db90cfa6049abd0474d57b7be7f2bd4fd53d356589f177e208bf3ed6307/pyfory-0.12.2-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": null,
"digests": {
"blake2b_256": "d371f83cd84c63e15212c6a0ec20e1937e264657ec3adab992bf3f945204767e",
"md5": "a06131f86bffc88ad4b66bc2d0155641",
"sha256": "3261cdf8752311334a52cb13ed15b9cc410d631fdc781037b1aab7efec05aac4"
},
"downloads": -1,
"filename": "pyfory-0.12.2-cp39-cp39-win_amd64.whl",
"has_sig": false,
"md5_digest": "a06131f86bffc88ad4b66bc2d0155641",
"packagetype": "bdist_wheel",
"python_version": "cp39",
"requires_python": null,
"size": 716102,
"upload_time": "2025-09-08T06:08:04",
"upload_time_iso_8601": "2025-09-08T06:08:04.664289Z",
"url": "https://files.pythonhosted.org/packages/d3/71/f83cd84c63e15212c6a0ec20e1937e264657ec3adab992bf3f945204767e/pyfory-0.12.2-cp39-cp39-win_amd64.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2025-09-08 06:07:36",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "pyfory"
}