diff --git a/README.md b/README.md
index 07ca4518fd952ef5dcd767542af7baa438a0743d..1bd110aea20edbd73a4901709d926cc380d1f755 100644
--- a/README.md
+++ b/README.md
@@ -1,149 +1,80 @@
-# LieTorch: Tangent Space Backpropagation
-
-
-## Introduction
-
-The LieTorch library generalizes PyTorch to 3D transformation groups. Just as `torch.Tensor` is a multi-dimensional matrix of scalar elements, `lietorch.SE3` is a multi-dimensional matrix of SE3 elements. We support common tensor manipulations such as indexing, reshaping, and broadcasting. Group operations can be composed into computation graphs and backpropagation is automatically peformed in the tangent space of each element. For more details, please see our paper:
-
-
-
-[Tangent Space Backpropagation for 3D Transformation Groups](https://arxiv.org/pdf/2103.12032.pdf)
-Zachary Teed and Jia Deng, CVPR 2021
-
-```
-@inproceedings{teed2021tangent,
- title={Tangent Space Backpropagation for 3D Transformation Groups},
- author={Teed, Zachary and Deng, Jia},
- booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)},
- year={2021},
-}
+# Lietorch
+## 简介
+LieTorch 库将 PyTorch 扩展应用于三维变换群。就像 torch.Tensor 是一个由标量元素构成的多维矩阵一样,lietorch.SE3 是一个由 SE3 元素构成的多维矩阵。我们支持常见的张量操作,如索引、重塑和广播。群操作可以组合到计算图中,并且会在每个元素的切空间中自动进行反向传播
+
+## 安装
+组件支持组合
+
+ | PyTorch版本 | fastpt版本 |Lietorch版本 | DTK版本 | Python版本 | 推荐编译方式 |
+ | ----------- | ----------- | ----------- | ------------------------ | -----------------| ------------ |
+ | 2.5.1 | 2.1.0 |0.3 | >= 25.04 | 3.8、3.10、3.11 | fastpt不转码 |
+ | 2.4.1 | 2.0.1 |0.3 | >= 25.04 | 3.8、3.10、3.11 | fastpt不转码 |
+ | 其他 | 其他 | 其他 | 其他 | 3.8、3.10、3.11 | hip转码 |
+
++ pytorch版本大于2.4.1 && dtk版本大于25.04 推荐使用fastpt不转码编译。
+
+### 1、使用pip方式安装
+lietorch whl包下载目录:[光和开发者社区](https://download.sourcefind.cn:65024/4/main),选择对应的pytorch版本和python版本下载对应lietorch的whl包
+```shell
+pip install torch* (下载torch的whl包)
+pip install fastpt* --no-deps (下载fastpt的whl包)
+source /usr/local/bin/fastpt -E
+pip install lietorch* (下载的lietorch的whl包)
```
+### 2、使用源码编译方式安装
+#### 编译环境准备
+提供基于fastpt不转码编译:
-## Installation
-
-
-### Installing (from source):
-
-Requires torch >= 2 and CUDA >= 11. Tested up to torch==2.7 and CUDA 12. Make sure PyTorch and CUDA major versions match.
+1. 基于光源pytorch基础镜像环境:镜像下载地址:[光合开发者社区](https://sourcefind.cn/#/image/dcu/pytorch),根据pytorch、python、dtk及系统下载对应的镜像版本。
-```bash
-git clone --recursive https://github.com/princeton-vl/lietorch.git
-cd lietorch
-
-python3 -m venv .venv
-source .venv/bin/activate
-
-# install requirements
-pip install torch torchvision torchaudio wheel
-
-# optional: specify GPU architectures
-export TORCH_CUDA_ARCH_LIST="7.5;8.6;8.9;9.0"
-
-# install lietorch
-pip install --no-build-isolation .
+2. 基于现有python环境:安装pytorch,fastpt whl包下载目录:[光合开发者社区](https://sourcefind.cn/#/image/dcu/pytorch),根据python、dtk版本,下载对应pytorch的whl包。安装命令如下:
+```shell
+pip install torch* (下载torch的whl包)
+pip install fastpt* --no-deps (下载fastpt的whl包, 安装顺序,先安装torch,后安装fastpt)
+pip install pytest
+pip install wheel
```
-### Installing (with pip)
-```bash
-# optional: specify GPU architectures
-export TORCH_CUDA_ARCH_LIST="7.5;8.6;8.9;9.0"
-
-pip install --no-build-isolation git+https://github.com/princeton-vl/lietorch.git
+#### 源码编译安装
+- 代码下载
+```shell
+git clone http://developer.sourcefind.cn/codes/OpenDAS/lietorch.git # 根据编译需要切换分支
```
-
-
-To run the examples, you will need these additional libraries
-```bash
-pip install opencv-python open3d scipy pyyaml
+- 提供2种源码编译方式(进入lietorch目录):
```
+1. 设置不转码编译环境变量
+source /usr/local/bin/fastpt -C
-### Running Tests
+2. 编译whl包并安装
+python3 setup.py -v bdist_wheel
+pip install dist/lietorch* --no-deps
-After building, you can run the tests
-```bash
-./run_tests.sh
+3. 源码编译安装
+python3 setup.py install --no-deps
```
+#### 注意事项
++ 若使用pip install下载安装过慢,可添加pypi清华源:-i https://pypi.tuna.tsinghua.edu.cn/simple/
++ ROCM_PATH为dtk的路径,默认为/opt/dtk
++ 在pytorch2.5.1环境下编译需要支持c++17语法,打开setup.py文件,把文件中的 -std=c++14 修改为 -std=c++17
-
-
-## Overview
-
-LieTorch currently supports the 3D transformation groups.
-
-| Group | Dimension | Action |
-| -------| --------- | ------------- |
-| SO3 | 3 | rotation |
-| RxSO3 | 4 | rotation + scaling |
-| SE3 | 6 | rotation + translation |
-| Sim3 | 7 | rotation + translation + scaling |
-
-Each group supports the following differentiable operations:
-
-| Operation | Map | Description |
-| -------| --------| ------------- |
-| exp | g -> G | exponential map |
-| log | G -> g | logarithm map |
-| inv | G -> G | group inverse |
-| mul | G x G -> G | group multiplication |
-| adj | G x g -> g | adjoint |
-| adjT | G x g*-> g* | dual adjoint |
-| act | G x R^3 -> R^3 | action on point (set) |
-| act4 | G x P^3 -> P^3 | action on homogeneous point (set) |
-| matrix | G -> R^{4x4} | convert to 4x4 matrix
-| vec | G -> R^D | map to Euclidean embedding vector |
-| InitFromVec | R^D -> G | initialize group from Euclidean embedding
-
-
-
-
-### Simple Example:
-Compute the angles between all pairs of rotation matrices
-
-```python
-import torch
-from lietorch import SO3
-
-phi = torch.randn(8000, 3, device='cuda', requires_grad=True)
-R = SO3.exp(phi)
-
-# relative rotation matrix, SO3 ^ {8000 x 8000}
-dR = R[:,None].inv() * R[None,:]
-
-# 8000x8000 matrix of angles
-ang = dR.log().norm(dim=-1)
-
-# backpropogation in tangent space
-loss = ang.sum()
-loss.backward()
+## 验证
```
-
-
-### Converting between Groups Elements and Euclidean Embeddings
-We provide differentiable `FromVec` and `ToVec` functions which can be used to convert between LieGroup elements and their vector embeddings. Additional, the `.matrix` function returns a 4x4 transformation matrix.
-```python
-
-# random quaternion
-q = torch.randn(1, 4, requires_grad=True)
-q = q / q.norm(dim=-1, keepdim=True)
-
-# create SO3 object from quaternion (differentiable w.r.t q)
-R = SO3.InitFromVec(q)
-
-# 4x4 transformation matrix (differentiable w.r.t R)
-T = R.matrix()
-
-# map back to quaterion (differentiable w.r.t R)
-q = R.vec()
-
+python3
+Python 3.10.12 (main, Feb 4 2025, 14:57:36) [GCC 11.4.0] on linux
+Type "help", "copyright", "credits" or "license" for more information.
+>>> import lietorch
+>>> import lietorch
+>>> lietorch.__version__
+'0.3'
+>>>
```
+版本号与官方版本同步,查询该软件的版本号,例如0.3;
+## Known Issue
+- 无
-## Examples
-We provide real use cases in the examples directory
-1. Pose Graph Optimization
-2. Deep SE3/Sim3 Registrtion
-3. RGB-D SLAM / VO
-
-### Acknowledgements
-Many of the Lie Group implementations are adapted from [Sophus](https://github.com/strasdat/Sophus).
+## 参考资料
+- [README_ORIGIN](README_ORIGIN.md)
+- [README_zh-CN](README_zh-CN.md)
+- [https://github.com/princeton-vl/lietorch](https://github.com/princeton-vl/lietorch)
diff --git a/eigen-master/.clang-format b/eigen-master/.clang-format
new file mode 100644
index 0000000000000000000000000000000000000000..1f33cbed2e4486c6e783d5ff032b3b9edf6ba175
--- /dev/null
+++ b/eigen-master/.clang-format
@@ -0,0 +1,19 @@
+---
+BasedOnStyle: Google
+ColumnLimit: 120
+---
+Language: Cpp
+BasedOnStyle: Google
+ColumnLimit: 120
+StatementMacros:
+ - EIGEN_STATIC_ASSERT
+ - EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
+ - EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN
+SortIncludes: false
+AttributeMacros:
+- EIGEN_STRONG_INLINE
+- EIGEN_ALWAYS_INLINE
+- EIGEN_DEVICE_FUNC
+- EIGEN_DONT_INLINE
+- EIGEN_DEPRECATED
+- EIGEN_UNUSED
diff --git a/eigen-master/.git-blame-ignore-revs b/eigen-master/.git-blame-ignore-revs
new file mode 100644
index 0000000000000000000000000000000000000000..e89d7d7b08fa3483f5f9d13e683c91b78734f68f
--- /dev/null
+++ b/eigen-master/.git-blame-ignore-revs
@@ -0,0 +1,4 @@
+# First major clang-format MR (https://gitlab.com/libeigen/eigen/-/merge_requests/1429).
+f38e16c193d489c278c189bc06b448a94adb45fb
+# Formatting of tests, examples, benchmarks, et cetera (https://gitlab.com/libeigen/eigen/-/merge_requests/1432).
+46e9cdb7fea25d7f7aef4332b9c3ead3857e213d
diff --git a/eigen-master/.gitignore b/eigen-master/.gitignore
new file mode 100644
index 0000000000000000000000000000000000000000..369ae25b626a173c59eae665d4bb54a4f24d1410
--- /dev/null
+++ b/eigen-master/.gitignore
@@ -0,0 +1,41 @@
+qrc_*cxx
+*.orig
+*.pyc
+*.diff
+diff
+*.save
+save
+*.old
+*.gmo
+*.qm
+core
+core.*
+*.bak
+*~
+*.build*
+*.moc.*
+*.moc
+ui_*
+CMakeCache.txt
+tags
+.*.swp
+activity.png
+*.out
+*.php*
+*.log
+*.orig
+*.rej
+log
+patch
+*.patch
+a
+a.*
+lapack/testing
+lapack/reference
+.*project
+.settings
+Makefile
+!ci/build.gitlab-ci.yml
+!scripts/buildtests.in
+!Eigen/Core
+!Eigen/src/Core
diff --git a/eigen-master/.gitlab-ci.yml b/eigen-master/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..68cd68040dc0eab42cebc8a8379ad1476841a16c
--- /dev/null
+++ b/eigen-master/.gitlab-ci.yml
@@ -0,0 +1,34 @@
+# This file is part of Eigen, a lightweight C++ template library
+# for linear algebra.
+#
+# Copyright (C) 2023, The Eigen Authors
+#
+# This Source Code Form is subject to the terms of the Mozilla
+# 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/.
+
+stages:
+ - checkformat
+ - build
+ - test
+ - deploy
+
+variables:
+ # CMake build directory.
+ EIGEN_CI_BUILDDIR: .build
+ # Specify the CMake build target.
+ EIGEN_CI_BUILD_TARGET: ""
+ # If a test regex is specified, that will be selected.
+ # Otherwise, we will try a label if specified.
+ EIGEN_CI_CTEST_REGEX: ""
+ EIGEN_CI_CTEST_LABEL: ""
+ EIGEN_CI_CTEST_ARGS: ""
+
+include:
+ - "/ci/checkformat.gitlab-ci.yml"
+ - "/ci/common.gitlab-ci.yml"
+ - "/ci/build.linux.gitlab-ci.yml"
+ - "/ci/build.windows.gitlab-ci.yml"
+ - "/ci/test.linux.gitlab-ci.yml"
+ - "/ci/test.windows.gitlab-ci.yml"
+ - "/ci/deploy.gitlab-ci.yml"
diff --git a/eigen-master/.gitlab/issue_templates/Bug Report.md b/eigen-master/.gitlab/issue_templates/Bug Report.md
new file mode 100644
index 0000000000000000000000000000000000000000..0c49b0fe38d4a21c32fb4da83d073e992a0fa6a9
--- /dev/null
+++ b/eigen-master/.gitlab/issue_templates/Bug Report.md
@@ -0,0 +1,69 @@
+
+
+### Summary
+
+
+### Environment
+
+- **Operating System** : Windows/Linux
+- **Architecture** : x64/Arm64/PowerPC ...
+- **Eigen Version** : 3.3.9
+- **Compiler Version** : Gcc7.0
+- **Compile Flags** : -O3 -march=native
+- **Vector Extension** : SSE/AVX/NEON ...
+
+### Minimal Example
+
+
+```cpp
+//show your code here
+```
+
+### Steps to reproduce
+
+
+1. first step
+2. second step
+3. ...
+
+### What is the current *bug* behavior?
+
+
+### What is the expected *correct* behavior?
+
+
+### Relevant logs
+
+
+
+### Warning Messages
+
+
+
+### Benchmark scripts and results
+
+
+### Anything else that might help
+
+
+- [ ] Have a plan to fix this issue.
diff --git a/eigen-master/.gitlab/issue_templates/Feature Request.md b/eigen-master/.gitlab/issue_templates/Feature Request.md
new file mode 100644
index 0000000000000000000000000000000000000000..2c6f908af4f9ba0c056d980c89cbe1f6414db295
--- /dev/null
+++ b/eigen-master/.gitlab/issue_templates/Feature Request.md
@@ -0,0 +1,7 @@
+### Describe the feature you would like to be implemented.
+
+### Would such a feature be useful for other users? Why?
+
+### Any hints on how to implement the requested feature?
+
+### Additional resources
diff --git a/eigen-master/.gitlab/merge_request_templates/Merge Request Template.md b/eigen-master/.gitlab/merge_request_templates/Merge Request Template.md
new file mode 100644
index 0000000000000000000000000000000000000000..3fe963afa104b0c70bc9fcbe9e7824c8c839a99f
--- /dev/null
+++ b/eigen-master/.gitlab/merge_request_templates/Merge Request Template.md
@@ -0,0 +1,26 @@
+
+
+### Reference issue
+
+
+### What does this implement/fix?
+
+
+### Additional information
+
diff --git a/eigen-master/.hgeol b/eigen-master/.hgeol
new file mode 100644
index 0000000000000000000000000000000000000000..5327df161536cc2b12f8884e9935daaca82690b1
--- /dev/null
+++ b/eigen-master/.hgeol
@@ -0,0 +1,11 @@
+[patterns]
+*.sh = LF
+*.MINPACK = CRLF
+scripts/*.in = LF
+debug/msvc/*.dat = CRLF
+debug/msvc/*.natvis = CRLF
+unsupported/test/mpreal/*.* = CRLF
+** = native
+
+[repository]
+native = LF
diff --git a/eigen-master/CMakeLists.txt b/eigen-master/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4121e288a34e79c1dbf1a566fd3fb2bdea01eea1
--- /dev/null
+++ b/eigen-master/CMakeLists.txt
@@ -0,0 +1,786 @@
+cmake_minimum_required(VERSION 3.10.0)
+
+#==============================================================================
+# CMake Policy issues.
+#==============================================================================
+# Allow overriding options in a parent project via `set` before including Eigen.
+if (POLICY CMP0077)
+ cmake_policy (SET CMP0077 NEW)
+endif (POLICY CMP0077)
+
+# NOTE Remove setting the policy once the minimum required CMake version is
+# increased to at least 3.15. Retain enabling the export to package registry.
+if (POLICY CMP0090)
+ # The export command does not populate package registry by default
+ cmake_policy (SET CMP0090 NEW)
+ # Unless otherwise specified, always export to package registry to ensure
+ # backwards compatibility.
+ if (NOT DEFINED CMAKE_EXPORT_PACKAGE_REGISTRY)
+ set (CMAKE_EXPORT_PACKAGE_REGISTRY ON)
+ endif (NOT DEFINED CMAKE_EXPORT_PACKAGE_REGISTRY)
+endif (POLICY CMP0090)
+
+# Disable warning about find_package(CUDA).
+# CUDA language support is lacking for clang as the CUDA compiler
+# until at least cmake version 3.18. Even then, there seems to be
+# issues on Windows+Ninja in passing build flags. Continue using
+# the "old" way for now.
+if (POLICY CMP0146)
+ cmake_policy(SET CMP0146 OLD)
+endif ()
+
+#==============================================================================
+# CMake Project.
+#==============================================================================
+
+project(Eigen3)
+
+# Remove this block after bumping CMake to v3.21.0
+# PROJECT_IS_TOP_LEVEL is defined then by default
+if(CMAKE_VERSION VERSION_LESS 3.21.0)
+ if(CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
+ set(PROJECT_IS_TOP_LEVEL ON)
+ else()
+ set(PROJECT_IS_TOP_LEVEL OFF)
+ endif()
+endif()
+
+#==============================================================================
+# Build ON/OFF Settings.
+#==============================================================================
+# Determine if we should build tests.
+include(CMakeDependentOption)
+cmake_dependent_option(BUILD_TESTING "Enable creation of tests." ON "PROJECT_IS_TOP_LEVEL" OFF)
+option(EIGEN_BUILD_TESTING "Enable creation of Eigen tests." ${BUILD_TESTING})
+option(EIGEN_LEAVE_TEST_IN_ALL_TARGET "Leaves tests in the all target, needed by ctest for automatic building." OFF)
+
+# Determine if we should build BLAS/LAPACK implementations.
+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.
+ get_cmake_property(EIGEN_BUILD_SHARED_LIBS TARGET_SUPPORTS_SHARED_LIBS)
+ endif()
+endif()
+
+option(EIGEN_BUILD_BTL "Build benchmark suite" OFF)
+option(EIGEN_BUILD_SPBENCH "Build sparse benchmark suite" OFF)
+# Avoid building docs if included from another project.
+# Building documentation requires creating and running executables on the host
+# platform. We shouldn't do this if cross-compiling.
+if (PROJECT_IS_TOP_LEVEL AND NOT CMAKE_CROSSCOMPILING)
+ set(EIGEN_BUILD_DOC_DEFAULT ON)
+endif()
+option(EIGEN_BUILD_DOC "Enable creation of Eigen documentation" ${EIGEN_BUILD_DOC_DEFAULT})
+
+option(EIGEN_BUILD_DEMOS "Toggles the building of the Eigen demos" ${PROJECT_IS_TOP_LEVEL})
+
+# Disable pkgconfig only for native Windows builds
+if(NOT WIN32 OR NOT CMAKE_HOST_SYSTEM_NAME MATCHES Windows)
+ option(EIGEN_BUILD_PKGCONFIG "Build pkg-config .pc file for Eigen" ${PROJECT_IS_TOP_LEVEL})
+endif()
+option(EIGEN_BUILD_CMAKE_PACKAGE "Enables the creation of EigenConfig.cmake and related files" ${PROJECT_IS_TOP_LEVEL})
+
+if (EIGEN_BUILD_TESTING OR EIGEN_BUILD_BLAS OR EIGEN_BUILD_LAPACK OR EIGEN_BUILT_BTL OR EIGEN_BUILD_BTL OR EIGEN_BUILD_SPBENCH OR EIGEN_BUILD_DOC OR EIGEN_BUILD_DEMOS)
+ set(EIGEN_IS_BUILDING_ ON)
+endif()
+
+#==============================================================================
+# Version Info.
+#==============================================================================
+
+# Automatically parse the version number from header files.
+file(READ "${PROJECT_SOURCE_DIR}/Eigen/src/Core/util/Macros.h" _eigen_version_header)
+string(REGEX MATCH "define[ \t]+EIGEN_WORLD_VERSION[ \t]+([0-9]+)" _eigen_world_version_match "${_eigen_version_header}")
+set(EIGEN_WORLD_VERSION "${CMAKE_MATCH_1}")
+string(REGEX MATCH "define[ \t]+EIGEN_MAJOR_VERSION[ \t]+([0-9]+)" _eigen_major_version_match "${_eigen_version_header}")
+set(EIGEN_MAJOR_VERSION "${CMAKE_MATCH_1}")
+string(REGEX MATCH "define[ \t]+EIGEN_MINOR_VERSION[ \t]+([0-9]+)" _eigen_minor_version_match "${_eigen_version_header}")
+set(EIGEN_MINOR_VERSION "${CMAKE_MATCH_1}")
+set(EIGEN_VERSION_NUMBER ${EIGEN_WORLD_VERSION}.${EIGEN_MAJOR_VERSION}.${EIGEN_MINOR_VERSION})
+
+# If we are in a git repo, extract a changeset.
+if(IS_DIRECTORY ${CMAKE_SOURCE_DIR}/.git)
+ # if the git program is absent or this will leave the EIGEN_GIT_REVNUM string empty,
+ # but won't stop CMake.
+ execute_process(COMMAND git ls-remote -q ${CMAKE_SOURCE_DIR} HEAD OUTPUT_VARIABLE EIGEN_GIT_OUTPUT)
+endif()
+
+# extract the git rev number from the git output...
+if(EIGEN_GIT_OUTPUT)
+string(REGEX MATCH "^([0-9;a-f]+).*" EIGEN_GIT_CHANGESET_MATCH "${EIGEN_GIT_OUTPUT}")
+set(EIGEN_GIT_REVNUM "${CMAKE_MATCH_1}")
+endif()
+#...and show it next to the version number
+if(EIGEN_GIT_REVNUM)
+ set(EIGEN_VERSION "${EIGEN_VERSION_NUMBER} (git rev ${EIGEN_GIT_REVNUM})")
+else()
+ set(EIGEN_VERSION "${EIGEN_VERSION_NUMBER}")
+endif()
+
+#==============================================================================
+# Install Path Configuration.
+#==============================================================================
+
+# Unconditionally allow install of targets to support nested dependency
+# installations.
+#
+# Note: projects that depend on Eigen should _probably_ exclude installing
+# Eigen by default (e.g. by using EXCLUDE_FROM_ALL when using
+# FetchContent_Declare or add_subdirectory) to avoid overwriting a previous
+# installation.
+
+include(GNUInstallDirs)
+# Backward compatibility support for EIGEN_INCLUDE_INSTALL_DIR
+if(EIGEN_INCLUDE_INSTALL_DIR)
+ message(WARNING "EIGEN_INCLUDE_INSTALL_DIR is deprecated. Use INCLUDE_INSTALL_DIR instead.")
+endif()
+
+if(EIGEN_INCLUDE_INSTALL_DIR AND NOT INCLUDE_INSTALL_DIR)
+ set(INCLUDE_INSTALL_DIR ${EIGEN_INCLUDE_INSTALL_DIR}
+ CACHE PATH "The directory relative to CMAKE_INSTALL_PREFIX where Eigen header files are installed")
+else()
+ set(INCLUDE_INSTALL_DIR
+ "${CMAKE_INSTALL_INCLUDEDIR}/eigen3"
+ CACHE PATH "The directory relative to CMAKE_INSTALL_PREFIX where Eigen header files are installed"
+ )
+endif()
+set(CMAKEPACKAGE_INSTALL_DIR
+ "${CMAKE_INSTALL_DATADIR}/eigen3/cmake"
+ CACHE PATH "The directory relative to CMAKE_INSTALL_PREFIX where Eigen3Config.cmake is installed"
+ )
+set(PKGCONFIG_INSTALL_DIR
+ "${CMAKE_INSTALL_DATADIR}/pkgconfig"
+ CACHE PATH "The directory relative to CMAKE_INSTALL_PREFIX where eigen3.pc is installed"
+ )
+
+foreach(var INCLUDE_INSTALL_DIR CMAKEPACKAGE_INSTALL_DIR PKGCONFIG_INSTALL_DIR)
+ # If an absolute path is specified, make it relative to "{CMAKE_INSTALL_PREFIX}".
+ if(IS_ABSOLUTE "${${var}}")
+ file(RELATIVE_PATH "${var}" "${CMAKE_INSTALL_PREFIX}" "${${var}}")
+ endif()
+endforeach()
+
+#==============================================================================
+# Eigen Library.
+#==============================================================================
+
+set ( EIGEN_VERSION_STRING ${EIGEN_VERSION_NUMBER} )
+set ( EIGEN_VERSION_MAJOR ${EIGEN_WORLD_VERSION} )
+set ( EIGEN_VERSION_MINOR ${EIGEN_MAJOR_VERSION} )
+set ( EIGEN_VERSION_PATCH ${EIGEN_MINOR_VERSION} )
+
+# Alias Eigen_*_DIR to Eigen3_*_DIR:
+set(Eigen_SOURCE_DIR ${Eigen3_SOURCE_DIR})
+set(Eigen_BINARY_DIR ${Eigen3_BINARY_DIR})
+
+# Imported target support
+add_library (eigen INTERFACE)
+add_library (Eigen3::Eigen ALIAS eigen)
+target_include_directories (eigen INTERFACE
+ $
+ $
+)
+
+# Export as title case Eigen
+set_target_properties (eigen PROPERTIES EXPORT_NAME Eigen)
+
+#==============================================================================
+# Install Rule Configuration.
+#==============================================================================
+
+install(FILES
+ signature_of_eigen3_matrix_library
+ DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel
+ )
+
+if(EIGEN_BUILD_PKGCONFIG)
+ configure_file(eigen3.pc.in eigen3.pc @ONLY)
+ install(FILES ${CMAKE_CURRENT_BINARY_DIR}/eigen3.pc
+ DESTINATION ${PKGCONFIG_INSTALL_DIR})
+endif()
+
+install(DIRECTORY Eigen DESTINATION ${INCLUDE_INSTALL_DIR} COMPONENT Devel)
+
+install(TARGETS eigen EXPORT Eigen3Targets)
+
+if(EIGEN_BUILD_CMAKE_PACKAGE)
+ include (CMakePackageConfigHelpers)
+ configure_package_config_file (
+ ${CMAKE_CURRENT_SOURCE_DIR}/cmake/Eigen3Config.cmake.in
+ ${CMAKE_CURRENT_BINARY_DIR}/Eigen3Config.cmake
+ INSTALL_DESTINATION ${CMAKEPACKAGE_INSTALL_DIR}
+ NO_SET_AND_CHECK_MACRO # Eigen does not provide legacy style defines
+ NO_CHECK_REQUIRED_COMPONENTS_MACRO # Eigen does not provide components
+ )
+
+ # NOTE Remove the first code path once the minimum required CMake version is
+ # bumped to 3.14 or above.
+ if (CMAKE_VERSION VERSION_LESS 3.14)
+ # Remove CMAKE_SIZEOF_VOID_P from Eigen3ConfigVersion.cmake since Eigen does
+ # not depend on architecture specific settings or libraries. More
+ # specifically, an Eigen3Config.cmake generated from a 64 bit target can be
+ # used for 32 bit targets as well (and vice versa).
+ set (_Eigen3_CMAKE_SIZEOF_VOID_P ${CMAKE_SIZEOF_VOID_P})
+ unset (CMAKE_SIZEOF_VOID_P)
+ write_basic_package_version_file (Eigen3ConfigVersion.cmake
+ VERSION ${EIGEN_VERSION_NUMBER}
+ COMPATIBILITY SameMajorVersion)
+ set (CMAKE_SIZEOF_VOID_P ${_Eigen3_CMAKE_SIZEOF_VOID_P})
+ else (CMAKE_VERSION VERSION_LESS 3.14)
+ write_basic_package_version_file (Eigen3ConfigVersion.cmake
+ VERSION ${EIGEN_VERSION_NUMBER}
+ COMPATIBILITY SameMajorVersion
+ ARCH_INDEPENDENT)
+ endif (CMAKE_VERSION VERSION_LESS 3.14)
+
+ # The Eigen target will be located in the Eigen3 namespace. Other CMake
+ # targets can refer to it using Eigen3::Eigen.
+ export (TARGETS eigen NAMESPACE Eigen3:: FILE Eigen3Targets.cmake)
+ # Export Eigen3 package to CMake registry such that it can be easily found by
+ # CMake even if it has not been installed to a standard directory.
+ export (PACKAGE Eigen3)
+
+ install (EXPORT Eigen3Targets NAMESPACE Eigen3:: DESTINATION ${CMAKEPACKAGE_INSTALL_DIR})
+
+ install (FILES ${CMAKE_CURRENT_BINARY_DIR}/Eigen3Config.cmake
+ ${CMAKE_CURRENT_BINARY_DIR}/Eigen3ConfigVersion.cmake
+ DESTINATION ${CMAKEPACKAGE_INSTALL_DIR})
+
+ # Add uninstall target
+ if(NOT TARGET uninstall AND PROJECT_IS_TOP_LEVEL)
+ add_custom_target ( uninstall
+ COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/EigenUninstall.cmake)
+ endif()
+endif()
+
+#==============================================================================
+# General Build Configuration.
+#==============================================================================
+
+# Avoid setting the standard in a parent if unset.
+if(PROJECT_IS_TOP_LEVEL)
+ set(CMAKE_CXX_STANDARD 14 CACHE STRING "Default C++ standard")
+ set(CMAKE_CXX_STANDARD_REQUIRED ON CACHE BOOL "Require C++ standard")
+ set(CMAKE_CXX_EXTENSIONS OFF CACHE BOOL "Allow C++ extensions")
+endif()
+
+# Guard against in-source builds
+if(${CMAKE_SOURCE_DIR} STREQUAL ${CMAKE_BINARY_DIR})
+ message(FATAL_ERROR "In-source builds not allowed. Please make a new directory (called a build directory) and run CMake from there. You may need to remove CMakeCache.txt. ")
+endif()
+
+# Guard against bad build-type strings
+if (PROJECT_IS_TOP_LEVEL AND NOT CMAKE_BUILD_TYPE)
+ set(CMAKE_BUILD_TYPE "Release")
+endif()
+
+# Only try to figure out how to link the math library if we are building something.
+# Otherwise, let the parent project deal with dependencies.
+if (EIGEN_IS_BUILDING_)
+ # Use Eigen's cmake files.
+ set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake)
+
+ set(CMAKE_INCLUDE_CURRENT_DIR OFF)
+
+ find_package(StandardMathLibrary)
+ set(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "")
+ if(NOT STANDARD_MATH_LIBRARY_FOUND)
+ message(FATAL_ERROR
+ "Can't link to the standard math library. Please report to the Eigen developers, telling them about your platform.")
+ else()
+ if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
+ set(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO} ${STANDARD_MATH_LIBRARY}")
+ else()
+ set(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO "${STANDARD_MATH_LIBRARY}")
+ endif()
+ endif()
+ if(EIGEN_STANDARD_LIBRARIES_TO_LINK_TO)
+ message(STATUS "Standard libraries to link to explicitly: ${EIGEN_STANDARD_LIBRARIES_TO_LINK_TO}")
+ else()
+ message(STATUS "Standard libraries to link to explicitly: none")
+ endif()
+
+ # Default tests/examples/libraries to row-major.
+ option(EIGEN_DEFAULT_TO_ROW_MAJOR "Use row-major as default matrix storage order" OFF)
+ if(EIGEN_DEFAULT_TO_ROW_MAJOR)
+ add_definitions("-DEIGEN_DEFAULT_TO_ROW_MAJOR")
+ endif()
+endif()
+
+#==============================================================================
+# Test Configuration.
+#==============================================================================
+
+if (EIGEN_BUILD_TESTING)
+ function(ei_maybe_separate_arguments variable mode args)
+ # Use separate_arguments if the input is a single string containing a space.
+ # Otherwise, if it is already a list or doesn't have a space, just propagate
+ # the original value. This is to better support multi-argument lists.
+ list(LENGTH args list_length)
+ if (${list_length} EQUAL 1)
+ string(FIND "${args}" " " has_space)
+ if (${has_space} GREATER -1)
+ separate_arguments(args ${mode} "${args}")
+ endif()
+ endif()
+ set(${variable} ${args} PARENT_SCOPE)
+ endfunction(ei_maybe_separate_arguments)
+
+ include(CheckCXXCompilerFlag)
+ macro(ei_add_cxx_compiler_flag FLAG)
+ string(REGEX REPLACE "-" "" SFLAG1 ${FLAG})
+ string(REGEX REPLACE "\\+" "p" SFLAG ${SFLAG1})
+ check_cxx_compiler_flag(${FLAG} COMPILER_SUPPORT_${SFLAG})
+ if(COMPILER_SUPPORT_${SFLAG})
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${FLAG}")
+ endif()
+ endmacro()
+
+ set(EIGEN_TEST_CUSTOM_LINKER_FLAGS "" CACHE STRING "Additional linker flags when linking unit tests.")
+ set(EIGEN_TEST_CUSTOM_CXX_FLAGS "" CACHE STRING "Additional compiler flags when compiling unit tests.")
+ # Convert space-separated arguments into CMake lists for downstream consumption.
+ ei_maybe_separate_arguments(EIGEN_TEST_CUSTOM_LINKER_FLAGS NATIVE_COMMAND "${EIGEN_TEST_CUSTOM_LINKER_FLAGS}")
+ ei_maybe_separate_arguments(EIGEN_TEST_CUSTOM_CXX_FLAGS NATIVE_COMMAND "${EIGEN_TEST_CUSTOM_CXX_FLAGS}")
+
+ option(EIGEN_SPLIT_LARGE_TESTS "Split large tests into smaller executables" ON)
+ set(EIGEN_TEST_MAX_SIZE "320" CACHE STRING "Maximal matrix/vector size, default is 320")
+
+ # Flags for tests.
+ if(NOT MSVC)
+ # We assume that other compilers are partly compatible with GNUCC
+
+ # clang outputs some warnings for unknown flags that are not caught by check_cxx_compiler_flag
+ # adding -Werror turns such warnings into errors
+ check_cxx_compiler_flag("-Werror" COMPILER_SUPPORT_WERROR)
+ if(COMPILER_SUPPORT_WERROR)
+ set(CMAKE_REQUIRED_FLAGS "-Werror")
+ endif()
+ ei_add_cxx_compiler_flag("-pedantic")
+ ei_add_cxx_compiler_flag("-Wall")
+ ei_add_cxx_compiler_flag("-Wextra")
+ # ei_add_cxx_compiler_flag("-Weverything") # clang
+ ei_add_cxx_compiler_flag("-Wundef")
+ ei_add_cxx_compiler_flag("-Wcast-align")
+ ei_add_cxx_compiler_flag("-Wchar-subscripts")
+ ei_add_cxx_compiler_flag("-Wnon-virtual-dtor")
+ ei_add_cxx_compiler_flag("-Wunused-local-typedefs")
+ ei_add_cxx_compiler_flag("-Wpointer-arith")
+ ei_add_cxx_compiler_flag("-Wwrite-strings")
+ ei_add_cxx_compiler_flag("-Wformat-security")
+ ei_add_cxx_compiler_flag("-Wshorten-64-to-32")
+ ei_add_cxx_compiler_flag("-Wlogical-op")
+ ei_add_cxx_compiler_flag("-Wenum-conversion")
+ ei_add_cxx_compiler_flag("-Wc++11-extensions")
+ ei_add_cxx_compiler_flag("-Wdouble-promotion")
+ # ei_add_cxx_compiler_flag("-Wconversion")
+ ei_add_cxx_compiler_flag("-Wshadow")
+ ei_add_cxx_compiler_flag("-Wno-psabi")
+ ei_add_cxx_compiler_flag("-Wno-variadic-macros")
+ ei_add_cxx_compiler_flag("-Wno-long-long")
+ ei_add_cxx_compiler_flag("-fno-common")
+ ei_add_cxx_compiler_flag("-fstrict-aliasing")
+ ei_add_cxx_compiler_flag("-wd981") # disable ICC's "operands are evaluated in unspecified order" remark
+ ei_add_cxx_compiler_flag("-wd2304") # disable ICC's "warning #2304: non-explicit constructor with single argument may cause implicit type conversion" produced by -Wnon-virtual-dtor
+
+ # Clang emits warnings about unused flag.
+ if (NOT CMAKE_CXX_COMPILER_ID MATCHES "Clang")
+ ei_add_cxx_compiler_flag("-fno-check-new")
+ endif()
+
+
+ if(ANDROID_NDK)
+ ei_add_cxx_compiler_flag("-pie")
+ ei_add_cxx_compiler_flag("-fPIE")
+ endif()
+
+ set(CMAKE_REQUIRED_FLAGS "")
+
+ option(EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF)
+ if(EIGEN_TEST_SSE2)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse2")
+ message(STATUS "Enabling SSE2 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_SSE3 "Enable/Disable SSE3 in tests/examples" OFF)
+ if(EIGEN_TEST_SSE3)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse3")
+ message(STATUS "Enabling SSE3 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_SSSE3 "Enable/Disable SSSE3 in tests/examples" OFF)
+ if(EIGEN_TEST_SSSE3)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mssse3")
+ message(STATUS "Enabling SSSE3 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_SSE4_1 "Enable/Disable SSE4.1 in tests/examples" OFF)
+ if(EIGEN_TEST_SSE4_1)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.1")
+ message(STATUS "Enabling SSE4.1 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_SSE4_2 "Enable/Disable SSE4.2 in tests/examples" OFF)
+ if(EIGEN_TEST_SSE4_2)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -msse4.2")
+ message(STATUS "Enabling SSE4.2 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_AVX "Enable/Disable AVX in tests/examples" OFF)
+ if(EIGEN_TEST_AVX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx")
+ message(STATUS "Enabling AVX in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_FMA "Enable/Disable FMA in tests/examples" OFF)
+ if(EIGEN_TEST_FMA AND NOT EIGEN_TEST_NEON)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfma")
+ message(STATUS "Enabling FMA in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_AVX2 "Enable/Disable AVX2 in tests/examples" OFF)
+ if(EIGEN_TEST_AVX2)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx2 -mfma")
+ message(STATUS "Enabling AVX2 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_AVX512 "Enable/Disable AVX512 in tests/examples" OFF)
+ if(EIGEN_TEST_AVX512)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mfma")
+ message(STATUS "Enabling AVX512 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_AVX512DQ "Enable/Disable AVX512DQ in tests/examples" OFF)
+ if(EIGEN_TEST_AVX512DQ)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512dq -mfma")
+ message(STATUS "Enabling AVX512DQ in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_AVX512FP16 "Enable/Disable AVX512-FP16 in tests/examples" OFF)
+ if(EIGEN_TEST_AVX512FP16)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mavx512f -mfma -mavx512vl -mavx512fp16")
+ message(STATUS "Enabling AVX512-FP16 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_F16C "Enable/Disable F16C in tests/examples" OFF)
+ if(EIGEN_TEST_F16C)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mf16c")
+ message(STATUS "Enabling F16C in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_ALTIVEC "Enable/Disable AltiVec in tests/examples" OFF)
+ if(EIGEN_TEST_ALTIVEC)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -maltivec -mabi=altivec")
+ message(STATUS "Enabling AltiVec in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_VSX "Enable/Disable VSX in tests/examples" OFF)
+ if(EIGEN_TEST_VSX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m64 -mvsx")
+ message(STATUS "Enabling VSX in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_MSA "Enable/Disable MSA in tests/examples" OFF)
+ if(EIGEN_TEST_MSA)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mmsa")
+ message(STATUS "Enabling MSA in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_LSX "Enable/Disable LSX in tests/examples" OFF)
+ if(EIGEN_TEST_LSX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mlsx")
+ message(STATUS "Enabling LSX in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_NEON "Enable/Disable Neon in tests/examples" OFF)
+ if(EIGEN_TEST_NEON)
+ if(EIGEN_TEST_FMA)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon-vfpv4")
+ else()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpu=neon")
+ endif()
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfloat-abi=hard")
+ message(STATUS "Enabling NEON in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_NEON64 "Enable/Disable Neon in tests/examples" OFF)
+ if(EIGEN_TEST_NEON64)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+ message(STATUS "Enabling NEON in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_Z13 "Enable/Disable S390X(zEC13) ZVECTOR in tests/examples" OFF)
+ if(EIGEN_TEST_Z13)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z13 -mzvector")
+ message(STATUS "Enabling S390X(zEC13) ZVECTOR in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_Z14 "Enable/Disable S390X(zEC14) ZVECTOR in tests/examples" OFF)
+ if(EIGEN_TEST_Z14)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -march=z14 -mzvector")
+ message(STATUS "Enabling S390X(zEC13) ZVECTOR in tests/examples")
+ endif()
+
+ check_cxx_compiler_flag("-fopenmp" COMPILER_SUPPORT_OPENMP)
+ if(COMPILER_SUPPORT_OPENMP)
+ option(EIGEN_TEST_OPENMP "Enable/Disable OpenMP in tests/examples" OFF)
+ if(EIGEN_TEST_OPENMP)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fopenmp")
+ message(STATUS "Enabling OpenMP in tests/examples")
+ endif()
+ endif()
+
+ else()
+ # C4127 - conditional expression is constant
+ # C4714 - marked as __forceinline not inlined (I failed to deactivate it selectively)
+ # We can disable this warning in the unit tests since it is clear that it occurs
+ # because we are oftentimes returning objects that have a destructor or may
+ # throw exceptions - in particular in the unit tests we are throwing extra many
+ # exceptions to cover indexing errors.
+ # C4505 - unreferenced local function has been removed (impossible to deactivate selectively)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /EHsc /wd4127 /wd4505 /wd4714")
+
+ # replace all /Wx by /W4
+ string(REGEX REPLACE "/W[0-9]" "/W4" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
+
+ check_cxx_compiler_flag("/openmp" COMPILER_SUPPORT_OPENMP)
+ if(COMPILER_SUPPORT_OPENMP)
+ option(EIGEN_TEST_OPENMP "Enable/Disable OpenMP in tests/examples" OFF)
+ if(EIGEN_TEST_OPENMP)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /openmp")
+ message(STATUS "Enabling OpenMP in tests/examples")
+ endif()
+ endif()
+
+ option(EIGEN_TEST_SSE2 "Enable/Disable SSE2 in tests/examples" OFF)
+ if(EIGEN_TEST_SSE2)
+ if(NOT CMAKE_CL_64)
+ # arch is not supported on 64 bit systems, SSE is enabled automatically.
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:SSE2")
+ endif()
+ message(STATUS "Enabling SSE2 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_AVX "Enable/Disable AVX in tests/examples" OFF)
+ if(EIGEN_TEST_AVX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX")
+ message(STATUS "Enabling AVX in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_FMA "Enable/Disable FMA/AVX2 in tests/examples" OFF)
+ option(EIGEN_TEST_AVX2 "Enable/Disable FMA/AVX2 in tests/examples" OFF)
+ if((EIGEN_TEST_FMA AND NOT EIGEN_TEST_NEON) OR EIGEN_TEST_AVX2)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX2")
+ message(STATUS "Enabling FMA/AVX2 in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_AVX512 "Enable/Disable AVX512 in tests/examples" OFF)
+ option(EIGEN_TEST_AVX512DQ "Enable/Disable AVX512DQ in tests/examples" OFF)
+ if(EIGEN_TEST_AVX512 OR EIGEN_TEST_AVX512DQ)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /arch:AVX512")
+ message(STATUS "Enabling AVX512 in tests/examples")
+ endif()
+
+ endif(NOT MSVC)
+
+ option(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION "Disable explicit vectorization in tests/examples" OFF)
+ option(EIGEN_TEST_X87 "Force using X87 instructions. Implies no vectorization." OFF)
+ option(EIGEN_TEST_32BIT "Force generating 32bit code." OFF)
+
+ if(EIGEN_TEST_X87)
+ set(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION ON)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mfpmath=387")
+ message(STATUS "Forcing use of x87 instructions in tests/examples")
+ else()
+ message(STATUS "EIGEN_TEST_X87 ignored on your compiler")
+ endif()
+ endif()
+
+ if(EIGEN_TEST_32BIT)
+ if(CMAKE_COMPILER_IS_GNUCXX)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
+ message(STATUS "Forcing generation of 32-bit code in tests/examples")
+ else()
+ message(STATUS "EIGEN_TEST_32BIT ignored on your compiler")
+ endif()
+ endif()
+
+ if(EIGEN_TEST_NO_EXPLICIT_VECTORIZATION)
+ add_definitions(-DEIGEN_DONT_VECTORIZE=1)
+ message(STATUS "Disabling vectorization in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_NO_EXPLICIT_ALIGNMENT "Disable explicit alignment (hence vectorization) in tests/examples" OFF)
+ if(EIGEN_TEST_NO_EXPLICIT_ALIGNMENT)
+ add_definitions(-DEIGEN_DONT_ALIGN=1)
+ message(STATUS "Disabling alignment in tests/examples")
+ endif()
+
+ option(EIGEN_TEST_NO_EXCEPTIONS "Disables C++ exceptions" OFF)
+ if(EIGEN_TEST_NO_EXCEPTIONS)
+ ei_add_cxx_compiler_flag("-fno-exceptions")
+ message(STATUS "Disabling exceptions in tests/examples")
+ endif()
+
+ set(EIGEN_CUDA_CXX_FLAGS "" CACHE STRING "Additional flags to pass to the cuda compiler.")
+ set(EIGEN_CUDA_COMPUTE_ARCH 30 CACHE STRING "The CUDA compute architecture(s) to target when compiling CUDA code")
+
+ option(EIGEN_TEST_SYCL "Add Sycl support." OFF)
+ if(EIGEN_TEST_SYCL)
+ option(EIGEN_SYCL_DPCPP "Use the DPCPP Sycl implementation (DPCPP is default SYCL-Compiler)." ON)
+ option(EIGEN_SYCL_TRISYCL "Use the triSYCL Sycl implementation." OFF)
+ option(EIGEN_SYCL_ComputeCpp "Use the ComputeCPP Sycl implementation." OFF)
+
+ # Building options
+ # https://developer.codeplay.com/products/computecpp/ce/2.11.0/guides/eigen-overview/options-for-building-eigen-sycl
+ option(EIGEN_SYCL_USE_DEFAULT_SELECTOR "Use sycl default selector to select the preferred device." OFF)
+ option(EIGEN_SYCL_NO_LOCAL_MEM "Build for devices without dedicated shared memory." OFF)
+ option(EIGEN_SYCL_LOCAL_MEM "Allow the use of local memory (enabled by default)." ON)
+ option(EIGEN_SYCL_LOCAL_THREAD_DIM0 "Set work group size for dimension 0." 16)
+ option(EIGEN_SYCL_LOCAL_THREAD_DIM1 "Set work group size for dimension 1." 16)
+ option(EIGEN_SYCL_ASYNC_EXECUTION "Allow asynchronous execution (enabled by default)." ON)
+ option(EIGEN_SYCL_DISABLE_SKINNY "Disable optimization for tall/skinny matrices." OFF)
+ option(EIGEN_SYCL_DISABLE_DOUBLE_BUFFER "Disable double buffer." OFF)
+ option(EIGEN_SYCL_DISABLE_SCALAR "Disable scalar contraction." OFF)
+ option(EIGEN_SYCL_DISABLE_GEMV "Disable GEMV and create a single kernel to calculate contraction instead." OFF)
+
+ set(EIGEN_SYCL ON)
+ set(CMAKE_CXX_STANDARD 17)
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-declarations -Wno-shorten-64-to-32 -Wno-cast-align")
+ set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-deprecated-copy-with-user-provided-copy -Wno-unused-variable")
+ set (CMAKE_MODULE_PATH "${CMAKE_ROOT}/Modules" "cmake/Modules/" "${CMAKE_MODULE_PATH}")
+ find_package(Threads REQUIRED)
+ if(EIGEN_SYCL_TRISYCL)
+ message(STATUS "Using triSYCL")
+ include(FindTriSYCL)
+ elseif(EIGEN_SYCL_ComputeCpp)
+ message(STATUS "Using ComputeCPP SYCL")
+ include(FindComputeCpp)
+ set(COMPUTECPP_DRIVER_DEFAULT_VALUE OFF)
+ if (NOT MSVC)
+ set(COMPUTECPP_DRIVER_DEFAULT_VALUE ON)
+ endif()
+ option(COMPUTECPP_USE_COMPILER_DRIVER
+ "Use ComputeCpp driver instead of a 2 steps compilation"
+ ${COMPUTECPP_DRIVER_DEFAULT_VALUE}
+ )
+ else() #Default SYCL compiler is DPCPP (EIGEN_SYCL_DPCPP)
+ set(DPCPP_SYCL_TARGET "spir64" CACHE STRING "Default target for Intel CPU/GPU")
+ message(STATUS "Using DPCPP")
+ find_package(DPCPP)
+ add_definitions(-DSYCL_COMPILER_IS_DPCPP)
+ endif(EIGEN_SYCL_TRISYCL)
+ if(EIGEN_DONT_VECTORIZE_SYCL)
+ message(STATUS "Disabling SYCL vectorization in tests/examples")
+ # When disabling SYCL vectorization, also disable Eigen default vectorization
+ add_definitions(-DEIGEN_DONT_VECTORIZE=1)
+ add_definitions(-DEIGEN_DONT_VECTORIZE_SYCL=1)
+ endif()
+ endif()
+
+ include(EigenConfigureTesting)
+
+ if(EIGEN_LEAVE_TEST_IN_ALL_TARGET)
+ # CTest automatic test building relies on the "all" target.
+ add_subdirectory(test)
+ add_subdirectory(failtest)
+ else()
+ add_subdirectory(test EXCLUDE_FROM_ALL)
+ add_subdirectory(failtest EXCLUDE_FROM_ALL)
+ endif()
+
+ ei_testing_print_summary()
+
+ if (EIGEN_SPLIT_TESTSUITE)
+ ei_split_testsuite("${EIGEN_SPLIT_TESTSUITE}")
+ endif()
+endif(EIGEN_BUILD_TESTING)
+
+#==============================================================================
+# Other Build Configurations.
+#==============================================================================
+add_subdirectory(unsupported)
+
+if(EIGEN_BUILD_BLAS)
+ add_subdirectory(blas)
+endif()
+
+if (EIGEN_BUILD_LAPACK)
+ add_subdirectory(lapack)
+endif()
+
+if(EIGEN_BUILD_DOC)
+ add_subdirectory(doc EXCLUDE_FROM_ALL)
+endif()
+
+# TODO: consider also replacing EIGEN_BUILD_BTL by a custom target "make btl"?
+if(EIGEN_BUILD_BTL)
+ add_subdirectory(bench/btl EXCLUDE_FROM_ALL)
+endif()
+
+if(NOT WIN32 AND EIGEN_BUILD_SPBENCH)
+ add_subdirectory(bench/spbench EXCLUDE_FROM_ALL)
+endif()
+
+if (EIGEN_BUILD_DEMOS)
+ add_subdirectory(demos EXCLUDE_FROM_ALL)
+endif()
+
+if (PROJECT_IS_TOP_LEVEL)
+ # must be after test and unsupported, for configuring buildtests.in
+ add_subdirectory(scripts EXCLUDE_FROM_ALL)
+ configure_file(scripts/cdashtesting.cmake.in cdashtesting.cmake @ONLY)
+endif()
+
+#==============================================================================
+# Summary.
+#==============================================================================
+
+if(PROJECT_IS_TOP_LEVEL)
+ string(TOLOWER "${CMAKE_GENERATOR}" cmake_generator_tolower)
+ if(cmake_generator_tolower MATCHES "makefile")
+ message(STATUS "Available targets (use: make TARGET):")
+ else()
+ message(STATUS "Available targets (use: cmake --build . --target TARGET):")
+ endif()
+ message(STATUS "------------+--------------------------------------------------------------")
+ message(STATUS "Target | Description")
+ message(STATUS "------------+--------------------------------------------------------------")
+ message(STATUS "install | Install Eigen. Headers will be installed to:")
+ message(STATUS " | /")
+ message(STATUS " | Using the following values:")
+ message(STATUS " | CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX}")
+ message(STATUS " | INCLUDE_INSTALL_DIR: ${INCLUDE_INSTALL_DIR}")
+ message(STATUS " | Change the install location of Eigen headers using:")
+ message(STATUS " | cmake . -DCMAKE_INSTALL_PREFIX=yourprefix")
+ message(STATUS " | Or:")
+ message(STATUS " | cmake . -DINCLUDE_INSTALL_DIR=yourdir")
+ message(STATUS "uninstall | Remove files installed by the install target")
+ if (EIGEN_BUILD_DOC)
+ message(STATUS "doc | Generate the API documentation, requires Doxygen & LaTeX")
+ message(STATUS "install-doc | Install the API documentation")
+ endif()
+ if(EIGEN_BUILD_TESTING)
+ message(STATUS "check | Build and run the unit-tests. Read this page:")
+ message(STATUS " | http://eigen.tuxfamily.org/index.php?title=Tests")
+ endif()
+ if (EIGEN_BUILD_BLAS)
+ message(STATUS "blas | Build BLAS library (not the same thing as Eigen)")
+ endif()
+ if (EIGEN_BUILD_LAPACK)
+ message(STATUS "lapack | Build LAPACK subset library (not the same thing as Eigen)")
+ endif()
+ message(STATUS "------------+--------------------------------------------------------------")
+ message(STATUS "")
+endif()
+
+message(STATUS "")
+message(STATUS "Configured Eigen ${EIGEN_VERSION_NUMBER}")
+message(STATUS "")
diff --git a/eigen-master/COPYING.APACHE b/eigen-master/COPYING.APACHE
new file mode 100644
index 0000000000000000000000000000000000000000..61e948d2aaa3f7cd1db246b874d3b8ad1e8204fb
--- /dev/null
+++ b/eigen-master/COPYING.APACHE
@@ -0,0 +1,203 @@
+/*
+ Apache License
+ Version 2.0, January 2004
+ http://www.apache.org/licenses/
+
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+ 1. Definitions.
+
+ "License" shall mean the terms and conditions for use, reproduction,
+ and distribution as defined by Sections 1 through 9 of this document.
+
+ "Licensor" shall mean the copyright owner or entity authorized by
+ the copyright owner that is granting the License.
+
+ "Legal Entity" shall mean the union of the acting entity and all
+ other entities that control, are controlled by, or are under common
+ control with that entity. For the purposes of this definition,
+ "control" means (i) the power, direct or indirect, to cause the
+ direction or management of such entity, whether by contract or
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
+ outstanding shares, or (iii) beneficial ownership of such entity.
+
+ "You" (or "Your") shall mean an individual or Legal Entity
+ exercising permissions granted by this License.
+
+ "Source" form shall mean the preferred form for making modifications,
+ including but not limited to software source code, documentation
+ source, and configuration files.
+
+ "Object" form shall mean any form resulting from mechanical
+ transformation or translation of a Source form, including but
+ not limited to compiled object code, generated documentation,
+ and conversions to other media types.
+
+ "Work" shall mean the work of authorship, whether in Source or
+ Object form, made available under the License, as indicated by a
+ copyright notice that is included in or attached to the work
+ (an example is provided in the Appendix below).
+
+ "Derivative Works" shall mean any work, whether in Source or Object
+ form, that is based on (or derived from) the Work and for which the
+ editorial revisions, annotations, elaborations, or other modifications
+ represent, as a whole, an original work of authorship. For the purposes
+ of this License, Derivative Works shall not include works that remain
+ separable from, or merely link (or bind by name) to the interfaces of,
+ the Work and Derivative Works thereof.
+
+ "Contribution" shall mean any work of authorship, including
+ the original version of the Work and any modifications or additions
+ to that Work or Derivative Works thereof, that is intentionally
+ submitted to Licensor for inclusion in the Work by the copyright owner
+ or by an individual or Legal Entity authorized to submit on behalf of
+ the copyright owner. For the purposes of this definition, "submitted"
+ means any form of electronic, verbal, or written communication sent
+ to the Licensor or its representatives, including but not limited to
+ communication on electronic mailing lists, source code control systems,
+ and issue tracking systems that are managed by, or on behalf of, the
+ Licensor for the purpose of discussing and improving the Work, but
+ excluding communication that is conspicuously marked or otherwise
+ designated in writing by the copyright owner as "Not a Contribution."
+
+ "Contributor" shall mean Licensor and any individual or Legal Entity
+ on behalf of whom a Contribution has been received by Licensor and
+ subsequently incorporated within the Work.
+
+ 2. Grant of Copyright License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ copyright license to reproduce, prepare Derivative Works of,
+ publicly display, publicly perform, sublicense, and distribute the
+ Work and such Derivative Works in Source or Object form.
+
+ 3. Grant of Patent License. Subject to the terms and conditions of
+ this License, each Contributor hereby grants to You a perpetual,
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+ (except as stated in this section) patent license to make, have made,
+ use, offer to sell, sell, import, and otherwise transfer the Work,
+ where such license applies only to those patent claims licensable
+ by such Contributor that are necessarily infringed by their
+ Contribution(s) alone or by combination of their Contribution(s)
+ with the Work to which such Contribution(s) was submitted. If You
+ institute patent litigation against any entity (including a
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
+ or a Contribution incorporated within the Work constitutes direct
+ or contributory patent infringement, then any patent licenses
+ granted to You under this License for that Work shall terminate
+ as of the date such litigation is filed.
+
+ 4. Redistribution. You may reproduce and distribute copies of the
+ Work or Derivative Works thereof in any medium, with or without
+ modifications, and in Source or Object form, provided that You
+ meet the following conditions:
+
+ (a) You must give any other recipients of the Work or
+ Derivative Works a copy of this License; and
+
+ (b) You must cause any modified files to carry prominent notices
+ stating that You changed the files; and
+
+ (c) You must retain, in the Source form of any Derivative Works
+ that You distribute, all copyright, patent, trademark, and
+ attribution notices from the Source form of the Work,
+ excluding those notices that do not pertain to any part of
+ the Derivative Works; and
+
+ (d) If the Work includes a "NOTICE" text file as part of its
+ distribution, then any Derivative Works that You distribute must
+ include a readable copy of the attribution notices contained
+ within such NOTICE file, excluding those notices that do not
+ pertain to any part of the Derivative Works, in at least one
+ of the following places: within a NOTICE text file distributed
+ as part of the Derivative Works; within the Source form or
+ documentation, if provided along with the Derivative Works; or,
+ within a display generated by the Derivative Works, if and
+ wherever such third-party notices normally appear. The contents
+ of the NOTICE file are for informational purposes only and
+ do not modify the License. You may add Your own attribution
+ notices within Derivative Works that You distribute, alongside
+ or as an addendum to the NOTICE text from the Work, provided
+ that such additional attribution notices cannot be construed
+ as modifying the License.
+
+ You may add Your own copyright statement to Your modifications and
+ may provide additional or different license terms and conditions
+ for use, reproduction, or distribution of Your modifications, or
+ for any such Derivative Works as a whole, provided Your use,
+ reproduction, and distribution of the Work otherwise complies with
+ the conditions stated in this License.
+
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
+ any Contribution intentionally submitted for inclusion in the Work
+ by You to the Licensor shall be under the terms and conditions of
+ this License, without any additional terms or conditions.
+ Notwithstanding the above, nothing herein shall supersede or modify
+ the terms of any separate license agreement you may have executed
+ with Licensor regarding such Contributions.
+
+ 6. Trademarks. This License does not grant permission to use the trade
+ names, trademarks, service marks, or product names of the Licensor,
+ except as required for reasonable and customary use in describing the
+ origin of the Work and reproducing the content of the NOTICE file.
+
+ 7. Disclaimer of Warranty. Unless required by applicable law or
+ agreed to in writing, Licensor provides the Work (and each
+ Contributor provides its Contributions) on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+ implied, including, without limitation, any warranties or conditions
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+ PARTICULAR PURPOSE. You are solely responsible for determining the
+ appropriateness of using or redistributing the Work and assume any
+ risks associated with Your exercise of permissions under this License.
+
+ 8. Limitation of Liability. In no event and under no legal theory,
+ whether in tort (including negligence), contract, or otherwise,
+ unless required by applicable law (such as deliberate and grossly
+ negligent acts) or agreed to in writing, shall any Contributor be
+ liable to You for damages, including any direct, indirect, special,
+ incidental, or consequential damages of any character arising as a
+ result of this License or out of the use or inability to use the
+ Work (including but not limited to damages for loss of goodwill,
+ work stoppage, computer failure or malfunction, or any and all
+ other commercial damages or losses), even if such Contributor
+ has been advised of the possibility of such damages.
+
+ 9. Accepting Warranty or Additional Liability. While redistributing
+ the Work or Derivative Works thereof, You may choose to offer,
+ and charge a fee for, acceptance of support, warranty, indemnity,
+ or other liability obligations and/or rights consistent with this
+ License. However, in accepting such obligations, You may act only
+ on Your own behalf and on Your sole responsibility, not on behalf
+ of any other Contributor, and only if You agree to indemnify,
+ defend, and hold each Contributor harmless for any liability
+ incurred by, or claims asserted against, such Contributor by reason
+ of your accepting any such warranty or additional liability.
+
+ END OF TERMS AND CONDITIONS
+
+ APPENDIX: How to apply the Apache License to your work.
+
+ To apply the Apache License to your work, attach the following
+ boilerplate notice, with the fields enclosed by brackets "[]"
+ replaced with your own identifying information. (Don't include
+ the brackets!) The text should be enclosed in the appropriate
+ comment syntax for the file format. We also recommend that a
+ file or class name and description of purpose be included on the
+ same "printed page" as the copyright notice for easier
+ identification within third-party archives.
+
+ Copyright [yyyy] [name of copyright owner]
+
+ Licensed under the Apache License, Version 2.0 (the "License");
+ you may not use this file except in compliance with the License.
+ You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing, software
+ distributed under the License is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ See the License for the specific language governing permissions and
+ limitations under the License.
+*/
\ No newline at end of file
diff --git a/eigen-master/COPYING.BSD b/eigen-master/COPYING.BSD
new file mode 100644
index 0000000000000000000000000000000000000000..8964ddfdd0effc65e8dd90ea1d8c411efb30e5fd
--- /dev/null
+++ b/eigen-master/COPYING.BSD
@@ -0,0 +1,26 @@
+/*
+ Copyright (c) 2011, Intel Corporation. All rights reserved.
+
+ Redistribution and use in source and binary forms, with or without modification,
+ are permitted provided that the following conditions are met:
+
+ * Redistributions of source code must retain the above copyright notice, this
+ list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright notice,
+ this list of conditions and the following disclaimer in the documentation
+ and/or other materials provided with the distribution.
+ * Neither the name of Intel Corporation nor the names of its contributors may
+ be used to endorse or promote products derived from this software without
+ specific prior written permission.
+
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
+ ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+ (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+ LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
+ ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+*/
diff --git a/eigen-master/COPYING.MINPACK b/eigen-master/COPYING.MINPACK
new file mode 100644
index 0000000000000000000000000000000000000000..132cc3f33fa7fd4169a92b05241db59c8428a7ab
--- /dev/null
+++ b/eigen-master/COPYING.MINPACK
@@ -0,0 +1,51 @@
+Minpack Copyright Notice (1999) University of Chicago. All rights reserved
+
+Redistribution and use in source and binary forms, with or
+without modification, are permitted provided that the
+following conditions are met:
+
+1. Redistributions of source code must retain the above
+copyright notice, this list of conditions and the following
+disclaimer.
+
+2. Redistributions in binary form must reproduce the above
+copyright notice, this list of conditions and the following
+disclaimer in the documentation and/or other materials
+provided with the distribution.
+
+3. The end-user documentation included with the
+redistribution, if any, must include the following
+acknowledgment:
+
+ "This product includes software developed by the
+ University of Chicago, as Operator of Argonne National
+ Laboratory.
+
+Alternately, this acknowledgment may appear in the software
+itself, if and wherever such third-party acknowledgments
+normally appear.
+
+4. WARRANTY DISCLAIMER. THE SOFTWARE IS SUPPLIED "AS IS"
+WITHOUT WARRANTY OF ANY KIND. THE COPYRIGHT HOLDER, THE
+UNITED STATES, THE UNITED STATES DEPARTMENT OF ENERGY, AND
+THEIR EMPLOYEES: (1) DISCLAIM ANY WARRANTIES, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO ANY IMPLIED WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, TITLE
+OR NON-INFRINGEMENT, (2) DO NOT ASSUME ANY LEGAL LIABILITY
+OR RESPONSIBILITY FOR THE ACCURACY, COMPLETENESS, OR
+USEFULNESS OF THE SOFTWARE, (3) DO NOT REPRESENT THAT USE OF
+THE SOFTWARE WOULD NOT INFRINGE PRIVATELY OWNED RIGHTS, (4)
+DO NOT WARRANT THAT THE SOFTWARE WILL FUNCTION
+UNINTERRUPTED, THAT IT IS ERROR-FREE OR THAT ANY ERRORS WILL
+BE CORRECTED.
+
+5. LIMITATION OF LIABILITY. IN NO EVENT WILL THE COPYRIGHT
+HOLDER, THE UNITED STATES, THE UNITED STATES DEPARTMENT OF
+ENERGY, OR THEIR EMPLOYEES: BE LIABLE FOR ANY INDIRECT,
+INCIDENTAL, CONSEQUENTIAL, SPECIAL OR PUNITIVE DAMAGES OF
+ANY KIND OR NATURE, INCLUDING BUT NOT LIMITED TO LOSS OF
+PROFITS OR LOSS OF DATA, FOR ANY REASON WHATSOEVER, WHETHER
+SUCH LIABILITY IS ASSERTED ON THE BASIS OF CONTRACT, TORT
+(INCLUDING NEGLIGENCE OR STRICT LIABILITY), OR OTHERWISE,
+EVEN IF ANY OF SAID PARTIES HAS BEEN WARNED OF THE
+POSSIBILITY OF SUCH LOSS OR DAMAGES.
diff --git a/eigen-master/COPYING.MPL2 b/eigen-master/COPYING.MPL2
new file mode 100644
index 0000000000000000000000000000000000000000..ee6256cdb62a765749a71aae3abea32884301cd1
--- /dev/null
+++ b/eigen-master/COPYING.MPL2
@@ -0,0 +1,373 @@
+Mozilla Public License Version 2.0
+==================================
+
+1. Definitions
+--------------
+
+1.1. "Contributor"
+ means each individual or legal entity that creates, contributes to
+ the creation of, or owns Covered Software.
+
+1.2. "Contributor Version"
+ means the combination of the Contributions of others (if any) used
+ by a Contributor and that particular Contributor's Contribution.
+
+1.3. "Contribution"
+ means Covered Software of a particular Contributor.
+
+1.4. "Covered Software"
+ means Source Code Form to which the initial Contributor has attached
+ the notice in Exhibit A, the Executable Form of such Source Code
+ Form, and Modifications of such Source Code Form, in each case
+ including portions thereof.
+
+1.5. "Incompatible With Secondary Licenses"
+ means
+
+ (a) that the initial Contributor has attached the notice described
+ in Exhibit B to the Covered Software; or
+
+ (b) that the Covered Software was made available under the terms of
+ version 1.1 or earlier of the License, but not also under the
+ terms of a Secondary License.
+
+1.6. "Executable Form"
+ means any form of the work other than Source Code Form.
+
+1.7. "Larger Work"
+ means a work that combines Covered Software with other material, in
+ a separate file or files, that is not Covered Software.
+
+1.8. "License"
+ means this document.
+
+1.9. "Licensable"
+ means having the right to grant, to the maximum extent possible,
+ whether at the time of the initial grant or subsequently, any and
+ all of the rights conveyed by this License.
+
+1.10. "Modifications"
+ means any of the following:
+
+ (a) any file in Source Code Form that results from an addition to,
+ deletion from, or modification of the contents of Covered
+ Software; or
+
+ (b) any new file in Source Code Form that contains any Covered
+ Software.
+
+1.11. "Patent Claims" of a Contributor
+ means any patent claim(s), including without limitation, method,
+ process, and apparatus claims, in any patent Licensable by such
+ Contributor that would be infringed, but for the grant of the
+ License, by the making, using, selling, offering for sale, having
+ made, import, or transfer of either its Contributions or its
+ Contributor Version.
+
+1.12. "Secondary License"
+ means either the GNU General Public License, Version 2.0, the GNU
+ Lesser General Public License, Version 2.1, the GNU Affero General
+ Public License, Version 3.0, or any later versions of those
+ licenses.
+
+1.13. "Source Code Form"
+ means the form of the work preferred for making modifications.
+
+1.14. "You" (or "Your")
+ means an individual or a legal entity exercising rights under this
+ License. For legal entities, "You" includes any entity that
+ controls, is controlled by, or is under common control with You. For
+ purposes of this definition, "control" means (a) the power, direct
+ or indirect, to cause the direction or management of such entity,
+ whether by contract or otherwise, or (b) ownership of more than
+ fifty percent (50%) of the outstanding shares or beneficial
+ ownership of such entity.
+
+2. License Grants and Conditions
+--------------------------------
+
+2.1. Grants
+
+Each Contributor hereby grants You a world-wide, royalty-free,
+non-exclusive license:
+
+(a) under intellectual property rights (other than patent or trademark)
+ Licensable by such Contributor to use, reproduce, make available,
+ modify, display, perform, distribute, and otherwise exploit its
+ Contributions, either on an unmodified basis, with Modifications, or
+ as part of a Larger Work; and
+
+(b) under Patent Claims of such Contributor to make, use, sell, offer
+ for sale, have made, import, and otherwise transfer either its
+ Contributions or its Contributor Version.
+
+2.2. Effective Date
+
+The licenses granted in Section 2.1 with respect to any Contribution
+become effective for each Contribution on the date the Contributor first
+distributes such Contribution.
+
+2.3. Limitations on Grant Scope
+
+The licenses granted in this Section 2 are the only rights granted under
+this License. No additional rights or licenses will be implied from the
+distribution or licensing of Covered Software under this License.
+Notwithstanding Section 2.1(b) above, no patent license is granted by a
+Contributor:
+
+(a) for any code that a Contributor has removed from Covered Software;
+ or
+
+(b) for infringements caused by: (i) Your and any other third party's
+ modifications of Covered Software, or (ii) the combination of its
+ Contributions with other software (except as part of its Contributor
+ Version); or
+
+(c) under Patent Claims infringed by Covered Software in the absence of
+ its Contributions.
+
+This License does not grant any rights in the trademarks, service marks,
+or logos of any Contributor (except as may be necessary to comply with
+the notice requirements in Section 3.4).
+
+2.4. Subsequent Licenses
+
+No Contributor makes additional grants as a result of Your choice to
+distribute the Covered Software under a subsequent version of this
+License (see Section 10.2) or under the terms of a Secondary License (if
+permitted under the terms of Section 3.3).
+
+2.5. Representation
+
+Each Contributor represents that the Contributor believes its
+Contributions are its original creation(s) or it has sufficient rights
+to grant the rights to its Contributions conveyed by this License.
+
+2.6. Fair Use
+
+This License is not intended to limit any rights You have under
+applicable copyright doctrines of fair use, fair dealing, or other
+equivalents.
+
+2.7. Conditions
+
+Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted
+in Section 2.1.
+
+3. Responsibilities
+-------------------
+
+3.1. Distribution of Source Form
+
+All distribution of Covered Software in Source Code Form, including any
+Modifications that You create or to which You contribute, must be under
+the terms of this License. You must inform recipients that the Source
+Code Form of the Covered Software is governed by the terms of this
+License, and how they can obtain a copy of this License. You may not
+attempt to alter or restrict the recipients' rights in the Source Code
+Form.
+
+3.2. Distribution of Executable Form
+
+If You distribute Covered Software in Executable Form then:
+
+(a) such Covered Software must also be made available in Source Code
+ Form, as described in Section 3.1, and You must inform recipients of
+ the Executable Form how they can obtain a copy of such Source Code
+ Form by reasonable means in a timely manner, at a charge no more
+ than the cost of distribution to the recipient; and
+
+(b) You may distribute such Executable Form under the terms of this
+ License, or sublicense it under different terms, provided that the
+ license for the Executable Form does not attempt to limit or alter
+ the recipients' rights in the Source Code Form under this License.
+
+3.3. Distribution of a Larger Work
+
+You may create and distribute a Larger Work under terms of Your choice,
+provided that You also comply with the requirements of this License for
+the Covered Software. If the Larger Work is a combination of Covered
+Software with a work governed by one or more Secondary Licenses, and the
+Covered Software is not Incompatible With Secondary Licenses, this
+License permits You to additionally distribute such Covered Software
+under the terms of such Secondary License(s), so that the recipient of
+the Larger Work may, at their option, further distribute the Covered
+Software under the terms of either this License or such Secondary
+License(s).
+
+3.4. Notices
+
+You may not remove or alter the substance of any license notices
+(including copyright notices, patent notices, disclaimers of warranty,
+or limitations of liability) contained within the Source Code Form of
+the Covered Software, except that You may alter any license notices to
+the extent required to remedy known factual inaccuracies.
+
+3.5. Application of Additional Terms
+
+You may choose to offer, and to charge a fee for, warranty, support,
+indemnity or liability obligations to one or more recipients of Covered
+Software. However, You may do so only on Your own behalf, and not on
+behalf of any Contributor. You must make it absolutely clear that any
+such warranty, support, indemnity, or liability obligation is offered by
+You alone, and You hereby agree to indemnify every Contributor for any
+liability incurred by such Contributor as a result of warranty, support,
+indemnity or liability terms You offer. You may include additional
+disclaimers of warranty and limitations of liability specific to any
+jurisdiction.
+
+4. Inability to Comply Due to Statute or Regulation
+---------------------------------------------------
+
+If it is impossible for You to comply with any of the terms of this
+License with respect to some or all of the Covered Software due to
+statute, judicial order, or regulation then You must: (a) comply with
+the terms of this License to the maximum extent possible; and (b)
+describe the limitations and the code they affect. Such description must
+be placed in a text file included with all distributions of the Covered
+Software under this License. Except to the extent prohibited by statute
+or regulation, such description must be sufficiently detailed for a
+recipient of ordinary skill to be able to understand it.
+
+5. Termination
+--------------
+
+5.1. The rights granted under this License will terminate automatically
+if You fail to comply with any of its terms. However, if You become
+compliant, then the rights granted under this License from a particular
+Contributor are reinstated (a) provisionally, unless and until such
+Contributor explicitly and finally terminates Your grants, and (b) on an
+ongoing basis, if such Contributor fails to notify You of the
+non-compliance by some reasonable means prior to 60 days after You have
+come back into compliance. Moreover, Your grants from a particular
+Contributor are reinstated on an ongoing basis if such Contributor
+notifies You of the non-compliance by some reasonable means, this is the
+first time You have received notice of non-compliance with this License
+from such Contributor, and You become compliant prior to 30 days after
+Your receipt of the notice.
+
+5.2. If You initiate litigation against any entity by asserting a patent
+infringement claim (excluding declaratory judgment actions,
+counter-claims, and cross-claims) alleging that a Contributor Version
+directly or indirectly infringes any patent, then the rights granted to
+You by any and all Contributors for the Covered Software under Section
+2.1 of this License shall terminate.
+
+5.3. In the event of termination under Sections 5.1 or 5.2 above, all
+end user license agreements (excluding distributors and resellers) which
+have been validly granted by You or Your distributors under this License
+prior to termination shall survive termination.
+
+************************************************************************
+* *
+* 6. Disclaimer of Warranty *
+* ------------------------- *
+* *
+* Covered Software is provided under this License on an "as is" *
+* basis, without warranty of any kind, either expressed, implied, or *
+* statutory, including, without limitation, warranties that the *
+* Covered Software is free of defects, merchantable, fit for a *
+* particular purpose or non-infringing. The entire risk as to the *
+* quality and performance of the Covered Software is with You. *
+* Should any Covered Software prove defective in any respect, You *
+* (not any Contributor) assume the cost of any necessary servicing, *
+* repair, or correction. This disclaimer of warranty constitutes an *
+* essential part of this License. No use of any Covered Software is *
+* authorized under this License except under this disclaimer. *
+* *
+************************************************************************
+
+************************************************************************
+* *
+* 7. Limitation of Liability *
+* -------------------------- *
+* *
+* Under no circumstances and under no legal theory, whether tort *
+* (including negligence), contract, or otherwise, shall any *
+* Contributor, or anyone who distributes Covered Software as *
+* permitted above, be liable to You for any direct, indirect, *
+* special, incidental, or consequential damages of any character *
+* including, without limitation, damages for lost profits, loss of *
+* goodwill, work stoppage, computer failure or malfunction, or any *
+* and all other commercial damages or losses, even if such party *
+* shall have been informed of the possibility of such damages. This *
+* limitation of liability shall not apply to liability for death or *
+* personal injury resulting from such party's negligence to the *
+* extent applicable law prohibits such limitation. Some *
+* jurisdictions do not allow the exclusion or limitation of *
+* incidental or consequential damages, so this exclusion and *
+* limitation may not apply to You. *
+* *
+************************************************************************
+
+8. Litigation
+-------------
+
+Any litigation relating to this License may be brought only in the
+courts of a jurisdiction where the defendant maintains its principal
+place of business and such litigation shall be governed by laws of that
+jurisdiction, without reference to its conflict-of-law provisions.
+Nothing in this Section shall prevent a party's ability to bring
+cross-claims or counter-claims.
+
+9. Miscellaneous
+----------------
+
+This License represents the complete agreement concerning the subject
+matter hereof. If any provision of this License is held to be
+unenforceable, such provision shall be reformed only to the extent
+necessary to make it enforceable. Any law or regulation which provides
+that the language of a contract shall be construed against the drafter
+shall not be used to construe this License against a Contributor.
+
+10. Versions of the License
+---------------------------
+
+10.1. New Versions
+
+Mozilla Foundation is the license steward. Except as provided in Section
+10.3, no one other than the license steward has the right to modify or
+publish new versions of this License. Each version will be given a
+distinguishing version number.
+
+10.2. Effect of New Versions
+
+You may distribute the Covered Software under the terms of the version
+of the License under which You originally received the Covered Software,
+or under the terms of any subsequent version published by the license
+steward.
+
+10.3. Modified Versions
+
+If you create software not governed by this License, and you want to
+create a new license for such software, you may create and use a
+modified version of this License if you rename the license and remove
+any references to the name of the license steward (except to note that
+such modified license differs from this License).
+
+10.4. Distributing Source Code Form that is Incompatible With Secondary
+Licenses
+
+If You choose to distribute Source Code Form that is Incompatible With
+Secondary Licenses under the terms of this version of the License, the
+notice described in Exhibit B of this License must be attached.
+
+Exhibit A - Source Code Form License Notice
+-------------------------------------------
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at https://mozilla.org/MPL/2.0/.
+
+If it is not possible or desirable to put the notice in a particular
+file, then You may include the notice in a location (such as a LICENSE
+file in a relevant directory) where a recipient would be likely to look
+for such a notice.
+
+You may add additional accurate notices of copyright ownership.
+
+Exhibit B - "Incompatible With Secondary Licenses" Notice
+---------------------------------------------------------
+
+ This Source Code Form is "Incompatible With Secondary Licenses", as
+ defined by the Mozilla Public License, v. 2.0.
diff --git a/eigen-master/COPYING.README b/eigen-master/COPYING.README
new file mode 100644
index 0000000000000000000000000000000000000000..11af93ca790a55f1a2acdc71bb36acd80874d378
--- /dev/null
+++ b/eigen-master/COPYING.README
@@ -0,0 +1,6 @@
+Eigen is primarily MPL2 licensed. See COPYING.MPL2 and these links:
+ http://www.mozilla.org/MPL/2.0/
+ http://www.mozilla.org/MPL/2.0/FAQ.html
+
+Some files contain third-party code under BSD or other MPL2-compatible licenses,
+whence the other COPYING.* files here.
\ No newline at end of file
diff --git a/eigen-master/CTestConfig.cmake b/eigen-master/CTestConfig.cmake
new file mode 100644
index 0000000000000000000000000000000000000000..0ea24b8e3447872d8bbb08e574678af7ef4f937f
--- /dev/null
+++ b/eigen-master/CTestConfig.cmake
@@ -0,0 +1,17 @@
+## This file should be placed in the root directory of your project.
+## Then modify the CMakeLists.txt file in the root directory of your
+## project to incorporate the testing dashboard.
+## # The following are required to uses Dart and the Cdash dashboard
+## enable_testing()
+## include(CTest)
+set(CTEST_PROJECT_NAME "Eigen")
+set(CTEST_NIGHTLY_START_TIME "00:00:00 UTC")
+
+set(CTEST_DROP_METHOD "http")
+set(CTEST_DROP_SITE "my.cdash.org")
+set(CTEST_DROP_LOCATION "/submit.php?project=Eigen")
+set(CTEST_DROP_SITE_CDASH TRUE)
+#set(CTEST_PROJECT_SUBPROJECTS
+#Official
+#Unsupported
+#)
diff --git a/eigen-master/CTestCustom.cmake.in b/eigen-master/CTestCustom.cmake.in
new file mode 100644
index 0000000000000000000000000000000000000000..89e487f05a0d19e336302e09747f6b94df43db03
--- /dev/null
+++ b/eigen-master/CTestCustom.cmake.in
@@ -0,0 +1,4 @@
+
+set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_WARNINGS "2000")
+set(CTEST_CUSTOM_MAXIMUM_NUMBER_OF_ERRORS "2000")
+list(APPEND CTEST_CUSTOM_ERROR_EXCEPTION @EIGEN_CTEST_ERROR_EXCEPTION@)
diff --git a/eigen-master/Eigen/AccelerateSupport b/eigen-master/Eigen/AccelerateSupport
new file mode 100644
index 0000000000000000000000000000000000000000..533be688ed264cccc1041da0077ecd3768863169
--- /dev/null
+++ b/eigen-master/Eigen/AccelerateSupport
@@ -0,0 +1,52 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// This Source Code Form is subject to the terms of the Mozilla
+// 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/.
+
+#ifndef EIGEN_ACCELERATESUPPORT_MODULE_H
+#define EIGEN_ACCELERATESUPPORT_MODULE_H
+
+#include "SparseCore"
+
+#include "src/Core/util/DisableStupidWarnings.h"
+
+/** \ingroup Support_modules
+ * \defgroup AccelerateSupport_Module AccelerateSupport module
+ *
+ * This module provides an interface to the Apple Accelerate library.
+ * It provides the seven following main factorization classes:
+ * - class AccelerateLLT: a Cholesky (LL^T) factorization.
+ * - class AccelerateLDLT: the default LDL^T factorization.
+ * - class AccelerateLDLTUnpivoted: a Cholesky-like LDL^T factorization with only 1x1 pivots and no pivoting
+ * - class AccelerateLDLTSBK: an LDL^T factorization with Supernode Bunch-Kaufman and static pivoting
+ * - class AccelerateLDLTTPP: an LDL^T factorization with full threshold partial pivoting
+ * - class AccelerateQR: a QR factorization
+ * - class AccelerateCholeskyAtA: a QR factorization without storing Q (equivalent to A^TA = R^T R)
+ *
+ * \code
+ * #include
+ * \endcode
+ *
+ * In order to use this module, the Accelerate headers must be accessible from
+ * the include paths, and your binary must be linked to the Accelerate framework.
+ * The Accelerate library is only available on Apple hardware.
+ *
+ * Note that many of the algorithms can be influenced by the UpLo template
+ * argument. All matrices are assumed to be symmetric. For example, the following
+ * creates an LDLT factorization where your matrix is symmetric (implicit) and
+ * uses the lower triangle:
+ *
+ * \code
+ * AccelerateLDLT, Lower> ldlt;
+ * \endcode
+ */
+
+// IWYU pragma: begin_exports
+#include "src/AccelerateSupport/AccelerateSupport.h"
+// IWYU pragma: end_exports
+
+#include "src/Core/util/ReenableStupidWarnings.h"
+
+#endif // EIGEN_ACCELERATESUPPORT_MODULE_H
diff --git a/eigen-master/Eigen/Cholesky b/eigen-master/Eigen/Cholesky
new file mode 100644
index 0000000000000000000000000000000000000000..b05ed8278c67883007d2957d08ea5222ffd55170
--- /dev/null
+++ b/eigen-master/Eigen/Cholesky
@@ -0,0 +1,43 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// This Source Code Form is subject to the terms of the Mozilla
+// 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/.
+
+#ifndef EIGEN_CHOLESKY_MODULE_H
+#define EIGEN_CHOLESKY_MODULE_H
+
+#include "Core"
+#include "Jacobi"
+
+#include "src/Core/util/DisableStupidWarnings.h"
+
+/** \defgroup Cholesky_Module Cholesky module
+ *
+ *
+ *
+ * This module provides two variants of the Cholesky decomposition for selfadjoint (hermitian) matrices.
+ * Those decompositions are also accessible via the following methods:
+ * - MatrixBase::llt()
+ * - MatrixBase::ldlt()
+ * - SelfAdjointView::llt()
+ * - SelfAdjointView::ldlt()
+ *
+ * \code
+ * #include
+ * \endcode
+ */
+
+// IWYU pragma: begin_exports
+#include "src/Cholesky/LLT.h"
+#include "src/Cholesky/LDLT.h"
+#ifdef EIGEN_USE_LAPACKE
+#include "src/misc/lapacke_helpers.h"
+#include "src/Cholesky/LLT_LAPACKE.h"
+#endif
+// IWYU pragma: end_exports
+
+#include "src/Core/util/ReenableStupidWarnings.h"
+
+#endif // EIGEN_CHOLESKY_MODULE_H
diff --git a/eigen-master/Eigen/CholmodSupport b/eigen-master/Eigen/CholmodSupport
new file mode 100644
index 0000000000000000000000000000000000000000..adc5f8d63e755b4f21531fecc6d471f8596fffb5
--- /dev/null
+++ b/eigen-master/Eigen/CholmodSupport
@@ -0,0 +1,48 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// This Source Code Form is subject to the terms of the Mozilla
+// 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/.
+
+#ifndef EIGEN_CHOLMODSUPPORT_MODULE_H
+#define EIGEN_CHOLMODSUPPORT_MODULE_H
+
+#include "SparseCore"
+
+#include "src/Core/util/DisableStupidWarnings.h"
+
+#include
+
+/** \ingroup Support_modules
+ * \defgroup CholmodSupport_Module CholmodSupport module
+ *
+ * This module provides an interface to the Cholmod library which is part of the suitesparse package. It provides the two following main factorization classes:
+ * - class CholmodSupernodalLLT: a supernodal LLT Cholesky factorization.
+ * - class CholmodDecomposition: a general L(D)LT Cholesky factorization with automatic or explicit runtime selection of
+ * the underlying factorization method (supernodal or simplicial).
+ *
+ * For the sake of completeness, this module also propose the two following classes:
+ * - class CholmodSimplicialLLT
+ * - class CholmodSimplicialLDLT
+ * Note that these classes does not bring any particular advantage compared to the built-in
+ * SimplicialLLT and SimplicialLDLT factorization classes.
+ *
+ * \code
+ * #include
+ * \endcode
+ *
+ * In order to use this module, the cholmod headers must be accessible from the include paths, and your binary must be
+ * linked to the cholmod library and its dependencies. The dependencies depend on how cholmod has been compiled. For a
+ * cmake based project, you can use our FindCholmod.cmake module to help you in this task.
+ *
+ */
+
+// IWYU pragma: begin_exports
+#include "src/CholmodSupport/CholmodSupport.h"
+// IWYU pragma: end_exports
+
+#include "src/Core/util/ReenableStupidWarnings.h"
+
+#endif // EIGEN_CHOLMODSUPPORT_MODULE_H
diff --git a/eigen-master/Eigen/Core b/eigen-master/Eigen/Core
new file mode 100644
index 0000000000000000000000000000000000000000..6ae069a92c08ba6dc26493e20e70e7cd08297ecc
--- /dev/null
+++ b/eigen-master/Eigen/Core
@@ -0,0 +1,428 @@
+// This file is part of Eigen, a lightweight C++ template library
+// for linear algebra.
+//
+// Copyright (C) 2008 Gael Guennebaud
+// Copyright (C) 2007-2011 Benoit Jacob
+//
+// This Source Code Form is subject to the terms of the Mozilla
+// 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/.
+
+#ifndef EIGEN_CORE_MODULE_H
+#define EIGEN_CORE_MODULE_H
+
+// first thing Eigen does: stop the compiler from reporting useless warnings.
+#include "src/Core/util/DisableStupidWarnings.h"
+
+// then include this file where all our macros are defined. It's really important to do it first because
+// it's where we do all the compiler/OS/arch detections and define most defaults.
+#include "src/Core/util/Macros.h"
+
+// This detects SSE/AVX/NEON/etc. and configure alignment settings
+#include "src/Core/util/ConfigureVectorization.h"
+
+// We need cuda_runtime.h/hip_runtime.h to ensure that
+// the EIGEN_USING_STD macro works properly on the device side
+#if defined(EIGEN_CUDACC)
+#include
+#elif defined(EIGEN_HIPCC)
+#include
+#endif
+
+#ifdef EIGEN_EXCEPTIONS
+#include
+#endif
+
+// Disable the ipa-cp-clone optimization flag with MinGW 6.x or older (enabled by default with -O3)
+// See http://eigen.tuxfamily.org/bz/show_bug.cgi?id=556 for details.
+#if EIGEN_COMP_MINGW && EIGEN_GNUC_STRICT_LESS_THAN(6, 0, 0)
+#pragma GCC optimize("-fno-ipa-cp-clone")
+#endif
+
+// Prevent ICC from specializing std::complex operators that silently fail
+// on device. This allows us to use our own device-compatible specializations
+// instead.
+#if EIGEN_COMP_ICC && defined(EIGEN_GPU_COMPILE_PHASE) && !defined(_OVERRIDE_COMPLEX_SPECIALIZATION_)
+#define _OVERRIDE_COMPLEX_SPECIALIZATION_ 1
+#endif
+#include
+
+// this include file manages BLAS and MKL related macros
+// and inclusion of their respective header files
+#include "src/Core/util/MKL_support.h"
+
+#if defined(EIGEN_HAS_CUDA_FP16) || defined(EIGEN_HAS_HIP_FP16)
+#define EIGEN_HAS_GPU_FP16
+#endif
+
+#if defined(EIGEN_HAS_CUDA_BF16) || defined(EIGEN_HAS_HIP_BF16)
+#define EIGEN_HAS_GPU_BF16
+#endif
+
+#if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE)
+#define EIGEN_HAS_OPENMP
+#endif
+
+#ifdef EIGEN_HAS_OPENMP
+#include
+#include
+#endif
+
+// MSVC for windows mobile does not have the errno.h file
+#if !(EIGEN_COMP_MSVC && EIGEN_OS_WINCE) && !EIGEN_COMP_ARM
+#define EIGEN_HAS_ERRNO
+#endif
+
+#ifdef EIGEN_HAS_ERRNO
+#include
+#endif
+#include
+#include
+#include
+#include
+#ifndef EIGEN_NO_IO
+#include
+#include
+#endif
+#include
+#include
+#include
+#include // for CHAR_BIT
+// for min/max:
+#include
+
+#include
+#include
+
+// for std::is_nothrow_move_assignable
+#include
+
+// for std::this_thread::yield().
+#if !defined(EIGEN_USE_BLAS) && (defined(EIGEN_HAS_OPENMP) || defined(EIGEN_GEMM_THREADPOOL))
+#include
+#endif
+
+// for outputting debug info
+#ifdef EIGEN_DEBUG_ASSIGN
+#include
+#endif
+
+// required for __cpuid, needs to be included after cmath
+// also required for _BitScanReverse on Windows on ARM
+#if EIGEN_COMP_MSVC && (EIGEN_ARCH_i386_OR_x86_64 || EIGEN_ARCH_ARM64) && !EIGEN_OS_WINCE
+#include
+#endif
+
+#if defined(EIGEN_USE_SYCL)
+#undef min
+#undef max
+#undef isnan
+#undef isinf
+#undef isfinite
+#include
+#include