diff --git a/CMakeLists.txt b/CMakeLists.txt index f341743e..b392f81c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -58,9 +58,6 @@ option(PythonSupport "Build with Python support" ON) # Documentation option(Build_Documentation "Build documentation" OFF) -if(NOT IS_SUBPROJECT AND (Build_Documentation AND NOT PythonSupport)) - message(FATAL_ERROR "Build_Documentation=ON requires PythonSupport to be enabled") -endif() # Testing option(Build_Tests "Build tests" ON) diff --git a/c++/h5/array_interface.cpp b/c++/h5/array_interface.cpp index 846468fe..e2dd071f 100644 --- a/c++/h5/array_interface.cpp +++ b/c++/h5/array_interface.cpp @@ -14,6 +14,11 @@ // // Authors: Olivier Parcollet, Nils Wentzell +/** + * @file + * @brief Implementation details for array_interface.hpp. + */ + #include "./array_interface.hpp" #include "./macros.hpp" #include "./stl/string.hpp" diff --git a/c++/h5/array_interface.hpp b/c++/h5/array_interface.hpp index 51bf69f1..ced6baf7 100644 --- a/c++/h5/array_interface.hpp +++ b/c++/h5/array_interface.hpp @@ -30,6 +30,11 @@ namespace h5::array_interface { + /** + * @addtogroup rw_arrayinterface + * @{ + */ + /// Simple struct to store basic information about an n-dimensional array/dataspace. struct h5_lengths_type { /// Shape of the array/dataspace. @@ -251,6 +256,8 @@ namespace h5::array_interface { */ void read_attribute(object obj, std::string const &name, h5_array_view v); + /** @} */ + } // namespace h5::array_interface #endif // LIBH5_ARRAY_INTERFACE_HPP diff --git a/c++/h5/complex.hpp b/c++/h5/complex.hpp index 384d2ec8..76820e06 100644 --- a/c++/h5/complex.hpp +++ b/c++/h5/complex.hpp @@ -28,8 +28,12 @@ namespace h5 { /** + * @ingroup h5_types * @brief A complex compound type consisting of two doubles to represent a complex number. + * * @details This type can be used to read/write complex numbers from/to HDF5 files. + * + * @note **h5** also supports the direct use of std::complex which is the recommended way to read/write complex data. */ struct dcplx_t { /// Real part. @@ -48,6 +52,7 @@ namespace h5 { struct _is_complex> : std::true_type {}; /** + * @ingroup h5_types * @brief Boolean type trait set to true for std::complex types. * @tparam T Type to check. */ diff --git a/c++/h5/file.cpp b/c++/h5/file.cpp index 38bb21f8..1e5d5b2c 100644 --- a/c++/h5/file.cpp +++ b/c++/h5/file.cpp @@ -14,6 +14,11 @@ // // Authors: Olivier Parcollet, Nils Wentzell +/** + * @file + * @brief Implementation details for file.hpp. + */ + #include "./file.hpp" #include diff --git a/c++/h5/file.hpp b/c++/h5/file.hpp index 38c40d6d..1c902f80 100644 --- a/c++/h5/file.hpp +++ b/c++/h5/file.hpp @@ -32,6 +32,7 @@ namespace h5 { /** + * @ingroup data_model * @brief A handle to an HDF5 file. * * @details This class inherits from the general h5::object class. It simply wraps the HDF5 functions diff --git a/c++/h5/format.cpp b/c++/h5/format.cpp index 6e47f8a4..0c008536 100644 --- a/c++/h5/format.cpp +++ b/c++/h5/format.cpp @@ -14,6 +14,11 @@ // // Authors: Olivier Parcollet, Nils Wentzell +/** + * @file + * @brief Implementation details for format.hpp. + */ + #include "./format.hpp" #include "./group.hpp" #include "./object.hpp" diff --git a/c++/h5/format.hpp b/c++/h5/format.hpp index ccebcbe8..c7340fe6 100644 --- a/c++/h5/format.hpp +++ b/c++/h5/format.hpp @@ -35,6 +35,11 @@ namespace h5 { + /** + * @addtogroup format + * @{ + */ + /** * @brief Default type trait to get the `hdf5_format` tag of type `T` by calling its static member function * `T::hdf5_format()`. @@ -160,6 +165,8 @@ namespace h5 { assert_hdf5_format_as_string(g, get_hdf5_format().c_str(), ignore_if_absent); } + /** @} */ + } // namespace h5 #endif // LIBH5_FORMAT_HPP diff --git a/c++/h5/generic.hpp b/c++/h5/generic.hpp index 14059ec4..2a2ff11b 100644 --- a/c++/h5/generic.hpp +++ b/c++/h5/generic.hpp @@ -31,6 +31,11 @@ namespace h5 { + /** + * @addtogroup rw_generic + * @{ + */ + /** * @brief Generic implementation for reading from an HDF5 dataset/subgroup. * @@ -203,6 +208,8 @@ namespace h5 { return false; } + /** @} */ + } // namespace h5 #endif // LIBH5_GENERIC_HPP diff --git a/c++/h5/group.cpp b/c++/h5/group.cpp index 3ccc5ba2..a4cfc02f 100644 --- a/c++/h5/group.cpp +++ b/c++/h5/group.cpp @@ -14,6 +14,11 @@ // // Authors: Henri Menke, Olivier Parcollet, Nils Wentzell +/** + * @file + * @brief Implementation details for group.hpp. + */ + #include "./group.hpp" #include diff --git a/c++/h5/group.hpp b/c++/h5/group.hpp index d251f3d0..9403ab96 100644 --- a/c++/h5/group.hpp +++ b/c++/h5/group.hpp @@ -32,6 +32,7 @@ namespace h5 { /** + * @ingroup data_model * @brief A handle to an HDF5 group. * * @details This class inherits from the general h5::object class. Each group stores the parent h5::file diff --git a/c++/h5/h5.hpp b/c++/h5/h5.hpp index a266a6bc..19948e6c 100644 --- a/c++/h5/h5.hpp +++ b/c++/h5/h5.hpp @@ -32,6 +32,7 @@ #include "./group.hpp" #include "./object.hpp" #include "./scalar.hpp" +#include "./utils.hpp" #include "./stl/string.hpp" #include "./stl/array.hpp" #include "./stl/vector.hpp" @@ -54,6 +55,7 @@ namespace h5 { /** + * @ingroup utilities * @brief Concept to check if a type can be read/written from/to HDF5. * @tparam T Type to check. */ diff --git a/c++/h5/object.cpp b/c++/h5/object.cpp index 0dd93d83..a367fe64 100644 --- a/c++/h5/object.cpp +++ b/c++/h5/object.cpp @@ -14,9 +14,15 @@ // // Authors: Olivier Parcollet, Nils Wentzell +/** + * @file + * @brief Implementation details for object.hpp. + */ + #include "./complex.hpp" #include "./macros.hpp" #include "./object.hpp" +#include "./utils.hpp" #include #include diff --git a/c++/h5/object.hpp b/c++/h5/object.hpp index 3e9fad53..cd78a218 100644 --- a/c++/h5/object.hpp +++ b/c++/h5/object.hpp @@ -22,35 +22,16 @@ #ifndef LIBH5_OBJECT_HPP #define LIBH5_OBJECT_HPP -#include +#include "./utils.hpp" + #include -#include namespace h5 { /** - * @brief ID type used in HDF5. - * - * @details This is just a copy from the HDF5 library (see the official - * documentation). - * It is used to completely isolate our header from the HDF5 headers. In the .cpp file a `static_assert` is used to verify - * its validity. - */ - using hid_t = int64_t; - - /** - * @brief Size type used in HDF5. - * @details This is just a copy from the HDF5 library. It is used to completely isolate our header from the HDF5 headers. - * In the .cpp file a `static_assert` is used to verify its validity. + * @addtogroup data_model + * @{ */ -#ifdef H5_VER_GE_113 - using hsize_t = uint64_t; -#else - using hsize_t = unsigned long long; -#endif - - /// Vector of h5::hsize_t used throughout the h5 library. - using v_t = std::vector; /** * @brief A generic handle for HDF5 objects. @@ -61,9 +42,9 @@ namespace h5 { * destructor, the derived classes should not be deleted through a pointer to this class. It is recommended * to use the derived classes whenever possible. * - * HDF5's reference counting system is similar to python. This class handles the proper reference counting + * HDF5's reference counting system is similar to Python's. This class handles the proper reference counting * using a RAII pattern (hence exception safe). Depending on how the object is constructed, it either - * increases the reference count associated HDF5 object or steals it. + * increases the reference count associated with the HDF5 object or steals it. */ class object { protected: @@ -150,6 +131,13 @@ namespace h5 { /// Type alias for an HDF5 attribute. using attribute = object; + /** @} */ + + /** + * @addtogroup h5_types + * @{ + */ + namespace detail { // Map a C++ type to an HDF5 type (specializations are in object.cpp). @@ -188,7 +176,7 @@ namespace h5 { [[nodiscard]] datatype get_hdf5_type(dataset ds); /** - * @brief Check two HDF5 datatypes for equality. + * @brief Check if two HDF5 datatypes are equal. * * @details For string types, this function only checks if they are both of the class `H5T_STRING`. * It does not take into account the size, character set, etc. @@ -201,6 +189,8 @@ namespace h5 { */ [[nodiscard]] bool hdf5_type_equal(datatype dt1, datatype dt2); + /** @} */ + } // namespace h5 #endif // LIBH5_OBJECT_HPP diff --git a/c++/h5/scalar.hpp b/c++/h5/scalar.hpp index 0a5788d5..ff3d1b8e 100644 --- a/c++/h5/scalar.hpp +++ b/c++/h5/scalar.hpp @@ -37,6 +37,7 @@ namespace h5 { namespace array_interface { /** + * @ingroup rw_arrayinterface * @brief Create an array view for a scalar. * * @tparam T Scalar type. @@ -50,6 +51,11 @@ namespace h5 { } // namespace array_interface + /** + * @addtogroup rw_scalar + * @{ + */ + /** * @brief Write a scalar to an HDF5 dataset. * @@ -135,6 +141,8 @@ namespace h5 { array_interface::read_attribute(obj, name, array_interface::h5_array_view_from_scalar(x)); } + /** @} */ + } // namespace h5 #endif // LIBH5_SCALAR_HPP diff --git a/c++/h5/serialization.hpp b/c++/h5/serialization.hpp index 4cd9d37f..509530f1 100644 --- a/c++/h5/serialization.hpp +++ b/c++/h5/serialization.hpp @@ -30,6 +30,11 @@ namespace h5 { + /** + * @addtogroup serialize + * @{ + */ + /** * @brief Serialize an object to a byte buffer. * @@ -53,7 +58,7 @@ namespace h5 { * * @tparam T Type of the object. * @param buf Byte buffer containing the serialized object. - * @return Deserialized object. + * @return Object restored from the given byte buffer. */ template [[nodiscard]] T deserialize(std::vector const &buf) { @@ -61,6 +66,8 @@ namespace h5 { return h5_read(f, "object"); } + /** @} */ + } // namespace h5 #endif // LIBH5_SERIALIZATION_HPP diff --git a/c++/h5/stl/array.hpp b/c++/h5/stl/array.hpp index 95bacb67..135125c1 100644 --- a/c++/h5/stl/array.hpp +++ b/c++/h5/stl/array.hpp @@ -34,6 +34,11 @@ namespace h5 { + /** + * @addtogroup rw_array + * @{ + */ + /** * @brief Write a std::array to an HDF5 dataset/subgroup. * @@ -128,6 +133,8 @@ namespace h5 { } } + /** @} */ + } // namespace h5 #endif // LIBH5_STL_ARRAY_HPP diff --git a/c++/h5/stl/map.hpp b/c++/h5/stl/map.hpp index 9c68dbaf..4df03af1 100644 --- a/c++/h5/stl/map.hpp +++ b/c++/h5/stl/map.hpp @@ -33,6 +33,11 @@ namespace h5 { + /** + * @addtogroup rw_map + * @{ + */ + /// Specialization of h5::hdf5_format_impl for std::map. template struct hdf5_format_impl> { @@ -103,6 +108,8 @@ namespace h5 { } } + /** @} */ + } // namespace h5 #endif // LIBH5_STL_MAP_HPP diff --git a/c++/h5/stl/optional.hpp b/c++/h5/stl/optional.hpp index 9b7c42c9..2df0e53b 100644 --- a/c++/h5/stl/optional.hpp +++ b/c++/h5/stl/optional.hpp @@ -31,6 +31,11 @@ namespace h5 { + /** + * @addtogroup rw_optional + * @{ + */ + /// Specialization of h5::hdf5_format_impl for std::optional. template struct hdf5_format_impl> { @@ -68,6 +73,8 @@ namespace h5 { if (g.has_key(name)) opt.emplace(h5_read(g, name)); } + /** @} */ + } // namespace h5 #endif // LIBH5_STL_OPTIONAL_HPP diff --git a/c++/h5/stl/pair.hpp b/c++/h5/stl/pair.hpp index 3ec0a4cc..66bbcc54 100644 --- a/c++/h5/stl/pair.hpp +++ b/c++/h5/stl/pair.hpp @@ -31,6 +31,11 @@ namespace h5 { + /** + * @addtogroup rw_pair + * @{ + */ + /// Specialization of h5::hdf5_format_impl for std::pair. template struct hdf5_format_impl> { @@ -76,6 +81,8 @@ namespace h5 { h5_read(gr, "1", p.second); } + /** @} */ + } // namespace h5 #endif // LIBH5_STL_PAIR_HPP diff --git a/c++/h5/stl/string.cpp b/c++/h5/stl/string.cpp index e5ab1e3e..0f514f93 100644 --- a/c++/h5/stl/string.cpp +++ b/c++/h5/stl/string.cpp @@ -14,6 +14,11 @@ // // Authors: Olivier Parcollet, Nils Wentzell +/** + * @file + * @brief Implementation details for stl/string.hpp. + */ + #include "./string.hpp" #include "../macros.hpp" #include "../utils.hpp" diff --git a/c++/h5/stl/string.hpp b/c++/h5/stl/string.hpp index 9ceca2bf..02676e28 100644 --- a/c++/h5/stl/string.hpp +++ b/c++/h5/stl/string.hpp @@ -33,6 +33,11 @@ namespace h5 { template struct hdf5_format_impl; + /** + * @addtogroup rw_string + * @{ + */ + /// Specialization of h5::hdf5_format_impl for std::string. template <> struct hdf5_format_impl { @@ -202,6 +207,8 @@ namespace h5 { */ void h5_read_attribute(object obj, std::string const &name, char_buf &cb); + /** @} */ + } // namespace h5 #endif // LIBH5_STL_STRING_HPP diff --git a/c++/h5/stl/tuple.hpp b/c++/h5/stl/tuple.hpp index 941d124d..daacdc74 100644 --- a/c++/h5/stl/tuple.hpp +++ b/c++/h5/stl/tuple.hpp @@ -34,6 +34,11 @@ namespace h5 { + /** + * @addtogroup rw_tuple + * @{ + */ + /// Specialization of h5::hdf5_format_impl for std::tuple. template struct hdf5_format_impl> { @@ -92,6 +97,8 @@ namespace h5 { detail::h5_read_tuple_impl(gr, name, tup, std::index_sequence_for{}); } + /** @} */ + } // namespace h5 #endif // LIBH5_STL_TUPLE_HPP diff --git a/c++/h5/stl/variant.hpp b/c++/h5/stl/variant.hpp index 3715642b..948ace6b 100644 --- a/c++/h5/stl/variant.hpp +++ b/c++/h5/stl/variant.hpp @@ -33,6 +33,11 @@ namespace h5 { + /** + * @addtogroup rw_variant + * @{ + */ + /// Specialization of h5::hdf5_format_impl for std::variant. template struct hdf5_format_impl> { @@ -88,6 +93,8 @@ namespace h5 { h5_read_variant_helper, Ts...>(v, dt, g, name); } + /** @} */ + } // namespace h5 #endif // LIBH5_STL_VARIANT_HPP diff --git a/c++/h5/stl/vector.cpp b/c++/h5/stl/vector.cpp index 552c132a..f41339b2 100644 --- a/c++/h5/stl/vector.cpp +++ b/c++/h5/stl/vector.cpp @@ -14,6 +14,11 @@ // // Authors: Philipp Dumitrescu, Olivier Parcollet, Nils Wentzell +/** + * @file + * @brief Implementation details for stl/vector.hpp. + */ + #include "./vector.hpp" #include diff --git a/c++/h5/stl/vector.hpp b/c++/h5/stl/vector.hpp index d5056418..8db806bd 100644 --- a/c++/h5/stl/vector.hpp +++ b/c++/h5/stl/vector.hpp @@ -38,6 +38,7 @@ namespace h5 { namespace array_interface { /** + * @ingroup rw_arrayinterface * @brief Create an h5::array_interface::h5_array_view for a std::vector. * * @tparam T Value type of std::vector. @@ -54,7 +55,11 @@ namespace h5 { } // namespace array_interface - // FIXME : CLEAN THIS + /** + * @addtogroup rw_vector + * @{ + */ + // Specialization of h5::hdf5_format_impl for std::vector. H5_SPECIALIZE_FORMAT2(std::vector, vector); diff --git a/c++/h5/utils.hpp b/c++/h5/utils.hpp index 84bec605..590a225b 100644 --- a/c++/h5/utils.hpp +++ b/c++/h5/utils.hpp @@ -22,11 +22,42 @@ #ifndef LIBH5_UTILS_HPP #define LIBH5_UTILS_HPP +#include #include #include +#include namespace h5 { + /** + * @addtogroup utilities + * @{ + */ + + /** + * @brief ID type used in HDF5. + * + * @details This is just a copy from the HDF5 library (see the official + * documentation). + * It is used to completely isolate our header from the HDF5 headers. In the object.cpp file a `static_assert` is used to verify + * its validity. + */ + using hid_t = int64_t; + + /** + * @brief Size type used in HDF5. + * @details This is just a copy from the HDF5 library. It is used to completely isolate our header from the HDF5 headers. + * In the object.cpp file a `static_assert` is used to verify its validity. + */ +#ifdef H5_VER_GE_113 + using hsize_t = uint64_t; +#else + using hsize_t = unsigned long long; +#endif + + /// Vector of h5::hsize_t used throughout the h5 library. + using v_t = std::vector; + /** * @brief Create a std::runtime_error with an error message constructed from the given arguments. * @@ -41,6 +72,8 @@ namespace h5 { return std::runtime_error{ss.str()}; } + /** @} */ + } // namespace h5 #endif // LIBH5_UTILS_HPP diff --git a/deps/CMakeLists.txt b/deps/CMakeLists.txt index e26dfbae..4993b0e1 100644 --- a/deps/CMakeLists.txt +++ b/deps/CMakeLists.txt @@ -48,7 +48,7 @@ else() endif() # -- Cpp2Py -- -if(PythonSupport OR (NOT IS_SUBPROJECT AND Build_Documentation)) +if(PythonSupport) external_dependency(Cpp2Py GIT_REPO https://github.com/TRIQS/cpp2py VERSION 2.0 diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 23d97c32..790f6fb4 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,74 +1,34 @@ -# Generate the sphinx config file -configure_file(${CMAKE_CURRENT_SOURCE_DIR}/conf.py.in ${CMAKE_CURRENT_BINARY_DIR}/conf.py @ONLY) - -# ----------------------------------------------------------------------------- -# Create an optional target that allows us to regenerate the C++ doc with c++2rst -# ----------------------------------------------------------------------------- -add_custom_target(${PROJECT_NAME}_docs_cpp2rst) -include(${PROJECT_SOURCE_DIR}/share/cmake/extract_flags.cmake) -extract_flags(${PROJECT_NAME}_c BUILD_INTERFACE) -separate_arguments(${PROJECT_NAME}_c_CXXFLAGS) -macro(generate_docs header_file) - add_custom_command( - TARGET ${PROJECT_NAME}_docs_cpp2rst - COMMAND rm -rf ${CMAKE_CURRENT_SOURCE_DIR}/cpp2rst_generated - COMMAND - PYTHONPATH=${CPP2PY_BINARY_DIR}:$ENV{PYTHONPATH} - PATH=${CPP2PY_BINARY_DIR}/bin:${CPP2PY_ROOT}/bin:$ENV{PATH} - c++2rst - ${header_file} - -N ${PROJECT_NAME} - --output_directory ${CMAKE_CURRENT_SOURCE_DIR}/cpp2rst_generated - -I${PROJECT_SOURCE_DIR}/c++ - --cxxflags="${${PROJECT_NAME}_c_CXXFLAGS}" - ) -endmacro(generate_docs) - -generate_docs(${PROJECT_SOURCE_DIR}/c++/${PROJECT_NAME}/${PROJECT_NAME}.hpp) - -# -------------------------------------------------------- -# Build & Run the C++ doc examples and capture the output -# -------------------------------------------------------- - -add_custom_target(${PROJECT_NAME}_docs_example_output) -file(GLOB_RECURSE ExampleList RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp) -foreach(example ${ExampleList}) - get_filename_component(f ${example} NAME_WE) - get_filename_component(d ${example} DIRECTORY) - add_executable(${PROJECT_NAME}_doc_${f} EXCLUDE_FROM_ALL ${example}) - set_property(TARGET ${PROJECT_NAME}_doc_${f} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${d}) - add_custom_command(TARGET ${PROJECT_NAME}_doc_${f} - COMMAND ${PROJECT_NAME}_doc_${f} > ${CMAKE_CURRENT_SOURCE_DIR}/${d}/${f}.output 2>/dev/null - WORKING_DIRECTORY ${d} - ) - add_dependencies(${PROJECT_NAME}_docs_example_output ${PROJECT_NAME}_doc_${f}) -endforeach() - -# --------------------------------- -# Top Sphinx target -# --------------------------------- -if(NOT DEFINED SPHINXBUILD_EXECUTABLE) - find_package(Sphinx) -endif() - -# Sphinx has internal caching, always run it -add_custom_target(${PROJECT_NAME}_docs_sphinx ALL) -add_custom_command( - TARGET ${PROJECT_NAME}_docs_sphinx - COMMAND PYTHONPATH=${PROJECT_BINARY_DIR}/python:${h5_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SPHINXBUILD_EXECUTABLE} -c . -j auto -b html ${CMAKE_CURRENT_SOURCE_DIR} html +# ############ +# Doxygen +find_package(Doxygen REQUIRED) + +# Configure Doxyfile +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/Doxyfile.in ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile @ONLY) + +# Configure markdown files +configure_file(${CMAKE_CURRENT_SOURCE_DIR}/overview.md.in ${CMAKE_CURRENT_BINARY_DIR}/overview.md @ONLY) + +# Fetch doxygen-awesome-css +include(FetchContent) +FetchContent_Declare(doxyawesome + GIT_REPOSITORY https://github.com/jothepro/doxygen-awesome-css.git + GIT_TAG v2.3.2) +FetchContent_MakeAvailable(doxyawesome) +file(COPY ${doxyawesome_SOURCE_DIR}/doxygen-awesome.css DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +file(COPY ${doxyawesome_SOURCE_DIR}/doxygen-awesome-sidebar-only.css DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + +# Add custom target for Doxygen +add_custom_target(doxygen ALL + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_BINARY_DIR}/Doxyfile + WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR} + COMMENT "Generating Doxygen documentation" + VERBATIM ) -option(Sphinx_Only "When building the documentation, skip the Python Modules and the generation of C++ Api and example outputs" OFF) -if(NOT Sphinx_Only) - # Generation of C++ Api and Example Outputs - add_dependencies(${PROJECT_NAME}_docs_sphinx ${PROJECT_NAME}_docs_cpp2rst ${PROJECT_NAME}_docs_example_output) -endif() - -# --------------------------------- +# ############ # Install -# --------------------------------- install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ COMPONENT documentation DESTINATION share/doc/${PROJECT_NAME} FILES_MATCHING REGEX "\\.(html|pdf|png|gif|jpg|svg|ico|js|xsl|css|py|txt|inv|bib|ttf|woff2|eot|sh)$" PATTERN "_*" -) +) \ No newline at end of file diff --git a/doc/ChangeLog.md b/doc/ChangeLog.md index 93bd97b4..1b87ca18 100644 --- a/doc/ChangeLog.md +++ b/doc/ChangeLog.md @@ -1,6 +1,4 @@ -(changelog)= - -# Changelog +@page changelog Changelog ## Version 1.2.0 diff --git a/doc/Doxyfile b/doc/Doxyfile.in similarity index 83% rename from doc/Doxyfile rename to doc/Doxyfile.in index 25943f8f..d29ebcf1 100644 --- a/doc/Doxyfile +++ b/doc/Doxyfile.in @@ -1,4 +1,4 @@ -# Doxyfile 1.9.3 +# Doxyfile 1.11.0 # This file describes the settings to be used by the documentation system # doxygen (www.doxygen.org) for a project. @@ -12,6 +12,16 @@ # For lists, items can also be appended using: # TAG += value [value, ...] # Values that contain spaces should be placed between quotes (\" \"). +# +# Note: +# +# Use doxygen to compare the used configuration file with the template +# configuration file: +# doxygen -x [configFile] +# Use doxygen to compare the used configuration file with the template +# configuration file without replacing the environment variables or CMake type +# replacement variables: +# doxygen -x_noenv [configFile] #--------------------------------------------------------------------------- # Project related configuration options @@ -32,19 +42,19 @@ DOXYFILE_ENCODING = UTF-8 # title of most generated pages and in a few other places. # The default value is: My Project. -PROJECT_NAME = TRIQS/h5 +PROJECT_NAME = "TRIQS/@PROJECT_NAME@" # The PROJECT_NUMBER tag can be used to enter a project or revision number. This # could be handy for archiving the generated documentation or if some version # control system is used. -PROJECT_NUMBER = 1.1.0 +PROJECT_NUMBER = @PROJECT_VERSION@ # Using the PROJECT_BRIEF tag one can provide an optional one line description # for a project that appears at the top of each page and should give viewer a # quick idea about the purpose of the project. Keep the description short. -PROJECT_BRIEF = "A high-level C++ interface to the hdf5 library" +PROJECT_BRIEF = "C++ interface to HDF5" # With the PROJECT_LOGO tag one can specify a logo or an icon that is included # in the documentation. The maximum height of the logo should not exceed 55 @@ -53,23 +63,41 @@ PROJECT_BRIEF = "A high-level C++ interface to the hdf5 library" PROJECT_LOGO = +# With the PROJECT_ICON tag one can specify an icon that is included in the tabs +# when the HTML document is shown. Doxygen will copy the logo to the output +# directory. + +PROJECT_ICON = + # The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path # into which the generated documentation will be written. If a relative path is # entered, it will be relative to the location where doxygen was started. If # left blank the current directory will be used. -OUTPUT_DIRECTORY = +OUTPUT_DIRECTORY = @CMAKE_CURRENT_BINARY_DIR@ -# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- -# directories (in 2 levels) under the output directory of each output format and -# will distribute the generated files over these directories. Enabling this +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create up to 4096 +# sub-directories (in 2 levels) under the output directory of each output format +# and will distribute the generated files over these directories. Enabling this # option can be useful when feeding doxygen a huge amount of source files, where # putting all generated files in the same directory would otherwise causes -# performance problems for the file system. +# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to +# control the number of sub-directories. # The default value is: NO. CREATE_SUBDIRS = NO +# Controls the number of sub-directories that will be created when +# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every +# level increment doubles the number of directories, resulting in 4096 +# directories at level 8 which is the default and also the maximum value. The +# sub-directories are organized in 2 levels, the first level always has a fixed +# number of 16 directories. +# Minimum value: 0, maximum value: 8, default value: 8. +# This tag requires that the tag CREATE_SUBDIRS is set to YES. + +CREATE_SUBDIRS_LEVEL = 8 + # If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII # characters to appear in the names of generated files. If set to NO, non-ASCII # characters will be escaped, for example _xE3_x81_x84 will be used for Unicode @@ -81,14 +109,14 @@ ALLOW_UNICODE_NAMES = NO # The OUTPUT_LANGUAGE tag is used to specify the language in which all # documentation generated by doxygen is written. Doxygen will use this # information to generate all constant output in the proper language. -# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, -# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), -# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, -# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), -# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, -# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, -# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, -# Ukrainian and Vietnamese. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian, +# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English +# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek, +# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with +# English messages), Korean, Korean-en (Korean with English messages), Latvian, +# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, +# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, +# Swedish, Turkish, Ukrainian and Vietnamese. # The default value is: English. OUTPUT_LANGUAGE = English @@ -152,7 +180,7 @@ FULL_PATH_NAMES = YES # will be relative from the directory where doxygen is started. # This tag requires that the tag FULL_PATH_NAMES is set to YES. -STRIP_FROM_PATH = +STRIP_FROM_PATH = @CMAKE_SOURCE_DIR@/c++ # The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the # path mentioned in the documentation of a class, which tells the reader which @@ -161,7 +189,7 @@ STRIP_FROM_PATH = # specify the list of include paths that are normally passed to the compiler # using the -I flag. -STRIP_FROM_INC_PATH = +STRIP_FROM_INC_PATH = @CMAKE_SOURCE_DIR@/c++ # If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but # less readable) file names. This can be useful is your file systems doesn't @@ -331,6 +359,17 @@ MARKDOWN_SUPPORT = YES TOC_INCLUDE_HEADINGS = 5 +# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to +# generate identifiers for the Markdown headings. Note: Every identifier is +# unique. +# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a +# sequence number starting at 0 and GITHUB use the lower case version of title +# with any whitespace replaced by '-' and punctuation characters removed. +# The default value is: DOXYGEN. +# This tag requires that the tag MARKDOWN_SUPPORT is set to YES. + +MARKDOWN_ID_STYLE = DOXYGEN + # When enabled doxygen tries to link words that correspond to documented # classes, or namespaces to their corresponding documentation. Such a link can # be prevented in individual cases by putting a % sign in front of the word or @@ -343,8 +382,8 @@ AUTOLINK_SUPPORT = YES # to include (a tag file for) the STL sources as input, then you should set this # tag to YES in order to let doxygen match functions declarations and # definitions whose arguments contain STL classes (e.g. func(std::string); -# versus func(std::string) {}). This also make the inheritance and collaboration -# diagrams that involve STL classes more complete and accurate. +# versus func(std::string) {}). This also makes the inheritance and +# collaboration diagrams that involve STL classes more complete and accurate. # The default value is: NO. BUILTIN_STL_SUPPORT = NO @@ -356,9 +395,9 @@ BUILTIN_STL_SUPPORT = NO CPP_CLI_SUPPORT = NO # Set the SIP_SUPPORT tag to YES if your project consists of sip (see: -# https://www.riverbankcomputing.com/software/sip/intro) sources only. Doxygen -# will parse them like normal C++ but will assume all classes use public instead -# of private inheritance when no explicit protection keyword is present. +# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse +# them like normal C++ but will assume all classes use public instead of private +# inheritance when no explicit protection keyword is present. # The default value is: NO. SIP_SUPPORT = NO @@ -386,7 +425,7 @@ DISTRIBUTE_GROUP_DOC = NO # is disabled and one has to add nested compounds explicitly via \ingroup. # The default value is: NO. -GROUP_NESTED_COMPOUNDS = NO +GROUP_NESTED_COMPOUNDS = YES # Set the SUBGROUPING tag to YES to allow class member groups of the same type # (for instance a group of public functions) to be put as a subgroup of that @@ -442,7 +481,7 @@ TYPEDEF_HIDES_STRUCT = NO LOOKUP_CACHE_SIZE = 0 -# The NUM_PROC_THREADS specifies the number threads doxygen is allowed to use +# The NUM_PROC_THREADS specifies the number of threads doxygen is allowed to use # during processing. When set to 0 doxygen will based this on the number of # cores available in the system. You can set it explicitly to a value larger # than 0 to get more control over the balance between CPU load and processing @@ -455,6 +494,14 @@ LOOKUP_CACHE_SIZE = 0 NUM_PROC_THREADS = 1 +# If the TIMESTAMP tag is set different from NO then each generated page will +# contain the date or date and time when the page was generated. Setting this to +# NO can help when comparing the output of multiple runs. +# Possible values are: YES, NO, DATETIME and DATE. +# The default value is: NO. + +TIMESTAMP = NO + #--------------------------------------------------------------------------- # Build related configuration options #--------------------------------------------------------------------------- @@ -467,7 +514,7 @@ NUM_PROC_THREADS = 1 # normally produced when WARNINGS is set to YES. # The default value is: NO. -EXTRACT_ALL = YES +EXTRACT_ALL = NO # If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will # be included in the documentation. @@ -491,7 +538,7 @@ EXTRACT_PACKAGE = NO # included in the documentation. # The default value is: NO. -EXTRACT_STATIC = NO +EXTRACT_STATIC = YES # If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined # locally in source files will be included in the documentation. If set to NO, @@ -499,7 +546,7 @@ EXTRACT_STATIC = NO # for Java sources. # The default value is: YES. -EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_CLASSES = NO # This flag is only useful for Objective-C code. If set to YES, local methods, # which are defined in the implementation section but not in the interface are @@ -531,15 +578,16 @@ RESOLVE_UNNAMED_PARAMS = YES # section is generated. This option has no effect if EXTRACT_ALL is enabled. # The default value is: NO. -HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_MEMBERS = YES # If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all # undocumented classes that are normally visible in the class hierarchy. If set # to NO, these classes will be included in the various overviews. This option -# has no effect if EXTRACT_ALL is enabled. +# will also hide undocumented C++ concepts if enabled. This option has no effect +# if EXTRACT_ALL is enabled. # The default value is: NO. -HIDE_UNDOC_CLASSES = NO +HIDE_UNDOC_CLASSES = YES # If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend # declarations. If set to NO, these declarations will be included in the @@ -567,16 +615,17 @@ INTERNAL_DOCS = NO # filesystem is case sensitive (i.e. it supports files in the same directory # whose names only differ in casing), the option must be set to YES to properly # deal with such files in case they appear in the input. For filesystems that -# are not case sensitive the option should be be set to NO to properly deal with +# are not case sensitive the option should be set to NO to properly deal with # output files written for symbols that only differ in casing, such as for two # classes, one named CLASS and the other named Class, and to also support # references to files without having to specify the exact matching casing. On # Windows (including Cygwin) and MacOS, users should typically set this option # to NO, whereas on Linux or other Unix flavors it should typically be set to # YES. -# The default value is: system dependent. +# Possible values are: SYSTEM, NO and YES. +# The default value is: SYSTEM. -CASE_SENSE_NAMES = YES +CASE_SENSE_NAMES = SYSTEM # If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with # their full class and namespace scopes in the documentation. If set to YES, the @@ -590,7 +639,7 @@ HIDE_SCOPE_NAMES = NO # YES the compound reference will be hidden. # The default value is: NO. -HIDE_COMPOUND_REFERENCE= NO +HIDE_COMPOUND_REFERENCE = YES # If the SHOW_HEADERFILE tag is set to YES then the documentation for a class # will show which file needs to be included to use the class. @@ -609,7 +658,7 @@ SHOW_INCLUDE_FILES = YES # which file to include in order to use the member. # The default value is: NO. -SHOW_GROUPED_MEMB_INC = NO +SHOW_GROUPED_MEMB_INC = YES # If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include # files with double quotes in the documentation rather than with sharp brackets. @@ -636,7 +685,7 @@ SORT_MEMBER_DOCS = YES # this will also influence the order of the classes in the class list. # The default value is: NO. -SORT_BRIEF_DOCS = NO +SORT_BRIEF_DOCS = YES # If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the # (brief and detailed) documentation of class members so that constructors and @@ -648,14 +697,14 @@ SORT_BRIEF_DOCS = NO # detailed member documentation. # The default value is: NO. -SORT_MEMBERS_CTORS_1ST = NO +SORT_MEMBERS_CTORS_1ST = YES # If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy # of group names into alphabetical order. If set to NO the group names will # appear in their defined order. # The default value is: NO. -SORT_GROUP_NAMES = NO +SORT_GROUP_NAMES = YES # If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by # fully-qualified names, including namespaces. If set to NO, the class list will @@ -665,7 +714,7 @@ SORT_GROUP_NAMES = NO # list. # The default value is: NO. -SORT_BY_SCOPE_NAME = NO +SORT_BY_SCOPE_NAME = YES # If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper # type resolution of all parameters of a function it will reject a match between @@ -700,7 +749,7 @@ GENERATE_BUGLIST = YES # the documentation. # The default value is: YES. -GENERATE_DEPRECATEDLIST= YES +GENERATE_DEPRECATEDLIST = YES # The ENABLED_SECTIONS tag can be used to enable conditional documentation # sections, marked by \if ... \endif and \cond @@ -762,7 +811,7 @@ FILE_VERSION_FILTER = # DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE # tag is left empty. -LAYOUT_FILE = +LAYOUT_FILE = @CMAKE_CURRENT_SOURCE_DIR@/DoxygenLayout.xml # The CITE_BIB_FILES tag can be used to specify one or more bib files containing # the reference definitions. This must be a list of .bib files. The .bib @@ -826,11 +875,26 @@ WARN_IF_INCOMPLETE_DOC = YES WARN_NO_PARAMDOC = NO +# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, doxygen will warn about +# undocumented enumeration values. If set to NO, doxygen will accept +# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: NO. + +WARN_IF_UNDOC_ENUM_VAL = NO + # If the WARN_AS_ERROR tag is set to YES then doxygen will immediately stop when # a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS # then doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but # at the end of the doxygen process doxygen will return with a non-zero status. -# Possible values are: NO, YES and FAIL_ON_WARNINGS. +# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then doxygen behaves +# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined doxygen will not +# write the warning messages in between other messages but write them at the end +# of a run, in case a WARN_LOGFILE is defined the warning messages will be +# besides being in the defined file also be shown at the end of a run, unless +# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case +# the behavior will remain as with the setting FAIL_ON_WARNINGS. +# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT. # The default value is: NO. WARN_AS_ERROR = NO @@ -841,10 +905,21 @@ WARN_AS_ERROR = NO # and the warning text. Optionally the format may contain $version, which will # be replaced by the version of the file (if it could be obtained via # FILE_VERSION_FILTER) +# See also: WARN_LINE_FORMAT # The default value is: $file:$line: $text. WARN_FORMAT = "$file:$line: $text" +# In the $text part of the WARN_FORMAT command it is possible that a reference +# to a more specific place is given. To make it easier to jump to this place +# (outside of doxygen) the user can define a custom "cut" / "paste" string. +# Example: +# WARN_LINE_FORMAT = "'vi $file +$line'" +# See also: WARN_FORMAT +# The default value is: at line $line of file $file. + +WARN_LINE_FORMAT = "at line $line of file $file" + # The WARN_LOGFILE tag can be used to specify a file to which warning and error # messages should be written. If left blank the output is written to standard # error (stderr). In case the file specified cannot be opened for writing the @@ -864,17 +939,30 @@ WARN_LOGFILE = # spaces. See also FILE_PATTERNS and EXTENSION_MAPPING # Note: If this tag is empty the current directory is searched. -INPUT = ../c++ +INPUT = @CMAKE_CURRENT_SOURCE_DIR@ \ + @CMAKE_CURRENT_BINARY_DIR@ \ + @CMAKE_CURRENT_SOURCE_DIR@/../c++ # This tag can be used to specify the character encoding of the source files # that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses # libiconv (or the iconv built into libc) for the transcoding. See the libiconv # documentation (see: # https://www.gnu.org/software/libiconv/) for the list of possible encodings. +# See also: INPUT_FILE_ENCODING # The default value is: UTF-8. INPUT_ENCODING = UTF-8 +# This tag can be used to specify the character encoding of the source files +# that doxygen parses The INPUT_FILE_ENCODING tag can be used to specify +# character encoding on a per file pattern basis. Doxygen will compare the file +# name with each pattern and apply the encoding instead of the default +# INPUT_ENCODING) if there is a match. The character encodings are a list of the +# form: pattern=encoding (like *.php=ISO-8859-1). +# See also: INPUT_ENCODING for further information on supported encodings. + +INPUT_FILE_ENCODING = + # If the value of the INPUT tag contains directories, you can use the # FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and # *.h) to filter out the source-files in the directories. @@ -886,14 +974,63 @@ INPUT_ENCODING = UTF-8 # Note the list of default checked file patterns might differ from the list of # default file extension mappings. # -# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, -# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, -# *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, -# *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be provided as doxygen C -# comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, *.f18, *.f, *.for, *.vhd, -# *.vhdl, *.ucf, *.qsf and *.ice. - -FILE_PATTERNS = +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm, +# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, +# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.ixx, *.l, *.cs, *.d, +# *.php, *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to +# be provided as doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08, +# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cxxm \ + *.cpp \ + *.cppm \ + *.ccm \ + *.c++ \ + *.c++m \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.idl \ + *.ddl \ + *.odl \ + *.h \ + *.hh \ + *.hpp \ + *.h++ \ + *.ixx \ + *.l \ + *.cs \ + *.d \ + *.php \ + *.php4 \ + *.php5 \ + *.phtml \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.pyw \ + *.f90 \ + *.f95 \ + *.f03 \ + *.f08 \ + *.f18 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl \ + *.ucf \ + *.qsf \ + *.ice # The RECURSIVE tag can be used to specify whether or not subdirectories should # be searched for input files as well. @@ -931,11 +1068,8 @@ EXCLUDE_PATTERNS = # output. The symbol name can be a fully qualified name, a word, or if the # wildcard * is used, a substring. Examples: ANamespace, AClass, # ANamespace::AClass, ANamespace::*Test -# -# Note that the wildcards are matched against the file with absolute path, so to -# exclude all test directories use the pattern */test/* -EXCLUDE_SYMBOLS = detail +EXCLUDE_SYMBOLS = # The EXAMPLE_PATH tag can be used to specify one or more files or directories # that contain example code fragments that are included (see the \include @@ -948,7 +1082,7 @@ EXAMPLE_PATH = # *.h) to filter out the source-files in the directories. If left blank all # files are included. -EXAMPLE_PATTERNS = +EXAMPLE_PATTERNS = * # If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be # searched for input files to be used with the \include or \dontinclude commands @@ -978,6 +1112,11 @@ IMAGE_PATH = # code is scanned, but not when the output code is generated. If lines are added # or removed, the anchors will not be placed correctly. # +# Note that doxygen will use the data processed and written to standard output +# for further processing, therefore nothing else, like debug statements or used +# commands (so in case of a Windows batch file always use @echo OFF), should be +# written to standard output. +# # Note that for custom extensions or not directly supported extensions you also # need to set EXTENSION_MAPPING for the extension otherwise the files are not # properly processed by doxygen. @@ -1019,6 +1158,15 @@ FILTER_SOURCE_PATTERNS = USE_MDFILE_AS_MAINPAGE = +# The Fortran standard specifies that for fixed formatted Fortran code all +# characters from position 72 are to be considered as comment. A common +# extension is to allow longer lines before the automatic comment starts. The +# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can +# be processed before the automatic comment starts. +# Minimum value: 7, maximum value: 10000, default value: 72. + +FORTRAN_COMMENT_AFTER = 72 + #--------------------------------------------------------------------------- # Configuration options related to source browsing #--------------------------------------------------------------------------- @@ -1030,10 +1178,11 @@ USE_MDFILE_AS_MAINPAGE = # also VERBATIM_HEADERS is set to NO. # The default value is: NO. -SOURCE_BROWSER = NO +SOURCE_BROWSER = YES # Setting the INLINE_SOURCES tag to YES will include the body of functions, -# classes and enums directly into the documentation. +# multi-line macros, enums or list initialized variables directly into the +# documentation. # The default value is: NO. INLINE_SOURCES = NO @@ -1105,6 +1254,46 @@ USE_HTAGS = NO VERBATIM_HEADERS = YES +# If the CLANG_ASSISTED_PARSING tag is set to YES then doxygen will use the +# clang parser (see: +# http://clang.llvm.org/) for more accurate parsing at the cost of reduced +# performance. This can be particularly helpful with template rich C++ code for +# which doxygen's built-in parser lacks the necessary type information. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. +# The default value is: NO. + +CLANG_ASSISTED_PARSING = YES + +# If the CLANG_ASSISTED_PARSING tag is set to YES and the CLANG_ADD_INC_PATHS +# tag is set to YES then doxygen will add the directory of each input to the +# include path. +# The default value is: YES. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_ADD_INC_PATHS = YES + +# If clang assisted parsing is enabled you can provide the compiler with command +# line options that you would normally use when invoking the compiler. Note that +# the include paths will already be set by doxygen for the files and directories +# specified with INPUT and INCLUDE_PATH. +# This tag requires that the tag CLANG_ASSISTED_PARSING is set to YES. + +CLANG_OPTIONS = + +# If clang assisted parsing is enabled you can provide the clang parser with the +# path to the directory containing a file called compile_commands.json. This +# file is the compilation database (see: +# http://clang.llvm.org/docs/HowToSetupToolingForLLVM.html) containing the +# options used when the source files were built. This is equivalent to +# specifying the -p option to a clang tool, such as clang-check. These options +# will then be passed to the parser. Any options specified with CLANG_OPTIONS +# will be added as well. +# Note: The availability of this option depends on whether or not doxygen was +# generated with the -Duse_libclang=ON option for CMake. + +CLANG_DATABASE_PATH = @CMAKE_CURRENT_BINARY_DIR@/.. + #--------------------------------------------------------------------------- # Configuration options related to the alphabetical class index #--------------------------------------------------------------------------- @@ -1116,10 +1305,11 @@ VERBATIM_HEADERS = YES ALPHABETICAL_INDEX = YES -# In case all classes in a project start with a common prefix, all classes will -# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag -# can be used to specify a prefix (or a list of prefixes) that should be ignored -# while generating the index headers. +# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes) +# that should be ignored while generating the index headers. The IGNORE_PREFIX +# tag works for classes, function and member names. The entity will be placed in +# the alphabetical list under the first letter of the entity name that remains +# after removing the prefix. # This tag requires that the tag ALPHABETICAL_INDEX is set to YES. IGNORE_PREFIX = @@ -1198,10 +1388,16 @@ HTML_STYLESHEET = # Doxygen will copy the style sheet files to the output directory. # Note: The order of the extra style sheet files is of importance (e.g. the last # style sheet in the list overrules the setting of the previous ones in the -# list). For an example see the documentation. +# list). +# Note: Since the styling of scrollbars can currently not be overruled in +# Webkit/Chromium, the styling will be left out of the default doxygen.css if +# one or more extra stylesheets have been specified. So if scrollbar +# customization is desired it has to be added explicitly. For an example see the +# documentation. # This tag requires that the tag GENERATE_HTML is set to YES. -HTML_EXTRA_STYLESHEET = +HTML_EXTRA_STYLESHEET = @CMAKE_CURRENT_BINARY_DIR@/doxygen-awesome.css \ + @CMAKE_CURRENT_BINARY_DIR@/doxygen-awesome-sidebar-only.css # The HTML_EXTRA_FILES tag can be used to specify one or more extra images or # other source files which should be copied to the HTML output directory. Note @@ -1213,6 +1409,19 @@ HTML_EXTRA_STYLESHEET = HTML_EXTRA_FILES = +# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output +# should be rendered with a dark or light theme. +# Possible values are: LIGHT always generates light mode output, DARK always +# generates dark mode output, AUTO_LIGHT automatically sets the mode according +# to the user preference, uses light mode if no preference is set (the default), +# AUTO_DARK automatically sets the mode according to the user preference, uses +# dark mode if no preference is set and TOGGLE allows a user to switch between +# light and dark mode via a button. +# The default value is: AUTO_LIGHT. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE = LIGHT + # The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen # will adjust the colors in the style sheet and background images according to # this color. Hue is specified as an angle on a color-wheel, see @@ -1243,15 +1452,6 @@ HTML_COLORSTYLE_SAT = 100 HTML_COLORSTYLE_GAMMA = 80 -# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML -# page will contain the date and time when the page was generated. Setting this -# to YES can help to show when doxygen was last run and thus if the -# documentation is up to date. -# The default value is: NO. -# This tag requires that the tag GENERATE_HTML is set to YES. - -HTML_TIMESTAMP = NO - # If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML # documentation will contain a main index with vertical navigation menus that # are dynamically created via JavaScript. If disabled, the navigation index will @@ -1271,6 +1471,33 @@ HTML_DYNAMIC_MENUS = YES HTML_DYNAMIC_SECTIONS = NO +# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be +# dynamically folded and expanded in the generated HTML source code. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_CODE_FOLDING = YES + +# If the HTML_COPY_CLIPBOARD tag is set to YES then doxygen will show an icon in +# the top right corner of code and text fragments that allows the user to copy +# its content to the clipboard. Note this only works if supported by the browser +# and the web page is served via a secure context (see: +# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file: +# protocol. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COPY_CLIPBOARD = YES + +# Doxygen stores a couple of settings persistently in the browser (via e.g. +# cookies). By default these settings apply to all HTML pages generated by +# doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store +# the settings under a project specific key, such that the user preferences will +# be stored separately. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_PROJECT_COOKIE = + # With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries # shown in the various tree structured indices initially; the user can expand # and collapse entries dynamically later on. Doxygen will expand the tree to @@ -1401,6 +1628,16 @@ BINARY_TOC = NO TOC_EXPAND = NO +# The SITEMAP_URL tag is used to specify the full URL of the place where the +# generated documentation will be placed on the server by the user during the +# deployment of the documentation. The generated sitemap is called sitemap.xml +# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL +# is specified no sitemap is generated. For information about the sitemap +# protocol see https://www.sitemaps.org +# This tag requires that the tag GENERATE_HTML is set to YES. + +SITEMAP_URL = + # If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and # QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that # can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help @@ -1511,7 +1748,7 @@ DISABLE_INDEX = NO # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -GENERATE_TREEVIEW = NO +GENERATE_TREEVIEW = YES # When both GENERATE_TREEVIEW and DISABLE_INDEX are set to YES, then the # FULL_SIDEBAR option determines if the side bar is limited to only the treeview @@ -1576,17 +1813,6 @@ HTML_FORMULA_FORMAT = png FORMULA_FONTSIZE = 10 -# Use the FORMULA_TRANSPARENT tag to determine whether or not the images -# generated for formulas are transparent PNGs. Transparent PNGs are not -# supported properly for IE 6.0, but are supported on all modern browsers. -# -# Note that when changing this option you need to delete any form_*.png files in -# the HTML output directory before the changes have effect. -# The default value is: YES. -# This tag requires that the tag GENERATE_HTML is set to YES. - -FORMULA_TRANSPARENT = YES - # The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands # to create new LaTeX commands to be used in formulas as building blocks. See # the section "Including formulas" for details. @@ -1602,7 +1828,7 @@ FORMULA_MACROFILE = # The default value is: NO. # This tag requires that the tag GENERATE_HTML is set to YES. -USE_MATHJAX = NO +USE_MATHJAX = YES # With MATHJAX_VERSION it is possible to specify the MathJax version to be used. # Note that the different versions of MathJax have different requirements with @@ -1613,7 +1839,7 @@ USE_MATHJAX = NO # The default value is: MathJax_2. # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_VERSION = MathJax_2 +MATHJAX_VERSION = MathJax_3 # When MathJax is enabled you can set the default output format to be used for # the MathJax output. For more details about the output format see MathJax @@ -1624,7 +1850,7 @@ MATHJAX_VERSION = MathJax_2 # Possible values are: HTML-CSS (which is slower, but has the best # compatibility. This is the name for Mathjax version 2, for MathJax version 3 # this will be translated into chtml), NativeMML (i.e. MathML. Only supported -# for NathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This +# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This # is the name for Mathjax version 3, for MathJax version 2 this will be # translated into HTML-CSS) and SVG. # The default value is: HTML-CSS. @@ -1644,12 +1870,12 @@ MATHJAX_FORMAT = HTML-CSS # - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3 # This tag requires that the tag USE_MATHJAX is set to YES. -MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest +MATHJAX_RELPATH = # The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax # extension names that should be enabled during MathJax rendering. For example -# for MathJax version 2 (see https://docs.mathjax.org/en/v2.7-latest/tex.html -# #tex-and-latex-extensions): +# for MathJax version 2 (see +# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions): # MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols # For example for MathJax version 3 (see # http://docs.mathjax.org/en/latest/input/tex/extensions/index.html): @@ -1782,7 +2008,7 @@ LATEX_OUTPUT = latex # the output language. # This tag requires that the tag GENERATE_LATEX is set to YES. -LATEX_CMD_NAME = latex +LATEX_CMD_NAME = # The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate # index for LaTeX. @@ -1900,9 +2126,16 @@ PDF_HYPERLINKS = YES USE_PDFLATEX = YES -# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode -# command to the generated LaTeX files. This will instruct LaTeX to keep running -# if errors occur, instead of asking the user for help. +# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error. +# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch +# mode nothing is printed on the terminal, errors are scrolled as if is +# hit at every error; missing files that TeX tries to input or request from +# keyboard input (\read on a not open input stream) cause the job to abort, +# NON_STOP In nonstop mode the diagnostic message will appear on the terminal, +# but there is no possibility of user interaction just like in batch mode, +# SCROLL In scroll mode, TeX will stop only for missing files to input or if +# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at +# each error, asking for user intervention. # The default value is: NO. # This tag requires that the tag GENERATE_LATEX is set to YES. @@ -1923,14 +2156,6 @@ LATEX_HIDE_INDICES = NO LATEX_BIB_STYLE = plain -# If the LATEX_TIMESTAMP tag is set to YES then the footer of each generated -# page will contain the date and time when the page was generated. Setting this -# to NO can help when comparing the output of multiple runs. -# The default value is: NO. -# This tag requires that the tag GENERATE_LATEX is set to YES. - -LATEX_TIMESTAMP = NO - # The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute) # path from which the emoji images will be read. If a relative path is entered, # it will be relative to the LATEX_OUTPUT directory. If left blank the @@ -2096,13 +2321,39 @@ DOCBOOK_OUTPUT = docbook #--------------------------------------------------------------------------- # If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an -# AutoGen Definitions (see http://autogen.sourceforge.net/) file that captures +# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures # the structure of the code including all documentation. Note that this feature # is still experimental and incomplete at the moment. # The default value is: NO. GENERATE_AUTOGEN_DEF = NO +#--------------------------------------------------------------------------- +# Configuration options related to Sqlite3 output +#--------------------------------------------------------------------------- + +# If the GENERATE_SQLITE3 tag is set to YES doxygen will generate a Sqlite3 +# database with symbols found by doxygen stored in tables. +# The default value is: NO. + +GENERATE_SQLITE3 = NO + +# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be +# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put +# in front of it. +# The default directory is: sqlite3. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_OUTPUT = sqlite3 + +# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db +# database file will be recreated with each doxygen run. If set to NO, doxygen +# will warn if a database file is already found and not modify it. +# The default value is: YES. +# This tag requires that the tag GENERATE_SQLITE3 is set to YES. + +SQLITE3_RECREATE_DB = YES + #--------------------------------------------------------------------------- # Configuration options related to the Perl module output #--------------------------------------------------------------------------- @@ -2177,7 +2428,8 @@ SEARCH_INCLUDES = YES # The INCLUDE_PATH tag can be used to specify one or more directories that # contain include files that are not input files but should be processed by the -# preprocessor. +# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of +# RECURSIVE has no effect here. # This tag requires that the tag SEARCH_INCLUDES is set to YES. INCLUDE_PATH = @@ -2244,15 +2496,15 @@ TAGFILES = GENERATE_TAGFILE = -# If the ALLEXTERNALS tag is set to YES, all external class will be listed in -# the class index. If set to NO, only the inherited external classes will be -# listed. +# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces +# will be listed in the class and namespace index. If set to NO, only the +# inherited external classes will be listed. # The default value is: NO. ALLEXTERNALS = NO # If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed -# in the modules index. If set to NO, only the current project's groups will be +# in the topic index. If set to NO, only the current project's groups will be # listed. # The default value is: YES. @@ -2266,16 +2518,9 @@ EXTERNAL_GROUPS = YES EXTERNAL_PAGES = YES #--------------------------------------------------------------------------- -# Configuration options related to the dot tool +# Configuration options related to diagram generator tools #--------------------------------------------------------------------------- -# You can include diagrams made with dia in doxygen documentation. Doxygen will -# then run dia to produce the diagram and insert it in the documentation. The -# DIA_PATH tag allows you to specify the directory where the dia binary resides. -# If left empty dia is assumed to be found in the default search path. - -DIA_PATH = - # If set to YES the inheritance and collaboration graphs will hide inheritance # and usage relations if the target is undocumented or is not a class. # The default value is: YES. @@ -2284,7 +2529,7 @@ HIDE_UNDOC_RELATIONS = YES # If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is # available from the path. This tool is part of Graphviz (see: -# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent # Bell Labs. The other options in this section have no effect if this option is # set to NO # The default value is: NO. @@ -2301,37 +2546,55 @@ HAVE_DOT = NO DOT_NUM_THREADS = 0 -# When you want a differently looking font in the dot files that doxygen -# generates you can specify the font name using DOT_FONTNAME. You need to make -# sure dot is able to find the font, which can be done by putting it in a -# standard location or by setting the DOTFONTPATH environment variable or by -# setting DOT_FONTPATH to the directory containing the font. -# The default value is: Helvetica. +# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of +# subgraphs. When you want a differently looking font in the dot files that +# doxygen generates you can specify fontname, fontcolor and fontsize attributes. +# For details please see Node, +# Edge and Graph Attributes specification You need to make sure dot is able +# to find the font, which can be done by putting it in a standard location or by +# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the +# directory containing the font. Default graphviz fontsize is 14. +# The default value is: fontname=Helvetica,fontsize=10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_COMMON_ATTR = "fontname=Helvetica,fontsize=10" + +# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can +# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. Complete documentation about +# arrows shapes. +# The default value is: labelfontname=Helvetica,labelfontsize=10. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTNAME = Helvetica +DOT_EDGE_ATTR = "labelfontname=Helvetica,labelfontsize=10" -# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of -# dot graphs. -# Minimum value: 4, maximum value: 24, default value: 10. +# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes +# around nodes set 'shape=plain' or 'shape=plaintext' Shapes specification +# The default value is: shape=box,height=0.2,width=0.4. # This tag requires that the tag HAVE_DOT is set to YES. -DOT_FONTSIZE = 10 +DOT_NODE_ATTR = "shape=box,height=0.2,width=0.4" -# By default doxygen will tell dot to use the default font as specified with -# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set -# the path where dot can find it using this tag. +# You can set the path where dot can find font specified with fontname in +# DOT_COMMON_ATTR and others dot attributes. # This tag requires that the tag HAVE_DOT is set to YES. DOT_FONTPATH = -# If the CLASS_GRAPH tag is set to YES (or GRAPH) then doxygen will generate a -# graph for each documented class showing the direct and indirect inheritance -# relations. In case HAVE_DOT is set as well dot will be used to draw the graph, -# otherwise the built-in generator will be used. If the CLASS_GRAPH tag is set -# to TEXT the direct and indirect inheritance relations will be shown as texts / -# links. -# Possible values are: NO, YES, TEXT and GRAPH. +# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then doxygen will +# generate a graph for each documented class showing the direct and indirect +# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and +# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case +# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the +# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used. +# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance +# relations will be shown as texts / links. Explicit enabling an inheritance +# graph or choosing a different representation for an inheritance graph of a +# specific class, can be accomplished by means of the command \inheritancegraph. +# Disabling an inheritance graph can be accomplished by means of the command +# \hideinheritancegraph. +# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN. # The default value is: YES. CLASS_GRAPH = YES @@ -2339,14 +2602,21 @@ CLASS_GRAPH = YES # If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a # graph for each documented class showing the direct and indirect implementation # dependencies (inheritance, containment, and class references variables) of the -# class with other documented classes. +# class with other documented classes. Explicit enabling a collaboration graph, +# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the +# command \collaborationgraph. Disabling a collaboration graph can be +# accomplished by means of the command \hidecollaborationgraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. COLLABORATION_GRAPH = YES # If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for -# groups, showing the direct groups dependencies. +# groups, showing the direct groups dependencies. Explicit enabling a group +# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means +# of the command \groupgraph. Disabling a directory graph can be accomplished by +# means of the command \hidegroupgraph. See also the chapter Grouping in the +# manual. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2388,8 +2658,8 @@ DOT_UML_DETAILS = NO # The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters # to display on a single line. If the actual line length exceeds this threshold -# significantly it will wrapped across multiple lines. Some heuristics are apply -# to avoid ugly line breaks. +# significantly it will be wrapped across multiple lines. Some heuristics are +# applied to avoid ugly line breaks. # Minimum value: 0, maximum value: 1000, default value: 17. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2406,7 +2676,9 @@ TEMPLATE_RELATIONS = NO # If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to # YES then doxygen will generate a graph for each documented file showing the # direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO, +# can be accomplished by means of the command \includegraph. Disabling an +# include graph can be accomplished by means of the command \hideincludegraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2415,7 +2687,10 @@ INCLUDE_GRAPH = YES # If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are # set to YES then doxygen will generate a graph for each documented file showing # the direct and indirect include dependencies of the file with other documented -# files. +# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set +# to NO, can be accomplished by means of the command \includedbygraph. Disabling +# an included by graph can be accomplished by means of the command +# \hideincludedbygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2455,7 +2730,10 @@ GRAPHICAL_HIERARCHY = YES # If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the # dependencies a directory has on other directories in a graphical way. The # dependency relations are determined by the #include relations between the -# files in the directories. +# files in the directories. Explicit enabling a directory graph, when +# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command +# \directorygraph. Disabling a directory graph can be accomplished by means of +# the command \hidedirectorygraph. # The default value is: YES. # This tag requires that the tag HAVE_DOT is set to YES. @@ -2471,7 +2749,7 @@ DIR_GRAPH_MAX_DEPTH = 1 # The DOT_IMAGE_FORMAT tag can be used to set the image format of the images # generated by dot. For an explanation of the image formats see the section # output formats in the documentation of the dot tool (Graphviz (see: -# http://www.graphviz.org/)). +# https://www.graphviz.org/)). # Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order # to make the SVG files visible in IE 9+ (other browsers do not have this # requirement). @@ -2508,11 +2786,12 @@ DOT_PATH = DOTFILE_DIRS = -# The MSCFILE_DIRS tag can be used to specify one or more directories that -# contain msc files that are included in the documentation (see the \mscfile -# command). +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. -MSCFILE_DIRS = +DIA_PATH = # The DIAFILE_DIRS tag can be used to specify one or more directories that # contain dia files that are included in the documentation (see the \diafile @@ -2541,7 +2820,7 @@ PLANTUML_INCLUDE_PATH = # The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes # that will be shown in the graph. If the number of nodes in a graph becomes # larger than this value, doxygen will truncate the graph, which is visualized -# by representing a node as a red box. Note that doxygen if the number of direct +# by representing a node as a red box. Note that if the number of direct # children of the root node in a graph is already larger than # DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that # the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. @@ -2562,18 +2841,6 @@ DOT_GRAPH_MAX_NODES = 50 MAX_DOT_GRAPH_DEPTH = 0 -# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent -# background. This is disabled by default, because dot on Windows does not seem -# to support this out of the box. -# -# Warning: Depending on the platform used, enabling this option may lead to -# badly anti-aliased labels on the edges of a graph (i.e. they become hard to -# read). -# The default value is: NO. -# This tag requires that the tag HAVE_DOT is set to YES. - -DOT_TRANSPARENT = NO - # Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output # files in one run (i.e. multiple -o and -T options on the command line). This # makes dot run faster, but since only newer versions of dot (>1.8.10) support @@ -2601,3 +2868,19 @@ GENERATE_LEGEND = YES # The default value is: YES. DOT_CLEANUP = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. If the MSCGEN_TOOL tag is left empty (the default), then doxygen will +# use a built-in version of mscgen tool to produce the charts. Alternatively, +# the MSCGEN_TOOL tag can also specify the name an external tool. For instance, +# specifying prog as the value, doxygen will call the tool as prog -T +# -o . The external tool should support +# output file formats "png", "eps", "svg", and "ismap". + +MSCGEN_TOOL = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = diff --git a/doc/DoxygenLayout.xml b/doc/DoxygenLayout.xml new file mode 100644 index 00000000..20cc3cd0 --- /dev/null +++ b/doc/DoxygenLayout.xml @@ -0,0 +1,326 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/doc/_static/css/custom.css b/doc/_static/css/custom.css deleted file mode 100644 index a8c2f1bd..00000000 --- a/doc/_static/css/custom.css +++ /dev/null @@ -1,5 +0,0 @@ -@import url("theme.css"); - -.wy-nav-content { - max-width: 70em; -} diff --git a/doc/_static/logo_cea.png b/doc/_static/logo_cea.png deleted file mode 100644 index 1a28b439..00000000 Binary files a/doc/_static/logo_cea.png and /dev/null differ diff --git a/doc/_static/logo_cnrs.png b/doc/_static/logo_cnrs.png deleted file mode 100644 index 53c7af0e..00000000 Binary files a/doc/_static/logo_cnrs.png and /dev/null differ diff --git a/doc/_static/logo_erc.jpg b/doc/_static/logo_erc.jpg deleted file mode 100644 index b7181ee0..00000000 Binary files a/doc/_static/logo_erc.jpg and /dev/null differ diff --git a/doc/_static/logo_flatiron.png b/doc/_static/logo_flatiron.png deleted file mode 100644 index 9c97b4be..00000000 Binary files a/doc/_static/logo_flatiron.png and /dev/null differ diff --git a/doc/_static/logo_github.png b/doc/_static/logo_github.png deleted file mode 100644 index 54bca717..00000000 Binary files a/doc/_static/logo_github.png and /dev/null differ diff --git a/doc/_static/logo_simons.jpg b/doc/_static/logo_simons.jpg deleted file mode 100644 index 88431238..00000000 Binary files a/doc/_static/logo_simons.jpg and /dev/null differ diff --git a/doc/_static/logo_x.png b/doc/_static/logo_x.png deleted file mode 100644 index 18aba0bc..00000000 Binary files a/doc/_static/logo_x.png and /dev/null differ diff --git a/doc/_templates/autosummary_class_template.rst b/doc/_templates/autosummary_class_template.rst deleted file mode 100644 index 49fc6786..00000000 --- a/doc/_templates/autosummary_class_template.rst +++ /dev/null @@ -1,29 +0,0 @@ -{{ fullname | escape | underline }} - -.. currentmodule:: {{ module }} - -.. autoclass:: {{ objname }} - -{% block methods %} -{% if methods %} -.. rubric:: {{ _('Methods') }} - -.. autosummary:: - :toctree: - {% for item in methods %} - ~{{ name }}.{{ item }} - {%- endfor %} -{% endif %} -{% endblock %} - -{% block attributes %} -{% if attributes %} -.. rubric:: {{ _('Attributes') }} - -.. autosummary:: - :toctree: - {% for item in attributes %} - ~{{ name }}.{{ item }} - {%- endfor %} -{% endif %} -{% endblock %} diff --git a/doc/_templates/autosummary_module_template.rst b/doc/_templates/autosummary_module_template.rst deleted file mode 100644 index 737206f8..00000000 --- a/doc/_templates/autosummary_module_template.rst +++ /dev/null @@ -1,68 +0,0 @@ -{{ fullname | escape | underline}} - -.. automodule:: {{ fullname }} - -{% block functions %} -{% if functions %} -.. rubric:: Functions - -.. autosummary:: - :toctree: - {% for item in functions %} - {{ item }} - {%- endfor %} -{% endif %} -{% endblock %} - -{% block attributes %} -{% if attributes %} -.. rubric:: Module Attributes - -.. autosummary:: - :toctree: - {% for item in attributes %} - {{ item }} - {%- endfor %} -{% endif %} -{% endblock %} - -{% block classes %} -{% if classes %} -.. rubric:: {{ _('Classes') }} - -.. autosummary:: - :toctree: - :template: autosummary_class_template.rst - {% for item in classes %} - {{ item }} - {%- endfor %} -{% endif %} -{% endblock %} - -{% block exceptions %} -{% if exceptions %} -.. rubric:: {{ _('Exceptions') }} - -.. autosummary:: - :toctree: - {% for item in exceptions %} - {{ item }} - {%- endfor %} -{% endif %} -{% endblock %} - -{% block modules %} -{% if modules %} -.. rubric:: Modules - -.. autosummary:: - :toctree: - :template: autosummary_module_template.rst - :recursive: - - {% for item in modules %} - {{ item }} - {%- endfor %} -{% endif %} -{% endblock %} - diff --git a/doc/_templates/sideb.html b/doc/_templates/sideb.html deleted file mode 100644 index 97d89df8..00000000 --- a/doc/_templates/sideb.html +++ /dev/null @@ -1,14 +0,0 @@ -

