NEML2 1.4.0
|
Compiling the NEML2 core library requires
Other PyTorch releases with a few minor versions around are likely to be compatible. In the PyTorch official download page, several download options are provided: conda, pip, libTorch, and source distribution.
LIBTORCH_DIR
to be the location of libTorch when using CMake to configure NEML2.If no PyTorch installation can be detected and LIBTORCH_DIR
is not set at configure time, the NEML2 CMake script will automatically download and use the libTorch obtained from the official website. Note, however, that this method only works on Linux and Mac systems.
First, obtain the NEML2 source code.
Then, configure NEML2. See build customization for possible configuration options.
Finally, compile NEML2.
where N
is the number of cores to use for parallel compilation.
The compiled NEML2 can be installed as a system library.
For more fine-grained control over the configure, build, and install commands, please refer to the CMake documentation.
NEML2 also provides an experimental Python package which provides bindings for the primitive tensors and parsers for deserializing and running material models. Package source distributions are available on PyPI, but package wheels are currently not built and uploaded to PyPI.
To install the NEML2 Python package, run the following command at the repository's root. Note that unlike the C++ backend, we do not expose any interface for customizing the build. The default configuration is already optimized for building the Python package.
The command installs a package named neml2
to the site-packages directory, and so it can be imported in Python scripts using
For security reasons, static analysis tools and IDEs for Python usually refuse to extract function signature, type hints, etc. from binary extensions such as the NEML2 Python bindings. As a workaround, NEML2 automatically generates "stubs" using pybind11-stubgen
immediately after Python bindings are built to make them less opaque. Refer to the pybind11-stubgen documentation for more information.
Additional configuration options can be passed via command line using the -DOPTION
or -DOPTION=ON
format. For example,
turns on the NEML2_PYBIND
option, and additional targets for building the Python bindings will be created. Note that this would also download additional optional dependencies, e.g., pybind11, that are required to build the Python bindings.
Commonly used configuration options are summarized below. Default options are underlined.
Option | Values (default) | Description |
---|---|---|
CMAKE_BUILD_TYPE | Debug, Release, MinSizeRel, RelWithDebInfo, Coverage | CMake Reference |
CMAKE_INSTALL_PREFIX | CMake Reference | |
CMAKE_UNITY_BUILD | CMake Reference | |
NEML2_TESTS | ON, OFF | Master knob for including/excluding all tests |
NEML2_UNIT | ON, OFF | Create the unit testing target |
NEML2_REGRESSION | ON, OFF | Create the regression testing target |
NEML2_VERIFICATION | ON, OFF | Create the verification testing target |
NEML2_RUNNER | ON, OFF | Create a simple runner |
NEML2_RUNNER_AS_PROFILER | ON, OFF | Make the runner a profiler by linking against gperftools |
NEML2_DOC | ON, OFF | Create the documentation target |
NEML2_PYBIND | ON, OFF | Create the Python bindings target |
NEML2_CLANG_TIDY | ON, OFF | Run clang-tidy linting diagnostics |
NEML2_CLANG_TIDY_PATH | "clang-tidy" | Path to clang-tidy executable |
Visual Studio Code users are encouraged to use the predefined CMake variants in cmake-variants.yaml
to configure the build.
Integrating NEML2 into a project that already uses CMake is fairly straightforward. The following CMakeLists.txt snippet links NEML2 into the target executable called foo
:
The above snippet assumes NEML2 is checked out to the directory neml2, i.e., as a git submodule. Alternatively, you may use CMake's FetchContent
module to integrate NEML2 into your project:
By default when NEML2_TESTS
is set to ON
, three test suites are built under the specified build directory:
tests/unit/unit_tests
: Collection of tests to ensure individual objects are working correctly.tests/regression/regression_tests
: Collection of tests to avoid regression.tests/verification/verification_tests
: Collection of verification problems.The tests assume the working directory to be the tests
directory relative to the repository root. For Visual Studio Code users, the C++ TestMate extension can be used to automatically discover and run tests. In the extension settings, the "Working Directory" variable should be modified to ${workspaceFolder}/tests
. The settings.json
file shall contain the following entry:
A collection of tests are available under python/tests
to ensure the NEML2 Python package is working correctly. For Visual Studio Code users, the Python extension can be used to automatically discover and run tests. In the extension settings, the "Pytest Enabled" variable shall be set to true. In addition, "pytestArgs" shall provide the location of tests, i.e. "${workspaceFolder}/python/tests". The settings.json
file shall contain the following entries:
If the Python bindings are built (with NEML2_PYBIND
set to ON
) but are not installed to the site-packages directory, pytest will not be able to import the neml2 package unless the environment variable PYTHONPATH
is modified according to the specified build directory. For Visual Studio Code users, create a .env
file in the repository's root and include an entry PYTHONPATH=build/python
(assuming the build directory is build
), and the Python extension will be able to import the NEML2 Python package.