mirror of
https://gitlab.com/libeigen/eigen.git
synced 2026-04-10 11:34:33 +08:00
Compare commits
43 Commits
gpu-cg-int
...
5.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bc3b39870e | ||
|
|
c324ad2503 | ||
|
|
d6d4a3399f | ||
|
|
6d5a91dae2 | ||
|
|
99e199f0eb | ||
|
|
f471ebb8cc | ||
|
|
f7ab506bd0 | ||
|
|
0db477863d | ||
|
|
7a85735a1a | ||
|
|
748962722c | ||
|
|
284dcc122b | ||
|
|
691009cfa3 | ||
|
|
a9110bfc87 | ||
|
|
da889c88f9 | ||
|
|
85e122408b | ||
|
|
5aec73ab06 | ||
|
|
9071c1cd07 | ||
|
|
41e848c558 | ||
|
|
66375a8dc9 | ||
|
|
076e524362 | ||
|
|
55d059108e | ||
|
|
a5c3f697fa | ||
|
|
bdacccda15 | ||
|
|
c9c2c1300a | ||
|
|
9ad6809b32 | ||
|
|
4f240eee3f | ||
|
|
0f80c3d7e5 | ||
|
|
e2e711aabe | ||
|
|
6c1a886042 | ||
|
|
a34d8eee5c | ||
|
|
92d5da40ac | ||
|
|
b5848287be | ||
|
|
0ea30a44f3 | ||
|
|
4abf3bd540 | ||
|
|
b89b549f96 | ||
|
|
be7d8d37f2 | ||
|
|
b27f784ca5 | ||
|
|
c08497ae1c | ||
|
|
514221aee5 | ||
|
|
b60f763ec0 | ||
|
|
63b5f63a6a | ||
|
|
549bf8c75b | ||
|
|
151b95d078 |
@@ -7,6 +7,10 @@
|
||||
# Public License v. 2.0. If a copy of the MPL was not distributed
|
||||
# with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
||||
|
||||
default:
|
||||
# automatically cancels a job when a new pipeline for the same branch is triggered
|
||||
interruptible: true
|
||||
|
||||
stages:
|
||||
- checkformat
|
||||
- build
|
||||
|
||||
499
CHANGELOG.md
499
CHANGELOG.md
@@ -1,10 +1,51 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
## [5.0.1] - 2025-11-11
|
||||
|
||||
## [3.4.0]
|
||||
A few bug-fixes from the master branch, including
|
||||
- Dirty git state [#2995]
|
||||
- Failing geo_homogeneous tests [#2977]
|
||||
- Alignment issues [#2982, #2984]
|
||||
- Missing C++20 `<version>` header [#2986]
|
||||
- BLAS/LAPACK build on windows [#2980]
|
||||
|
||||
Released on August 18, 2021
|
||||
See the full lists of [addressed bugs](https://gitlab.com/libeigen/eigen/-/issues?state=all&label_name%5B%5D=release%3A%3A5.0.1) and [merge requests](https://gitlab.com/libeigen/eigen/-/merge_requests?state=all&label_name%5B%5D=release%3A%3A5.0.1) for more details.
|
||||
|
||||
## [5.0.0] - 2025-09-30
|
||||
|
||||
Eigen 5.0 provides many new features, performance enhancements, and bugfixes throughout Eigen’s core template expression infrastructure and linear algebra facilities. The full set of changes and related issues are too large to list here, but can be accessed via the release milestone %"5.0".
|
||||
|
||||
This is the last major release to support the C++14 language standard. The master branch and subsequent releases will require support for C++17.
|
||||
|
||||
### Versioning
|
||||
|
||||
This release marks a transition to [Semantic Versioning](https://semver.org/). Previously, Eigen used a WORLD.MAJOR.MINOR scheme. From now on, version numbers will follow the MAJOR.MINOR.PATCH format, indicating breaking changes, new features, and bug fixes, respectively. The WORLD version will remain 3 for this and subsequent releases for posterity. See the table below:
|
||||
```
|
||||
╔═════════╦═════╦═════╗
|
||||
║ Release ║ 3.4 ║ 5.0 ║
|
||||
╠═════════╬═════╬═════╣
|
||||
║ WORLD ║ 3 ║ 3 ║
|
||||
║ MAJOR ║ 4 ║ 5 ║
|
||||
║ MINOR ║ 0 ║ 0 ║
|
||||
║ PATCH ║ - ║ 0 ║
|
||||
╚═════════╩═════╩═════╝
|
||||
```
|
||||
|
||||
### Breaking changes
|
||||
|
||||
* Eigen 5.X.X requires C++14. When building with GNU-compatible compilers, set `-std=c++14` or later. As part of this change, some macros such as `EIGEN_HAS_CXX11` have also been removed.
|
||||
* The CMake build system has been modernized and older properties have been removed - projects relying on CMake may need to update their configurations [!485].
|
||||
* All LGPL-licensed code has been removed (i.e. Constrained Conjugate Gradient) [!1197]. These were "unsupported" anyways, and weren't widely used.
|
||||
* Due to name conflicts with other projects, `Eigen::all` and `Eigen::last` have been moved to `Eigen::placeholders::all` and `Eigen::placeholders::last` [!649].
|
||||
* Any direct inclusion of an internal header (i.e. under a `../src/..` path) will result in a compilation error [!631].
|
||||
* Runtime SVD options for computing thin/full U/V have been deprecated: use compile-time options instead [!826].
|
||||
* Scalar (i.e. non-vectorized) comparisons now return masks with values of `Scalar(1)` rather than having all bits set to avoid undefined behavior [!1862].
|
||||
* BLAS return types have been changed for Eigen BLAS to `void` instead of `int` for compatibility with other BLAS implementations [!1497].
|
||||
* `Eigen::aligned_allocator` no longer inherits from `std::allocator` due to a change in the standard and the use of `allocate_at_least` [!1795].
|
||||
* Euler angles are now returned in a more canonical form, potentially resulting in a change of behavior [!1301, !1314].
|
||||
* Eigen's random number generation has changed, resulting in a change of behavior. Please do not rely on specific random numbers from Eigen - these were never guaranteed to be consistent across Eigen versions, nor are they generally consistent across platforms [!1437].
|
||||
|
||||
## [3.4.0] - 2021-08-18
|
||||
|
||||
**Notice:** 3.4.x will be the last major release series of Eigen that will support c++03.
|
||||
|
||||
@@ -160,9 +201,7 @@ Released on August 18, 2021
|
||||
|
||||
See the [announcement](https://www.eigen.tuxfamily.org/index.php?title=3.4) for more details.
|
||||
|
||||
## [3.3.9]
|
||||
|
||||
Released on December 4, 2020.
|
||||
## [3.3.9] - 2020-12-04
|
||||
|
||||
Changes since 3.3.8:
|
||||
|
||||
@@ -175,9 +214,7 @@ Changes since 3.3.8:
|
||||
* #2012: Define coeff-wise binary array operators for base class to fix an issue when using Eigen with C++20
|
||||
* Commit bfdd4a990: Fix an issue with Intel® MKL PARDISO support.
|
||||
|
||||
## [3.3.8]
|
||||
|
||||
Released on October 5, 2020.
|
||||
## [3.3.8] - 2020-10-05
|
||||
|
||||
Changes since 3.3.7:
|
||||
|
||||
@@ -243,9 +280,7 @@ Changes since 3.3.7:
|
||||
* Commit 6c4d57dc9: Fix a gcc7 warning about bool * bool in abs2 default implementation.
|
||||
* Commit 89a86ed42: Fix a warning in SparseSelfAdjointView about a branch statement always evaluation to false.
|
||||
|
||||
## [3.3.8-rc1]
|
||||
|
||||
Released on September 14, 2020.
|
||||
## [3.3.8-rc1] - 2020-09-14
|
||||
|
||||
Changes since 3.3.7:
|
||||
|
||||
@@ -308,137 +343,129 @@ Changes since 3.3.7:
|
||||
* Commit 89a86ed42: Fix a warning in SparseSelfAdjointView about a branch statement always evaluation to false.
|
||||
* Commit dd6de618: Fix a bug with half-precision floats on GPUs.
|
||||
|
||||
## [3.3.7]
|
||||
|
||||
Released on December 11, 2018.
|
||||
|
||||
## [3.3.7] - 2018-12-11
|
||||
¸¸¸¸
|
||||
Changes since 3.3.6:
|
||||
|
||||
* #1643: Fix compilation with GCC>=6 and compiler optimization turned off.
|
||||
|
||||
## [3.3.6]
|
||||
|
||||
Released on December 10, 2018.
|
||||
## [3.3.6] - 2018-12-10
|
||||
|
||||
Changes since 3.3.5:
|
||||
|
||||
* #1617: Fix triangular solve crashing for empty matrix.
|
||||
* #785: Make dense Cholesky decomposition work for empty matrices.
|
||||
* #1634: Remove double copy in move-ctor of non movable Matrix/Array.
|
||||
* Changeset 588e1eb34eff: Workaround weird MSVC bug.
|
||||
* Changeset a2d6c106a450: Workaround weird MSVC bug.
|
||||
* #1637 Workaround performance regression in matrix products with gcc>=6 and clang>=6.0.
|
||||
* Changeset bf0f100339c1: Fix some implicit 0 to Scalar conversions.
|
||||
* Changeset 9ccbaaf3dd4c: Fix some implicit 0 to Scalar conversions.
|
||||
* #1605: Workaround ABI issue with vector types (aka `__m128`) versus scalar types (aka float).
|
||||
* Changeset d1421c479baa: Fix for gcc<4.6 regarding usage of #pragma GCC diagnostic push/pop.
|
||||
* Changeset c20b83b9d736: Fix conjugate-gradient for right-hand-sides with a very small magnitude.
|
||||
* Changeset 281a877a3bf7: Fix product of empty arrays (returned 0 instead of 1).
|
||||
* Changeset 148e579cc004: Fix for gcc<4.6 regarding usage of #pragma GCC diagnostic push/pop.
|
||||
* Changeset bc000deaae45: Fix conjugate-gradient for right-hand-sides with a very small magnitude.
|
||||
* Changeset 5be00b0e2964: Fix product of empty arrays (returned 0 instead of 1).
|
||||
* #1590: Fix collision with some system headers defining the macro FP32.
|
||||
* #1584: Fix possible undefined behavior in random generation.
|
||||
* Changeset d632d18db8ca: Fix fallback to BLAS for rankUpdate.
|
||||
* Changeset e4127b0f7d3b: Fix fallback to BLAS for rankUpdate.
|
||||
* Fixes for NVCC 9.
|
||||
* Fix matrix-market IO.
|
||||
* Various fixes in the doc.
|
||||
* Various minor warning fixes/workarounds.
|
||||
|
||||
## [3.3.5]
|
||||
|
||||
Released on July 23, 2018.
|
||||
## [3.3.5] - 2018-07-23
|
||||
|
||||
Changes since 3.3.4:
|
||||
|
||||
* General bug fixes:
|
||||
* Fix GeneralizedEigenSolver when requesting for eigenvalues only (0d15855abb30)
|
||||
* #1560 fix product with a 1x1 diagonal matrix (90d7654f4a59)
|
||||
* Fix GeneralizedEigenSolver when requesting for eigenvalues only (ab3fa2e12308)
|
||||
* #1560 fix product with a 1x1 diagonal matrix (483beabab9bf)
|
||||
* #1543: fix linear indexing in generic block evaluation
|
||||
* Fix compilation of product with inverse transpositions (e.g., `mat * Transpositions().inverse()`) (14a13748d761)
|
||||
* #1509: fix `computeInverseWithCheck` for complexes (8be258ef0b6d)
|
||||
* #1521: avoid signalling `NaN` in hypot and make it std::complex<> friendly (a9c06b854991).
|
||||
* #1517: fix triangular product with unit diagonal and nested scaling factor: `(s*A).triangularView<UpperUnit>()*B` (a546d43bdd4f)
|
||||
* Fix compilation of stableNorm for some odd expressions as input (499e982b9281)
|
||||
* #1485: fix linking issue of non template functions (ae28c2aaeeda)
|
||||
* Fix overflow issues in BDCSVD (92060f82e1de)
|
||||
* #1468: add missing `std::` to `memcpy` (4565282592ae)
|
||||
* #1453: fix Map with non-default inner-stride but no outer-stride (af00212cf3a4)
|
||||
* Fix mixing types in sparse matrix products (7e5fcd0008bd)
|
||||
* #1544: Generate correct Q matrix in complex case (c0c410b508a1)
|
||||
* #1461: fix compilation of `Map<const Quaternion>::x()` (69652a06967d)
|
||||
* Fix compilation of product with inverse transpositions (e.g., `mat * Transpositions().inverse()`) (170914dbbcc3)
|
||||
* #1509: fix `computeInverseWithCheck` for complexes (a2a2c3c86507)
|
||||
* #1521: avoid signalling `NaN` in hypot and make it std::complex<> friendly (b18e2d422b09).
|
||||
* #1517: fix triangular product with unit diagonal and nested scaling factor: `(s*A).triangularView<UpperUnit>()*B` (c24844195d90)
|
||||
* Fix compilation of stableNorm for some odd expressions as input (33b972d8b384)
|
||||
* #1485: fix linking issue of non template functions (d18877f18d8e)
|
||||
* Fix overflow issues in BDCSVD (7a875acfb05f)
|
||||
* #1468: add missing `std::` to `memcpy` (32a6db0f8cd5)
|
||||
* #1453: fix Map with non-default inner-stride but no outer-stride (1ca9072b51d8)
|
||||
* Fix mixing types in sparse matrix products (4ead16cdd6c8)
|
||||
* #1544: Generate correct Q matrix in complex case (39125654ce9e)
|
||||
* #1461: fix compilation of `Map<const Quaternion>::x()` (9a266e5118cf)
|
||||
|
||||
* Backends:
|
||||
* Fix MKL backend for symmetric eigenvalues on row-major matrices (4726d6a24f69)
|
||||
* #1527: fix support for MKL's VML (972424860545)
|
||||
* Fix incorrect ldvt in LAPACKE call from JacobiSVD (88c4604601b9)
|
||||
* Fix support for MKL's BLAS when using `MKL_DIRECT_CALL` (205731b87e19, b88c70c6ced7, 46e2367262e1)
|
||||
* Use MKL's lapacke.h header when using MKL (19bc9df6b726)
|
||||
* Fix MKL backend for symmetric eigenvalues on row-major matrices (eab7afe25273)
|
||||
* #1527: fix support for MKL's VML (86a939451c75)
|
||||
* Fix incorrect ldvt in LAPACKE call from JacobiSVD (bfc66e8b9a3b)
|
||||
* Fix support for MKL's BLAS when using `MKL_DIRECT_CALL` (9df7f3d8e9cd, 3108fbf76708, 292dea7922e7)
|
||||
* Use MKL's lapacke.h header when using MKL (070b5958e0ae)
|
||||
|
||||
* Diagnostics:
|
||||
* #1516: add assertion for out-of-range diagonal index in `MatrixBase::diagonal(i)` (783d38b3c78c)
|
||||
* Add static assertion for fixed sizes `Ref<>` (e1203d5ceb8e)
|
||||
* Add static assertion on selfadjoint-view's UpLo parameter. (b84db94c677e, 0ffe8a819801)
|
||||
* #1479: fix failure detection in LDLT (67719139abc3)
|
||||
* #1516: add assertion for out-of-range diagonal index in `MatrixBase::diagonal(i)` (273738ba6f6e)
|
||||
* Add static assertion for fixed sizes `Ref<>` (1724dae8b834)
|
||||
* Add static assertion on selfadjoint-view's UpLo parameter. (74daf12e525e, 190b46dd1f05)
|
||||
* #1479: fix failure detection in LDLT (c20043c8fd64)
|
||||
|
||||
* Compiler support:
|
||||
* #1555: compilation fix with XLC
|
||||
* Workaround MSVC 2013 ambiguous calls (1c7b59b0b5f4)
|
||||
* Adds missing `EIGEN_STRONG_INLINE` to help MSVC properly inlining small vector calculations (1ba3f10b91f2)
|
||||
* Several minor warning fixes: 3c87fc0f1042, ad6bcf0e8efc, "used uninitialized" (20efc44c5500), Wint-in-bool-context (131da2cbc695, b4f969795d1b)
|
||||
* #1428: make NEON vectorization compilable by MSVC. (* 3d1b3dbe5927, 4e1b7350182a)
|
||||
* Fix compilation and SSE support with PGI compiler (faabf000855d 90d33b09040f)
|
||||
* #1555: compilation fix with XLC (23eb37691f14)
|
||||
* #1520: workaround some `-Wfloat-equal` warnings by calling `std::equal_to` (7d9a9456ed7c)
|
||||
* Make the TensorStorage class compile with clang 3.9 (eff7001e1f0a)
|
||||
* Misc: some old compiler fixes (493691b29be1)
|
||||
* Fix MSVC warning C4290: C++ exception specification ignored except to indicate a function is not `__declspec(nothrow)` (524918622506)
|
||||
* Workaround MSVC 2013 ambiguous calls (c92536d92647)
|
||||
* Adds missing `EIGEN_STRONG_INLINE` to help MSVC properly inlining small vector calculations (01fb6217335b)
|
||||
* Several minor warning fixes: f90d136c8445, 542fb03968c2, "used uninitialized" (7634a44bfe11), Wint-in-bool-context (3d1795da28c2, d1c2d6683c55)
|
||||
* #1428: make NEON vectorization compilable by MSVC. (* 1e2d2693b911, 927d023ceaab)
|
||||
* Fix compilation and SSE support with PGI compiler (bb87f618bfc3 450c5e5d2771)
|
||||
* #1555: compilation fix with XLC (20ca86888e70)
|
||||
* #1520: workaround some `-Wfloat-equal` warnings by calling `std::equal_to` (1c4fdad7bd6f)
|
||||
* Make the TensorStorage class compile with clang 3.9 (a7144f8d6a94)
|
||||
* Misc: some old compiler fixes (b60cbbef3791)
|
||||
* Fix MSVC warning C4290: C++ exception specification ignored except to indicate a function is not `__declspec(nothrow)` (3df78d5afc1e)
|
||||
|
||||
* Architecture support:
|
||||
* Several AVX512 fixes for `log`, `sqrt`, `rsqrt`, non `AVX512ER` CPUs, `apply_rotation_in_the_plane` b64275e912ba cab3d626a59e 7ce234652ab9, d89b9a754371.
|
||||
* AltiVec fixes: 9450038e380d
|
||||
* NEON fixes: const-cast (e8a69835ccda), compilation of Jacobi rotations (c06cfd545b15,#1436).
|
||||
* Changeset d0658cc9d4a2: Define `pcast<>` for SSE types even when AVX is enabled. (otherwise float are silently reinterpreted as int instead of being converted)
|
||||
* #1494: makes `pmin`/`pmax` behave on Altivec/VSX as on x86 regarding NaNs (d0af83f82b19)
|
||||
* Several AVX512 fixes for `log`, `sqrt`, `rsqrt`, non `AVX512ER` CPUs, `apply_rotation_in_the_plane` 5c59564bfb92 1939c971a3db c2f9e6cb37e5, 609e425166f6.
|
||||
* AltiVec fixes: 1641a6cdd5a4
|
||||
* NEON fixes: const-cast (877a2b64c9ba), compilation of Jacobi rotations (bc837b797559,#1436).
|
||||
* Changeset 971b32440c74: Define `pcast<>` for SSE types even when AVX is enabled. (otherwise float are silently reinterpreted as int instead of being converted)
|
||||
* #1494: makes `pmin`/`pmax` behave on Altivec/VSX as on x86 regarding NaNs (892c0a79ce93)
|
||||
|
||||
* Documentation:
|
||||
* Update manual pages regarding BDCSVD (#1538)
|
||||
* Add aliasing in common pitfaffs (2a5a8408fdc5)
|
||||
* Update `aligned_allocator` (21e03aef9f2b)
|
||||
* #1456: add perf recommendation for LLT and storage format (c8c154ebf130, 9aef1e23dbe0)
|
||||
* #1455: Cholesky module depends on Jacobi for rank-updates (2e6e26b851a8)
|
||||
* #1458: fix documentation of LLT and LDLT `info()` method (2a4cf4f473dd)
|
||||
* Warn about constness in `LLT::solveInPlace` (518f97b69bdf)
|
||||
* Fix lazyness of `operator*` with CUDA (c4dbb556bd36)
|
||||
* #336: improve doc for `PlainObjectBase::Map` (13dc446545fe)
|
||||
* Add aliasing in common pitfaffs (656712d48f6b)
|
||||
* Update `aligned_allocator` (6fc0f2be70a4)
|
||||
* #1456: add perf recommendation for LLT and storage format (55fbf4fedd04, 9fd138e2b333)
|
||||
* #1455: Cholesky module depends on Jacobi for rank-updates (b87875abf8dc)
|
||||
* #1458: fix documentation of LLT and LDLT `info()` method (ac2c97edff07)
|
||||
* Warn about constness in `LLT::solveInPlace` (51e1aa153957)
|
||||
* Fix lazyness of `operator*` with CUDA (fa77d713359d)
|
||||
* #336: improve doc for `PlainObjectBase::Map` (18868228adae)
|
||||
|
||||
* Other general improvements:
|
||||
* Enable linear indexing in generic block evaluation (31537598bf83, 5967bc3c2cdb, #1543).
|
||||
* Fix packet and alignment propagation logic of `Block<Xpr>` expressions. In particular, `(A+B).col(j)` now preserve vectorisation. (b323cc9c2c7f)
|
||||
* Several fixes regarding custom scalar type support: hypot (f8d6c791791d), boost-multiprec (acb8ef9b2478), literal casts (6bbd97f17534, 39f65d65894f),
|
||||
* LLT: avoid making a copy when decomposing in place (2f7e28920f4e), const the arg to `solveInPlace()` to allow passing `.transpose()`, `.block()`, etc. (c31c0090e998).
|
||||
* Add possibility to overwrite `EIGEN_STRONG_INLINE` (7094bbdf3f4d)
|
||||
* #1528: use `numeric_limits::min()` instead of `1/highest()` that might underflow (dd823c64ade7)
|
||||
* #1532: disable `stl::*_negate` in C++17 (they are deprecated) (88e9452099d5)
|
||||
* Add C++11 `max_digits10` for half (faf74dde8ed1)
|
||||
* Make sparse QR result sizes consistent with dense QR (4638bc4d0f96)
|
||||
* Enable linear indexing in generic block evaluation (15752027ec2f, 80af7d6a47c1, #1543).
|
||||
* Fix packet and alignment propagation logic of `Block<Xpr>` expressions. In particular, `(A+B).col(j)` now preserve vectorisation. (9c9e90f6db7e)
|
||||
* Several fixes regarding custom scalar type support: hypot (385d8b5e42c2), boost-multiprec (5f71579a2d3f), literal casts (e6577f3c3049, fbb0c510c52f),
|
||||
* LLT: avoid making a copy when decomposing in place (9d03711df8bc), const the arg to `solveInPlace()` to allow passing `.transpose()`, `.block()`, etc. (0137ed4f19b6).
|
||||
* Add possibility to overwrite `EIGEN_STRONG_INLINE` (6d6e5fcd4356)
|
||||
* #1528: use `numeric_limits::min()` instead of `1/highest()` that might underflow (9ff315024335)
|
||||
* #1532: disable `stl::*_negate` in C++17 (they are deprecated) (3fb42ff7b278)
|
||||
* Add C++11 `max_digits10` for half (70ac6c923001)
|
||||
* Make sparse QR result sizes consistent with dense QR (2136cfa17e28)
|
||||
|
||||
* Unsupported/unit-tests/cmake/unvisible internals/etc.
|
||||
* #1484: restore deleted line for 128 bits long doubles, and improve dispatching logic. (dffc0f957f19)
|
||||
* #1462: remove all occurences of the deprecated `__CUDACC_VER__` macro by introducing `EIGEN_CUDACC_VER` (a201b8438d36)
|
||||
* Changeset 2722aa8eb93f: Fix oversharding bug in parallelFor.
|
||||
* Changeset ea1db80eab46: commit 45e9c9996da790b55ed9c4b0dfeae49492ac5c46 (HEAD -> memory_fix)
|
||||
* Changeset 350957be012c: Fix int versus Index
|
||||
* Changeset 424038431015: fix linking issue
|
||||
* Changeset 3f938790b7e0: Fix short vs long
|
||||
* Changeset ba14974d054a: Fix cmake scripts with no fortran compiler
|
||||
* Changeset 2ac088501976: add cmake-option to enable/disable creation of tests
|
||||
* Changeset 56996c54158b: Use col method for column-major matrix
|
||||
* Changeset 762373ca9793: #1449: fix `redux_3` unit test
|
||||
* Changeset eda96fd2fa30: Fix uninitialized output argument.
|
||||
* Changeset 75a12dff8ca4: Handle min/max/inf/etc issue in `cuda_fp16.h` directly in `test/main.h`
|
||||
* Changeset 568614bf79b8: Add tests for sparseQR results (value and size) covering bugs 1522 and 1544
|
||||
* Changeset 12c9ece47d14: `SelfAdjointView<...,Mode>` causes a static assert since commit c73a77e47db8
|
||||
* Changeset 899fd2ef704f: weird compilation issue in `mapped_matrix.cpp`
|
||||
* #1484: restore deleted line for 128 bits long doubles, and improve dispatching logic. (c8e663fe87ec)
|
||||
* #1462: remove all occurences of the deprecated `__CUDACC_VER__` macro by introducing `EIGEN_CUDACC_VER` (e7c065ec717b)
|
||||
* Changeset fea50d40ea79: Fix oversharding bug in parallelFor.
|
||||
* Changeset 866d222d6065: commit 45e9c9996da790b55ed9c4b0dfeae49492ac5c46 (HEAD -> memory_fix)
|
||||
* Changeset 48048172e5aa: Fix int versus Index
|
||||
* Changeset 906a98fe39c3: fix linking issue
|
||||
* Changeset 352489edbe36: Fix short vs long
|
||||
* Changeset 81e94eea024c: Fix cmake scripts with no fortran compiler
|
||||
* Changeset 8bd392ca0e3f: add cmake-option to enable/disable creation of tests
|
||||
* Changeset 02c0cef97fb5: Use col method for column-major matrix
|
||||
* Changeset a8d2459f8e1f: #1449: fix `redux_3` unit test
|
||||
* Changeset e90a14609a56: Fix uninitialized output argument.
|
||||
* Changeset 5d40715db6a7: Handle min/max/inf/etc issue in `cuda_fp16.h` directly in `test/main.h`
|
||||
* Changeset 2f9de522457b: Add tests for sparseQR results (value and size) covering bugs 1522 and 1544
|
||||
* Changeset 4662c610c13c: `SelfAdjointView<...,Mode>` causes a static assert since commit d820ab9edc0b
|
||||
* Changeset 96134409fc91: weird compilation issue in `mapped_matrix.cpp`
|
||||
|
||||
## [3.3.4]
|
||||
|
||||
Released on June 15, 2017.
|
||||
## [3.3.4] - 2017-06-15
|
||||
|
||||
Changes since 3.3.3:
|
||||
|
||||
@@ -469,9 +496,7 @@ Changes since 3.3.3:
|
||||
* Add specializations of `std::numeric_limits` for `Eigen::half` and and `AutoDiffScalar`
|
||||
* Fix compilation of streaming nested Array, i.e., `std::cout << Array<Array<...>>`
|
||||
|
||||
## [3.3.3]
|
||||
|
||||
Released on February 21, 2017.
|
||||
## [3.3.3] - 2017-02-21
|
||||
|
||||
Changes since 3.3.2:
|
||||
|
||||
@@ -502,10 +527,7 @@ Changes since 3.3.2:
|
||||
* Fix usage of `size_t` instead of Index in sefl-adjoint `matrix * vector`
|
||||
* #1378: fix doc (`DiagonalIndex` vs `Diagonal`).
|
||||
|
||||
## [3.3.2]
|
||||
|
||||
Released on January 18, 2017.
|
||||
|
||||
## [3.3.2] - 2017-01-18
|
||||
Changes since 3.3.1:
|
||||
|
||||
* General:
|
||||
@@ -535,9 +557,7 @@ Changes since 3.3.1:
|
||||
* Fix some warnings with ICC, Power8, etc.
|
||||
* Fix compilation with MSVC 2017
|
||||
|
||||
## [3.3.1]
|
||||
|
||||
Released on December 06, 2016.
|
||||
## [3.3.1] - 2016-12-06
|
||||
|
||||
Changes since 3.3.0:
|
||||
|
||||
@@ -558,9 +578,7 @@ Changes since 3.3.0:
|
||||
* Bugs #1346,#1347: make Eigen's installation relocatable.
|
||||
* Fix some harmless compilation warnings.
|
||||
|
||||
## [3.3]
|
||||
|
||||
Released on November 10, 2016
|
||||
## [3.3] - 2016-11-10
|
||||
|
||||
For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3).
|
||||
|
||||
@@ -569,9 +587,7 @@ Main changes since 3.3-rc2:
|
||||
* Fix regression in printing sparse expressions.
|
||||
* Fix sparse solvers when using a SparseVector as the result and/or right-hand-side.
|
||||
|
||||
## [3.3-rc2]
|
||||
|
||||
Released on November 04, 2016
|
||||
## [3.3-rc2] - 2016-11-04
|
||||
|
||||
For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3).
|
||||
|
||||
@@ -600,9 +616,7 @@ Main changes since 3.3-rc1:
|
||||
* SuiteSparse, fix SPQR for rectangular matrices
|
||||
* Fix compilation of `qr.inverse()` for column and full pivoting variants
|
||||
|
||||
## [3.2.10]
|
||||
|
||||
Released on October 04, 2016
|
||||
## [3.2.10] - 2016-10-04
|
||||
|
||||
Changes since 3.2.9:
|
||||
|
||||
@@ -621,9 +635,7 @@ Main fixes and improvements:
|
||||
* #1249: disable the use of `__builtin_prefetch` for compilers other than GCC, clang, and ICC.
|
||||
* #1265: fix doc of QR decompositions
|
||||
|
||||
## [3.3-rc1]
|
||||
|
||||
Released on September 22, 2016
|
||||
## [3.3-rc1] - 2016-09-22
|
||||
|
||||
For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3).
|
||||
|
||||
@@ -662,9 +674,7 @@ Main changes since 3.3-beta2:
|
||||
* Fix vectorization logic for coeff-based product for some corner cases
|
||||
* Bugs #1260, #1261, #1264: several fixes in AutoDiffScalar.
|
||||
|
||||
## [3.3-beta2]
|
||||
|
||||
Released on July 26, 2016
|
||||
## [3.3-beta2] - 2016-08-26
|
||||
|
||||
For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3).
|
||||
|
||||
@@ -687,7 +697,7 @@ Main changes since 3.3-beta1:
|
||||
* #779: in `Map`, allows non aligned buffers for buffers smaller than the requested alignment.
|
||||
* Add a complete orthogonal decomposition class: [CompleteOrthogonalDecomposition](http://eigen.tuxfamily.org/dox-devel/classEigen_1_1CompleteOrthogonalDecomposition.html)
|
||||
* Improve robustness of JacoviSVD with complexes (underflow, noise amplification in complex to real conversion, compare off-diagonal entries to the current biggest diagonal entry instead of the global biggest, null inputs).
|
||||
* Change Eigen's ColPivHouseholderQR to use a numerically stable norm downdate formula (changeset 9da6c621d055)
|
||||
* Change Eigen's ColPivHouseholderQR to use a numerically stable norm downdate formula (changeset acce4dd0500f)
|
||||
* #1214: consider denormals as zero in D&C SVD. This also workaround infinite binary search when compiling with ICC's unsafe optimizations.
|
||||
* Add log1p for arrays.
|
||||
* #1193: now `lpNorm<Infinity>` supports empty inputs.
|
||||
@@ -710,7 +720,7 @@ Main changes since 3.3-beta1:
|
||||
* Performance improvements:
|
||||
* #256: enable vectorization with unaligned loads/stores. This concerns all architectures and all sizes. This new behavior can be disabled by defining `EIGEN_UNALIGNED_VECTORIZE=0`
|
||||
* Add support for s390x(zEC13) ZVECTOR instruction set.
|
||||
* Optimize mixing of real with complex matrices by avoiding a conversion from real to complex when the real types do not match exactly. (see bccae23d7018)
|
||||
* Optimize mixing of real with complex matrices by avoiding a conversion from real to complex when the real types do not match exactly. (see 76faf4a9657e)
|
||||
* Speedup square roots in performance critical methods such as norm, normalize(d).
|
||||
* #1154: use dynamic scheduling for spmv products.
|
||||
* #667, #1181: improve perf with MSVC and ICC through `FORCE_INLINE`
|
||||
@@ -800,9 +810,7 @@ Main changes since 3.3-beta1:
|
||||
* #1249: fix compilation with compilers that do not support `__builtin_prefetch` .
|
||||
* #1250: fix `pow()` for `AutoDiffScalar` with custom nested scalar type.
|
||||
|
||||
## [3.2.9]
|
||||
|
||||
Released on July 18, 2016
|
||||
## [3.2.9] - 2016-08-18
|
||||
|
||||
Changes since 3.2.8:
|
||||
|
||||
@@ -836,10 +844,7 @@ Changes since 3.2.8:
|
||||
* #1221: shutdown some GCC6's warnings.
|
||||
* #1175: fix index type conversion warnings in sparse to dense conversion.
|
||||
|
||||
## [3.2.8]
|
||||
|
||||
Released on February 16, 2016
|
||||
|
||||
## [3.2.8] - 2016-02-16
|
||||
Changes since 3.2.7:
|
||||
|
||||
* Main fixes and improvements:
|
||||
@@ -869,9 +874,7 @@ Changes since 3.2.7:
|
||||
* Some warning fixes.
|
||||
* Several other documentation clarifications.
|
||||
|
||||
## [3.3-beta1]
|
||||
|
||||
Released on December 16, 2015
|
||||
## [3.3-beta1] - 2015-12-16
|
||||
|
||||
For a comprehensive list of change since the 3.2 series, see this [page](https://www.eigen.tuxfamily.org/index.php?title=3.3).
|
||||
|
||||
@@ -906,7 +909,7 @@ Main changes since 3.3-alpha1:
|
||||
* Add temporary-free evaluation of `D.nolias() *= C + A*B`.
|
||||
* Add vectorization of round, ceil and floor for SSE4.1/AVX.
|
||||
* Optimize assignment into a `Block<SparseMatrix>` by using Ref and avoiding useless updates in non-compressed mode. This make row-by-row filling of a row-major sparse matrix very efficient.
|
||||
* Improve internal cost model leading to faster code in some cases (see changeset 1bcb41187a45).
|
||||
* Improve internal cost model leading to faster code in some cases (see changeset 77ff3386b7d2).
|
||||
* #1090: improve redux evaluation logic.
|
||||
* Enable unaligned vectorization of small fixed size matrix products.
|
||||
|
||||
@@ -938,9 +941,7 @@ Main changes since 3.3-alpha1:
|
||||
* Fix ICE with VC2015 Update1.
|
||||
* Improve cmake install scripts.
|
||||
|
||||
## [3.2.7]
|
||||
|
||||
Released on November 5, 2015
|
||||
## [3.2.7] - 2015-11-05
|
||||
|
||||
Changes since 3.2.6:
|
||||
|
||||
@@ -966,9 +967,7 @@ Changes since 3.2.6:
|
||||
* unsupported/ArpackSupport is now properly installed by make install.
|
||||
* #1080: warning fixes
|
||||
|
||||
## [3.2.6]
|
||||
|
||||
Released on October 1, 2015
|
||||
## [3.2.6] - 2015-10-01
|
||||
|
||||
Changes since 3.2.5:
|
||||
|
||||
@@ -984,15 +983,11 @@ Changes since 3.2.5:
|
||||
* MKL: fix support for the 11.2 version, and fix a naming conflict (#1067)
|
||||
* #1033: explicit type conversion from 0 to RealScalar
|
||||
|
||||
## [3.3-alpha1]
|
||||
|
||||
Released on September 4, 2015
|
||||
## [3.3-alpha1] - 2015-09-04
|
||||
|
||||
See the [announcement](https://www.eigen.tuxfamily.org/index.php?title=3.3).
|
||||
|
||||
## [3.2.5]
|
||||
|
||||
Released on June 16, 2015
|
||||
## [3.2.5] - 2015-06-16
|
||||
|
||||
Changes since 3.2.4:
|
||||
|
||||
@@ -1036,9 +1031,7 @@ Changes since 3.2.4:
|
||||
* #1012: enable alloca on Mac OS or if alloca is defined as macro
|
||||
* Doc and build system: #733, #914, #952, #961, #999
|
||||
|
||||
## [3.2.4]
|
||||
|
||||
Released on January 21, 2015
|
||||
## [3.2.4] - 2015-01-21
|
||||
|
||||
Changes since 3.2.3:
|
||||
|
||||
@@ -1047,9 +1040,7 @@ Changes since 3.2.3:
|
||||
* #921: fix utilization of bitwise operation on enums in `first_aligned`.
|
||||
* Fix compilation with NEON on some platforms.
|
||||
|
||||
## [3.2.3]
|
||||
|
||||
Released on December 16, 2014
|
||||
## [3.2.3] - 2014-12-16
|
||||
|
||||
Changes since 3.2.2:
|
||||
|
||||
@@ -1088,9 +1079,7 @@ Changes since 3.2.2:
|
||||
* #861: enable posix_memalign with PGI.
|
||||
* Fix BiCGSTAB doc example.
|
||||
|
||||
## [3.2.2]
|
||||
|
||||
Released on August 4, 2014
|
||||
## [3.2.2] - 2014-08-04
|
||||
|
||||
Changes since 3.2.1:
|
||||
|
||||
@@ -1134,9 +1123,7 @@ Changes since 3.2.1:
|
||||
* #632: doc: Note that `dm2 = sm1 + dm1` is not possible
|
||||
* Extend AsciiQuickReference (real, imag, conjugate, rot90)
|
||||
|
||||
## [3.2.1]
|
||||
|
||||
Released on February 26, 2014
|
||||
## [3.2.1] - 2014-02-26
|
||||
|
||||
Changes since 3.2.0:
|
||||
|
||||
@@ -1181,9 +1168,7 @@ Changes since 3.2.0:
|
||||
* Fix a few compiler warnings (bug #317 and more).
|
||||
* Documentation fixes (bugs #609, #638 and #739 and more).
|
||||
|
||||
## [3.1.4]
|
||||
|
||||
Released on August 02, 2013
|
||||
## [3.1.4] - 2013-08-02
|
||||
|
||||
Changes since 3.1.3:
|
||||
|
||||
@@ -1196,18 +1181,14 @@ Changes since 3.1.3:
|
||||
* Fix a few warnings and compilation issues with recent compiler versions.
|
||||
* Documentation fixes.
|
||||
|
||||
## [3.0.7]
|
||||
|
||||
Released on August 02, 2013
|
||||
## [3.0.7] - 2013-08-02
|
||||
|
||||
Changes since 3.0.6:
|
||||
|
||||
* Fix traits of `Map<Quaternion>`.
|
||||
* Fix a few warnings (#507) and documentation (#531).
|
||||
|
||||
## [3.2.0]
|
||||
|
||||
Released on July 24, 2013.
|
||||
## [3.2.0] - 2013-07-24
|
||||
|
||||
Major new features and optimizations since 3.1:
|
||||
|
||||
@@ -1234,18 +1215,14 @@ Major new features and optimizations since 3.1:
|
||||
|
||||
Eigen 3.2 represents about 600 commits since Eigen 3.1.
|
||||
|
||||
## [3.2-rc2]
|
||||
|
||||
Released on July 19, 2013.
|
||||
## [3.2-rc2] - 2013-07-19
|
||||
|
||||
Changes since 3.2-rc1:
|
||||
|
||||
* Rename `DenseBase::isFinite()` to `allFinite()` to avoid a future naming collision.
|
||||
* Fix an ICE with ICC 11.1.
|
||||
|
||||
## [3.2-rc1]
|
||||
|
||||
Released on July 17, 2013.
|
||||
## [3.2-rc1] - 2013-07-17
|
||||
|
||||
Main changes since 3.2-beta1:
|
||||
* New features:
|
||||
@@ -1290,10 +1267,7 @@ Main changes since 3.2-beta1:
|
||||
* Fix many warnings and compilation issues with recent compiler versions.
|
||||
* Many other fixes including #230, #482, #542, #561, #564, #565, #566, #578, #581, #595, #597, #598, #599, #605, #606, #615.
|
||||
|
||||
## [3.1.3]
|
||||
|
||||
Released on April 16, 2013
|
||||
|
||||
## [3.1.3] - 2013-04-16
|
||||
Changes since 3.1.2:
|
||||
|
||||
* #526 - Fix linear vectorized transversal in linspace.
|
||||
@@ -1310,9 +1284,7 @@ Changes since 3.1.2:
|
||||
* Enable SSE with ICC even when it mimics a gcc version lower than 4.2
|
||||
* Workaround [gcc-4.7 bug #53900](http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900) (too aggressive optimization in our alignment check)
|
||||
|
||||
## [3.2-beta1]
|
||||
|
||||
Released on March 07, 2013
|
||||
## [3.2-beta1] - 2013-03-07
|
||||
|
||||
Main changes since 3.1:
|
||||
|
||||
@@ -1338,9 +1310,7 @@ Main changes since 3.1:
|
||||
* New compilation token `EIGEN_INITIALIZE_MATRICES_BY_NAN` to help debugging.
|
||||
* All bug fixes of the 3.1 branch, plus a couple of other fixes (including 211, 479, 496, 508, 552)
|
||||
|
||||
## [3.1.2]
|
||||
|
||||
Released on Nov 05, 2012
|
||||
## [3.1.2] - 2012-11-05
|
||||
|
||||
Changes since 3.1.1:
|
||||
|
||||
@@ -1364,9 +1334,7 @@ Changes since 3.1.1:
|
||||
* Remove stupid assert in blue norm.
|
||||
* Workaround a weird compilation error with MSVC.
|
||||
|
||||
## [3.1.1]
|
||||
|
||||
Released on July 22, 2012
|
||||
## [3.1.1] - 2012-07-22
|
||||
|
||||
Changes since 3.1.0:
|
||||
* [relicense to MPL2](https://www.eigen.tuxfamily.org/index.php?title=Main_Page#License)
|
||||
@@ -1382,10 +1350,7 @@ Changes since 3.1.0:
|
||||
* Fixed Geometry module compilation under MSVC
|
||||
* Fixed Sparse module compilation under MSVC 2005
|
||||
|
||||
## [3.0.6]
|
||||
|
||||
Released on July 9, 2012
|
||||
|
||||
## [3.0.6] - 2012-07-09
|
||||
Changes since 3.0.5:
|
||||
* #447 - fix infinite recursion in `ProductBase::coeff()`
|
||||
* #478 - fix RealSchur on a zero matrix
|
||||
@@ -1404,9 +1369,7 @@ Changes since 3.0.5:
|
||||
* Fix typo in NumericalDiff (unsupported module)
|
||||
* Fix LevenbergMarquart for non double scalar type (unsupported module)
|
||||
|
||||
## [3.1.0]
|
||||
|
||||
Released on June 24, 2012.
|
||||
## [3.1.0] - 2012-06-24
|
||||
|
||||
Major changes between Eigen 3.0 and Eigen 3.1:
|
||||
* New features
|
||||
@@ -1429,9 +1392,7 @@ Major changes between Eigen 3.0 and Eigen 3.1:
|
||||
|
||||
Eigen 3.1 represents about 600 commits since Eigen 3.0.
|
||||
|
||||
## [3.1.0-rc2]
|
||||
|
||||
Released on June 21, 2012.
|
||||
## [3.1.0-rc2] - 2012-06-21
|
||||
|
||||
Changes since 3.1.0-rc1:
|
||||
* Fix a couple of compilation warnings
|
||||
@@ -1440,9 +1401,7 @@ Changes since 3.1.0-rc1:
|
||||
* #466: `RealSchur` failed on a zero matrix
|
||||
* Update Adolc and MPReal support modules
|
||||
|
||||
## [3.1.0-rc1]
|
||||
|
||||
Released on June 14, 2012
|
||||
## [3.1.0-rc1] - 2012-06-14
|
||||
|
||||
Main changes since 3.1.0-beta1:
|
||||
* #466: fix a possible race condition issue. from now, multithreaded applications that call Eigen from multiple thread must initialize Eigen by calling `initParallel()`.
|
||||
@@ -1454,9 +1413,7 @@ Main changes since 3.1.0-beta1:
|
||||
* Fix ambiguous calls in the math functors
|
||||
* Fix BTL interface.
|
||||
|
||||
## [3.1.0-beta1]
|
||||
|
||||
Released on June 7, 2012
|
||||
## [3.1.0-beta1] - 2012-06-07
|
||||
|
||||
Main changes since 3.1.0-alpha2:
|
||||
* **API changes**
|
||||
@@ -1487,9 +1444,7 @@ Main changes since 3.1.0-alpha2:
|
||||
* New tutorial page on Map
|
||||
* and many other bug fixes such as: #417, #419, #450
|
||||
|
||||
## [3.0.5]
|
||||
|
||||
Released February 10, 2012
|
||||
## [3.0.5] - 2012-02-10
|
||||
|
||||
Changes since 3.0.4:
|
||||
* #417 - fix nesting of `Map` expressions
|
||||
@@ -1503,9 +1458,7 @@ Changes since 3.0.4:
|
||||
* Changeset 4432 - fix asserts in eigenvalue decompositions
|
||||
* Changeset 4416 - fix MSVC integer overflow warning
|
||||
|
||||
## [3.1.0-alpha2]
|
||||
|
||||
Released February 6, 2012
|
||||
## [3.1.0-alpha2] - 2012-02-06
|
||||
|
||||
Main changes since 3.0.1-alpha1:
|
||||
* New optional support for Intel MKL and other BLAS including: ([details](http://eigen.tuxfamily.org/dox-devel/TopicUsingIntelMKL.html))
|
||||
@@ -1532,9 +1485,7 @@ Main changes since 3.0.1-alpha1:
|
||||
* and many other bug fixes such as: #406, #410, #398, #396, #394, #354, #352, #301,
|
||||
|
||||
|
||||
## [3.1.0-alpha1]
|
||||
|
||||
Released December 6, 2011
|
||||
## [3.1.0-alpha1] - 2011-12-06
|
||||
|
||||
Main changes since 3.0:
|
||||
* Officially supported set of sparse modules. See this [page](http://eigen.tuxfamily.org/dox-devel/TutorialSparse.html) for an overview of the features. Main changes:
|
||||
@@ -1555,11 +1506,7 @@ Main changes since 3.0:
|
||||
* All the fixes and improvements of the 3.0 branch up to the 3.0.4 release (see below)
|
||||
|
||||
|
||||
|
||||
## [3.0.4]
|
||||
|
||||
Released December 6, 2011
|
||||
|
||||
## [3.0.4] - 2011-12-06
|
||||
Changes since 3.0.3:
|
||||
|
||||
* #363 - check for integer overflow in size computations
|
||||
@@ -1572,9 +1519,7 @@ Changes since 3.0.3:
|
||||
* Fix compilation issue with `QuaternionBase::cast`
|
||||
|
||||
|
||||
## [2.0.17]
|
||||
|
||||
Released December 6, 2011
|
||||
## [2.0.17] - 2011-12-06
|
||||
|
||||
Changes since 2.0.16:
|
||||
|
||||
@@ -1582,9 +1527,7 @@ Changes since 2.0.16:
|
||||
* Fix a typo in ParametrizedLine documentation
|
||||
|
||||
|
||||
## [3.0.3]
|
||||
|
||||
Released October 6, 2011
|
||||
## [3.0.3] - 2011-10-06
|
||||
|
||||
Changes since 3.0.2:
|
||||
|
||||
@@ -1596,9 +1539,7 @@ Changes since 3.0.2:
|
||||
* Several improvements to the documentation.
|
||||
|
||||
|
||||
## [3.0.2]
|
||||
|
||||
Released August 26, 2011
|
||||
## [3.0.2] - 2011-08-26
|
||||
|
||||
Changes since 3.0.1:
|
||||
|
||||
@@ -1615,9 +1556,7 @@ Changes since 3.0.1:
|
||||
* fix a few documentation issues.
|
||||
|
||||
|
||||
## [3.0.1]
|
||||
|
||||
Released May 30, 2011
|
||||
## [3.0.1] - 2011-05-30
|
||||
|
||||
Changes since 3.0.0:
|
||||
|
||||
@@ -1634,9 +1573,7 @@ Changes since 3.0.0:
|
||||
* Fix Qt support in Transform.
|
||||
* Improved documentation.
|
||||
|
||||
## [2.0.16]
|
||||
|
||||
Released May 28, 2011
|
||||
## [2.0.16] - 2011-05-28
|
||||
|
||||
Changes since 2.0.15:
|
||||
|
||||
@@ -1647,18 +1584,16 @@ Changes since 2.0.15:
|
||||
* New feature: support for `part<SelfAdjoint>`.
|
||||
* Fix bug in SparseLU::setOrderingMethod.
|
||||
|
||||
## [3.0.0]
|
||||
## [3.0.0] - 2011-03-19
|
||||
|
||||
Released March 19, 2011, at the [meeting](https://www.eigen.tuxfamily.org/index.php?title=Paris_2011_Meeting).
|
||||
Released at the [meeting](https://www.eigen.tuxfamily.org/index.php?title=Paris_2011_Meeting).
|
||||
|
||||
See the [Eigen 3.0 release notes](https://www.eigen.tuxfamily.org/index.php?title=3.0).
|
||||
|
||||
Only change since 3.0-rc1:
|
||||
* Fixed compilation of the unsupported 'openglsupport' test.
|
||||
|
||||
## [3.0-rc1]
|
||||
|
||||
Released March 14, 2011.
|
||||
## [3.0-rc1] - 2011-03-14
|
||||
|
||||
Main changes since 3.0-beta4:
|
||||
|
||||
@@ -1677,9 +1612,7 @@ Main changes since 3.0-beta4:
|
||||
* more compiler warnings fixes
|
||||
* fixed GDB pretty-printer for dynamic-size matrices (#210)
|
||||
|
||||
## [3.0-beta4]
|
||||
|
||||
Released February 28, 2011.
|
||||
## [3.0-beta4] - 2011-02-28
|
||||
|
||||
Main changes since 3.0-beta3:
|
||||
|
||||
@@ -1715,9 +1648,7 @@ Main changes since 3.0-beta3:
|
||||
* misc documentation improvements
|
||||
* improve documentation of plugins
|
||||
|
||||
## [3.0-beta3]
|
||||
|
||||
Released February 12, 2011.
|
||||
## [3.0-beta3] - 2011-02-12
|
||||
|
||||
The biggest news is that the API is now **100% stable**.
|
||||
|
||||
@@ -1763,9 +1694,7 @@ Main changes since 3.0-beta2:
|
||||
* imported a copy of the Eigen 2 test suite, made sure that Eigen 3 passes it. That also allowed to fix several issues.
|
||||
|
||||
|
||||
## [3.0-beta2]
|
||||
|
||||
Released October 15, 2010.
|
||||
## [3.0-beta2] - 2010-10-15
|
||||
|
||||
Main changes since 3.0-beta1:
|
||||
|
||||
@@ -1790,9 +1719,7 @@ Main changes since 3.0-beta1:
|
||||
* Remove the Taucs backend (obsolete).
|
||||
* Remove the old SVD class (was causing too much troubles, a new decompozition based on bidiagonalisation/householder should come back soon, `JacobiSVD` can be used meanwhile).
|
||||
|
||||
## [2.0.15]
|
||||
|
||||
Released July 16, 2010
|
||||
## [2.0.15] - 2010-07-16
|
||||
|
||||
Changes since 2.0.14:
|
||||
|
||||
@@ -1803,15 +1730,11 @@ Changes since 2.0.14:
|
||||
* Fix for ICC in SSE code.
|
||||
* Fix some C++ issues found by Clang (patch by Nick Lewycky).
|
||||
|
||||
## [3.0-beta1]
|
||||
|
||||
Released July 5, 2010
|
||||
## [3.0-beta1] - 2010-07-05
|
||||
|
||||
See the [announcement](https://www.eigen.tuxfamily.org/index.php?title=3.0).
|
||||
|
||||
## [2.0.14]
|
||||
|
||||
Released June 22, 2010
|
||||
## [2.0.14] - 2010-06-22
|
||||
|
||||
Changes since 2.0.13:
|
||||
|
||||
@@ -1819,9 +1742,7 @@ Changes since 2.0.13:
|
||||
* Fix #142: LU of fixed-size matrices was causing dynamic memory allocation (patch by Stuart Glaser).
|
||||
* Fix #127: remove useless static keywords (also fixes warnings with clang++).
|
||||
|
||||
## [2.0.13]
|
||||
|
||||
Released June 10, 2010
|
||||
## [2.0.13] - 2010-06-10
|
||||
|
||||
Changes since 2.0.12:
|
||||
|
||||
@@ -1836,9 +1757,7 @@ Changes since 2.0.12:
|
||||
* Fix compilation of the BTL benchmarks.
|
||||
* Some dox updates.
|
||||
|
||||
## [2.0.12]
|
||||
|
||||
Released February 12, 2010
|
||||
## [2.0.12] - 2010-02-12
|
||||
|
||||
Changes since 2.0.11:
|
||||
|
||||
@@ -1854,9 +1773,7 @@ Changes since 2.0.11:
|
||||
* Backport improvements to benchmarking code.
|
||||
* Documentation fixes
|
||||
|
||||
## [2.0.11]
|
||||
|
||||
Released January 10, 2010
|
||||
## [2.0.11] - 2010-01-10
|
||||
|
||||
Changes since 2.0.10:
|
||||
|
||||
@@ -1869,9 +1786,7 @@ Changes since 2.0.10:
|
||||
* Fix MSVC 2010 compatibility.
|
||||
* Some documentation improvements.
|
||||
|
||||
## [2.0.10]
|
||||
|
||||
Released November 25, 2009
|
||||
## [2.0.10] - 2009-11-25
|
||||
|
||||
Changes since 2.0.9:
|
||||
|
||||
@@ -1887,27 +1802,21 @@ Changes since 2.0.9:
|
||||
* fix compilation with MSVC 2010
|
||||
* adjust to repository name change
|
||||
|
||||
## [2.0.9]
|
||||
|
||||
Released October 24, 2009
|
||||
## [2.0.9] - 2009-10-24
|
||||
|
||||
Changes since 2.0.8:
|
||||
|
||||
* Really fix installation and the pkg-config file.
|
||||
* Install the `NewStdVector` header that was introduced in 2.0.6.
|
||||
|
||||
## [2.0.8]
|
||||
|
||||
Released October 23, 2009
|
||||
## [2.0.8] - 2009-10-23
|
||||
|
||||
Changes since 2.0.7:
|
||||
|
||||
* fix installation error introduced in 2.0.7: it was choking on the pkg-config file eigen2.pc not being found. The fix had been proposed long ago by Ingmar Vanhassel for the development branch, and when recently the pkg-config support was back-ported to the 2.0 branch, nobody thought of backporting this fix too, and apparently nobody tested "make install" !
|
||||
* SVD: add default constructor. Users were relying on the compiler to generate one, and apparenty 2.0.7 triggered a little MSVC 2008 subtlety in this respect. Also added an assert.
|
||||
|
||||
## [2.0.7]
|
||||
|
||||
Released October 22, 2009
|
||||
## [2.0.7] - 2009-10-22
|
||||
|
||||
Changes since 2.0.6:
|
||||
|
||||
@@ -1922,9 +1831,7 @@ Changes since 2.0.6:
|
||||
* add pkg-config support by Rhys Ulerich.
|
||||
* documentation fix and doc-generation-script updates by Thomas Capricelli
|
||||
|
||||
## [2.0.6]
|
||||
|
||||
Released September 23, 2009
|
||||
## [2.0.6] - 2009-09-23
|
||||
|
||||
Changes since 2.0.5:
|
||||
|
||||
@@ -1938,9 +1845,7 @@ Changes since 2.0.5:
|
||||
* fix a warning in `ei_aligned_malloc`; fixed by backporting the body from the devel branch; may result in a different choice of system aligned malloc function.
|
||||
* update the documentation.
|
||||
|
||||
## [2.0.5]
|
||||
|
||||
Released August 22, 2009
|
||||
## [2.0.5] - 2009-08-22
|
||||
|
||||
Changes since 2.0.4:
|
||||
|
||||
@@ -1959,9 +1864,7 @@ Changes since 2.0.4:
|
||||
* fix the option to build a binary library, although it's not very useful and will be removed
|
||||
* add basic .hgignore file and script to build the docs (thanks to Thomas Capricelli)
|
||||
|
||||
## [2.0.4]
|
||||
|
||||
Released August 1, 2009
|
||||
## [2.0.4] - 2009-08-01
|
||||
|
||||
Changes since 2.0.3:
|
||||
* Several fixes in the overloaded new and delete operators. Thanks to Hauke Heibel.
|
||||
@@ -1975,9 +1878,7 @@ Changes since 2.0.3:
|
||||
* several ctest improvements: use our own dashboard, use a separate project for the 2.0 branch.
|
||||
* documentation: improvement on the pages on unaligned arrays (the online copies have been updated immediately).
|
||||
|
||||
## [2.0.3]
|
||||
|
||||
Released June 21, 2009
|
||||
## [2.0.3] - 2009-06-21
|
||||
|
||||
Changes since 2.0.2:
|
||||
* precision and reliability fixes in various algorithms, especially LLT, QR, Tridiagonalization, and also a precision improvement in LU.
|
||||
@@ -1987,9 +1888,7 @@ Changes since 2.0.2:
|
||||
* backport documentation improvements on transpose() and adjoint()
|
||||
* updates in the Sparse module (was needed to support KDE 4.3)
|
||||
|
||||
## [2.0.2]
|
||||
|
||||
Released May 22, 2009
|
||||
## [2.0.2] - 2009-05-22
|
||||
|
||||
Changes since 2.0.1:
|
||||
* Fix `linearRegression()` compilation, actually it is reimplemented using the better fitHyperplane() which does total least-squares.
|
||||
@@ -1999,9 +1898,7 @@ Changes since 2.0.1:
|
||||
* Fix compatibility with the old GCC 3.3: it is now fully supported again.
|
||||
* Fix warnings with recent GCC (4.4.0 and 4.3.3).
|
||||
|
||||
## [2.0.1]
|
||||
|
||||
Released April 14, 2009
|
||||
## [2.0.1] - 2009-04-14
|
||||
|
||||
Changes since 2.0.0:
|
||||
* disable alignment altogether on exotic platforms on which we don't vectorize anyway. This allows e.g. to use Eigen on ARM platforms.
|
||||
@@ -2014,6 +1911,6 @@ Changes since 2.0.0:
|
||||
* fix wrong static assertion (patch by Markus Moll)
|
||||
* add missing operators in `aligned_allocator` (thanks to Hauke Heibel)
|
||||
|
||||
## [2.0.0]
|
||||
## [2.0.0] - 2009-02-02
|
||||
|
||||
Released February 2, 2009
|
||||
First public release.
|
||||
@@ -63,13 +63,8 @@ option(EIGEN_LEAVE_TEST_IN_ALL_TARGET "Leaves tests in the all target, needed by
|
||||
option(EIGEN_BUILD_BLAS "Toggles the building of the Eigen Blas library" ${PROJECT_IS_TOP_LEVEL})
|
||||
option(EIGEN_BUILD_LAPACK "Toggles the building of the included Eigen LAPACK library" ${PROJECT_IS_TOP_LEVEL})
|
||||
if (EIGEN_BUILD_BLAS OR EIGEN_BUILD_LAPACK)
|
||||
# BLAS and LAPACK currently need a fortran compiler.
|
||||
include(CMakeDetermineFortranCompiler)
|
||||
if (NOT CMAKE_Fortran_COMPILER)
|
||||
set(EIGEN_BUILD_BLAS OFF)
|
||||
set(EIGEN_BUILD_LAPACK OFF)
|
||||
else()
|
||||
# Determine if we should build shared libraries for BLAS/LAPACK on this platform.
|
||||
# Determine if we should build shared libraries for BLAS/LAPACK on this platform.
|
||||
if (NOT EIGEN_BUILD_SHARED_LIBS)
|
||||
get_cmake_property(EIGEN_BUILD_SHARED_LIBS TARGET_SUPPORTS_SHARED_LIBS)
|
||||
endif()
|
||||
endif()
|
||||
|
||||
@@ -106,6 +106,11 @@
|
||||
#include <thread>
|
||||
#endif
|
||||
|
||||
// for __cpp_lib feature test macros
|
||||
#if defined(__has_include) && __has_include(<version>)
|
||||
#include <version>
|
||||
#endif
|
||||
|
||||
// for std::bit_cast()
|
||||
#if defined(__cpp_lib_bit_cast) && __cpp_lib_bit_cast >= 201806L
|
||||
#include <bit>
|
||||
|
||||
@@ -6,9 +6,9 @@
|
||||
// As of Eigen3 5.0.0, we have moved to Semantic Versioning (semver.org).
|
||||
#define EIGEN_MAJOR_VERSION 5
|
||||
#define EIGEN_MINOR_VERSION 0
|
||||
#define EIGEN_PATCH_VERSION 0
|
||||
#define EIGEN_PRERELEASE_VERSION "dev"
|
||||
#define EIGEN_BUILD_VERSION "master"
|
||||
#define EIGEN_VERSION_STRING "5.0.0-dev+master"
|
||||
#define EIGEN_PATCH_VERSION 1
|
||||
#define EIGEN_PRERELEASE_VERSION ""
|
||||
#define EIGEN_BUILD_VERSION ""
|
||||
#define EIGEN_VERSION_STRING "5.0.1"
|
||||
|
||||
#endif // EIGEN_VERSION_H
|
||||
|
||||
@@ -56,11 +56,11 @@ class vml_assign_traits {
|
||||
: int(Dst::MaxRowsAtCompileTime),
|
||||
MaxSizeAtCompileTime = Dst::SizeAtCompileTime,
|
||||
|
||||
MightEnableVml = StorageOrdersAgree && DstHasDirectAccess && SrcHasDirectAccess &&
|
||||
MightEnableVml = bool(StorageOrdersAgree) && bool(DstHasDirectAccess) && bool(SrcHasDirectAccess) &&
|
||||
Src::InnerStrideAtCompileTime == 1 && Dst::InnerStrideAtCompileTime == 1,
|
||||
MightLinearize = MightEnableVml && (int(Dst::Flags) & int(Src::Flags) & LinearAccessBit),
|
||||
VmlSize = MightLinearize ? MaxSizeAtCompileTime : InnerMaxSize,
|
||||
LargeEnough = VmlSize == Dynamic || VmlSize >= EIGEN_MKL_VML_THRESHOLD
|
||||
MightLinearize = bool(MightEnableVml) && (int(Dst::Flags) & int(Src::Flags) & LinearAccessBit),
|
||||
VmlSize = bool(MightLinearize) ? MaxSizeAtCompileTime : InnerMaxSize,
|
||||
LargeEnough = (VmlSize == Dynamic) || VmlSize >= EIGEN_MKL_VML_THRESHOLD
|
||||
};
|
||||
|
||||
public:
|
||||
|
||||
@@ -94,7 +94,7 @@ class CwiseNullaryOp : public internal::dense_xpr_base<CwiseNullaryOp<NullaryOp,
|
||||
* the returned matrix. Must be compatible with this MatrixBase type.
|
||||
*
|
||||
* This variant is meant to be used for dynamic-size matrix types. For fixed-size types,
|
||||
* it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used
|
||||
* it is redundant to pass \a rows and \a cols as arguments, so NullaryExpr(const CustomNullaryOp&) should be used
|
||||
* instead.
|
||||
*
|
||||
* The template parameter \a CustomNullaryOp is the type of the functor.
|
||||
@@ -121,7 +121,7 @@ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
* \only_for_vectors
|
||||
*
|
||||
* This variant is meant to be used for dynamic-size vector types. For fixed-size types,
|
||||
* it is redundant to pass \a size as argument, so Zero() should be used
|
||||
* it is redundant to pass \a size as argument, so NullaryExpr(const CustomNullaryOp&) should be used
|
||||
* instead.
|
||||
*
|
||||
* The template parameter \a CustomNullaryOp is the type of the functor.
|
||||
@@ -174,7 +174,7 @@ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
||||
* the returned matrix. Must be compatible with this DenseBase type.
|
||||
*
|
||||
* This variant is meant to be used for dynamic-size matrix types. For fixed-size types,
|
||||
* it is redundant to pass \a rows and \a cols as arguments, so Zero() should be used
|
||||
* it is redundant to pass \a rows and \a cols as arguments, so Constant(const Scalar&) should be used
|
||||
* instead.
|
||||
*
|
||||
* The template parameter \a CustomNullaryOp is the type of the functor.
|
||||
@@ -195,7 +195,7 @@ DenseBase<Derived>::Constant(Index rows, Index cols, const Scalar& value) {
|
||||
* \only_for_vectors
|
||||
*
|
||||
* This variant is meant to be used for dynamic-size vector types. For fixed-size types,
|
||||
* it is redundant to pass \a size as argument, so Zero() should be used
|
||||
* it is redundant to pass \a size as argument, so Constant(const Scalar&) should be used
|
||||
* instead.
|
||||
*
|
||||
* The template parameter \a CustomNullaryOp is the type of the functor.
|
||||
|
||||
@@ -65,7 +65,8 @@ struct plain_array {
|
||||
|
||||
template <typename T, int Size, int MatrixOrArrayOptions>
|
||||
struct plain_array<T, Size, MatrixOrArrayOptions, 0> {
|
||||
T array[Size];
|
||||
// on some 32-bit platforms, stack-allocated arrays are aligned to 4 bytes, not the preferred alignment of T
|
||||
EIGEN_ALIGN_TO_BOUNDARY(alignof(T)) T array[Size];
|
||||
#if defined(EIGEN_NO_DEBUG) || defined(EIGEN_TESTING_PLAINOBJECT_CTOR)
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr plain_array() = default;
|
||||
#else
|
||||
@@ -73,12 +74,6 @@ struct plain_array<T, Size, MatrixOrArrayOptions, 0> {
|
||||
#endif
|
||||
};
|
||||
|
||||
template <typename T, int MatrixOrArrayOptions, int Alignment>
|
||||
struct plain_array<T, 0, MatrixOrArrayOptions, Alignment> {
|
||||
T array[1];
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr plain_array() = default;
|
||||
};
|
||||
|
||||
template <typename T, int Size, int Options, int Alignment>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap_plain_array(plain_array<T, Size, Options, Alignment>& a,
|
||||
plain_array<T, Size, Options, Alignment>& b,
|
||||
|
||||
@@ -115,17 +115,15 @@ struct eigen_zero_impl<Xpr, /*use_memset*/ false> {
|
||||
template <typename Xpr>
|
||||
struct eigen_zero_impl<Xpr, /*use_memset*/ true> {
|
||||
using Scalar = typename Xpr::Scalar;
|
||||
static constexpr size_t max_bytes = (std::numeric_limits<std::ptrdiff_t>::max)();
|
||||
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(Xpr& dst) {
|
||||
const size_t num_bytes = dst.size() * sizeof(Scalar);
|
||||
if (num_bytes == 0) return;
|
||||
const std::ptrdiff_t num_bytes = dst.size() * static_cast<std::ptrdiff_t>(sizeof(Scalar));
|
||||
if (num_bytes <= 0) return;
|
||||
void* dst_ptr = static_cast<void*>(dst.data());
|
||||
#ifndef EIGEN_NO_DEBUG
|
||||
if (num_bytes > max_bytes) throw_std_bad_alloc();
|
||||
eigen_assert((dst_ptr != nullptr) && "null pointer dereference error!");
|
||||
#endif
|
||||
EIGEN_USING_STD(memset);
|
||||
memset(dst_ptr, 0, num_bytes);
|
||||
memset(dst_ptr, 0, static_cast<std::size_t>(num_bytes));
|
||||
}
|
||||
template <typename SrcXpr>
|
||||
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void run(Xpr& dst, const SrcXpr& src) {
|
||||
|
||||
@@ -211,8 +211,14 @@ struct scalar_inner_product_op {
|
||||
static constexpr bool PacketAccess = false;
|
||||
};
|
||||
|
||||
// Partial specialization for packet access if and only if
|
||||
// LhsScalar == RhsScalar == ScalarBinaryOpTraits<LhsScalar, RhsScalar>::ReturnType.
|
||||
template <typename Scalar, bool Conj>
|
||||
struct scalar_inner_product_op<Scalar, Scalar, Conj> {
|
||||
struct scalar_inner_product_op<
|
||||
Scalar,
|
||||
typename std::enable_if<internal::is_same<typename ScalarBinaryOpTraits<Scalar, Scalar>::ReturnType, Scalar>::value,
|
||||
Scalar>::type,
|
||||
Conj> {
|
||||
using result_type = Scalar;
|
||||
using conj_helper = conditional_conj<Scalar, Conj>;
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(const Scalar& a, const Scalar& b) const {
|
||||
|
||||
@@ -1004,8 +1004,7 @@ struct madd_impl {
|
||||
}
|
||||
};
|
||||
|
||||
// Use FMA if there is a single CPU instruction.
|
||||
#ifdef EIGEN_VECTORIZE_FMA
|
||||
#if EIGEN_SCALAR_MADD_USE_FMA
|
||||
template <typename Scalar>
|
||||
struct madd_impl<Scalar, std::enable_if_t<has_fma<Scalar>::value>> {
|
||||
static EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar run(const Scalar& x, const Scalar& y, const Scalar& z) {
|
||||
@@ -1927,7 +1926,6 @@ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar arithmetic_shift_right(const Scalar
|
||||
return bit_cast<Scalar, SignedScalar>(bit_cast<SignedScalar, Scalar>(a) >> n);
|
||||
}
|
||||
|
||||
// Otherwise, rely on template implementation.
|
||||
template <typename Scalar>
|
||||
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar fma(const Scalar& x, const Scalar& y, const Scalar& z) {
|
||||
return internal::fma_impl<Scalar>::run(x, y, z);
|
||||
|
||||
@@ -109,6 +109,9 @@ class PermutationBase : public EigenBase<Derived> {
|
||||
*/
|
||||
DenseMatrixType toDenseMatrix() const { return derived(); }
|
||||
|
||||
/** \returns the plain matrix representation of the permutation. */
|
||||
DenseMatrixType eval() const { return toDenseMatrix(); }
|
||||
|
||||
/** const version of indices(). */
|
||||
const IndicesType& indices() const { return derived().indices(); }
|
||||
/** \returns a reference to the stored array representing the permutation. */
|
||||
|
||||
@@ -2831,7 +2831,7 @@ inline __m128i segment_mask_4x8(Index begin, Index count) {
|
||||
mask <<= CHAR_BIT * count;
|
||||
mask--;
|
||||
mask <<= CHAR_BIT * begin;
|
||||
#if defined(_WIN32) && !defined(_WIN64)
|
||||
#if !EIGEN_ARCH_x86_64
|
||||
return _mm_loadl_epi64(reinterpret_cast<const __m128i*>(&mask));
|
||||
#else
|
||||
return _mm_cvtsi64_si128(mask);
|
||||
@@ -2847,7 +2847,7 @@ inline __m128i segment_mask_8x8(Index begin, Index count) {
|
||||
mask <<= (CHAR_BIT / 2) * count;
|
||||
mask--;
|
||||
mask <<= CHAR_BIT * begin;
|
||||
#if defined(_WIN32) && !defined(_WIN64)
|
||||
#if !EIGEN_ARCH_x86_64
|
||||
return _mm_loadl_epi64(reinterpret_cast<const __m128i*>(&mask));
|
||||
#else
|
||||
return _mm_cvtsi64_si128(mask);
|
||||
|
||||
@@ -240,8 +240,8 @@ EIGEN_STRONG_INLINE Packet4d pcast<Packet4l, Packet4d>(const Packet4l& a) {
|
||||
#if defined(EIGEN_VECTORIZE_AVX512DQ) && defined(EIGEN_VECTORIZE_AVS512VL)
|
||||
return _mm256_cvtepi64_pd(a);
|
||||
#else
|
||||
EIGEN_ALIGN16 int64_t aux[4];
|
||||
pstore(aux, a);
|
||||
int64_t aux[4];
|
||||
pstoreu(aux, a);
|
||||
return _mm256_set_pd(static_cast<double>(aux[3]), static_cast<double>(aux[2]), static_cast<double>(aux[1]),
|
||||
static_cast<double>(aux[0]));
|
||||
#endif
|
||||
|
||||
@@ -48,7 +48,7 @@ struct Packet2cf {
|
||||
};
|
||||
|
||||
template <>
|
||||
struct packet_traits<std::complex<float> > : default_packet_traits {
|
||||
struct packet_traits<std::complex<float>> : default_packet_traits {
|
||||
typedef Packet2cf type;
|
||||
typedef Packet1cf half;
|
||||
enum {
|
||||
@@ -280,13 +280,13 @@ EIGEN_STRONG_INLINE Packet2cf pandnot<Packet2cf>(const Packet2cf& a, const Packe
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet1cf pload<Packet1cf>(const std::complex<float>* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet1cf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return Packet1cf(pload<Packet2f>((const float*)from));
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return Packet1cf(
|
||||
pload<Packet2f>(assume_aligned<unpacket_traits<Packet1cf>::alignment>(reinterpret_cast<const float*>(from))));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet2cf pload<Packet2cf>(const std::complex<float>* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet2cf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return Packet2cf(pload<Packet4f>(reinterpret_cast<const float*>(from)));
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return Packet2cf(
|
||||
pload<Packet4f>(assume_aligned<unpacket_traits<Packet2cf>::alignment>(reinterpret_cast<const float*>(from))));
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -308,22 +308,22 @@ EIGEN_STRONG_INLINE Packet2cf ploaddup<Packet2cf>(const std::complex<float>* fro
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<std::complex<float> >(std::complex<float>* to, const Packet1cf& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet1cf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE pstore((float*)to, from.v);
|
||||
EIGEN_STRONG_INLINE void pstore<std::complex<float>>(std::complex<float>* to, const Packet1cf& from) {
|
||||
EIGEN_DEBUG_ALIGNED_STORE pstore(assume_aligned<unpacket_traits<Packet1cf>::alignment>(reinterpret_cast<float*>(to)),
|
||||
from.v);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<std::complex<float> >(std::complex<float>* to, const Packet2cf& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet2cf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE pstore(reinterpret_cast<float*>(to), from.v);
|
||||
EIGEN_STRONG_INLINE void pstore<std::complex<float>>(std::complex<float>* to, const Packet2cf& from) {
|
||||
EIGEN_DEBUG_ALIGNED_STORE pstore(assume_aligned<unpacket_traits<Packet2cf>::alignment>(reinterpret_cast<float*>(to)),
|
||||
from.v);
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstoreu<std::complex<float> >(std::complex<float>* to, const Packet1cf& from) {
|
||||
EIGEN_STRONG_INLINE void pstoreu<std::complex<float>>(std::complex<float>* to, const Packet1cf& from) {
|
||||
EIGEN_DEBUG_UNALIGNED_STORE pstoreu((float*)to, from.v);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstoreu<std::complex<float> >(std::complex<float>* to, const Packet2cf& from) {
|
||||
EIGEN_STRONG_INLINE void pstoreu<std::complex<float>>(std::complex<float>* to, const Packet2cf& from) {
|
||||
EIGEN_DEBUG_UNALIGNED_STORE pstoreu(reinterpret_cast<float*>(to), from.v);
|
||||
}
|
||||
|
||||
@@ -356,7 +356,7 @@ EIGEN_DEVICE_FUNC inline void pscatter<std::complex<float>, Packet2cf>(std::comp
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void prefetch<std::complex<float> >(const std::complex<float>* addr) {
|
||||
EIGEN_STRONG_INLINE void prefetch<std::complex<float>>(const std::complex<float>* addr) {
|
||||
EIGEN_ARM_PREFETCH(reinterpret_cast<const float*>(addr));
|
||||
}
|
||||
|
||||
@@ -501,7 +501,7 @@ struct Packet1cd {
|
||||
};
|
||||
|
||||
template <>
|
||||
struct packet_traits<std::complex<double> > : default_packet_traits {
|
||||
struct packet_traits<std::complex<double>> : default_packet_traits {
|
||||
typedef Packet1cd type;
|
||||
typedef Packet1cd half;
|
||||
enum {
|
||||
@@ -531,8 +531,8 @@ struct unpacket_traits<Packet1cd> : neon_unpacket_default<Packet1cd, std::comple
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet1cd pload<Packet1cd>(const std::complex<double>* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet1cd>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return Packet1cd(pload<Packet2d>(reinterpret_cast<const double*>(from)));
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return Packet1cd(
|
||||
pload<Packet2d>(assume_aligned<unpacket_traits<Packet1cd>::alignment>(reinterpret_cast<const double*>(from))));
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -644,18 +644,18 @@ EIGEN_STRONG_INLINE Packet1cd ploaddup<Packet1cd>(const std::complex<double>* fr
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<std::complex<double> >(std::complex<double>* to, const Packet1cd& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet1cd>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE pstore(reinterpret_cast<double*>(to), from.v);
|
||||
EIGEN_STRONG_INLINE void pstore<std::complex<double>>(std::complex<double>* to, const Packet1cd& from) {
|
||||
EIGEN_DEBUG_ALIGNED_STORE pstore(assume_aligned<unpacket_traits<Packet1cd>::alignment>(reinterpret_cast<double*>(to)),
|
||||
from.v);
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstoreu<std::complex<double> >(std::complex<double>* to, const Packet1cd& from) {
|
||||
EIGEN_STRONG_INLINE void pstoreu<std::complex<double>>(std::complex<double>* to, const Packet1cd& from) {
|
||||
EIGEN_DEBUG_UNALIGNED_STORE pstoreu(reinterpret_cast<double*>(to), from.v);
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void prefetch<std::complex<double> >(const std::complex<double>* addr) {
|
||||
EIGEN_STRONG_INLINE void prefetch<std::complex<double>>(const std::complex<double>* addr) {
|
||||
EIGEN_ARM_PREFETCH(reinterpret_cast<const double*>(addr));
|
||||
}
|
||||
|
||||
@@ -677,7 +677,7 @@ EIGEN_DEVICE_FUNC inline void pscatter<std::complex<double>, Packet1cd>(std::com
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE std::complex<double> pfirst<Packet1cd>(const Packet1cd& a) {
|
||||
EIGEN_ALIGN16 std::complex<double> res;
|
||||
pstore<std::complex<double> >(&res, a);
|
||||
pstore<std::complex<double>>(&res, a);
|
||||
return res;
|
||||
}
|
||||
|
||||
|
||||
@@ -2268,13 +2268,11 @@ EIGEN_STRONG_INLINE Packet2ul plogical_shift_left(Packet2ul a) {
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet2f pload<Packet2f>(const float* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet2f>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_f32(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_f32(assume_aligned<unpacket_traits<Packet2f>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4f pload<Packet4f>(const float* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet4f>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_f32(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_f32(assume_aligned<unpacket_traits<Packet4f>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4c pload<Packet4c>(const int8_t* from) {
|
||||
@@ -2284,13 +2282,11 @@ EIGEN_STRONG_INLINE Packet4c pload<Packet4c>(const int8_t* from) {
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet8c pload<Packet8c>(const int8_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet8c>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_s8(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_s8(assume_aligned<unpacket_traits<Packet8c>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet16c pload<Packet16c>(const int8_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet16c>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s8(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s8(assume_aligned<unpacket_traits<Packet16c>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4uc pload<Packet4uc>(const uint8_t* from) {
|
||||
@@ -2300,63 +2296,51 @@ EIGEN_STRONG_INLINE Packet4uc pload<Packet4uc>(const uint8_t* from) {
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet8uc pload<Packet8uc>(const uint8_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet8uc>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_u8(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_u8(assume_aligned<unpacket_traits<Packet8uc>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet16uc pload<Packet16uc>(const uint8_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet16uc>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u8(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u8(assume_aligned<unpacket_traits<Packet16uc>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4s pload<Packet4s>(const int16_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet4s>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_s16(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_s16(assume_aligned<unpacket_traits<Packet4s>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet8s pload<Packet8s>(const int16_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet8s>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s16(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s16(assume_aligned<unpacket_traits<Packet8s>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4us pload<Packet4us>(const uint16_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet4us>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_u16(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_u16(assume_aligned<unpacket_traits<Packet4us>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet8us pload<Packet8us>(const uint16_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet8us>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u16(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u16(assume_aligned<unpacket_traits<Packet8us>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet2i pload<Packet2i>(const int32_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet2i>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_s32(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_s32(assume_aligned<unpacket_traits<Packet2i>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4i pload<Packet4i>(const int32_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet4i>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s32(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s32(assume_aligned<unpacket_traits<Packet4i>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet2ui pload<Packet2ui>(const uint32_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet2ui>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_u32(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_u32(assume_aligned<unpacket_traits<Packet2ui>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4ui pload<Packet4ui>(const uint32_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet4ui>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u32(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u32(assume_aligned<unpacket_traits<Packet4ui>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet2l pload<Packet2l>(const int64_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet2l>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s64(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_s64(assume_aligned<unpacket_traits<Packet2l>::alignment>(from));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet2ul pload<Packet2ul>(const uint64_t* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet2ul>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u64(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_u64(assume_aligned<unpacket_traits<Packet2ul>::alignment>(from));
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -2580,13 +2564,11 @@ EIGEN_STRONG_INLINE Packet4ui ploadquad<Packet4ui>(const uint32_t* from) {
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<float>(float* to, const Packet2f& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet2f>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_f32(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_f32(assume_aligned<unpacket_traits<Packet2f>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<float>(float* to, const Packet4f& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet4f>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_f32(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_f32(assume_aligned<unpacket_traits<Packet4f>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int8_t>(int8_t* to, const Packet4c& from) {
|
||||
@@ -2594,13 +2576,11 @@ EIGEN_STRONG_INLINE void pstore<int8_t>(int8_t* to, const Packet4c& from) {
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int8_t>(int8_t* to, const Packet8c& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet8c>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_s8(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_s8(assume_aligned<unpacket_traits<Packet8c>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int8_t>(int8_t* to, const Packet16c& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet16c>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s8(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s8(assume_aligned<unpacket_traits<Packet16c>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint8_t>(uint8_t* to, const Packet4uc& from) {
|
||||
@@ -2608,63 +2588,51 @@ EIGEN_STRONG_INLINE void pstore<uint8_t>(uint8_t* to, const Packet4uc& from) {
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint8_t>(uint8_t* to, const Packet8uc& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet8uc>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u8(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u8(assume_aligned<unpacket_traits<Packet8uc>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint8_t>(uint8_t* to, const Packet16uc& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet16uc>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u8(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u8(assume_aligned<unpacket_traits<Packet16uc>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int16_t>(int16_t* to, const Packet4s& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet4s>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_s16(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_s16(assume_aligned<unpacket_traits<Packet4s>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int16_t>(int16_t* to, const Packet8s& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet8s>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s16(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s16(assume_aligned<unpacket_traits<Packet8s>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint16_t>(uint16_t* to, const Packet4us& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet4us>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u16(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u16(assume_aligned<unpacket_traits<Packet4us>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint16_t>(uint16_t* to, const Packet8us& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet8us>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u16(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u16(assume_aligned<unpacket_traits<Packet8us>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int32_t>(int32_t* to, const Packet2i& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet2i>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_s32(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_s32(assume_aligned<unpacket_traits<Packet2i>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int32_t>(int32_t* to, const Packet4i& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet4i>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s32(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s32(assume_aligned<unpacket_traits<Packet4i>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint32_t>(uint32_t* to, const Packet2ui& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet2ui>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u32(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u32(assume_aligned<unpacket_traits<Packet2ui>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint32_t>(uint32_t* to, const Packet4ui& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet4ui>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u32(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u32(assume_aligned<unpacket_traits<Packet4ui>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<int64_t>(int64_t* to, const Packet2l& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet2l>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s64(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_s64(assume_aligned<unpacket_traits<Packet2l>::alignment>(to), from);
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<uint64_t>(uint64_t* to, const Packet2ul& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet2ul>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u64(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_u64(assume_aligned<unpacket_traits<Packet2ul>::alignment>(to), from);
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -4739,8 +4707,8 @@ EIGEN_STRONG_INLINE bfloat16 pfirst<Packet4bf>(const Packet4bf& from) {
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4bf pload<Packet4bf>(const bfloat16* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet4bf>::alignment);
|
||||
return Packet4bf(pload<Packet4us>(reinterpret_cast<const uint16_t*>(from)));
|
||||
return Packet4bf(
|
||||
pload<Packet4us>(reinterpret_cast<const uint16_t*>(assume_aligned<unpacket_traits<Packet4bf>::alignment>(from))));
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -4750,8 +4718,8 @@ EIGEN_STRONG_INLINE Packet4bf ploadu<Packet4bf>(const bfloat16* from) {
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<bfloat16>(bfloat16* to, const Packet4bf& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet4bf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u16(reinterpret_cast<uint16_t*>(to), from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_u16(
|
||||
reinterpret_cast<uint16_t*>(assume_aligned<unpacket_traits<Packet4bf>::alignment>(to)), from);
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -5240,8 +5208,7 @@ EIGEN_STRONG_INLINE Packet2d pcmp_eq(const Packet2d& a, const Packet2d& b) {
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet2d pload<Packet2d>(const double* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet2d>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_f64(from);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_f64(assume_aligned<unpacket_traits<Packet2d>::alignment>(from));
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -5255,8 +5222,7 @@ EIGEN_STRONG_INLINE Packet2d ploaddup<Packet2d>(const double* from) {
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<double>(double* to, const Packet2d& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet2d>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_f64(to, from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_f64(assume_aligned<unpacket_traits<Packet2d>::alignment>(to), from);
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -5784,14 +5750,14 @@ EIGEN_STRONG_INLINE Packet4hf pandnot<Packet4hf>(const Packet4hf& a, const Packe
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet8hf pload<Packet8hf>(const Eigen::half* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet8hf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_f16(reinterpret_cast<const float16_t*>(from));
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1q_f16(
|
||||
reinterpret_cast<const float16_t*>(assume_aligned<unpacket_traits<Packet8hf>::alignment>(from)));
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE Packet4hf pload<Packet4hf>(const Eigen::half* from) {
|
||||
EIGEN_ASSUME_ALIGNED(from, unpacket_traits<Packet4hf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_f16(reinterpret_cast<const float16_t*>(from));
|
||||
EIGEN_DEBUG_ALIGNED_LOAD return vld1_f16(
|
||||
reinterpret_cast<const float16_t*>(assume_aligned<unpacket_traits<Packet4hf>::alignment>(from)));
|
||||
}
|
||||
|
||||
template <>
|
||||
@@ -5866,14 +5832,14 @@ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Packet4hf pinsertlast(const Packet4hf& a,
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<Eigen::half>(Eigen::half* to, const Packet8hf& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet8hf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_f16(reinterpret_cast<float16_t*>(to), from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1q_f16(
|
||||
reinterpret_cast<float16_t*>(assume_aligned<unpacket_traits<Packet8hf>::alignment>(to)), from);
|
||||
}
|
||||
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pstore<Eigen::half>(Eigen::half* to, const Packet4hf& from) {
|
||||
EIGEN_ASSUME_ALIGNED(to, unpacket_traits<Packet4hf>::alignment);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_f16(reinterpret_cast<float16_t*>(to), from);
|
||||
EIGEN_DEBUG_ALIGNED_STORE vst1_f16(
|
||||
reinterpret_cast<float16_t*>(assume_aligned<unpacket_traits<Packet4hf>::alignment>(to)), from);
|
||||
}
|
||||
|
||||
template <>
|
||||
|
||||
@@ -1679,9 +1679,9 @@ EIGEN_STRONG_INLINE Packet16b pgather<bool, Packet16b>(const bool* from, Index s
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pscatter<float, Packet4f>(float* to, const Packet4f& from, Index stride) {
|
||||
to[stride * 0] = pfirst(from);
|
||||
to[stride * 1] = pfirst(_mm_shuffle_ps(from, from, 1));
|
||||
to[stride * 2] = pfirst(_mm_shuffle_ps(from, from, 2));
|
||||
to[stride * 3] = pfirst(_mm_shuffle_ps(from, from, 3));
|
||||
to[stride * 1] = pfirst(Packet4f(_mm_shuffle_ps(from, from, 1)));
|
||||
to[stride * 2] = pfirst(Packet4f(_mm_shuffle_ps(from, from, 2)));
|
||||
to[stride * 3] = pfirst(Packet4f(_mm_shuffle_ps(from, from, 3)));
|
||||
}
|
||||
template <>
|
||||
EIGEN_STRONG_INLINE void pscatter<double, Packet2d>(double* to, const Packet2d& from, Index stride) {
|
||||
|
||||
@@ -52,6 +52,26 @@
|
||||
#define EIGEN_STACK_ALLOCATION_LIMIT 131072
|
||||
#endif
|
||||
|
||||
/* Specify whether to use std::fma for scalar multiply-add instructions.
|
||||
*
|
||||
* On machines that have FMA as a single instruction, this will generally
|
||||
* improve precision without significant performance implications.
|
||||
*
|
||||
* Without a single instruction, performance has been found to be reduced 2-3x
|
||||
* on Intel CPUs, and up to 30x for WASM.
|
||||
*
|
||||
* If unspecified, defaults to using FMA if hardware support is available.
|
||||
* The default should be used in most cases to ensure consistency between
|
||||
* vectorized and non-vectorized paths.
|
||||
*/
|
||||
#ifndef EIGEN_SCALAR_MADD_USE_FMA
|
||||
#ifdef EIGEN_VECTORIZE_FMA
|
||||
#define EIGEN_SCALAR_MADD_USE_FMA 1
|
||||
#else
|
||||
#define EIGEN_SCALAR_MADD_USE_FMA 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
//------------------------------------------------------------------------------------------
|
||||
// Compiler identification, EIGEN_COMP_*
|
||||
//------------------------------------------------------------------------------------------
|
||||
|
||||
@@ -91,6 +91,9 @@ namespace internal {
|
||||
EIGEN_DEVICE_FUNC inline void check_that_malloc_is_allowed() {
|
||||
eigen_assert(false && "heap allocation is forbidden (EIGEN_NO_MALLOC is defined)");
|
||||
}
|
||||
EIGEN_DEVICE_FUNC inline void check_that_free_is_allowed() {
|
||||
eigen_assert(false && "heap deallocation is forbidden (EIGEN_NO_MALLOC is defined)");
|
||||
}
|
||||
#elif defined EIGEN_RUNTIME_NO_MALLOC
|
||||
EIGEN_DEVICE_FUNC inline bool is_malloc_allowed_impl(bool update, bool new_value = false) {
|
||||
EIGEN_MALLOC_CHECK_THREAD_LOCAL static bool value = true;
|
||||
@@ -101,10 +104,22 @@ EIGEN_DEVICE_FUNC inline bool is_malloc_allowed() { return is_malloc_allowed_imp
|
||||
EIGEN_DEVICE_FUNC inline bool set_is_malloc_allowed(bool new_value) { return is_malloc_allowed_impl(true, new_value); }
|
||||
EIGEN_DEVICE_FUNC inline void check_that_malloc_is_allowed() {
|
||||
eigen_assert(is_malloc_allowed() &&
|
||||
"heap allocation is forbidden (EIGEN_RUNTIME_NO_MALLOC is defined and g_is_malloc_allowed is false)");
|
||||
"heap allocation is forbidden (EIGEN_RUNTIME_NO_MALLOC is defined and set_is_malloc_allowed is false)");
|
||||
}
|
||||
EIGEN_DEVICE_FUNC inline bool is_free_allowed_impl(bool update, bool new_value = false) {
|
||||
EIGEN_MALLOC_CHECK_THREAD_LOCAL static bool value = true;
|
||||
if (update == 1) value = new_value;
|
||||
return value;
|
||||
}
|
||||
EIGEN_DEVICE_FUNC inline bool is_free_allowed() { return is_free_allowed_impl(false); }
|
||||
EIGEN_DEVICE_FUNC inline bool set_is_free_allowed(bool new_value) { return is_free_allowed_impl(true, new_value); }
|
||||
EIGEN_DEVICE_FUNC inline void check_that_free_is_allowed() {
|
||||
eigen_assert(is_malloc_allowed() &&
|
||||
"heap deallocation is forbidden (EIGEN_RUNTIME_NO_MALLOC is defined and set_is_free_allowed is false)");
|
||||
}
|
||||
#else
|
||||
EIGEN_DEVICE_FUNC inline void check_that_malloc_is_allowed() {}
|
||||
EIGEN_DEVICE_FUNC inline void check_that_free_is_allowed() {}
|
||||
#endif
|
||||
|
||||
EIGEN_DEVICE_FUNC inline void throw_std_bad_alloc() {
|
||||
@@ -161,7 +176,7 @@ EIGEN_DEVICE_FUNC inline void handmade_aligned_free(void* ptr) {
|
||||
std::size_t offset = static_cast<std::size_t>(*(static_cast<uint8_t*>(ptr) - 1)) + 1;
|
||||
void* original = static_cast<void*>(static_cast<uint8_t*>(ptr) - offset);
|
||||
|
||||
check_that_malloc_is_allowed();
|
||||
check_that_free_is_allowed();
|
||||
EIGEN_USING_STD(free)
|
||||
free(original);
|
||||
}
|
||||
@@ -227,7 +242,7 @@ EIGEN_DEVICE_FUNC inline void aligned_free(void* ptr) {
|
||||
#if (EIGEN_DEFAULT_ALIGN_BYTES == 0) || EIGEN_MALLOC_ALREADY_ALIGNED
|
||||
|
||||
if (ptr != nullptr) {
|
||||
check_that_malloc_is_allowed();
|
||||
check_that_free_is_allowed();
|
||||
EIGEN_USING_STD(free)
|
||||
free(ptr);
|
||||
}
|
||||
@@ -299,7 +314,7 @@ EIGEN_DEVICE_FUNC inline void conditional_aligned_free(void* ptr) {
|
||||
template <>
|
||||
EIGEN_DEVICE_FUNC inline void conditional_aligned_free<false>(void* ptr) {
|
||||
if (ptr != nullptr) {
|
||||
check_that_malloc_is_allowed();
|
||||
check_that_free_is_allowed();
|
||||
EIGEN_USING_STD(free)
|
||||
free(ptr);
|
||||
}
|
||||
@@ -1339,19 +1354,28 @@ EIGEN_DEVICE_FUNC void destroy_at(T* p) {
|
||||
}
|
||||
#endif
|
||||
|
||||
/** \internal
|
||||
* This informs the implementation that PTR is aligned to at least ALIGN_BYTES
|
||||
*/
|
||||
#ifndef EIGEN_ASSUME_ALIGNED
|
||||
#if defined(__cpp_lib_assume_aligned) && (__cpp_lib_assume_aligned >= 201811L)
|
||||
#define EIGEN_ASSUME_ALIGNED(PTR, ALIGN_BYTES) \
|
||||
{ PTR = std::assume_aligned<8 * (ALIGN_BYTES)>(PTR); }
|
||||
#elif EIGEN_HAS_BUILTIN(__builtin_assume_aligned)
|
||||
#define EIGEN_ASSUME_ALIGNED(PTR, ALIGN_BYTES) \
|
||||
{ PTR = static_cast<decltype(PTR)>(__builtin_assume_aligned(PTR, (ALIGN_BYTES))); }
|
||||
#else
|
||||
#define EIGEN_ASSUME_ALIGNED(PTR, ALIGN_BYTES) /* do nothing */
|
||||
// FIXME(rmlarsen): Work around missing linker symbol with msan on ARM.
|
||||
#if !defined(EIGEN_DONT_ASSUME_ALIGNED) && __has_feature(memory_sanitizer) && \
|
||||
(EIGEN_ARCH_ARM || EIGEN_ARCH_ARM64)
|
||||
#define EIGEN_DONT_ASSUME_ALIGNED
|
||||
#endif
|
||||
|
||||
|
||||
#if !defined(EIGEN_DONT_ASSUME_ALIGNED) && defined(__cpp_lib_assume_aligned) && (__cpp_lib_assume_aligned >= 201811L)
|
||||
template <std::size_t N, typename T>
|
||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC constexpr T* assume_aligned(T* ptr) {
|
||||
return std::assume_aligned<N, T>(ptr);
|
||||
}
|
||||
#elif !defined(EIGEN_DONT_ASSUME_ALIGNED) && EIGEN_HAS_BUILTIN(__builtin_assume_aligned)
|
||||
template <std::size_t N, typename T>
|
||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC T* assume_aligned(T* ptr) {
|
||||
return static_cast<T*>(__builtin_assume_aligned(ptr, N));
|
||||
}
|
||||
#else
|
||||
template <std::size_t N, typename T>
|
||||
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC constexpr T* assume_aligned(T* ptr) {
|
||||
return ptr;
|
||||
}
|
||||
#endif
|
||||
|
||||
} // end namespace internal
|
||||
|
||||
@@ -65,7 +65,6 @@ template <typename EssentialPart>
|
||||
EIGEN_DEVICE_FUNC void MatrixBase<Derived>::makeHouseholder(EssentialPart& essential, Scalar& tau,
|
||||
RealScalar& beta) const {
|
||||
using numext::conj;
|
||||
using numext::sqrt;
|
||||
|
||||
EIGEN_STATIC_ASSERT_VECTOR_ONLY(EssentialPart)
|
||||
VectorBlock<const Derived, EssentialPart::SizeAtCompileTime> tail(derived(), 1, size() - 1);
|
||||
@@ -79,7 +78,7 @@ EIGEN_DEVICE_FUNC void MatrixBase<Derived>::makeHouseholder(EssentialPart& essen
|
||||
beta = numext::real(c0);
|
||||
essential.setZero();
|
||||
} else {
|
||||
beta = sqrt(numext::abs2(c0) + tailSqNorm);
|
||||
beta = numext::sqrt(numext::abs2(c0) + tailSqNorm);
|
||||
if (numext::real(c0) >= RealScalar(0)) beta = -beta;
|
||||
essential = tail / (c0 - beta);
|
||||
tau = conj((beta - c0) / beta);
|
||||
|
||||
@@ -182,7 +182,7 @@ class KLU : public SparseSolverBase<KLU<MatrixType_> > {
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the pattern anylysis has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the pattern anylysis has been performed.
|
||||
*
|
||||
* \sa analyzePattern(), compute()
|
||||
*/
|
||||
|
||||
@@ -157,7 +157,8 @@ class PardisoImpl : public SparseSolverBase<Derived> {
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
|
||||
@@ -571,6 +571,11 @@ class JacobiSVD : public SVDBase<JacobiSVD<MatrixType_, Options_> > {
|
||||
compute_impl(matrix, internal::get_computation_options(Options));
|
||||
}
|
||||
|
||||
template <typename Derived>
|
||||
explicit JacobiSVD(const TriangularBase<Derived>& matrix) {
|
||||
compute_impl(matrix, internal::get_computation_options(Options));
|
||||
}
|
||||
|
||||
/** \brief Constructor performing the decomposition of given matrix using specified options
|
||||
* for computing unitaries.
|
||||
*
|
||||
@@ -601,6 +606,11 @@ class JacobiSVD : public SVDBase<JacobiSVD<MatrixType_, Options_> > {
|
||||
return compute_impl(matrix, m_computationOptions);
|
||||
}
|
||||
|
||||
template <typename Derived>
|
||||
JacobiSVD& compute(const TriangularBase<Derived>& matrix) {
|
||||
return compute_impl(matrix, m_computationOptions);
|
||||
}
|
||||
|
||||
/** \brief Method performing the decomposition of given matrix, as specified by
|
||||
* the `computationOptions` parameter.
|
||||
*
|
||||
@@ -638,6 +648,8 @@ class JacobiSVD : public SVDBase<JacobiSVD<MatrixType_, Options_> > {
|
||||
}
|
||||
|
||||
private:
|
||||
template <typename Derived>
|
||||
JacobiSVD& compute_impl(const TriangularBase<Derived>& matrix, unsigned int computationOptions);
|
||||
template <typename Derived>
|
||||
JacobiSVD& compute_impl(const MatrixBase<Derived>& matrix, unsigned int computationOptions);
|
||||
|
||||
@@ -676,6 +688,13 @@ class JacobiSVD : public SVDBase<JacobiSVD<MatrixType_, Options_> > {
|
||||
WorkMatrixType m_workMatrix;
|
||||
};
|
||||
|
||||
template <typename MatrixType, int Options>
|
||||
template <typename Derived>
|
||||
JacobiSVD<MatrixType, Options>& JacobiSVD<MatrixType, Options>::compute_impl(const TriangularBase<Derived>& matrix,
|
||||
unsigned int computationOptions) {
|
||||
return compute_impl(matrix.toDenseMatrix(), computationOptions);
|
||||
}
|
||||
|
||||
template <typename MatrixType, int Options>
|
||||
template <typename Derived>
|
||||
JacobiSVD<MatrixType, Options>& JacobiSVD<MatrixType, Options>::compute_impl(const MatrixBase<Derived>& matrix,
|
||||
|
||||
@@ -416,7 +416,8 @@ class SimplicialLLT : public SimplicialCholeskyBase<SimplicialLLT<MatrixType_, U
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
@@ -504,7 +505,8 @@ class SimplicialLDLT : public SimplicialCholeskyBase<SimplicialLDLT<MatrixType_,
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
@@ -585,7 +587,8 @@ class SimplicialNonHermitianLLT
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
@@ -674,7 +677,8 @@ class SimplicialNonHermitianLDLT
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
@@ -757,7 +761,8 @@ class SimplicialCholesky : public SimplicialCholeskyBase<SimplicialCholesky<Matr
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
|
||||
@@ -480,6 +480,7 @@ class CompressedStorageIterator {
|
||||
return *this;
|
||||
}
|
||||
inline reference operator*() const { return reference(m_data.keyPtr() + m_index, m_data.valuePtr() + m_index); }
|
||||
inline reference operator[](int index) { return *(*this + index); }
|
||||
|
||||
#define MAKE_COMP(OP) \
|
||||
inline bool operator OP(const CompressedStorageIterator& other) const { return m_index OP other.m_index; }
|
||||
|
||||
@@ -140,7 +140,7 @@ class SparseVector : public SparseCompressedBase<SparseVector<Scalar_, Options_,
|
||||
return insertBack(inner);
|
||||
}
|
||||
inline Scalar& insertBack(Index i) {
|
||||
m_data.append(0, i);
|
||||
m_data.append(Scalar(0), i);
|
||||
return m_data.value(m_data.size() - 1);
|
||||
}
|
||||
|
||||
@@ -150,7 +150,7 @@ class SparseVector : public SparseCompressedBase<SparseVector<Scalar_, Options_,
|
||||
return insertBackUnordered(inner);
|
||||
}
|
||||
inline Scalar& insertBackUnordered(Index i) {
|
||||
m_data.append(0, i);
|
||||
m_data.append(Scalar(0), i);
|
||||
return m_data.value(m_data.size() - 1);
|
||||
}
|
||||
|
||||
@@ -177,7 +177,7 @@ class SparseVector : public SparseCompressedBase<SparseVector<Scalar_, Options_,
|
||||
--p;
|
||||
}
|
||||
m_data.index(p + 1) = convert_index(i);
|
||||
m_data.value(p + 1) = 0;
|
||||
m_data.value(p + 1) = Scalar(0);
|
||||
return m_data.value(p + 1);
|
||||
}
|
||||
|
||||
@@ -367,7 +367,7 @@ class SparseVector : public SparseCompressedBase<SparseVector<Scalar_, Options_,
|
||||
|
||||
/** \internal \deprecated use insertBack(Index) */
|
||||
EIGEN_DEPRECATED_WITH_REASON("Use .insertBack() instead.") Scalar& fill(Index i) {
|
||||
m_data.append(0, i);
|
||||
m_data.append(Scalar(0), i);
|
||||
return m_data.value(m_data.size() - 1);
|
||||
}
|
||||
|
||||
|
||||
@@ -487,7 +487,8 @@ class SuperLU : public SuperLUBase<MatrixType_, SuperLU<MatrixType_> > {
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
@@ -791,7 +792,8 @@ class SuperILU : public SuperLUBase<MatrixType_, SuperILU<MatrixType_> > {
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the symbolic decomposition has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the symbolic decomposition has been
|
||||
* performed.
|
||||
*
|
||||
* \sa analyzePattern()
|
||||
*/
|
||||
|
||||
@@ -425,7 +425,7 @@ class UmfPackLU : public SparseSolverBase<UmfPackLU<MatrixType_> > {
|
||||
|
||||
/** Performs a numeric decomposition of \a matrix
|
||||
*
|
||||
* The given matrix must has the same sparsity than the matrix on which the pattern anylysis has been performed.
|
||||
* The given matrix must have the same sparsity than the matrix on which the pattern anylysis has been performed.
|
||||
*
|
||||
* \sa analyzePattern(), compute()
|
||||
*/
|
||||
|
||||
@@ -19,7 +19,9 @@ add_library(eigen_blas_static STATIC ${EigenBlas_SRCS})
|
||||
list(APPEND EIGEN_BLAS_TARGETS eigen_blas_static)
|
||||
|
||||
if (EIGEN_BUILD_SHARED_LIBS)
|
||||
add_library(eigen_blas SHARED ${EigenBlas_SRCS})
|
||||
add_library(eigen_blas SHARED ${EigenBlas_SRCS} "eigen_blas.def")
|
||||
target_compile_definitions(eigen_blas PUBLIC "EIGEN_BLAS_BUILD_DLL")
|
||||
set_target_properties(eigen_blas PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
||||
list(APPEND EIGEN_BLAS_TARGETS eigen_blas)
|
||||
endif()
|
||||
|
||||
|
||||
855
blas/blas.h
855
blas/blas.h
@@ -1,6 +1,20 @@
|
||||
#ifndef BLAS_H
|
||||
#define BLAS_H
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(EIGEN_BLAS_BUILD_DLL)
|
||||
#define EIGEN_BLAS_API __declspec(dllexport)
|
||||
#elif defined(EIGEN_BLAS_LINK_DLL)
|
||||
#define EIGEN_BLAS_API __declspec(dllimport)
|
||||
#else
|
||||
#define EIGEN_BLAS_API
|
||||
#endif
|
||||
#elif ((defined(__GNUC__) && __GNUC__ >= 4) || defined(__clang__)) && defined(EIGEN_BLAS_BUILD_DLL)
|
||||
#define EIGEN_BLAS_API __attribute__((visibility("default")))
|
||||
#else
|
||||
#define EIGEN_BLAS_API
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
@@ -15,467 +29,514 @@ typedef long BLASLONG;
|
||||
typedef unsigned long BLASULONG;
|
||||
#endif
|
||||
|
||||
void BLASFUNC(xerbla)(const char *, int *info);
|
||||
EIGEN_BLAS_API int BLASFUNC(lsame)(const char *, const char *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xerbla)(const char *, int *info);
|
||||
|
||||
float BLASFUNC(sdot)(int *, float *, int *, float *, int *);
|
||||
float BLASFUNC(sdsdot)(int *, float *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(sdot)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(sdsdot)(int *, float *, float *, int *, float *, int *);
|
||||
|
||||
double BLASFUNC(dsdot)(int *, float *, int *, float *, int *);
|
||||
double BLASFUNC(ddot)(int *, double *, int *, double *, int *);
|
||||
double BLASFUNC(qdot)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dsdot)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(ddot)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qdot)(int *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(cdotuw)(int *, float *, int *, float *, int *, float *);
|
||||
void BLASFUNC(cdotcw)(int *, float *, int *, float *, int *, float *);
|
||||
void BLASFUNC(zdotuw)(int *, double *, int *, double *, int *, double *);
|
||||
void BLASFUNC(zdotcw)(int *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cdotu)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cdotc)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zdotu)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zdotc)(int *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(saxpy)(const int *, const float *, const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(daxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(qaxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(caxpy)(const int *, const float *, const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(zaxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(xaxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(caxpyc)(const int *, const float *, const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(zaxpyc)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(xaxpyc)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cdotuw)(int *, float *, int *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cdotcw)(int *, float *, int *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zdotuw)(int *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zdotcw)(int *, double *, int *, double *, int *, double *);
|
||||
|
||||
void BLASFUNC(scopy)(int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dcopy)(int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(qcopy)(int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(ccopy)(int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zcopy)(int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xcopy)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(saxpy)(const int *, const float *, const float *, const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(daxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qaxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(caxpy)(const int *, const float *, const float *, const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zaxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xaxpy)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(caxpyc)(const int *, const float *, const float *, const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zaxpyc)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xaxpyc)(const int *, const double *, const double *, const int *, double *, const int *);
|
||||
|
||||
void BLASFUNC(sswap)(int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dswap)(int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(qswap)(int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(cswap)(int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zswap)(int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xswap)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(scopy)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dcopy)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qcopy)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ccopy)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zcopy)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xcopy)(int *, double *, int *, double *, int *);
|
||||
|
||||
float BLASFUNC(sasum)(int *, float *, int *);
|
||||
float BLASFUNC(scasum)(int *, float *, int *);
|
||||
double BLASFUNC(dasum)(int *, double *, int *);
|
||||
double BLASFUNC(qasum)(int *, double *, int *);
|
||||
double BLASFUNC(dzasum)(int *, double *, int *);
|
||||
double BLASFUNC(qxasum)(int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sswap)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dswap)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qswap)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cswap)(int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zswap)(int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xswap)(int *, double *, int *, double *, int *);
|
||||
|
||||
int BLASFUNC(isamax)(int *, float *, int *);
|
||||
int BLASFUNC(idamax)(int *, double *, int *);
|
||||
int BLASFUNC(iqamax)(int *, double *, int *);
|
||||
int BLASFUNC(icamax)(int *, float *, int *);
|
||||
int BLASFUNC(izamax)(int *, double *, int *);
|
||||
int BLASFUNC(ixamax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(sasum)(int *, float *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(scasum)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dasum)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qasum)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dzasum)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qxasum)(int *, double *, int *);
|
||||
|
||||
int BLASFUNC(ismax)(int *, float *, int *);
|
||||
int BLASFUNC(idmax)(int *, double *, int *);
|
||||
int BLASFUNC(iqmax)(int *, double *, int *);
|
||||
int BLASFUNC(icmax)(int *, float *, int *);
|
||||
int BLASFUNC(izmax)(int *, double *, int *);
|
||||
int BLASFUNC(ixmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(isamax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(idamax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(iqamax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(icamax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(izamax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(ixamax)(int *, double *, int *);
|
||||
|
||||
int BLASFUNC(isamin)(int *, float *, int *);
|
||||
int BLASFUNC(idamin)(int *, double *, int *);
|
||||
int BLASFUNC(iqamin)(int *, double *, int *);
|
||||
int BLASFUNC(icamin)(int *, float *, int *);
|
||||
int BLASFUNC(izamin)(int *, double *, int *);
|
||||
int BLASFUNC(ixamin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(ismax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(idmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(iqmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(icmax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(izmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(ixmax)(int *, double *, int *);
|
||||
|
||||
int BLASFUNC(ismin)(int *, float *, int *);
|
||||
int BLASFUNC(idmin)(int *, double *, int *);
|
||||
int BLASFUNC(iqmin)(int *, double *, int *);
|
||||
int BLASFUNC(icmin)(int *, float *, int *);
|
||||
int BLASFUNC(izmin)(int *, double *, int *);
|
||||
int BLASFUNC(ixmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(isamin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(idamin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(iqamin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(icamin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(izamin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(ixamin)(int *, double *, int *);
|
||||
|
||||
float BLASFUNC(samax)(int *, float *, int *);
|
||||
double BLASFUNC(damax)(int *, double *, int *);
|
||||
double BLASFUNC(qamax)(int *, double *, int *);
|
||||
float BLASFUNC(scamax)(int *, float *, int *);
|
||||
double BLASFUNC(dzamax)(int *, double *, int *);
|
||||
double BLASFUNC(qxamax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(ismin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(idmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(iqmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(icmin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(izmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API int BLASFUNC(ixmin)(int *, double *, int *);
|
||||
|
||||
float BLASFUNC(samin)(int *, float *, int *);
|
||||
double BLASFUNC(damin)(int *, double *, int *);
|
||||
double BLASFUNC(qamin)(int *, double *, int *);
|
||||
float BLASFUNC(scamin)(int *, float *, int *);
|
||||
double BLASFUNC(dzamin)(int *, double *, int *);
|
||||
double BLASFUNC(qxamin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(samax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(damax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qamax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(scamax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dzamax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qxamax)(int *, double *, int *);
|
||||
|
||||
float BLASFUNC(smax)(int *, float *, int *);
|
||||
double BLASFUNC(dmax)(int *, double *, int *);
|
||||
double BLASFUNC(qmax)(int *, double *, int *);
|
||||
float BLASFUNC(scmax)(int *, float *, int *);
|
||||
double BLASFUNC(dzmax)(int *, double *, int *);
|
||||
double BLASFUNC(qxmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(samin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(damin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qamin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(scamin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dzamin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qxamin)(int *, double *, int *);
|
||||
|
||||
float BLASFUNC(smin)(int *, float *, int *);
|
||||
double BLASFUNC(dmin)(int *, double *, int *);
|
||||
double BLASFUNC(qmin)(int *, double *, int *);
|
||||
float BLASFUNC(scmin)(int *, float *, int *);
|
||||
double BLASFUNC(dzmin)(int *, double *, int *);
|
||||
double BLASFUNC(qxmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(smax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(scmax)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dzmax)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qxmax)(int *, double *, int *);
|
||||
|
||||
void BLASFUNC(sscal)(int *, float *, float *, int *);
|
||||
void BLASFUNC(dscal)(int *, double *, double *, int *);
|
||||
void BLASFUNC(qscal)(int *, double *, double *, int *);
|
||||
void BLASFUNC(cscal)(int *, float *, float *, int *);
|
||||
void BLASFUNC(zscal)(int *, double *, double *, int *);
|
||||
void BLASFUNC(xscal)(int *, double *, double *, int *);
|
||||
void BLASFUNC(csscal)(int *, float *, float *, int *);
|
||||
void BLASFUNC(zdscal)(int *, double *, double *, int *);
|
||||
void BLASFUNC(xqscal)(int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(smin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(scmin)(int *, float *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dzmin)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qxmin)(int *, double *, int *);
|
||||
|
||||
float BLASFUNC(snrm2)(int *, float *, int *);
|
||||
float BLASFUNC(scnrm2)(int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sscal)(int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dscal)(int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qscal)(int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cscal)(int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zscal)(int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xscal)(int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csscal)(int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zdscal)(int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xqscal)(int *, double *, double *, int *);
|
||||
|
||||
double BLASFUNC(dnrm2)(int *, double *, int *);
|
||||
double BLASFUNC(qnrm2)(int *, double *, int *);
|
||||
double BLASFUNC(dznrm2)(int *, double *, int *);
|
||||
double BLASFUNC(qxnrm2)(int *, double *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(snrm2)(int *, float *, int *);
|
||||
EIGEN_BLAS_API float BLASFUNC(scnrm2)(int *, float *, int *);
|
||||
|
||||
void BLASFUNC(srot)(int *, float *, int *, float *, int *, float *, float *);
|
||||
void BLASFUNC(drot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
void BLASFUNC(qrot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
void BLASFUNC(csrot)(int *, float *, int *, float *, int *, float *, float *);
|
||||
void BLASFUNC(zdrot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
void BLASFUNC(xqrot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dnrm2)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qnrm2)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(dznrm2)(int *, double *, int *);
|
||||
EIGEN_BLAS_API double BLASFUNC(qxnrm2)(int *, double *, int *);
|
||||
|
||||
void BLASFUNC(srotg)(float *, float *, float *, float *);
|
||||
void BLASFUNC(drotg)(double *, double *, double *, double *);
|
||||
void BLASFUNC(qrotg)(double *, double *, double *, double *);
|
||||
void BLASFUNC(crotg)(float *, float *, float *, float *);
|
||||
void BLASFUNC(zrotg)(double *, double *, double *, double *);
|
||||
void BLASFUNC(xrotg)(double *, double *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(srot)(int *, float *, int *, float *, int *, float *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(drot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qrot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csrot)(int *, float *, int *, float *, int *, float *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zdrot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xqrot)(int *, double *, int *, double *, int *, double *, double *);
|
||||
|
||||
void BLASFUNC(srotmg)(float *, float *, float *, float *, float *);
|
||||
void BLASFUNC(drotmg)(double *, double *, double *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(srotg)(float *, float *, float *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(drotg)(double *, double *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qrotg)(double *, double *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(crotg)(float *, float *, float *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zrotg)(double *, double *, double *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xrotg)(double *, double *, double *, double *);
|
||||
|
||||
void BLASFUNC(srotm)(int *, float *, int *, float *, int *, float *);
|
||||
void BLASFUNC(drotm)(int *, double *, int *, double *, int *, double *);
|
||||
void BLASFUNC(qrotm)(int *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(srotmg)(float *, float *, float *, float *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(drotmg)(double *, double *, double *, double *, double *);
|
||||
|
||||
EIGEN_BLAS_API void BLASFUNC(srotm)(int *, float *, int *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(drotm)(int *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qrotm)(int *, double *, int *, double *, int *, double *);
|
||||
|
||||
/* Level 2 routines */
|
||||
|
||||
void BLASFUNC(sger)(int *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dger)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(qger)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(cgeru)(int *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(cgerc)(int *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zgeru)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(zgerc)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xgeru)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xgerc)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sger)(int *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dger)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qger)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cgeru)(int *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cgerc)(int *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zgeru)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zgerc)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xgeru)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xgerc)(int *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(sgemv)(const char *, const int *, const int *, const float *, const float *, const int *, const float *,
|
||||
const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(dgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(qgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(cgemv)(const char *, const int *, const int *, const float *, const float *, const int *, const float *,
|
||||
const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sgemv)(const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cgemv)(const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xgemv)(const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
|
||||
void BLASFUNC(strsv)(const char *, const char *, const char *, const int *, const float *, const int *, float *,
|
||||
const int *);
|
||||
void BLASFUNC(dtrsv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
void BLASFUNC(qtrsv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
void BLASFUNC(ctrsv)(const char *, const char *, const char *, const int *, const float *, const int *, float *,
|
||||
const int *);
|
||||
void BLASFUNC(ztrsv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
void BLASFUNC(xtrsv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(strsv)(const char *, const char *, const char *, const int *, const float *, const int *,
|
||||
float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtrsv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtrsv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctrsv)(const char *, const char *, const char *, const int *, const float *, const int *,
|
||||
float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztrsv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtrsv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
|
||||
void BLASFUNC(stpsv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
void BLASFUNC(dtpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
void BLASFUNC(qtpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
void BLASFUNC(ctpsv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
void BLASFUNC(ztpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
void BLASFUNC(xtpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(stpsv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctpsv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtpsv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
|
||||
void BLASFUNC(strmv)(const char *, const char *, const char *, const int *, const float *, const int *, float *,
|
||||
const int *);
|
||||
void BLASFUNC(dtrmv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
void BLASFUNC(qtrmv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
void BLASFUNC(ctrmv)(const char *, const char *, const char *, const int *, const float *, const int *, float *,
|
||||
const int *);
|
||||
void BLASFUNC(ztrmv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
void BLASFUNC(xtrmv)(const char *, const char *, const char *, const int *, const double *, const int *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(strmv)(const char *, const char *, const char *, const int *, const float *, const int *,
|
||||
float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtrmv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtrmv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctrmv)(const char *, const char *, const char *, const int *, const float *, const int *,
|
||||
float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztrmv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtrmv)(const char *, const char *, const char *, const int *, const double *, const int *,
|
||||
double *, const int *);
|
||||
|
||||
void BLASFUNC(stpmv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
void BLASFUNC(dtpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
void BLASFUNC(qtpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
void BLASFUNC(ctpmv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
void BLASFUNC(ztpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
void BLASFUNC(xtpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(stpmv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctpmv)(char *, char *, char *, int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtpmv)(char *, char *, char *, int *, double *, double *, int *);
|
||||
|
||||
void BLASFUNC(stbmv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dtbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(qtbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(ctbmv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(ztbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xtbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(stbmv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctbmv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtbmv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(stbsv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dtbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(qtbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(ctbsv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(ztbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xtbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(stbsv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctbsv)(char *, char *, char *, int *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtbsv)(char *, char *, char *, int *, int *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(ssymv)(const char *, const int *, const float *, const float *, const int *, const float *, const int *,
|
||||
const float *, float *, const int *);
|
||||
void BLASFUNC(dsymv)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(qsymv)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ssymv)(const char *, const int *, const float *, const float *, const int *, const float *,
|
||||
const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dsymv)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qsymv)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
|
||||
void BLASFUNC(sspmv)(char *, int *, float *, float *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(dspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
void BLASFUNC(qspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sspmv)(char *, int *, float *, float *, float *, int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
|
||||
void BLASFUNC(ssyr)(const char *, const int *, const float *, const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(dsyr)(const char *, const int *, const double *, const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(qsyr)(const char *, const int *, const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ssyr)(const char *, const int *, const float *, const float *, const int *, float *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dsyr)(const char *, const int *, const double *, const double *, const int *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qsyr)(const char *, const int *, const double *, const double *, const int *, double *,
|
||||
const int *);
|
||||
|
||||
void BLASFUNC(ssyr2)(const char *, const int *, const float *, const float *, const int *, const float *, const int *,
|
||||
float *, const int *);
|
||||
void BLASFUNC(dsyr2)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, double *, const int *);
|
||||
void BLASFUNC(qsyr2)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, double *, const int *);
|
||||
void BLASFUNC(csyr2)(const char *, const int *, const float *, const float *, const int *, const float *, const int *,
|
||||
float *, const int *);
|
||||
void BLASFUNC(zsyr2)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, double *, const int *);
|
||||
void BLASFUNC(xsyr2)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ssyr2)(const char *, const int *, const float *, const float *, const int *, const float *,
|
||||
const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dsyr2)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qsyr2)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csyr2)(const char *, const int *, const float *, const float *, const int *, const float *,
|
||||
const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zsyr2)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xsyr2)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, double *, const int *);
|
||||
|
||||
void BLASFUNC(sspr)(char *, int *, float *, float *, int *, float *);
|
||||
void BLASFUNC(dspr)(char *, int *, double *, double *, int *, double *);
|
||||
void BLASFUNC(qspr)(char *, int *, double *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sspr)(char *, int *, float *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dspr)(char *, int *, double *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qspr)(char *, int *, double *, double *, int *, double *);
|
||||
|
||||
void BLASFUNC(sspr2)(char *, int *, float *, float *, int *, float *, int *, float *);
|
||||
void BLASFUNC(dspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
void BLASFUNC(qspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
void BLASFUNC(cspr2)(char *, int *, float *, float *, int *, float *, int *, float *);
|
||||
void BLASFUNC(zspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
void BLASFUNC(xspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sspr2)(char *, int *, float *, float *, int *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cspr2)(char *, int *, float *, float *, int *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xspr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
|
||||
void BLASFUNC(cher)(char *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zher)(char *, int *, double *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xher)(char *, int *, double *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cher)(char *, int *, float *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zher)(char *, int *, double *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xher)(char *, int *, double *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(chpr)(char *, int *, float *, float *, int *, float *);
|
||||
void BLASFUNC(zhpr)(char *, int *, double *, double *, int *, double *);
|
||||
void BLASFUNC(xhpr)(char *, int *, double *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(chpr)(char *, int *, float *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zhpr)(char *, int *, double *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xhpr)(char *, int *, double *, double *, int *, double *);
|
||||
|
||||
void BLASFUNC(cher2)(char *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zher2)(char *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xher2)(char *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cher2)(char *, int *, float *, float *, int *, float *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zher2)(char *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xher2)(char *, int *, double *, double *, int *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(chpr2)(char *, int *, float *, float *, int *, float *, int *, float *);
|
||||
void BLASFUNC(zhpr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
void BLASFUNC(xhpr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(chpr2)(char *, int *, float *, float *, int *, float *, int *, float *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zhpr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xhpr2)(char *, int *, double *, double *, int *, double *, int *, double *);
|
||||
|
||||
void BLASFUNC(chemv)(const char *, const int *, const float *, const float *, const int *, const float *, const int *,
|
||||
const float *, float *, const int *);
|
||||
void BLASFUNC(zhemv)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xhemv)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(chemv)(const char *, const int *, const float *, const float *, const int *, const float *,
|
||||
const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zhemv)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xhemv)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
|
||||
void BLASFUNC(chpmv)(char *, int *, float *, float *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(zhpmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
void BLASFUNC(xhpmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(chpmv)(char *, int *, float *, float *, float *, int *, float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zhpmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xhpmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
|
||||
void BLASFUNC(snorm)(char *, int *, int *, float *, int *);
|
||||
void BLASFUNC(dnorm)(char *, int *, int *, double *, int *);
|
||||
void BLASFUNC(cnorm)(char *, int *, int *, float *, int *);
|
||||
void BLASFUNC(znorm)(char *, int *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(snorm)(char *, int *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dnorm)(char *, int *, int *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cnorm)(char *, int *, int *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(znorm)(char *, int *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(sgbmv)(char *, int *, int *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
void BLASFUNC(dgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
void BLASFUNC(qgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
void BLASFUNC(cgbmv)(char *, int *, int *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
void BLASFUNC(zgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
void BLASFUNC(xgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sgbmv)(char *, int *, int *, int *, int *, float *, float *, int *, float *, int *,
|
||||
float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cgbmv)(char *, int *, int *, int *, int *, float *, float *, int *, float *, int *,
|
||||
float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xgbmv)(char *, int *, int *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
|
||||
void BLASFUNC(ssbmv)(char *, int *, int *, float *, float *, int *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(dsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
||||
void BLASFUNC(qsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
||||
void BLASFUNC(csbmv)(char *, int *, int *, float *, float *, int *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(zsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
||||
void BLASFUNC(xsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ssbmv)(char *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csbmv)(char *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xsbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
|
||||
void BLASFUNC(chbmv)(char *, int *, int *, float *, float *, int *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(zhbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
||||
void BLASFUNC(xhbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(chbmv)(char *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zhbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xhbmv)(char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
|
||||
/* Level 3 routines */
|
||||
|
||||
void BLASFUNC(sgemm)(const char *, const char *, const int *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(dgemm)(const char *, const char *, const int *, const int *, const int *, const double *, const double *,
|
||||
const int *, const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(qgemm)(const char *, const char *, const int *, const int *, const int *, const double *, const double *,
|
||||
const int *, const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(cgemm)(const char *, const char *, const int *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zgemm)(const char *, const char *, const int *, const int *, const int *, const double *, const double *,
|
||||
const int *, const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xgemm)(const char *, const char *, const int *, const int *, const int *, const double *, const double *,
|
||||
const int *, const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sgemm)(const char *, const char *, const int *, const int *, const int *, const float *,
|
||||
const float *, const int *, const float *, const int *, const float *, float *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dgemm)(const char *, const char *, const int *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qgemm)(const char *, const char *, const int *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cgemm)(const char *, const char *, const int *, const int *, const int *, const float *,
|
||||
const float *, const int *, const float *, const int *, const float *, float *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zgemm)(const char *, const char *, const int *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xgemm)(const char *, const char *, const int *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
|
||||
void BLASFUNC(cgemm3m)(char *, char *, int *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
void BLASFUNC(zgemm3m)(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
void BLASFUNC(xgemm3m)(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cgemm3m)(char *, char *, int *, int *, int *, float *, float *, int *, float *, int *,
|
||||
float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zgemm3m)(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xgemm3m)(char *, char *, int *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
|
||||
void BLASFUNC(sge2mm)(char *, char *, char *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
void BLASFUNC(dge2mm)(char *, char *, char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
void BLASFUNC(cge2mm)(char *, char *, char *, int *, int *, float *, float *, int *, float *, int *, float *, float *,
|
||||
int *);
|
||||
void BLASFUNC(zge2mm)(char *, char *, char *, int *, int *, double *, double *, int *, double *, int *, double *,
|
||||
double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sge2mm)(char *, char *, char *, int *, int *, float *, float *, int *, float *, int *,
|
||||
float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dge2mm)(char *, char *, char *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cge2mm)(char *, char *, char *, int *, int *, float *, float *, int *, float *, int *,
|
||||
float *, float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zge2mm)(char *, char *, char *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
|
||||
void BLASFUNC(strsm)(const char *, const char *, const char *, const char *, const int *, const int *, const float *,
|
||||
const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(dtrsm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(qtrsm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(ctrsm)(const char *, const char *, const char *, const char *, const int *, const int *, const float *,
|
||||
const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(ztrsm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(xtrsm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(strsm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const float *, const float *, const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtrsm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtrsm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctrsm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const float *, const float *, const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztrsm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtrsm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
|
||||
void BLASFUNC(strmm)(const char *, const char *, const char *, const char *, const int *, const int *, const float *,
|
||||
const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(dtrmm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(qtrmm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(ctrmm)(const char *, const char *, const char *, const char *, const int *, const int *, const float *,
|
||||
const float *, const int *, float *, const int *);
|
||||
void BLASFUNC(ztrmm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
void BLASFUNC(xtrmm)(const char *, const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(strmm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const float *, const float *, const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dtrmm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qtrmm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ctrmm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const float *, const float *, const int *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ztrmm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xtrmm)(const char *, const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, double *, const int *);
|
||||
|
||||
void BLASFUNC(ssymm)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(dsymm)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(qsymm)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(csymm)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zsymm)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xsymm)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ssymm)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dsymm)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qsymm)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csymm)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zsymm)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xsymm)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
|
||||
void BLASFUNC(csymm3m)(char *, char *, int *, int *, float *, float *, int *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(zsymm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
void BLASFUNC(xsymm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csymm3m)(char *, char *, int *, int *, float *, float *, int *, float *, int *, float *,
|
||||
float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zsymm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xsymm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
|
||||
void BLASFUNC(ssyrk)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, float *, const int *);
|
||||
void BLASFUNC(dsyrk)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
void BLASFUNC(qsyrk)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
void BLASFUNC(csyrk)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, float *, const int *);
|
||||
void BLASFUNC(zsyrk)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
void BLASFUNC(xsyrk)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ssyrk)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dsyrk)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qsyrk)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csyrk)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zsyrk)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xsyrk)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
|
||||
void BLASFUNC(ssyr2k)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(dsyr2k)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(qsyr2k)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(csyr2k)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zsyr2k)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xsyr2k)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(ssyr2k)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dsyr2k)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qsyr2k)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(csyr2k)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zsyr2k)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xsyr2k)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
|
||||
void BLASFUNC(chemm)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zhemm)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xhemm)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(chemm)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zhemm)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xhemm)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
|
||||
void BLASFUNC(chemm3m)(char *, char *, int *, int *, float *, float *, int *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(zhemm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
void BLASFUNC(xhemm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *, double *, double *,
|
||||
int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(chemm3m)(char *, char *, int *, int *, float *, float *, int *, float *, int *, float *,
|
||||
float *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zhemm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xhemm3m)(char *, char *, int *, int *, double *, double *, int *, double *, int *,
|
||||
double *, double *, int *);
|
||||
|
||||
void BLASFUNC(cherk)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, float *, const int *);
|
||||
void BLASFUNC(zherk)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
void BLASFUNC(xherk)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cherk)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zherk)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xherk)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
|
||||
void BLASFUNC(cher2k)(const char *, const char *, const int *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zher2k)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xher2k)(const char *, const char *, const int *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(cher2m)(const char *, const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zher2m)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xher2m)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cher2k)(const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zher2k)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xher2k)(const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cher2m)(const char *, const char *, const char *, const int *, const int *, const float *,
|
||||
const float *, const int *, const float *, const int *, const float *, float *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zher2m)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xher2m)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *,
|
||||
const int *);
|
||||
|
||||
void BLASFUNC(sgemmtr)(const char *, const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(dgemmtr)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(qgemmtr)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(cgemmtr)(const char *, const char *, const char *, const int *, const int *, const float *, const float *,
|
||||
const int *, const float *, const int *, const float *, float *, const int *);
|
||||
void BLASFUNC(zgemmtr)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xgemmtr)(const char *, const char *, const char *, const int *, const int *, const double *,
|
||||
const double *, const int *, const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(sgemmtr)(const char *, const char *, const char *, const int *, const int *, const float *,
|
||||
const float *, const int *, const float *, const int *, const float *, float *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(dgemmtr)(const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(qgemmtr)(const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(cgemmtr)(const char *, const char *, const char *, const int *, const int *, const float *,
|
||||
const float *, const int *, const float *, const int *, const float *, float *,
|
||||
const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(zgemmtr)(const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
EIGEN_BLAS_API void BLASFUNC(xgemmtr)(const char *, const char *, const char *, const int *, const int *,
|
||||
const double *, const double *, const int *, const double *, const int *,
|
||||
const double *, double *, const int *);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
222
blas/eigen_blas.def
Normal file
222
blas/eigen_blas.def
Normal file
@@ -0,0 +1,222 @@
|
||||
; Definition file for eigen_blas.dll.
|
||||
|
||||
LIBRARY eigen_blas
|
||||
EXPORTS
|
||||
; Utilities
|
||||
lsame_
|
||||
xerbla_
|
||||
|
||||
; Level 1
|
||||
saxpy_
|
||||
daxpy_
|
||||
caxpy_
|
||||
zaxpy_
|
||||
; caxpyc_
|
||||
; zaxpyc_
|
||||
scopy_
|
||||
dcopy_
|
||||
ccopy_
|
||||
zcopy_
|
||||
sdot_
|
||||
sdsdot_
|
||||
dsdot_
|
||||
ddot_
|
||||
cdotc_
|
||||
zdotc_
|
||||
cdotu_
|
||||
zdotu_
|
||||
cdotcw_
|
||||
zdotcw_
|
||||
cdotuw_
|
||||
zdotuw_
|
||||
snrm2_
|
||||
dnrm2_
|
||||
scnrm2_
|
||||
dznrm2_
|
||||
srot_
|
||||
drot_
|
||||
csrot_
|
||||
zdrot_
|
||||
srotg_
|
||||
drotg_
|
||||
crotg_
|
||||
zrotg_
|
||||
srotm_
|
||||
drotm_
|
||||
srotmg_
|
||||
drotmg_
|
||||
sscal_
|
||||
dscal_
|
||||
cscal_
|
||||
zscal_
|
||||
csscal_
|
||||
zdscal_
|
||||
sswap_
|
||||
dswap_
|
||||
cswap_
|
||||
zswap_
|
||||
sasum_
|
||||
scasum_
|
||||
dasum_
|
||||
dzasum_
|
||||
; ismax_
|
||||
; idmax_
|
||||
; icmax_
|
||||
; izmax_
|
||||
isamax_
|
||||
idamax_
|
||||
icamax_
|
||||
izamax_
|
||||
isamin_
|
||||
idamin_
|
||||
icamin_
|
||||
izamin_
|
||||
; ismin_
|
||||
; idmin_
|
||||
; icmin_
|
||||
; izmin_
|
||||
; samax_
|
||||
; damax_
|
||||
; scamax_
|
||||
; dzamax_
|
||||
; samin_
|
||||
; damin_
|
||||
; scamin_
|
||||
; dzamin_
|
||||
; smax_
|
||||
; dmax_
|
||||
; cmax_
|
||||
; zmax_
|
||||
; smin_
|
||||
; dmin_
|
||||
; cmin_
|
||||
; zmin_
|
||||
|
||||
|
||||
; Level 2
|
||||
sgemv_
|
||||
dgemv_
|
||||
cgemv_
|
||||
zgemv_
|
||||
sger_
|
||||
dger_
|
||||
cgerc_
|
||||
zgerc_
|
||||
cgeru_
|
||||
zgeru_
|
||||
ssymv_
|
||||
dsymv_
|
||||
ssyr_
|
||||
dsyr_
|
||||
ssyr2_
|
||||
dsyr2_
|
||||
; csyr2_
|
||||
; zsyr2_
|
||||
strmv_
|
||||
dtrmv_
|
||||
ctrmv_
|
||||
ztrmv_
|
||||
strsv_
|
||||
dtrsv_
|
||||
ctrsv_
|
||||
ztrsv_
|
||||
stpsv_
|
||||
dtpsv_
|
||||
ctpsv_
|
||||
ztpsv_
|
||||
stpmv_
|
||||
dtpmv_
|
||||
ctpmv_
|
||||
ztpmv_
|
||||
stbmv_
|
||||
dtbmv_
|
||||
ctbmv_
|
||||
ztbmv_
|
||||
stbsv_
|
||||
dtbsv_
|
||||
ctbsv_
|
||||
ztbsv_
|
||||
sspmv_
|
||||
dspmv_
|
||||
sspr_
|
||||
dspr_
|
||||
; cspr_
|
||||
; zspr_
|
||||
sspr2_
|
||||
dspr2_
|
||||
; cspr2_
|
||||
; zspr2_
|
||||
cher_
|
||||
zher_
|
||||
chpr_
|
||||
zhpr_
|
||||
cher2_
|
||||
zher2_
|
||||
chpr2_
|
||||
zhpr2_
|
||||
chemv_
|
||||
zhemv_
|
||||
chpmv_
|
||||
zhpmv_
|
||||
; snorm_
|
||||
; dnorm_
|
||||
; cnorm_
|
||||
; znorm_
|
||||
sgbmv_
|
||||
dgbmv_
|
||||
cgbmv_
|
||||
zgbmv_
|
||||
ssbmv_
|
||||
dsbmv_
|
||||
; csbmv_
|
||||
; zsbmv_
|
||||
chbmv_
|
||||
zhbmv_
|
||||
|
||||
; Level 3 BLAS
|
||||
sgemm_
|
||||
dgemm_
|
||||
cgemm_
|
||||
zgemm_
|
||||
; cgemm3m_
|
||||
; zgemm3m_
|
||||
; sge2mm_
|
||||
; dge2mm_
|
||||
; cge2mm_
|
||||
; zge2mm_
|
||||
ssymm_
|
||||
dsymm_
|
||||
csymm_
|
||||
zsymm_
|
||||
; csymm3m_
|
||||
; zsymm3m_
|
||||
ssyrk_
|
||||
dsyrk_
|
||||
csyrk_
|
||||
zsyrk_
|
||||
ssyr2k_
|
||||
dsyr2k_
|
||||
csyr2k_
|
||||
zsyr2k_
|
||||
strmm_
|
||||
dtrmm_
|
||||
ctrmm_
|
||||
ztrmm_
|
||||
strsm_
|
||||
dtrsm_
|
||||
ctrsm_
|
||||
ztrsm_
|
||||
chemm_
|
||||
zhemm_
|
||||
; chemm3m_
|
||||
; zhemm3m_
|
||||
cherk_
|
||||
zherk_
|
||||
cher2k_
|
||||
zher2k_
|
||||
; cher2m_
|
||||
; zher2m_
|
||||
sgemmtr_
|
||||
dgemmtr_
|
||||
cgemmtr_
|
||||
zgemmtr_
|
||||
@@ -1,6 +1,8 @@
|
||||
|
||||
#include <stdio.h>
|
||||
|
||||
#include "blas.h"
|
||||
|
||||
#if (defined __GNUC__) && (!defined __MINGW32__) && (!defined __CYGWIN__)
|
||||
#define EIGEN_WEAK_LINKING __attribute__((weak))
|
||||
#else
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# Base configuration for linux cross-compilation.
|
||||
.build:linux:cross:
|
||||
needs: []
|
||||
extends: .common:linux:cross
|
||||
stage: build
|
||||
variables:
|
||||
@@ -11,6 +12,7 @@
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/"
|
||||
cache:
|
||||
key: "$CI_JOB_NAME_SLUG-$CI_COMMIT_REF_SLUG-BUILD"
|
||||
@@ -108,7 +110,7 @@ build:linux:docs:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/"
|
||||
|
||||
|
||||
@@ -147,57 +149,6 @@ build:linux:docs:
|
||||
# Build on regular linux to limit GPU cost.
|
||||
- saas-linux-2xlarge-amd64
|
||||
|
||||
# NVidia no longer provides docker images < CUDA 11.0.3.
|
||||
# # GCC-7, CUDA-9.2
|
||||
# build:linux:cuda-9.2:gcc-7:
|
||||
# extends: .build:linux:cuda
|
||||
# image: nvidia/cuda:9.2-devel-ubuntu18.04
|
||||
# variables:
|
||||
# # cuda 9.2 doesn't support sm_75, so lower to 70.
|
||||
# EIGEN_CI_CUDA_COMPUTE_ARCH: "50;70"
|
||||
# EIGEN_CI_C_COMPILER: gcc-7
|
||||
# EIGEN_CI_CXX_COMPILER: g++-7
|
||||
|
||||
# # Clang-10, CUDA-9.2
|
||||
# build:linux:cuda-9.2:clang-10:
|
||||
# extends: build:linux:cuda-9.2:gcc-7
|
||||
# variables:
|
||||
# EIGEN_CI_C_COMPILER: clang-10
|
||||
# EIGEN_CI_CXX_COMPILER: clang++-10
|
||||
# EIGEN_CI_TEST_CUDA_CLANG: "on"
|
||||
|
||||
# # GCC-8, CUDA-10.2
|
||||
# build:linux:cuda-10.2:gcc-8:
|
||||
# extends: .build:linux:cuda
|
||||
# image: nvidia/cuda:10.2-devel-ubuntu18.04
|
||||
# variables:
|
||||
# EIGEN_CI_C_COMPILER: gcc-8
|
||||
# EIGEN_CI_CXX_COMPILER: g++-8
|
||||
|
||||
# # Clang-10, CUDA-10.2
|
||||
# build:linux:cuda-10.2:clang-10:
|
||||
# extends: build:linux:cuda-10.2:gcc-8
|
||||
# variables:
|
||||
# EIGEN_CI_C_COMPILER: clang-10
|
||||
# EIGEN_CI_CXX_COMPILER: clang++-10
|
||||
# EIGEN_CI_TEST_CUDA_CLANG: "on"
|
||||
|
||||
# GCC-10, CUDA-11.4
|
||||
build:linux:cuda-11.4:gcc-10:
|
||||
extends: .build:linux:cuda
|
||||
image: nvidia/cuda:11.4.3-devel-ubuntu20.04
|
||||
variables:
|
||||
EIGEN_CI_C_COMPILER: gcc-10
|
||||
EIGEN_CI_CXX_COMPILER: g++-10
|
||||
|
||||
# Clang-12, CUDA-11.4
|
||||
build:linux:cuda-11.4:clang-12:
|
||||
extends: build:linux:cuda-11.4:gcc-10
|
||||
variables:
|
||||
EIGEN_CI_C_COMPILER: clang-12
|
||||
EIGEN_CI_CXX_COMPILER: clang++-12
|
||||
EIGEN_CI_TEST_CUDA_CLANG: "on"
|
||||
|
||||
# GCC-10, CUDA-12.2
|
||||
build:linux:cuda-12.2:gcc-10:
|
||||
extends: .build:linux:cuda
|
||||
@@ -214,7 +165,7 @@ build:linux:cuda-12.2:clang-12:
|
||||
EIGEN_CI_CXX_COMPILER: clang++-12
|
||||
EIGEN_CI_TEST_CUDA_CLANG: "on"
|
||||
|
||||
# ######## HIP ###################################################################
|
||||
######### HIP ##################################################################
|
||||
# Note: these are currently build-only, until we get an AMD-supported runner.
|
||||
|
||||
# ROCm HIP
|
||||
@@ -226,6 +177,8 @@ build:linux:rocm-latest:gcc-10:
|
||||
EIGEN_CI_CXX_COMPILER: g++-10
|
||||
EIGEN_CI_BUILD_TARGET: buildtests_gpu
|
||||
EIGEN_CI_ADDITIONAL_ARGS: -DEIGEN_TEST_HIP=on
|
||||
cache: [] # Disable cache for ROCm, since it fails whenever the image updates.
|
||||
|
||||
|
||||
######## Arm ###################################################################
|
||||
|
||||
@@ -338,7 +291,7 @@ build:linux:cross:x86-64:gcc-10:default:smoketest:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
tags:
|
||||
- saas-linux-small-amd64
|
||||
- saas-linux-medium-amd64
|
||||
|
||||
build:linux:cross:x86-64:clang-12:default:smoketest:
|
||||
extends: build:linux:cross:x86-64:clang-12:default
|
||||
@@ -347,4 +300,4 @@ build:linux:cross:x86-64:clang-12:default:smoketest:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
tags:
|
||||
- saas-linux-small-amd64
|
||||
- saas-linux-medium-amd64
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
# Base configuration for windows builds.
|
||||
.build:windows:
|
||||
needs: []
|
||||
extends: .common:windows
|
||||
stage: build
|
||||
variables:
|
||||
@@ -16,6 +17,7 @@
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/"
|
||||
|
||||
cache:
|
||||
@@ -25,31 +27,31 @@
|
||||
|
||||
######### MSVC #################################################################
|
||||
|
||||
# MSVC 14.16 (VS 2017)
|
||||
build:windows:x86-64:msvc-14.16:default:
|
||||
# MSVC 14.29 (VS 2019) 32 bit
|
||||
|
||||
build:windows:x86:msvc-14.29:default:
|
||||
extends: .build:windows
|
||||
variables:
|
||||
EIGEN_CI_MSVC_VER: "14.16"
|
||||
# Override to remove unsupported /d2ReducedOptimizeHugeFunctions.
|
||||
EIGEN_CI_TEST_CUSTOM_CXX_FLAGS: "/DEIGEN_STRONG_INLINE=inline;/Os"
|
||||
EIGEN_CI_MSVC_ARCH: "x64_x86"
|
||||
|
||||
# MSVC 14.29 (VS 2019) 64 bit
|
||||
|
||||
# MSVC 14.29 (VS 2019)
|
||||
build:windows:x86-64:msvc-14.29:default:
|
||||
extends: .build:windows
|
||||
variables:
|
||||
EIGEN_CI_MSVC_VER: "14.29"
|
||||
|
||||
build:windows:x86-64:msvc-14.29:avx2:
|
||||
extends: build:windows:x86-64:msvc-14.29:default
|
||||
extends: .build:windows
|
||||
variables:
|
||||
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX2=on"
|
||||
|
||||
build:windows:x86-64:msvc-14.29:avx512dq:
|
||||
extends: build:windows:x86-64:msvc-14.29:default
|
||||
extends: .build:windows
|
||||
variables:
|
||||
EIGEN_CI_ADDITIONAL_ARGS: "-DEIGEN_TEST_AVX512DQ=on"
|
||||
|
||||
######### MSVC + CUDA ##########################################################
|
||||
|
||||
# MSVC 14.29 (VS 2019) + CUDA
|
||||
|
||||
.build:windows:cuda:
|
||||
extends: .build:windows
|
||||
variables:
|
||||
@@ -65,46 +67,8 @@ build:windows:x86-64:msvc-14.29:avx512dq:
|
||||
- x86-64
|
||||
- cuda
|
||||
|
||||
# The CUDA 9.2 compiler crashes with an internal error.
|
||||
# # MSVC 14.16 + CUDA 9.2
|
||||
# build:windows:x86-64:cuda-9.2:msvc-14.16:
|
||||
# extends: .build:windows:cuda
|
||||
# variables:
|
||||
# # CUDA 9.2 doesn't support sm_75.
|
||||
# EIGEN_CI_CUDA_COMPUTE_ARCH: "50;70"
|
||||
# # CUDA 9.2 only supports up to VS 2017.
|
||||
# EIGEN_CI_MSVC_VER: "14.16"
|
||||
# EIGEN_CI_TEST_CUSTOM_CXX_FLAGS: "/DEIGEN_STRONG_INLINE=inline;/Os"
|
||||
# EIGEN_CI_BEFORE_SCRIPT: $$env:CUDA_PATH=$$env:CUDA_PATH_V9_2
|
||||
|
||||
# MSVC 14.29 + CUDA 10.2
|
||||
build:windows:x86-64:cuda-10.2:msvc-14.29:
|
||||
extends: .build:windows:cuda
|
||||
variables:
|
||||
EIGEN_CI_MSVC_VER: "14.29"
|
||||
EIGEN_CI_BEFORE_SCRIPT: $$env:CUDA_PATH=$$env:CUDA_PATH_V10_2
|
||||
|
||||
# MSVC 14.29 + CUDA 11.4
|
||||
build:windows:x86-64:cuda-11.4:msvc-14.29:
|
||||
extends: .build:windows:cuda
|
||||
variables:
|
||||
EIGEN_CI_MSVC_VER: "14.29"
|
||||
EIGEN_CI_BEFORE_SCRIPT: $$env:CUDA_PATH=$$env:CUDA_PATH_V11_4
|
||||
|
||||
######## MR Smoke Tests ########################################################
|
||||
|
||||
# MSVC 14.29 64-bit (VS 2019)
|
||||
build:windows:x86-64:msvc-14.29:avx512dq:smoketest:
|
||||
extends: build:windows:x86-64:msvc-14.29:avx512dq
|
||||
variables:
|
||||
EIGEN_CI_BUILD_TARGET: buildsmoketests
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
|
||||
# MSVC 14.29 32-bit (VS 2019)
|
||||
build:windows:x86:msvc-14.29:avx512dq:smoketest:
|
||||
extends: build:windows:x86-64:msvc-14.29:avx512dq:smoketest
|
||||
variables:
|
||||
EIGEN_CI_MSVC_ARCH: "x86"
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
EIGEN_CI_BEFORE_SCRIPT: $$env:CUDA_PATH=$$env:CUDA_PATH_V11_4
|
||||
@@ -36,6 +36,6 @@ deploy:docs:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
variables:
|
||||
PAGES_PREFIX: docs-$CI_COMMIT_REF_NAME
|
||||
|
||||
@@ -13,19 +13,29 @@ elif [[ ${EIGEN_CI_CTEST_LABEL} ]]; then
|
||||
target="-L ${EIGEN_CI_CTEST_LABEL}"
|
||||
fi
|
||||
|
||||
# Repeat tests up to three times to ignore flakes. Do not re-run with -T test,
|
||||
# otherwise we lose test results for those that passed.
|
||||
# Note: starting with CMake 3.17, we can use --repeat until-pass:3, but we have
|
||||
# no way of easily installing this on ppc64le.
|
||||
ctest ${EIGEN_CI_CTEST_ARGS} --parallel ${NPROC} \
|
||||
--output-on-failure --no-compress-output \
|
||||
--build-no-clean -T test ${target} || \
|
||||
ctest ${EIGEN_CI_CTEST_ARGS} --parallel ${NPROC} \
|
||||
--output-on-failure --no-compress-output --rerun-failed || \
|
||||
ctest ${EIGEN_CI_CTEST_ARGS} --parallel ${NPROC} \
|
||||
--output-on-failure --no-compress-output --rerun-failed
|
||||
set +x
|
||||
|
||||
ctest_cmd="ctest ${EIGEN_CI_CTEST_ARGS} --parallel ${NPROC} --output-on-failure --no-compress-output --build-noclean ${target}"
|
||||
|
||||
echo "Running initial tests..."
|
||||
if ${ctest_cmd} -T test; then
|
||||
echo "Tests passed on the first attempt."
|
||||
exit_code=$?
|
||||
else
|
||||
echo "Initial tests failed with exit code $?. Retrying up to ${EIGEN_CI_CTEST_REPEAT} times..."
|
||||
if ${ctest_cmd} --rerun-failed --repeat until-pass:${EIGEN_CI_CTEST_REPEAT}; then
|
||||
echo "Tests passed on retry."
|
||||
exit_code=42
|
||||
else
|
||||
exit_code=$?
|
||||
fi
|
||||
fi
|
||||
|
||||
set -x
|
||||
|
||||
# Return to root directory.
|
||||
cd ${rootdir}
|
||||
|
||||
set +x
|
||||
|
||||
exit $exit_code
|
||||
|
||||
@@ -13,18 +13,32 @@ if (${EIGEN_CI_CTEST_REGEX}) {
|
||||
$target = "-L","${EIGEN_CI_CTEST_LABEL}"
|
||||
}
|
||||
|
||||
# Repeat tests up to three times to ignore flakes. Do not re-run with -T test,
|
||||
# otherwise we lose test results for those that passed.
|
||||
# Note: starting with CMake 3.17, we can use --repeat until-pass:3, but we have
|
||||
# no way of easily installing this on ppc64le.
|
||||
ctest $EIGEN_CI_CTEST_ARGS -j$NPROC --output-on-failure --no-compress-output --build-no-clean -T test $target || `
|
||||
ctest $EIGEN_CI_CTEST_ARGS -j$NPROC --output-on-failure --no-compress-output --rerun-failed || `
|
||||
ctest $EIGEN_CI_CTEST_ARGS -j$NPROC --output-on-failure --no-compress-output --rerun-failed
|
||||
$ctest_cmd = { ctest ${EIGEN_CI_CTEST_ARGS} --parallel ${NPROC} --output-on-failure --no-compress-output --build-noclean ${target} }
|
||||
|
||||
$success = $LASTEXITCODE
|
||||
Write-Host "Running initial tests..."
|
||||
|
||||
& $ctest_cmd "-T test"
|
||||
$exit_code = $LASTEXITCODE
|
||||
|
||||
if ($exit_code -eq 0) {
|
||||
Write-Host "Tests passed on the first attempt."
|
||||
}
|
||||
else {
|
||||
Write-Host "Initial tests failed with exit code $exit_code. Retrying up to $EIGEN_CI_CTEST_REPEAT times..."
|
||||
# TODO: figure out how to use --repeat until-pass
|
||||
for ($i = 1; $i -le $EIGEN_CI_CTEST_REPEAT; $i++) {
|
||||
& $ctest_cmd "--rerun-failed"
|
||||
$exit_code = $LASTEXITCODE
|
||||
|
||||
if ($exit_code -eq 0) {
|
||||
Write-Host "Tests passed on retry."
|
||||
$exit_code = 42
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
# Return to root directory.
|
||||
cd ${rootdir}
|
||||
|
||||
# Explicitly propagate exit code to indicate pass/failure of test command.
|
||||
if($success -ne 0) { Exit $success }
|
||||
Exit $exit_code
|
||||
|
||||
@@ -8,9 +8,12 @@
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/"
|
||||
tags:
|
||||
- saas-linux-2xlarge-amd64
|
||||
allow_failure:
|
||||
exit_codes: 42
|
||||
|
||||
##### x86-64 ###################################################################
|
||||
.test:linux:x86-64:
|
||||
@@ -204,61 +207,6 @@ test:linux:x86-64:clang-12:avx512dq:unsupported:
|
||||
tags:
|
||||
- saas-linux-medium-amd64-gpu-standard
|
||||
|
||||
# NVidia no longer provides docker images < CUDA 11.0.3.
|
||||
# # GCC-7, CUDA-9.2
|
||||
# test:linux:cuda-9.2:gcc-7:
|
||||
# extends: .test:linux:cuda
|
||||
# image: nvidia/cuda:9.2-devel-ubuntu18.04
|
||||
# needs: [ build:linux:cuda-9.2:gcc-7 ]
|
||||
# variables:
|
||||
# EIGEN_CI_CXX_COMPILER: g++-7
|
||||
# EIGEN_CI_CC_COMPILER: gcc-7
|
||||
|
||||
# # Clang-10, CUDA-9.2
|
||||
# test:linux:cuda-9.2:clang-10:
|
||||
# extends: .test:linux:cuda
|
||||
# image: nvidia/cuda:9.2-devel-ubuntu18.04
|
||||
# needs: [ build:linux:cuda-9.2:clang-10 ]
|
||||
# variables:
|
||||
# EIGEN_CI_CXX_COMPILER: clang++-10
|
||||
# EIGEN_CI_CC_COMPILER: clang-10
|
||||
|
||||
# # GCC-8, CUDA-10.2
|
||||
# test:linux:cuda-10.2:gcc-8:
|
||||
# extends: .test:linux:cuda
|
||||
# image: nvidia/cuda:10.2-devel-ubuntu18.04
|
||||
# needs: [ build:linux:cuda-10.2:gcc-8 ]
|
||||
# variables:
|
||||
# EIGEN_CI_CXX_COMPILER: g++-8
|
||||
# EIGEN_CI_CC_COMPILER: gcc-8
|
||||
|
||||
# # Clang-10, CUDA-10.2
|
||||
# test:linux:cuda-10.2:clang-10:
|
||||
# extends: .test:linux:cuda
|
||||
# image: nvidia/cuda:10.2-devel-ubuntu18.04
|
||||
# needs: [ build:linux:cuda-10.2:clang-10 ]
|
||||
# variables:
|
||||
# EIGEN_CI_CXX_COMPILER: clang++-10
|
||||
# EIGEN_CI_CC_COMPILER: clang-10
|
||||
|
||||
# GCC-10, CUDA-11.4
|
||||
test:linux:cuda-11.4:gcc-10:
|
||||
extends: .test:linux:cuda
|
||||
image: nvidia/cuda:11.4.3-devel-ubuntu20.04
|
||||
needs: [ build:linux:cuda-11.4:gcc-10 ]
|
||||
variables:
|
||||
EIGEN_CI_CXX_COMPILER: g++-10
|
||||
EIGEN_CI_CC_COMPILER: gcc-10
|
||||
|
||||
# Clang-12, CUDA-11.4
|
||||
test:linux:cuda-11.4:clang-12:
|
||||
extends: .test:linux:cuda
|
||||
image: nvidia/cuda:11.4.3-devel-ubuntu20.04
|
||||
needs: [ build:linux:cuda-11.4:clang-12 ]
|
||||
variables:
|
||||
EIGEN_CI_CXX_COMPILER: clang++-12
|
||||
EIGEN_CI_CC_COMPILER: clang-12
|
||||
|
||||
# GCC-10, CUDA-12.2
|
||||
test:linux:cuda-12.2:gcc-10:
|
||||
extends: .test:linux:cuda
|
||||
@@ -439,7 +387,7 @@ test:linux:x86-64:gcc-10:default:smoketest:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
tags:
|
||||
- saas-linux-small-amd64
|
||||
- saas-linux-medium-amd64
|
||||
|
||||
test:linux:x86-64:clang-12:default:smoketest:
|
||||
extends: .test:linux:x86-64:clang-12:default
|
||||
@@ -449,4 +397,4 @@ test:linux:x86-64:clang-12:default:smoketest:
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
|
||||
tags:
|
||||
- saas-linux-small-amd64
|
||||
- saas-linux-medium-amd64
|
||||
|
||||
@@ -8,60 +8,42 @@
|
||||
rules:
|
||||
- if: $CI_PIPELINE_SOURCE == "schedule" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "web" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "push" && $CI_PROJECT_NAMESPACE == "libeigen"
|
||||
- if: $CI_PIPELINE_SOURCE == "merge_request_event" && $CI_PROJECT_NAMESPACE == "libeigen" && $CI_MERGE_REQUEST_LABELS =~ "/all-tests/"
|
||||
|
||||
tags:
|
||||
- eigen-runner
|
||||
- windows
|
||||
- x86-64
|
||||
allow_failure:
|
||||
exit_codes: 42
|
||||
|
||||
##### MSVC #####################################################################
|
||||
|
||||
# MSVC 14.16 (VS 2017)
|
||||
.test:windows:x86-64:msvc-14.16:default:
|
||||
extends: .test:windows
|
||||
needs: [ build:windows:x86-64:msvc-14.16:default ]
|
||||
|
||||
test:windows:x86-64:msvc-14.16:default:official:
|
||||
extends: .test:windows:x86-64:msvc-14.16:default
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Official
|
||||
|
||||
test:windows:x86-64:msvc-14.16:default:unsupported:
|
||||
extends: .test:windows:x86-64:msvc-14.16:default
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Unsupported
|
||||
|
||||
# MSVC 14.29 (VS 2019)
|
||||
.test:windows:x86-64:msvc-14.29:default:
|
||||
extends: .test:windows
|
||||
needs: [ build:windows:x86-64:msvc-14.29:default ]
|
||||
# MSVC 14.29 (VS 2019) 64 bit
|
||||
|
||||
test:windows:x86-64:msvc-14.29:default:official:
|
||||
extends: .test:windows:x86-64:msvc-14.29:default
|
||||
extends: .test:windows
|
||||
needs: [ build:windows:x86-64:msvc-14.29:default ]
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Official
|
||||
|
||||
test:windows:x86-64:msvc-14.29:default:unsupported:
|
||||
extends: .test:windows:x86-64:msvc-14.29:default
|
||||
extends: test:windows:x86-64:msvc-14.29:default:official
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Unsupported
|
||||
|
||||
.test:windows:x86-64:msvc-14.29:avx2:
|
||||
test:windows:x86-64:msvc-14.29:avx2:official:
|
||||
extends: .test:windows
|
||||
needs: [ build:windows:x86-64:msvc-14.29:avx2 ]
|
||||
|
||||
test:windows:x86-64:msvc-14.29:avx2:official:
|
||||
extends: .test:windows:x86-64:msvc-14.29:avx2
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Official
|
||||
|
||||
test:windows:x86-64:msvc-14.29:avx2:unsupported:
|
||||
extends: .test:windows:x86-64:msvc-14.29:avx2
|
||||
extends: test:windows:x86-64:msvc-14.29:avx2:official
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Unsupported
|
||||
|
||||
.test:windows:x86-64:msvc-14.29:avx512dq:
|
||||
test:windows:x86-64:msvc-14.29:avx512dq:official:
|
||||
extends: .test:windows
|
||||
needs: [ build:windows:x86-64:msvc-14.29:avx512dq ]
|
||||
tags:
|
||||
@@ -69,18 +51,16 @@ test:windows:x86-64:msvc-14.29:avx2:unsupported:
|
||||
- windows
|
||||
- x86-64
|
||||
- avx512
|
||||
|
||||
test:windows:x86-64:msvc-14.29:avx512dq:official:
|
||||
extends: .test:windows:x86-64:msvc-14.29:avx512dq
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Official
|
||||
|
||||
test:windows:x86-64:msvc-14.29:avx512dq:unsupported:
|
||||
extends: .test:windows:x86-64:msvc-14.29:avx512dq
|
||||
extends: test:windows:x86-64:msvc-14.29:avx512dq:official
|
||||
variables:
|
||||
EIGEN_CI_CTEST_LABEL: Unsupported
|
||||
|
||||
##### MSVC + CUDA ##############################################################
|
||||
# MSVC 14.29 (VS 2019) + CUDA
|
||||
|
||||
.test:windows:cuda:
|
||||
extends: .test:windows
|
||||
allow_failure: true
|
||||
@@ -92,18 +72,7 @@ test:windows:x86-64:msvc-14.29:avx512dq:unsupported:
|
||||
- x86-64
|
||||
- cuda
|
||||
|
||||
# The CUDA 9.2 compiler crashes with an internal error.
|
||||
# # MSVC 14.16 + CUDA 9.2
|
||||
# test:windows:x86-64:cuda-9.2:msvc-14.16:
|
||||
# extends: .test:windows:cuda
|
||||
# needs: [ build:windows:x86-64:cuda-9.2:msvc-14.16 ]
|
||||
|
||||
# MSVC 14.29 + CUDA 10.2
|
||||
test:windows:x86-64:cuda-10.2:msvc-14.29:
|
||||
extends: .test:windows:cuda
|
||||
needs: [ build:windows:x86-64:cuda-10.2:msvc-14.29 ]
|
||||
|
||||
# MSVC 14.29 + CUDA 11.4
|
||||
test:windows:x86-64:cuda-11.4:msvc-14.29:
|
||||
extends: .test:windows:cuda
|
||||
needs: [ build:windows:x86-64:cuda-11.4:msvc-14.29 ]
|
||||
needs: [ build:windows:x86-64:cuda-11.4:msvc-14.29 ]
|
||||
@@ -91,7 +91,7 @@ set(ei_smoke_test_list
|
||||
qr_1
|
||||
qr_colpivoting_7
|
||||
qr_fullpivoting_4
|
||||
rand
|
||||
rand_1
|
||||
real_qz_1
|
||||
redux_1
|
||||
ref_1
|
||||
|
||||
@@ -1,235 +1,235 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||
|
||||
<!-- Fixed x Fixed Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,*,*,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,-1,*,*,*>"/>
|
||||
<DisplayString>[{$T2}, {$T3}] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : $T3</Size>
|
||||
<ValuePointer>m_storage.m_data.array</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : $T3</Size>
|
||||
<ValuePointer>m_storage.m_data.array</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- 2 x 2 Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,2,2,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,2,2,*,*,*>"/>
|
||||
<DisplayString>[2, 2] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<Synthetic Name="[row 0]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 0]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[2]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- 3 x 3 Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,3,3,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,3,3,*,*,*>"/>
|
||||
<DisplayString>[3, 3] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<Synthetic Name="[row 0]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 0]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[3]}, {m_storage.m_data.array[6]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[3]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[5]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[7]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[6]}, {m_storage.m_data.array[7]}, {m_storage.m_data.array[8]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[8]})</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- 4 x 4 Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,4,4,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,4,4,*,*,*>"/>
|
||||
<DisplayString>[4, 4] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<Synthetic Name="[row 0]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 0]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[8]}, {m_storage.m_data.array[12]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[4]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[6]}, {m_storage.m_data.array[7]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[9]}, {m_storage.m_data.array[13]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[8]}, {m_storage.m_data.array[9]}, {m_storage.m_data.array[10]}, {m_storage.m_data.array[11]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[6]}, {m_storage.m_data.array[10]}, {m_storage.m_data.array[14]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 3]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[12]}, {m_storage.m_data.array[13]}, {m_storage.m_data.array[14]}, {m_storage.m_data.array[15]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 3]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[3]}, {m_storage.m_data.array[7]}, {m_storage.m_data.array[11]}, {m_storage.m_data.array[15]})</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic x Dynamic Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,-1,-1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,-1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}, {m_storage.m_cols}] (dynamic matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Fixed x Dynamic Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,*,-1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,*,-1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{$T2}, {m_storage.m_cols}] (dynamic column matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic x Fixed Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,-1,*,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,*,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}, {$T2}] (dynamic row matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : $T2</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : $T2</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic Column Vector -->
|
||||
<Type Name="Eigen::Matrix<*,1,-1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,1,-1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_cols}] (dynamic column vector)</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[size]">m_storage.m_cols</Item>
|
||||
<ArrayItems>
|
||||
<Size>m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic Row Vector -->
|
||||
<Type Name="Eigen::Matrix<*,-1,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}] (dynamic row vector)</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[size]">m_storage.m_rows</Item>
|
||||
<ArrayItems>
|
||||
<Size>m_storage.m_rows</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Fixed Vector -->
|
||||
<Type Name="Eigen::Matrix<*,1,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,1,1,*,*,*>"/>
|
||||
<DisplayString>[1] ({m_storage.m_data.array[0]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="Eigen::Matrix<*,2,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Matrix<*,1,2,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,2,1,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,1,2,*,*,*>"/>
|
||||
<DisplayString>[2] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
<Item Name="[y]">m_storage.m_data.array[1]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="Eigen::Matrix<*,3,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Matrix<*,1,3,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,3,1,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,1,3,*,*,*>"/>
|
||||
<DisplayString>[3] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
<Item Name="[y]">m_storage.m_data.array[1]</Item>
|
||||
<Item Name="[z]">m_storage.m_data.array[2]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="Eigen::Matrix<*,4,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Matrix<*,1,4,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,4,1,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,1,4,*,*,*>"/>
|
||||
<DisplayString>[4] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
<Item Name="[y]">m_storage.m_data.array[1]</Item>
|
||||
<Item Name="[z]">m_storage.m_data.array[2]</Item>
|
||||
<Item Name="[w]">m_storage.m_data.array[3]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
</AutoVisualizer>
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
|
||||
<AutoVisualizer xmlns="http://schemas.microsoft.com/vstudio/debugger/natvis/2010">
|
||||
|
||||
<!-- Fixed x Fixed Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,*,*,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,-1,*,*,*>"/>
|
||||
<DisplayString>[{$T2}, {$T3}] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : $T3</Size>
|
||||
<ValuePointer>m_storage.m_data.array</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : $T3</Size>
|
||||
<ValuePointer>m_storage.m_data.array</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- 2 x 2 Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,2,2,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,2,2,*,*,*>"/>
|
||||
<DisplayString>[2, 2] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<Synthetic Name="[row 0]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 0]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[2]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- 3 x 3 Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,3,3,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,3,3,*,*,*>"/>
|
||||
<DisplayString>[3, 3] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<Synthetic Name="[row 0]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 0]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[3]}, {m_storage.m_data.array[6]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[3]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[5]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[7]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[6]}, {m_storage.m_data.array[7]}, {m_storage.m_data.array[8]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[8]})</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- 4 x 4 Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,4,4,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,4,4,*,*,*>"/>
|
||||
<DisplayString>[4, 4] (fixed matrix)</DisplayString>
|
||||
<Expand>
|
||||
<Synthetic Name="[row 0]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 0]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[0]}, {m_storage.m_data.array[4]}, {m_storage.m_data.array[8]}, {m_storage.m_data.array[12]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[4]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[6]}, {m_storage.m_data.array[7]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 1]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[1]}, {m_storage.m_data.array[5]}, {m_storage.m_data.array[9]}, {m_storage.m_data.array[13]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[8]}, {m_storage.m_data.array[9]}, {m_storage.m_data.array[10]}, {m_storage.m_data.array[11]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 2]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[2]}, {m_storage.m_data.array[6]}, {m_storage.m_data.array[10]}, {m_storage.m_data.array[14]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 3]" Condition="Flags%2">
|
||||
<DisplayString>({m_storage.m_data.array[12]}, {m_storage.m_data.array[13]}, {m_storage.m_data.array[14]}, {m_storage.m_data.array[15]})</DisplayString>
|
||||
</Synthetic>
|
||||
<Synthetic Name="[row 3]" Condition="!(Flags%2)">
|
||||
<DisplayString>({m_storage.m_data.array[3]}, {m_storage.m_data.array[7]}, {m_storage.m_data.array[11]}, {m_storage.m_data.array[15]})</DisplayString>
|
||||
</Synthetic>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic x Dynamic Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,-1,-1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,-1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}, {m_storage.m_cols}] (dynamic matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Fixed x Dynamic Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,*,-1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,*,-1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{$T2}, {m_storage.m_cols}] (dynamic column matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? $T2 : m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic x Fixed Matrix -->
|
||||
<Type Name="Eigen::Matrix<*,-1,*,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,*,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}, {$T2}] (dynamic row matrix)</DisplayString>
|
||||
<Expand>
|
||||
<ArrayItems Condition="Flags%2"> <!-- row major layout -->
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : $T2</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
<ArrayItems Condition="!(Flags%2)"> <!-- column major layout -->
|
||||
<Direction>Backward</Direction>
|
||||
<Rank>2</Rank>
|
||||
<Size>$i==0 ? m_storage.m_rows : $T2</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic Column Vector -->
|
||||
<Type Name="Eigen::Matrix<*,1,-1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,1,-1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_cols}] (dynamic column vector)</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[size]">m_storage.m_cols</Item>
|
||||
<ArrayItems>
|
||||
<Size>m_storage.m_cols</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Dynamic Row Vector -->
|
||||
<Type Name="Eigen::Matrix<*,-1,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,-1,1,*,*,*>"/>
|
||||
<DisplayString Condition="m_storage.m_data == 0">empty</DisplayString>
|
||||
<DisplayString Condition="m_storage.m_data != 0">[{m_storage.m_rows}] (dynamic row vector)</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[size]">m_storage.m_rows</Item>
|
||||
<ArrayItems>
|
||||
<Size>m_storage.m_rows</Size>
|
||||
<ValuePointer>m_storage.m_data</ValuePointer>
|
||||
</ArrayItems>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<!-- Fixed Vector -->
|
||||
<Type Name="Eigen::Matrix<*,1,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Array<*,1,1,*,*,*>"/>
|
||||
<DisplayString>[1] ({m_storage.m_data.array[0]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="Eigen::Matrix<*,2,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Matrix<*,1,2,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,2,1,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,1,2,*,*,*>"/>
|
||||
<DisplayString>[2] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
<Item Name="[y]">m_storage.m_data.array[1]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="Eigen::Matrix<*,3,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Matrix<*,1,3,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,3,1,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,1,3,*,*,*>"/>
|
||||
<DisplayString>[3] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
<Item Name="[y]">m_storage.m_data.array[1]</Item>
|
||||
<Item Name="[z]">m_storage.m_data.array[2]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
<Type Name="Eigen::Matrix<*,4,1,*,*,*>">
|
||||
<AlternativeType Name="Eigen::Matrix<*,1,4,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,4,1,*,*,*>"/>
|
||||
<AlternativeType Name="Eigen::Array<*,1,4,*,*,*>"/>
|
||||
<DisplayString>[4] ({m_storage.m_data.array[0]}, {m_storage.m_data.array[1]}, {m_storage.m_data.array[2]}, {m_storage.m_data.array[3]})</DisplayString>
|
||||
<Expand>
|
||||
<Item Name="[x]">m_storage.m_data.array[0]</Item>
|
||||
<Item Name="[y]">m_storage.m_data.array[1]</Item>
|
||||
<Item Name="[z]">m_storage.m_data.array[2]</Item>
|
||||
<Item Name="[w]">m_storage.m_data.array[3]</Item>
|
||||
</Expand>
|
||||
</Type>
|
||||
|
||||
</AutoVisualizer>
|
||||
|
||||
@@ -1,295 +1,295 @@
|
||||
; ***************************************************************
|
||||
; * Eigen Visualizer
|
||||
; *
|
||||
; * Author: Hauke Heibel <hauke.heibel@gmail.com>
|
||||
; *
|
||||
; * Support the enhanced debugging of the following Eigen
|
||||
; * types (*: any, +:fixed dimension) :
|
||||
; *
|
||||
; * - Eigen::Matrix<*,4,1,*,*,*> and Eigen::Matrix<*,1,4,*,*,*>
|
||||
; * - Eigen::Matrix<*,3,1,*,*,*> and Eigen::Matrix<*,1,3,*,*,*>
|
||||
; * - Eigen::Matrix<*,2,1,*,*,*> and Eigen::Matrix<*,1,2,*,*,*>
|
||||
; * - Eigen::Matrix<*,-1,-1,*,*,*>
|
||||
; * - Eigen::Matrix<*,+,-1,*,*,*>
|
||||
; * - Eigen::Matrix<*,-1,+,*,*,*>
|
||||
; * - Eigen::Matrix<*,+,+,*,*,*>
|
||||
; *
|
||||
; * Matrices are displayed properly independently of the memory
|
||||
; * alignment (RowMajor vs. ColMajor).
|
||||
; *
|
||||
; * This file is distributed WITHOUT ANY WARRANTY. Please ensure
|
||||
; * that your original autoexp.dat file is copied to a safe
|
||||
; * place before proceeding with its modification.
|
||||
; ***************************************************************
|
||||
|
||||
[Visualizer]
|
||||
|
||||
; Fixed size 4-vectors
|
||||
Eigen::Matrix<*,4,1,*,*,*>|Eigen::Matrix<*,1,4,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0],
|
||||
y : ($c.m_storage.m_data.array)[1],
|
||||
z : ($c.m_storage.m_data.array)[2],
|
||||
w : ($c.m_storage.m_data.array)[3]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
4,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 4),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size 3-vectors
|
||||
Eigen::Matrix<*,3,1,*,*,*>|Eigen::Matrix<*,1,3,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0],
|
||||
y : ($c.m_storage.m_data.array)[1],
|
||||
z : ($c.m_storage.m_data.array)[2]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
3,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 3),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size 2-vectors
|
||||
Eigen::Matrix<*,2,1,*,*,*>|Eigen::Matrix<*,1,2,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0],
|
||||
y : ($c.m_storage.m_data.array)[1]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
2,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 2),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size 1-vectors
|
||||
Eigen::Matrix<*,1,1,*,*,*>|Eigen::Matrix<*,1,1,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
1,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 1),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Dynamic matrices (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,-1,-1,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.m_storage.m_rows,
|
||||
cols: $c.m_storage.m_cols,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[($i % $c.m_storage.m_rows)*$c.m_storage.m_cols + (($i- $i % $c.m_storage.m_rows)/$c.m_storage.m_rows)],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[$i],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.m_storage.m_rows,
|
||||
",",
|
||||
$c.m_storage.m_cols,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data)[$i],g],
|
||||
size : $c.m_storage.m_rows*$c.m_storage.m_cols
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed rows, dynamic columns matrix (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,*,-1,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.RowsAtCompileTime,
|
||||
cols: $c.m_storage.m_cols,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[($i % $c.RowsAtCompileTime)*$c.m_storage.m_cols + (($i- $i % $c.RowsAtCompileTime)/$c.RowsAtCompileTime)],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[$i],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.RowsAtCompileTime,
|
||||
",",
|
||||
$c.m_storage.m_cols,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data)[$i],g],
|
||||
size : $c.RowsAtCompileTime*$c.m_storage.m_cols
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Dynamic rows, fixed columns matrix (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,-1,*,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.m_storage.m_rows,
|
||||
cols: $c.ColsAtCompileTime,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[($i % $c.m_storage.m_rows)*$c.ColsAtCompileTime + (($i- $i % $c.m_storage.m_rows)/$c.m_storage.m_rows)],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[$i],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.m_storage.m_rows,
|
||||
",",
|
||||
$c.ColsAtCompileTime,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data)[$i],g],
|
||||
size : $c.m_storage.m_rows*$c.ColsAtCompileTime
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size matrix (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,*,*,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.RowsAtCompileTime,
|
||||
cols: $c.ColsAtCompileTime,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data.array)[($i % $c.RowsAtCompileTime)*$c.ColsAtCompileTime + (($i- $i % $c.RowsAtCompileTime)/$c.RowsAtCompileTime)],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data.array)[$i],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.RowsAtCompileTime,
|
||||
",",
|
||||
$c.ColsAtCompileTime,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data.array)[$i],g],
|
||||
size : $c.RowsAtCompileTime*$c.ColsAtCompileTime
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
; ***************************************************************
|
||||
; * Eigen Visualizer
|
||||
; *
|
||||
; * Author: Hauke Heibel <hauke.heibel@gmail.com>
|
||||
; *
|
||||
; * Support the enhanced debugging of the following Eigen
|
||||
; * types (*: any, +:fixed dimension) :
|
||||
; *
|
||||
; * - Eigen::Matrix<*,4,1,*,*,*> and Eigen::Matrix<*,1,4,*,*,*>
|
||||
; * - Eigen::Matrix<*,3,1,*,*,*> and Eigen::Matrix<*,1,3,*,*,*>
|
||||
; * - Eigen::Matrix<*,2,1,*,*,*> and Eigen::Matrix<*,1,2,*,*,*>
|
||||
; * - Eigen::Matrix<*,-1,-1,*,*,*>
|
||||
; * - Eigen::Matrix<*,+,-1,*,*,*>
|
||||
; * - Eigen::Matrix<*,-1,+,*,*,*>
|
||||
; * - Eigen::Matrix<*,+,+,*,*,*>
|
||||
; *
|
||||
; * Matrices are displayed properly independently of the memory
|
||||
; * alignment (RowMajor vs. ColMajor).
|
||||
; *
|
||||
; * This file is distributed WITHOUT ANY WARRANTY. Please ensure
|
||||
; * that your original autoexp.dat file is copied to a safe
|
||||
; * place before proceeding with its modification.
|
||||
; ***************************************************************
|
||||
|
||||
[Visualizer]
|
||||
|
||||
; Fixed size 4-vectors
|
||||
Eigen::Matrix<*,4,1,*,*,*>|Eigen::Matrix<*,1,4,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0],
|
||||
y : ($c.m_storage.m_data.array)[1],
|
||||
z : ($c.m_storage.m_data.array)[2],
|
||||
w : ($c.m_storage.m_data.array)[3]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
4,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 4),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size 3-vectors
|
||||
Eigen::Matrix<*,3,1,*,*,*>|Eigen::Matrix<*,1,3,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0],
|
||||
y : ($c.m_storage.m_data.array)[1],
|
||||
z : ($c.m_storage.m_data.array)[2]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
3,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 3),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size 2-vectors
|
||||
Eigen::Matrix<*,2,1,*,*,*>|Eigen::Matrix<*,1,2,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0],
|
||||
y : ($c.m_storage.m_data.array)[1]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
2,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 2),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size 1-vectors
|
||||
Eigen::Matrix<*,1,1,*,*,*>|Eigen::Matrix<*,1,1,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
x : ($c.m_storage.m_data.array)[0]
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
1,
|
||||
"](",
|
||||
#array(expr: $e.m_storage.m_data.array[$i], size: 1),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Dynamic matrices (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,-1,-1,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.m_storage.m_rows,
|
||||
cols: $c.m_storage.m_cols,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[($i % $c.m_storage.m_rows)*$c.m_storage.m_cols + (($i- $i % $c.m_storage.m_rows)/$c.m_storage.m_rows)],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[$i],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.m_storage.m_rows,
|
||||
",",
|
||||
$c.m_storage.m_cols,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data)[$i],g],
|
||||
size : $c.m_storage.m_rows*$c.m_storage.m_cols
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed rows, dynamic columns matrix (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,*,-1,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.RowsAtCompileTime,
|
||||
cols: $c.m_storage.m_cols,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[($i % $c.RowsAtCompileTime)*$c.m_storage.m_cols + (($i- $i % $c.RowsAtCompileTime)/$c.RowsAtCompileTime)],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[$i],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.m_storage.m_cols
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.RowsAtCompileTime,
|
||||
",",
|
||||
$c.m_storage.m_cols,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data)[$i],g],
|
||||
size : $c.RowsAtCompileTime*$c.m_storage.m_cols
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Dynamic rows, fixed columns matrix (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,-1,*,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.m_storage.m_rows,
|
||||
cols: $c.ColsAtCompileTime,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[($i % $c.m_storage.m_rows)*$c.ColsAtCompileTime + (($i- $i % $c.m_storage.m_rows)/$c.m_storage.m_rows)],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data)[$i],
|
||||
size: ($r==1)*$c.m_storage.m_rows+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.m_storage.m_rows,
|
||||
",",
|
||||
$c.ColsAtCompileTime,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data)[$i],g],
|
||||
size : $c.m_storage.m_rows*$c.ColsAtCompileTime
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
; Fixed size matrix (ColMajor and RowMajor support)
|
||||
Eigen::Matrix<*,*,*,*,*,*>{
|
||||
children
|
||||
(
|
||||
#(
|
||||
[internals]: [$c,!],
|
||||
rows: $c.RowsAtCompileTime,
|
||||
cols: $c.ColsAtCompileTime,
|
||||
; Check for RowMajorBit
|
||||
#if ($c.Flags & 0x1) (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data.array)[($i % $c.RowsAtCompileTime)*$c.ColsAtCompileTime + (($i- $i % $c.RowsAtCompileTime)/$c.RowsAtCompileTime)],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
) #else (
|
||||
#array(
|
||||
rank: 2,
|
||||
base: 0,
|
||||
expr: ($c.m_storage.m_data.array)[$i],
|
||||
size: ($r==1)*$c.RowsAtCompileTime+($r==0)*$c.ColsAtCompileTime
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
preview
|
||||
(
|
||||
#(
|
||||
"[",
|
||||
$c.RowsAtCompileTime,
|
||||
",",
|
||||
$c.ColsAtCompileTime,
|
||||
"](",
|
||||
#array(
|
||||
expr : [($c.m_storage.m_data.array)[$i],g],
|
||||
size : $c.RowsAtCompileTime*$c.ColsAtCompileTime
|
||||
),
|
||||
")"
|
||||
)
|
||||
)
|
||||
}
|
||||
|
||||
@@ -18,9 +18,6 @@ one option, and other parts (or libraries that you use) are compiled with anothe
|
||||
fail to link or exhibit subtle bugs. Nevertheless, these options can be useful for people who know what they
|
||||
are doing.
|
||||
|
||||
- \b EIGEN2_SUPPORT and \b EIGEN2_SUPPORT_STAGEnn_xxx are disabled starting from the 3.3 release.
|
||||
Defining one of these will raise a compile-error. If you need to compile Eigen2 code,
|
||||
<a href="http://eigen.tuxfamily.org/index.php?title=Eigen2">check this site</a>.
|
||||
- \b EIGEN_DEFAULT_DENSE_INDEX_TYPE - the type for column and row indices in matrices, vectors and array
|
||||
(DenseBase::Index). Set to \c std::ptrdiff_t by default.
|
||||
- \b EIGEN_DEFAULT_IO_FORMAT - the IOFormat to use when printing a matrix if no %IOFormat is specified.
|
||||
@@ -44,7 +41,7 @@ are doing.
|
||||
preferable. Not defined by default.
|
||||
\warning See the documentation of \c EIGEN_INITIALIZE_MATRICES_BY_ZERO for a discussion on a limitations
|
||||
of these macros when applied to \c 1x1, \c 1x2, and \c 2x1 fixed-size matrices.
|
||||
- \b EIGEN_NO_AUTOMATIC_RESIZING - if defined, the matrices (or arrays) on both sides of an assignment
|
||||
- \b EIGEN_NO_AUTOMATIC_RESIZING - if defined, the matrices (or arrays) on both sides of an assignment
|
||||
<tt>a = b</tt> have to be of the same size; otherwise, %Eigen automatically resizes \c a so that it is of
|
||||
the correct size. Not defined by default.
|
||||
|
||||
@@ -72,8 +69,8 @@ The %Eigen library contains many assertions to guard against programming errors,
|
||||
run time. However, these assertions do cost time and can thus be turned off.
|
||||
|
||||
- \b EIGEN_NO_DEBUG - disables %Eigen's assertions if defined. Not defined by default, unless the
|
||||
\c NDEBUG macro is defined (this is a standard C++ macro which disables all asserts).
|
||||
- \b EIGEN_NO_STATIC_ASSERT - if defined, compile-time static assertions are replaced by runtime assertions;
|
||||
\c NDEBUG macro is defined (this is a standard C++ macro which disables all asserts).
|
||||
- \b EIGEN_NO_STATIC_ASSERT - if defined, compile-time static assertions are replaced by runtime assertions;
|
||||
this saves compilation time. Not defined by default.
|
||||
- \b eigen_assert - macro with one argument that is used inside %Eigen for assertions. By default, it is
|
||||
basically defined to be \c assert, which aborts the program if the assertion is violated. Redefine this
|
||||
@@ -90,7 +87,7 @@ run time. However, these assertions do cost time and can thus be turned off.
|
||||
Let us emphasize that \c EIGEN_MAX_*_ALIGN_BYTES define only a desirable upper bound. In practice data is aligned to largest power-of-two common divisor of \c EIGEN_MAX_STATIC_ALIGN_BYTES and the size of the data, such that memory is not wasted.
|
||||
- \b \c EIGEN_DONT_PARALLELIZE - if defined, this disables multi-threading. This is only relevant if you enabled OpenMP.
|
||||
See \ref TopicMultiThreading for details.
|
||||
- \b \c EIGEN_DONT_VECTORIZE - disables explicit vectorization when defined. Not defined by default, unless
|
||||
- \b \c EIGEN_DONT_VECTORIZE - disables explicit vectorization when defined. Not defined by default, unless
|
||||
alignment is disabled by %Eigen's platform test or the user defining \c EIGEN_DONT_ALIGN.
|
||||
- \b \c EIGEN_UNALIGNED_VECTORIZE - disables/enables vectorization with unaligned stores. Default is 1 (enabled).
|
||||
If set to 0 (disabled), then expression for which the destination cannot be aligned are not vectorized (e.g., unaligned
|
||||
|
||||
@@ -36,9 +36,9 @@ option in `find_package`:
|
||||
```
|
||||
find_package(Eigen3 3.4 REQUIRED NO_MODULE) # Restricts to 3.4.z
|
||||
```
|
||||
or to support a range of versions:
|
||||
Starting with Eigen 3.4.1, we also support a range spanning major versions:
|
||||
```
|
||||
find_package(Eigen3 3.4...5 REQUIRED NO_MODULE) # Any version >=3.4.0 but <6.0.0.
|
||||
find_package(Eigen3 3.4...5 REQUIRED NO_MODULE) # Any version >=3.4.1 but <6.0.0.
|
||||
```
|
||||
|
||||
Do not forget to set the <a href="https://cmake.org/cmake/help/v3.7/variable/CMAKE_PREFIX_PATH.html">\c CMAKE_PREFIX_PATH </a> variable if Eigen is not installed in a default location or if you want to pick a specific version. For instance:
|
||||
|
||||
@@ -22,9 +22,11 @@ add_custom_target(lapack)
|
||||
include_directories(../blas)
|
||||
|
||||
set(EigenLapack_SRCS
|
||||
dsecnd_INT_CPU_TIME.cpp second_INT_CPU_TIME.cpp single.cpp double.cpp complex_single.cpp complex_double.cpp ../blas/xerbla.cpp
|
||||
dsecnd_INT_CPU_TIME.cpp second_INT_CPU_TIME.cpp single.cpp double.cpp complex_single.cpp complex_double.cpp
|
||||
)
|
||||
|
||||
set(EIGEN_LAPACK_DEF "eigen_lapack_cpp.def")
|
||||
|
||||
if(EIGEN_Fortran_COMPILER_WORKS)
|
||||
|
||||
set(EigenLapack_SRCS ${EigenLapack_SRCS}
|
||||
@@ -40,6 +42,8 @@ set(EigenLapack_SRCS ${EigenLapack_SRCS}
|
||||
slamch.f dlamch.f
|
||||
)
|
||||
|
||||
set(EIGEN_LAPACK_DEF "eigen_lapack.def")
|
||||
|
||||
option(EIGEN_ENABLE_LAPACK_TESTS OFF "Enable the Lapack unit tests")
|
||||
|
||||
if(EIGEN_ENABLE_LAPACK_TESTS)
|
||||
@@ -98,12 +102,16 @@ endif()
|
||||
set(EIGEN_LAPACK_TARGETS "")
|
||||
|
||||
add_library(eigen_lapack_static STATIC ${EigenLapack_SRCS} ${ReferenceLapack_SRCS})
|
||||
target_link_libraries(eigen_lapack_static eigen_blas_static)
|
||||
list(APPEND EIGEN_LAPACK_TARGETS eigen_lapack_static)
|
||||
|
||||
if (EIGEN_BUILD_SHARED_LIBS)
|
||||
add_library(eigen_lapack SHARED ${EigenLapack_SRCS})
|
||||
list(APPEND EIGEN_LAPACK_TARGETS eigen_lapack)
|
||||
add_library(eigen_lapack SHARED ${EigenLapack_SRCS} ${EIGEN_LAPACK_DEF})
|
||||
# Build LAPACK but link BLAS.
|
||||
target_compile_definitions(eigen_lapack PUBLIC "EIGEN_BLAS_LINK_DLL" "EIGEN_LAPACK_BUILD_DLL")
|
||||
target_link_libraries(eigen_lapack eigen_blas)
|
||||
set_target_properties(eigen_lapack PROPERTIES CXX_VISIBILITY_PRESET hidden)
|
||||
list(APPEND EIGEN_LAPACK_TARGETS eigen_lapack)
|
||||
endif()
|
||||
|
||||
foreach(target IN LISTS EIGEN_LAPACK_TARGETS)
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
#include <Eigen/Cholesky>
|
||||
|
||||
// POTRF computes the Cholesky factorization of a real symmetric positive definite matrix A.
|
||||
EIGEN_LAPACK_FUNC(potrf)(char *uplo, int *n, RealScalar *pa, int *lda, int *info) {
|
||||
EIGEN_LAPACK_FUNC(potrf)(const char *uplo, int *n, RealScalar *pa, int *lda, int *info) {
|
||||
*info = 0;
|
||||
if (UPLO(*uplo) == INVALID)
|
||||
*info = -1;
|
||||
@@ -38,7 +38,8 @@ EIGEN_LAPACK_FUNC(potrf)(char *uplo, int *n, RealScalar *pa, int *lda, int *info
|
||||
// POTRS solves a system of linear equations A*X = B with a symmetric
|
||||
// positive definite matrix A using the Cholesky factorization
|
||||
// A = U**T*U or A = L*L**T computed by DPOTRF.
|
||||
EIGEN_LAPACK_FUNC(potrs)(char *uplo, int *n, int *nrhs, RealScalar *pa, int *lda, RealScalar *pb, int *ldb, int *info) {
|
||||
EIGEN_LAPACK_FUNC(potrs)
|
||||
(const char *uplo, int *n, int *nrhs, RealScalar *pa, int *lda, RealScalar *pb, int *ldb, int *info) {
|
||||
*info = 0;
|
||||
if (UPLO(*uplo) == INVALID)
|
||||
*info = -1;
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#include <ctime>
|
||||
#endif
|
||||
|
||||
#include "lapack.h"
|
||||
|
||||
extern "C" {
|
||||
double dsecnd_();
|
||||
}
|
||||
|
||||
143
lapack/eigen_lapack.def
Normal file
143
lapack/eigen_lapack.def
Normal file
@@ -0,0 +1,143 @@
|
||||
; Definition file for eigen_lapack.dll.
|
||||
|
||||
LIBRARY eigen_lapack
|
||||
EXPORTS
|
||||
; Eigen C/C++ implementations
|
||||
; Utilities
|
||||
xerbla_
|
||||
|
||||
; Eigenvalues
|
||||
ssyev_
|
||||
dsyev_
|
||||
|
||||
; LU
|
||||
sgetrf_
|
||||
sgetrs_
|
||||
dgetrf_
|
||||
dgetrs_
|
||||
cgetrf_
|
||||
cgetrs_
|
||||
zgetrf_
|
||||
zgetrs_
|
||||
|
||||
; QR
|
||||
spotrf_
|
||||
spotrs_
|
||||
dpotrf_
|
||||
dpotrs_
|
||||
cpotrf_
|
||||
cpotrs_
|
||||
zpotrf_
|
||||
zpotrs_
|
||||
|
||||
; SVD
|
||||
sgesdd_
|
||||
sgesvd_
|
||||
dgesdd_
|
||||
dgesvd_
|
||||
cgesdd_
|
||||
cgesvd_
|
||||
zgesdd_
|
||||
zgesvd_
|
||||
|
||||
; Time
|
||||
second_
|
||||
dsecnd_
|
||||
|
||||
; Fortran implementations
|
||||
clacgv_
|
||||
zlacgv_
|
||||
sladiv_
|
||||
dladiv_
|
||||
cladiv_
|
||||
zladiv_
|
||||
slamch_
|
||||
dlamch_
|
||||
slamc3_
|
||||
dlamc3_
|
||||
slapy2_
|
||||
dlapy2_
|
||||
slapy3_
|
||||
dlapy3_
|
||||
slarf_
|
||||
dlarf_
|
||||
clarf_
|
||||
zlarf_
|
||||
slarfb_
|
||||
dlarfb_
|
||||
clarfb_
|
||||
zlarfb_
|
||||
slarfg_
|
||||
dlarfg_
|
||||
clarfg_
|
||||
zlarfg_
|
||||
slarft_
|
||||
dlarft_
|
||||
clarft_
|
||||
zlarft_
|
||||
ilaclc_
|
||||
ilaclr_
|
||||
iladlc_
|
||||
iladlr_
|
||||
ilaslc_
|
||||
ilaslr_
|
||||
ilazlc_
|
||||
ilazlr_
|
||||
|
||||
; Missing
|
||||
; csymv_
|
||||
; zsymv_
|
||||
; cspmv_
|
||||
; zspmv_
|
||||
; csyr_
|
||||
; zsyr_
|
||||
; cspr_
|
||||
; zspr_
|
||||
; sgemt_
|
||||
; dgemt_
|
||||
; cgemt_
|
||||
; zgemt_
|
||||
; sgema_
|
||||
; dgema_
|
||||
; cgema_
|
||||
; zgema_
|
||||
; sgems_
|
||||
; dgems_
|
||||
; cgems_
|
||||
; zgems_
|
||||
; sgetf2_
|
||||
; dgetf2_
|
||||
; cgetf2_
|
||||
; zgetf2_
|
||||
; slaswp_
|
||||
; dlaswp_
|
||||
; claswp_
|
||||
; zlaswp_
|
||||
; sgesv_
|
||||
; dgesv_
|
||||
; cgesv_
|
||||
; zgesv_
|
||||
; spotf2_
|
||||
; dpotf2_
|
||||
; cpotf2_
|
||||
; zpotf2_
|
||||
; slauu2_
|
||||
; dlauu2_
|
||||
; clauu2_
|
||||
; zlauu2_
|
||||
; slauum_
|
||||
; dlauum_
|
||||
; clauum_
|
||||
; zlauum_
|
||||
; strti2_
|
||||
; dtrti2_
|
||||
; ctrti2_
|
||||
; ztrti2_
|
||||
; strtri_
|
||||
; dtrtri_
|
||||
; ctrtri_
|
||||
; ztrtri_
|
||||
; spotri_
|
||||
; dpotri_
|
||||
; cpotri_
|
||||
; zpotri_
|
||||
143
lapack/eigen_lapack_cpp.def
Normal file
143
lapack/eigen_lapack_cpp.def
Normal file
@@ -0,0 +1,143 @@
|
||||
; Definition file for eigen_lapack.dll, containing only the C++ implementations.
|
||||
|
||||
LIBRARY eigen_lapack
|
||||
EXPORTS
|
||||
; Eigen C/C++ implementations
|
||||
; Utilities
|
||||
xerbla_
|
||||
|
||||
; Eigenvalues
|
||||
ssyev_
|
||||
dsyev_
|
||||
|
||||
; LU
|
||||
sgetrf_
|
||||
sgetrs_
|
||||
dgetrf_
|
||||
dgetrs_
|
||||
cgetrf_
|
||||
cgetrs_
|
||||
zgetrf_
|
||||
zgetrs_
|
||||
|
||||
; QR
|
||||
spotrf_
|
||||
spotrs_
|
||||
dpotrf_
|
||||
dpotrs_
|
||||
cpotrf_
|
||||
cpotrs_
|
||||
zpotrf_
|
||||
zpotrs_
|
||||
|
||||
; SVD
|
||||
sgesdd_
|
||||
sgesvd_
|
||||
dgesdd_
|
||||
dgesvd_
|
||||
cgesdd_
|
||||
cgesvd_
|
||||
zgesdd_
|
||||
zgesvd_
|
||||
|
||||
; Time
|
||||
second_
|
||||
dsecnd_
|
||||
|
||||
; Fortran implementations
|
||||
; clacgv_
|
||||
; zlacgv_
|
||||
; sladiv_
|
||||
; dladiv_
|
||||
; cladiv_
|
||||
; zladiv_
|
||||
; slamch_
|
||||
; dlamch_
|
||||
; slamc3_
|
||||
; dlamc3_
|
||||
; slapy2_
|
||||
; dlapy2_
|
||||
; slapy3_
|
||||
; dlapy3_
|
||||
; slarf_
|
||||
; dlarf_
|
||||
; clarf_
|
||||
; zlarf_
|
||||
; slarfb_
|
||||
; dlarfb_
|
||||
; clarfb_
|
||||
; zlarfb_
|
||||
; slarfg_
|
||||
; dlarfg_
|
||||
; clarfg_
|
||||
; zlarfg_
|
||||
; slarft_
|
||||
; dlarft_
|
||||
; clarft_
|
||||
; zlarft_
|
||||
; ilaclc_
|
||||
; ilaclr_
|
||||
; iladlc_
|
||||
; iladlr_
|
||||
; ilaslc_
|
||||
; ilaslr_
|
||||
; ilazlc_
|
||||
; ilazlr_
|
||||
|
||||
; Missing
|
||||
; csymv_
|
||||
; zsymv_
|
||||
; cspmv_
|
||||
; zspmv_
|
||||
; csyr_
|
||||
; zsyr_
|
||||
; cspr_
|
||||
; zspr_
|
||||
; sgemt_
|
||||
; dgemt_
|
||||
; cgemt_
|
||||
; zgemt_
|
||||
; sgema_
|
||||
; dgema_
|
||||
; cgema_
|
||||
; zgema_
|
||||
; sgems_
|
||||
; dgems_
|
||||
; cgems_
|
||||
; zgems_
|
||||
; sgetf2_
|
||||
; dgetf2_
|
||||
; cgetf2_
|
||||
; zgetf2_
|
||||
; slaswp_
|
||||
; dlaswp_
|
||||
; claswp_
|
||||
; zlaswp_
|
||||
; sgesv_
|
||||
; dgesv_
|
||||
; cgesv_
|
||||
; zgesv_
|
||||
; spotf2_
|
||||
; dpotf2_
|
||||
; cpotf2_
|
||||
; zpotf2_
|
||||
; slauu2_
|
||||
; dlauu2_
|
||||
; clauu2_
|
||||
; zlauu2_
|
||||
; slauum_
|
||||
; dlauum_
|
||||
; clauum_
|
||||
; zlauum_
|
||||
; strti2_
|
||||
; dtrti2_
|
||||
; ctrti2_
|
||||
; ztrti2_
|
||||
; strtri_
|
||||
; dtrtri_
|
||||
; ctrtri_
|
||||
; ztrtri_
|
||||
; spotri_
|
||||
; dpotri_
|
||||
; cpotri_
|
||||
; zpotri_
|
||||
@@ -12,7 +12,8 @@
|
||||
|
||||
// computes eigen values and vectors of a general N-by-N matrix A
|
||||
EIGEN_LAPACK_FUNC(syev)
|
||||
(char* jobz, char* uplo, int* n, Scalar* a, int* lda, Scalar* w, Scalar* /*work*/, int* lwork, int* info) {
|
||||
(const char* jobz, const char* uplo, int* n, RealScalar* ra, int* lda, RealScalar* rw, RealScalar* /*work*/, int* lwork,
|
||||
int* info) {
|
||||
// TODO exploit the work buffer
|
||||
bool query_size = *lwork == -1;
|
||||
|
||||
@@ -40,6 +41,9 @@ EIGEN_LAPACK_FUNC(syev)
|
||||
|
||||
if (*n == 0) return;
|
||||
|
||||
Scalar* a = reinterpret_cast<Scalar*>(ra);
|
||||
Scalar* w = reinterpret_cast<Scalar*>(rw);
|
||||
|
||||
PlainMatrixType mat(*n, *n);
|
||||
if (UPLO(*uplo) == UP)
|
||||
mat = matrix(a, *n, *n, *lda).adjoint();
|
||||
|
||||
267
lapack/lapack.h
267
lapack/lapack.h
@@ -3,131 +3,192 @@
|
||||
|
||||
#include "../blas/blas.h"
|
||||
|
||||
#if defined(_WIN32)
|
||||
#if defined(EIGEN_LAPACK_BUILD_DLL)
|
||||
#define EIGEN_LAPACK_API __declspec(dllexport)
|
||||
#elif defined(EIGEN_LAPACK_LINK_DLL)
|
||||
#define EIGEN_LAPACK_API __declspec(dllimport)
|
||||
#else
|
||||
#define EIGEN_LAPACK_API
|
||||
#endif
|
||||
#elif ((defined(__GNUC__) && __GNUC__ >= 4) || defined(__clang__)) && defined(EIGEN_LAPACK_BUILD_DLL)
|
||||
#define EIGEN_LAPACK_API __attribute__((visibility("default")))
|
||||
#else
|
||||
#define EIGEN_LAPACK_API
|
||||
#endif
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
void BLASFUNC(csymv)(const char *, const int *, const float *, const float *, const int *, const float *, const int *,
|
||||
const float *, float *, const int *);
|
||||
void BLASFUNC(zsymv)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, const double *, double *, const int *);
|
||||
void BLASFUNC(xsymv)(const char *, const int *, const double *, const double *, const int *, const double *,
|
||||
const int *, const double *, double *, const int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(csymv)(const char *, const int *, const float *, const float *, const int *,
|
||||
const float *, const int *, const float *, float *, const int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zsymv)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xsymv)(const char *, const int *, const double *, const double *, const int *,
|
||||
const double *, const int *, const double *, double *, const int *);
|
||||
|
||||
void BLASFUNC(cspmv)(char *, int *, float *, float *, float *, int *, float *, float *, int *);
|
||||
void BLASFUNC(zspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
void BLASFUNC(xspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cspmv)(char *, int *, float *, float *, float *, int *, float *, float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xspmv)(char *, int *, double *, double *, double *, int *, double *, double *, int *);
|
||||
|
||||
void BLASFUNC(csyr)(char *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zsyr)(char *, int *, double *, double *, int *, double *, int *);
|
||||
void BLASFUNC(xsyr)(char *, int *, double *, double *, int *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(csyr)(char *, int *, float *, float *, int *, float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zsyr)(char *, int *, double *, double *, int *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xsyr)(char *, int *, double *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(cspr)(char *, int *, float *, float *, int *, float *);
|
||||
void BLASFUNC(zspr)(char *, int *, double *, double *, int *, double *);
|
||||
void BLASFUNC(xspr)(char *, int *, double *, double *, int *, double *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cspr)(char *, int *, float *, float *, int *, float *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zspr)(char *, int *, double *, double *, int *, double *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xspr)(char *, int *, double *, double *, int *, double *);
|
||||
|
||||
void BLASFUNC(sgemt)(char *, int *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dgemt)(char *, int *, int *, double *, double *, int *, double *, int *);
|
||||
void BLASFUNC(cgemt)(char *, int *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zgemt)(char *, int *, int *, double *, double *, int *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgemt)(char *, int *, int *, float *, float *, int *, float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgemt)(char *, int *, int *, double *, double *, int *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgemt)(char *, int *, int *, float *, float *, int *, float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgemt)(char *, int *, int *, double *, double *, int *, double *, int *);
|
||||
|
||||
void BLASFUNC(sgema)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dgema)(char *, char *, int *, int *, double *, double *, int *, double *, double *, int *, double *,
|
||||
int *);
|
||||
void BLASFUNC(cgema)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zgema)(char *, char *, int *, int *, double *, double *, int *, double *, double *, int *, double *,
|
||||
int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgema)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *,
|
||||
float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgema)(char *, char *, int *, int *, double *, double *, int *, double *, double *,
|
||||
int *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgema)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *,
|
||||
float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgema)(char *, char *, int *, int *, double *, double *, int *, double *, double *,
|
||||
int *, double *, int *);
|
||||
|
||||
void BLASFUNC(sgems)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(dgems)(char *, char *, int *, int *, double *, double *, int *, double *, double *, int *, double *,
|
||||
int *);
|
||||
void BLASFUNC(cgems)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *, float *, int *);
|
||||
void BLASFUNC(zgems)(char *, char *, int *, int *, double *, double *, int *, double *, double *, int *, double *,
|
||||
int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgems)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *,
|
||||
float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgems)(char *, char *, int *, int *, double *, double *, int *, double *, double *,
|
||||
int *, double *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgems)(char *, char *, int *, int *, float *, float *, int *, float *, float *, int *,
|
||||
float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgems)(char *, char *, int *, int *, double *, double *, int *, double *, double *,
|
||||
int *, double *, int *);
|
||||
|
||||
void BLASFUNC(sgetf2)(int *, int *, float *, int *, int *, int *);
|
||||
void BLASFUNC(dgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
void BLASFUNC(qgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
void BLASFUNC(cgetf2)(int *, int *, float *, int *, int *, int *);
|
||||
void BLASFUNC(zgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
void BLASFUNC(xgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgetf2)(int *, int *, float *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgetf2)(int *, int *, float *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xgetf2)(int *, int *, double *, int *, int *, int *);
|
||||
|
||||
void BLASFUNC(sgetrf)(int *, int *, float *, int *, int *, int *);
|
||||
void BLASFUNC(dgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
void BLASFUNC(qgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
void BLASFUNC(cgetrf)(int *, int *, float *, int *, int *, int *);
|
||||
void BLASFUNC(zgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
void BLASFUNC(xgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
|
||||
void BLASFUNC(slaswp)(int *, float *, int *, int *, int *, int *, int *);
|
||||
void BLASFUNC(dlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
void BLASFUNC(qlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
void BLASFUNC(claswp)(int *, float *, int *, int *, int *, int *, int *);
|
||||
void BLASFUNC(zlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
void BLASFUNC(xlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(slaswp)(int *, float *, int *, int *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(claswp)(int *, float *, int *, int *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xlaswp)(int *, double *, int *, int *, int *, int *, int *);
|
||||
|
||||
void BLASFUNC(sgetrs)(char *, int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
void BLASFUNC(cgetrs)(char *, int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
void BLASFUNC(zgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xgetrs)(char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(sgesv)(int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
void BLASFUNC(cgesv)(int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
void BLASFUNC(zgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgesv)(int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgesv)(int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xgesv)(int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(spotf2)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dpotf2)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qpotf2)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(cpotf2)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(zpotf2)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xpotf2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(spotf2)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dpotf2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qpotf2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cpotf2)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zpotf2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xpotf2)(char *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(spotrf)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dpotrf)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qpotrf)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(cpotrf)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(zpotrf)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xpotrf)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qpotrf)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xpotrf)(char *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(slauu2)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dlauu2)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qlauu2)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(clauu2)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(zlauu2)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xlauu2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(slauu2)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dlauu2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qlauu2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(clauu2)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zlauu2)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xlauu2)(char *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(slauum)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dlauum)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qlauum)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(clauum)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(zlauum)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xlauum)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(slauum)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dlauum)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qlauum)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(clauum)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zlauum)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xlauum)(char *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(strti2)(char *, char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dtrti2)(char *, char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qtrti2)(char *, char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(ctrti2)(char *, char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(ztrti2)(char *, char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xtrti2)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(strti2)(char *, char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dtrti2)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qtrti2)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(ctrti2)(char *, char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(ztrti2)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xtrti2)(char *, char *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(strtri)(char *, char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dtrtri)(char *, char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qtrtri)(char *, char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(ctrtri)(char *, char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(ztrtri)(char *, char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xtrtri)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(strtri)(char *, char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dtrtri)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qtrtri)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(ctrtri)(char *, char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(ztrtri)(char *, char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xtrtri)(char *, char *, int *, double *, int *, int *);
|
||||
|
||||
void BLASFUNC(spotri)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(dpotri)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(qpotri)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(cpotri)(char *, int *, float *, int *, int *);
|
||||
void BLASFUNC(zpotri)(char *, int *, double *, int *, int *);
|
||||
void BLASFUNC(xpotri)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(spotri)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dpotri)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(qpotri)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cpotri)(char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zpotri)(char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(xpotri)(char *, int *, double *, int *, int *);
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
// Eigen C++ implementations.
|
||||
//-----------------------------------------------------------------------------
|
||||
|
||||
// Cholesky.
|
||||
EIGEN_LAPACK_API void BLASFUNC(spotrf)(const char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dpotrf)(const char *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cpotrf)(const char *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zpotrf)(const char *, int *, double *, int *, int *);
|
||||
|
||||
EIGEN_LAPACK_API void BLASFUNC(spotrs)(const char *, int *, int *, float *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dpotrs)(const char *, int *, int *, double *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cpotrs)(const char *, int *, int *, float *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zpotrs)(const char *, int *, int *, double *, int *, double *, int *, int *);
|
||||
|
||||
// Eigenvalues.
|
||||
EIGEN_LAPACK_API void BLASFUNC(ssyev)(const char *, const char *, int *, float *, int *, float *, float *, int *,
|
||||
int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dsyev)(const char *, const char *, int *, double *, int *, double *, double *, int *,
|
||||
int *);
|
||||
|
||||
// LU.
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgetrf)(int *, int *, float *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgetrf)(int *, int *, float *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgetrf)(int *, int *, double *, int *, int *, int *);
|
||||
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgetrs)(const char *, int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgetrs)(const char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgetrs)(const char *, int *, int *, float *, int *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgetrs)(const char *, int *, int *, double *, int *, int *, double *, int *, int *);
|
||||
|
||||
// SVD.
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgesdd)(const char *, int *, int *, float *, int *, float *, float *, int *, float *,
|
||||
int *, float *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgesdd)(const char *, int *, int *, double *, int *, double *, double *, int *, double *,
|
||||
int *, double *, int *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgesdd)(const char *, int *, int *, float *, int *, float *, float *, int *, float *,
|
||||
int *, float *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgesdd)(const char *, int *, int *, double *, int *, double *, double *, int *, double *,
|
||||
int *, double *, int *, double *, int *, int *);
|
||||
|
||||
EIGEN_LAPACK_API void BLASFUNC(sgesvd)(const char *, const char *, int *, int *, float *, int *, float *, float *,
|
||||
int *, float *, int *, float *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(dgesvd)(const char *, const char *, int *, int *, double *, int *, double *, double *,
|
||||
int *, double *, int *, double *, int *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(cgesvd)(const char *, const char *, int *, int *, float *, int *, float *, float *,
|
||||
int *, float *, int *, float *, int *, float *, int *);
|
||||
EIGEN_LAPACK_API void BLASFUNC(zgesvd)(const char *, const char *, int *, int *, double *, int *, double *, double *,
|
||||
int *, double *, int *, double *, int *, double *, int *);
|
||||
|
||||
// Time.
|
||||
EIGEN_LAPACK_API float BLASFUNC(second)();
|
||||
EIGEN_LAPACK_API double BLASFUNC(dsecnd)();
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
||||
@@ -40,7 +40,7 @@ EIGEN_LAPACK_FUNC(getrf)(int *m, int *n, RealScalar *pa, int *lda, int *ipiv, in
|
||||
// A * X = B or A' * X = B
|
||||
// with a general N-by-N matrix A using the LU factorization computed by GETRF
|
||||
EIGEN_LAPACK_FUNC(getrs)
|
||||
(char *trans, int *n, int *nrhs, RealScalar *pa, int *lda, int *ipiv, RealScalar *pb, int *ldb, int *info) {
|
||||
(const char *trans, int *n, int *nrhs, RealScalar *pa, int *lda, int *ipiv, RealScalar *pb, int *ldb, int *info) {
|
||||
*info = 0;
|
||||
if (OP(*trans) == INVALID)
|
||||
*info = -1;
|
||||
|
||||
@@ -15,6 +15,8 @@
|
||||
#include <ctime>
|
||||
#endif
|
||||
|
||||
#include "lapack.h"
|
||||
|
||||
extern "C" {
|
||||
float second_();
|
||||
}
|
||||
|
||||
@@ -18,8 +18,9 @@
|
||||
|
||||
// computes the singular values/vectors a general M-by-N matrix A using divide-and-conquer
|
||||
EIGEN_LAPACK_FUNC(gesdd)
|
||||
(char *jobz, int *m, int *n, Scalar *a, int *lda, RealScalar *s, Scalar *u, int *ldu, Scalar *vt, int *ldvt,
|
||||
Scalar * /*work*/, int *lwork, EIGEN_LAPACK_ARG_IF_COMPLEX(RealScalar * /*rwork*/) int * /*iwork*/, int *info) {
|
||||
(const char *jobz, int *m, int *n, RealScalar *ra, int *lda, RealScalar *s, RealScalar *ru, int *ldu, RealScalar *rvt,
|
||||
int *ldvt, RealScalar * /*work*/, int *lwork, EIGEN_LAPACK_ARG_IF_COMPLEX(RealScalar * /*rwork*/) int * /*iwork*/,
|
||||
int *info) {
|
||||
// TODO exploit the work buffer
|
||||
bool query_size = *lwork == -1;
|
||||
int diag_size = (std::min)(*m, *n);
|
||||
@@ -53,37 +54,44 @@ EIGEN_LAPACK_FUNC(gesdd)
|
||||
|
||||
if (*n == 0 || *m == 0) return;
|
||||
|
||||
Scalar *a = reinterpret_cast<Scalar *>(ra);
|
||||
Scalar *u = reinterpret_cast<Scalar *>(ru);
|
||||
Scalar *vt = reinterpret_cast<Scalar *>(rvt);
|
||||
|
||||
PlainMatrixType mat(*m, *n);
|
||||
mat = matrix(a, *m, *n, *lda);
|
||||
|
||||
int option = *jobz == 'A' ? Eigen::ComputeFullU | Eigen::ComputeFullV
|
||||
: *jobz == 'S' ? Eigen::ComputeThinU | Eigen::ComputeThinV
|
||||
: *jobz == 'O' ? Eigen::ComputeThinU | Eigen::ComputeThinV
|
||||
: 0;
|
||||
|
||||
Eigen::BDCSVD<PlainMatrixType> svd(mat, option);
|
||||
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
|
||||
if (*jobz == 'A') {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeFullU | Eigen::ComputeFullV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(u, *m, *m, *ldu) = svd.matrixU();
|
||||
matrix(vt, *n, *n, *ldvt) = svd.matrixV().adjoint();
|
||||
} else if (*jobz == 'S') {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeThinU | Eigen::ComputeThinV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(u, *m, diag_size, *ldu) = svd.matrixU();
|
||||
matrix(vt, diag_size, *n, *ldvt) = svd.matrixV().adjoint();
|
||||
} else if (*jobz == 'O' && *m >= *n) {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeThinU | Eigen::ComputeThinV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(a, *m, *n, *lda) = svd.matrixU();
|
||||
matrix(vt, *n, *n, *ldvt) = svd.matrixV().adjoint();
|
||||
} else if (*jobz == 'O') {
|
||||
Eigen::BDCSVD<PlainMatrixType, Eigen::ComputeThinU | Eigen::ComputeThinV> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
matrix(u, *m, *m, *ldu) = svd.matrixU();
|
||||
matrix(a, diag_size, *n, *lda) = svd.matrixV().adjoint();
|
||||
} else {
|
||||
Eigen::BDCSVD<PlainMatrixType> svd(mat);
|
||||
make_vector(s, diag_size) = svd.singularValues().head(diag_size);
|
||||
}
|
||||
}
|
||||
|
||||
// computes the singular values/vectors a general M-by-N matrix A using two sided jacobi algorithm
|
||||
EIGEN_LAPACK_FUNC(gesvd)
|
||||
(char *jobu, char *jobv, int *m, int *n, Scalar *a, int *lda, RealScalar *s, Scalar *u, int *ldu, Scalar *vt, int *ldvt,
|
||||
Scalar * /*work*/, int *lwork, EIGEN_LAPACK_ARG_IF_COMPLEX(RealScalar * /*rwork*/) int *info) {
|
||||
(const char *jobu, const char *jobv, int *m, int *n, RealScalar *ra, int *lda, RealScalar *s, RealScalar *ru, int *ldu,
|
||||
RealScalar *rvt, int *ldvt, RealScalar * /*work*/, int *lwork,
|
||||
EIGEN_LAPACK_ARG_IF_COMPLEX(RealScalar * /*rwork*/) int *info) {
|
||||
// TODO exploit the work buffer
|
||||
bool query_size = *lwork == -1;
|
||||
int diag_size = (std::min)(*m, *n);
|
||||
@@ -116,6 +124,10 @@ EIGEN_LAPACK_FUNC(gesvd)
|
||||
|
||||
if (*n == 0 || *m == 0) return;
|
||||
|
||||
Scalar *a = reinterpret_cast<Scalar *>(ra);
|
||||
Scalar *u = reinterpret_cast<Scalar *>(ru);
|
||||
Scalar *vt = reinterpret_cast<Scalar *>(rvt);
|
||||
|
||||
PlainMatrixType mat(*m, *n);
|
||||
mat = matrix(a, *m, *n, *lda);
|
||||
|
||||
|
||||
128
scripts/git_commit_mrs_and_issues.py
Normal file
128
scripts/git_commit_mrs_and_issues.py
Normal file
@@ -0,0 +1,128 @@
|
||||
"""Search for MRs and issues related to a list of commits."""
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import sys
|
||||
import subprocess
|
||||
import re
|
||||
|
||||
|
||||
def find_cherry_pick_source(commit_hash: str):
|
||||
"""
|
||||
For a given commit hash, find the original commit it was cherry-picked from.
|
||||
|
||||
Args:
|
||||
commit_hash: The commit hash to inspect.
|
||||
|
||||
Returns:
|
||||
The full hash of the original commit if found, otherwise None.
|
||||
"""
|
||||
try:
|
||||
# Use 'git show' to get the full commit message for the given hash.
|
||||
# The '-s' flag suppresses the diff output.
|
||||
# The '--format=%B' flag prints only the raw commit body/message.
|
||||
commit_message = subprocess.check_output(
|
||||
["git", "show", "-s", "--format=%B", commit_hash.strip()],
|
||||
text=True,
|
||||
stderr=subprocess.PIPE,
|
||||
).strip()
|
||||
|
||||
# This regex looks for the specific line Git adds during a cherry-pick.
|
||||
# It captures the full 40-character SHA-1 hash.
|
||||
cherry_pick_pattern = re.compile(
|
||||
r"\(cherry picked from commit ([a-f0-9]{40})\)"
|
||||
)
|
||||
|
||||
# Search the entire commit message for the pattern.
|
||||
match = cherry_pick_pattern.search(commit_message)
|
||||
|
||||
if match:
|
||||
# If a match is found, return the captured group (the original commit hash).
|
||||
return match.group(1)
|
||||
else:
|
||||
return None
|
||||
|
||||
except subprocess.CalledProcessError as e:
|
||||
# This error occurs if the git command fails, e.g., for an invalid hash.
|
||||
print(
|
||||
f"Error processing commit '{commit_hash.strip()}': {e.stderr.strip()}",
|
||||
file=sys.stderr,
|
||||
)
|
||||
return None
|
||||
except FileNotFoundError:
|
||||
# This error occurs if the 'git' command itself isn't found.
|
||||
print(
|
||||
"Error: 'git' command not found. Please ensure Git is installed and in your PATH.",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Main function to read commit hashes from stdin and process them.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="A script to download all MRs from GitLab matching specified criteria."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--merge_requests_file",
|
||||
type=str,
|
||||
required=True,
|
||||
help="JSON file containing all the merge request information extracted via the GitLab API.",
|
||||
)
|
||||
|
||||
# E.g. git log --pretty=%H 3e819d83bf52abda16bb53565f6801df40d071f1..3.4.1
|
||||
parser.add_argument(
|
||||
"--commits",
|
||||
required=True,
|
||||
help="List of commits, '-' for stdin.",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
mrs = []
|
||||
with open(args.merge_requests_file, "r") as file:
|
||||
mrs = json.load(file)
|
||||
mrs_by_commit = {}
|
||||
|
||||
if args.commits == "-":
|
||||
commit_hashes = sys.stdin.readlines()
|
||||
else:
|
||||
with open(args.commits, "r") as file:
|
||||
commit_hashes = file.readlines()
|
||||
|
||||
# Arrange commits by SHA.
|
||||
for mr in mrs:
|
||||
for key in ["sha", "merge_commit_sha", "squash_commit_sha"]:
|
||||
sha = mr[key]
|
||||
if sha:
|
||||
mrs_by_commit[sha] = mr
|
||||
|
||||
# Find the MRs and issues related to each commit.
|
||||
info = {}
|
||||
for sha in commit_hashes:
|
||||
sha = sha.strip()
|
||||
if not sha:
|
||||
continue
|
||||
|
||||
# If a cherry-pick, extract the original hash.
|
||||
sha = find_cherry_pick_source(sha) or sha
|
||||
mr = mrs_by_commit.get(sha)
|
||||
|
||||
commit_info = {}
|
||||
if mr:
|
||||
commit_info["merge_request"] = mr["iid"]
|
||||
commit_info["related_issues"] = [
|
||||
issue["iid"] for issue in mr["related_issues"]
|
||||
]
|
||||
commit_info["closes_issues"] = [
|
||||
issue["iid"] for issue in mr["closes_issues"]
|
||||
]
|
||||
|
||||
info[sha] = commit_info
|
||||
|
||||
print(json.dumps(info, indent=2))
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
136
scripts/gitlab_api_deploy_package.py
Normal file
136
scripts/gitlab_api_deploy_package.py
Normal file
@@ -0,0 +1,136 @@
|
||||
"""Helper script to download source archives and upload them to the Eigen GitLab generic package registry."""
|
||||
|
||||
import os
|
||||
import requests
|
||||
import hashlib
|
||||
import argparse
|
||||
import sys
|
||||
import tempfile
|
||||
|
||||
EIGEN_PROJECT_ID = 15462818 # Taken from the gitlab project page.
|
||||
|
||||
|
||||
def calculate_sha256(filepath: str):
|
||||
"""Calculates the SHA256 checksum of a file."""
|
||||
sha256_hash = hashlib.sha256()
|
||||
with open(filepath, "rb") as f:
|
||||
# Read and update hash in chunks of 4K
|
||||
for byte_block in iter(lambda: f.read(4096), b""):
|
||||
sha256_hash.update(byte_block)
|
||||
return sha256_hash.hexdigest()
|
||||
|
||||
|
||||
def upload_to_generic_registry(
|
||||
gitlab_private_token: str, package_name: str, package_version: str, filepath: str
|
||||
):
|
||||
"""Uploads a file to the GitLab generic package registry."""
|
||||
headers = {"PRIVATE-TOKEN": gitlab_private_token}
|
||||
filename = os.path.basename(filepath)
|
||||
upload_url = f"https://gitlab.com/api/v4/projects/{EIGEN_PROJECT_ID}/packages/generic/{package_name}/{package_version}/{filename}"
|
||||
|
||||
print(f"Uploading {filename} to {upload_url}...")
|
||||
try:
|
||||
with open(filepath, "rb") as f:
|
||||
response = requests.put(upload_url, headers=headers, data=f)
|
||||
response.raise_for_status()
|
||||
print(f"Successfully uploaded {filename}.")
|
||||
return True
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Error uploading {filename}: {e}")
|
||||
if e.response is not None:
|
||||
print(f"Response content: {e.response.text}")
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
"""Main function to download archives and upload them to the registry."""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Download GitLab release archives for Eigen and upload them to the generic package registry."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--gitlab_private_token",
|
||||
type=str,
|
||||
help="GitLab private API token. Defaults to the GITLAB_PRIVATE_TOKEN environment variable if set.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--version",
|
||||
required=True,
|
||||
help="Specify a single version (tag name) to process.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--download-dir", help=f"Directory to store temporary downloads (optional)."
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.gitlab_private_token:
|
||||
args.gitlab_private_token = os.getenv("GITLAB_PRIVATE_TOKEN")
|
||||
if not args.gitlab_private_token:
|
||||
print("Could not determine GITLAB_PRIVATE_TOKEN.", file=sys.stderr)
|
||||
parser.print_usage()
|
||||
sys.exit(1)
|
||||
|
||||
# Create download directory if it doesn't exist.
|
||||
cleanup_download_dir = False
|
||||
if args.download_dir:
|
||||
if not os.path.exists(args.download_dir):
|
||||
cleanup_download_dir = True
|
||||
os.makedirs(args.download_dir)
|
||||
else:
|
||||
args.download_dir = tempfile.mkdtemp()
|
||||
cleanup_download_dir = True
|
||||
|
||||
for ext in ["tar.gz", "tar.bz2", "tar", "zip"]:
|
||||
archive_filename = f"eigen-{args.version}.{ext}"
|
||||
archive_url = f"https://gitlab.com/libeigen/eigen/-/archive/{args.version}/{archive_filename}"
|
||||
archive_filepath = os.path.join(args.download_dir, archive_filename)
|
||||
|
||||
# Download the archive
|
||||
print(f"Downloading {archive_url}...")
|
||||
try:
|
||||
response = requests.get(archive_url, stream=True)
|
||||
response.raise_for_status()
|
||||
with open(archive_filepath, "wb") as f:
|
||||
for chunk in response.iter_content(chunk_size=8192):
|
||||
f.write(chunk)
|
||||
print(f"Downloaded to {archive_filepath}")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"Error downloading {archive_url}: {e}. Skipping.")
|
||||
continue
|
||||
|
||||
# Calculate SHA256 sum
|
||||
sha256_sum = calculate_sha256(archive_filepath)
|
||||
print(f"SHA256 sum: {sha256_sum}")
|
||||
|
||||
# Create SHA256 sum file
|
||||
sha_filename = f"{archive_filename}.sha256"
|
||||
sha_filepath = os.path.join(args.download_dir, sha_filename)
|
||||
with open(sha_filepath, "w") as f:
|
||||
f.write(f"{sha256_sum} {archive_filename}\n")
|
||||
print(f"Created SHA256 file: {sha_filepath}")
|
||||
|
||||
# Upload archive to generic registry
|
||||
if not upload_to_generic_registry(
|
||||
args.gitlab_private_token, "eigen", args.version, archive_filepath
|
||||
):
|
||||
# If upload fails, clean up and move to the next release
|
||||
os.remove(archive_filepath)
|
||||
os.remove(sha_filepath)
|
||||
continue
|
||||
|
||||
# Upload SHA256 sum file to generic registry
|
||||
upload_to_generic_registry(
|
||||
args.gitlab_private_token, "eigen", args.version, sha_filepath
|
||||
)
|
||||
|
||||
# Clean up downloaded files
|
||||
print("Cleaning up local files...")
|
||||
os.remove(archive_filepath)
|
||||
os.remove(sha_filepath)
|
||||
|
||||
# Clean up the download directory if it's empty
|
||||
if cleanup_download_dir and not os.listdir(args.download_dir):
|
||||
os.rmdir(args.download_dir)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
174
scripts/gitlab_api_issues.py
Normal file
174
scripts/gitlab_api_issues.py
Normal file
@@ -0,0 +1,174 @@
|
||||
"""Downloads all issues from GitLab matching specified criteria."""
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import requests
|
||||
import sys
|
||||
|
||||
EIGEN_PROJECT_ID = 15462818 # Taken from the gitlab project page.
|
||||
|
||||
|
||||
def date(date_string: str):
|
||||
"""Convert a date YY-MM-DD string to a datetime object."""
|
||||
try:
|
||||
return datetime.strptime(date_string, "%Y-%m-%d")
|
||||
except ValueError:
|
||||
msg = f"Not a valid date: '{date_string}'. Expected format is YYYY-MM-DD."
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
|
||||
|
||||
def _get_api_query(
|
||||
gitlab_private_token: str, url: str, params: dict[str, str] | None = None
|
||||
):
|
||||
next_page = "1"
|
||||
if not params:
|
||||
params = dict()
|
||||
params["per_page"] = "100"
|
||||
headers = {"PRIVATE-TOKEN": gitlab_private_token}
|
||||
out = []
|
||||
while next_page:
|
||||
params["page"] = next_page
|
||||
try:
|
||||
resp = requests.head(url=url, params=params, headers=headers)
|
||||
if resp.status_code != 200:
|
||||
print("Request failed: ", resp, file=sys.stderr)
|
||||
break
|
||||
|
||||
next_next_page = resp.headers["x-next-page"]
|
||||
|
||||
resp = requests.get(url=url, params=params, headers=headers)
|
||||
if resp.status_code != 200:
|
||||
# Try again.
|
||||
continue
|
||||
|
||||
out.extend(resp.json())
|
||||
# Advance at the end, in case an exception occurs above so we can retry
|
||||
next_page = next_next_page
|
||||
except:
|
||||
# Keep same next_page
|
||||
continue
|
||||
return out
|
||||
|
||||
|
||||
def get_issues(
|
||||
gitlab_private_token: str,
|
||||
author_username: str | None = None,
|
||||
state: str | None = None,
|
||||
created_before: datetime.datetime | None = None,
|
||||
created_after: datetime.datetime | None = None,
|
||||
updated_after: datetime.datetime | None = None,
|
||||
updated_before: datetime.datetime | None = None,
|
||||
):
|
||||
"""Return list of merge requests.
|
||||
|
||||
Args:
|
||||
gitlab_token: GitLab API token.
|
||||
author_username: issue author username.
|
||||
state: issue state (opened, closed).
|
||||
created_after: datetime start of period.
|
||||
created_before: datetime end of period.
|
||||
updated_after: datetime start of period.
|
||||
updated_before: datetime end of period.
|
||||
|
||||
Returns:
|
||||
List of merge requests.
|
||||
"""
|
||||
url = f"https://gitlab.com/api/v4/projects/{str(EIGEN_PROJECT_ID)}/issues"
|
||||
params = dict()
|
||||
if author_username:
|
||||
params["author_username"] = author_username
|
||||
|
||||
if state:
|
||||
params["state"] = state
|
||||
|
||||
if created_before:
|
||||
params["created_before"] = created_before.isoformat()
|
||||
|
||||
if created_after:
|
||||
params["created_after"] = created_after.isoformat()
|
||||
|
||||
if updated_before:
|
||||
params["updated_before"] = updated_before.isoformat()
|
||||
|
||||
if updated_after:
|
||||
params["updated_after"] = updated_after.isoformat()
|
||||
|
||||
params["order_by"] = "created_at"
|
||||
params["sort"] = "asc"
|
||||
issues = _get_api_query(gitlab_private_token, url, params)
|
||||
for issue in issues:
|
||||
if int(issue["merge_requests_count"]) > 0:
|
||||
issue_iid = issue["iid"]
|
||||
issue["related_merge_requests"] = _get_api_query(
|
||||
gitlab_private_token, f"{url}/{issue_iid}/related_merge_requests"
|
||||
)
|
||||
issue["closed_by_merge_requests"] = _get_api_query(
|
||||
gitlab_private_token, f"{url}/{issue_iid}/closed_by"
|
||||
)
|
||||
return issues
|
||||
|
||||
|
||||
def main(_):
|
||||
parser = argparse.ArgumentParser(
|
||||
description="A script to download all issues from GitLab matching specified criteria."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--gitlab_private_token",
|
||||
type=str,
|
||||
help="GitLab private API token. Defaults to the GITLAB_PRIVATE_TOKEN environment variable if set.",
|
||||
)
|
||||
parser.add_argument("--author", type=str, help="The name of the author.")
|
||||
parser.add_argument(
|
||||
"--state",
|
||||
type=str,
|
||||
choices=["opened", "closed"],
|
||||
help="The state of the issue.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--created_before",
|
||||
type=date,
|
||||
help="The created-before date in YYYY-MM-DD format.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--created_after",
|
||||
type=date,
|
||||
help="The created-after date in YYYY-MM-DD format.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--updated_before",
|
||||
type=date,
|
||||
help="The updated-before date in YYYY-MM-DD format.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--updated_after",
|
||||
type=date,
|
||||
help="The updated-after date in YYYY-MM-DD format.",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.gitlab_private_token:
|
||||
args.gitlab_private_token = os.getenv("GITLAB_PRIVATE_TOKEN")
|
||||
if not args.gitlab_private_token:
|
||||
print("Could not determine GITLAB_PRIVATE_TOKEN.", file=sys.stderr)
|
||||
parser.print_usage()
|
||||
sys.exit(1)
|
||||
|
||||
# Parse the arguments from the command line
|
||||
issues = get_issues(
|
||||
gitlab_private_token=args.gitlab_private_token,
|
||||
author_username=args.author,
|
||||
state=args.state,
|
||||
created_before=args.created_before,
|
||||
created_after=args.created_after,
|
||||
updated_before=args.updated_before,
|
||||
updated_after=args.updated_after,
|
||||
)
|
||||
|
||||
issue_str = json.dumps(issues, indent=2)
|
||||
print(issue_str)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv)
|
||||
122
scripts/gitlab_api_labeller.py
Normal file
122
scripts/gitlab_api_labeller.py
Normal file
@@ -0,0 +1,122 @@
|
||||
"""Adds a label to a GitLab merge requests or issues."""
|
||||
|
||||
import os
|
||||
import sys
|
||||
import argparse
|
||||
import requests
|
||||
|
||||
EIGEN_PROJECT_ID = 15462818 # Taken from the gitlab project page.
|
||||
|
||||
|
||||
def add_label_to_mr(private_token: str, mr_iid: int, label: str):
|
||||
"""
|
||||
Adds a label to a specific merge request in a GitLab project.
|
||||
|
||||
Args:
|
||||
private_token: The user's private GitLab API token.
|
||||
mr_iid: The internal ID (IID) of the merge request.
|
||||
label: The label to add.
|
||||
"""
|
||||
api_url = (
|
||||
f"https://gitlab.com/api/v4/projects/{EIGEN_PROJECT_ID}/merge_requests/{mr_iid}"
|
||||
)
|
||||
headers = {"PRIVATE-TOKEN": private_token}
|
||||
# Using 'add_labels' ensures we don't overwrite existing labels.
|
||||
payload = {"add_labels": label}
|
||||
|
||||
try:
|
||||
response = requests.put(api_url, headers=headers, json=payload)
|
||||
response.raise_for_status() # Raises an HTTPError for bad responses (4xx or 5xx)
|
||||
print(f"✅ Successfully added label '{label}' to Merge Request !{mr_iid}.")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Error updating Merge Request !{mr_iid}: {e}", file=sys.stderr)
|
||||
if hasattr(e, "response") and e.response is not None:
|
||||
print(f" Response: {e.response.text}", file=sys.stderr)
|
||||
|
||||
|
||||
def add_label_to_issue(private_token: str, issue_iid: int, label: str):
|
||||
"""
|
||||
Adds a label to a specific issue in a GitLab project.
|
||||
|
||||
Args:
|
||||
private_token: The user's private GitLab API token.
|
||||
issue_iid: The internal ID (IID) of the issue.
|
||||
label: The label to add.
|
||||
"""
|
||||
api_url = (
|
||||
f"https://gitlab.com/api/v4/projects/{EIGEN_PROJECT_ID}/issues/{issue_iid}"
|
||||
)
|
||||
headers = {"PRIVATE-TOKEN": private_token}
|
||||
payload = {"add_labels": label}
|
||||
|
||||
try:
|
||||
response = requests.put(api_url, headers=headers, json=payload)
|
||||
response.raise_for_status()
|
||||
print(f"✅ Successfully added label '{label}' to Issue #{issue_iid}.")
|
||||
except requests.exceptions.RequestException as e:
|
||||
print(f"❌ Error updating Issue #{issue_iid}: {e}", file=sys.stderr)
|
||||
if hasattr(e, "response") and e.response is not None:
|
||||
print(f" Response: {e.response.text}", file=sys.stderr)
|
||||
|
||||
|
||||
def main():
|
||||
"""
|
||||
Main function to parse arguments and trigger the labelling process.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(
|
||||
description="Add a label to GitLab merge requests and issues.",
|
||||
formatter_class=argparse.RawTextHelpFormatter,
|
||||
)
|
||||
parser.add_argument("label", help="The label to add.")
|
||||
parser.add_argument(
|
||||
"--mrs",
|
||||
nargs="+",
|
||||
type=int,
|
||||
help="A space-separated list of Merge Request IIDs.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--issues", nargs="+", type=int, help="A space-separated list of Issue IIDs."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--gitlab_private_token",
|
||||
help="Your GitLab private access token. \n(Best practice is to use the GITLAB_PRIVATE_TOKEN environment variable instead.)",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
# Prefer environment variable for the token for better security.
|
||||
gitlab_private_token = args.gitlab_private_token or os.environ.get(
|
||||
"GITLAB_PRIVATE_TOKEN"
|
||||
)
|
||||
if not gitlab_private_token:
|
||||
print("Error: GitLab private token not found.", file=sys.stderr)
|
||||
print(
|
||||
"Please provide it using the --token argument or by setting the GITLAB_PRIVATE_TOKEN environment variable.",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
if not args.mrs and not args.issues:
|
||||
print(
|
||||
"Error: You must provide at least one merge request (--mrs) or issue (--issues) ID.",
|
||||
file=sys.stderr,
|
||||
)
|
||||
sys.exit(1)
|
||||
|
||||
print("-" * 30)
|
||||
|
||||
if args.mrs:
|
||||
print(f"Processing {len(args.mrs)} merge request(s)...")
|
||||
for mr_iid in args.mrs:
|
||||
add_label_to_mr(gitlab_private_token, mr_iid, args.label)
|
||||
|
||||
if args.issues:
|
||||
print(f"\nProcessing {len(args.issues)} issue(s)...")
|
||||
for issue_iid in args.issues:
|
||||
add_label_to_issue(gitlab_private_token, issue_iid, args.label)
|
||||
|
||||
print("-" * 30)
|
||||
print("Script finished.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
200
scripts/gitlab_api_mrs.py
Normal file
200
scripts/gitlab_api_mrs.py
Normal file
@@ -0,0 +1,200 @@
|
||||
"""Downloads all MRs from GitLab matching specified criteria."""
|
||||
|
||||
import argparse
|
||||
import datetime
|
||||
import json
|
||||
import os
|
||||
import requests
|
||||
import sys
|
||||
|
||||
EIGEN_PROJECT_ID = 15462818 # Taken from the gitlab project page.
|
||||
|
||||
|
||||
def date(date_string: str):
|
||||
"""Convert a date YY-MM-DD string to a datetime object."""
|
||||
try:
|
||||
return datetime.strptime(date_string, "%Y-%m-%d")
|
||||
except ValueError:
|
||||
msg = f"Not a valid date: '{date_string}'. Expected format is YYYY-MM-DD."
|
||||
raise argparse.ArgumentTypeError(msg)
|
||||
|
||||
|
||||
def _get_api_query(
|
||||
gitlab_private_token: str, url: str, params: dict[str, str] | None = None
|
||||
):
|
||||
next_page = "1"
|
||||
if not params:
|
||||
params = dict()
|
||||
params["per_page"] = "100"
|
||||
headers = {"PRIVATE-TOKEN": gitlab_private_token}
|
||||
out = []
|
||||
while next_page:
|
||||
params["page"] = next_page
|
||||
try:
|
||||
resp = requests.head(url=url, params=params, headers=headers)
|
||||
if resp.status_code != 200:
|
||||
print("Request failed: ", resp, file=sys.stderr)
|
||||
break
|
||||
|
||||
next_next_page = resp.headers["x-next-page"]
|
||||
|
||||
resp = requests.get(url=url, params=params, headers=headers)
|
||||
if resp.status_code != 200:
|
||||
# Try again.
|
||||
continue
|
||||
|
||||
out.extend(resp.json())
|
||||
# Advance at the end, in case an exception occurs above so we can retry
|
||||
next_page = next_next_page
|
||||
except:
|
||||
# Keep same next_page
|
||||
continue
|
||||
return out
|
||||
|
||||
|
||||
def get_merge_requests(
|
||||
gitlab_private_token: str,
|
||||
author_username: str | None = None,
|
||||
state: str | None = None,
|
||||
created_before: datetime.datetime | None = None,
|
||||
created_after: datetime.datetime | None = None,
|
||||
updated_after: datetime.datetime | None = None,
|
||||
updated_before: datetime.datetime | None = None,
|
||||
related_issues: bool = False,
|
||||
closes_issues: bool = False,
|
||||
):
|
||||
"""Return list of merge requests.
|
||||
|
||||
Args:
|
||||
gitlab_token: GitLab API token.
|
||||
author_username: MR author username.
|
||||
state: MR state (merged, opened, closed, locked).
|
||||
created_after: datetime start of period.
|
||||
created_before: datetime end of period.
|
||||
updated_after: datetime start of period.
|
||||
updated_before: datetime end of period.
|
||||
|
||||
Returns:
|
||||
List of merge requests.
|
||||
"""
|
||||
url = (
|
||||
"https://gitlab.com/api/v4/projects/"
|
||||
+ str(EIGEN_PROJECT_ID)
|
||||
+ "/merge_requests"
|
||||
)
|
||||
params = dict()
|
||||
if author_username:
|
||||
params["author_username"] = author_username
|
||||
|
||||
if state:
|
||||
params["state"] = state
|
||||
|
||||
if created_before:
|
||||
params["created_before"] = created_before.isoformat()
|
||||
|
||||
if created_after:
|
||||
params["created_after"] = created_after.isoformat()
|
||||
|
||||
if updated_before:
|
||||
params["updated_before"] = updated_before.isoformat()
|
||||
|
||||
if updated_after:
|
||||
params["updated_after"] = updated_after.isoformat()
|
||||
|
||||
params["order_by"] = "created_at"
|
||||
params["sort"] = "asc"
|
||||
|
||||
next_page = "1"
|
||||
params["per_page"] = "100"
|
||||
headers = {"PRIVATE-TOKEN": gitlab_private_token}
|
||||
|
||||
mrs = _get_api_query(gitlab_private_token, url, params)
|
||||
|
||||
if related_issues:
|
||||
for mr in mrs:
|
||||
mr["related_issues"] = _get_api_query(
|
||||
gitlab_private_token, f"{url}/{mr['iid']}/related_issues"
|
||||
)
|
||||
|
||||
if closes_issues:
|
||||
for mr in mrs:
|
||||
mr["closes_issues"] = _get_api_query(
|
||||
gitlab_private_token, f"{url}/{mr['iid']}/closes_issues"
|
||||
)
|
||||
|
||||
return mrs
|
||||
|
||||
|
||||
def main(_):
|
||||
parser = argparse.ArgumentParser(
|
||||
description="A script to download all MRs from GitLab matching specified criteria."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--gitlab_private_token",
|
||||
type=str,
|
||||
help="GitLab private API token. Defaults to the GITLAB_PRIVATE_TOKEN environment variable if set.",
|
||||
)
|
||||
parser.add_argument("--author", type=str, help="The name of the author.")
|
||||
parser.add_argument(
|
||||
"--state",
|
||||
type=str,
|
||||
choices=["merged", "opened", "closed", "locked"],
|
||||
help="The state of the MR.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--created_before",
|
||||
type=date,
|
||||
help="The created-before date in YYYY-MM-DD format.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--created_after",
|
||||
type=date,
|
||||
help="The created-after date in YYYY-MM-DD format.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--updated_before",
|
||||
type=date,
|
||||
help="The updated-before date in YYYY-MM-DD format.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--updated_after",
|
||||
type=date,
|
||||
help="The updated-after date in YYYY-MM-DD format.",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--related_issues", action="store_true", help="Query for related issues."
|
||||
)
|
||||
parser.add_argument(
|
||||
"--closes_issues",
|
||||
action="store_true",
|
||||
help="Query for issues closed by the MR.",
|
||||
)
|
||||
|
||||
args = parser.parse_args()
|
||||
|
||||
if not args.gitlab_private_token:
|
||||
args.gitlab_private_token = os.getenv("GITLAB_PRIVATE_TOKEN")
|
||||
if not args.gitlab_private_token:
|
||||
print("Could not determine GITLAB_PRIVATE_TOKEN.", file=sys.stderr)
|
||||
parser.print_usage()
|
||||
sys.exit(1)
|
||||
|
||||
# Parse the arguments from the command line
|
||||
mrs = get_merge_requests(
|
||||
gitlab_private_token=args.gitlab_private_token,
|
||||
author_username=args.author,
|
||||
state=args.state,
|
||||
created_before=args.created_before,
|
||||
created_after=args.created_after,
|
||||
updated_before=args.updated_before,
|
||||
updated_after=args.updated_after,
|
||||
related_issues=args.related_issues,
|
||||
closes_issues=args.closes_issues,
|
||||
)
|
||||
|
||||
mr_str = json.dumps(mrs, indent=2)
|
||||
print(mr_str)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main(sys.argv)
|
||||
@@ -1,9 +1,6 @@
|
||||
# Powershell script to set up MSVC environment.
|
||||
|
||||
param ($EIGEN_CI_MSVC_ARCH, $EIGEN_CI_MSVC_VER)
|
||||
|
||||
Set-PSDebug -Trace 1
|
||||
|
||||
function Get-ScriptDirectory { Split-Path $MyInvocation.ScriptName }
|
||||
|
||||
# Set defaults if not already set.
|
||||
|
||||
@@ -323,6 +323,7 @@ ei_add_test(threads_runqueue "-pthread" "${CMAKE_THREAD_LIBS_INIT}")
|
||||
ei_add_test(threads_non_blocking_thread_pool "-pthread" "${CMAKE_THREAD_LIBS_INIT}")
|
||||
ei_add_test(threads_fork_join "-pthread" "${CMAKE_THREAD_LIBS_INIT}")
|
||||
add_executable(bug1213 bug1213.cpp bug1213_main.cpp)
|
||||
target_link_libraries(bug1213 Eigen3::Eigen)
|
||||
|
||||
check_cxx_compiler_flag("-ffast-math" COMPILER_SUPPORT_FASTMATH)
|
||||
if(COMPILER_SUPPORT_FASTMATH)
|
||||
|
||||
@@ -126,12 +126,12 @@ void homogeneous(void) {
|
||||
}
|
||||
|
||||
{
|
||||
const Eigen::PermutationMatrix<Size> P{Eigen::Vector<int, Size>::EqualSpaced(0, 1)};
|
||||
const auto right = Eigen::Vector<Scalar, Size - 1>::Random().homogeneous();
|
||||
const auto left = Eigen::RowVector<Scalar, Size - 1>::Random().homogeneous();
|
||||
PermutationMatrix<Size> P{Vector<int, Size>::EqualSpaced(0, 1).reverse()};
|
||||
auto right = Vector<Scalar, Size - 1>::Random().eval().nestByValue().homogeneous();
|
||||
auto left = RowVector<Scalar, Size - 1>::Random().eval().nestByValue().homogeneous();
|
||||
|
||||
VERIFY_IS_APPROX(P * right, P * right.eval());
|
||||
VERIFY_IS_APPROX(left * P, left.eval() * P);
|
||||
VERIFY_IS_APPROX(P * right, right.reverse());
|
||||
VERIFY_IS_APPROX(left * P, left.reverse());
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -389,9 +389,6 @@ void print_gpu_device_info() {
|
||||
std::cout << " warpSize: " << deviceProp.warpSize << std::endl;
|
||||
std::cout << " regsPerBlock: " << deviceProp.regsPerBlock << std::endl;
|
||||
std::cout << " concurrentKernels: " << deviceProp.concurrentKernels << std::endl;
|
||||
std::cout << " clockRate: " << deviceProp.clockRate << std::endl;
|
||||
std::cout << " canMapHostMemory: " << deviceProp.canMapHostMemory << std::endl;
|
||||
std::cout << " computeMode: " << deviceProp.computeMode << std::endl;
|
||||
}
|
||||
|
||||
#endif // EIGEN_GPUCC
|
||||
|
||||
@@ -94,6 +94,19 @@ void jacobisvd_verify_inputs(const MatrixType& input = MatrixType()) {
|
||||
(int)ColPivHouseholderQRPreconditioner));
|
||||
}
|
||||
|
||||
template <typename MatrixType>
|
||||
void svd_triangular_matrix(const MatrixType& input = MatrixType()) {
|
||||
MatrixType matrix(input.rows(), input.cols());
|
||||
svd_fill_random(matrix);
|
||||
// Make sure that we only consider the 'Lower' part of the matrix.
|
||||
MatrixType matrix_self_adj = matrix.template selfadjointView<Lower>().toDenseMatrix();
|
||||
|
||||
JacobiSVD<MatrixType, ComputeFullV> svd_triangular(matrix.template selfadjointView<Lower>());
|
||||
JacobiSVD<MatrixType, ComputeFullV> svd_full(matrix_self_adj);
|
||||
|
||||
VERIFY_IS_APPROX(svd_triangular.singularValues(), svd_full.singularValues());
|
||||
}
|
||||
|
||||
namespace Foo {
|
||||
// older compiler require a default constructor for Bar
|
||||
// cf: https://stackoverflow.com/questions/7411515/
|
||||
@@ -211,5 +224,10 @@ EIGEN_DECLARE_TEST(jacobisvd) {
|
||||
|
||||
CALL_SUBTEST_55(svd_underoverflow<void>());
|
||||
|
||||
// Check that the TriangularBase constructor works
|
||||
CALL_SUBTEST_56((svd_triangular_matrix<Matrix3d>()));
|
||||
CALL_SUBTEST_57((svd_triangular_matrix<Matrix4f>()));
|
||||
CALL_SUBTEST_58((svd_triangular_matrix<Matrix<double, 10, 10>>()));
|
||||
|
||||
msvc_workaround();
|
||||
}
|
||||
|
||||
12
test/main.h
12
test/main.h
@@ -186,7 +186,7 @@ inline void on_temporary_creation(long int size, int) {
|
||||
|
||||
namespace Eigen {
|
||||
static std::vector<std::string> g_test_stack;
|
||||
// level == 0 <=> abort if test fail
|
||||
// level == 0 <=> return 1 if test fail
|
||||
// level >= 1 <=> warning message to std::cerr if test fail
|
||||
static int g_test_level = 0;
|
||||
static int g_repeat = 1;
|
||||
@@ -356,7 +356,7 @@ inline void verify_impl(bool condition, const char* testname, const char* file,
|
||||
const int test_stack_size = static_cast<int>(Eigen::g_test_stack.size());
|
||||
for (int i = test_stack_size - 1; i >= 0; --i) std::cerr << " - " << Eigen::g_test_stack[i] << "\n";
|
||||
std::cerr << "\n";
|
||||
if (Eigen::g_test_level == 0) abort();
|
||||
if (Eigen::g_test_level == 0) exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -858,6 +858,12 @@ inline void set_seed_from_string(const char* str) {
|
||||
g_has_set_seed = true;
|
||||
}
|
||||
|
||||
inline void set_seed_from_time() {
|
||||
using namespace std::chrono;
|
||||
long long ns = duration_cast<nanoseconds>(high_resolution_clock::now().time_since_epoch()).count();
|
||||
g_seed = static_cast<decltype(g_seed)>(ns);
|
||||
}
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
g_has_set_repeat = false;
|
||||
g_has_set_seed = false;
|
||||
@@ -896,7 +902,7 @@ int main(int argc, char* argv[]) {
|
||||
char* env_EIGEN_SEED = getenv("EIGEN_SEED");
|
||||
if (!g_has_set_seed && env_EIGEN_SEED) set_seed_from_string(env_EIGEN_SEED);
|
||||
|
||||
if (!g_has_set_seed) g_seed = (unsigned int)time(NULL);
|
||||
if (!g_has_set_seed) set_seed_from_time();
|
||||
if (!g_has_set_repeat) g_repeat = DEFAULT_REPEAT;
|
||||
|
||||
std::cout << "Initializing random number generator with seed " << g_seed << std::endl;
|
||||
|
||||
@@ -352,7 +352,7 @@ void test_cref_move_ctor(const DenseBase<Derived> &expr) {
|
||||
const double *data1 = cref1.data(), *obj_data1 = static_cast<CRefDerived &>(cref1).m_object.data();
|
||||
VERIFY(test_is_equal(data1, obj_data1, owns_data));
|
||||
CRef cref2(std::move(cref1));
|
||||
VERIFY_IS_EQUAL(data1, cref1.data());
|
||||
VERIFY_IS_EQUAL(std::uintptr_t(data1), std::uintptr_t(cref1.data()));
|
||||
const double *data2 = cref2.data(), *obj_data2 = static_cast<CRefDerived &>(cref2).m_object.data();
|
||||
VERIFY(test_is_equal(data1, data2, MatrixType::MaxSizeAtCompileTime == Dynamic || !owns_data));
|
||||
VERIFY(test_is_equal(data1, obj_data2, MatrixType::MaxSizeAtCompileTime == Dynamic && owns_data));
|
||||
|
||||
@@ -454,8 +454,16 @@ ArpackGeneralizedSelfAdjointEigenSolver<MatrixType, MatrixSolver, BisSPD>::compu
|
||||
}
|
||||
}
|
||||
|
||||
if (!(mode == 1 && isBempty) && !(mode == 2 && isBempty) && OP.info() != Success)
|
||||
std::cout << "Error factoring matrix" << std::endl;
|
||||
if (!(mode == 1 && isBempty) && !(mode == 2 && isBempty) && OP.info() != Success) {
|
||||
m_info = OP.info() delete[] v;
|
||||
delete[] iparam;
|
||||
delete[] ipntr;
|
||||
delete[] workd;
|
||||
delete[] workl;
|
||||
delete[] resid;
|
||||
m_isInitialized = false;
|
||||
return *this;
|
||||
}
|
||||
|
||||
do {
|
||||
internal::arpack_wrapper<Scalar, RealScalar>::saupd(&ido, bmat, &n, whch, &nev, &tol, resid, &ncv, v, &ldv, iparam,
|
||||
@@ -572,7 +580,7 @@ ArpackGeneralizedSelfAdjointEigenSolver<MatrixType, MatrixSolver, BisSPD>::compu
|
||||
delete[] workl;
|
||||
delete[] resid;
|
||||
|
||||
m_isInitialized = true;
|
||||
m_isInitialized = (m_info == Success);
|
||||
|
||||
return *this;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user