- CEA - Ecole Polytechnique -
- CNRS -ERC - Flatiron Institute -
- Simons Foundation -

-
-

- Visit the project on GitHub -

diff --git a/doc/about.rst b/doc/about.rst deleted file mode 100644 index 0afed9f4..00000000 --- a/doc/about.rst +++ /dev/null @@ -1,6 +0,0 @@ -.. _about: - -About h5 -******** - -A high-level C++ interface to the [hdf5 library](https://www.hdfgroup.org/solutions/hdf5/). diff --git a/doc/conf.py.in b/doc/conf.py.in deleted file mode 100644 index 60a1bec6..00000000 --- a/doc/conf.py.in +++ /dev/null @@ -1,142 +0,0 @@ -# -*- coding: utf-8 -*- -# -# documentation build configuration file - -import sys -sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext") -sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext/numpydoc") - -# exclude these folders from scanning by sphinx -exclude_patterns = ['_templates'] - -extensions = ['sphinx.ext.autodoc', - 'sphinx.ext.mathjax', - 'sphinx.ext.intersphinx', - 'sphinx.ext.doctest', - 'sphinx.ext.todo', - 'sphinx.ext.viewcode', - 'sphinx.ext.autosummary', - 'sphinx.ext.githubpages', - 'sphinx_autorun', - 'nbsphinx', - 'myst_parser', - 'matplotlib.sphinxext.plot_directive', - 'numpydoc'] - -myst_enable_extensions = [ - "amsmath", - "colon_fence", - "deflist", - "dollarmath", - "html_admonition", - "html_image", - "linkify", - "replacements", - "smartquotes", - "substitution", - "tasklist", -] - -# The name of the Pygments (syntax highlighting) style to use. -pygments_style = 'sphinx' - -source_suffix = '.rst' - -# Turn on sphinx.ext.autosummary -autosummary_generate = True -autosummary_imported_members=False - -project = '@PROJECT_NAME@ - A lightweight C++ and Python hdf5 interface' -version = '@PROJECT_VERSION@' - -# this makes the current project version available as var in every rst file -rst_epilog = """ -.. |PROJECT_VERSION| replace:: {version} -""".format( -version = version, -) - -copyright = '2018-2021 The Simons Foundation, authors: A. Hampel, O. Parcollet, D. Simons, H. Strand, N. Wentzell' - -mathjax_path = "https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=default" -templates_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_templates'] - -# this requires the sphinx_rtd_theme to be installed via pip -html_theme = 'sphinx_rtd_theme' -# this loads the custom css file to change the page width -html_style = 'css/custom.css' - -# options for the the rtd theme -html_theme_options = { - 'logo_only': False, - 'display_version': True, - 'prev_next_buttons_location': 'bottom', - 'style_external_links': False, - 'vcs_pageview_mode': '', - 'style_nav_header_background': '#7E588A', - # Toc options - 'collapse_navigation': False, - 'sticky_navigation': True, - 'navigation_depth': 5, - 'includehidden': True, - 'titles_only': False -} - -html_show_sphinx = False - -html_context = {'header_title': '@PROJECT_NAME@'} - -html_static_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_static'] -html_sidebars = {'index': ['sideb.html', 'searchbox.html']} - -htmlhelp_basename = '@PROJECT_NAME@doc' - -# Plot options -plot_include_source = True -plot_html_show_source_link = False -plot_html_show_formats = False - -intersphinx_mapping = {'python': ('https://docs.python.org/3.11', None)} - -# open links in new tab instead of same window -from sphinx.writers.html import HTMLTranslator -from docutils import nodes -from docutils.nodes import Element - -class PatchedHTMLTranslator(HTMLTranslator): - - def visit_reference(self, node: Element) -> None: - atts = {'class': 'reference'} - if node.get('internal') or 'refuri' not in node: - atts['class'] += ' internal' - else: - atts['class'] += ' external' - # --------------------------------------------------------- - # Customize behavior (open in new tab, secure linking site) - atts['target'] = '_blank' - atts['rel'] = 'noopener noreferrer' - # --------------------------------------------------------- - if 'refuri' in node: - atts['href'] = node['refuri'] or '#' - if self.settings.cloak_email_addresses and atts['href'].startswith('mailto:'): - atts['href'] = self.cloak_mailto(atts['href']) - self.in_mailto = True - else: - assert 'refid' in node, \ - 'References must have "refuri" or "refid" attribute.' - atts['href'] = '#' + node['refid'] - if not isinstance(node.parent, nodes.TextElement): - assert len(node) == 1 and isinstance(node[0], nodes.image) - atts['class'] += ' image-reference' - if 'reftitle' in node: - atts['title'] = node['reftitle'] - if 'target' in node: - atts['target'] = node['target'] - self.body.append(self.starttag(node, 'a', '', **atts)) - - if node.get('secnumber'): - self.body.append(('%s' + self.secnumber_suffix) % - '.'.join(map(str, node['secnumber']))) - -def setup(app): - app.set_translator('html', PatchedHTMLTranslator) diff --git a/doc/documentation.md b/doc/documentation.md new file mode 100644 index 00000000..52551e9e --- /dev/null +++ b/doc/documentation.md @@ -0,0 +1,76 @@ +@page documentation API Documentation + +[TOC] + +The **h5** library implements various high-level C++ wrappers around their low-level C counterparts. +It is not intended as a full replacement for the HDF5 C implementation. +Instead it tries to help the user with the most common tasks like opening/closing files, creating groups/datasets +and writing/reading data to/from HDF5 files. + +The following provides a detailed reference documentation grouped into logical units. + +If you are looking for a specific function, class, etc., try using the search bar in the top left corner. + +## h5 data model + +The @ref data_model forms the backbone of the **h5** library by implementing some of the key concepts from the +[abstract HDF5 data model](https://docs.hdfgroup.org/hdf5/develop/_h5_d_m__u_g.html#subsec_data_model_abstract). +It provides concrete types for HDF5 files, groups, datasets, dataspaces and so on. + +The most fundamental type in **h5** is the h5::object. +It serves either as a base class for + +* @ref h5::file +* @ref h5::group + +or as a type alias for + +* @ref h5::dataset +* @ref h5::datatype +* @ref h5::attribute +* @ref h5::proplist +* @ref h5::attribute + +For the average user, the two important types are the h5::file and h5::group. +They simplify basic tasks like creating, opening and manipulating HDF5 files, groups, subgroups, datasets and links. + +## h5 types + +@ref h5_types offers various functionality related to HDF5 datatypes, e.g. mapping C++ types to their corresponding +HDF5 datatypes (see h5::hdf5_type) or getting the type stored in an HDF5 dataset (see h5::get_hdf5_type). + +## Read and write from/to HDF5 + +@ref readwrite contains all the tools to actually read or write HDF5 files. + +At the highest level it provides a @ref rw_generic "generic interface" for reading/writing from/to HDF5. +Internally, the generic functions call more specialized implementations depending on what types are being passed to +the interface. + +**h5** has native support for various types: + +* @ref rw_scalar +* @ref rw_array +* @ref rw_map +* @ref rw_optional +* @ref rw_pair +* @ref rw_tuple +* @ref rw_variant +* @ref rw_vector + +The @ref rw_array "array interface" helps with loading and storing n-dimensional arrays. + +Furthermore, the generic design of the read/write functionality makes it easily extendible to support custom user types as well. +@ref ex2 shows how to make a user defined type HDF5 serializable. + +## Serialize/Deserialize + +**h5** can also be used to @ref serialize an object to/from a byte buffer using the two generic functions: + +* h5::serialize: Store a given object in a byte buffer. +* h5::deserialize: Restore an object from a given byte buffer. + +## Utilities + +@ref utilities is a collection of convenience functions, definitions and various other tools which do not fit +into any other category above but are used throughout the **h5** library. diff --git a/doc/documentation.rst b/doc/documentation.rst deleted file mode 100644 index c024c682..00000000 --- a/doc/documentation.rst +++ /dev/null @@ -1,29 +0,0 @@ -.. _documentation: - -Documentation -************* - - -.. math:: - - (a + b)^2 &= (a + b)(a + b) \\ - &= a^2 + 2ab + b^2 - - -C++ reference manual -==================== - -.. toctree:: - :maxdepth: 5 - - cpp2rst_generated/contents - -Python reference manual -======================= - -.. autosummary:: - :toctree: _autosummary - :template: autosummary_module_template.rst - :recursive: - - h5 diff --git a/doc/ex1.md b/doc/ex1.md new file mode 100644 index 00000000..a3f0c6f6 --- /dev/null +++ b/doc/ex1.md @@ -0,0 +1,107 @@ +@page ex1 Example 1: Write/Read a 2-dimensional array + +[TOC] + +This example shows how to use the **h5** array interface to write/read a 2-dimensional array to/from HDF5. + +We first write a 2-dimensional `5x5` array to an HDF5 file. + +Then we use an h5::array_interface::hyperslab to select every other column from the original `5x5` matrix and +read it into a `5x3` h5::array_interface::h5_array_view. + +Finally, we output the result to stdout. + +```cpp +#include
+#include +#include +#include + +// this is only needed to avoid issues with doxygen +#include + +int main() { + // data to be written + std::vector data (25, 0); + std::iota(data.begin(), data.end(), 0); + + // create an h5_array_view of rank 2 with dimensions 5x5 of the original data + int rank = 2; + int rows_w = 5; + int cols_w = 5; + h5::array_interface::h5_array_view view(h5::hdf5_type(), (void*) data.data(), rank, false); + view.slab.count[0] = rows_w; + view.slab.count[1] = cols_w; + view.L_tot[0] = rows_w; + view.L_tot[1] = cols_w; + + // create file in read/write mode + h5::file file("view.h5", 'w'); + + // write h5_array_view to file + h5::array_interface::write(file, "view", view, false); + + // reserve memory for reading + std::vector read_data(15, 0); + + // create an h5_array_view or rank 2 with dimensions 5x3 of the read memory + int rows_r = 5; + int cols_r = 3; + h5::array_interface::h5_array_view read_view(h5::hdf5_type(), (void*) read_data.data(), rank, false); + read_view.slab.count[0] = rows_r; + read_view.slab.count[1] = cols_r; + read_view.L_tot[0] = rows_r; + read_view.L_tot[1] = cols_r; + + // create an hyperslab to select the data to be read from the file (every other column -> stride in second dimension is 2) + h5::array_interface::hyperslab read_slab(rank, false); + read_slab.count[0] = rows_r; + read_slab.count[1] = cols_r; + read_slab.stride[0] = 1; + read_slab.stride[1] = 2; + + // get h5_lengths_type from the dataset in the file + auto lengths_type = h5::array_interface::get_h5_lengths_type(file, "view"); + + // read data from file + h5::array_interface::read(file, "view", read_view, lengths_type, read_slab); + + // output data + for (int i = 0; i < rows_r; ++i) { + for (int j = 0; j < cols_r; ++j) { + std::cout << read_data[i * cols_r + j] << " "; + } + std::cout << std::endl; + } +} +``` + +Output: + +``` +0 2 4 +5 7 9 +10 12 14 +15 17 19 +20 22 24 +``` + +Contents of `view.h5`: + +``` +HDF5 "view.h5" { +GROUP "/" { + DATASET "view" { + DATATYPE H5T_STD_I32LE + DATASPACE SIMPLE { ( 5, 5 ) / ( 5, 5 ) } + DATA { + (0,0): 0, 1, 2, 3, 4, + (1,0): 5, 6, 7, 8, 9, + (2,0): 10, 11, 12, 13, 14, + (3,0): 15, 16, 17, 18, 19, + (4,0): 20, 21, 22, 23, 24 + } + } +} +} +``` diff --git a/doc/ex2.md b/doc/ex2.md new file mode 100644 index 00000000..54428f16 --- /dev/null +++ b/doc/ex2.md @@ -0,0 +1,129 @@ +@page ex2 Example 2: Write/Read a custom C++ type + +[TOC] + +This example shows how to make your own C++ type HDF5 serializable. + +We first define a class `foo` that we want to write/read to/from HDF5. + +The most important functions are `h5_write` and `h5_read`. They are called by the generic h5::write and h5::read +implementations using argument-dependent lookup (ADL). + +The `hdf5_format` function is optional and can be used to attach a string attribute to `foo` objects. +When reading from HDF5, it allows us to verify that data that we are reading is actually of type `foo`. + +In `main()`, we simply create an HDF5 file, write an object of type `foo`, read the same object from +the file and output the result to stdout. + +```cpp +#include
+#include +#include + +// define HDF5 serializable type +class foo { +private: + int i; + double d; + std::string s; + +public: + // constructors + foo() = default; + foo(int i, double d, std::string s) : i(i), d(d), s(s) {} + + // print members to stdout + void print() const { std::cout << i << " " << d << " " << s << std::endl; } + + // get hdf5_format tag + static std::string hdf5_format() { return "foo";} + + // write to HDF5 + friend void h5_write(h5::group g, const std::string& subgroup_name, const foo& f) { + auto sg = g.create_group(subgroup_name); + h5::write_hdf5_format(sg, f); + h5::write(sg, "i", f.i); + h5::write(sg, "d", f.d); + h5::write(sg, "s", f.s); + } + + // read from HDF5 + friend void h5_read(h5::group g, const std::string& subgroup_name, foo& f) { + auto sg = g.open_group(subgroup_name); + h5::assert_hdf5_format(sg, f); + h5::read(sg, "i", f.i); + h5::read(sg, "d", f.d); + h5::read(sg, "s", f.s); + } +}; + +int main() { + // create file in read/write mode + h5::file file("foo.h5", 'w'); + + // write foo + h5::write(file, "myfoo", foo(1, 2.2, "three")); + + // read foo + foo f; + h5::read(file, "myfoo", f); + + // output foo + f.print(); +} +``` + +Output: + +``` +1 2.2 three +``` + +Contents of `foo.h5`: + +``` +HDF5 "foo.h5" { +GROUP "/" { + GROUP "myfoo" { + ATTRIBUTE "Format" { + DATATYPE H5T_STRING { + STRSIZE H5T_VARIABLE; + STRPAD H5T_STR_NULLTERM; + CSET H5T_CSET_UTF8; + CTYPE H5T_C_S1; + } + DATASPACE SCALAR + DATA { + (0): "foo" + } + } + DATASET "d" { + DATATYPE H5T_IEEE_F64LE + DATASPACE SCALAR + DATA { + (0): 2.2 + } + } + DATASET "i" { + DATATYPE H5T_STD_I32LE + DATASPACE SCALAR + DATA { + (0): 1 + } + } + DATASET "s" { + DATATYPE H5T_STRING { + STRSIZE H5T_VARIABLE; + STRPAD H5T_STR_NULLTERM; + CSET H5T_CSET_UTF8; + CTYPE H5T_C_S1; + } + DATASPACE SCALAR + DATA { + (0): "three" + } + } + } +} +} +``` diff --git a/doc/ex3.md b/doc/ex3.md new file mode 100644 index 00000000..bef765d1 --- /dev/null +++ b/doc/ex3.md @@ -0,0 +1,27 @@ +@page ex3 Example 3: Serialization + +[TOC] + +This example shows how to use **h5** to serialize/deserialize a `std::complex` object to/from a byte buffer. + +```cpp +#include
+#include
+#include + +int main() { + // serialize a complex number + std::complex original { 1.0, 2.0 }; + auto buffer = h5::serialize(original); + + // deserialize the complex number + auto restored = h5::deserialize>(buffer); + std::cout << original << " == " << restored << "\n"; +} +``` + +Output: + +``` +(1,2) == (1,2) +``` diff --git a/doc/examples.md b/doc/examples.md new file mode 100644 index 00000000..09a715f4 --- /dev/null +++ b/doc/examples.md @@ -0,0 +1,39 @@ +@page examples Examples + +[TOC] + +- @ref ex1 +- @ref ex2 +- @ref ex3 + +@section compiling Compiling the examples + +All examples have been compiled on a MacBook Pro with an Apple M2 Max chip and [HDF5](https://www.hdfgroup.org/solutions/hdf5/) 1.14.3 +installed via [homebrew](https://brew.sh/). +We further used clang 17.0.6 together with cmake 3.29.1. + +Assuming that the actual example code is in a file `main.cpp`, the following generic `CMakeLists.txt` should work for all examples: + +```cmake +cmake_minimum_required(VERSION 3.20) +project(example CXX) + +# set required standard +set(CMAKE_BUILD_TYPE Release) +set(CMAKE_CXX_STANDARD 20) +set(CMAKE_CXX_STANDARD_REQUIRED ON) + +# fetch h5 from github +set(Build_Tests OFF CACHE BOOL "" FORCE) +include (FetchContent) +FetchContent_Declare( + h5 + GIT_REPOSITORY https://github.com/TRIQS/h5.git + GIT_TAG 1.2.x +) +FetchContent_MakeAvailable(h5) + +# build the example +add_executable(ex main.cpp) +target_link_libraries(ex h5::h5_c h5::hdf5) +``` diff --git a/doc/groups.dox b/doc/groups.dox new file mode 100644 index 00000000..031c6cd0 --- /dev/null +++ b/doc/groups.dox @@ -0,0 +1,696 @@ +/** + * @defgroup data_model h5 data model + * @brief Implementations of various types representing some of the key concepts of the + * abstract HDF5 data model. + * + * @details The base type in this hierarchy is h5::object. The h5::object class is a simple wrapper around an HDF5 object. + * It stores the HDF5 ID of the wrapped object and is either used as a base class (h5::file, h5::group) or as an alias + * (h5::dataset, h5::datatype, h5::dataspace, h5::proplist, h5::attribute) for other HDF5 objects. + * + * All object lifetimes are handled by a reference counting approach based on RAII. + * + * The following code shows how one can use those basic types to create a file ("file.h5") and write a number ("e") to + * the root ("/") group. Then a subgroup ("mydata") is created in the root group and the number "pi" is written to it: + * + * ```cpp + * #include
+ * + * int main() { + * // create file in write mode + * h5::file file("file.h5", 'w'); + * + * // write Euler number + * h5::write(file, "e", 2.7182); + * + * // create root group + * h5::group root(file); + * + * // create a subgroup of root + * auto subgroup = root.create_group("mydata"); + * + * // write pi to subgroup + * h5::write(subgroup, "pi", 3.1415); + * } + * ``` + * + * Contents of `file.h5`: + * + * ``` + * HDF5 "file.h5" { + * GROUP "/" { + * DATASET "e" { + * DATATYPE H5T_IEEE_F64LE + * DATASPACE SCALAR + * DATA { + * (0): 2.7182 + * } + * } + * GROUP "mydata" { + * DATASET "pi" { + * DATATYPE H5T_IEEE_F64LE + * DATASPACE SCALAR + * DATA { + * (0): 3.1415 + * } + * } + * } + * } + * } + * ``` + */ + + +/** + * @defgroup h5_types h5 types + * @brief Map C++ datatypes to their corresponding HDF5 datatypes and other related functionality. + */ + +/** + * @defgroup readwrite Read and write from/to HDF5 + * @brief Generic and specialized tool set to read/write supported types and datastructures from/to HDF5. + */ + +/** + * @defgroup rw_generic Generic read/write + * @ingroup readwrite + * @brief The generic functions (h5::read, h5::write, h5::read_attribute, ...) call their more specialized counterparts + * (h5::h5_read, h5::h5_write, h5::h5_read_attribute, ...) which find the correct implementation using ADL. + * + * @details Users can define their own specialized `h5_write` and `h5_read` functions for types which are not natively + * supported by **h5**. @ref ex2 shows how this can be done. + */ + +/** + * @defgroup rw_arrayinterface Array interface + * @ingroup readwrite + * @brief Specialized functions to read/write n-dimensional arrays from/to HDF5. + * + * @details It provides specialized functions to read/write an h5::array_interface::h5_array_view from/to HDF5. An + * array view mimics a view on a generic n-dimensional array. It uses HDF5's hyperslab concept to perform the + * reading/writing. + * + * @ref ex1 shows how to use the array interface to write and read a 2-dimensional array. + */ + +/** + * @defgroup rw_scalar Arithmetic scalar types + * @ingroup readwrite + * @brief Specialized functions to read/write arithmetic scalar types from/to HDF5. + * + * @details The following types are supported: + * - type `T` as long as `std::is_arithmetic_v == true`, + * - `std::complex` and + * - h5::dcplx_t. + * + * The following code writes a `std::complex` to an HDF5 file, reads the same number and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("complex.h5", 'w'); + * + * // write complex number + * std::complex z { 1.0, 2.0 }; + * h5::write(file, "z", z); + * + * // read into complex number + * std::complex z_rd; + * h5::read(file, "z", z_rd); + * + * // output complex number + * std::cout << z_rd << std::endl; + * } + * @endcode + * + * Output: + * + * ``` + * (1,2) + * ``` + * + * Contents of `complex.h5`: + * + * ``` + * HDF5 "complex.h5" { + * GROUP "/" { + * DATASET "z" { + * DATATYPE H5T_IEEE_F64LE + * DATASPACE SIMPLE { ( 2 ) / ( 2 ) } + * DATA { + * (0): 1, 2 + * } + * ATTRIBUTE "__complex__" { + * DATATYPE H5T_STRING { + * STRSIZE H5T_VARIABLE; + * STRPAD H5T_STR_NULLTERM; + * CSET H5T_CSET_UTF8; + * CTYPE H5T_C_S1; + * } + * DATASPACE SCALAR + * DATA { + * (0): "1" + * } + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_string std::string, const char* and char_buf + * @ingroup readwrite + * @brief Specialized functions to read/write std::string, `const char *` and a generic character buffer (h5::char_buf) + * from/to HDF5. + * + * @details The following code writes a string to an HDF5 file, reads the same string and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("string.h5", 'w'); + * + * // write string + * h5::write(file, "mystring", "Hello world!"); + * + * // read into string + * std::string str; + * h5::read(file, "mystring", str); + * + * // output string + * std::cout << str << std::endl; + * } + * @endcode + * + * Output: + * + * ``` + * Hello world! + * ``` + * + * Contents of `string.h5`: + * + * ``` + * HDF5 "string.h5" { + * GROUP "/" { + * DATASET "mystring" { + * DATATYPE H5T_STRING { + * STRSIZE H5T_VARIABLE; + * STRPAD H5T_STR_NULLTERM; + * CSET H5T_CSET_UTF8; + * CTYPE H5T_C_S1; + * } + * DATASPACE SCALAR + * DATA { + * (0): "Hello world!" + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_array std::array + * @ingroup readwrite + * @brief Specialized functions to read/write a std::array from/to HDF5. + * + * @details The following code writes a std::array to an HDF5 file, reads the same array and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("array.h5", 'w'); + * + * // write array + * h5::write(file, "myarray", std::array { 1, 2, 3, 4 , 5 }); + * + * // read into array + * std::array arr; + * h5::read(file, "myarray", arr); + * + * // output array + * for (auto x : arr) std::cout << x << std::endl; + * } + * @endcode + * + * Output: + * + * ``` + * 1 + * 2 + * 3 + * 4 + * 5 + * ``` + * + * Contents of `array.h5`: + * + * ``` + * HDF5 "array.h5" { + * GROUP "/" { + * DATASET "myarray" { + * DATATYPE H5T_STD_I32LE + * DATASPACE SIMPLE { ( 5 ) / ( 5 ) } + * DATA { + * (0): 1, 2, 3, 4, 5 + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_map std::map + * @ingroup readwrite + * @brief Specialized functions to read/write a std::map from/to HDF5. + * + * @details The following code writes a std::map to an HDF5 file, reads the same map and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("map.h5", 'w'); + * + * // write map + * h5::write(file, "mymap", std::map { { "a", 1 }, { "b", 2 }, { "c", 3 } }); + * + * // read into map + * std::map map; + * h5::read(file, "mymap", map); + * + * // output map + * for (auto [x, y] : map) std::cout << "(" << x << ", " << y << ")" << std::endl; + * } + * @endcode + * + * Output: + * + * ``` + * (a, 1) + * (b, 2) + * (c, 3) + * ``` + * + * Contents of `map.h5`: + * + * ``` + * HDF5 "map.h5" { + * GROUP "/" { + * GROUP "mymap" { + * ATTRIBUTE "Format" { + * DATATYPE H5T_STRING { + * STRSIZE H5T_VARIABLE; + * STRPAD H5T_STR_NULLTERM; + * CSET H5T_CSET_UTF8; + * CTYPE H5T_C_S1; + * } + * DATASPACE SCALAR + * DATA { + * (0): "Dict" + * } + * } + * DATASET "a" { + * DATATYPE H5T_STD_I32LE + * DATASPACE SCALAR + * DATA { + * (0): 1 + * } + * } + * DATASET "b" { + * DATATYPE H5T_STD_I32LE + * DATASPACE SCALAR + * DATA { + * (0): 2 + * } + * } + * DATASET "c" { + * DATATYPE H5T_STD_I32LE + * DATASPACE SCALAR + * DATA { + * (0): 3 + * } + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_optional std::optional + * @ingroup readwrite + * @brief Specialized functions to read/write a std::optional from/to HDF5. + * + * @details The following code writes a std::optional to an HDF5 file, reads the same value and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("optional.h5", 'w'); + * + * // write optional + * h5::write(file, "myoptional", std::optional { 3.1415f }); + * + * // read into optional + * std::optional val; + * h5::read(file, "myoptional", val); + * + * // output optional value + * std::cout << *val << std::endl; + * } + * @endcode + * + * Output: + * + * ``` + * 3.1415 + * ``` + * + * Contents of `optional.h5`: + * + * ``` + * HDF5 "optional.h5" { + * GROUP "/" { + * DATASET "myoptional" { + * DATATYPE H5T_IEEE_F32LE + * DATASPACE SCALAR + * DATA { + * (0): 3.1415 + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_pair std::pair + * @ingroup readwrite + * @brief Specialized functions to read/write a std::pair from/to HDF5. + * + * @details The following code writes a std::pair to an HDF5 file, reads the same pair and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("pair.h5", 'w'); + * + * // write pair + * h5::write(file, "mypair", std::pair { 3.1415f, 291827ul }); + * + * // read into pair + * std::pair p; + * h5::read(file, "mypair", p); + * + * // output pair + * std::cout << "(" << p.first << ", " << p.second << ")" << std::endl; + * } + * @endcode + * + * Output: + * + * ``` + * (3.1415, 291827) + * ``` + * + * Contents of `pair.h5`: + * + * ``` + * HDF5 "pair.h5" { + * GROUP "/" { + * GROUP "mypair" { + * ATTRIBUTE "Format" { + * DATATYPE H5T_STRING { + * STRSIZE H5T_VARIABLE; + * STRPAD H5T_STR_NULLTERM; + * CSET H5T_CSET_UTF8; + * CTYPE H5T_C_S1; + * } + * DATASPACE SCALAR + * DATA { + * (0): "PythonTupleWrap" + * } + * } + * DATASET "0" { + * DATATYPE H5T_IEEE_F32LE + * DATASPACE SCALAR + * DATA { + * (0): 3.1415 + * } + * } + * DATASET "1" { + * DATATYPE H5T_STD_U64LE + * DATASPACE SCALAR + * DATA { + * (0): 291827 + * } + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_tuple std::tuple + * @ingroup readwrite + * @brief Specialized functions to read/write a std::tuple from/to HDF5. + * + * @details The following code writes a std::tuple to an HDF5 file, reads the same tuple and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("tuple.h5", 'w'); + * + * // write tuple + * h5::write(file, "mytuple", std::tuple { 3.1415f, 291827ul, 'a' }); + * + * // read into tuple + * std::tuple tup; + * h5::read(file, "mytuple", tup); + * + * // output tuple + * std::apply([](auto f, auto u, auto c) { + * std::cout << "(" << f << ", " << u << ", " << c << ")" << std::endl; + * }, tup); + * } + * @endcode + * + * Output: + * + * ``` + * (3.1415, 291827, a) + * ``` + * + * Contents of `tuple.h5`: + * + * ``` + * HDF5 "tuple.h5" { + * GROUP "/" { + * GROUP "mytuple" { + * ATTRIBUTE "Format" { + * DATATYPE H5T_STRING { + * STRSIZE H5T_VARIABLE; + * STRPAD H5T_STR_NULLTERM; + * CSET H5T_CSET_UTF8; + * CTYPE H5T_C_S1; + * } + * DATASPACE SCALAR + * DATA { + * (0): "PythonTupleWrap" + * } + * } + * DATASET "0" { + * DATATYPE H5T_IEEE_F32LE + * DATASPACE SCALAR + * DATA { + * (0): 3.1415 + * } + * } + * DATASET "1" { + * DATATYPE H5T_STD_U64LE + * DATASPACE SCALAR + * DATA { + * (0): 291827 + * } + * } + * DATASET "2" { + * DATATYPE H5T_STD_I8LE + * DATASPACE SCALAR + * DATA { + * (0): 97 + * } + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_variant std::variant + * @ingroup readwrite + * @brief Specialized functions to read/write a std::variant from/to HDF5. + * + * @details The following code writes a std::variant to an HDF5 file, reads the same variant and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("variant.h5", 'w'); + * + * // write variant + * h5::write(file, "myvariant", std::variant { "Hello, World!" }); + * + * // read into variant + * std::variant var; + * h5::read(file, "myvariant", var); + * + * // output variant + * std::visit([](const auto& x) { std::cout << x << std::endl; }, var); + * } + * @endcode + * + * Output: + * + * ``` + * Hello, World! + * ``` + * + * Contents of `variant.h5`: + * + * ``` + * HDF5 "variant.h5" { + * GROUP "/" { + * DATASET "myvariant" { + * DATATYPE H5T_STRING { + * STRSIZE H5T_VARIABLE; + * STRPAD H5T_STR_NULLTERM; + * CSET H5T_CSET_UTF8; + * CTYPE H5T_C_S1; + * } + * DATASPACE SCALAR + * DATA { + * (0): "Hello, World!" + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup rw_vector std::vector + * @ingroup readwrite + * @brief Specialized functions to read/write a std::vector from/to HDF5. + * + * @details The following code writes a std::vector to an HDF5 file, reads the same vector and outputs it to stdout: + * + * @code{.cpp} + * #include
+ * #include + * #include + * + * int main() { + * // create file in read/write mode + * h5::file file("vec.h5", 'w'); + * + * // write vector + * h5::write(file, "myvec", std::vector { 1.1, 2.2, 3.3 }); + * + * // read into vector + * std::vector vec; + * h5::read(file, "myvec", vec); + * + * // output vector + * for (auto x : vec) std::cout << x << std::endl; + * } + * @endcode + * + * Output: + * + * ``` + * 1.1 + * 2.2 + * 3.3 + * ``` + * + * Contents of `vec.h5`: + * + * ``` + * HDF5 "vec.h5" { + * GROUP "/" { + * DATASET "myvec" { + * DATATYPE H5T_IEEE_F64LE + * DATASPACE SIMPLE { ( 3 ) / ( 3 ) } + * DATA { + * (0): 1.1, 2.2, 3.3 + * } + * } + * } + * } + * ``` + */ + +/** + * @defgroup format Format tags + * @ingroup readwrite + * @brief Specialized functions to read/write `hdf5_format` tags from/to HDF5 attributes. + * + * @details An `hdf5_format` tag is a string that describes the type of object stored in an HDF5 file. A type `T` which is + * HDF5 readable/writeable should do one of the following: + * - implement a static member function `static hdf5_format() -> std::string` or + * - specialize the `hdf5_format_impl` struct for `T` and provide an implementation for the member `static invoke() -> std::string`. + * + * The specialized `h5_write` function for type `T` should write the format tag to file (see h5::write_hdf5_format and h5::write_hdf5_format_as_string) + * and the `h5_read` function should check that the format tag is correct (see h5::assert_hdf5_format and h5::assert_hdf5_format_as_string). + */ + +/** + * @defgroup serialize Serialize/Deserialize + * @brief Serialize/Deserialize an object to/from a byte buffer using HDF5's memory file. + * + * @details @ref ex3 shows a simple example how this interface could be used in practice. + */ + + /** + * @defgroup utilities Utilities + * @brief A collection of convenience functions, definitions and various other tools used throughout the **h5** library. + */ \ No newline at end of file diff --git a/doc/index.rst b/doc/index.rst deleted file mode 100644 index 0a4a2dfa..00000000 --- a/doc/index.rst +++ /dev/null @@ -1,33 +0,0 @@ -.. _welcome: - -h5 -** - -.. sidebar:: h5 |PROJECT_VERSION| - - This is the homepage of h5 |PROJECT_VERSION|. - For changes see the :ref:`changelog page `. - - .. image:: _static/logo_github.png - :width: 75% - :align: center - :target: https://github.com/triqs/h5 - - -A high-level C++ interface to the `hdf5 library `_. - -This documentation is generated based on `rst `_ files -and the comments in the sources and headers. - -Learn how to use h5 in the :ref:`documentation`. - - -.. toctree:: - :maxdepth: 2 - :hidden: - - install - documentation - issues - ChangeLog.md - about diff --git a/doc/install.rst b/doc/install.rst deleted file mode 100644 index dfb417a9..00000000 --- a/doc/install.rst +++ /dev/null @@ -1,64 +0,0 @@ -.. highlight:: bash - -.. _install: - -Install h5 -********** - -Compiling h5 from source -======================== - -.. note:: To guarantee reproducibility in scientific calculations we strongly recommend the use of a stable `release `_ of h5. - -Installation steps ------------------- - -#. Download the source code of the latest stable version by cloning the ``TRIQS/h5`` repository from GitHub:: - - $ git clone https://github.com/TRIQS/h5 h5.src - -#. Create and move to a new directory where you will compile the code:: - - $ mkdir h5.build && cd h5.build - -#. In the build directory call cmake, including any additional custom CMake options, see below:: - - $ cmake -DCMAKE_INSTALL_PREFIX=path_to_install_dir ../h5.src - -#. Compile the code, run the tests and install the application:: - - $ make - $ make test - $ make install - -Versions --------- - -To use a particular version, go into the directory with the sources, and look at all available versions:: - - $ cd h5.src && git tag - -Checkout the version of the code that you want:: - - $ git checkout 2.1.0 - -and follow steps 2 to 4 above to compile the code. - -Custom CMake options --------------------- - -The compilation of ``h5`` can be configured using CMake-options:: - - cmake ../h5.src -DOPTION1=value1 -DOPTION2=value2 ... - -+-----------------------------------------+-----------------------------------------------+ -| Options | Syntax | -+=========================================+===============================================+ -| Specify an installation path | -DCMAKE_INSTALL_PREFIX=path_to_h5 | -+-----------------------------------------+-----------------------------------------------+ -| Build in Debugging Mode | -DCMAKE_BUILD_TYPE=Debug | -+-----------------------------------------+-----------------------------------------------+ -| Disable testing (not recommended) | -DBuild_Tests=OFF | -+-----------------------------------------+-----------------------------------------------+ -| Build the documentation | -DBuild_Documentation=ON | -+-----------------------------------------+-----------------------------------------------+ diff --git a/doc/installation.md b/doc/installation.md new file mode 100644 index 00000000..a1901804 --- /dev/null +++ b/doc/installation.md @@ -0,0 +1,101 @@ +@page installation Installation + +[TOC] + +**h5** supports the usual installation procedure using CMake. + +If you want to skip the installation step, you can go directly to @ref integration to see how you can integrate +**h5** into your own C++ project by using CMake's @ref fetch. + +> **Note:** To guarantee reproducibility in scientific calculations, we strongly recommend the use of a stable +> [release version](https://github.com/TRIQS/h5/releases). + + +@section dependencies Dependencies + +The dependencies of the C++ **h5** library are as follows: + +* gcc version 12 or later OR clang version 15 or later OR IntelLLVM (icx) 2023.1.0 or later +* CMake version 3.20 or later (for installation or integration into an existing project via CMake) +* HDF5 library version 1.8.2 or later + +For the Python interface, additional dependencies are required: + +* Python version 3.6 or later +* numpy version 1.11.0 or later +* mako version 0.9.1 or later +* scipy (version 1.11.3 is tested but older/newer versions should work as well) + +The Python interface is built with [TRIQS/cpp2py](https://github.com/TRIQS/cpp2py). +Please refer to the [GitHub repository](https://github.com/TRIQS/cpp2py) for further information. + + +@section install_steps Installation steps + +1. Download the source code of the latest stable version by cloning the [TRIQS/h5](https://github.com/triqs/h5) +repository from GitHub: + + ```console + $ git clone https://github.com/TRIQS/h5 h5.src + ``` + +2. Create and move to a new directory where you will compile the code: + + ```console + $ mkdir h5.build && cd h5.build + ``` + +3. In the build directory, call cmake including any additional custom CMake options (see below): + + ```console + $ cmake ../h5.src -DCMAKE_INSTALL_PREFIX=path_to_install_dir + ``` + + Note that it is required to specify ``CMAKE_INSTALL_PREFIX``, otherwise CMake will stop with an error. + +4. Compile the code, run the tests and install the application: + + ```console + $ make -j N + $ make test + $ make install + ``` + + Replace `N` with the number of cores you want to use to build the library. + + +@section versions Versions + +To choose a particular version, go into the directory with the sources, and look at all available versions: + +```console +$ cd h5.src && git tag +``` + +Checkout the version of the code that you want: + +```console +$ git checkout 1.2.0 +``` + +and follow steps 2 to 4 above to compile the code. + + +@section cmake_options Custom CMake options + +The compilation of **h5** can be configured by calling cmake with additional command line options + +```console +$ cmake ../h5.src -DCMAKE_INSTALL_PREFIX=path_to_install_dir -DOPTION1=value1 -DOPTION2=value2 ... +``` + +The following options are available: + +| Options | Syntax | +|-----------------------------------------|---------------------------------------------------| +| Specify an installation path | ``-DCMAKE_INSTALL_PREFIX=path_to_install_dir`` | +| Build in Debugging Mode | ``-DCMAKE_BUILD_TYPE=Debug`` | +| Disable testing (not recommended) | ``-DBuild_Tests=OFF`` | +| Build the documentation | ``-DBuild_Documentation=ON`` | +| Disable Python support | ``-DPythonSupport=OFF`` | +| Build shared libraries | ``-DBUILD_SHARED_LIBS=ON`` | diff --git a/doc/integration.md b/doc/integration.md new file mode 100644 index 00000000..afcec562 --- /dev/null +++ b/doc/integration.md @@ -0,0 +1,100 @@ +@page integration Integration in C++ projects + +[TOC] + +**h5** is a compiled library. + +You can either +* build and install it beforehand (see @ref installation) and then link against it (see @ref find_package) or +* let CMake fetch and build it directly as part of your project (see @ref fetch). + +To use **h5** in your own `C++` code, you simply have to include the relevant header files. +For example: + +```cpp +#include
+ +// use h5 +``` + + +@section cmake CMake + +@subsection fetch FetchContent + +If you use [CMake](https://cmake.org/) to build your source code, it is recommended to fetch the **h5** directly from the +[Github repository](https://github.com/TRIQS/h5) using CMake's [FetchContent](https://cmake.org/cmake/help/latest/module/FetchContent.html) +module: + +```cmake +cmake_minimum_required(VERSION 3.20) +project(my_project CXX) + +# fetch from github +include (FetchContent) +FetchContent_Declare( + h5 + GIT_REPOSITORY https://github.com/TRIQS/h5.git + GIT_TAG 1.2.x +) +FetchContent_MakeAvailable(h5) + +# declare a target and link to h5 +add_executable(my_executable main.cpp) +target_link_libraries(my_executable h5::h5_c) +``` + +If you need to use some of the HDF5 C library features directly, you can simply link to it via `h5::hdf5`. + +Note that the above will also build [goolgetest](https://github.com/google/googletest) and the unit tests for **h5**. +To disable this, you can put `set(Build_Tests OFF CACHE BOOL "" FORCE)` before fetching the content or by specifying +`-DBuild_Tests=OFF` on the command line. + + +@subsection find_package find_package + +If you have already installed **h5** on your system by following the instructions from the @ref installation page, you can also make +use of CMake's [find_package](https://cmake.org/cmake/help/latest/command/find_package.html) command. +This has the advantage that you don't need to download anything, i.e. no internet connection is required. +Furthermore, you only need to build the library once and can use it in multiple independent projects. + +Let's assume that **h5** has been installed to `path_to_install_dir`. +Then linking your project to **h5** with CMake is as easy as + +```cmake +cmake_minimum_required(VERSION 3.20) +project(my_project CXX) + +# find h5 +find_package(h5 REQUIRED CONFIG) + +# declare a target and link to h5 +add_executable(my_executable main.cpp) +target_link_libraries(my_executable h5::h5_c) +``` + +In case, CMake cannot find the package, you might have to tell it where to look for the `h5-config.cmake` file by setting the variable +`h5_DIR` to `path_to_install_dir/lib/cmake/h5` or by sourcing the provided `h5vars.sh` before running CMake: + +```console +$ source path_to_install_dir/share/h5/h5vars.sh +``` + + +@subsection add_sub add_subdirectory + +You can also integrate **h5** into your CMake project by placing the entire source tree in a subdirectory and call `add_subdirectory()`: + +```cmake +cmake_minimum_required(VERSION 3.20) +project(my_project CXX) + +# add h5 subdirectory +add_subdirectory(deps/h5) + +# declare a target and link to h5 +add_executable(my_executable main.cpp) +target_link_libraries(my_executable h5::h5_c) +``` + +Here, it is assumed that the **h5** source tree is in a subdirectory `deps/h5` relative to your `CMakeLists.txt` file. diff --git a/doc/issues.md b/doc/issues.md new file mode 100644 index 00000000..a35be946 --- /dev/null +++ b/doc/issues.md @@ -0,0 +1,21 @@ +@page issues Issues + +[TOC] + +Please report all problems and bugs directly at the [GitHub issues page](https://github.com/TRIQS/h5/issues). +In order to make it easier for us to solve the issue please follow these guidelines: + +1. In all cases specify which version of the application you are using. You can + find the version number in the file `CMakeLists.txt` at the root of the + application sources. + +2. If you have a problem during the installation, give us information about + your operating system and the compiler you are using. Include the outputs of + the `cmake` and `make` commands as well as the `CMakeCache.txt` file + which is in the build directory. Please include these outputs in a + [gist](http://gist.github.com/>) file referenced in the issue. + +3. If you are experiencing a problem during the execution of the application, provide + a script which allows to quickly reproduce the problem. + +Thanks! diff --git a/doc/issues.rst b/doc/issues.rst deleted file mode 100644 index b770411e..00000000 --- a/doc/issues.rst +++ /dev/null @@ -1,23 +0,0 @@ -.. _issues: - -Reporting issues -**************** - -Please report all problems and bugs directly at the github issue page -``_. In order to make it easier for us -to solve the issue please follow these guidelines: - -#. In all cases specify which version of the application you are using. You can - find the version number in the file :file:`CMakeLists.txt` at the root of the - application sources. - -#. If you have a problem during the installation, give us information about - your operating system and the compiler you are using. Include the outputs of - the ``cmake`` and ``make`` commands as well as the ``CMakeCache.txt`` file - which is in the build directory. Please include these outputs in a - `gist `_ file referenced in the issue. - -#. If you are experiencing a problem during the execution of the application, provide - a script which allows to quickly reproduce the problem. - -Thanks! diff --git a/doc/overview.md.in b/doc/overview.md.in new file mode 100644 index 00000000..7c7561bc --- /dev/null +++ b/doc/overview.md.in @@ -0,0 +1,102 @@ +@mainpage Overview + +[TOC] + +[![build](https://github.com/TRIQS/h5/workflows/build/badge.svg?branch=unstable)](https://github.com/TRIQS/h5/actions?query=workflow%3Abuild) + +> This is the homepage of **TRIQS/h5 v@PROJECT_VERSION@**. The source code can be found on [GitHub](https://github.com/TRIQS/h5). + +**h5** provides a high-level C++ interface to the [HDF5 library](https://www.hdfgroup.org/solutions/hdf5/). + +The main purpose of the library is to simplify the most common tasks like creating/opening/closing HDF5 files/groups/datasets/dataspaces or +writing/reading data to/from HDF5 files. + +More specifically, **h5** +* provides classes representing general HDF5 objects, like files, groups, etc., +* provides read and write functions for various [STL container types](https://en.cppreference.com/w/cpp/container), +* provides a generic array interface to store and load multi-dimensional arrays, +* takes an [RAII](https://en.wikipedia.org/wiki/Resource_acquisition_is_initialization) approach to manage reference counting and +* comes with Python bindings. + +**h5** only implements a small subset of the functionality provided by the HDF5 library. For more advanced tasks, the user can always resort to +the underlying HDF5 C-implementation. + +@section motivation Motivating example + +Storing and loading a vector of strings and a vector of doubles is as easy as + +```cpp +#include
+#include +#include + +int main(){ + + { + // Open file in write mode + h5::file file("vec.h5", 'w'); + + std::vector vecs = {"a", "b"}; + std::vector vecd = {1.0, 2.0}; + + h5::write(file, "vecs", vecs); + h5::write(file, "vecd", vecd); + + } // Close file + + { + // Open file in read mode + h5::file file("vec.h5", 'r'); + + std::vector vecs; + std::vector vecd; + + h5::read(file, "vecs", vecs); + h5::read(file, "vecd", vecd); + + } // Close file +} +``` + +This example will generate an HDF5 file `vec.h5` with two datasets in the root "/" group: + +``` +$ h5dump vec.h5 + +HDF5 "vec.h5" { +GROUP "/" { + DATASET "vecd" { + DATATYPE H5T_IEEE_F64LE + DATASPACE SIMPLE { ( 2 ) / ( 2 ) } + DATA { + (0): 1, 2 + } + } + DATASET "vecs" { + DATATYPE H5T_STRING { + STRSIZE 2; + STRPAD H5T_STR_NULLTERM; + CSET H5T_CSET_UTF8; + CTYPE H5T_C_S1; + } + DATASPACE SIMPLE { ( 2 ) / ( 2 ) } + DATA { + (0): "a", "b" + } + } +} +} +``` + +@section start Where to start? + +The @ref installation section tells you how to get the library and make it available on your system. + +@ref integration explains how to integrate **h5** in your own C++ code. + +Then, you can start with the @ref examples section to get an overview of the library's features and how +it can simplify basic HDF5 tasks. + +Furthermore, we provide a detailed reference @ref documentation to answer your questions. + +If you experience any problem with the library, you can post an @ref issues "Issue" on GitHub. diff --git a/doc/sphinxext/sphinx_autorun/__init__.py b/doc/sphinxext/sphinx_autorun/__init__.py deleted file mode 100644 index 1afa0377..00000000 --- a/doc/sphinxext/sphinx_autorun/__init__.py +++ /dev/null @@ -1,93 +0,0 @@ -# -*- coding: utf-8 -*- -""" -sphinxcontirb.autorun -~~~~~~~~~~~~~~~~~~~~~~ - -Run the code and insert stdout after the code block. -""" -import os -from subprocess import PIPE, Popen - -from docutils import nodes -from docutils.parsers.rst import Directive, directives -from sphinx.errors import SphinxError - -from sphinx_autorun import version - -__version__ = version.version - - -class RunBlockError(SphinxError): - category = 'runblock error' - - -class AutoRun(object): - here = os.path.abspath(__file__) - pycon = os.path.join(os.path.dirname(here), 'pycon.py') - config = { - 'pycon': 'python ' + pycon, - 'pycon_prefix_chars': 4, - 'pycon_show_source': False, - 'console': 'bash', - 'console_prefix_chars': 1, - } - - @classmethod - def builder_init(cls, app): - cls.config.update(app.builder.config.autorun_languages) - - -class RunBlock(Directive): - has_content = True - required_arguments = 1 - optional_arguments = 0 - final_argument_whitespace = False - option_spec = { - 'linenos': directives.flag, - } - - def run(self): - config = AutoRun.config - language = self.arguments[0] - - if language not in config: - raise RunBlockError('Unknown language %s' % language) - - # Get configuration values for the language - args = config[language].split() - input_encoding = config.get(language+'_input_encoding', 'utf8') - output_encoding = config.get(language+'_output_encoding', 'utf8') - prefix_chars = config.get(language+'_prefix_chars', 0) - show_source = config.get(language+'_show_source', True) - - # Build the code text - proc = Popen(args, bufsize=1, stdin=PIPE, stdout=PIPE, stderr=PIPE) - codelines = (line[prefix_chars:] for line in self.content) - code = u'\n'.join(codelines).encode(input_encoding) - - # Run the code - stdout, stderr = proc.communicate(code) - - # Process output - if stdout: - out = stdout.decode(output_encoding) - if stderr: - out = stderr.decode(output_encoding) - - # Get the original code with prefixes - if show_source: - code = u'\n'.join(self.content) - code_out = u'\n'.join((code, out)) - else: - code_out = out - - literal = nodes.literal_block(code_out, code_out) - literal['language'] = language - literal['linenos'] = 'linenos' in self.options - return [literal] - - -def setup(app): - app.add_directive('runblock', RunBlock) - app.connect('builder-inited', AutoRun.builder_init) - app.add_config_value('autorun_languages', AutoRun.config, 'env') diff --git a/doc/sphinxext/sphinx_autorun/pycon.py b/doc/sphinxext/sphinx_autorun/pycon.py deleted file mode 100644 index c0edf861..00000000 --- a/doc/sphinxext/sphinx_autorun/pycon.py +++ /dev/null @@ -1,31 +0,0 @@ -import sys -from code import InteractiveInterpreter - - -def main(): - """ - Print lines of input along with output. - """ - source_lines = (line.rstrip() for line in sys.stdin) - console = InteractiveInterpreter() - source = '' - try: - while True: - source = next(source_lines) - # Allow the user to ignore specific lines of output. - if not source.endswith('# ignore'): - print('>>>', source) - more = console.runsource(source) - while more: - next_line = next(source_lines) - print('...', next_line) - source += '\n' + next_line - more = console.runsource(source) - except StopIteration: - if more: - print('... ') - more = console.runsource(source + '\n') - - -if __name__ == '__main__': - main() diff --git a/doc/sphinxext/sphinx_autorun/version.py b/doc/sphinxext/sphinx_autorun/version.py deleted file mode 100644 index 433d173a..00000000 --- a/doc/sphinxext/sphinx_autorun/version.py +++ /dev/null @@ -1,4 +0,0 @@ -# coding: utf-8 -# file generated by setuptools_scm -# don't change, don't track in version control -version = '1.1.1' diff --git a/doc/sphinxext/triqs_example/triqs_example.py b/doc/sphinxext/triqs_example/triqs_example.py deleted file mode 100644 index 2c90ac4c..00000000 --- a/doc/sphinxext/triqs_example/triqs_example.py +++ /dev/null @@ -1,123 +0,0 @@ -import tempfile -# -*- coding: utf-8 -*- -# seems to be executed at the level of the conf.py -# so we need to link the lib at that place... -""" -""" -import os -import codecs -from os import path -from subprocess import Popen,PIPE -from docutils import nodes -from docutils.parsers.rst import Directive -from docutils.parsers.rst import directives -from sphinx.errors import SphinxError - -class TriqsExampleError(SphinxError): - category = 'triqs_example error' - -class TriqsExampleRun: - #here = os.path.abspath(__file__) - #pycon = os.path.join(os.path.dirname(here),'pycon.py') - config = dict( - ) - @classmethod - def builder_init(cls,app): - #cls.config.update(app.builder.config.autorun_languages) - #cls.config.update(app.builder.config.autocompile_opts) - pass - -class TriqsExample(Directive): - has_content = True - required_arguments = 1 - optional_arguments = 0 - final_argument_whitespace = False - option_spec = { - 'linenos': directives.flag, - } - - def run(self): - document = self.state.document - filename = self.arguments[0] - if not document.settings.file_insertion_enabled: - return [document.reporter.warning('File insertion disabled', - line=self.lineno)] - env = document.settings.env - if filename.startswith('/') or filename.startswith(os.sep): - rel_fn = filename[1:] - else: - docdir = path.dirname(env.doc2path(env.docname, base=None)) - rel_fn = path.normpath(path.join(docdir, filename)) - try: - fn = path.join(env.srcdir, rel_fn) - except UnicodeDecodeError: - # the source directory is a bytestring with non-ASCII characters; - # let's try to encode the rel_fn in the file system encoding - rel_fn = rel_fn.encode(sys.getfilesystemencoding()) - fn = path.join(env.srcdir, rel_fn) - - encoding = self.options.get('encoding', env.config.source_encoding) - try: - f = codecs.open(fn, 'rU', encoding) - lines = f.readlines() - f.close() - except (IOError, OSError): - return [document.reporter.warning( - 'Include file %r not found or reading it failed' % filename, - line=self.lineno)] - except UnicodeError: - return [document.reporter.warning( - 'Encoding %r used for reading included file %r seems to ' - 'be wrong, try giving an :encoding: option' % - (encoding, filename))] - - config = TriqsExampleRun.config - - # Get configuration values for the language - input_encoding = 'utf8' #config.get(language+'_input_encoding','ascii') - output_encoding = 'utf8' #config.get(language+'_output_encoding','ascii') - show_source = True - - # Build the code text - code = ''.join(lines).strip() - filename_clean = filename.rsplit('.',1)[0] - if filename_clean.startswith('./') : filename_clean = filename_clean[2:] - #print "Running the example ....",filename_clean - #print "Root ?", env.doc2path(env.docname, base=None) - - import subprocess as S - error = True - try : - stdout ='' - #resout = S.check_output("./example_bin/doc_%s"%(filename_clean) ,stderr=S.STDOUT,shell=True) - resout = S.check_output("./%s/doc_%s"%(docdir,filename_clean) ,stderr=S.STDOUT,shell=True) - if resout : - stdout = '---------- Result is -------\n' + resout.strip() - error = False - except S.CalledProcessError as E : - stdout ='---------- RunTime error -------\n' - stdout += E.output - - # Process output - if stdout: - stdout = stdout.decode(output_encoding,'ignore') - out = ''.join(stdout).decode(output_encoding) - else: - out = '' #.join(stderr).decode(output_encoding) - - # Get the original code with prefixes - code_out = '\n'.join((code,out)) - - if error : # report on console - print(" Error in processing ") - print(code_out) - - literal = nodes.literal_block(code_out,code_out) - literal['language'] = 'c' - literal['linenos'] = 'linenos' in self.options - return [literal] - -def setup(app): - app.add_directive('triqs_example', TriqsExample) - app.connect('builder-inited',TriqsExampleRun.builder_init) - diff --git a/doc/themes/triqs/layout.html b/doc/themes/triqs/layout.html deleted file mode 100644 index 0275e11a..00000000 --- a/doc/themes/triqs/layout.html +++ /dev/null @@ -1,52 +0,0 @@ -{# - layout.html - ~~~~~~~~~~~ - - TRIQS layout template heavily based on the sphinxdoc theme. - - :copyright: Copyright 2013 by the TRIQS team. - :copyright: Copyright 2007-2013 by the Sphinx team. - :license: BSD, see LICENSE for details. -#} -{%- extends "basic/layout.html" %} - -{# put the sidebar before the body #} -{% block sidebar1 %}{{ sidebar() }}{% endblock %} -{% block sidebar2 %}{% endblock %} - -{% block extrahead %} - - - - -{{ super() }} -{%- if not embedded %} - -{%- endif %} -{% endblock %} - -{% block rootrellink %} -
  • Home »
  • -{% endblock %} - -{% block header %} - -{% endblock %} diff --git a/doc/themes/triqs/static/bodybg.png b/doc/themes/triqs/static/bodybg.png deleted file mode 100644 index 506b6f90..00000000 Binary files a/doc/themes/triqs/static/bodybg.png and /dev/null differ diff --git a/doc/themes/triqs/static/cufon-yui.js b/doc/themes/triqs/static/cufon-yui.js deleted file mode 100644 index 935614e1..00000000 --- a/doc/themes/triqs/static/cufon-yui.js +++ /dev/null @@ -1,7 +0,0 @@ -/* - * Copyright (c) 2009 Simo Kinnunen. - * Licensed under the MIT license. - * - * @version 1.09i - */ -var Cufon=(function(){var m=function(){return m.replace.apply(null,arguments)};var x=m.DOM={ready:(function(){var C=false,E={loaded:1,complete:1};var B=[],D=function(){if(C){return}C=true;for(var F;F=B.shift();F()){}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",D,false);window.addEventListener("pageshow",D,false)}if(!window.opera&&document.readyState){(function(){E[document.readyState]?D():setTimeout(arguments.callee,10)})()}if(document.readyState&&document.createStyleSheet){(function(){try{document.body.doScroll("left");D()}catch(F){setTimeout(arguments.callee,1)}})()}q(window,"load",D);return function(F){if(!arguments.length){D()}else{C?F():B.push(F)}}})(),root:function(){return document.documentElement||document.body}};var n=m.CSS={Size:function(C,B){this.value=parseFloat(C);this.unit=String(C).match(/[a-z%]*$/)[0]||"px";this.convert=function(D){return D/B*this.value};this.convertFrom=function(D){return D/this.value*B};this.toString=function(){return this.value+this.unit}},addClass:function(C,B){var D=C.className;C.className=D+(D&&" ")+B;return C},color:j(function(C){var B={};B.color=C.replace(/^rgba\((.*?),\s*([\d.]+)\)/,function(E,D,F){B.opacity=parseFloat(F);return"rgb("+D+")"});return B}),fontStretch:j(function(B){if(typeof B=="number"){return B}if(/%$/.test(B)){return parseFloat(B)/100}return{"ultra-condensed":0.5,"extra-condensed":0.625,condensed:0.75,"semi-condensed":0.875,"semi-expanded":1.125,expanded:1.25,"extra-expanded":1.5,"ultra-expanded":2}[B]||1}),getStyle:function(C){var B=document.defaultView;if(B&&B.getComputedStyle){return new a(B.getComputedStyle(C,null))}if(C.currentStyle){return new a(C.currentStyle)}return new a(C.style)},gradient:j(function(F){var G={id:F,type:F.match(/^-([a-z]+)-gradient\(/)[1],stops:[]},C=F.substr(F.indexOf("(")).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);for(var E=0,B=C.length,D;E0){E=" "+E}}else{if(B400}if(I==500){I=400}for(var J in G){if(!k(G,J)){continue}J=parseInt(J,10);if(!F||JD){D=J}K.push(J)}if(ID){I=D}K.sort(function(M,L){return(E?(M>=I&&L>=I)?ML:(M<=I&&L<=I)?M>L:Mcufoncanvas{text-indent:0;}@media screen{cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}cufoncanvas{position:absolute;text-align:left;}cufon{display:inline-block;position:relative;vertical-align:'+(h?"middle":"text-bottom")+";}cufon cufontext{position:absolute;left:-10000in;font-size:1px;}a cufon{cursor:pointer}}@media print{cufon cufoncanvas{display:none;}}").replace(/;/g,"!important;"));function c(i,j){return a(i,/(?:em|ex|%)$|^[a-z-]+$/i.test(j)?"1em":j)}function a(l,m){if(m==="0"){return 0}if(/px$/i.test(m)){return parseFloat(m)}var k=l.style.left,j=l.runtimeStyle.left;l.runtimeStyle.left=l.currentStyle.left;l.style.left=m.replace("%","em");var i=l.style.pixelLeft;l.style.left=k;l.runtimeStyle.left=j;return i}function f(l,k,j,n){var i="computed"+n,m=k[i];if(isNaN(m)){m=k.get(n);k[i]=m=(m=="normal")?0:~~j.convertFrom(a(l,m))}return m}var g={};function d(p){var q=p.id;if(!g[q]){var n=p.stops,o=document.createElement("cvml:fill"),i=[];o.type="gradient";o.angle=180;o.focus="0";o.method="sigma";o.color=n[0][1];for(var m=1,l=n.length-1;mO){O=K}if(I>N){N=I}if(K":{"w":232},"?":{"d":"413,-133r0,133r-192,0r0,-133r192,0xm221,-188v-13,-173,78,-281,237,-282r341,0v53,0,80,-24,80,-71v0,-47,-27,-71,-80,-71r-799,0r0,-166r817,-1v141,-1,227,93,227,236v0,149,-87,234,-227,234r-315,0v-67,-1,-99,45,-89,121r-192,0","w":1218},"@":{"d":"305,-388v0,55,25,70,85,70r436,0r0,-146r-439,0v-55,0,-82,25,-82,76xm339,-62v-218,3,-334,-116,-339,-327v-4,-168,93,-282,227,-315v106,-26,574,-16,605,-3v56,23,105,70,105,151r0,316r-579,0v-98,2,-164,-54,-164,-148v0,-106,69,-154,188,-154r444,0v-2,-97,-62,-97,-185,-100v-135,-3,-342,-4,-427,22v-86,26,-136,115,-136,231v0,166,96,250,261,250r483,0r0,77r-483,0","w":1060},"A":{"d":"754,-341v0,-61,-24,-84,-89,-84r-626,0r0,-131r667,0v135,5,215,66,215,217r0,339r-745,0v-108,1,-176,-63,-176,-171v0,-107,69,-171,176,-170r578,0xm754,-131r0,-85r-534,0v-35,0,-53,14,-53,43v0,28,18,42,53,42r534,0","w":1096},"B":{"d":"969,-278v0,176,-93,278,-267,278r-702,0r0,-778r167,0r0,222r535,0v170,-2,267,101,267,278xm794,-278v0,-81,-38,-139,-114,-139r-513,0r0,278r513,0v76,0,114,-58,114,-139","w":1097},"C":{"d":"0,-278v0,-173,94,-278,267,-278r595,0r0,139r-573,0v-76,0,-114,58,-114,139v0,81,38,139,114,139r573,0r0,139r-595,0v-173,1,-267,-105,-267,-278","w":1022},"D":{"d":"0,-278v-1,-176,93,-278,267,-278r521,0r0,-222r167,0r0,778r-688,0v-171,2,-266,-102,-267,-278xm175,-278v0,81,38,139,114,139r499,0r0,-278r-499,0v-76,0,-114,58,-114,139","w":1130},"E":{"d":"176,-216v24,58,48,85,113,85r581,0r0,131r-603,0v-173,1,-267,-105,-267,-278v0,-173,94,-278,267,-278r603,0r0,131r-581,0v-65,4,-87,27,-113,84r694,0r0,125r-694,0","w":1022},"F":{"d":"105,-341v-10,-142,29,-222,167,-222r501,1r0,130r-423,0v-60,-4,-81,31,-78,91r501,-2r0,131r-501,2r0,425r-167,0r0,-425r-105,0r0,-131r105,0","w":906},"G":{"d":"0,-278v0,-173,94,-278,267,-278r770,1r0,571v3,126,-82,208,-203,208r-773,-2r0,-130r743,1v55,0,68,-33,66,-93r-603,0v-173,1,-267,-105,-267,-278xm175,-278v0,81,37,139,114,139r581,-2r0,-275r-581,-1v-76,0,-114,58,-114,139","w":1204},"H":{"d":"735,-359v1,-35,-25,-58,-58,-58r-510,0r0,417r-167,0r0,-778r167,0r0,222r537,0v116,-4,198,68,198,170r0,386r-167,0r0,-359"},"I":{"d":"167,0r-167,0r0,-556r167,0r0,556xm167,-612r-167,0r0,-133r167,0r0,133","w":334},"J":{"d":"743,-612r-167,0r0,-133r167,0r0,133xm743,40v-5,114,-100,182,-221,182r-522,0r0,-139r510,0v44,0,66,-24,66,-73r0,-566r167,0r0,596","w":916},"K":{"d":"767,-481r146,0r0,-77r-146,0r0,77xm1040,-2v25,-199,-69,-334,-263,-334r-610,1r0,-442r-167,0r0,775r167,0r0,-195r588,0v95,-4,128,100,107,195r178,0xm914,-481v0,97,-49,145,-146,145r0,-145r146,0xm767,-481v4,77,-98,149,-175,146r175,0r0,-146","w":1195},"L":{"d":"183,-299v0,80,47,132,132,132r523,0r0,167r-569,0v-174,4,-268,-107,-268,-282r0,-276r182,0r0,259","w":996},"M":{"d":"961,-556v116,-4,197,66,197,170r0,386r-167,0r0,-359v0,-39,-19,-58,-58,-58r-273,0r0,417r-167,0r0,-417r-326,0r0,417r-167,0r0,-556r961,0","w":1312},"N":{"d":"688,-556v116,-4,198,68,198,170r0,386r-167,0r0,-359v0,-39,-19,-58,-58,-58r-494,0r0,417r-167,0r0,-556r688,0","w":1057},"O":{"d":"7,-368v-3,-111,96,-207,207,-207r536,0v112,-3,207,95,207,207r0,162v3,111,-96,207,-207,207r-536,0v-110,3,-207,-97,-207,-207r0,-162xm264,-445v-45,-1,-85,40,-85,85r0,138v-1,45,40,85,85,85r428,0v45,1,85,-40,85,-85r0,-138v1,-45,-40,-85,-85,-85r-428,0","w":1104},"P":{"d":"986,-278v1,176,-93,278,-267,278r-552,0r0,222r-167,0r0,-778r719,0v171,-2,266,102,267,278xm811,-278v0,-81,-38,-139,-114,-139r-530,0r0,278r530,0v76,0,114,-58,114,-139","w":1141},"Q":{"d":"0,-278v-1,-176,93,-278,267,-278r777,2r0,776r-167,0r0,-223r-610,1v-171,2,-266,-102,-267,-278xm175,-278v0,81,38,139,114,139r588,-1r0,-275r-588,-2v-77,0,-114,58,-114,139","w":1211},"R":{"d":"610,-558v134,0,213,83,197,228r-167,0v4,-51,-8,-86,-58,-86r-415,-1r0,417r-167,0r0,-556","w":950},"S":{"d":"913,-170v0,103,-65,170,-175,170r-738,0r0,-131r705,1v37,0,55,-14,55,-43v0,-28,-18,-42,-55,-42r-530,-1v-102,1,-175,-66,-175,-169v0,-101,66,-171,175,-171r708,0r0,131r-675,0v-37,0,-55,14,-55,42v0,28,18,42,55,42r530,1v102,-1,175,67,175,170","w":1039},"T":{"d":"267,-208v1,58,20,77,78,77r425,0r0,131r-504,0v-116,-3,-166,-47,-166,-167r0,-258r-100,0r0,-131r100,0r0,-222r167,0r0,222r503,0r0,131r-503,0r0,217","w":917},"U":{"d":"198,0v-119,6,-198,-71,-198,-170r0,-386r167,0r0,358v0,39,19,59,58,59r506,0r0,-417r167,0r0,556r-700,0"},"V":{"d":"167,-139r564,0r0,-417r167,0r0,556r-898,0r0,-556r167,0r0,417"},"W":{"d":"197,0v-115,4,-197,-68,-197,-170r0,-386r167,0r0,358v0,39,19,59,58,59r273,0r0,-417r167,0r0,417r326,0r0,-417r167,0r0,556r-961,0","w":1323},"X":{"d":"132,-208r646,0r0,-131r-646,0r0,131xm1,-138v-2,-70,61,-133,131,-131r0,131r-131,0xm0,-138r132,0r0,138r-132,0r0,-138xm1,-396v-2,71,61,133,131,131r0,-131r-131,0xm0,-396r132,0r0,-158r-132,0r0,158xm909,-138v2,-70,-61,-133,-131,-131r0,131r131,0xm910,-138r-132,0r0,138r132,0r0,-138xm909,-396v2,71,-61,133,-131,131r0,-131r131,0xm910,-396r-132,0r0,-158r132,0r0,158xm133,-454v-2,62,53,117,115,115r-115,0r0,-115xm133,-94v-2,-62,53,-117,115,-115r-115,0r0,115xm777,-454v2,62,-53,117,-115,115r115,0r0,-115xm778,-93v2,-62,-54,-117,-115,-115r115,0r0,115","w":1017},"Y":{"d":"754,92v53,-1,68,-31,66,-92r-622,0v-119,6,-198,-71,-198,-170r0,-386r167,0r0,336v-1,49,32,82,81,81r572,0r0,-417r167,0r0,576v3,124,-85,207,-204,207r-769,0r0,-135r740,0","w":1169},"Z":{"d":"0,-170v0,101,66,170,175,170r738,0r0,-131r-704,1v-37,0,-56,-14,-56,-43v0,-28,19,-42,56,-42r529,-1v102,1,175,-66,175,-169v0,-102,-66,-171,-175,-171r-707,-2r0,131r674,2v37,0,55,14,55,42v0,28,-18,42,-55,42r-530,1v-102,-1,-175,67,-175,170","w":1039},"[":{"d":"0,-931r306,0r0,153r-153,0r0,778r153,0r0,153r-306,0r0,-1084","w":361},"\\":{"d":"877,0r-692,-778r-185,0r681,778r196,0","w":942},"]":{"w":366},"^":{"w":406},"_":{"d":"0,61r1001,0r0,161r-1001,0r0,-161","w":1172},"`":{"d":"0,-806r94,0r112,111r-95,0","w":261},"a":{"d":"754,-341v0,-61,-24,-84,-89,-84r-626,0r0,-131r667,0v135,5,215,66,215,217r0,339r-745,0v-108,1,-176,-63,-176,-171v0,-107,69,-171,176,-170r578,0xm754,-131r0,-85r-534,0v-35,0,-53,14,-53,43v0,28,18,42,53,42r534,0","w":1096},"b":{"d":"969,-278v0,176,-93,278,-267,278r-702,0r0,-778r167,0r0,222r535,0v170,-2,267,101,267,278xm794,-278v0,-81,-38,-139,-114,-139r-513,0r0,278r513,0v76,0,114,-58,114,-139","w":1097},"c":{"d":"0,-278v0,-173,94,-278,267,-278r595,0r0,139r-573,0v-76,0,-114,58,-114,139v0,81,38,139,114,139r573,0r0,139r-595,0v-173,1,-267,-105,-267,-278","w":1022},"d":{"d":"0,-278v-1,-176,93,-278,267,-278r521,0r0,-222r167,0r0,778r-688,0v-171,2,-266,-102,-267,-278xm175,-278v0,81,38,139,114,139r499,0r0,-278r-499,0v-76,0,-114,58,-114,139","w":1130},"e":{"d":"176,-216v24,58,48,85,113,85r581,0r0,131r-603,0v-173,1,-267,-105,-267,-278v0,-173,94,-278,267,-278r603,0r0,131r-581,0v-65,4,-87,27,-113,84r694,0r0,125r-694,0","w":1022},"f":{"d":"105,-341v-10,-142,29,-222,167,-222r501,1r0,130r-423,0v-60,-4,-81,31,-78,91r501,-2r0,131r-501,2r0,425r-167,0r0,-425r-105,0r0,-131r105,0","w":906},"g":{"d":"0,-278v0,-173,94,-278,267,-278r770,1r0,571v3,126,-82,208,-203,208r-773,-2r0,-130r743,1v55,0,68,-33,66,-93r-603,0v-173,1,-267,-105,-267,-278xm175,-278v0,81,37,139,114,139r581,-2r0,-275r-581,-1v-76,0,-114,58,-114,139","w":1204},"h":{"d":"735,-359v1,-35,-25,-58,-58,-58r-510,0r0,417r-167,0r0,-778r167,0r0,222r537,0v116,-4,198,68,198,170r0,386r-167,0r0,-359"},"i":{"d":"167,0r-167,0r0,-556r167,0r0,556xm167,-612r-167,0r0,-133r167,0r0,133","w":334},"j":{"d":"743,-612r-167,0r0,-133r167,0r0,133xm743,40v-5,114,-100,182,-221,182r-522,0r0,-139r510,0v44,0,66,-24,66,-73r0,-566r167,0r0,596","w":916},"k":{"d":"767,-481r146,0r0,-77r-146,0r0,77xm1040,-2v25,-199,-69,-334,-263,-334r-610,1r0,-442r-167,0r0,775r167,0r0,-195r588,0v95,-4,128,100,107,195r178,0xm914,-481v0,97,-49,145,-146,145r0,-145r146,0xm767,-481v4,77,-98,149,-175,146r175,0r0,-146","w":1195},"l":{"d":"183,-299v0,80,47,132,132,132r523,0r0,167r-569,0v-174,4,-268,-107,-268,-282r0,-276r182,0r0,259","w":996},"m":{"d":"961,-556v116,-4,197,66,197,170r0,386r-167,0r0,-359v0,-39,-19,-58,-58,-58r-273,0r0,417r-167,0r0,-417r-326,0r0,417r-167,0r0,-556r961,0","w":1312},"n":{"d":"688,-556v116,-4,198,68,198,170r0,386r-167,0r0,-359v0,-39,-19,-58,-58,-58r-494,0r0,417r-167,0r0,-556r688,0","w":1057},"o":{"d":"7,-368v-3,-111,96,-207,207,-207r536,0v112,-3,207,95,207,207r0,162v3,111,-96,207,-207,207r-536,0v-110,3,-207,-97,-207,-207r0,-162xm264,-445v-45,-1,-85,40,-85,85r0,138v-1,45,40,85,85,85r428,0v45,1,85,-40,85,-85r0,-138v1,-45,-40,-85,-85,-85r-428,0","w":1104},"p":{"d":"986,-278v1,176,-93,278,-267,278r-552,0r0,222r-167,0r0,-778r719,0v171,-2,266,102,267,278xm811,-278v0,-81,-38,-139,-114,-139r-530,0r0,278r530,0v76,0,114,-58,114,-139","w":1141},"q":{"d":"0,-278v-1,-176,93,-278,267,-278r777,2r0,776r-167,0r0,-223r-610,1v-171,2,-266,-102,-267,-278xm175,-278v0,81,38,139,114,139r588,-1r0,-275r-588,-2v-77,0,-114,58,-114,139","w":1211},"r":{"d":"610,-558v134,0,213,83,197,228r-167,0v4,-51,-8,-86,-58,-86r-415,-1r0,417r-167,0r0,-556","w":950},"s":{"d":"913,-170v0,103,-65,170,-175,170r-738,0r0,-131r705,1v37,0,55,-14,55,-43v0,-28,-18,-42,-55,-42r-530,-1v-102,1,-175,-66,-175,-169v0,-101,66,-171,175,-171r708,0r0,131r-675,0v-37,0,-55,14,-55,42v0,28,18,42,55,42r530,1v102,-1,175,67,175,170","w":1039},"t":{"d":"267,-208v1,58,20,77,78,77r425,0r0,131r-504,0v-116,-3,-166,-47,-166,-167r0,-258r-100,0r0,-131r100,0r0,-222r167,0r0,222r503,0r0,131r-503,0r0,217","w":917},"u":{"d":"198,0v-119,6,-198,-71,-198,-170r0,-386r167,0r0,358v0,39,19,59,58,59r506,0r0,-417r167,0r0,556r-700,0"},"v":{"d":"167,-139r564,0r0,-417r167,0r0,556r-898,0r0,-556r167,0r0,417"},"w":{"d":"197,0v-115,4,-197,-68,-197,-170r0,-386r167,0r0,358v0,39,19,59,58,59r273,0r0,-417r167,0r0,417r326,0r0,-417r167,0r0,556r-961,0","w":1323},"x":{"d":"132,-208r646,0r0,-131r-646,0r0,131xm1,-138v-2,-70,61,-133,131,-131r0,131r-131,0xm0,-138r132,0r0,138r-132,0r0,-138xm1,-396v-2,71,61,133,131,131r0,-131r-131,0xm0,-396r132,0r0,-158r-132,0r0,158xm909,-138v2,-70,-61,-133,-131,-131r0,131r131,0xm910,-138r-132,0r0,138r132,0r0,-138xm909,-396v2,71,-61,133,-131,131r0,-131r131,0xm910,-396r-132,0r0,-158r132,0r0,158xm133,-454v-2,62,53,117,115,115r-115,0r0,-115xm133,-94v-2,-62,53,-117,115,-115r-115,0r0,115xm777,-454v2,62,-53,117,-115,115r115,0r0,-115xm778,-93v2,-62,-54,-117,-115,-115r115,0r0,115","w":1017},"y":{"d":"754,92v53,-1,68,-31,66,-92r-622,0v-119,6,-198,-71,-198,-170r0,-386r167,0r0,336v-1,49,32,82,81,81r572,0r0,-417r167,0r0,576v3,124,-85,207,-204,207r-769,0r0,-135r740,0","w":1169},"z":{"d":"0,-170v0,101,66,170,175,170r738,0r0,-131r-704,1v-37,0,-56,-14,-56,-43v0,-28,19,-42,56,-42r529,-1v102,1,175,-66,175,-169v0,-102,-66,-171,-175,-171r-707,-2r0,131r674,2v37,0,55,14,55,42v0,28,-18,42,-55,42r-530,1v-102,-1,-175,67,-175,170","w":1039},"{":{"d":"0,-466v58,7,98,-17,100,-66v3,-102,-10,-222,10,-308v23,-50,68,-91,143,-91r196,0r0,153r-163,0v-22,0,-33,11,-33,33r0,289v1,35,-29,68,-64,67v36,0,65,30,64,66r0,290v0,22,11,33,33,33r163,0r0,153r-196,0v-87,1,-153,-65,-153,-153r0,-246v-1,-49,-42,-75,-100,-67r0,-153","w":515},"|":{"w":211},"}":{"d":"349,-778v0,-93,-61,-152,-153,-153r-196,0r0,153r163,0v22,0,33,11,33,33r0,289v-1,35,29,68,64,67v-36,0,-65,30,-64,66r0,290v0,22,-11,33,-33,33r-163,0r0,153r196,0v91,0,153,-64,153,-153r0,-246v1,-49,42,-75,100,-67r0,-153v-58,7,-99,-17,-100,-66r0,-246","w":515},"~":{"w":342},"\u0131":{"w":256},"\u00c7":{"w":729},"\u00d6":{"w":1084},"\u00dc":{"w":761},"\u00e7":{"w":578},"\u00f6":{"d":"7,-368v-3,-111,96,-207,207,-207r536,0v112,-3,207,95,207,207r0,162v3,111,-96,207,-207,207r-536,0v-110,3,-207,-97,-207,-207r0,-162xm264,-445v-45,-1,-85,40,-85,85r0,138v-1,45,40,85,85,85r428,0v45,1,85,-40,85,-85r0,-138v1,-45,-40,-85,-85,-85r-428,0xm289,-650r0,-128r379,0r0,128r-379,0","w":1084},"\u00fc":{"d":"198,0v-119,6,-198,-71,-198,-170r0,-386r167,0r0,358v0,39,19,59,58,59r506,0r0,-417r167,0r0,556r-700,0xm284,-650r0,-128r379,0r0,128r-379,0","w":1032},"\u00a0":{"w":668}}}); diff --git a/doc/themes/triqs/static/triqs.css b/doc/themes/triqs/static/triqs.css deleted file mode 100644 index e183cb21..00000000 --- a/doc/themes/triqs/static/triqs.css +++ /dev/null @@ -1,449 +0,0 @@ -/* - * sphinx13.css - * ~~~~~~~~~~~~ - * - * Sphinx stylesheet -- sphinx13 theme. - * - * :copyright: Copyright 2007-2013 by the Sphinx team, see AUTHORS. - * :license: BSD, see LICENSE for details. - * - */ - -@import url("basic.css"); - -/* -- page layout ----------------------------------------------------------- */ - -body { - font-family: 'Open Sans', 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; - font-size: 14px; - text-align: center; - background-image: url(bodybg.png); - color: black; - padding: 0; - border-right: 1px solid #0a507a; - border-left: 1px solid #0a507a; - - margin: 0 auto; - min-width: 780px; - max-width: 1080px; -} - - -.red{ - color: red -} -.blue{ - color: blue -} -.green{ - color: green -} - -.param{ - color: blue -} - -a.triqs { - color: #073958; - text-decoration: none; -} - -a.triqs:hover { - color: #0a527f; - text-decoration: none; -} - -.pageheader { - background-color: #dcdcdc; - text-align: left; - padding: 10px 15px; - color: #073958; - border: none; -} - -.pageheader ul { - float: right; - color: #073958; - list-style-type: none; - padding-left: 0; - margin-top: 22px; - margin-right: 10px; -} - -.pageheader li { - float: left; - margin: 0 0 0 10px; -} - -.pageheader li a { - padding: 8px 12px; - color: #073958; - text-shadow: none; -} - -.pageheader li a:hover { - background-color: #f9f9f0; - color: #0a507a; - text-shadow: none; -} - -div.document { - background-color: white; - text-align: left; -} - -div.bodywrapper { - margin: 0 240px 0 0; - border-right: 1px solid #0a507a; -} - -div.body { - margin: 0; - padding: 0.5em 20px 20px 20px; -} - -div.related { - font-size: 1em; - color: white; -} - -div.related ul { - background-image: url(relbg.png); - height: 1.9em; - border-top: 1px solid #002e50; - border-bottom: 1px solid #002e50; -} - -div.related ul li { - margin: 0 5px 0 0; - padding: 0; - float: left; -} - -div.related ul li.right { - float: right; - margin-right: 5px; -} - -div.related ul li a { - margin: 0; - padding: 0 5px 0 5px; - line-height: 1.75em; - color: #f9f9f0; - text-shadow: 0px 0px 1px rgba(0, 0, 0, 0.5); -} - -div.related ul li a:hover { - color: white; - /*text-decoration: underline;*/ - text-shadow: 0px 0px 1px rgba(255, 255, 255, 0.5); -} - -div.sphinxsidebarwrapper { - position: relative; - top: 0px; - padding: 0; -} - -div.sphinxsidebar { - margin: 0; - padding: 0 15px 15px 0; - width: 210px; - float: right; - font-size: 1em; - text-align: left; -} - -div.sphinxsidebar .logo { - font-size: 1.8em; - color: #0A507A; - font-weight: 300; - text-align: center; -} - -div.sphinxsidebar .logo img { - vertical-align: middle; -} - -div.sphinxsidebar input { - border: 1px solid #aaa; - font-family: 'Open Sans', 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; - font-size: 1em; -} - -div.sphinxsidebar h3 { - font-size: 1.5em; - border-top: 1px solid #0a507a; - margin-top: 1em; - margin-bottom: 0.5em; - padding-top: 0.5em; -} - -div.sphinxsidebar h4 { - font-size: 1.2em; - margin-bottom: 0; -} - -div.sphinxsidebar h3, div.sphinxsidebar h4 { - margin-right: -15px; - margin-left: -15px; - padding-right: 14px; - padding-left: 14px; - color: #333; - font-weight: 300; - /*text-shadow: 0px 0px 0.5px rgba(0, 0, 0, 0.4);*/ -} - -div.sphinxsidebarwrapper > h3:first-child { - margin-top: 0.5em; - border: none; -} - -div.sphinxsidebar h3 a { - color: #333; -} - -div.sphinxsidebar ul { - color: #444; - margin-top: 7px; - padding: 0; - line-height: 130%; -} - -div.sphinxsidebar ul ul { - margin-left: 20px; - list-style-image: url(listitem.png); -} - -div.footer { - background-image: url(footerbg.png); - color: #ccc; - text-shadow: 0 0 .2px rgba(255, 255, 255, 0.8); - padding: 3px 8px 3px 0; - clear: both; - font-size: 0.8em; - text-align: right; -} - -/* no need to make a visible link to Sphinx on the Sphinx page */ -div.footer a { - color: #ccc; -} - -/* -- body styles ----------------------------------------------------------- */ - -p { - margin: 0.8em 0 0.5em 0; -} - -a { - color: #A2881D; - text-decoration: none; -} - -a:hover { - color: #E1C13F; -} - -div.body a { - text-decoration: underline; -} - -h1 { - margin: 10px 0 0 0; - font-size: 2.4em; - color: #0A507A; - font-weight: 300; -} - -h2 { - margin: 1.em 0 0.2em 0; - font-size: 1.5em; - font-weight: 300; - padding: 0; - color: #174967; -} - -h3 { - margin: 1em 0 -0.3em 0; - font-size: 1.3em; - font-weight: 300; -} - -div.body h1 a, div.body h2 a, div.body h3 a, div.body h4 a, div.body h5 a, div.body h6 a { - text-decoration: none; -} - -div.body h1 a tt, div.body h2 a tt, div.body h3 a tt, div.body h4 a tt, div.body h5 a tt, div.body h6 a tt { - color: #0A507A !important; - font-size: inherit !important; -} - -a.headerlink { - color: #0A507A !important; - font-size: 12px; - margin-left: 6px; - padding: 0 4px 0 4px; - text-decoration: none !important; - float: right; -} - -a.headerlink:hover { - background-color: #ccc; - color: white!important; -} - -cite, code, tt { - font-family: 'Consolas', 'DejaVu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 14px; - letter-spacing: -0.02em; -} - -tt { - background-color: #f2f2f2; - border: 1px solid #ddd; - border-radius: 2px; - color: #333; - padding: 1px; -} - -tt.descname, tt.descclassname, tt.xref { - border: 0; -} - -hr { - border: 1px solid #abc; - margin: 2em; -} - -a tt { - border: 0; - color: #a2881d; -} - -a tt:hover { - color: #e1c13f; -} - -pre { - font-family: 'Consolas', 'DejaVu Sans Mono', - 'Bitstream Vera Sans Mono', monospace; - font-size: 13px; - letter-spacing: 0.015em; - line-height: 120%; - padding: 0.5em; - border: 1px solid #ccc; - border-radius: 2px; - background-color: #f8f8f8; -} - -pre a { - color: inherit; - text-decoration: underline; -} - -td.linenos pre { - padding: 0.5em 0; -} - -div.quotebar { - background-color: #f8f8f8; - max-width: 250px; - float: right; - padding: 0px 7px; - border: 1px solid #ccc; - margin-left: 1em; -} - -div.topic { - background-color: #f8f8f8; -} - -table { - border-collapse: collapse; - margin: 0 -0.5em 0 -0.5em; -} - -table td, table th { - padding: 0.2em 0.5em 0.2em 0.5em; -} - -div.admonition, div.warning { - font-size: 0.9em; - margin: 1em 0 1em 0; - border: 1px solid #86989B; - border-radius: 2px; - background-color: #f7f7f7; - padding: 0; -} - -div.admonition p, div.warning p { - margin: 0.5em 1em 0.5em 1em; - padding: 0; -} - -div.admonition pre, div.warning pre { - margin: 0.4em 1em 0.4em 1em; -} - -div.admonition p.admonition-title, -div.warning p.admonition-title { - margin-top: 1em; - padding-top: 0.5em; - font-weight: bold; -} - -div.warning { - border: 1px solid #940000; -/* background-color: #FFCCCF;*/ -} - -div.warning p.admonition-title { -} - -div.admonition ul, div.admonition ol, -div.warning ul, div.warning ol { - margin: 0.1em 0.5em 0.5em 3em; - padding: 0; -} - -div.admonition .highlight, div.warning .highlight { - background-color: #f7f7f7; -} - -.viewcode-back { - font-family: 'Open Sans', 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', - 'Verdana', sans-serif; -} - -div.viewcode-block:target { - background-color: #f4debf; - border-top: 1px solid #ac9; - border-bottom: 1px solid #ac9; -} - - -.my-code-block.std-ref { - color : red; -} - -.cppbrief { - color: #C6792C; - font-style: oblique; -} - -.cppsynopsis { - background-color: #E7EDF9; - /*font-family: 'Open Sans', 'Lucida Grande', 'Lucida Sans Unicode', 'Geneva', 'Verdana', sans-serif;*/ - /*font-family: monospace; */ - font-family: Verdana, Arial, Lucida Console; - font-size=80%; - /*font-style: oblique;*/ - /* white-space: pre;*/ -} - - - diff --git a/doc/themes/triqs/theme.conf b/doc/themes/triqs/theme.conf deleted file mode 100644 index 96ca439a..00000000 --- a/doc/themes/triqs/theme.conf +++ /dev/null @@ -1,4 +0,0 @@ -[theme] -inherit = basic -stylesheet = triqs.css -pygments_style = sphinx