flexfloat 0.1.2__py3-none-any.whl → 0.1.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- flexfloat/__init__.py +28 -5
- flexfloat/bitarray/__init__.py +31 -0
- flexfloat/bitarray/bitarray.py +298 -0
- flexfloat/bitarray/bitarray_bigint.py +305 -0
- flexfloat/bitarray/bitarray_bool.py +202 -0
- flexfloat/bitarray/bitarray_int64.py +333 -0
- flexfloat/bitarray/bitarray_mixins.py +156 -0
- flexfloat/core.py +482 -94
- flexfloat/types.py +7 -1
- flexfloat-0.1.5.dist-info/METADATA +340 -0
- flexfloat-0.1.5.dist-info/RECORD +15 -0
- flexfloat/bitarray.py +0 -257
- flexfloat-0.1.2.dist-info/METADATA +0 -147
- flexfloat-0.1.2.dist-info/RECORD +0 -10
- {flexfloat-0.1.2.dist-info → flexfloat-0.1.5.dist-info}/WHEEL +0 -0
- {flexfloat-0.1.2.dist-info → flexfloat-0.1.5.dist-info}/licenses/LICENSE +0 -0
- {flexfloat-0.1.2.dist-info → flexfloat-0.1.5.dist-info}/top_level.txt +0 -0
@@ -1,147 +0,0 @@
|
|
1
|
-
Metadata-Version: 2.4
|
2
|
-
Name: flexfloat
|
3
|
-
Version: 0.1.2
|
4
|
-
Summary: A library for arbitrary precision floating point arithmetic
|
5
|
-
Author: Ferran Sanchez Llado
|
6
|
-
License: MIT
|
7
|
-
Classifier: Development Status :: 3 - Alpha
|
8
|
-
Classifier: Intended Audience :: Developers
|
9
|
-
Classifier: Intended Audience :: Science/Research
|
10
|
-
Classifier: License :: OSI Approved :: MIT License
|
11
|
-
Classifier: Operating System :: OS Independent
|
12
|
-
Classifier: Programming Language :: Python :: 3
|
13
|
-
Classifier: Programming Language :: Python :: 3.11
|
14
|
-
Classifier: Programming Language :: Python :: 3.12
|
15
|
-
Classifier: Topic :: Scientific/Engineering :: Mathematics
|
16
|
-
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
17
|
-
Requires-Python: >=3.11
|
18
|
-
Description-Content-Type: text/markdown
|
19
|
-
License-File: LICENSE
|
20
|
-
Provides-Extra: dev
|
21
|
-
Requires-Dist: pytest>=7.0; extra == "dev"
|
22
|
-
Requires-Dist: pytest-cov>=4.0; extra == "dev"
|
23
|
-
Requires-Dist: black>=23.0; extra == "dev"
|
24
|
-
Requires-Dist: isort>=5.0; extra == "dev"
|
25
|
-
Requires-Dist: mypy>=1.0; extra == "dev"
|
26
|
-
Requires-Dist: pylint>=3.0; extra == "dev"
|
27
|
-
Requires-Dist: flake8>=6.0; extra == "dev"
|
28
|
-
Requires-Dist: bump2version>=1.0; extra == "dev"
|
29
|
-
Requires-Dist: build>=0.10; extra == "dev"
|
30
|
-
Requires-Dist: twine>=4.0; extra == "dev"
|
31
|
-
Requires-Dist: check-manifest>=0.49; extra == "dev"
|
32
|
-
Requires-Dist: PyYAML>=6.0; extra == "dev"
|
33
|
-
Dynamic: license-file
|
34
|
-
|
35
|
-
# FlexFloat
|
36
|
-
|
37
|
-
A Python library for arbitrary precision floating point arithmetic with a flexible exponent and fixed-size fraction.
|
38
|
-
|
39
|
-
## Features
|
40
|
-
|
41
|
-
- **Growable Exponents**: Handle very large or very small numbers by dynamically adjusting the exponent size
|
42
|
-
- **Fixed-Size Fractions**: Maintain precision consistency with IEEE 754-compatible 52-bit fractions
|
43
|
-
- **IEEE 754 Compatibility**: Follows IEEE 754 double-precision format as the baseline
|
44
|
-
- **Special Value Support**: Handles NaN, positive/negative infinity, and zero values
|
45
|
-
- **Arithmetic Operations**: Addition and subtraction with proper overflow/underflow handling
|
46
|
-
|
47
|
-
## Installation
|
48
|
-
|
49
|
-
```bash
|
50
|
-
pip install flexfloat
|
51
|
-
```
|
52
|
-
|
53
|
-
## Development Installation
|
54
|
-
|
55
|
-
```bash
|
56
|
-
pip install -e ".[dev]"
|
57
|
-
```
|
58
|
-
|
59
|
-
## Usage
|
60
|
-
|
61
|
-
```python
|
62
|
-
from flexfloat import FlexFloat
|
63
|
-
|
64
|
-
# Create FlexFloat instances
|
65
|
-
a = FlexFloat.from_float(1.5)
|
66
|
-
b = FlexFloat.from_float(2.5)
|
67
|
-
|
68
|
-
# Perform arithmetic operations
|
69
|
-
result = a + b
|
70
|
-
print(result.to_float()) # 4.0
|
71
|
-
|
72
|
-
# Handle very large numbers
|
73
|
-
large_a = FlexFloat.from_float(1e308)
|
74
|
-
large_b = FlexFloat.from_float(1e308)
|
75
|
-
large_result = large_a + large_b
|
76
|
-
# Result has grown exponent to handle overflow
|
77
|
-
print(len(large_result.exponent)) # > 11 (grows beyond IEEE 754 standard)
|
78
|
-
```
|
79
|
-
|
80
|
-
## Running Tests
|
81
|
-
|
82
|
-
```bash
|
83
|
-
python -m pytest tests
|
84
|
-
```
|
85
|
-
|
86
|
-
## CI/CD and Release Process
|
87
|
-
|
88
|
-
This project uses automated CI/CD workflows for building, testing, and releasing:
|
89
|
-
|
90
|
-
### Automatic Releases
|
91
|
-
|
92
|
-
When a Pull Request is merged to the `main` branch:
|
93
|
-
|
94
|
-
1. **Version Detection**: The system analyzes commit messages and PR labels to determine the version bump type:
|
95
|
-
- `major`: Breaking changes (e.g., commit messages with "BREAKING CHANGE")
|
96
|
-
- `minor`: New features (e.g., commit messages starting with "feat:")
|
97
|
-
- `patch`: Bug fixes and other changes (default)
|
98
|
-
|
99
|
-
2. **Version Update**: All version references are automatically updated:
|
100
|
-
- `pyproject.toml`
|
101
|
-
- `flexfloat/__init__.py`
|
102
|
-
|
103
|
-
3. **Automated Publishing**:
|
104
|
-
- Package is built and tested
|
105
|
-
- New Git tag is created (e.g., `v0.2.0`)
|
106
|
-
- GitHub Release is created with artifacts
|
107
|
-
- Package is published to PyPI
|
108
|
-
|
109
|
-
### Manual Releases
|
110
|
-
|
111
|
-
You can also trigger releases manually:
|
112
|
-
|
113
|
-
1. Go to the "Actions" tab in GitHub
|
114
|
-
2. Select "Manual Release" workflow
|
115
|
-
3. Choose the version bump type and add release notes
|
116
|
-
4. Run the workflow
|
117
|
-
|
118
|
-
### Version Bump Labels
|
119
|
-
|
120
|
-
Add these labels to your PRs to control version bumping:
|
121
|
-
- `major` - For breaking changes
|
122
|
-
- `minor` - For new features
|
123
|
-
- `patch` - For bug fixes (default)
|
124
|
-
|
125
|
-
### PyPI Setup
|
126
|
-
|
127
|
-
To enable automatic PyPI publishing, configure trusted publishing:
|
128
|
-
|
129
|
-
1. Go to [PyPI](https://pypi.org/manage/account/publishing/)
|
130
|
-
2. Add a trusted publisher for your GitHub repository
|
131
|
-
3. Set the workflow name to `release.yml` or `manual-release.yml`
|
132
|
-
|
133
|
-
### Development Workflow
|
134
|
-
|
135
|
-
1. Create a feature branch from `main`
|
136
|
-
2. Make your changes
|
137
|
-
3. Create a Pull Request
|
138
|
-
4. The CI will automatically:
|
139
|
-
- Run tests and linting
|
140
|
-
- Check version consistency
|
141
|
-
- Suggest version bump type
|
142
|
-
- Build and validate the package
|
143
|
-
5. When merged, automatic release is triggered
|
144
|
-
|
145
|
-
## License
|
146
|
-
|
147
|
-
MIT License
|
flexfloat-0.1.2.dist-info/RECORD
DELETED
@@ -1,10 +0,0 @@
|
|
1
|
-
flexfloat/__init__.py,sha256=OFbzrKWdmpnX85VTA37dOj1pcNdn4IOUx45u-RUg4ls,365
|
2
|
-
flexfloat/bitarray.py,sha256=HbManwfCgoAB3YDSeBWq7QnX64L03A4i5g6UU_wOeoo,8939
|
3
|
-
flexfloat/core.py,sha256=z1W4Ma4ftAnSTICvrNiMNaGHJVVqv9tf5BmwiXSl1qU,28043
|
4
|
-
flexfloat/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
5
|
-
flexfloat/types.py,sha256=_vRC7gQl5ua76QfKco4L3jQ4uPtEPUxPNGy4zWBFbns,113
|
6
|
-
flexfloat-0.1.2.dist-info/licenses/LICENSE,sha256=uwwkK--SUYUV3lbrv9kXJ_vDiYfHVb-t732g6c4qg7Q,1077
|
7
|
-
flexfloat-0.1.2.dist-info/METADATA,sha256=fJt-FNO9BBmdROleg1zSnsrTaAA1oYPsPyt6LOV4m7o,4441
|
8
|
-
flexfloat-0.1.2.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
9
|
-
flexfloat-0.1.2.dist-info/top_level.txt,sha256=82S8dY2UoNZh-9pwg7tUvbwB3uw2s3mfEoyUW6vCMdU,10
|
10
|
-
flexfloat-0.1.2.dist-info/RECORD,,
|
File without changes
|
File without changes
|
File without changes
|