feat(python): add bfloat16 and bfloat16_array support#3329
Open
asadjan4611 wants to merge 10 commits intoapache:mainfrom
Open
feat(python): add bfloat16 and bfloat16_array support#3329asadjan4611 wants to merge 10 commits intoapache:mainfrom
asadjan4611 wants to merge 10 commits intoapache:mainfrom
Conversation
- Add BFloat16 Cython type with IEEE 754 compliant conversions
- Add BFloat16Array class backed by array.array('H')
- Implement serializers for scalar and array types
- Register types in type resolver (TypeId.BFLOAT16 = 18, TypeId.BFLOAT16_ARRAY = 54)
- Add buffer read/write methods for bfloat16
- Add codegen support for bfloat16
- Add row format support (with temporary float16 mapping until C++ support)
- Add comprehensive test suite with 11 test cases covering all edge cases
- Follow existing float16 implementation patterns
Fixes apache#3289
- Change single quotes to double quotes (ruff format requirement) - Remove trailing whitespace - Add blank lines after imports (PEP 8) - Remove unused import (pyfory) - Fix closing parenthesis alignment
- Remove invalid Cython type casts (<BFloat16>) in serialization.pyx and primitive.pxi - Use isinstance() check instead of type casting for Python classes - Fix bfloat16() function to use float16() as temporary workaround until C++ support is added - Comment out bfloat16() declaration in libformat.pxd with TODO for future C++ implementation
Replace unsafe pointer casts with memcpy to ensure cross-platform compatibility across all OS versions (Windows, Linux, macOS) and architectures (x86_64, ARM). This fixes strict aliasing violations that cause compilation failures on ARM and newer compilers.
Replace sizeof(float) with explicit constant 4 in memcpy calls to ensure cross-platform compatibility, especially on ARM architectures where sizeof() may cause compilation issues. This matches the project's pattern of using explicit size constants (as seen in types.py). Fixes build failures on: - ubuntu-24.04-arm (aarch64) - macos-arm64 (Apple Silicon) - ubuntu-24.04-arm with Python 3.13
Author
|
@chaokunyang please review my PR and this is very interesting Project and i learn a lot of things from this issue . |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why?
This PR implements bfloat16 (Brain Float 16) and bfloat16_array support for Fory Python runtime and codegen, addressing issue #3289. This enables using bfloat16 in FDL to reduce payload size while keeping a wide exponent range, which is common in ML/AI workflows.
What does this PR do?
This PR adds comprehensive bfloat16 support to Fory Python:
Core Implementation
array.array('H')for packed contiguous storageBFloat16Serializer) and array (BFloat16ArraySerializer) serializersIntegration Points
write_bfloat16()andread_bfloat16()methodsbfloat16()factory function (temporarily maps to float16 until C++ row format supports it)Testing
Code Quality
float16implementation patternsRelated issues
Does this PR introduce any user-facing change?
BFloat16,BFloat16Arraytypes andbfloat16()factory functionImplementation Details
Wire Format
Type System
Performance
array.array('H')