pyquadp 2.0.2__tar.gz → 2.0.4__tar.gz
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.
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/bandit.yml +1 -1
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/black.yml +1 -1
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/codeql.yml +3 -3
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/coveralls.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/linux-arm.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/linux.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/macos.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/mypy.yml +2 -3
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/old-numpy.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/pypi.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/pypy.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/windows.yml +1 -2
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/zizmor.yml +1 -1
- {pyquadp-2.0.2 → pyquadp-2.0.4}/PKG-INFO +1 -1
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/constant.py +2 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qiarray.c +27 -4
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qint.c +33 -22
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp.egg-info/PKG-INFO +1 -1
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qarray_test.py +48 -47
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qcarray_test.py +53 -52
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qiarray_test.py +52 -30
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qint_test.py +10 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.gitattributes +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/copilot-instructions.md +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/dependabot.yml +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/workflows/isort.yml +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.github/zizmor.yml +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.gitignore +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/.pre-commit-config.yaml +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/COPYING.txt +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/MANIFEST.in +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/README.md +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/build.sh +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/build_and_test.sh +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/coverage.sh +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/lint.sh +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyproject.toml +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/__init__.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/__init__.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/constant.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/py.typed +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/pyquadp.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qarray.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcarray.c +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcarray.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcarray.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcmath.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcmath.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcmathc.c +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcmathc.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcmplx.c +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qcmplx.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qfloat.c +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qfloat.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qfloatarray.c +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qfloatarray.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qiarray.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qiarray.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qint.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qmath.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qmath.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qmathc.c +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qmathc.h +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qmcmplx.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qmfloat.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp/qmint.pyi +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp.egg-info/SOURCES.txt +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp.egg-info/dependency_links.txt +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp.egg-info/requires.txt +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/pyquadp.egg-info/top_level.txt +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/setup.cfg +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/setup.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/Makefile +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/conftest.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/fortran_test.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/import_order_test.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qcmath_test.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qcmplx_test.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qfloat_test.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/qmath_test.py +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tests/quad.f90 +0 -0
- {pyquadp-2.0.2 → pyquadp-2.0.4}/tox.ini +0 -0
|
@@ -28,6 +28,6 @@ jobs:
|
|
|
28
28
|
bandit -c pyproject.toml -r . -f sarif -o results.sarif || true
|
|
29
29
|
|
|
30
30
|
- name: Upload SARIF file
|
|
31
|
-
uses: github/codeql-action/upload-sarif@
|
|
31
|
+
uses: github/codeql-action/upload-sarif@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
|
32
32
|
with:
|
|
33
33
|
sarif_file: results.sarif
|
|
@@ -16,6 +16,6 @@ jobs:
|
|
|
16
16
|
- uses: actions/setup-python@a309ff8b426b58ec0e2a45f0f869d46889d02405 # v6
|
|
17
17
|
with:
|
|
18
18
|
python-version: "3.14"
|
|
19
|
-
- uses: psf/black@
|
|
19
|
+
- uses: psf/black@87928e6d6761a4a6d22250e1fee5601b3998086e # 26.5.1
|
|
20
20
|
with:
|
|
21
21
|
options: "--check --verbose"
|
|
@@ -52,7 +52,7 @@ jobs:
|
|
|
52
52
|
|
|
53
53
|
# Initializes the CodeQL tools for scanning.
|
|
54
54
|
- name: Initialize CodeQL
|
|
55
|
-
uses: github/codeql-action/init@
|
|
55
|
+
uses: github/codeql-action/init@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
|
56
56
|
with:
|
|
57
57
|
languages: ${{ matrix.language }}
|
|
58
58
|
# If you wish to specify custom queries, you can do so here or in a config file.
|
|
@@ -70,7 +70,7 @@ jobs:
|
|
|
70
70
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
71
71
|
python -m pip install -r requirements.txt
|
|
72
72
|
|
|
73
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
73
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
74
74
|
id: setup-fortran
|
|
75
75
|
with:
|
|
76
76
|
compiler: gcc
|
|
@@ -82,6 +82,6 @@ jobs:
|
|
|
82
82
|
python -m pip install dist/pyquadp*.whl
|
|
83
83
|
|
|
84
84
|
- name: Perform CodeQL Analysis
|
|
85
|
-
uses: github/codeql-action/analyze@
|
|
85
|
+
uses: github/codeql-action/analyze@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
|
86
86
|
with:
|
|
87
87
|
category: "/language:${{matrix.language}}"
|
|
@@ -29,13 +29,12 @@ jobs:
|
|
|
29
29
|
|
|
30
30
|
- name: Install dependencies
|
|
31
31
|
run: |
|
|
32
|
-
python -m pip install --upgrade pip==25.2
|
|
33
32
|
python -m pip install build wheel pip-tools
|
|
34
33
|
pip-compile -o requirements.txt --extra test --extra coverage --strip-extras
|
|
35
34
|
python -m pip install -r requirements.txt
|
|
36
35
|
|
|
37
36
|
- name: Setup fortran
|
|
38
|
-
uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
37
|
+
uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
39
38
|
with:
|
|
40
39
|
compiler: ${{ matrix.toolchain.compiler }}
|
|
41
40
|
version: ${{ matrix.toolchain.version }}
|
|
@@ -20,7 +20,7 @@ jobs:
|
|
|
20
20
|
- {compiler: gcc, version: 15}
|
|
21
21
|
|
|
22
22
|
steps:
|
|
23
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
23
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
24
24
|
id: setup-fortran
|
|
25
25
|
with:
|
|
26
26
|
compiler: ${{ matrix.toolchain.compiler }}
|
|
@@ -38,7 +38,6 @@ jobs:
|
|
|
38
38
|
|
|
39
39
|
- name: Install dependencies
|
|
40
40
|
run: |
|
|
41
|
-
python -m pip install --upgrade pip==25.2
|
|
42
41
|
python -m pip install build wheel pip-tools
|
|
43
42
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
44
43
|
python -m pip install -r requirements.txt
|
|
@@ -33,12 +33,11 @@ jobs:
|
|
|
33
33
|
|
|
34
34
|
- name: Install dependencies
|
|
35
35
|
run: |
|
|
36
|
-
python -m pip install --upgrade pip==25.2
|
|
37
36
|
python -m pip install build wheel pip-tools
|
|
38
37
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
39
38
|
python -m pip install -r requirements.txt
|
|
40
39
|
|
|
41
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
40
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
42
41
|
id: setup-fortran
|
|
43
42
|
with:
|
|
44
43
|
compiler: ${{ matrix.toolchain.compiler }}
|
|
@@ -32,12 +32,11 @@ jobs:
|
|
|
32
32
|
|
|
33
33
|
- name: Install dependencies
|
|
34
34
|
run: |
|
|
35
|
-
python -m pip install --upgrade pip==25.2
|
|
36
35
|
python -m pip install build wheel pip-tools
|
|
37
36
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
38
37
|
python -m pip install -r requirements.txt
|
|
39
38
|
|
|
40
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
39
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
41
40
|
id: setup-fortran
|
|
42
41
|
with:
|
|
43
42
|
compiler: ${{ matrix.toolchain.compiler }}
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
- {compiler: gcc, version: 14}
|
|
18
18
|
|
|
19
19
|
steps:
|
|
20
|
-
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6
|
|
20
|
+
- uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2
|
|
21
21
|
with:
|
|
22
22
|
persist-credentials: false
|
|
23
23
|
- name: Set up Python
|
|
@@ -28,10 +28,9 @@ jobs:
|
|
|
28
28
|
|
|
29
29
|
- name: Install dependencies
|
|
30
30
|
run: |
|
|
31
|
-
python -m pip install --upgrade pip==25.2
|
|
32
31
|
python -m pip install build wheel
|
|
33
32
|
|
|
34
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
33
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
35
34
|
id: setup-fortran
|
|
36
35
|
with:
|
|
37
36
|
compiler: ${{ matrix.toolchain.compiler }}
|
|
@@ -29,13 +29,12 @@ jobs:
|
|
|
29
29
|
|
|
30
30
|
- name: Install dependencies
|
|
31
31
|
run: |
|
|
32
|
-
python -m pip install --upgrade pip==25.2
|
|
33
32
|
python -m pip install build wheel pip-tools
|
|
34
33
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
35
34
|
python -m pip install -r requirements.txt
|
|
36
35
|
python -m pip install numpy==2.1.0
|
|
37
36
|
|
|
38
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
37
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
39
38
|
id: setup-fortran
|
|
40
39
|
with:
|
|
41
40
|
compiler: ${{ matrix.toolchain.compiler }}
|
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
with:
|
|
30
30
|
persist-credentials: false
|
|
31
31
|
|
|
32
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
32
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
33
33
|
id: setup-fortran
|
|
34
34
|
with:
|
|
35
35
|
compiler: gcc
|
|
@@ -40,7 +40,6 @@ jobs:
|
|
|
40
40
|
|
|
41
41
|
- name: Install dependencies
|
|
42
42
|
run: |
|
|
43
|
-
python -m pip install --upgrade pip==25.2
|
|
44
43
|
python -m pip install build wheel pip-tools auditwheel pipx
|
|
45
44
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
46
45
|
python -m pip install -r requirements.txt
|
|
@@ -29,13 +29,12 @@ jobs:
|
|
|
29
29
|
- name: Install dependencies
|
|
30
30
|
run: |
|
|
31
31
|
sudo apt-get install -y libopenblas-dev
|
|
32
|
-
pypy3 -m pip install --upgrade pip==25.2
|
|
33
32
|
pypy3 -m pip install build wheel pip-tools
|
|
34
33
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
35
34
|
pypy3 -m pip install -r requirements.txt
|
|
36
35
|
|
|
37
36
|
|
|
38
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
37
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
39
38
|
id: setup-fortran
|
|
40
39
|
with:
|
|
41
40
|
compiler: ${{ matrix.toolchain.compiler }}
|
|
@@ -17,7 +17,7 @@ jobs:
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
steps:
|
|
20
|
-
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1
|
|
20
|
+
- uses: fortran-lang/setup-fortran@2a1b9c55897d827a9dfeb114408f3615e53b2b72 # v1.9.0
|
|
21
21
|
id: setup-fortran
|
|
22
22
|
with:
|
|
23
23
|
compiler: gcc
|
|
@@ -33,7 +33,6 @@ jobs:
|
|
|
33
33
|
|
|
34
34
|
- name: Install dependencies
|
|
35
35
|
run: |
|
|
36
|
-
python -m pip install --upgrade pip==25.2
|
|
37
36
|
python -m pip install build wheel pip-tools delvewheel
|
|
38
37
|
pip-compile -o requirements.txt --extra test --strip-extras
|
|
39
38
|
python -m pip install -r requirements.txt
|
|
@@ -34,7 +34,7 @@ jobs:
|
|
|
34
34
|
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
35
35
|
|
|
36
36
|
- name: Upload SARIF file
|
|
37
|
-
uses: github/codeql-action/upload-sarif@
|
|
37
|
+
uses: github/codeql-action/upload-sarif@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4.35.5
|
|
38
38
|
with:
|
|
39
39
|
sarif_file: results.sarif
|
|
40
40
|
category: zizmor
|
|
@@ -51,6 +51,7 @@ nanj = qcmplx(0.0, qfloat("nan"))
|
|
|
51
51
|
|
|
52
52
|
# Ctype data
|
|
53
53
|
c_qfloat = _ctypes.c_byte * 16
|
|
54
|
+
c_qint = _ctypes.c_byte * 16
|
|
54
55
|
|
|
55
56
|
|
|
56
57
|
class c_qcmplx(_ctypes.Structure):
|
|
@@ -95,4 +96,5 @@ __all__ = [
|
|
|
95
96
|
"nanj",
|
|
96
97
|
"c_qfloat",
|
|
97
98
|
"c_qcmplx",
|
|
99
|
+
"c_qint",
|
|
98
100
|
]
|
|
@@ -1573,18 +1573,41 @@ static int
|
|
|
1573
1573
|
QuadIArray_setitem(PyObject *item, __int128 *data, void *array)
|
|
1574
1574
|
{
|
|
1575
1575
|
QuadIObject tmp;
|
|
1576
|
+
PyObject *index_obj = NULL;
|
|
1576
1577
|
|
|
1577
1578
|
(void)array;
|
|
1578
1579
|
|
|
1579
1580
|
if (PyObject_to_QuadIObject(item, &tmp, false)) {
|
|
1580
1581
|
*data = tmp.value;
|
|
1581
|
-
|
|
1582
|
-
|
|
1583
|
-
|
|
1582
|
+
return 0;
|
|
1583
|
+
}
|
|
1584
|
+
|
|
1585
|
+
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
|
|
1586
|
+
PyErr_Clear();
|
|
1587
|
+
} else if (PyErr_Occurred()) {
|
|
1588
|
+
return -1;
|
|
1589
|
+
}
|
|
1590
|
+
|
|
1591
|
+
index_obj = PyNumber_Index(item);
|
|
1592
|
+
if (index_obj != NULL) {
|
|
1593
|
+
if (PyObject_to_QuadIObject(index_obj, &tmp, false)) {
|
|
1594
|
+
*data = tmp.value;
|
|
1595
|
+
Py_DECREF(index_obj);
|
|
1596
|
+
return 0;
|
|
1584
1597
|
}
|
|
1598
|
+
|
|
1599
|
+
Py_DECREF(index_obj);
|
|
1585
1600
|
return -1;
|
|
1586
1601
|
}
|
|
1587
|
-
|
|
1602
|
+
|
|
1603
|
+
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
|
|
1604
|
+
PyErr_Clear();
|
|
1605
|
+
PyErr_SetString(PyExc_TypeError, "Failed to setitem in QuadIArray");
|
|
1606
|
+
} else if (!PyErr_Occurred()) {
|
|
1607
|
+
PyErr_SetString(PyExc_TypeError, "Failed to setitem in QuadIArray");
|
|
1608
|
+
}
|
|
1609
|
+
|
|
1610
|
+
return -1;
|
|
1588
1611
|
}
|
|
1589
1612
|
|
|
1590
1613
|
static PyObject *
|
|
@@ -1049,6 +1049,8 @@ static __int128 QuadIObject_int128(QuadIObject * out) {
|
|
|
1049
1049
|
bool
|
|
1050
1050
|
PyObject_to_QuadIObject(PyObject * in, QuadIObject * out, const bool alloc)
|
|
1051
1051
|
{
|
|
1052
|
+
PyObject *int_obj;
|
|
1053
|
+
|
|
1052
1054
|
(void)alloc;
|
|
1053
1055
|
|
|
1054
1056
|
if(QuadIObject_Check(in)){
|
|
@@ -1073,32 +1075,41 @@ PyObject_to_QuadIObject(PyObject * in, QuadIObject * out, const bool alloc)
|
|
|
1073
1075
|
return true;
|
|
1074
1076
|
}
|
|
1075
1077
|
|
|
1076
|
-
|
|
1077
|
-
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
|
|
1085
|
-
Py_ssize_t len;
|
|
1086
|
-
const char *buf = PyUnicode_AsUTF8AndSize(str, &len);
|
|
1087
|
-
if (buf==NULL){
|
|
1088
|
-
Py_DECREF(str);
|
|
1089
|
-
return false;
|
|
1090
|
-
}
|
|
1091
|
-
|
|
1092
|
-
if(!str_to_int128(buf,len,&out->value)){
|
|
1093
|
-
Py_DECREF(str);
|
|
1094
|
-
PyErr_SetString(PyExc_TypeError, "Could not convert int to integer quad precision.");
|
|
1095
|
-
return false;
|
|
1096
|
-
}
|
|
1078
|
+
int_obj = PyNumber_Index(in);
|
|
1079
|
+
if (int_obj != NULL) {
|
|
1080
|
+
// Convert integer-like values (including numpy integer scalars)
|
|
1081
|
+
// to string first so values outside C long long still parse correctly.
|
|
1082
|
+
PyObject *str = PyUnicode_FromFormat("%S", int_obj);
|
|
1083
|
+
if (str == NULL) {
|
|
1084
|
+
Py_DECREF(int_obj);
|
|
1085
|
+
return false;
|
|
1086
|
+
}
|
|
1097
1087
|
|
|
1088
|
+
Py_ssize_t len;
|
|
1089
|
+
const char *buf = PyUnicode_AsUTF8AndSize(str, &len);
|
|
1090
|
+
if (buf == NULL) {
|
|
1098
1091
|
Py_DECREF(str);
|
|
1092
|
+
Py_DECREF(int_obj);
|
|
1093
|
+
return false;
|
|
1094
|
+
}
|
|
1099
1095
|
|
|
1100
|
-
|
|
1096
|
+
if (!str_to_int128(buf, len, &out->value)) {
|
|
1097
|
+
Py_DECREF(str);
|
|
1098
|
+
Py_DECREF(int_obj);
|
|
1099
|
+
PyErr_SetString(PyExc_TypeError, "Could not convert int to integer quad precision.");
|
|
1100
|
+
return false;
|
|
1101
1101
|
}
|
|
1102
|
+
|
|
1103
|
+
Py_DECREF(str);
|
|
1104
|
+
Py_DECREF(int_obj);
|
|
1105
|
+
return true;
|
|
1106
|
+
}
|
|
1107
|
+
|
|
1108
|
+
// Non-integral numerics (e.g., float, numpy floating scalars) are not valid qint inputs.
|
|
1109
|
+
if (PyErr_ExceptionMatches(PyExc_TypeError)) {
|
|
1110
|
+
PyErr_Clear();
|
|
1111
|
+
} else if (PyErr_Occurred()) {
|
|
1112
|
+
return false;
|
|
1102
1113
|
}
|
|
1103
1114
|
|
|
1104
1115
|
return false;
|