pyfury


Namepyfury JSON
Version 0.10.3 PyPI version JSON
download
home_pageNone
SummaryApache Fury™(incubating) is a blazingly fast multi-language serialization framework powered by jit and zero-copy
upload_time2025-08-18 12:24:24
maintainerNone
docs_urlNone
authorNone
requires_pythonNone
licenseNone
keywords fury serialization multi-language fast row-format jit codegen polymorphic zero-copy
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Apache Fury™ Python

Apache Fury(incubating) is a blazingly-fast multi-language serialization framework powered by just-in-time compilation and zero-copy.

## Important Announcement

**Apache Fury has been renamed to Apache Fory starting from v0.11.0, please use [pyfory](https://pypi.org/project/pyfory/) instead.**

**For versions before 0.11, please use "fury" instead of "fory" in package names, imports, and dependencies, see [Fury Docs](https://fory.apache.org/docs/0.10/docs/introduction/) for how to use Fury in older versions**.

## Install Pyfury

```
pip install pyfury
```

For `0.11+` version, please install pyfory instead:

```
pip install pyfory
```

## Getting Started

### Object graph serialization

```python
from dataclasses import dataclass
import pyfory

class Foo:
    name: str:
    age: int
pyfory.register(Foo)
bytes = pyfory.serialize(Foo("Shawn", 30))  # Ultra-fast encoding
restored = pyfory.deserialize(bytes)  # Instant decoding
```

### Row format zero-copy serialization

```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));
```

### 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 = pyfury.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 = pyfury.RowData(encoder.schema, binary)
print(foo_row.f2[100000], foo_row.f4[100000].f1, foo_row.f4[200000].f2[5])
```

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "pyfury",
    "maintainer": null,
    "docs_url": null,
    "requires_python": null,
    "maintainer_email": "\"https://github.com/chaokunyang\" <shawn.ck.yang@gmail.com>",
    "keywords": "fury, 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 Fury\u2122 Python\n\nApache Fury(incubating) is a blazingly-fast multi-language serialization framework powered by just-in-time compilation and zero-copy.\n\n## Important Announcement\n\n**Apache Fury has been renamed to Apache Fory starting from v0.11.0, please use [pyfory](https://pypi.org/project/pyfory/) instead.**\n\n**For versions before 0.11, please use \"fury\" instead of \"fory\" in package names, imports, and dependencies, see [Fury Docs](https://fory.apache.org/docs/0.10/docs/introduction/) for how to use Fury in older versions**.\n\n## Install Pyfury\n\n```\npip install pyfury\n```\n\nFor `0.11+` version, please install pyfory instead:\n\n```\npip install pyfory\n```\n\n## Getting Started\n\n### Object graph serialization\n\n```python\nfrom dataclasses import dataclass\nimport pyfory\n\nclass Foo:\n    name: str:\n    age: int\npyfory.register(Foo)\nbytes = pyfory.serialize(Foo(\"Shawn\", 30))  # Ultra-fast encoding\nrestored = pyfory.deserialize(bytes)  # Instant decoding\n```\n\n### Row format zero-copy serialization\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### 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 = pyfury.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 = pyfury.RowData(encoder.schema, binary)\nprint(foo_row.f2[100000], foo_row.f4[100000].f1, foo_row.f4[200000].f2[5])\n```\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Apache Fury\u2122(incubating) is a blazingly fast multi-language serialization framework powered by jit and zero-copy",
    "version": "0.10.3",
    "project_urls": null,
    "split_keywords": [
        "fury",
        " serialization",
        " multi-language",
        " fast",
        " row-format",
        " jit",
        " codegen",
        " polymorphic",
        " zero-copy"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "4b48ef0f03f867f4f29b57eec22b57e731f9add895556423c41e75644d20e022",
                "md5": "5c79dc38c08ba1b42ba29a11e57faf2d",
                "sha256": "8e4a392fea4ab60c48ab7357e131cf7d582c69d59e7ce04bc4aa7e0efe647bb0"
            },
            "downloads": -1,
            "filename": "pyfury-0.10.3-cp310-cp310-manylinux1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "5c79dc38c08ba1b42ba29a11e57faf2d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": null,
            "size": 1119164,
            "upload_time": "2025-08-18T12:24:24",
            "upload_time_iso_8601": "2025-08-18T12:24:24.424464Z",
            "url": "https://files.pythonhosted.org/packages/4b/48/ef0f03f867f4f29b57eec22b57e731f9add895556423c41e75644d20e022/pyfury-0.10.3-cp310-cp310-manylinux1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1285af123033204a41583ece685928fcc3e9030dd979e27ab0f6ee43d82ae5c2",
                "md5": "ab73520c8c6096517dcc4480e58197c5",
                "sha256": "b6aa40b269d0ad38c89b126614456ed7984f7f7f6dc1e3046f828aa959d85bc1"
            },
            "downloads": -1,
            "filename": "pyfury-0.10.3-cp311-cp311-manylinux1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "ab73520c8c6096517dcc4480e58197c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": null,
            "size": 1120538,
            "upload_time": "2025-08-18T12:08:34",
            "upload_time_iso_8601": "2025-08-18T12:08:34.644933Z",
            "url": "https://files.pythonhosted.org/packages/12/85/af123033204a41583ece685928fcc3e9030dd979e27ab0f6ee43d82ae5c2/pyfury-0.10.3-cp311-cp311-manylinux1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "e5971154f29600d0c23ad08622a355de27dc259a66862de603e21fb708e6ac02",
                "md5": "2d7224a28032ae1b1752c2e250691aec",
                "sha256": "b0a9a58f5f828adaed74fc43d9d8c60406411a34432826bababc492ff1a488ee"
            },
            "downloads": -1,
            "filename": "pyfury-0.10.3-cp312-cp312-manylinux1_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2d7224a28032ae1b1752c2e250691aec",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": null,
            "size": 1124853,
            "upload_time": "2025-08-18T12:24:08",
            "upload_time_iso_8601": "2025-08-18T12:24:08.599823Z",
            "url": "https://files.pythonhosted.org/packages/e5/97/1154f29600d0c23ad08622a355de27dc259a66862de603e21fb708e6ac02/pyfury-0.10.3-cp312-cp312-manylinux1_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-18 12:24:24",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "pyfury"
}
        
Elapsed time: 2.58802s