diff --git a/.clang-tidy b/.clang-tidy new file mode 100644 index 00000000..03368ffa --- /dev/null +++ b/.clang-tidy @@ -0,0 +1,2 @@ +Checks: '-*,modernize-*,cppcoreguidelines-*,-modernize-use-trailing-return-type' +HeaderFilterRegex: 'triqs_dft_tools' diff --git a/.dockerignore b/.dockerignore index 6e7a76a5..b627e92a 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,2 +1,4 @@ +.travis.yml Dockerfile Jenkinsfile +.git/objects/pack diff --git a/.github/ISSUE_TEMPLATE/bug.md b/.github/ISSUE_TEMPLATE/bug.md index 79dfa304..db102d9e 100644 --- a/.github/ISSUE_TEMPLATE/bug.md +++ b/.github/ISSUE_TEMPLATE/bug.md @@ -32,7 +32,7 @@ Please provide the application version that you used. You can get this information from copy and pasting the output of ```bash -python -c "from app4triqs.version import *; show_version(); show_git_hash();" +python -c "from triqs_dft_tools.version import *; show_version(); show_git_hash();" ``` from the command line. Also, please include the OS you are running and its version. diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..226118b4 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +compile_commands.json +doc/cpp2rst_generated diff --git a/.travis.yml b/.travis.yml index 1b2df662..7ffe737b 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,47 +1,34 @@ language: cpp sudo: required -dist: trusty +dist: bionic compiler: - gcc - # - clang + - clang before_install: - - sudo add-apt-repository 'deb http://apt.llvm.org/trusty/ llvm-toolchain-trusty-5.0 main' -y - - wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key|sudo apt-key add - - - sudo add-apt-repository ppa:ubuntu-toolchain-r/test -y - sudo apt-get update - - sudo apt-get install -y --allow-unauthenticated g++-7 clang-5.0 - - export LIBRARY_PATH=/usr/lib/llvm-5.0/lib:$LIBRARY_PATH - - sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-7 60 --slave /usr/bin/g++ g++ /usr/bin/g++-7 - - sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-5.0 60 --slave /usr/bin/clang++ clang++ /usr/bin/clang++-5.0 - - sudo apt-get install -y --allow-unauthenticated libboost-all-dev cmake git libgfortran3 gfortran openmpi-bin openmpi-common openmpi-doc libopenmpi-dev libblas-dev liblapack-dev libfftw3-dev libgmp-dev hdf5-tools libhdf5-serial-dev python-h5py python-dev python-numpy python-scipy python-jinja2 python-virtualenv python-matplotlib python-tornado python-zmq python-mpi4py python-mako clang-format-5.0 libclang-5.0-dev python-clang-5.0 python-sphinx libjs-mathjax valgrind libnfft3-dev + - sudo apt-get install -y --allow-unauthenticated libblas-dev libboost-all-dev libfftw3-dev libgfortran3 libhdf5-serial-dev libgmp-dev liblapack-dev libopenmpi-dev libclang-dev python-clang-6.0 python-dev python-h5py python-mako python-matplotlib python-mpi4py python-numpy python-scipy python-sphinx libjs-mathjax libnfft3-dev install: true script: - # ===== Set up Cpp2Py - - git clone https://github.com/triqs/cpp2py - - mkdir cpp2py/build && cd cpp2py/build - - git checkout master - - cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DPYTHON_INTERPRETER=/usr/bin/python -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/root_install - - make -j8 install - - cd $TRAVIS_BUILD_DIR - - source root_install/share/cpp2pyvars.sh + - export INSTALL_DIR=$HOME/root_install # We install outside the repository # ===== Set up TRIQS - - git clone https://github.com/TRIQS/triqs --branch $TRAVIS_BRANCH - - mkdir triqs/build && cd triqs/build - - cmake .. -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DBuild_Tests=OFF -DCMAKE_INSTALL_PREFIX=$TRAVIS_BUILD_DIR/root_install -DCMAKE_BUILD_TYPE=Debug - - make -j8 install - cd $TRAVIS_BUILD_DIR - - source root_install/share/triqsvars.sh - # ===== Set up dft_tools and Test using fsanitize=address + - git clone https://github.com/TRIQS/triqs --branch unstable + - mkdir triqs/build && cd triqs/build + - cmake .. -DBuild_Tests=OFF -DCMAKE_INSTALL_PREFIX=$INSTALL_DIR + - make -j2 install + - source $INSTALL_DIR/share/triqsvars.sh + # ===== Set up triqs_dft_tools and test + - cd $TRAVIS_BUILD_DIR - mkdir build && cd build - - cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_COMPILER=/usr/bin/${CXX} -DCMAKE_CXX_FLAGS='-fsanitize=address -fno-omit-frame-pointer -fuse-ld=gold' - - make -j8 - - export ASAN_SYMBOLIZER_PATH=/usr/lib/llvm-5.0/bin/llvm-symbolizer + - cmake .. -DASAN=ON -DUBSAN=ON + - export UBSAN_SYMBOLIZER_PATH=$(which llvm-symbolizer) + - export ASAN_SYMBOLIZER_PATH=$(which llvm-symbolizer) + - export UBSAN_OPTIONS=symbolize=1:print_stacktrace=1 - export ASAN_OPTIONS=symbolize=1:detect_leaks=0 - export CTEST_OUTPUT_ON_FAILURE=1 - - if [ "$CXX" = g++ ]; then export LD_PRELOAD=/usr/lib/gcc/x86_64-linux-gnu/7/libasan.so; elif [ "$CXX" = clang++ ]; then export LD_PRELOAD=/usr/lib/llvm-5.0/lib/clang/5.0.1/lib/linux/libclang_rt.asan-x86_64.so; fi - - cd test && ctest + - make -j2 && make test diff --git a/CMakeLists.txt b/CMakeLists.txt index 669c61a2..dbb5f1ee 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -1,105 +1,167 @@ -# Start configuration -cmake_minimum_required(VERSION 3.0.2 FATAL_ERROR) -project(triqs_dft_tools C CXX Fortran) +# ############################################################################## +# +# triqs_dft_tools - An example application using triqs and cpp2py +# +# Copyright (C) ... +# +# triqs_dft_tools is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# triqs_dft_tools is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR +# A PARTICULAR PURPOSE. See the GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License along with +# triqs_dft_tools (in the file COPYING.txt in this directory). If not, see +# . +# +# ############################################################################## + +cmake_minimum_required(VERSION 3.3.2 FATAL_ERROR) +cmake_policy(VERSION 3.3.2) if(POLICY CMP0074) cmake_policy(SET CMP0074 NEW) endif() +if(POLICY CMP0077) + cmake_policy(SET CMP0077 NEW) +endif() + +# ############ +# Define Project +project(triqs_dft_tools VERSION 3.0.0 LANGUAGES C CXX Fortran) +get_directory_property(IS_SUBPROJECT PARENT_DIRECTORY) + +# ############ +# Load TRIQS and CPP2PY +find_package(TRIQS 3.0 REQUIRED) + +# Get the git hash & print status +triqs_get_git_hash_of_source_dir(PROJECT_GIT_HASH) +message(STATUS "${PROJECT_NAME} version : ${PROJECT_VERSION}") +message(STATUS "${PROJECT_NAME} Git hash: ${PROJECT_GIT_HASH}") + +# Enforce Consistent Versioning +if(NOT ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR} VERSION_EQUAL ${TRIQS_VERSION_MAJOR}.${TRIQS_VERSION_MINOR}) + message(FATAL_ERROR "The ${PROJECT_NAME} version ${PROJECT_VERSION} is not compatible with TRIQS version ${TRIQS_VERSION}.") +endif() + +# Default Install directory to TRIQS_ROOT if not given or invalid. +if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR (NOT IS_ABSOLUTE ${CMAKE_INSTALL_PREFIX})) + message(STATUS "No install prefix given (or invalid). Defaulting to TRIQS_ROOT") + set(CMAKE_INSTALL_PREFIX ${TRIQS_ROOT} CACHE PATH "default install path" FORCE) + set(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT FALSE) +endif() +if(NOT IS_SUBPROJECT) + message(STATUS "-------- CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX} --------") +endif() +set(${PROJECT_NAME}_BINARY_DIR ${PROJECT_BINARY_DIR} CACHE STRING "Binary directory of the ${PROJECT_NAME} Project") + + +# ############ +# Options + +# Make additional Find Modules available +list(APPEND CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/share/cmake/Modules) # Default to Release build type if(NOT CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release CACHE STRING "Type of build" FORCE) endif() -message( STATUS "-------- BUILD-TYPE: ${CMAKE_BUILD_TYPE} --------") - -# Use shared libraries -set(BUILD_SHARED_LIBS ON) - -# Load TRIQS and Cpp2Py -find_package(TRIQS 2.2 REQUIRED) -find_package(Cpp2Py 1.6 REQUIRED) - -if (NOT ${TRIQS_WITH_PYTHON_SUPPORT}) - MESSAGE(FATAL_ERROR "dft_tools require Python support in TRIQS") +if(NOT IS_SUBPROJECT) + message(STATUS "-------- BUILD-TYPE: ${CMAKE_BUILD_TYPE} --------") endif() -# Default Install directory to TRIQS_ROOT if not given. Checks an absolute name is given. -if(CMAKE_INSTALL_PREFIX_INITIALIZED_TO_DEFAULT OR (NOT IS_ABSOLUTE ${CMAKE_INSTALL_PREFIX})) - message(STATUS " No install prefix given (or invalid). Defaulting to TRIQS_ROOT") - set(CMAKE_INSTALL_PREFIX ${TRIQS_ROOT} CACHE PATH "default install path" FORCE) +# Python Support +option(PythonSupport "Build with Python support" ON) +if(PythonSupport AND NOT TRIQS_WITH_PYTHON_SUPPORT) + message(FATAL_ERROR "TRIQS was installed without Python support. Cannot build the Python Interface. Disable the build with -DPythonSupport=OFF") endif() -message(STATUS "-------- CMAKE_INSTALL_PREFIX: ${CMAKE_INSTALL_PREFIX} -------------") -# Define the dft_tools version numbers and get the git hash -set(DFT_TOOLS_VERSION_MAJOR 2) -set(DFT_TOOLS_VERSION_MINOR 2) -set(DFT_TOOLS_VERSION_PATCH 0) -set(DFT_TOOLS_VERSION ${DFT_TOOLS_VERSION_MAJOR}.${DFT_TOOLS_VERSION_MINOR}.${DFT_TOOLS_VERSION_PATCH}) -triqs_get_git_hash_of_source_dir(DFT_TOOLS_GIT_HASH) -message(STATUS "Dft_tools version : ${DFT_TOOLS_VERSION}") -message(STATUS "Git hash: ${DFT_TOOLS_GIT_HASH}") +# Documentation +option(Build_Documentation "Build documentation" OFF) +# Testing +option(Build_Tests "Build tests" ON) +if(Build_Tests) + enable_testing() +endif() + +# Export the list of compile-commands into compile_commands.json +set(CMAKE_EXPORT_COMPILE_COMMANDS ON) + +# Global compiler options +option(BUILD_SHARED_LIBS "Enable compilation of shared libraries" OFF) +add_compile_options( + $<$:-Og> + $<$:-ggdb3> +) + +# Create an Interface target for compiler warnings +add_library(${PROJECT_NAME}_warnings INTERFACE) +target_compile_options(${PROJECT_NAME}_warnings + INTERFACE + -Wall + -Wextra + -Wpedantic + -Wno-sign-compare + $<$:-Wshadow=local> + $<$:-Wno-attributes> + $<$:-Wshadow> + $<$:-Wno-gcc-compat> + $<$:-Wshadow> + $<$:-Wno-gcc-compat> +) + +# ############# +# Build Project + +# Find / Build dependencies +add_subdirectory(deps) + +# Build and install the library +add_subdirectory(c++/${PROJECT_NAME}) + +# add here stuff for the Fortran part in DFTTools add_subdirectory(fortran/dmftproj) -# Add the compiling options (-D... ) for C++ -message(STATUS "TRIQS : Adding compilation flags detected by the library (C++11/14, libc++, etc...) ") - -add_subdirectory(c++) -add_subdirectory(python python/triqs_dft_tools) -add_subdirectory(shells) - -#------------------------ -# tests -#------------------------ - -option(TEST_COVERAGE "Analyze the coverage of tests" OFF) - -# perform tests with coverage info -if (${TEST_COVERAGE}) - # we try to locate the coverage program - find_program(PYTHON_COVERAGE python-coverage) - find_program(PYTHON_COVERAGE coverage) - if(NOT PYTHON_COVERAGE) - message(FATAL_ERROR "Program coverage (or python-coverage) not found.\nEither set PYTHON_COVERAGE explicitly or disable TEST_COVERAGE!\nYou need to install the python package coverage, e.g. with\n pip install coverage\nor with\n apt install python-coverage") - endif() - - message(STATUS "Setting up test coverage") - add_custom_target(coverage ${PYTHON_COVERAGE} combine --append .coverage plovasp/.coverage || true COMMAND ${PYTHON_COVERAGE} html COMMAND echo "Open ${CMAKE_BINARY_DIR}/test/htmlcov/index.html in browser!" WORKING_DIRECTORY ${CMAKE_BINARY_DIR}/test) +# Tests +if(Build_Tests) + add_subdirectory(test) endif() -enable_testing() - -option(Build_Tests "Build the tests of the library " ON) -if (Build_Tests) - message(STATUS "-------- Preparing tests -------------") - add_subdirectory(test) +# Python +if(PythonSupport) + add_subdirectory(python/${PROJECT_NAME}) endif() -#------------------------ -# Documentation -#------------------------ -option(Build_Documentation "Build documentation" OFF) -if(${Build_Documentation}) - if(NOT ${TRIQS_WITH_DOCUMENTATION}) - message("Error: TRIQS library has not been compiled with its documentation") - endif() +# Docs +if(Build_Documentation) add_subdirectory(doc) endif() -#-------------------------------------------------------- -# Packaging -#-------------------------------------------------------- +# dfttols vasp interface bash scripts +add_subdirectory(bin) + +# Additional configuration files +add_subdirectory(share) + +# ############# +# Debian Package + option(BUILD_DEBIAN_PACKAGE "Build a deb package" OFF) -if(BUILD_DEBIAN_PACKAGE) +if(BUILD_DEBIAN_PACKAGE AND NOT IS_SUBPROJECT) if(NOT CMAKE_INSTALL_PREFIX STREQUAL "/usr") message(FATAL_ERROR "CMAKE_INSTALL_PREFIX must be /usr for packaging") endif() - SET(CPACK_GENERATOR "DEB") - SET(CPACK_PACKAGE_VERSION ${DFT_TOOLS_VERSION}) - SET(CPACK_PACKAGE_CONTACT "https://github.com/TRIQS/dft_tools") - EXECUTE_PROCESS(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CMAKE_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) - SET(CPACK_DEBIAN_PACKAGE_DEPENDS "triqs (>= 2.2)") - SET(CPACK_DEBIAN_PACKAGE_CONFLICTS "dft_tools") - SET(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) - SET(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON) - INCLUDE(CPack) + set(CPACK_PACKAGE_NAME ${PROJECT_NAME}) + set(CPACK_GENERATOR "DEB") + set(CPACK_PACKAGE_VERSION ${PROJECT_VERSION}) + set(CPACK_PACKAGE_CONTACT "https://github.com/TRIQS/${PROJECT_NAME}") + execute_process(COMMAND dpkg --print-architecture OUTPUT_VARIABLE CMAKE_DEBIAN_PACKAGE_ARCHITECTURE OUTPUT_STRIP_TRAILING_WHITESPACE) + set(CPACK_DEBIAN_PACKAGE_DEPENDS "triqs (>= 3.0)") + set(CPACK_DEBIAN_PACKAGE_SHLIBDEPS ON) + set(CPACK_DEBIAN_PACKAGE_GENERATE_SHLIBS ON) + include(CPack) endif() diff --git a/ChangeLog.md b/ChangeLog.md new file mode 120000 index 00000000..9e080e26 --- /dev/null +++ b/ChangeLog.md @@ -0,0 +1 @@ +doc/ChangeLog.md \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 1d7149fb..a72f847f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,15 @@ # See ../triqs/packaging for other options -FROM flatironinstitute/triqs:master-ubuntu-clang +FROM flatironinstitute/triqs:unstable-ubuntu-clang +ARG APPNAME=triqs_dft_tools -ARG APPNAME -COPY . $SRC/$APPNAME +COPY requirements.txt /src/$APPNAME/requirements.txt +RUN pip3 install -r /src/$APPNAME/requirements.txt + +COPY --chown=build . $SRC/$APPNAME WORKDIR $BUILD/$APPNAME RUN chown build . USER build ARG BUILD_DOC=0 -RUN cmake $SRC/$APPNAME -DTRIQS_ROOT=${INSTALL} -DBuild_Documentation=${BUILD_DOC} && make -j2 && make test CTEST_OUTPUT_ON_FAILURE=1 +RUN cmake $SRC/$APPNAME -DTRIQS_ROOT=${INSTALL} -DBuild_Documentation=${BUILD_DOC} && make -j2 USER root RUN make install diff --git a/Jenkinsfile b/Jenkinsfile index 0cf7bdea..b5d89979 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -1,5 +1,6 @@ -def projectName = "dft_tools" /* set to app/repo name */ +def projectName = "triqs_dft_tools" /* set to app/repo name */ +def dockerName = projectName.toLowerCase(); /* which platform to build documentation on */ def documentationPlatform = "ubuntu-clang" /* depend on triqs upstream branch/project */ @@ -37,7 +38,12 @@ for (int i = 0; i < dockerPlatforms.size(); i++) { mv -f Dockerfile.jenkins Dockerfile """ /* build and tag */ - def img = docker.build("flatironinstitute/${projectName}:${env.BRANCH_NAME}-${env.STAGE_NAME}", "--build-arg APPNAME=${projectName} --build-arg BUILD_DOC=${platform==documentationPlatform} .") + def img = docker.build("flatironinstitute/${dockerName}:${env.BRANCH_NAME}-${env.STAGE_NAME}", "--build-arg APPNAME=${projectName} --build-arg BUILD_DOC=${platform==documentationPlatform} .") + catchError(buildResult: 'UNSTABLE', stageResult: 'UNSTABLE') { + img.inside() { + sh "make -C \$BUILD/${projectName} test CTEST_OUTPUT_ON_FAILURE=1" + } + } if (!keepInstall) { sh "docker rmi --no-prune ${img.imageName()}" } @@ -48,7 +54,7 @@ for (int i = 0; i < dockerPlatforms.size(); i++) { /****************** osx builds (on host) */ def osxPlatforms = [ ["gcc", ['CC=gcc-9', 'CXX=g++-9', 'FC=gfortran-9']], - ["clang", ['CC=$BREW/opt/llvm/bin/clang', 'CXX=$BREW/opt/llvm/bin/clang++', 'CXXFLAGS=-I$BREW/opt/llvm/include', 'LDFLAGS=-L$BREW/opt/llvm/lib', 'FC=gfortran-9']] + ["clang", ['CC=$BREW/opt/llvm/bin/clang', 'CXX=$BREW/opt/llvm/bin/clang++', 'FC=gfortran-9', 'CXXFLAGS=-I$BREW/opt/llvm/include', 'LDFLAGS=-L$BREW/opt/llvm/lib']] ] for (int i = 0; i < osxPlatforms.size(); i++) { def platformEnv = osxPlatforms[i] @@ -72,15 +78,15 @@ for (int i = 0; i < osxPlatforms.size(); i++) { "CMAKE_PREFIX_PATH=$triqsDir/lib/cmake/triqs"]) { deleteDir() /* note: this is installing into the parent (triqs) venv (install dir), which is thus shared among apps and so not be completely safe */ - sh "pip install -r $srcDir/requirements.txt" + sh "pip3 install -r $srcDir/requirements.txt" sh "cmake $srcDir -DCMAKE_INSTALL_PREFIX=$installDir -DTRIQS_ROOT=$triqsDir" - sh "make -j3" - try { + sh "make -j2" + catchError(buildResult: 'UNSTABLE', stageResult: 'UNSTABLE') { try { sh "make test CTEST_OUTPUT_ON_FAILURE=1" } catch (exc) { archiveArtifacts(artifacts: 'Testing/Temporary/LastTest.log') throw exc - } + } } sh "make install" } } } } @@ -95,15 +101,20 @@ try { stage("publish") { timeout(time: 5, unit: 'MINUTES') { def commit = sh(returnStdout: true, script: "git rev-parse HEAD").trim() def release = env.BRANCH_NAME == "master" || env.BRANCH_NAME == "unstable" || sh(returnStdout: true, script: "git describe --exact-match HEAD || true").trim() - def workDir = pwd() + def workDir = pwd(tmp:true) lock('triqs_publish') { /* Update documention on gh-pages branch */ dir("$workDir/gh-pages") { def subdir = "${projectName}/${env.BRANCH_NAME}" git(url: "ssh://git@github.com/TRIQS/TRIQS.github.io.git", branch: "master", credentialsId: "ssh", changelog: false) sh "rm -rf ${subdir}" - docker.image("flatironinstitute/${projectName}:${env.BRANCH_NAME}-${documentationPlatform}").inside() { - sh "cp -rp \$INSTALL/share/doc/triqs_${projectName} ${subdir}" + docker.image("flatironinstitute/${dockerName}:${env.BRANCH_NAME}-${documentationPlatform}").inside() { + sh """#!/bin/bash -ex + base=\$INSTALL/share/doc + dir="${projectName}" + [[ -d \$base/triqs_\$dir ]] && dir=triqs_\$dir || [[ -d \$base/\$dir ]] + cp -rp \$base/\$dir ${subdir} + """ } sh "git add -A ${subdir}" sh """ @@ -149,7 +160,7 @@ Changes: End of build log: \${BUILD_LOG,maxLines=60} """, - to: 'mzingl@flatironinstitute.org, hstrand@flatironinstitute.org, nwentzell@flatironinstitute.org, dsimon@flatironinstitute.org', + to: 'nwentzell@flatironinstitute.org', recipientProviders: [ [$class: 'DevelopersRecipientProvider'], ], diff --git a/README.txt b/README.md similarity index 100% rename from README.txt rename to README.md diff --git a/shells/CMakeLists.txt b/bin/CMakeLists.txt similarity index 80% rename from shells/CMakeLists.txt rename to bin/CMakeLists.txt index 42e6bc38..0d5af60b 100644 --- a/shells/CMakeLists.txt +++ b/bin/CMakeLists.txt @@ -1,9 +1,9 @@ -configure_file(plovasp.bash.in plovasp) +configure_file(plovasp.in plovasp) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/plovasp DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) -configure_file(vasp_dmft.bash.in vasp_dmft) +configure_file(vasp_dmft.in vasp_dmft) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/vasp_dmft DESTINATION bin PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE) diff --git a/shells/plovasp.bash.in b/bin/plovasp.in similarity index 100% rename from shells/plovasp.bash.in rename to bin/plovasp.in diff --git a/shells/vasp_dmft.bash.in b/bin/vasp_dmft.in similarity index 100% rename from shells/vasp_dmft.bash.in rename to bin/vasp_dmft.in diff --git a/c++/plovasp/atm/.gitignore b/c++/plovasp/atm/.gitignore deleted file mode 100644 index 675673c3..00000000 --- a/c++/plovasp/atm/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -makefile -Makefile -*.so -*.o -*.pyc diff --git a/c++/plovasp/atm/CMakeLists.txt b/c++/plovasp/atm/CMakeLists.txt deleted file mode 100644 index afcb0176..00000000 --- a/c++/plovasp/atm/CMakeLists.txt +++ /dev/null @@ -1,7 +0,0 @@ -add_library(atm_c dos_tetra3d.hpp dos_tetra3d.cpp argsort.hpp argsort.cpp) -target_link_libraries(atm_c triqs) -target_compile_options(atm_c PRIVATE -std=c++17) - -install(TARGETS atm_c DESTINATION lib) - -add_subdirectory(test) diff --git a/c++/plovasp/atm/test/CMakeLists.txt b/c++/plovasp/atm/test/CMakeLists.txt deleted file mode 100644 index d592f23c..00000000 --- a/c++/plovasp/atm/test/CMakeLists.txt +++ /dev/null @@ -1,13 +0,0 @@ -enable_testing() - -FILE(GLOB TestList RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp) -FOREACH( TestName1 ${TestList} ) - STRING(REPLACE ".cpp" "" TestName ${TestName1}) - add_executable( ${TestName} ${TestName}.cpp ) - target_link_libraries( ${TestName} atm_c triqs) - triqs_set_rpath_for_target( ${TestName} ) - add_test(NAME ${TestName} COMMAND ${CMAKE_CURRENT_BINARY_DIR}/${t}) -ENDFOREACH( TestName1 ${TestList} ) - - - diff --git a/c++/triqs_dft_tools/CMakeLists.txt b/c++/triqs_dft_tools/CMakeLists.txt new file mode 100644 index 00000000..e847bf2f --- /dev/null +++ b/c++/triqs_dft_tools/CMakeLists.txt @@ -0,0 +1,81 @@ +file(GLOB_RECURSE sources *.cpp) +add_library(${PROJECT_NAME}_c ${sources}) +add_library(${PROJECT_NAME}::${PROJECT_NAME}_c ALIAS ${PROJECT_NAME}_c) + +# Link against triqs and enable warnings +target_link_libraries(${PROJECT_NAME}_c PUBLIC triqs PRIVATE $) + +# Configure target and compilation +set_property(TARGET ${PROJECT_NAME}_c PROPERTY POSITION_INDEPENDENT_CODE ON) +target_include_directories(${PROJECT_NAME}_c PUBLIC $) +target_include_directories(${PROJECT_NAME}_c SYSTEM INTERFACE $) +target_compile_definitions(${PROJECT_NAME}_c PUBLIC + TRIQS_DFT_TOOLS_GIT_HASH=${PROJECT_GIT_HASH} + TRIQS_GIT_HASH=${TRIQS_GIT_HASH} + $<$:TRIQS_DFT_TOOLS_DEBUG> + $<$:TRIQS_DEBUG> + $<$:TRIQS_ARRAYS_ENFORCE_BOUNDCHECK> + ) + +# Install library and headers +install(TARGETS ${PROJECT_NAME}_c EXPORT ${PROJECT_NAME}-targets DESTINATION lib) +install(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} DESTINATION include FILES_MATCHING PATTERN "*.hpp" PATTERN "*.h") + + +# ========= Static Analyzer Checks ========== + +option(ANALYZE_SOURCES OFF "Run static analyzer checks if found (clang-tidy, cppcheck)") +if(ANALYZE_SOURCES) + + # Locate static analyzer tools + find_program(CPPCHECK_EXECUTABLE NAMES "cppcheck" PATHS ENV PATH) + find_program(CLANG_TIDY_EXECUTABLE NAMES "clang-tidy" PATHS ENV PATH) + + # Run clang-tidy if found + if(CLANG_TIDY_EXECUTABLE) + message(STATUS "clang-tidy found: ${CLANG_TIDY_EXECUTABLE}") + set_target_properties(${PROJECT_NAME}_c PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE}") + else() + message(STATUS "clang-tidy not found in $PATH. Please consider installing clang-tidy for additional checks!") + endif() + + # Run cppcheck if found + if(CPPCHECK_EXECUTABLE) + message(STATUS "cppcheck found: ${CPPCHECK_EXECUTABLE}") + add_custom_command( + TARGET ${PROJECT_NAME}_c + COMMAND ${CPPCHECK_EXECUTABLE} + --enable=warning,style,performance,portability + --std=c++17 + --template=gcc + --verbose + --force + --quiet + ${sources} + WORKING_DIRECTORY + ${CMAKE_CURRENT_SOURCE_DIR} + ) + else() + message(STATUS "cppcheck not found in $PATH. Please consider installing cppcheck for additional checks!") + endif() + +endif() + + +# ========= Dynamic Analyzer Checks ========== + +option(ASAN OFF "Compile library and executables with LLVM Address Sanitizer") +option(UBSAN OFF "Compile library and executables with LLVM Undefined Behavior Sanitizer") + +if(ASAN) + if(NOT TARGET asan) + find_package(sanitizer REQUIRED "asan") + endif() + target_link_libraries(${PROJECT_NAME}_c PUBLIC $) +endif() +if(UBSAN) + if(NOT TARGET ubsan) + find_package(sanitizer REQUIRED "ubsan") + endif() + target_link_libraries(${PROJECT_NAME}_c PUBLIC $) +endif() diff --git a/c++/triqs_dft_tools/converters/vasp.hpp b/c++/triqs_dft_tools/converters/vasp.hpp new file mode 100644 index 00000000..0aa018d7 --- /dev/null +++ b/c++/triqs_dft_tools/converters/vasp.hpp @@ -0,0 +1,3 @@ +#pragma once +#include "./vasp/argsort.hpp" +#include "./vasp/dos_tetra3d.hpp" diff --git a/c++/plovasp/atm/__init__.py b/c++/triqs_dft_tools/converters/vasp/__init__.py similarity index 100% rename from c++/plovasp/atm/__init__.py rename to c++/triqs_dft_tools/converters/vasp/__init__.py diff --git a/c++/plovasp/atm/argsort.cpp b/c++/triqs_dft_tools/converters/vasp/argsort.cpp similarity index 100% rename from c++/plovasp/atm/argsort.cpp rename to c++/triqs_dft_tools/converters/vasp/argsort.cpp diff --git a/c++/plovasp/atm/argsort.hpp b/c++/triqs_dft_tools/converters/vasp/argsort.hpp similarity index 100% rename from c++/plovasp/atm/argsort.hpp rename to c++/triqs_dft_tools/converters/vasp/argsort.hpp diff --git a/c++/plovasp/atm/dos_tetra3d.cpp b/c++/triqs_dft_tools/converters/vasp/dos_tetra3d.cpp similarity index 100% rename from c++/plovasp/atm/dos_tetra3d.cpp rename to c++/triqs_dft_tools/converters/vasp/dos_tetra3d.cpp diff --git a/c++/plovasp/atm/dos_tetra3d.hpp b/c++/triqs_dft_tools/converters/vasp/dos_tetra3d.hpp similarity index 86% rename from c++/plovasp/atm/dos_tetra3d.hpp rename to c++/triqs_dft_tools/converters/vasp/dos_tetra3d.hpp index abdda06b..5420f9f2 100644 --- a/c++/plovasp/atm/dos_tetra3d.hpp +++ b/c++/triqs_dft_tools/converters/vasp/dos_tetra3d.hpp @@ -22,16 +22,14 @@ #include -using triqs::arrays::array; -using triqs::arrays::array_view; /// DOS of a band by analytical tetrahedron method /// /// Returns corner weights for all tetrahedra for a given band and real energy. -array -dos_tetra_weights_3d(array_view eigk, /// Band energies for each k-point +triqs::arrays::array +dos_tetra_weights_3d(triqs::arrays::array_view eigk, /// Band energies for each k-point double en, /// Energy at which DOS weights are to be calculated - array_view itt /// Tetrahedra defined by k-point indices + triqs::arrays::array_view itt /// Tetrahedra defined by k-point indices ); //array //dos_tetra_weights_3d(array eigk, /// Band energies for each k-point diff --git a/c++/plovasp/atm/makefile.linux b/c++/triqs_dft_tools/converters/vasp/makefile.linux similarity index 100% rename from c++/plovasp/atm/makefile.linux rename to c++/triqs_dft_tools/converters/vasp/makefile.linux diff --git a/c++/plovasp/atm/setup.py b/c++/triqs_dft_tools/converters/vasp/setup.py similarity index 100% rename from c++/plovasp/atm/setup.py rename to c++/triqs_dft_tools/converters/vasp/setup.py diff --git a/c++/triqs_dft_tools/triqs_dft_tools.hpp b/c++/triqs_dft_tools/triqs_dft_tools.hpp new file mode 100644 index 00000000..ee70a5dc --- /dev/null +++ b/c++/triqs_dft_tools/triqs_dft_tools.hpp @@ -0,0 +1,3 @@ +#pragma once +#include "./converters/vasp.hpp" + diff --git a/doc/CMakeLists.txt b/doc/CMakeLists.txt index 0e137f0e..efd0c2ca 100644 --- a/doc/CMakeLists.txt +++ b/doc/CMakeLists.txt @@ -1,23 +1,80 @@ -# generate the conf.py +# 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} + ${CPP2PY_BINARY_DIR}/bin/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}) + target_link_libraries(${PROJECT_NAME}_doc_${f} triqs) + 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 # --------------------------------- -# Sources -file(GLOB_RECURSE sources *.rst) +if(NOT DEFINED SPHINXBUILD_EXECUTABLE) + find_package(Sphinx) +endif() -# create documentation target -set(sphinx_top ${CMAKE_CURRENT_BINARY_DIR}/html/index.html) -add_custom_command(OUTPUT ${sphinx_top} DEPENDS ${sources} - COMMAND ${TRIQS_SPHINXBUILD_EXECUTABLE} -c . -j8 -b html ${CMAKE_CURRENT_SOURCE_DIR} html) -add_custom_target(doc_sphinx ALL DEPENDS ${sphinx_top} ${CMAKE_CURRENT_BINARY_DIR}) +# 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:$ENV{PYTHONPATH} ${SPHINXBUILD_EXECUTABLE} -c . -j8 -b html ${CMAKE_CURRENT_SOURCE_DIR} html +) + +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) + # Autodoc usage requires the python modules to be built first + get_property(CPP2PY_MODULES_LIST GLOBAL PROPERTY CPP2PY_MODULES_LIST) + if(CPP2PY_MODULES_LIST) + add_dependencies(${PROJECT_NAME}_docs_sphinx ${CPP2PY_MODULES_LIST}) + endif() + + # 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/triqs_dft_tools - FILES_MATCHING - REGEX "\\.(html|pdf|png|gif|jpg|js|xsl|css|py|txt|inv|bib|cfg)$" - PATTERN "_*" - ) +install(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/html/ COMPONENT documentation DESTINATION share/doc/${PROJECT_NAME} + FILES_MATCHING + REGEX "\\.(html|pdf|png|gif|jpg|svg|js|xsl|css|py|txt|inv|bib)$" + PATTERN "_*" +) diff --git a/doc/_templates/sideb.html b/doc/_templates/sideb.html index 24d2ffc2..563bba82 100644 --- a/doc/_templates/sideb.html +++ b/doc/_templates/sideb.html @@ -10,5 +10,5 @@


- Visit the project on GitHub + Visit the project on GitHub

diff --git a/doc/changelog.rst b/doc/changelog.rst index b1e75038..7465fef9 100644 --- a/doc/changelog.rst +++ b/doc/changelog.rst @@ -3,6 +3,6 @@ Changelog ========= -This document describes the main changes in DFTTools. +This document describes the main changes in TRIQS_DFT_TOOLS. .. include:: ChangeLog.md diff --git a/doc/conf.py.in b/doc/conf.py.in index 111490f5..46897e7f 100644 --- a/doc/conf.py.in +++ b/doc/conf.py.in @@ -3,34 +3,36 @@ # TRIQS documentation build configuration file import sys -sys.path.insert(0, "@TRIQS_SPHINXEXT_PATH@/numpydoc") +sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext/autorun") +sys.path.insert(0, "@CMAKE_CURRENT_SOURCE_DIR@/sphinxext/numpydoc") sys.path.insert(0, "@CMAKE_BINARY_DIR@/python") extensions = ['sphinx.ext.autodoc', 'sphinx.ext.mathjax', 'sphinx.ext.intersphinx', - 'matplotlib.sphinxext.plot_directive', 'sphinx.ext.doctest', 'sphinx.ext.todo', 'sphinx.ext.viewcode', 'sphinx.ext.autosummary', - 'nbsphinx', - 'numpydoc', 'sphinx.ext.githubpages', - 'IPython.sphinxext.ipython_console_highlighting' - ] + 'matplotlib.sphinxext.plot_directive', + 'autorun', + 'nbsphinx', + 'IPython.sphinxext.ipython_console_highlighting', + 'numpydoc'] source_suffix = '.rst' -project = 'TRIQS DFTTools' -copyright = '2011-2019' -version = '@DFT_TOOLS_VERSION@' +project = '@PROJECT_NAME@' +version = '@PROJECT_VERSION@' -mathjax_path = "@TRIQS_MATHJAX_PATH@/MathJax.js?config=default" -templates_path = ['@CMAKE_SOURCE_DIR@/doc/_templates'] +copyright = '2011-2020' + +mathjax_path = "https://raw.githubusercontent.com/mathjax/MathJax/2.7.8/MathJax.js" +templates_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_templates'] html_theme = 'triqs' -html_theme_path = ['@TRIQS_THEMES_PATH@'] +html_theme_path = ['@CMAKE_CURRENT_SOURCE_DIR@/themes'] html_show_sphinx = False html_context = {'header_title': 'dft tools', 'header_subtitle': 'connecting TRIQS to DFT packages', @@ -39,9 +41,9 @@ html_context = {'header_title': 'dft tools', ['Tutorials', 'tutorials'], ['Issues', 'issues'], ['About DFTTools', 'about']]} -html_static_path = ['@CMAKE_SOURCE_DIR@/doc/_static'] +html_static_path = ['@CMAKE_CURRENT_SOURCE_DIR@/_static'] html_sidebars = {'index': ['sideb.html', 'searchbox.html']} -htmlhelp_basename = 'TRIQSDFTToolsdoc' +htmlhelp_basename = '@PROJECT_NAME@doc' -intersphinx_mapping = {'python': ('http://docs.python.org/2.7', None), 'triqslibs': ('http://triqs.github.io/triqs/latest', None), 'triqscthyb': ('https://triqs.github.io/cthyb/latest', None)} +intersphinx_mapping = {'python': ('http://docs.python.org/2.7', None), 'triqslibs': ('https://triqs.github.io/triqs/latest', None), 'triqscthyb': ('https://triqs.github.io/cthyb/latest', None)} diff --git a/doc/contents.rst b/doc/contents.rst index 4f990b6a..7b55d920 100644 --- a/doc/contents.rst +++ b/doc/contents.rst @@ -7,6 +7,7 @@ Table of contents index install documentation + tutorials issues changelog about diff --git a/doc/install.rst b/doc/install.rst index 8d2a1bc0..0def24bd 100644 --- a/doc/install.rst +++ b/doc/install.rst @@ -37,34 +37,41 @@ Compiling DFTTools from source Prerequisites ------------- -#. The :ref:`TRIQS ` toolbox. - +#. The :ref:`TRIQS ` library, see :ref:`TRIQS installation instruction `. + In the following, we assume that TRIQS is installed in the directory ``path_to_triqs``. #. Likely, you will also need at least one impurity solver, e.g. the :ref:`CTHYB solver `. -Installation steps +Installation steps ------------------ -#. Download the source code by cloning the ``TRIQS/dft_tools`` repository from GitHub:: - - $ git clone https://github.com/TRIQS/dft_tools.git dft_tools.src - +#. Download the source code of the latest stable version by cloning the ``TRIQS/dft_tools`` repository from GitHub:: + + $ git clone https://github.com/TRIQS/dft_tools dft_tools.src + +#. Make sure that all additional dependencies are installed on your system and available in your environment. + Alternatively build the dependencies from source instead with:: + + $ (cd deps && ./download.sh) + + In this case they will be installed together with your application. + #. Create and move to a new directory where you will compile the code:: - + $ mkdir dft_tools.build && cd dft_tools.build - + #. Ensure that your shell contains the TRIQS environment variables by sourcing the ``triqsvars.sh`` file from your TRIQS installation:: $ source path_to_triqs/share/triqsvarsh.sh - + #. In the build directory call cmake, including any additional custom CMake options, see below:: $ cmake ../dft_tools.src - -#. Compile the code, run the tests and install the application:: - - $ make - $ make test - $ make install + +#. Compile the code, run the tests and install the application:: + + $ make + $ make test + $ make install Installation steps for the use with WIEN2K version 14.2 and older @@ -114,37 +121,41 @@ Finally, you will have to change the calls to :program:`python_with_DMFT` to your :program:`python` installation in the Wien2k :file:`path_to_Wien2k/run*` files. -Version compatibility +Version compatibility --------------------- - -Be careful that the version of the TRIQS library and of the :program:`DFTTools` must be -compatible (more information on the :ref:`TRIQS website `. -If you want to use a version of the :program:`DFTTools` that is not the latest one, go -into the directory with the sources and look at all available versions:: - - $ cd src && git tag - -Checkout the version of the code that you want, for instance:: - - $ git co 2.1 - -Then follow the steps 2 to 5 described above to compile the code. + +Keep in mind that the version of ``dft_tools`` must be compatible with your TRIQS library version, +see :ref:`TRIQS website `. +In particular the Major and Minor Version numbers have to be the same. +To use a particular version, go into the directory with the sources, and look at all available versions:: + + $ cd dft_tools.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 -------------------- -Functionality of ``dft_tools`` can be tweaked using extra compile-time options passed to CMake:: +The compilation of ``dft_tools`` can be configured using CMake-options:: - cmake -DOPTION1=value1 -DOPTION2=value2 ... ../dft_tools.src + cmake ../dft_tools.src -DOPTION1=value1 -DOPTION2=value2 ... -+---------------------------------------------------------------+-----------------------------------------------+ -| Options | Syntax | -+===============================================================+===============================================+ -| Disable testing (not recommended) | -DBuild_Tests=OFF | -+---------------------------------------------------------------+-----------------------------------------------+ -| Build the documentation locally | -DBuild_Documentation=ON | -+---------------------------------------------------------------+-----------------------------------------------+ -| Check test coverage when testing | -DTEST_COVERAGE=ON | -| (run ``make coverage`` to show the results; requires the | | -| python ``coverage`` package) | | -+---------------------------------------------------------------+-----------------------------------------------+ ++-----------------------------------------------------------------+-----------------------------------------------+ +| Options | Syntax | ++=================================================================+===============================================+ +| Specify an installation path other than path_to_triqs | -DCMAKE_INSTALL_PREFIX=path_to_dft_tools| ++-----------------------------------------------------------------+-----------------------------------------------+ +| Build in Debugging Mode | -DCMAKE_BUILD_TYPE=Debug | ++-----------------------------------------------------------------+-----------------------------------------------+ +| Disable testing (not recommended) | -DBuild_Tests=OFF | ++-----------------------------------------------------------------+-----------------------------------------------+ +| Build the documentation | -DBuild_Documentation=ON | ++-----------------------------------------------------------------+-----------------------------------------------+ +| Check test coverage when testing | -DTEST_COVERAGE=ON | +| (run ``make coverage`` to show the results; requires the | | +| python ``coverage`` package) | | ++-----------------------------------------------------------------+-----------------------------------------------+ diff --git a/doc/issues.rst b/doc/issues.rst index efe3e9ca..d89de6d2 100644 --- a/doc/issues.rst +++ b/doc/issues.rst @@ -1,13 +1,14 @@ +.. _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 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:`README.txt` at the root of the + 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 diff --git a/doc/sphinxext/autorun/__pycache__/autorun.cpython-38.pyc b/doc/sphinxext/autorun/__pycache__/autorun.cpython-38.pyc new file mode 100644 index 00000000..282cb6b9 Binary files /dev/null and b/doc/sphinxext/autorun/__pycache__/autorun.cpython-38.pyc differ diff --git a/doc/sphinxext/autorun/autorun.py b/doc/sphinxext/autorun/autorun.py new file mode 100644 index 00000000..cbd29742 --- /dev/null +++ b/doc/sphinxext/autorun/autorun.py @@ -0,0 +1,104 @@ +# -*- coding: utf-8 -*- +""" +sphinxcontirb.autorun +~~~~~~~~~~~~~~~~~~~~~~ + +Run the code and insert stdout after the code block. + + +""" +import os +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 +from pygments import highlight +from pygments.lexers import PythonLexer +from pygments.formatters import HtmlFormatter + +class RunBlockError(SphinxError): + category = 'runblock error' + +class AutoRun: + here = os.path.abspath(__file__) + pycon = os.path.join(os.path.dirname(here),'pycon.py') + config = dict( + 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','ascii') + input_encoding = 'utf8' + output_encoding = 'utf8' + #output_encoding = config.get(language+'_output_encoding','ascii') + 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 = '\n'.join(codelines).encode(input_encoding) + + # Run the code + stdout,stderr = proc.communicate(code) + + # Process output + out ='' + if stdout: + out += ''.join(stdout).decode(output_encoding) + if stderr: + out += ''.join(stderr).decode(output_encoding) + + # Get the original code with prefixes + if show_source: + code = '\n'.join(self.content) + else: + code = '' + #code_out = u'\n\n ---Output:---\n'.join((highlight(code, PythonLexer(), HtmlFormatter()),out)) + code_out = '\n\n ---Output:---\n'.join((code,out)) + + literal = nodes.literal_block(code_out,code_out) + #literal['language'] = language + literal['language'] = 'python' + 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') + +# vim: set expandtab shiftwidth=4 softtabstop=4 : diff --git a/doc/sphinxext/autorun/pycon.py b/doc/sphinxext/autorun/pycon.py new file mode 100644 index 00000000..22ad46c8 --- /dev/null +++ b/doc/sphinxext/autorun/pycon.py @@ -0,0 +1,34 @@ +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) + 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() + + +# vim: set expandtab shiftwidth=4 softtabstop=4 : + diff --git a/doc/sphinxext/numpydoc/__pycache__/docscrape.cpython-38.pyc b/doc/sphinxext/numpydoc/__pycache__/docscrape.cpython-38.pyc new file mode 100644 index 00000000..b83545fd Binary files /dev/null and b/doc/sphinxext/numpydoc/__pycache__/docscrape.cpython-38.pyc differ diff --git a/doc/sphinxext/numpydoc/__pycache__/docscrape_sphinx.cpython-38.pyc b/doc/sphinxext/numpydoc/__pycache__/docscrape_sphinx.cpython-38.pyc new file mode 100644 index 00000000..feb31f16 Binary files /dev/null and b/doc/sphinxext/numpydoc/__pycache__/docscrape_sphinx.cpython-38.pyc differ diff --git a/doc/sphinxext/numpydoc/__pycache__/numpydoc.cpython-38.pyc b/doc/sphinxext/numpydoc/__pycache__/numpydoc.cpython-38.pyc new file mode 100644 index 00000000..e205b369 Binary files /dev/null and b/doc/sphinxext/numpydoc/__pycache__/numpydoc.cpython-38.pyc differ diff --git a/doc/sphinxext/numpydoc/apigen.py b/doc/sphinxext/numpydoc/apigen.py new file mode 100644 index 00000000..2619fbbd --- /dev/null +++ b/doc/sphinxext/numpydoc/apigen.py @@ -0,0 +1,427 @@ +"""Attempt to generate templates for module reference with Sphinx + +XXX - we exclude extension modules + +To include extension modules, first identify them as valid in the +``_uri2path`` method, then handle them in the ``_parse_module`` script. + +We get functions and classes by parsing the text of .py files. +Alternatively we could import the modules for discovery, and we'd have +to do that for extension modules. This would involve changing the +``_parse_module`` method to work via import and introspection, and +might involve changing ``discover_modules`` (which determines which +files are modules, and therefore which module URIs will be passed to +``_parse_module``). + +NOTE: this is a modified version of a script originally shipped with the +PyMVPA project, which we've adapted for NIPY use. PyMVPA is an MIT-licensed +project.""" + +# Stdlib imports +import os +import re + +# Functions and classes +class ApiDocWriter: + ''' Class for automatic detection and parsing of API docs + to Sphinx-parsable reST format''' + + # only separating first two levels + rst_section_levels = ['*', '=', '-', '~', '^'] + + def __init__(self, + package_name, + rst_extension='.rst', + package_skip_patterns=None, + module_skip_patterns=None, + ): + ''' Initialize package for parsing + + Parameters + ---------- + package_name : string + Name of the top-level package. *package_name* must be the + name of an importable package + rst_extension : string, optional + Extension for reST files, default '.rst' + package_skip_patterns : None or sequence of {strings, regexps} + Sequence of strings giving URIs of packages to be excluded + Operates on the package path, starting at (including) the + first dot in the package path, after *package_name* - so, + if *package_name* is ``sphinx``, then ``sphinx.util`` will + result in ``.util`` being passed for earching by these + regexps. If is None, gives default. Default is: + ['\.tests$'] + module_skip_patterns : None or sequence + Sequence of strings giving URIs of modules to be excluded + Operates on the module name including preceding URI path, + back to the first dot after *package_name*. For example + ``sphinx.util.console`` results in the string to search of + ``.util.console`` + If is None, gives default. Default is: + ['\.setup$', '\._'] + ''' + if package_skip_patterns is None: + package_skip_patterns = ['\\.tests$'] + if module_skip_patterns is None: + module_skip_patterns = ['\\.setup$', '\\._'] + self.package_name = package_name + self.rst_extension = rst_extension + self.package_skip_patterns = package_skip_patterns + self.module_skip_patterns = module_skip_patterns + + def get_package_name(self): + return self._package_name + + def set_package_name(self, package_name): + ''' Set package_name + + >>> docwriter = ApiDocWriter('sphinx') + >>> import sphinx + >>> docwriter.root_path == sphinx.__path__[0] + True + >>> docwriter.package_name = 'docutils' + >>> import docutils + >>> docwriter.root_path == docutils.__path__[0] + True + ''' + # It's also possible to imagine caching the module parsing here + self._package_name = package_name + self.root_module = __import__(package_name) + self.root_path = self.root_module.__path__[0] + self.written_modules = None + + package_name = property(get_package_name, set_package_name, None, + 'get/set package_name') + + def _get_object_name(self, line): + ''' Get second token in line + >>> docwriter = ApiDocWriter('sphinx') + >>> docwriter._get_object_name(" def func(): ") + 'func' + >>> docwriter._get_object_name(" class Klass: ") + 'Klass' + >>> docwriter._get_object_name(" class Klass: ") + 'Klass' + ''' + name = line.split()[1].split('(')[0].strip() + # in case we have classes which are not derived from object + # ie. old style classes + return name.rstrip(':') + + def _uri2path(self, uri): + ''' Convert uri to absolute filepath + + Parameters + ---------- + uri : string + URI of python module to return path for + + Returns + ------- + path : None or string + Returns None if there is no valid path for this URI + Otherwise returns absolute file system path for URI + + Examples + -------- + >>> docwriter = ApiDocWriter('sphinx') + >>> import sphinx + >>> modpath = sphinx.__path__[0] + >>> res = docwriter._uri2path('sphinx.builder') + >>> res == os.path.join(modpath, 'builder.py') + True + >>> res = docwriter._uri2path('sphinx') + >>> res == os.path.join(modpath, '__init__.py') + True + >>> docwriter._uri2path('sphinx.does_not_exist') + + ''' + if uri == self.package_name: + return os.path.join(self.root_path, '__init__.py') + path = uri.replace('.', os.path.sep) + path = path.replace(self.package_name + os.path.sep, '') + path = os.path.join(self.root_path, path) + # XXX maybe check for extensions as well? + if os.path.exists(path + '.py'): # file + path += '.py' + elif os.path.exists(os.path.join(path, '__init__.py')): + path = os.path.join(path, '__init__.py') + else: + return None + return path + + def _path2uri(self, dirpath): + ''' Convert directory path to uri ''' + relpath = dirpath.replace(self.root_path, self.package_name) + if relpath.startswith(os.path.sep): + relpath = relpath[1:] + return relpath.replace(os.path.sep, '.') + + def _parse_module(self, uri): + ''' Parse module defined in *uri* ''' + filename = self._uri2path(uri) + if filename is None: + # nothing that we could handle here. + return ([],[]) + f = open(filename, 'rt') + functions, classes = self._parse_lines(f) + f.close() + return functions, classes + + def _parse_lines(self, linesource): + ''' Parse lines of text for functions and classes ''' + functions = [] + classes = [] + for line in linesource: + if line.startswith('def ') and line.count('('): + # exclude private stuff + name = self._get_object_name(line) + if not name.startswith('_'): + functions.append(name) + elif line.startswith('class '): + # exclude private stuff + name = self._get_object_name(line) + if not name.startswith('_'): + classes.append(name) + else: + pass + functions.sort() + classes.sort() + return functions, classes + + def generate_api_doc(self, uri): + '''Make autodoc documentation template string for a module + + Parameters + ---------- + uri : string + python location of module - e.g 'sphinx.builder' + + Returns + ------- + S : string + Contents of API doc + ''' + # get the names of all classes and functions + functions, classes = self._parse_module(uri) + if not len(functions) and not len(classes): + print('WARNING: Empty -',uri) # dbg + return '' + + # Make a shorter version of the uri that omits the package name for + # titles + uri_short = re.sub(r'^%s\.' % self.package_name,'',uri) + + ad = '.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n' + + chap_title = uri_short + ad += (chap_title+'\n'+ self.rst_section_levels[1] * len(chap_title) + + '\n\n') + + # Set the chapter title to read 'module' for all modules except for the + # main packages + if '.' in uri: + title = 'Module: :mod:`' + uri_short + '`' + else: + title = ':mod:`' + uri_short + '`' + ad += title + '\n' + self.rst_section_levels[2] * len(title) + + if len(classes): + ad += '\nInheritance diagram for ``%s``:\n\n' % uri + ad += '.. inheritance-diagram:: %s \n' % uri + ad += ' :parts: 3\n' + + ad += '\n.. automodule:: ' + uri + '\n' + ad += '\n.. currentmodule:: ' + uri + '\n' + multi_class = len(classes) > 1 + multi_fx = len(functions) > 1 + if multi_class: + ad += '\n' + 'Classes' + '\n' + \ + self.rst_section_levels[2] * 7 + '\n' + elif len(classes) and multi_fx: + ad += '\n' + 'Class' + '\n' + \ + self.rst_section_levels[2] * 5 + '\n' + for c in classes: + ad += '\n:class:`' + c + '`\n' \ + + self.rst_section_levels[multi_class + 2 ] * \ + (len(c)+9) + '\n\n' + ad += '\n.. autoclass:: ' + c + '\n' + # must NOT exclude from index to keep cross-refs working + ad += ' :members:\n' \ + ' :undoc-members:\n' \ + ' :show-inheritance:\n' \ + ' :inherited-members:\n' \ + '\n' \ + ' .. automethod:: __init__\n' + if multi_fx: + ad += '\n' + 'Functions' + '\n' + \ + self.rst_section_levels[2] * 9 + '\n\n' + elif len(functions) and multi_class: + ad += '\n' + 'Function' + '\n' + \ + self.rst_section_levels[2] * 8 + '\n\n' + for f in functions: + # must NOT exclude from index to keep cross-refs working + ad += '\n.. autofunction:: ' + uri + '.' + f + '\n\n' + return ad + + def _survives_exclude(self, matchstr, match_type): + ''' Returns True if *matchstr* does not match patterns + + ``self.package_name`` removed from front of string if present + + Examples + -------- + >>> dw = ApiDocWriter('sphinx') + >>> dw._survives_exclude('sphinx.okpkg', 'package') + True + >>> dw.package_skip_patterns.append('^\\.badpkg$') + >>> dw._survives_exclude('sphinx.badpkg', 'package') + False + >>> dw._survives_exclude('sphinx.badpkg', 'module') + True + >>> dw._survives_exclude('sphinx.badmod', 'module') + True + >>> dw.module_skip_patterns.append('^\\.badmod$') + >>> dw._survives_exclude('sphinx.badmod', 'module') + False + ''' + if match_type == 'module': + patterns = self.module_skip_patterns + elif match_type == 'package': + patterns = self.package_skip_patterns + else: + raise ValueError('Cannot interpret match type "%s"' + % match_type) + # Match to URI without package name + L = len(self.package_name) + if matchstr[:L] == self.package_name: + matchstr = matchstr[L:] + for pat in patterns: + try: + pat.search + except AttributeError: + pat = re.compile(pat) + if pat.search(matchstr): + return False + return True + + def discover_modules(self): + ''' Return module sequence discovered from ``self.package_name`` + + + Parameters + ---------- + None + + Returns + ------- + mods : sequence + Sequence of module names within ``self.package_name`` + + Examples + -------- + >>> dw = ApiDocWriter('sphinx') + >>> mods = dw.discover_modules() + >>> 'sphinx.util' in mods + True + >>> dw.package_skip_patterns.append('\.util$') + >>> 'sphinx.util' in dw.discover_modules() + False + >>> + ''' + modules = [self.package_name] + # raw directory parsing + for dirpath, dirnames, filenames in os.walk(self.root_path): + # Check directory names for packages + root_uri = self._path2uri(os.path.join(self.root_path, + dirpath)) + for dirname in dirnames[:]: # copy list - we modify inplace + package_uri = '.'.join((root_uri, dirname)) + if (self._uri2path(package_uri) and + self._survives_exclude(package_uri, 'package')): + modules.append(package_uri) + else: + dirnames.remove(dirname) + # Check filenames for modules + for filename in filenames: + module_name = filename[:-3] + module_uri = '.'.join((root_uri, module_name)) + if (self._uri2path(module_uri) and + self._survives_exclude(module_uri, 'module')): + modules.append(module_uri) + return sorted(modules) + + def write_modules_api(self, modules,outdir): + # write the list + written_modules = [] + for m in modules: + api_str = self.generate_api_doc(m) + if not api_str: + continue + # write out to file + outfile = os.path.join(outdir, + m + self.rst_extension) + fileobj = open(outfile, 'wt') + fileobj.write(api_str) + fileobj.close() + written_modules.append(m) + self.written_modules = written_modules + + def write_api_docs(self, outdir): + """Generate API reST files. + + Parameters + ---------- + outdir : string + Directory name in which to store files + We create automatic filenames for each module + + Returns + ------- + None + + Notes + ----- + Sets self.written_modules to list of written modules + """ + if not os.path.exists(outdir): + os.mkdir(outdir) + # compose list of modules + modules = self.discover_modules() + self.write_modules_api(modules,outdir) + + def write_index(self, outdir, froot='gen', relative_to=None): + """Make a reST API index file from written files + + Parameters + ---------- + path : string + Filename to write index to + outdir : string + Directory to which to write generated index file + froot : string, optional + root (filename without extension) of filename to write to + Defaults to 'gen'. We add ``self.rst_extension``. + relative_to : string + path to which written filenames are relative. This + component of the written file path will be removed from + outdir, in the generated index. Default is None, meaning, + leave path as it is. + """ + if self.written_modules is None: + raise ValueError('No modules written') + # Get full filename path + path = os.path.join(outdir, froot+self.rst_extension) + # Path written into index is relative to rootpath + if relative_to is not None: + relpath = outdir.replace(relative_to + os.path.sep, '') + else: + relpath = outdir + idx = open(path,'wt') + w = idx.write + w('.. AUTO-GENERATED FILE -- DO NOT EDIT!\n\n') + w('.. toctree::\n\n') + for f in self.written_modules: + w(' %s\n' % os.path.join(relpath,f)) + idx.close() diff --git a/doc/sphinxext/numpydoc/docscrape.py b/doc/sphinxext/numpydoc/docscrape.py new file mode 100644 index 00000000..25489154 --- /dev/null +++ b/doc/sphinxext/numpydoc/docscrape.py @@ -0,0 +1,497 @@ +"""Extract reference documentation from the NumPy source tree. + +""" + +import inspect +import textwrap +import re +import pydoc +from io import StringIO +from warnings import warn +4 +class Reader: + """A line-based string reader. + + """ + def __init__(self, data): + """ + Parameters + ---------- + data : str + String with lines separated by '\n'. + + """ + if isinstance(data,list): + self._str = data + else: + self._str = data.split('\n') # store string as list of lines + + self.reset() + + def __getitem__(self, n): + return self._str[n] + + def reset(self): + self._l = 0 # current line nr + + def read(self): + if not self.eof(): + out = self[self._l] + self._l += 1 + return out + else: + return '' + + def seek_next_non_empty_line(self): + for l in self[self._l:]: + if l.strip(): + break + else: + self._l += 1 + + def eof(self): + return self._l >= len(self._str) + + def read_to_condition(self, condition_func): + start = self._l + for line in self[start:]: + if condition_func(line): + return self[start:self._l] + self._l += 1 + if self.eof(): + return self[start:self._l+1] + return [] + + def read_to_next_empty_line(self): + self.seek_next_non_empty_line() + def is_empty(line): + return not line.strip() + return self.read_to_condition(is_empty) + + def read_to_next_unindented_line(self): + def is_unindented(line): + return (line.strip() and (len(line.lstrip()) == len(line))) + return self.read_to_condition(is_unindented) + + def peek(self,n=0): + if self._l + n < len(self._str): + return self[self._l + n] + else: + return '' + + def is_empty(self): + return not ''.join(self._str).strip() + + +class NumpyDocString: + def __init__(self,docstring): + docstring = textwrap.dedent(docstring).split('\n') + + self._doc = Reader(docstring) + self._parsed_data = { + 'Signature': '', + 'Summary': [''], + 'Extended Summary': [], + 'Parameters': [], + 'Returns': [], + 'Raises': [], + 'Warns': [], + 'Other Parameters': [], + 'Attributes': [], + 'Methods': [], + 'See Also': [], + 'Notes': [], + 'Warnings': [], + 'References': '', + 'Examples': '', + 'index': {} + } + + self._parse() + + def __getitem__(self,key): + return self._parsed_data[key] + + def __setitem__(self,key,val): + if key not in self._parsed_data: + warn("Unknown section %s" % key) + else: + self._parsed_data[key] = val + + def _is_at_section(self): + self._doc.seek_next_non_empty_line() + + if self._doc.eof(): + return False + + l1 = self._doc.peek().strip() # e.g. Parameters + + if l1.startswith('.. index::'): + return True + + l2 = self._doc.peek(1).strip() # ---------- or ========== + return l2.startswith('-'*len(l1)) or l2.startswith('='*len(l1)) + + def _strip(self,doc): + i = 0 + j = 0 + for i,line in enumerate(doc): + if line.strip(): break + + for j,line in enumerate(doc[::-1]): + if line.strip(): break + + return doc[i:len(doc)-j] + + def _read_to_next_section(self): + section = self._doc.read_to_next_empty_line() + + while not self._is_at_section() and not self._doc.eof(): + if not self._doc.peek(-1).strip(): # previous line was empty + section += [''] + + section += self._doc.read_to_next_empty_line() + + return section + + def _read_sections(self): + while not self._doc.eof(): + data = self._read_to_next_section() + name = data[0].strip() + + if name.startswith('..'): # index section + yield name, data[1:] + elif len(data) < 2: + yield StopIteration + else: + yield name, self._strip(data[2:]) + + def _parse_param_list(self,content): + r = Reader(content) + params = [] + while not r.eof(): + header = r.read().strip() + if ' : ' in header: + arg_name, arg_type = header.split(' : ')[:2] + else: + arg_name, arg_type = header, '' + + desc = r.read_to_next_unindented_line() + desc = dedent_lines(desc) + + params.append((arg_name,arg_type,desc)) + + return params + + + _name_rgx = re.compile(r"^\s*(:(?P\w+):`(?P[a-zA-Z0-9_.-]+)`|" + r" (?P[a-zA-Z0-9_.-]+))\s*", re.X) + def _parse_see_also(self, content): + """ + func_name : Descriptive text + continued text + another_func_name : Descriptive text + func_name1, func_name2, :meth:`func_name`, func_name3 + + """ + items = [] + + def parse_item_name(text): + """Match ':role:`name`' or 'name'""" + m = self._name_rgx.match(text) + if m: + g = m.groups() + if g[1] is None: + return g[3], None + else: + return g[2], g[1] + raise ValueError("%s is not a item name" % text) + + def push_item(name, rest): + if not name: + return + name, role = parse_item_name(name) + items.append((name, list(rest), role)) + del rest[:] + + current_func = None + rest = [] + + for line in content: + if not line.strip(): continue + + m = self._name_rgx.match(line) + if m and line[m.end():].strip().startswith(':'): + push_item(current_func, rest) + current_func, line = line[:m.end()], line[m.end():] + rest = [line.split(':', 1)[1].strip()] + if not rest[0]: + rest = [] + elif not line.startswith(' '): + push_item(current_func, rest) + current_func = None + if ',' in line: + for func in line.split(','): + push_item(func, []) + elif line.strip(): + current_func = line + elif current_func is not None: + rest.append(line.strip()) + push_item(current_func, rest) + return items + + def _parse_index(self, section, content): + """ + .. index: default + :refguide: something, else, and more + + """ + def strip_each_in(lst): + return [s.strip() for s in lst] + + out = {} + section = section.split('::') + if len(section) > 1: + out['default'] = strip_each_in(section[1].split(','))[0] + for line in content: + line = line.split(':') + if len(line) > 2: + out[line[1]] = strip_each_in(line[2].split(',')) + return out + + def _parse_summary(self): + """Grab signature (if given) and summary""" + if self._is_at_section(): + return + + summary = self._doc.read_to_next_empty_line() + summary_str = " ".join([s.strip() for s in summary]).strip() + if re.compile('^([\w., ]+=)?\s*[\w\.]+\(.*\)$').match(summary_str): + self['Signature'] = summary_str + if not self._is_at_section(): + self['Summary'] = self._doc.read_to_next_empty_line() + else: + self['Summary'] = summary + + if not self._is_at_section(): + self['Extended Summary'] = self._read_to_next_section() + + def _parse(self): + self._doc.reset() + self._parse_summary() + + for (section,content) in self._read_sections(): + if not section.startswith('..'): + section = ' '.join([s.capitalize() for s in section.split(' ')]) + if section in ('Parameters', 'Attributes', 'Methods', + 'Returns', 'Raises', 'Warns'): + self[section] = self._parse_param_list(content) + elif section.startswith('.. index::'): + self['index'] = self._parse_index(section, content) + elif section == 'See Also': + self['See Also'] = self._parse_see_also(content) + else: + self[section] = content + + # string conversion routines + + def _str_header(self, name, symbol='-'): + return [name, len(name)*symbol] + + def _str_indent(self, doc, indent=4): + out = [] + for line in doc: + out += [' '*indent + line] + return out + + def _str_signature(self): + if self['Signature']: + return [self['Signature'].replace('*','\*')] + [''] + else: + return [''] + + def _str_summary(self): + if self['Summary']: + return self['Summary'] + [''] + else: + return [] + + def _str_extended_summary(self): + if self['Extended Summary']: + return self['Extended Summary'] + [''] + else: + return [] + + def _str_param_list(self, name): + out = [] + if self[name]: + out += self._str_header(name) + for param,param_type,desc in self[name]: + out += ['%s : %s' % (param, param_type)] + out += self._str_indent(desc) + out += [''] + return out + + def _str_section(self, name): + out = [] + if self[name]: + out += self._str_header(name) + out += self[name] + out += [''] + return out + + def _str_see_also(self, func_role): + if not self['See Also']: return [] + out = [] + out += self._str_header("See Also") + last_had_desc = True + for func, desc, role in self['See Also']: + if role: + link = ':%s:`%s`' % (role, func) + elif func_role: + link = ':%s:`%s`' % (func_role, func) + else: + link = "`%s`_" % func + if desc or last_had_desc: + out += [''] + out += [link] + else: + out[-1] += ", %s" % link + if desc: + out += self._str_indent([' '.join(desc)]) + last_had_desc = True + else: + last_had_desc = False + out += [''] + return out + + def _str_index(self): + idx = self['index'] + out = [] + out += ['.. index:: %s' % idx.get('default','')] + for section, references in idx.items(): + if section == 'default': + continue + out += [' :%s: %s' % (section, ', '.join(references))] + return out + + def __str__(self, func_role=''): + out = [] + out += self._str_signature() + out += self._str_summary() + out += self._str_extended_summary() + for param_list in ('Parameters','Returns','Raises'): + out += self._str_param_list(param_list) + out += self._str_section('Warnings') + out += self._str_see_also(func_role) + for s in ('Notes','References','Examples'): + out += self._str_section(s) + out += self._str_index() + return '\n'.join(out) + + +def indent(str,indent=4): + indent_str = ' '*indent + if str is None: + return indent_str + lines = str.split('\n') + return '\n'.join(indent_str + l for l in lines) + +def dedent_lines(lines): + """Deindent a list of lines maximally""" + return textwrap.dedent("\n".join(lines)).split("\n") + +def header(text, style='-'): + return text + '\n' + style*len(text) + '\n' + + +class FunctionDoc(NumpyDocString): + def __init__(self, func, role='func', doc=None): + self._f = func + self._role = role # e.g. "func" or "meth" + if doc is None: + doc = inspect.getdoc(func) or '' + try: + NumpyDocString.__init__(self, doc) + except ValueError as e: + print('*'*78) + print("ERROR: '%s' while parsing `%s`" % (e, self._f)) + print('*'*78) + #print "Docstring follows:" + #print doclines + #print '='*78 + + if not self['Signature']: + func, func_name = self.get_func() + try: + # try to read signature + argspec = inspect.getargspec(func) + argspec = inspect.formatargspec(*argspec) + argspec = argspec.replace('*','\*') + signature = '%s%s' % (func_name, argspec) + except TypeError as e: + signature = '%s()' % func_name + self['Signature'] = signature + + def get_func(self): + func_name = getattr(self._f, '__name__', self.__class__.__name__) + if inspect.isclass(self._f): + func = getattr(self._f, '__call__', self._f.__init__) + else: + func = self._f + return func, func_name + + def __str__(self): + out = '' + + func, func_name = self.get_func() + signature = self['Signature'].replace('*', '\*') + + roles = {'func': 'function', + 'meth': 'method'} + + if self._role: + if self._role not in roles: + print("Warning: invalid role %s" % self._role) + out += '.. %s:: %s\n \n\n' % (roles.get(self._role,''), + func_name) + + out += super(FunctionDoc, self).__str__(func_role=self._role) + return out + + +class ClassDoc(NumpyDocString): + def __init__(self,cls,modulename='',func_doc=FunctionDoc,doc=None): + if not inspect.isclass(cls): + raise ValueError("Initialise using a class. Got %r" % cls) + self._cls = cls + + if modulename and not modulename.endswith('.'): + modulename += '.' + self._mod = modulename + self._name = cls.__name__ + self._func_doc = func_doc + + if doc is None: + doc = pydoc.getdoc(cls) + + NumpyDocString.__init__(self, doc) + + @property + def methods(self): + return [name for name,func in inspect.getmembers(self._cls) + if not name.startswith('_') and callable(func)] + + def __str__(self): + out = '' + out += super(ClassDoc, self).__str__() + out += "\n\n" + + #for m in self.methods: + # print "Parsing `%s`" % m + # out += str(self._func_doc(getattr(self._cls,m), 'meth')) + '\n\n' + # out += '.. index::\n single: %s; %s\n\n' % (self._name, m) + + return out + + diff --git a/doc/sphinxext/numpydoc/docscrape_sphinx.py b/doc/sphinxext/numpydoc/docscrape_sphinx.py new file mode 100644 index 00000000..2660f14f --- /dev/null +++ b/doc/sphinxext/numpydoc/docscrape_sphinx.py @@ -0,0 +1,136 @@ +import re, inspect, textwrap, pydoc +from docscrape import NumpyDocString, FunctionDoc, ClassDoc + +class SphinxDocString(NumpyDocString): + # string conversion routines + def _str_header(self, name, symbol='`'): + return ['.. rubric:: ' + name, ''] + + def _str_field_list(self, name): + return [':' + name + ':'] + + def _str_indent(self, doc, indent=4): + out = [] + for line in doc: + out += [' '*indent + line] + return out + + def _str_signature(self): + return [''] + if self['Signature']: + return ['``%s``' % self['Signature']] + [''] + else: + return [''] + + def _str_summary(self): + return self['Summary'] + [''] + + def _str_extended_summary(self): + return self['Extended Summary'] + [''] + + def _str_param_list(self, name): + out = [] + if self[name]: + out += self._str_field_list(name) + out += [''] + for param,param_type,desc in self[name]: + out += self._str_indent(['**%s** : %s' % (param.strip(), + param_type)]) + out += [''] + out += self._str_indent(desc,8) + out += [''] + return out + + def _str_section(self, name): + out = [] + if self[name]: + out += self._str_header(name) + out += [''] + content = textwrap.dedent("\n".join(self[name])).split("\n") + out += content + out += [''] + return out + + def _str_see_also(self, func_role): + out = [] + if self['See Also']: + see_also = super(SphinxDocString, self)._str_see_also(func_role) + out = ['.. seealso::', ''] + out += self._str_indent(see_also[2:]) + return out + + def _str_warnings(self): + out = [] + if self['Warnings']: + out = ['.. warning::', ''] + out += self._str_indent(self['Warnings']) + return out + + def _str_index(self): + idx = self['index'] + out = [] + if len(idx) == 0: + return out + + out += ['.. index:: %s' % idx.get('default','')] + for section, references in idx.items(): + if section == 'default': + continue + elif section == 'refguide': + out += [' single: %s' % (', '.join(references))] + else: + out += [' %s: %s' % (section, ','.join(references))] + return out + + def _str_references(self): + out = [] + if self['References']: + out += self._str_header('References') + if isinstance(self['References'], str): + self['References'] = [self['References']] + out.extend(self['References']) + out += [''] + return out + + def __str__(self, indent=0, func_role="obj"): + out = [] + out += self._str_signature() + out += self._str_index() + [''] + out += self._str_summary() + out += self._str_extended_summary() + for param_list in ('Parameters', 'Attributes', 'Methods', + 'Returns','Raises'): + out += self._str_param_list(param_list) + out += self._str_warnings() + out += self._str_see_also(func_role) + out += self._str_section('Notes') + out += self._str_references() + out += self._str_section('Examples') + out = self._str_indent(out,indent) + return '\n'.join(out) + +class SphinxFunctionDoc(SphinxDocString, FunctionDoc): + pass + +class SphinxClassDoc(SphinxDocString, ClassDoc): + pass + +def get_doc_object(obj, what=None, doc=None): + if what is None: + if inspect.isclass(obj): + what = 'class' + elif inspect.ismodule(obj): + what = 'module' + elif callable(obj): + what = 'function' + else: + what = 'object' + if what == 'class': + return SphinxClassDoc(obj, '', func_doc=SphinxFunctionDoc, doc=doc) + elif what in ('function', 'method'): + return SphinxFunctionDoc(obj, '', doc=doc) + else: + if doc is None: + doc = pydoc.getdoc(obj) + return SphinxDocString(doc) + diff --git a/doc/sphinxext/numpydoc/inheritance_diagram.py b/doc/sphinxext/numpydoc/inheritance_diagram.py new file mode 100644 index 00000000..a1ba7e7e --- /dev/null +++ b/doc/sphinxext/numpydoc/inheritance_diagram.py @@ -0,0 +1,407 @@ +""" +Defines a docutils directive for inserting inheritance diagrams. + +Provide the directive with one or more classes or modules (separated +by whitespace). For modules, all of the classes in that module will +be used. + +Example:: + + Given the following classes: + + class A: pass + class B(A): pass + class C(A): pass + class D(B, C): pass + class E(B): pass + + .. inheritance-diagram: D E + + Produces a graph like the following: + + A + / \ + B C + / \ / + E D + +The graph is inserted as a PNG+image map into HTML and a PDF in +LaTeX. +""" + +import inspect +import os +import re +import subprocess +try: + from hashlib import md5 +except ImportError: + from md5 import md5 + +from docutils.nodes import Body, Element +from docutils.parsers.rst import directives +from sphinx.roles import xfileref_role + +def my_import(name): + """Module importer - taken from the python documentation. + + This function allows importing names with dots in them.""" + + mod = __import__(name) + components = name.split('.') + for comp in components[1:]: + mod = getattr(mod, comp) + return mod + +class DotException(Exception): + pass + +class InheritanceGraph: + """ + Given a list of classes, determines the set of classes that + they inherit from all the way to the root "object", and then + is able to generate a graphviz dot graph from them. + """ + def __init__(self, class_names, show_builtins=False): + """ + *class_names* is a list of child classes to show bases from. + + If *show_builtins* is True, then Python builtins will be shown + in the graph. + """ + self.class_names = class_names + self.classes = self._import_classes(class_names) + self.all_classes = self._all_classes(self.classes) + if len(self.all_classes) == 0: + raise ValueError("No classes found for inheritance diagram") + self.show_builtins = show_builtins + + py_sig_re = re.compile(r'''^([\w.]*\.)? # class names + (\w+) \s* $ # optionally arguments + ''', re.VERBOSE) + + def _import_class_or_module(self, name): + """ + Import a class using its fully-qualified *name*. + """ + try: + path, base = self.py_sig_re.match(name).groups() + except: + raise ValueError( + "Invalid class or module '%s' specified for inheritance diagram" % name) + fullname = (path or '') + base + path = (path and path.rstrip('.')) + if not path: + path = base + try: + module = __import__(path, None, None, []) + # We must do an import of the fully qualified name. Otherwise if a + # subpackage 'a.b' is requested where 'import a' does NOT provide + # 'a.b' automatically, then 'a.b' will not be found below. This + # second call will force the equivalent of 'import a.b' to happen + # after the top-level import above. + my_import(fullname) + + except ImportError: + raise ValueError( + "Could not import class or module '%s' specified for inheritance diagram" % name) + + try: + todoc = module + for comp in fullname.split('.')[1:]: + todoc = getattr(todoc, comp) + except AttributeError: + raise ValueError( + "Could not find class or module '%s' specified for inheritance diagram" % name) + + # If a class, just return it + if inspect.isclass(todoc): + return [todoc] + elif inspect.ismodule(todoc): + classes = [] + for cls in list(todoc.__dict__.values()): + if inspect.isclass(cls) and cls.__module__ == todoc.__name__: + classes.append(cls) + return classes + raise ValueError( + "'%s' does not resolve to a class or module" % name) + + def _import_classes(self, class_names): + """ + Import a list of classes. + """ + classes = [] + for name in class_names: + classes.extend(self._import_class_or_module(name)) + return classes + + def _all_classes(self, classes): + """ + Return a list of all classes that are ancestors of *classes*. + """ + all_classes = {} + + def recurse(cls): + all_classes[cls] = None + for c in cls.__bases__: + if c not in all_classes: + recurse(c) + + for cls in classes: + recurse(cls) + + return list(all_classes.keys()) + + def class_name(self, cls, parts=0): + """ + Given a class object, return a fully-qualified name. This + works for things I've tested in matplotlib so far, but may not + be completely general. + """ + module = cls.__module__ + if module == '__builtin__': + fullname = cls.__name__ + else: + fullname = "%s.%s" % (module, cls.__name__) + if parts == 0: + return fullname + name_parts = fullname.split('.') + return '.'.join(name_parts[-parts:]) + + def get_all_class_names(self): + """ + Get all of the class names involved in the graph. + """ + return [self.class_name(x) for x in self.all_classes] + + # These are the default options for graphviz + default_graph_options = { + "rankdir": "LR", + "size": '"8.0, 12.0"' + } + default_node_options = { + "shape": "box", + "fontsize": 10, + "height": 0.25, + "fontname": "Vera Sans, DejaVu Sans, Liberation Sans, Arial, Helvetica, sans", + "style": '"setlinewidth(0.5)"' + } + default_edge_options = { + "arrowsize": 0.5, + "style": '"setlinewidth(0.5)"' + } + + def _format_node_options(self, options): + return ','.join(["%s=%s" % x for x in list(options.items())]) + def _format_graph_options(self, options): + return ''.join(["%s=%s;\n" % x for x in list(options.items())]) + + def generate_dot(self, fd, name, parts=0, urls={}, + graph_options={}, node_options={}, + edge_options={}): + """ + Generate a graphviz dot graph from the classes that + were passed in to __init__. + + *fd* is a Python file-like object to write to. + + *name* is the name of the graph + + *urls* is a dictionary mapping class names to http urls + + *graph_options*, *node_options*, *edge_options* are + dictionaries containing key/value pairs to pass on as graphviz + properties. + """ + g_options = self.default_graph_options.copy() + g_options.update(graph_options) + n_options = self.default_node_options.copy() + n_options.update(node_options) + e_options = self.default_edge_options.copy() + e_options.update(edge_options) + + fd.write('digraph %s {\n' % name) + fd.write(self._format_graph_options(g_options)) + + for cls in self.all_classes: + if not self.show_builtins and cls in list(__builtins__.values()): + continue + + name = self.class_name(cls, parts) + + # Write the node + this_node_options = n_options.copy() + url = urls.get(self.class_name(cls)) + if url is not None: + this_node_options['URL'] = '"%s"' % url + fd.write(' "%s" [%s];\n' % + (name, self._format_node_options(this_node_options))) + + # Write the edges + for base in cls.__bases__: + if not self.show_builtins and base in list(__builtins__.values()): + continue + + base_name = self.class_name(base, parts) + fd.write(' "%s" -> "%s" [%s];\n' % + (base_name, name, + self._format_node_options(e_options))) + fd.write('}\n') + + def run_dot(self, args, name, parts=0, urls={}, + graph_options={}, node_options={}, edge_options={}): + """ + Run graphviz 'dot' over this graph, returning whatever 'dot' + writes to stdout. + + *args* will be passed along as commandline arguments. + + *name* is the name of the graph + + *urls* is a dictionary mapping class names to http urls + + Raises DotException for any of the many os and + installation-related errors that may occur. + """ + try: + dot = subprocess.Popen(['dot'] + list(args), + stdin=subprocess.PIPE, stdout=subprocess.PIPE, + close_fds=True) + except OSError: + raise DotException("Could not execute 'dot'. Are you sure you have 'graphviz' installed?") + except ValueError: + raise DotException("'dot' called with invalid arguments") + except: + raise DotException("Unexpected error calling 'dot'") + + self.generate_dot(dot.stdin, name, parts, urls, graph_options, + node_options, edge_options) + dot.stdin.close() + result = dot.stdout.read() + returncode = dot.wait() + if returncode != 0: + raise DotException("'dot' returned the errorcode %d" % returncode) + return result + +class inheritance_diagram(Body, Element): + """ + A docutils node to use as a placeholder for the inheritance + diagram. + """ + pass + +def inheritance_diagram_directive(name, arguments, options, content, lineno, + content_offset, block_text, state, + state_machine): + """ + Run when the inheritance_diagram directive is first encountered. + """ + node = inheritance_diagram() + + class_names = arguments + + # Create a graph starting with the list of classes + graph = InheritanceGraph(class_names) + + # Create xref nodes for each target of the graph's image map and + # add them to the doc tree so that Sphinx can resolve the + # references to real URLs later. These nodes will eventually be + # removed from the doctree after we're done with them. + for name in graph.get_all_class_names(): + refnodes, x = xfileref_role( + 'class', ':class:`%s`' % name, name, 0, state) + node.extend(refnodes) + # Store the graph object so we can use it to generate the + # dot file later + node['graph'] = graph + # Store the original content for use as a hash + node['parts'] = options.get('parts', 0) + node['content'] = " ".join(class_names) + return [node] + +def get_graph_hash(node): + return md5(node['content'] + str(node['parts'])).hexdigest()[-10:] + +def html_output_graph(self, node): + """ + Output the graph for HTML. This will insert a PNG with clickable + image map. + """ + graph = node['graph'] + parts = node['parts'] + + graph_hash = get_graph_hash(node) + name = "inheritance%s" % graph_hash + path = '_images' + dest_path = os.path.join(setup.app.builder.outdir, path) + if not os.path.exists(dest_path): + os.makedirs(dest_path) + png_path = os.path.join(dest_path, name + ".png") + path = setup.app.builder.imgpath + + # Create a mapping from fully-qualified class names to URLs. + urls = {} + for child in node: + if child.get('refuri') is not None: + urls[child['reftitle']] = child.get('refuri') + elif child.get('refid') is not None: + urls[child['reftitle']] = '#' + child.get('refid') + + # These arguments to dot will save a PNG file to disk and write + # an HTML image map to stdout. + image_map = graph.run_dot(['-Tpng', '-o%s' % png_path, '-Tcmapx'], + name, parts, urls) + return ('%s' % + (path, name, name, image_map)) + +def latex_output_graph(self, node): + """ + Output the graph for LaTeX. This will insert a PDF. + """ + graph = node['graph'] + parts = node['parts'] + + graph_hash = get_graph_hash(node) + name = "inheritance%s" % graph_hash + dest_path = os.path.abspath(os.path.join(setup.app.builder.outdir, '_images')) + if not os.path.exists(dest_path): + os.makedirs(dest_path) + pdf_path = os.path.abspath(os.path.join(dest_path, name + ".pdf")) + + graph.run_dot(['-Tpdf', '-o%s' % pdf_path], + name, parts, graph_options={'size': '"6.0,6.0"'}) + return '\n\\includegraphics{%s}\n\n' % pdf_path + +def visit_inheritance_diagram(inner_func): + """ + This is just a wrapper around html/latex_output_graph to make it + easier to handle errors and insert warnings. + """ + def visitor(self, node): + try: + content = inner_func(self, node) + except DotException as e: + # Insert the exception as a warning in the document + warning = self.document.reporter.warning(str(e), line=node.line) + warning.parent = node + node.children = [warning] + else: + source = self.document.attributes['source'] + self.body.append(content) + node.children = [] + return visitor + +def do_nothing(self, node): + pass + +def setup(app): + setup.app = app + setup.confdir = app.confdir + + app.add_node( + inheritance_diagram, + latex=(visit_inheritance_diagram(latex_output_graph), do_nothing), + html=(visit_inheritance_diagram(html_output_graph), do_nothing)) + app.add_directive( + 'inheritance-diagram', inheritance_diagram_directive, + False, (1, 100, 0), parts = directives.nonnegative_int) diff --git a/doc/sphinxext/numpydoc/ipython_console_highlighting.py b/doc/sphinxext/numpydoc/ipython_console_highlighting.py new file mode 100644 index 00000000..217b779d --- /dev/null +++ b/doc/sphinxext/numpydoc/ipython_console_highlighting.py @@ -0,0 +1,114 @@ +"""reST directive for syntax-highlighting ipython interactive sessions. + +XXX - See what improvements can be made based on the new (as of Sept 2009) +'pycon' lexer for the python console. At the very least it will give better +highlighted tracebacks. +""" + +#----------------------------------------------------------------------------- +# Needed modules + +# Standard library +import re + +# Third party +from pygments.lexer import Lexer, do_insertions +from pygments.lexers.agile import (PythonConsoleLexer, PythonLexer, + PythonTracebackLexer) +from pygments.token import Comment, Generic + +from sphinx import highlighting + +#----------------------------------------------------------------------------- +# Global constants +line_re = re.compile('.*?\n') + +#----------------------------------------------------------------------------- +# Code begins - classes and functions + +class IPythonConsoleLexer(Lexer): + """ + For IPython console output or doctests, such as: + + .. sourcecode:: ipython + + In [1]: a = 'foo' + + In [2]: a + Out[2]: 'foo' + + In [3]: print a + foo + + In [4]: 1 / 0 + + Notes: + + - Tracebacks are not currently supported. + + - It assumes the default IPython prompts, not customized ones. + """ + + name = 'IPython console session' + aliases = ['ipython'] + mimetypes = ['text/x-ipython-console'] + input_prompt = re.compile("(In \[[0-9]+\]: )|( \.\.\.+:)") + output_prompt = re.compile("(Out\[[0-9]+\]: )|( \.\.\.+:)") + continue_prompt = re.compile(" \.\.\.+:") + tb_start = re.compile("\-+") + + def get_tokens_unprocessed(self, text): + pylexer = PythonLexer(**self.options) + tblexer = PythonTracebackLexer(**self.options) + + curcode = '' + insertions = [] + for match in line_re.finditer(text): + line = match.group() + input_prompt = self.input_prompt.match(line) + continue_prompt = self.continue_prompt.match(line.rstrip()) + output_prompt = self.output_prompt.match(line) + if line.startswith("#"): + insertions.append((len(curcode), + [(0, Comment, line)])) + elif input_prompt is not None: + insertions.append((len(curcode), + [(0, Generic.Prompt, input_prompt.group())])) + curcode += line[input_prompt.end():] + elif continue_prompt is not None: + insertions.append((len(curcode), + [(0, Generic.Prompt, continue_prompt.group())])) + curcode += line[continue_prompt.end():] + elif output_prompt is not None: + # Use the 'error' token for output. We should probably make + # our own token, but error is typicaly in a bright color like + # red, so it works fine for our output prompts. + insertions.append((len(curcode), + [(0, Generic.Error, output_prompt.group())])) + curcode += line[output_prompt.end():] + else: + if curcode: + for item in do_insertions(insertions, + pylexer.get_tokens_unprocessed(curcode)): + yield item + curcode = '' + insertions = [] + yield match.start(), Generic.Output, line + if curcode: + for item in do_insertions(insertions, + pylexer.get_tokens_unprocessed(curcode)): + yield item + + +def setup(app): + """Setup as a sphinx extension.""" + + # This is only a lexer, so adding it below to pygments appears sufficient. + # But if somebody knows that the right API usage should be to do that via + # sphinx, by all means fix it here. At least having this setup.py + # suppresses the sphinx warning we'd get without it. + pass + +#----------------------------------------------------------------------------- +# Register the extension as a valid pygments lexer +highlighting.lexers['ipython'] = IPythonConsoleLexer() diff --git a/doc/sphinxext/numpydoc/numpydoc.py b/doc/sphinxext/numpydoc/numpydoc.py new file mode 100644 index 00000000..eea482dc --- /dev/null +++ b/doc/sphinxext/numpydoc/numpydoc.py @@ -0,0 +1,116 @@ +""" +======== +numpydoc +======== + +Sphinx extension that handles docstrings in the Numpy standard format. [1] + +It will: + +- Convert Parameters etc. sections to field lists. +- Convert See Also section to a See also entry. +- Renumber references. +- Extract the signature from the docstring, if it can't be determined otherwise. + +.. [1] http://projects.scipy.org/scipy/numpy/wiki/CodingStyleGuidelines#docstring-standard + +""" + +import os, re, pydoc +from docscrape_sphinx import get_doc_object, SphinxDocString +import inspect + +def mangle_docstrings(app, what, name, obj, options, lines, + reference_offset=[0]): + if what == 'module': + # Strip top title + title_re = re.compile(r'^\s*[#*=]{4,}\n[a-z0-9 -]+\n[#*=]{4,}\s*', + re.I|re.S) + lines[:] = title_re.sub('', "\n".join(lines)).split("\n") + else: + doc = get_doc_object(obj, what, "\n".join(lines)) + lines[:] = str(doc).split("\n") + + if app.config.numpydoc_edit_link and hasattr(obj, '__name__') and \ + obj.__name__: + if hasattr(obj, '__module__'): + v = dict(full_name="%s.%s" % (obj.__module__, obj.__name__)) + else: + v = dict(full_name=obj.__name__) + lines += ['', '.. htmlonly::', ''] + lines += [' %s' % x for x in + (app.config.numpydoc_edit_link % v).split("\n")] + + # replace reference numbers so that there are no duplicates + references = [] + for l in lines: + l = l.strip() + if l.startswith('.. ['): + try: + references.append(int(l[len('.. ['):l.index(']')])) + except ValueError: + print("WARNING: invalid reference in %s docstring" % name) + + # Start renaming from the biggest number, otherwise we may + # overwrite references. + references.sort() + if references: + for i, line in enumerate(lines): + for r in references: + new_r = reference_offset[0] + r + lines[i] = lines[i].replace('[%d]_' % r, + '[%d]_' % new_r) + lines[i] = lines[i].replace('.. [%d]' % r, + '.. [%d]' % new_r) + + reference_offset[0] += len(references) + +def mangle_signature(app, what, name, obj, options, sig, retann): + # Do not try to inspect classes that don't define `__init__` + if (inspect.isclass(obj) and + 'initializes x; see ' in pydoc.getdoc(obj.__init__)): + return '', '' + + if not (callable(obj) or hasattr(obj, '__argspec_is_invalid_')): return + if not hasattr(obj, '__doc__'): return + + doc = SphinxDocString(pydoc.getdoc(obj)) + if doc['Signature']: + sig = re.sub("^[^(]*", "", doc['Signature']) + return sig, '' + +def initialize(app): + try: + app.connect('autodoc-process-signature', mangle_signature) + except: + monkeypatch_sphinx_ext_autodoc() + +def setup(app, get_doc_object_=get_doc_object): + global get_doc_object + get_doc_object = get_doc_object_ + + app.connect('autodoc-process-docstring', mangle_docstrings) + app.connect('builder-inited', initialize) + app.add_config_value('numpydoc_edit_link', None, True) + +#------------------------------------------------------------------------------ +# Monkeypatch sphinx.ext.autodoc to accept argspecless autodocs (Sphinx < 0.5) +#------------------------------------------------------------------------------ + +def monkeypatch_sphinx_ext_autodoc(): + global _original_format_signature + import sphinx.ext.autodoc + + if sphinx.ext.autodoc.format_signature is our_format_signature: + return + + print("[numpydoc] Monkeypatching sphinx.ext.autodoc ...") + _original_format_signature = sphinx.ext.autodoc.format_signature + sphinx.ext.autodoc.format_signature = our_format_signature + +def our_format_signature(what, obj): + r = mangle_signature(None, what, None, obj, None, None, None) + if r is not None: + return r[0] + else: + return _original_format_signature(what, obj) diff --git a/doc/sphinxext/numpydoc/plot_directive.py b/doc/sphinxext/numpydoc/plot_directive.py new file mode 100644 index 00000000..be03c357 --- /dev/null +++ b/doc/sphinxext/numpydoc/plot_directive.py @@ -0,0 +1,773 @@ +""" +A directive for including a matplotlib plot in a Sphinx document. + +By default, in HTML output, `plot` will include a .png file with a +link to a high-res .png and .pdf. In LaTeX output, it will include a +.pdf. + +The source code for the plot may be included in one of three ways: + + 1. **A path to a source file** as the argument to the directive:: + + .. plot:: path/to/plot.py + + When a path to a source file is given, the content of the + directive may optionally contain a caption for the plot:: + + .. plot:: path/to/plot.py + + This is the caption for the plot + + Additionally, one my specify the name of a function to call (with + no arguments) immediately after importing the module:: + + .. plot:: path/to/plot.py plot_function1 + + 2. Included as **inline content** to the directive:: + + .. plot:: + + import matplotlib.pyplot as plt + import matplotlib.image as mpimg + import numpy as np + img = mpimg.imread('_static/stinkbug.png') + imgplot = plt.imshow(img) + + 3. Using **doctest** syntax:: + + .. plot:: + A plotting example: + >>> import matplotlib.pyplot as plt + >>> plt.plot([1,2,3], [4,5,6]) + +Options +------- + +The ``plot`` directive supports the following options: + + format : {'python', 'doctest'} + Specify the format of the input + + include-source : bool + Whether to display the source code. The default can be changed + using the `plot_include_source` variable in conf.py + + encoding : str + If this source file is in a non-UTF8 or non-ASCII encoding, + the encoding must be specified using the `:encoding:` option. + The encoding will not be inferred using the ``-*- coding -*-`` + metacomment. + + context : bool + If provided, the code will be run in the context of all + previous plot directives for which the `:context:` option was + specified. This only applies to inline code plot directives, + not those run from files. + + nofigs : bool + If specified, the code block will be run, but no figures will + be inserted. This is usually useful with the ``:context:`` + option. + +Additionally, this directive supports all of the options of the +`image` directive, except for `target` (since plot will add its own +target). These include `alt`, `height`, `width`, `scale`, `align` and +`class`. + +Configuration options +--------------------- + +The plot directive has the following configuration options: + + plot_include_source + Default value for the include-source option + + plot_pre_code + Code that should be executed before each plot. + + plot_basedir + Base directory, to which ``plot::`` file names are relative + to. (If None or empty, file names are relative to the + directoly where the file containing the directive is.) + + plot_formats + File formats to generate. List of tuples or strings:: + + [(suffix, dpi), suffix, ...] + + that determine the file format and the DPI. For entries whose + DPI was omitted, sensible defaults are chosen. + + plot_html_show_formats + Whether to show links to the files in HTML. + + plot_rcparams + A dictionary containing any non-standard rcParams that should + be applied before each plot. + +""" + +import sys, os, glob, shutil, imp, warnings, io, re, textwrap, \ + traceback, exceptions + +from docutils.parsers.rst import directives +from docutils import nodes +from docutils.parsers.rst.directives.images import Image +align = Image.align +import sphinx + +sphinx_version = sphinx.__version__.split(".") +# The split is necessary for sphinx beta versions where the string is +# '6b1' +sphinx_version = tuple([int(re.split('[a-z]', x)[0]) + for x in sphinx_version[:2]]) + +try: + # Sphinx depends on either Jinja or Jinja2 + import jinja2 + def format_template(template, **kw): + return jinja2.Template(template).render(**kw) +except ImportError: + import jinja + def format_template(template, **kw): + return jinja.from_string(template, **kw) + +import matplotlib +import matplotlib.cbook as cbook +matplotlib.use('Agg') +import matplotlib.pyplot as plt +from matplotlib import _pylab_helpers + +__version__ = 2 + +#------------------------------------------------------------------------------ +# Relative pathnames +#------------------------------------------------------------------------------ + +# os.path.relpath is new in Python 2.6 +try: + from os.path import relpath +except ImportError: + # Copied from Python 2.7 + if 'posix' in sys.builtin_module_names: + def relpath(path, start=os.path.curdir): + """Return a relative version of a path""" + from os.path import sep, curdir, join, abspath, commonprefix, \ + pardir + + if not path: + raise ValueError("no path specified") + + start_list = abspath(start).split(sep) + path_list = abspath(path).split(sep) + + # Work out how much of the filepath is shared by start and path. + i = len(commonprefix([start_list, path_list])) + + rel_list = [pardir] * (len(start_list)-i) + path_list[i:] + if not rel_list: + return curdir + return join(*rel_list) + elif 'nt' in sys.builtin_module_names: + def relpath(path, start=os.path.curdir): + """Return a relative version of a path""" + from os.path import sep, curdir, join, abspath, commonprefix, \ + pardir, splitunc + + if not path: + raise ValueError("no path specified") + start_list = abspath(start).split(sep) + path_list = abspath(path).split(sep) + if start_list[0].lower() != path_list[0].lower(): + unc_path, rest = splitunc(path) + unc_start, rest = splitunc(start) + if bool(unc_path) ^ bool(unc_start): + raise ValueError("Cannot mix UNC and non-UNC paths (%s and %s)" + % (path, start)) + else: + raise ValueError("path is on drive %s, start on drive %s" + % (path_list[0], start_list[0])) + # Work out how much of the filepath is shared by start and path. + for i in range(min(len(start_list), len(path_list))): + if start_list[i].lower() != path_list[i].lower(): + break + else: + i += 1 + + rel_list = [pardir] * (len(start_list)-i) + path_list[i:] + if not rel_list: + return curdir + return join(*rel_list) + else: + raise RuntimeError("Unsupported platform (no relpath available!)") + +#------------------------------------------------------------------------------ +# Registration hook +#------------------------------------------------------------------------------ + +def plot_directive(name, arguments, options, content, lineno, + content_offset, block_text, state, state_machine): + return run(arguments, content, options, state_machine, state, lineno) +plot_directive.__doc__ = __doc__ + +def _option_boolean(arg): + if not arg or not arg.strip(): + # no argument given, assume used as a flag + return True + elif arg.strip().lower() in ('no', '0', 'false'): + return False + elif arg.strip().lower() in ('yes', '1', 'true'): + return True + else: + raise ValueError('"%s" unknown boolean' % arg) + +def _option_format(arg): + return directives.choice(arg, ('python', 'doctest')) + +def _option_align(arg): + return directives.choice(arg, ("top", "middle", "bottom", "left", "center", + "right")) + +def mark_plot_labels(app, document): + """ + To make plots referenceable, we need to move the reference from + the "htmlonly" (or "latexonly") node to the actual figure node + itself. + """ + for name, explicit in document.nametypes.items(): + if not explicit: + continue + labelid = document.nameids[name] + if labelid is None: + continue + node = document.ids[labelid] + if node.tagname in ('html_only', 'latex_only'): + for n in node: + if n.tagname == 'figure': + sectname = name + for c in n: + if c.tagname == 'caption': + sectname = c.astext() + break + + node['ids'].remove(labelid) + node['names'].remove(name) + n['ids'].append(labelid) + n['names'].append(name) + document.settings.env.labels[name] = \ + document.settings.env.docname, labelid, sectname + break + +def setup(app): + setup.app = app + setup.config = app.config + setup.confdir = app.confdir + + options = {'alt': directives.unchanged, + 'height': directives.length_or_unitless, + 'width': directives.length_or_percentage_or_unitless, + 'scale': directives.nonnegative_int, + 'align': _option_align, + 'class': directives.class_option, + 'include-source': _option_boolean, + 'format': _option_format, + 'context': directives.flag, + 'nofigs': directives.flag, + 'encoding': directives.encoding + } + + app.add_directive('plot', plot_directive, True, (0, 2, False), **options) + app.add_config_value('plot_pre_code', None, True) + app.add_config_value('plot_include_source', False, True) + app.add_config_value('plot_formats', ['png', 'hires.png', 'pdf'], True) + app.add_config_value('plot_basedir', None, True) + app.add_config_value('plot_html_show_formats', True, True) + app.add_config_value('plot_rcparams', {}, True) + + app.connect('doctree-read', mark_plot_labels) + +#------------------------------------------------------------------------------ +# Doctest handling +#------------------------------------------------------------------------------ + +def contains_doctest(text): + try: + # check if it's valid Python as-is + compile(text, '', 'exec') + return False + except SyntaxError: + pass + r = re.compile(r'^\s*>>>', re.M) + m = r.search(text) + return bool(m) + +def unescape_doctest(text): + """ + Extract code from a piece of text, which contains either Python code + or doctests. + + """ + if not contains_doctest(text): + return text + + code = "" + for line in text.split("\n"): + m = re.match(r'^\s*(>>>|\.\.\.) (.*)$', line) + if m: + code += m.group(2) + "\n" + elif line.strip(): + code += "# " + line.strip() + "\n" + else: + code += "\n" + return code + +def split_code_at_show(text): + """ + Split code at plt.show() + + """ + + parts = [] + is_doctest = contains_doctest(text) + + part = [] + for line in text.split("\n"): + if (not is_doctest and line.strip() == 'plt.show()') or \ + (is_doctest and line.strip() == '>>> plt.show()'): + part.append(line) + parts.append("\n".join(part)) + part = [] + else: + part.append(line) + if "\n".join(part).strip(): + parts.append("\n".join(part)) + return parts + +#------------------------------------------------------------------------------ +# Template +#------------------------------------------------------------------------------ + + +TEMPLATE = """ +{{ source_code }} + +{{ only_html }} + + {% if source_link or (html_show_formats and not multi_image) %} + ( + {%- if source_link -%} + `Source code <{{ source_link }}>`__ + {%- endif -%} + {%- if html_show_formats and not multi_image -%} + {%- for img in images -%} + {%- for fmt in img.formats -%} + {%- if source_link or not loop.first -%}, {% endif -%} + `{{ fmt }} <{{ dest_dir }}/{{ img.basename }}.{{ fmt }}>`__ + {%- endfor -%} + {%- endfor -%} + {%- endif -%} + ) + {% endif %} + + {% for img in images %} + .. figure:: {{ build_dir }}/{{ img.basename }}.png + {%- for option in options %} + {{ option }} + {% endfor %} + + {% if html_show_formats and multi_image -%} + ( + {%- for fmt in img.formats -%} + {%- if not loop.first -%}, {% endif -%} + `{{ fmt }} <{{ dest_dir }}/{{ img.basename }}.{{ fmt }}>`__ + {%- endfor -%} + ) + {%- endif -%} + + {{ caption }} + {% endfor %} + +{{ only_latex }} + + {% for img in images %} + .. image:: {{ build_dir }}/{{ img.basename }}.pdf + {% endfor %} + +""" + +exception_template = """ +.. htmlonly:: + + [`source code <%(linkdir)s/%(basename)s.py>`__] + +Exception occurred rendering plot. + +""" + +# the context of the plot for all directives specified with the +# :context: option +plot_context = dict() + +class ImageFile: + def __init__(self, basename, dirname): + self.basename = basename + self.dirname = dirname + self.formats = [] + + def filename(self, format): + return os.path.join(self.dirname, "%s.%s" % (self.basename, format)) + + def filenames(self): + return [self.filename(fmt) for fmt in self.formats] + +def out_of_date(original, derived): + """ + Returns True if derivative is out-of-date wrt original, + both of which are full file paths. + """ + return (not os.path.exists(derived) or + (os.path.exists(original) and + os.stat(derived).st_mtime < os.stat(original).st_mtime)) + +class PlotError(RuntimeError): + pass + +def run_code(code, code_path, ns=None, function_name=None): + """ + Import a Python module from a path, and run the function given by + name, if function_name is not None. + """ + + # Change the working directory to the directory of the example, so + # it can get at its data files, if any. Add its path to sys.path + # so it can import any helper modules sitting beside it. + + pwd = os.getcwd() + old_sys_path = list(sys.path) + if code_path is not None: + dirname = os.path.abspath(os.path.dirname(code_path)) + os.chdir(dirname) + sys.path.insert(0, dirname) + + # Redirect stdout + stdout = sys.stdout + sys.stdout = io.StringIO() + + # Reset sys.argv + old_sys_argv = sys.argv + sys.argv = [code_path] + + try: + try: + code = unescape_doctest(code) + if ns is None: + ns = {} + if not ns: + if setup.config.plot_pre_code is None: + exec("import numpy as np\nfrom matplotlib import pyplot as plt\n", ns) + else: + exec(setup.config.plot_pre_code, ns) + if "__main__" in code: + exec("__name__ = '__main__'", ns) + exec(code, ns) + if function_name is not None: + exec(function_name + "()", ns) + except (Exception, SystemExit) as err: + raise PlotError(traceback.format_exc()) + finally: + os.chdir(pwd) + sys.argv = old_sys_argv + sys.path[:] = old_sys_path + sys.stdout = stdout + return ns + +def clear_state(plot_rcparams): + plt.close('all') + matplotlib.rc_file_defaults() + matplotlib.rcParams.update(plot_rcparams) + +def render_figures(code, code_path, output_dir, output_base, context, + function_name, config): + """ + Run a pyplot script and save the low and high res PNGs and a PDF + in outdir. + + Save the images under *output_dir* with file names derived from + *output_base* + """ + # -- Parse format list + default_dpi = {'png': 80, 'hires.png': 200, 'pdf': 200} + formats = [] + plot_formats = config.plot_formats + if isinstance(plot_formats, str): + plot_formats = eval(plot_formats) + for fmt in plot_formats: + if isinstance(fmt, str): + formats.append((fmt, default_dpi.get(fmt, 80))) + elif type(fmt) in (tuple, list) and len(fmt)==2: + formats.append((str(fmt[0]), int(fmt[1]))) + else: + raise PlotError('invalid image format "%r" in plot_formats' % fmt) + + # -- Try to determine if all images already exist + + code_pieces = split_code_at_show(code) + + # Look for single-figure output files first + # Look for single-figure output files first + all_exists = True + img = ImageFile(output_base, output_dir) + for format, dpi in formats: + if out_of_date(code_path, img.filename(format)): + all_exists = False + break + img.formats.append(format) + + if all_exists: + return [(code, [img])] + + # Then look for multi-figure output files + results = [] + all_exists = True + for i, code_piece in enumerate(code_pieces): + images = [] + for j in range(1000): + if len(code_pieces) > 1: + img = ImageFile('%s_%02d_%02d' % (output_base, i, j), output_dir) + else: + img = ImageFile('%s_%02d' % (output_base, j), output_dir) + for format, dpi in formats: + if out_of_date(code_path, img.filename(format)): + all_exists = False + break + img.formats.append(format) + + # assume that if we have one, we have them all + if not all_exists: + all_exists = (j > 0) + break + images.append(img) + if not all_exists: + break + results.append((code_piece, images)) + + if all_exists: + return results + + # We didn't find the files, so build them + + results = [] + if context: + ns = plot_context + else: + ns = {} + + for i, code_piece in enumerate(code_pieces): + if not context: + clear_state(config.plot_rcparams) + run_code(code_piece, code_path, ns, function_name) + + images = [] + fig_managers = _pylab_helpers.Gcf.get_all_fig_managers() + for j, figman in enumerate(fig_managers): + if len(fig_managers) == 1 and len(code_pieces) == 1: + img = ImageFile(output_base, output_dir) + elif len(code_pieces) == 1: + img = ImageFile("%s_%02d" % (output_base, j), output_dir) + else: + img = ImageFile("%s_%02d_%02d" % (output_base, i, j), + output_dir) + images.append(img) + for format, dpi in formats: + try: + figman.canvas.figure.savefig(img.filename(format), dpi=dpi) + except Exception as err: + raise PlotError(traceback.format_exc()) + img.formats.append(format) + + results.append((code_piece, images)) + + if not context: + clear_state(config.plot_rcparams) + + return results + +def run(arguments, content, options, state_machine, state, lineno): + # The user may provide a filename *or* Python code content, but not both + if arguments and content: + raise RuntimeError("plot:: directive can't have both args and content") + + document = state_machine.document + config = document.settings.env.config + nofigs = 'nofigs' in options + + options.setdefault('include-source', config.plot_include_source) + context = 'context' in options + + rst_file = document.attributes['source'] + rst_dir = os.path.dirname(rst_file) + + if len(arguments): + if not config.plot_basedir: + source_file_name = os.path.join(setup.app.builder.srcdir, + directives.uri(arguments[0])) + else: + source_file_name = os.path.join(setup.app.builder.srcdir, config.plot_basedir, + directives.uri(arguments[0])) + + # If there is content, it will be passed as a caption. + caption = '\n'.join(content) + + # If the optional function name is provided, use it + if len(arguments) == 2: + function_name = arguments[1] + else: + function_name = None + + fd = open(source_file_name, 'r') + code = fd.read() + fd.close() + output_base = os.path.basename(source_file_name) + else: + source_file_name = rst_file + code = textwrap.dedent("\n".join(map(str, content))) + counter = document.attributes.get('_plot_counter', 0) + 1 + document.attributes['_plot_counter'] = counter + base, ext = os.path.splitext(os.path.basename(source_file_name)) + output_base = '%s-%d.py' % (base, counter) + function_name = None + caption = '' + + base, source_ext = os.path.splitext(output_base) + if source_ext in ('.py', '.rst', '.txt'): + output_base = base + else: + source_ext = '' + + # ensure that LaTeX includegraphics doesn't choke in foo.bar.pdf filenames + output_base = output_base.replace('.', '-') + + # is it in doctest format? + is_doctest = contains_doctest(code) + if 'format' in options: + if options['format'] == 'python': + is_doctest = False + else: + is_doctest = True + + # determine output directory name fragment + source_rel_name = relpath(source_file_name, setup.app.srcdir) + source_rel_dir = os.path.dirname(source_rel_name) + while source_rel_dir.startswith(os.path.sep): + source_rel_dir = source_rel_dir[1:] + + # build_dir: where to place output files (temporarily) + build_dir = os.path.join(os.path.dirname(setup.app.doctreedir), + 'plot_directive', + source_rel_dir) + # get rid of .. in paths, also changes pathsep + # see note in Python docs for warning about symbolic links on Windows. + # need to compare source and dest paths at end + build_dir = os.path.normpath(build_dir) + + if not os.path.exists(build_dir): + os.makedirs(build_dir) + + # output_dir: final location in the builder's directory + dest_dir = os.path.abspath(os.path.join(setup.app.builder.outdir, + source_rel_dir)) + if not os.path.exists(dest_dir): + os.makedirs(dest_dir) # no problem here for me, but just use built-ins + + # how to link to files from the RST file + dest_dir_link = os.path.join(relpath(setup.app.srcdir, rst_dir), + source_rel_dir).replace(os.path.sep, '/') + build_dir_link = relpath(build_dir, rst_dir).replace(os.path.sep, '/') + source_link = dest_dir_link + '/' + output_base + source_ext + + # make figures + try: + results = render_figures(code, source_file_name, build_dir, output_base, + context, function_name, config) + errors = [] + except PlotError as err: + reporter = state.memo.reporter + sm = reporter.system_message( + 2, "Exception occurred in plotting %s\n from %s:\n%s" % (output_base, + source_file_name, err), + line=lineno) + results = [(code, [])] + errors = [sm] + + # Properly indent the caption + caption = '\n'.join(' ' + line.strip() + for line in caption.split('\n')) + + # generate output restructuredtext + total_lines = [] + for j, (code_piece, images) in enumerate(results): + if options['include-source']: + if is_doctest: + lines = [''] + lines += [row.rstrip() for row in code_piece.split('\n')] + else: + lines = ['.. code-block:: python', ''] + lines += [' %s' % row.rstrip() + for row in code_piece.split('\n')] + source_code = "\n".join(lines) + else: + source_code = "" + + if nofigs: + images = [] + + opts = [':%s: %s' % (key, val) for key, val in list(options.items()) + if key in ('alt', 'height', 'width', 'scale', 'align', 'class')] + + only_html = ".. only:: html" + only_latex = ".. only:: latex" + + if j == 0: + src_link = source_link + else: + src_link = None + + result = format_template( + TEMPLATE, + dest_dir=dest_dir_link, + build_dir=build_dir_link, + source_link=src_link, + multi_image=len(images) > 1, + only_html=only_html, + only_latex=only_latex, + options=opts, + images=images, + source_code=source_code, + html_show_formats=config.plot_html_show_formats, + caption=caption) + + total_lines.extend(result.split("\n")) + total_lines.extend("\n") + + if total_lines: + state_machine.insert_input(total_lines, source=source_file_name) + + # copy image files to builder's output directory, if necessary + if not os.path.exists(dest_dir): + cbook.mkdirs(dest_dir) + + for code_piece, images in results: + for img in images: + for fn in img.filenames(): + destimg = os.path.join(dest_dir, os.path.basename(fn)) + if fn != destimg: + shutil.copyfile(fn, destimg) + + # copy script (if necessary) + #if source_file_name == rst_file: + target_name = os.path.join(dest_dir, output_base + source_ext) + f = open(target_name, 'w') + f.write(unescape_doctest(code)) + f.close() + + return errors diff --git a/doc/sphinxext/triqs_example/triqs_example.py b/doc/sphinxext/triqs_example/triqs_example.py new file mode 100644 index 00000000..2c90ac4c --- /dev/null +++ b/doc/sphinxext/triqs_example/triqs_example.py @@ -0,0 +1,123 @@ +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/agogo/layout.html b/doc/themes/agogo/layout.html new file mode 100644 index 00000000..869d76ad --- /dev/null +++ b/doc/themes/agogo/layout.html @@ -0,0 +1,92 @@ +{# + agogo/layout.html + ~~~~~~~~~~~~~~~~~ + + Sphinx layout template for the agogo theme, originally written + by Andi Albrecht. + + :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + :license: BSD, see LICENSE for details. +#} +{% extends "basic/layout.html" %} + +{% block header %} +
+
+ {%- if logo %} + + {%- endif %} + {%- block headertitle %} +

{{ shorttitle|e }}

+ {%- endblock %} +
+ HOME | + {%- for rellink in rellinks %} + {{ rellink[3] }} + {%- if not loop.last %}{{ reldelim2 }}{% endif %} + {%- endfor %} +
+
+
+{% endblock %} + +{% block content %} +
+
+
+ {%- block document %} + {{ super() }} + {%- endblock %} +
+ +
+
+
+{% endblock %} + +{% block footer %} + +{% endblock %} + +{% block relbar1 %}{% endblock %} +{% block relbar2 %}{% endblock %} diff --git a/doc/themes/agogo/static/agogo.css_t b/doc/themes/agogo/static/agogo.css_t new file mode 100644 index 00000000..5e4b0c66 --- /dev/null +++ b/doc/themes/agogo/static/agogo.css_t @@ -0,0 +1,519 @@ +/* + * agogo.css_t + * ~~~~~~~~~~~ + * + * Sphinx stylesheet -- agogo theme. + * + * :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS. + * :license: BSD, see LICENSE for details. + * + */ + +* { + margin: 0px; + padding: 0px; +} + +body { + font-family: {{ theme_bodyfont }}; + font-size: 100%; // TRIQS + line-height: 1.0em; // TRIQS + color: black; + background-color: {{ theme_bgcolor }}; +} + + +/* Page layout */ + +div.header, div.content, div.footer { + width: {{ theme_pagewidth }}; + margin-left: auto; + margin-right: auto; +} + +div.header-wrapper { + background: {{ theme_headerbg }}; + border-bottom: 3px solid #2e3436; +} + + +/* Default body styles */ +a { + color: {{ theme_linkcolor }}; +} + +div.bodywrapper a, div.footer a { + text-decoration: none; // TRIQS +} + +div.bodywrapper a:hover, div.footer a:hover { + text-decoration: underline; // TRIQS +} + +.clearer { + clear: both; +} + +.left { + float: left; +} + +.right { + float: right; +} + +.line-block { + display: block; + margin-top: 1em; + margin-bottom: 1em; +} + +.line-block .line-block { + margin-top: 0; + margin-bottom: 0; + margin-left: 1.5em; +} + +h1, h2, h3, h4 { + font-family: {{ theme_headerfont }}; + font-weight: normal; + color: {{ theme_headercolor2 }}; + margin-bottom: .8em; +} + +h1 { + color: {{ theme_headercolor1 }}; +} + +h2 { + padding-bottom: .5em; + border-bottom: 1px solid {{ theme_headercolor2 }}; +} + +a.headerlink { + visibility: hidden; + color: #dddddd; + padding-left: .3em; +} + +h1:hover > a.headerlink, +h2:hover > a.headerlink, +h3:hover > a.headerlink, +h4:hover > a.headerlink, +h5:hover > a.headerlink, +h6:hover > a.headerlink, +dt:hover > a.headerlink { + visibility: visible; +} + +img { + border: 0; +} + +div.admonition { + margin-top: 10px; + margin-bottom: 10px; + padding: 2px 7px 1px 7px; + border-left: 0.2em solid black; +} + +p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; + color: red; // TRIQS +} + +dt:target, .highlighted { + background-color: #fbe54e; +} + +/* Header */ + +div.header { + padding-top: 10px; + padding-bottom: 10px; +} + +div.header h1 { + font-family: {{ theme_headerfont }}; + font-weight: normal; + font-size: 180%; + letter-spacing: .08em; +} + +div.header h1 a { + color: white; +} + +div.header div.rel { + margin-top: -1em; // TRIQS +} + +div.header div.rel a { + color: {{ theme_headerlinkcolor }}; + letter-spacing: .1em; + text-transform: uppercase; +} + +p.logo { + float: right; +} + +img.logo { + border: 0; +} + + +/* Content */ +div.content-wrapper { + background-color: white; + padding-top: 20px; + padding-bottom: 20px; +} + +div.document { + width: {{ theme_documentwidth }}; + float: left; +} + +div.body { + padding-right: 2em; + text-align: {{ theme_textalign }}; +} + +div.document ul { + margin: 1.5em; + list-style-type: square; +} + +div.document dd { + margin-left: 1.2em; + margin-top: .4em; + margin-bottom: 1em; +} + +div.document .section { + margin-top: 1.7em; +} +div.document .section:first-child { + margin-top: 0px; +} + +div.document div.highlight { + line-height: 1.0em; // TRIQS + padding: 3px; + background-color: #eeeeec; + border-top: 2px solid #dddddd; + border-bottom: 2px solid #dddddd; + margin-top: .8em; + margin-bottom: .8em; +} + +div.document h2 { + margin-top: .7em; +} + +div.document p { + margin-bottom: .5em; +} + +div.document li.toctree-l1 { + margin-bottom: 0em; // TRIQS +} +div.document li.toctree-l2 { + margin-bottom: 0em; // TRIQS +} + +div.document .descname { + font-weight: bold; + color: blue; // TRIQS +} + +div.document .docutils.literal { + background-color: #eeeeec; + padding: 1px; +} + +div.document .docutils.xref.literal { + background-color: transparent; + padding: 0px; +} + +div.document blockquote { + margin: 1em; +} + +div.document ol { + margin: 1.5em; +} + + +/* Sidebar */ + +div.sidebar { + width: {{ theme_sidebarwidth }}; + float: right; + font-size: .9em; +} + +div.sidebar a, div.header a { + text-decoration: none; +} + +div.sidebar a:hover, div.header a:hover { + text-decoration: underline; +} + +div.sidebar h3 { + color: #2e3436; + text-transform: uppercase; + font-size: 130%; + letter-spacing: .1em; +} + +div.sidebar ul { + list-style-type: none; +} + +div.sidebar li.toctree-l1 a { + display: block; + padding: 1px; + border: 1px solid #dddddd; + background-color: #eeeeec; + margin-bottom: .4em; + padding-left: 3px; + color: #2e3436; +} + +div.sidebar li.toctree-l2 a { + background-color: transparent; + border: none; + margin-left: 1em; + border-bottom: 1px solid #dddddd; +} + +div.sidebar li.toctree-l3 a { + background-color: transparent; + border: none; + margin-left: 2em; + border-bottom: 1px solid #dddddd; +} + +div.sidebar li.toctree-l2:last-child a { + border-bottom: none; +} + +div.sidebar li.toctree-l1.current a { + border-right: 5px solid {{ theme_headerlinkcolor }}; +} + +div.sidebar li.toctree-l1.current li.toctree-l2 a { + border-right: none; +} + + +/* Footer */ + +div.footer-wrapper { + background: {{ theme_footerbg }}; + border-top: 4px solid #babdb6; + padding-top: 10px; + padding-bottom: 10px; + min-height: 80px; +} + +div.footer, div.footer a { + color: #888a85; +} + +div.footer .right { + text-align: right; +} + +div.footer .left { + text-transform: uppercase; +} + + +/* Styles copied from basic theme */ + +/* -- search page ----------------------------------------------------------- */ + +ul.search { + margin: 10px 0 0 20px; + padding: 0; +} + +ul.search li { + padding: 5px 0 5px 20px; + background-image: url(file.png); + background-repeat: no-repeat; + background-position: 0 7px; +} + +ul.search li a { + font-weight: bold; +} + +ul.search li div.context { + color: #888; + margin: 2px 0 0 30px; + text-align: left; +} + +ul.keywordmatches li.goodmatch a { + font-weight: bold; +} + +/* -- index page ------------------------------------------------------------ */ + +table.contentstable { + width: 100%; +} + +table.contentstable td { + padding: 10px 10px 10px 0; +} + +table.contentstable p.biglink { + line-height: 150%; + text-align: left; +} + +a.biglink { + font-size: 1.3em; +} + +span.linkdescr { + font-style: italic; + padding-top: 5px; + font-size: 90%; +} + +/* -- general index --------------------------------------------------------- */ + +table.indextable td { + text-align: left; + vertical-align: top; +} + +table.indextable dl, table.indextable dd { + margin-top: 0; + margin-bottom: 0; +} + +table.indextable tr.pcap { + height: 10px; +} + +table.indextable tr.cap { + margin-top: 10px; + background-color: #f2f2f2; +} + +img.toggler { + margin-right: 3px; + margin-top: 3px; + cursor: pointer; +} + +/* -- viewcode extension ---------------------------------------------------- */ + +.viewcode-link { + float: right; +} + +.viewcode-back { + float: right; + font-family:: {{ theme_bodyfont }}; +} + +div.viewcode-block:target { + margin: -1px -3px; + padding: 0 3px; + background-color: #f4debf; + border-top: 1px solid #ac9; + border-bottom: 1px solid #ac9; +} + +/* -- added for TRIQS ------------------------------------------------------- */ + +div.warning { + margin: 1em 0 1em 0; + border: 1px solid #86989B; + background-color: lightpink; //#f7f7f7; +} + +div.note { + margin: 1em 0 1em 0; + border: 1px solid #86989B; + background-color: lightcyan; //#f7f7f7; +} + +div.note p.admonition-title { + margin: 0px 10px 5px 0px; + font-weight: bold; + color : blue; +} + +div.highlight-python { + margin-top : 5px; + margin-bottom : 7px; + background-color: lightcyan; //#f4debf; +} + +/* -- math display ---------------------------------------------------------- */ + +img.math { + vertical-align: middle; +} + +div.body div.math p { + text-align: center; +} + +span.eqno { + float: right; +} + +/* -- tables ---------------------------------------------------------------- */ + +table.docutils { + border: 0; + border-collapse: collapse; +} + +table.docutils head { + color : blue; +} + +table.docutils td, table.docutils th { + padding: 1px 8px 1px 5px; + border-top: 0; + border-left: 0; + border-right: 0; + border-bottom: 1px solid #aaa; +} + +table.field-list td, table.field-list th { + border: 0 !important; +} + +table.footnote td, table.footnote th { + border: 0 !important; +} + +th { + text-align: left; + padding-right: 5px; +} + +table.citation { + border-left: solid 1px gray; + margin-left: 1px; +} + +table.citation td { + border-bottom: none; +} + diff --git a/doc/themes/agogo/theme.conf b/doc/themes/agogo/theme.conf new file mode 100644 index 00000000..e2108d96 --- /dev/null +++ b/doc/themes/agogo/theme.conf @@ -0,0 +1,20 @@ +[theme] +inherit = basic +stylesheet = agogo.css +pygments_style = tango + +[options] +bodyfont = "Verdana", Arial, sans-serif +headerfont = "Georgia", "Times New Roman", serif +pagewidth = 80% +documentwidth = 75% +sidebarwidth = 22.5% +bgcolor = #eeeeec +headerbg = url(bgtop.png) top left repeat-x +footerbg = url(bgfooter.png) top left repeat-x +linkcolor = #ce5c00 +headercolor1 = #204a87 +headercolor2 = #3465a4 +headerlinkcolor = #fcaf3e +textalign = justify +index = index diff --git a/doc/themes/triqs/layout.html b/doc/themes/triqs/layout.html new file mode 100644 index 00000000..0275e11a --- /dev/null +++ b/doc/themes/triqs/layout.html @@ -0,0 +1,52 @@ +{# + 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/cufon-yui.js b/doc/themes/triqs/static/cufon-yui.js new file mode 100644 index 00000000..935614e1 --- /dev/null +++ b/doc/themes/triqs/static/cufon-yui.js @@ -0,0 +1,7 @@ +/* + * 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 new file mode 100644 index 00000000..e183cb21 --- /dev/null +++ b/doc/themes/triqs/static/triqs.css @@ -0,0 +1,449 @@ +/* + * 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 new file mode 100644 index 00000000..96ca439a --- /dev/null +++ b/doc/themes/triqs/theme.conf @@ -0,0 +1,4 @@ +[theme] +inherit = basic +stylesheet = triqs.css +pygments_style = sphinx diff --git a/fortran/dmftproj/CMakeLists.txt b/fortran/dmftproj/CMakeLists.txt index 7e646998..a3d627ef 100644 --- a/fortran/dmftproj/CMakeLists.txt +++ b/fortran/dmftproj/CMakeLists.txt @@ -6,8 +6,7 @@ set(SOURCES modules.f dmftproj.f readcomline.f set_ang_trans.f setsym.f # The main target and what to link with... add_executable(dmftproj ${SOURCES}) -find_package(LAPACK) -target_link_libraries(dmftproj ${LAPACK_LIBRARIES}) +target_link_libraries(dmftproj triqs::blas_lapack) # where to install install (TARGETS dmftproj DESTINATION bin) @@ -17,7 +16,7 @@ SET(D ${CMAKE_CURRENT_SOURCE_DIR}/SRC_templates/) SET(WIEN_SRC_TEMPL_FILES ${D}/case.cf_f_mm2 ${D}/case.cf_p_cubic ${D}/case.indmftpr ${D}/run_triqs ${D}/runsp_triqs) message(STATUS "-----------------------------------------------------------------------------") message(STATUS " ******** WARNING ******** ") -message(STATUS " Wien2k 14.2 and older : after installation of TRIQS, copy the files from ") +message(STATUS " Wien2k 14.2 and older : after installation of DFTTools, copy the files from ") message(STATUS " ${CMAKE_INSTALL_PREFIX}/share/triqs/Wien2k_SRC_files/SRC_templates ") message(STATUS " to your Wien2k installation WIENROOT/SRC_templates (Cf documentation). ") message(STATUS " For newer versions these files are already shipped with Wien2k. ") diff --git a/python/CMakeLists.txt b/python/CMakeLists.txt deleted file mode 100644 index 2ad35566..00000000 --- a/python/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -# where will the python end up in triqs? -set(PYTHON_LIB_DEST ${CPP2PY_PYTHON_LIB_DEST_ROOT}/triqs_dft_tools) - -# site_customize for build -set(package_name "triqs_dft_tools") - -# Create a temporary copy of the python modules so that we can run before installation with the test -FILE(GLOB PYTHON_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py ) -foreach(f ${PYTHON_SOURCES}) - configure_file(${f} ${f} COPYONLY) -endforeach() - -# add version file -configure_file(version.py.in version.py @ONLY) - -# install files -install(FILES ${PYTHON_SOURCES} ${CMAKE_CURRENT_BINARY_DIR}/version.py DESTINATION ${PYTHON_LIB_DEST}) - -add_subdirectory(converters) diff --git a/python/converters/.gitignore b/python/converters/.gitignore deleted file mode 100644 index 0d20b648..00000000 --- a/python/converters/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.pyc diff --git a/python/converters/CMakeLists.txt b/python/converters/CMakeLists.txt deleted file mode 100644 index 3c719f26..00000000 --- a/python/converters/CMakeLists.txt +++ /dev/null @@ -1,10 +0,0 @@ -# Create a temporary copy of the python modules so that we can run before installation with the test -FILE(GLOB PYTHON_SOURCES RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py) -foreach(f ${PYTHON_SOURCES}) - configure_file(${f} ${f} COPYONLY) -endforeach() - -# install files -install(FILES ${PYTHON_SOURCES} DESTINATION ${PYTHON_LIB_DEST}/converters) - -add_subdirectory(plovasp) diff --git a/python/converters/plovasp/CMakeLists.txt b/python/converters/plovasp/CMakeLists.txt deleted file mode 100644 index 9f2fbdaa..00000000 --- a/python/converters/plovasp/CMakeLists.txt +++ /dev/null @@ -1,19 +0,0 @@ -# === Build and install atm module -add_cpp2py_module(atm) -target_link_libraries(atm atm_c triqs) -target_compile_options(atm PRIVATE -std=c++17) -target_include_directories(atm PRIVATE ${CMAKE_SOURCE_DIR}/c++) - -install(TARGETS atm DESTINATION ${PYTHON_LIB_DEST}/converters/plovasp) - -# === Copy Python files to current build directory and register for install -set(PYTHON_SOURCES __init__.py converter.py elstruct.py inpconf.py plotools.py proj_group.py proj_shell.py sc_dmft.py vaspio.py) -foreach(f ${PYTHON_SOURCES}) - configure_file(${f} ${f} COPYONLY) -endforeach() - -# install files -install(FILES ${PYTHON_SOURCES} DESTINATION ${PYTHON_LIB_DEST}/converters/plovasp) - -# This we need in order for tests to work -#add_custom_command(TARGET atm POST_BUILD COMMAND ln -fs ${CMAKE_CURRENT_BINARY_DIR}/${CMAKE_PROJECT_NAME}/atm.so ${CMAKE_BINARY_DIR}/python/dft/converters/plovasp) diff --git a/python/triqs_dft_tools/CMakeLists.txt b/python/triqs_dft_tools/CMakeLists.txt new file mode 100644 index 00000000..5de94b6a --- /dev/null +++ b/python/triqs_dft_tools/CMakeLists.txt @@ -0,0 +1,25 @@ +# Configure the version +configure_file(version.py.in version.py) + +# All Python files. Copy them in the build dir to have a complete package for the tests. +file(GLOB_RECURSE python_sources RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py) +file(GLOB_RECURSE wrap_generators RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *_desc.py) +list(REMOVE_ITEM python_sources "${wrap_generators}") +foreach(file ${python_sources}) + configure_file(${file} ${file} COPYONLY) +endforeach() + +# Build any python modules +foreach(gen ${wrap_generators}) + string(REPLACE "_desc.py" "" gen ${gen}) + get_filename_component(module_name ${gen} NAME_WE) + get_filename_component(module_dir ${gen} DIRECTORY) + add_cpp2py_module(NAME ${module_name} DIRECTORY ${module_dir}) + target_link_libraries(${module_name} ${PROJECT_NAME}_c triqs_py) +endforeach() + +# Install python modules to proper location +set(PYTHON_LIB_DEST ${TRIQS_PYTHON_LIB_DEST_ROOT}/${PROJECT_NAME}) +get_property(CPP2PY_MODULES_LIST GLOBAL PROPERTY CPP2PY_MODULES_LIST) +install(TARGETS ${CPP2PY_MODULES_LIST} DESTINATION ${PYTHON_LIB_DEST}) +install(FILES ${python_sources} ${CMAKE_CURRENT_BINARY_DIR}/version.py DESTINATION ${PYTHON_LIB_DEST}) diff --git a/python/__init__.py b/python/triqs_dft_tools/__init__.py similarity index 100% rename from python/__init__.py rename to python/triqs_dft_tools/__init__.py diff --git a/python/block_structure.py b/python/triqs_dft_tools/block_structure.py similarity index 100% rename from python/block_structure.py rename to python/triqs_dft_tools/block_structure.py diff --git a/python/clear_h5_output.py b/python/triqs_dft_tools/clear_h5_output.py similarity index 100% rename from python/clear_h5_output.py rename to python/triqs_dft_tools/clear_h5_output.py diff --git a/python/converters/__init__.py b/python/triqs_dft_tools/converters/__init__.py similarity index 100% rename from python/converters/__init__.py rename to python/triqs_dft_tools/converters/__init__.py diff --git a/python/converters/converter_tools.py b/python/triqs_dft_tools/converters/converter_tools.py similarity index 100% rename from python/converters/converter_tools.py rename to python/triqs_dft_tools/converters/converter_tools.py diff --git a/python/converters/hk_converter.py b/python/triqs_dft_tools/converters/hk_converter.py similarity index 100% rename from python/converters/hk_converter.py rename to python/triqs_dft_tools/converters/hk_converter.py diff --git a/python/converters/plovasp/.gitignore b/python/triqs_dft_tools/converters/plovasp/.gitignore similarity index 100% rename from python/converters/plovasp/.gitignore rename to python/triqs_dft_tools/converters/plovasp/.gitignore diff --git a/python/converters/plovasp/__init__.py b/python/triqs_dft_tools/converters/plovasp/__init__.py similarity index 100% rename from python/converters/plovasp/__init__.py rename to python/triqs_dft_tools/converters/plovasp/__init__.py diff --git a/python/converters/plovasp/atm_desc.py b/python/triqs_dft_tools/converters/plovasp/atm_desc.py similarity index 82% rename from python/converters/plovasp/atm_desc.py rename to python/triqs_dft_tools/converters/plovasp/atm_desc.py index 55ff109a..383a98d9 100644 --- a/python/converters/plovasp/atm_desc.py +++ b/python/triqs_dft_tools/converters/plovasp/atm_desc.py @@ -1,5 +1,5 @@ # Generated automatically using the command : -# c++2py.py -m atm -o atm --moduledoc "Analytical Tetrahedron Method for DOS" ../../../c++/plovasp/atm/dos_tetra3d.hpp +# c++2py.py -m atm -o atm --moduledoc "Analytical Tetrahedron Method for DOS" ../../../../c++/triqs_dft_tools/converters/vasp/dos_tetra3d.hpp from cpp2py.wrap_generator import * # The module @@ -8,11 +8,12 @@ module = module_(full_name = "atm", doc = "Analytical Tetrahedron Method for cal # All the triqs C++/Python modules # Add here all includes beyond what is automatically included by the triqs modules -module.add_include("plovasp/atm/dos_tetra3d.hpp") +module.add_include("triqs_dft_tools/converters/vasp/dos_tetra3d.hpp") # Add here anything to add in the C++ code at the start, e.g. namespace using module.add_preamble(""" #include +using namespace triqs::arrays; """) module.add_function ("array dos_tetra_weights_3d (array_view eigk, double en, array_view itt)", doc = """DOS of a band by analytical tetrahedron method\n\n Returns corner weights for all tetrahedra for a given band and real energy.""") diff --git a/python/converters/plovasp/converter.py b/python/triqs_dft_tools/converters/plovasp/converter.py similarity index 100% rename from python/converters/plovasp/converter.py rename to python/triqs_dft_tools/converters/plovasp/converter.py diff --git a/python/converters/plovasp/elstruct.py b/python/triqs_dft_tools/converters/plovasp/elstruct.py similarity index 100% rename from python/converters/plovasp/elstruct.py rename to python/triqs_dft_tools/converters/plovasp/elstruct.py diff --git a/python/converters/plovasp/inpconf.py b/python/triqs_dft_tools/converters/plovasp/inpconf.py similarity index 100% rename from python/converters/plovasp/inpconf.py rename to python/triqs_dft_tools/converters/plovasp/inpconf.py diff --git a/python/converters/plovasp/plotools.py b/python/triqs_dft_tools/converters/plovasp/plotools.py similarity index 100% rename from python/converters/plovasp/plotools.py rename to python/triqs_dft_tools/converters/plovasp/plotools.py diff --git a/python/converters/plovasp/proj_group.py b/python/triqs_dft_tools/converters/plovasp/proj_group.py similarity index 100% rename from python/converters/plovasp/proj_group.py rename to python/triqs_dft_tools/converters/plovasp/proj_group.py diff --git a/python/converters/plovasp/proj_shell.py b/python/triqs_dft_tools/converters/plovasp/proj_shell.py similarity index 98% rename from python/converters/plovasp/proj_shell.py rename to python/triqs_dft_tools/converters/plovasp/proj_shell.py index 73b4c140..f6982fe0 100644 --- a/python/converters/plovasp/proj_shell.py +++ b/python/triqs_dft_tools/converters/plovasp/proj_shell.py @@ -39,12 +39,7 @@ def issue_warning(message): import itertools as it import numpy as np -try: - import atm - atmlib_present = True -except ImportError: - issue_warning("Error importing ATM libray, DOS calculation will fail!") - atmlib_present = False +from . import atm np.set_printoptions(suppress=True) @@ -399,7 +394,6 @@ class ProjectorShell: """ nion, ns, nk, nlm, nbtot = self.proj_win.shape - assert atmlib_present, "ATM library was not imported; cannot calculate DOS" # There is a problem with data storage structure of projectors that will # make life more complicated. The problem is that band-indices of projectors # for different k-points do not match because we store 'nb_max' values starting diff --git a/python/converters/plovasp/sc_dmft.py b/python/triqs_dft_tools/converters/plovasp/sc_dmft.py similarity index 100% rename from python/converters/plovasp/sc_dmft.py rename to python/triqs_dft_tools/converters/plovasp/sc_dmft.py diff --git a/python/converters/plovasp/vaspio.py b/python/triqs_dft_tools/converters/plovasp/vaspio.py similarity index 100% rename from python/converters/plovasp/vaspio.py rename to python/triqs_dft_tools/converters/plovasp/vaspio.py diff --git a/python/converters/vasp_converter.py b/python/triqs_dft_tools/converters/vasp_converter.py similarity index 100% rename from python/converters/vasp_converter.py rename to python/triqs_dft_tools/converters/vasp_converter.py diff --git a/python/converters/wannier90_converter.py b/python/triqs_dft_tools/converters/wannier90_converter.py similarity index 100% rename from python/converters/wannier90_converter.py rename to python/triqs_dft_tools/converters/wannier90_converter.py diff --git a/python/converters/wien2k_converter.py b/python/triqs_dft_tools/converters/wien2k_converter.py similarity index 100% rename from python/converters/wien2k_converter.py rename to python/triqs_dft_tools/converters/wien2k_converter.py diff --git a/python/sumk_dft.py b/python/triqs_dft_tools/sumk_dft.py similarity index 100% rename from python/sumk_dft.py rename to python/triqs_dft_tools/sumk_dft.py diff --git a/python/sumk_dft_tools.py b/python/triqs_dft_tools/sumk_dft_tools.py similarity index 100% rename from python/sumk_dft_tools.py rename to python/triqs_dft_tools/sumk_dft_tools.py diff --git a/python/symmetry.py b/python/triqs_dft_tools/symmetry.py similarity index 100% rename from python/symmetry.py rename to python/triqs_dft_tools/symmetry.py diff --git a/python/trans_basis.py b/python/triqs_dft_tools/trans_basis.py similarity index 100% rename from python/trans_basis.py rename to python/triqs_dft_tools/trans_basis.py diff --git a/python/update_archive.py b/python/triqs_dft_tools/update_archive.py similarity index 100% rename from python/update_archive.py rename to python/triqs_dft_tools/update_archive.py diff --git a/python/version.py.in b/python/triqs_dft_tools/version.py.in similarity index 73% rename from python/version.py.in rename to python/triqs_dft_tools/version.py.in index 489e0617..06a9e558 100644 --- a/python/version.py.in +++ b/python/triqs_dft_tools/version.py.in @@ -3,6 +3,9 @@ # TRIQS: a Toolbox for Research in Interacting Quantum Systems # # Copyright (C) 2011 by M. Aichhorn, L. Pourovskii, V. Vildosola +# Copyright (C) 2016-2018, N. Wentzell +# Copyright (C) 2018-2019, Simons Foundation +# author: N. Wentzell # # TRIQS is free software: you can redistribute it and/or modify it under the # terms of the GNU General Public License as published by the Free Software @@ -19,12 +22,12 @@ # ################################################################################ -version = "@DFT_TOOLS_VERSION@" +version = "@PROJECT_VERSION@" triqs_hash = "@TRIQS_GIT_HASH@" -dft_tools_hash = "@DFT_TOOLS_GIT_HASH@" +@PROJECT_NAME@_hash = "@PROJECT_GIT_HASH@" def show_version(): - print("\nYou are using the dft_tools version %s\n"%version) + print("\nYou are using @PROJECT_NAME@ version %s\n"%version) def show_git_hash(): - print("\nYou are using the dft_tools git hash %s based on triqs git hash %s\n"%(dft_tools_hash, triqs_hash)) + print("\nYou are using @PROJECT_NAME@ git hash %s based on triqs git hash %s\n"%("@PROJECT_GIT_HASH@", triqs_hash)) diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt new file mode 100644 index 00000000..f6da5199 --- /dev/null +++ b/share/CMakeLists.txt @@ -0,0 +1,28 @@ +add_subdirectory(cmake) + +if(NOT CMAKE_INSTALL_PREFIX STREQUAL TRIQS_ROOT AND NOT IS_SUBPROJECT) + + if(PythonSupport) + set(EXPORT_PYTHON_PATH "export PYTHONPATH=${CMAKE_INSTALL_PREFIX}/${CPP2PY_PYTHON_LIB_DEST_ROOT}:$PYTHONPATH") + set(MODFILE_PYTHON_PATH "prepend-path PYTHONPATH $root/${CPP2PY_PYTHON_LIB_DEST_ROOT}") + endif() + + configure_file(${PROJECT_NAME}.modulefile.in ${PROJECT_NAME}.modulefile @ONLY) + configure_file(${PROJECT_NAME}vars.sh.in ${PROJECT_NAME}vars.sh @ONLY) + + install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}.modulefile + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}vars.sh + DESTINATION share + ) + + message(STATUS "***************************************************************") + message(STATUS "* Custom install Location. Use: ") + message(STATUS "* ") + message(STATUS "* source ${CMAKE_INSTALL_PREFIX}/share/${PROJECT_NAME}vars.sh ") + message(STATUS "* ") + message(STATUS "* to set up the environment variables ") + message(STATUS "***************************************************************") + +endif() diff --git a/share/cmake/CMakeLists.txt b/share/cmake/CMakeLists.txt new file mode 100644 index 00000000..dad532b3 --- /dev/null +++ b/share/cmake/CMakeLists.txt @@ -0,0 +1,10 @@ +configure_file(${PROJECT_NAME}-config.cmake.in ${PROJECT_NAME}-config.cmake @ONLY) +configure_file(${PROJECT_NAME}-config-version.cmake.in ${PROJECT_NAME}-config-version.cmake @ONLY) +install( + FILES + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config.cmake + ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME}-config-version.cmake + DESTINATION lib/cmake/${PROJECT_NAME} +) + +install(EXPORT ${PROJECT_NAME}-targets NAMESPACE ${PROJECT_NAME}:: DESTINATION lib/cmake/${PROJECT_NAME}) diff --git a/share/cmake/Modules/FindSphinx.cmake b/share/cmake/Modules/FindSphinx.cmake new file mode 100644 index 00000000..b8cc28a8 --- /dev/null +++ b/share/cmake/Modules/FindSphinx.cmake @@ -0,0 +1,37 @@ +# Copyright Olivier Parcollet 2017. +# Distributed under the Boost Software License, Version 1.0. +# (See accompanying file LICENSE_1_0.txt or copy at +# http://www.boost.org/LICENSE_1_0.txt) + +# This module looks for sphinx documentation tool +# and define a function that prepares the Makefile for sphinx-build + +find_program(SPHINXBUILD_EXECUTABLE + NAMES sphinx-build + PATHS /usr/bin /opt/local/bin /usr/local/bin #opt/sphinx-doc/bin + PATH_SUFFIXES bin + ) + +if (NOT SPHINXBUILD_EXECUTABLE) + message(FATAL_ERROR "I cannot find sphinx to build the triqs documentation") +endif() + +execute_process( + COMMAND "${SPHINXBUILD_EXECUTABLE}" --version + OUTPUT_VARIABLE SPHINXBUILD_VERSION + ERROR_VARIABLE SPHINXBUILD_VERSION + ) +if (SPHINXBUILD_VERSION MATCHES "[Ss]phinx.* ([0-9]+\\.[0-9]+(\\.|b)[0-9]+)") + set (SPHINXBUILD_VERSION "${CMAKE_MATCH_1}") +endif() + +if (SPHINXBUILD_VERSION VERSION_EQUAL 1.6.3) + message(FATAL_ERROR "sphinx-build found at ${SPHINXBUILD_EXECUTABLE} but version 1.6.3 has a bug. Upgrade sphinx.") +else() + message(STATUS "sphinx-build program found at ${SPHINXBUILD_EXECUTABLE} with version ${SPHINXBUILD_VERSION}") +endif () + +include(FindPackageHandleStandardArgs) +FIND_PACKAGE_HANDLE_STANDARD_ARGS(SPHINX DEFAULT_MSG SPHINXBUILD_EXECUTABLE) + +mark_as_advanced( SPHINXBUILD_EXECUTABLE ) diff --git a/share/cmake/extract_flags.cmake b/share/cmake/extract_flags.cmake new file mode 100644 index 00000000..dfcf67b0 --- /dev/null +++ b/share/cmake/extract_flags.cmake @@ -0,0 +1,102 @@ +################################################################################### +# +# TRIQS: a Toolbox for Research in Interacting Quantum Systems +# +# Copyright (C) 2019-2020 Simons Foundation +# author: N. Wentzell +# +# TRIQS is free software: you can redistribute it and/or modify it under the +# terms of the GNU General Public License as published by the Free Software +# Foundation, either version 3 of the License, or (at your option) any later +# version. +# +# TRIQS is distributed in the hope that it will be useful, but WITHOUT ANY +# WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +# details. +# +# You should have received a copy of the GNU General Public License along with +# TRIQS. If not, see . +# +################################################################################### + +# Recursively fetch all targets that the interface of a target depends upon +macro(get_all_interface_targets name target) + get_property(TARGET_LINK_LIBRARIES TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES) + foreach(lib IN LISTS TARGET_LINK_LIBRARIES) + if(TARGET ${lib}) + # Append to list + list(APPEND ${name}_INTERFACE_TARGETS ${lib}) + # Recure into target dependencies + get_all_interface_targets(${name} ${lib}) + endif() + endforeach() +endmacro() + +# Extract the property from the target and recursively from all targets it depends upon +macro(get_property_recursive) + cmake_parse_arguments(get_property_recursive "" "TARGET" "PROPERTY" ${ARGN}) + set(target ${get_property_recursive_TARGET}) + set(property ${get_property_recursive_PROPERTY}) + get_all_interface_targets(${target} ${target}) + foreach(t IN LISTS ${target}_INTERFACE_TARGETS ITEMS ${target}) + get_property(p TARGET ${t} PROPERTY ${property}) + list(APPEND ${ARGV0} ${p}) + endforeach() + # Clean duplicates and any occurance of '/usr/include' dirs + if(${ARGV0}) + list(REMOVE_DUPLICATES ${ARGV0}) + list(REMOVE_ITEM ${ARGV0} /usr/include) + endif() +endmacro() + +# Recursively fetch all compiler flags attached to the interface of a target +macro(extract_flags) + + cmake_parse_arguments(ARG "BUILD_INTERFACE" "" "" ${ARGN}) + + set(target ${ARGV0}) + unset(${target}_CXXFLAGS) + unset(${target}_LDFLAGS) + + get_property_recursive(opts TARGET ${target} PROPERTY INTERFACE_COMPILE_OPTIONS) + foreach(opt ${opts}) + set(${target}_LDFLAGS "${${target}_LDFLAGS} ${opt}") + set(${target}_CXXFLAGS "${${target}_CXXFLAGS} ${opt}") + endforeach() + + get_property_recursive(defs TARGET ${target} PROPERTY INTERFACE_COMPILE_DEFINITIONS) + foreach(def ${defs}) + set(${target}_CXXFLAGS "${${target}_CXXFLAGS} -D${def}") + endforeach() + + get_property_recursive(inc_dirs TARGET ${target} PROPERTY INTERFACE_INCLUDE_DIRECTORIES) + get_property_recursive(sys_inc_dirs TARGET ${target} PROPERTY INTERFACE_SYSTEM_INCLUDE_DIRECTORIES) + if(inc_dirs) + list(REMOVE_ITEM sys_inc_dirs ${inc_dirs}) + endif() + foreach(dir ${inc_dirs}) + set(${target}_CXXFLAGS "${${target}_CXXFLAGS} -I${dir}") + endforeach() + foreach(dir ${sys_inc_dirs}) + set(${target}_CXXFLAGS "${${target}_CXXFLAGS} -isystem${dir}") + endforeach() + + get_property_recursive(libs TARGET ${target} PROPERTY INTERFACE_LINK_LIBRARIES) + foreach(lib ${libs}) + if(NOT TARGET ${lib} AND NOT IS_DIRECTORY ${lib}) + set(${target}_LDFLAGS "${${target}_LDFLAGS} ${lib}") + endif() + endforeach() + + # We have to replace generator expressions explicitly + if(ARG_BUILD_INTERFACE) + string(REGEX REPLACE "\\$" "\\1" ${target}_LDFLAGS "${${target}_LDFLAGS}") + string(REGEX REPLACE "\\$" "\\1" ${target}_CXXFLAGS "${${target}_CXXFLAGS}") + else() + string(REGEX REPLACE "\\$" "\\1" ${target}_LDFLAGS "${${target}_LDFLAGS}") + string(REGEX REPLACE "\\$" "\\1" ${target}_CXXFLAGS "${${target}_CXXFLAGS}") + endif() + string(REGEX REPLACE " [^ ]*\\$<[^ ]*:[^>]*>" "" ${target}_LDFLAGS "${${target}_LDFLAGS}") + string(REGEX REPLACE " [^ ]*\\$<[^ ]*:[^>]*>" "" ${target}_CXXFLAGS "${${target}_CXXFLAGS}") +endmacro() diff --git a/share/cmake/triqs_dft_tools-config-version.cmake.in b/share/cmake/triqs_dft_tools-config-version.cmake.in new file mode 100644 index 00000000..c4c43a4b --- /dev/null +++ b/share/cmake/triqs_dft_tools-config-version.cmake.in @@ -0,0 +1,13 @@ +set(PACKAGE_VERSION @PROJECT_VERSION@) + +if (PACKAGE_FIND_VERSION VERSION_EQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) +endif() + +if (PACKAGE_FIND_VERSION VERSION_LESS PACKAGE_VERSION) + set(PACKAGE_VERSION_COMPATIBLE TRUE) +endif() + +if (PACKAGE_FIND_VERSION VERSION_GREATER PACKAGE_VERSION) + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/share/cmake/triqs_dft_tools-config.cmake.in b/share/cmake/triqs_dft_tools-config.cmake.in new file mode 100644 index 00000000..e9101328 --- /dev/null +++ b/share/cmake/triqs_dft_tools-config.cmake.in @@ -0,0 +1,32 @@ +# This file allows other CMake Projects to find us +# We provide general project information +# and reestablish the exported CMake Targets + +# Multiple inclusion guard +if(NOT @PROJECT_NAME@_FOUND) +set(@PROJECT_NAME@_FOUND TRUE) +set_property(GLOBAL PROPERTY @PROJECT_NAME@_FOUND TRUE) + +# version +set(@PROJECT_NAME@_VERSION @PROJECT_VERSION@ CACHE STRING "@PROJECT_NAME@ version") +set(@PROJECT_NAME@_GIT_HASH @PROJECT_GIT_HASH@ CACHE STRING "@PROJECT_NAME@ git hash") + +# Root of the installation +set(@PROJECT_NAME@_ROOT @CMAKE_INSTALL_PREFIX@ CACHE STRING "@PROJECT_NAME@ root directory") + +## Find the target dependencies +#include(CMakeFindDependencyMacro) +#find_dependency(... HINTS @CMAKE_INSTALL_PREFIX@) + +# Include the exported targets of this project +include(@CMAKE_INSTALL_PREFIX@/lib/cmake/@PROJECT_NAME@/@PROJECT_NAME@-targets.cmake) + +message(STATUS "Found @PROJECT_NAME@-config.cmake with version @PROJECT_VERSION@, hash = @PROJECT_GIT_HASH@") + +# Was the Project built with Documentation? +set(@PROJECT_NAME@_WITH_DOCUMENTATION @Build_Documentation@ CACHE BOOL "Was @PROJECT_NAME@ build with documentation?") + +# Was the Project built with PythonSupport? +set(@PROJECT_NAME@_WITH_PYTHON_SUPPORT @PythonSupport@ CACHE BOOL "Was @PROJECT_NAME@ build with python support?") + +endif() diff --git a/share/replace_and_rename.py b/share/replace_and_rename.py new file mode 100755 index 00000000..b183fb40 --- /dev/null +++ b/share/replace_and_rename.py @@ -0,0 +1,45 @@ +#!/usr/bin/env python2 + +import sys +import os +import glob + +if len(sys.argv) != 2: + print("Please pass the application name") + sys.exit() + +app_name = str(sys.argv[1]).lower() +capital_name = app_name.upper() + +# Move app4triqs directories if necessary +if os.path.isdir("c++/app4triqs"): os.rename("c++/app4triqs", "c++/" + app_name) +if os.path.isdir("python/app4triqs"): os.rename("python/app4triqs", "python/" + app_name) + +# Ignore these files +ignore_lst = [".git/", "replace_and_rename.py", "squash_history.sh"] + +# Find the root directory of app4triqs +app4triqs_root = os.path.abspath(os.path.dirname(__file__) + "/..") + +# Recurse over all subdirectories and files +for root, dirs, files in os.walk(app4triqs_root): + + for fname in files: + fpath = os.path.join(root, fname) + + # Ignore certain files / directories + if any(it in fpath for it in ignore_lst): continue + + if os.path.isfile(fpath): + # Rename files containing app4triqs in their filename + if "app4triqs" in fname: + new_fpath = os.path.join(root, fname.replace("app4triqs", app_name)) + os.rename(fpath, new_fpath) + fpath = new_fpath + + # Replace app4triqs and APP4TRIQS in all files + with open(fpath, 'r') as f: + s = f.read() + if "app4triqs" in s or "APP4TRIQS" in s: + with open(fpath, 'w') as f: + f.write(s.replace("app4triqs", app_name).replace("APP4TRIQS", capital_name)) diff --git a/cmake/sitecustomize.py b/share/sitecustomize.py similarity index 100% rename from cmake/sitecustomize.py rename to share/sitecustomize.py diff --git a/share/squash_history.sh b/share/squash_history.sh new file mode 100755 index 00000000..8c03c08f --- /dev/null +++ b/share/squash_history.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +git reset $(git commit-tree HEAD\^{tree} -m "Initialize project from github.com/triqs/app4triqs@$(git rev-parse --short HEAD)") +git merge --allow-unrelated-histories -s ours HEAD@{1} -m "Track app4triqs skeleton" +git remote rm origin +git remote add app4triqs_remote https://github.com/triqs/app4triqs diff --git a/share/triqs_dft_tools.modulefile.in b/share/triqs_dft_tools.modulefile.in new file mode 100644 index 00000000..2c9befe8 --- /dev/null +++ b/share/triqs_dft_tools.modulefile.in @@ -0,0 +1,39 @@ +#%Module1.0 +# +# To be installed as ${MODULEPATH}/@PROJECT_NAME@/@PROJECT_VERSION@ + +set name @PROJECT_NAME@ +set version @PROJECT_VERSION@ +set root @CMAKE_INSTALL_PREFIX@ +set git_hash @PROJECT_GIT_HASH@ + +set url "https://github.com/TRIQS/@PROJECT_NAME@" +set description "An example application using cpp2py and triqs." + +module-whatis "$description" + +proc ModulesHelp { } { + global description url version git_hash + puts stderr "Description: $description" + puts stderr "URL: $url" + puts stderr "Version: $version" + puts stderr "Git hash: $git_hash" +} + +# You may need to edit the next line if the triqs module +# is installed under a different name in your setup. +prereq triqs/@TRIQS_VERSION@ + +# Only one version of @PROJECT_NAME@ can be loaded at a time +conflict $name + +setenv @PROJECT_NAME@_ROOT $root +setenv @PROJECT_NAME@_VERSION $version +setenv @PROJECT_NAME@_GIT_HASH $git_hash + +prepend-path PATH $root/bin +prepend-path CPLUS_INCLUDE_PATH $root/include +prepend-path LIBRARY_PATH $root/lib +prepend-path LD_LIBRARY_PATH $root/lib +prepend-path CMAKE_PREFIX_PATH $root +@MODFILE_PYTHON_PATH@ diff --git a/share/triqs_dft_toolsvars.sh.in b/share/triqs_dft_toolsvars.sh.in new file mode 100644 index 00000000..492a7a26 --- /dev/null +++ b/share/triqs_dft_toolsvars.sh.in @@ -0,0 +1,10 @@ +# Source this in your environment. + +export @PROJECT_NAME@_ROOT=@CMAKE_INSTALL_PREFIX@ + +export CPLUS_INCLUDE_PATH=@CMAKE_INSTALL_PREFIX@/include:$CPLUS_INCLUDE_PATH +export PATH=@CMAKE_INSTALL_PREFIX@/bin:$PATH +export LIBRARY_PATH=@CMAKE_INSTALL_PREFIX@/lib:$LIBRARY_PATH +export LD_LIBRARY_PATH=@CMAKE_INSTALL_PREFIX@/lib:$LD_LIBRARY_PATH +export CMAKE_PREFIX_PATH=@CMAKE_INSTALL_PREFIX@:$CMAKE_PREFIX_PATH +@EXPORT_PYTHON_PATH@ diff --git a/test/CMakeLists.txt b/test/CMakeLists.txt index dac8f0db..9eaefe3d 100644 --- a/test/CMakeLists.txt +++ b/test/CMakeLists.txt @@ -1,25 +1,6 @@ -# Copy h5 files to binary dir -FILE(GLOB all_h5_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h5) -file(COPY ${CMAKE_CURRENT_SOURCE_DIR}/${all_h5_files} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -# Copy other files -FILE(COPY SrVO3.pmat SrVO3.struct SrVO3.outputs SrVO3.oubwin SrVO3.ctqmcout SrVO3.symqmc SrVO3.sympar SrVO3.parproj SrIrO3_rot.h5 hk_convert_hamiltonian.hk LaVO3-Pnma_hr.dat LaVO3-Pnma.inp DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) +add_subdirectory(c++) -# List all tests -set(all_tests wien2k_convert hk_convert w90_convert sumkdft_basic srvo3_Gloc srvo3_transp sigma_from_file blockstructure analyse_block_structure_from_gf analyse_block_structure_from_gf2) - -set(python_executable ${TRIQS_PYTHON_EXECUTABLE}) - -if(TEST_COVERAGE) - set(python_executable ${PYTHON_COVERAGE} run --append --source "${CMAKE_BINARY_DIR}/python") +if(PythonSupport) + add_subdirectory(python) + add_subdirectory(python/plovasp) endif() - -foreach(t ${all_tests}) - add_test(NAME ${t} COMMAND ${python_executable} ${CMAKE_CURRENT_SOURCE_DIR}/${t}.py) -endforeach() - -# Set the PythonPath : put the build dir first (in case there is an installed version). -set_property(TEST ${all_tests} PROPERTY ENVIRONMENT PYTHONPATH=${CMAKE_BINARY_DIR}/python:$ENV{PYTHONPATH} ) - - -# VASP converter tests -add_subdirectory(plovasp) diff --git a/test/c++/CMakeLists.txt b/test/c++/CMakeLists.txt new file mode 100644 index 00000000..071b5fd2 --- /dev/null +++ b/test/c++/CMakeLists.txt @@ -0,0 +1,35 @@ +# Copy h5 files to binary dir +file(GLOB_RECURSE all_h5_ref_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.ref.h5) +foreach(file ${all_h5_ref_files}) + configure_file(${file} ${file} COPYONLY) +endforeach() + +# List of all tests +file(GLOB_RECURSE all_tests RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.cpp) + +foreach(test ${all_tests}) + get_filename_component(test_name ${test} NAME_WE) + get_filename_component(test_dir ${test} DIRECTORY) + add_executable(${test_name} ${test}) + target_link_libraries(${test_name} ${PROJECT_NAME}_c gtest_main ${PROJECT_NAME}_warnings) + set_property(TARGET ${test_name} PROPERTY RUNTIME_OUTPUT_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${test_dir}) + add_test(NAME ${test_name} COMMAND ${test_name} WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${test_dir}) + # Run clang-tidy if found + if(CLANG_TIDY_EXECUTABLE) + set_target_properties(${test_name} PROPERTIES CXX_CLANG_TIDY "${CLANG_TIDY_EXECUTABLE}") + endif() + # Run cppcheck if found + if(CPPCHECK_EXECUTABLE) + add_custom_command( + TARGET ${test_name} + COMMAND ${CPPCHECK_EXECUTABLE} + --enable=warning,style,performance,portability + --std=c++17 + --template=gcc + --verbose + --force + --quiet + ${CMAKE_CURRENT_SOURCE_DIR}/${test} + ) + endif() +endforeach() diff --git a/c++/plovasp/atm/test/reorder_flag.cpp b/test/c++/converters/vasp/reorder_flag.cpp similarity index 100% rename from c++/plovasp/atm/test/reorder_flag.cpp rename to test/c++/converters/vasp/reorder_flag.cpp diff --git a/c++/plovasp/atm/test/reorder_inds.cpp b/test/c++/converters/vasp/reorder_inds.cpp similarity index 100% rename from c++/plovasp/atm/test/reorder_inds.cpp rename to test/c++/converters/vasp/reorder_inds.cpp diff --git a/c++/plovasp/atm/test/testing.hpp b/test/c++/converters/vasp/testing.hpp similarity index 100% rename from c++/plovasp/atm/test/testing.hpp rename to test/c++/converters/vasp/testing.hpp diff --git a/c++/plovasp/atm/test/tet_weights.cpp b/test/c++/converters/vasp/tet_weights.cpp similarity index 100% rename from c++/plovasp/atm/test/tet_weights.cpp rename to test/c++/converters/vasp/tet_weights.cpp diff --git a/c++/plovasp/atm/test/weights1.cpp b/test/c++/converters/vasp/weights1.cpp similarity index 100% rename from c++/plovasp/atm/test/weights1.cpp rename to test/c++/converters/vasp/weights1.cpp diff --git a/test/plovasp/.gitignore b/test/plovasp/.gitignore deleted file mode 100644 index 0d20b648..00000000 --- a/test/plovasp/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.pyc diff --git a/test/plovasp/converter/lunio3.out.h5_old b/test/plovasp/converter/lunio3.out.h5_old deleted file mode 100644 index fb77f35c..00000000 Binary files a/test/plovasp/converter/lunio3.out.h5_old and /dev/null differ diff --git a/test/plovasp/converter/runtest.sh b/test/plovasp/converter/runtest.sh deleted file mode 100755 index 4ceb1ca0..00000000 --- a/test/plovasp/converter/runtest.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../../python:../../c:$PYTHONPATH ../../../build_pytriqs $1 diff --git a/test/plovasp/inpconf/.gitignore b/test/plovasp/inpconf/.gitignore deleted file mode 100644 index 0d20b648..00000000 --- a/test/plovasp/inpconf/.gitignore +++ /dev/null @@ -1 +0,0 @@ -*.pyc diff --git a/test/plovasp/inpconf/parse_shells_5.cfg~ b/test/plovasp/inpconf/parse_shells_5.cfg~ deleted file mode 100644 index cd3a9b6e..00000000 --- a/test/plovasp/inpconf/parse_shells_5.cfg~ +++ /dev/null @@ -1,18 +0,0 @@ -[General] - -[Group 1] -SHELLS = 1 2 - -[Shell 1] -LSHELL = 2 -IONS = 5..8 - -[Shell 2] -LSHELL = 1 -IONS = 1..4 - -TRANSFORM = 0.0 1.0 0.0 - 1.0 0.0 0.0 - 0.0 0.0 1.0 - -CORR = False \ No newline at end of file diff --git a/test/plovasp/inpconf/runtest.sh b/test/plovasp/inpconf/runtest.sh deleted file mode 100755 index 10b8ee04..00000000 --- a/test/plovasp/inpconf/runtest.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../..:../../../../../c:$PYTHONPATH python $1 diff --git a/test/plovasp/plocar_io/runtest.sh b/test/plovasp/plocar_io/runtest.sh deleted file mode 100755 index 9b7bd8ca..00000000 --- a/test/plovasp/plocar_io/runtest.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../../python:../../c:$PYTHONPATH python $1 diff --git a/test/plovasp/plotools/runtest.sh b/test/plovasp/plotools/runtest.sh deleted file mode 100755 index 4ceb1ca0..00000000 --- a/test/plovasp/plotools/runtest.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../../python:../../c:$PYTHONPATH ../../../build_pytriqs $1 diff --git a/test/plovasp/proj_group/projgroups.out b/test/plovasp/proj_group/projgroups.out deleted file mode 100644 index fbdc2e9d..00000000 --- a/test/plovasp/proj_group/projgroups.out +++ /dev/null @@ -1,1788 +0,0 @@ -pars: {'normalize': True, 'index': '1', 'ewindow': (-10.0, 4.0), 'shells': [0], 'normion': False} -10 25 - 1 -0j - 2 0j - 3 -0j - 4 (-0+0j) - 5 (-0-0j) - 1 (-0+0j) - 2 (-0-0j) - 3 (-0+0j) - 4 (-0-0j) - 5 0j - 1 -0j - 2 0j - 3 -0j - 4 0j - 5 (-0-0j) - 1 (-0+0j) - 2 (-0-0j) - 3 (-0+0j) - 4 -0j - 5 (-0+0j) - 1 (-0+0j) - 2 (-0-0j) - 3 (-0+0j) - 4 0j - 5 (-0+0j) - 1 -0j - 2 0j - 3 -0j - 4 0j - 5 (-0-0j) - 1 (-0+0j) - 2 -0j - 3 (-0+0j) - 4 0j - 5 0j - 1 (-0+0j) - 2 -0j - 3 (-0+0j) - 4 0j - 5 0j - 1 (-0+0j) - 2 -0j - 3 (-0+0j) - 4 0j - 5 (-0+0j) - 1 (-0.0004508+0.0028852j) - 2 (-0.1497561+0.9581279j) - 3 (-0+0j) - 4 (-0.0001217+0.0008514j) - 5 (-0+0j) - 1 (-0.0023141+0.0018742j) - 2 (0.0006823-0.0005381j) - 3 (-0+0j) - 4 (-0.7536259+0.6103144j) - 5 -0j - 1 (-0.9588806+0.1448303j) - 2 (0.0028849-0.0004356j) - 3 (-0+0j) - 4 (0.0029471-0.0004451j) - 5 0j - 1 0j - 2 0j - 3 (-0.0222997-0.0193299j) - 4 (-0-0j) - 5 (-0.5552623-0.4813134j) - 1 -0j - 2 (-0+0j) - 3 (0.5488983-0.4885585j) - 4 (-0+0j) - 5 (-0.0220441+0.0196209j) - 1 -0j - 2 (-0+0j) - 3 (0.0018298-0.0011222j) - 4 (-0-0j) - 5 (0.1926196-0.1180961j) - 1 (-0-0j) - 2 -0j - 3 (-0.225939-0.0007474j) - 4 0j - 5 (0.0021464+7.4e-06j) -10 23 - 1 -0j - 2 (-0-0j) - 3 (0.1798377+0.043276j) - 4 -0j - 5 (-0.30033-0.0722711j) - 1 (0.0913626+0.1364412j) - 2 0j - 3 (-0-0j) - 4 (0.0001106+0.0001663j) - 5 0j - 1 (3.9e-06-0.0001996j) - 2 (-0-0j) - 3 0j - 4 (-0.0037065+0.1641633j) - 5 (-0-0j) - 1 (-0.0307734-0.0241725j) - 2 0j - 3 (-0-0j) - 4 (-0.4380031-0.343931j) - 5 0j - 1 (0.5509428-0.0812239j) - 2 (-0-0j) - 3 0j - 4 (-0.0387125+0.005714j) - 5 (-0-0j) - 1 (-0+0j) - 2 0j - 3 (0.0303415+0.0734015j) - 4 (-0+0j) - 5 (-0.0506704-0.1225809j) - 1 (-0+0j) - 2 -0j - 3 (-0.0189898-0.0160965j) - 4 (-0-0j) - 5 (-0.010571-0.0089604j) - 1 (-0.1052749-0.0335264j) - 2 (-0-0j) - 3 (-0+0j) - 4 (-0.0030429-0.0009691j) - 5 (-0+0j) - 1 (-0.0021753+0.002338j) - 2 (-0+0j) - 3 -0j - 4 (0.075262-0.0808856j) - 5 -0j - 1 (-0-0j) - 2 (-0.9029934-0.3629887j) - 3 (-0-0j) - 4 (-0-0j) - 5 (-0-0j) - 1 (-0.0022701+0.0017722j) - 2 -0j - 3 (-0+0j) - 4 (-0.5988639+0.4674931j) - 5 -0j - 1 (0.4737477+0.5939284j) - 2 (-0-0j) - 3 0j - 4 (-0.0017958-0.0022515j) - 5 0j - 1 (-0-0j) - 2 (-0-0j) - 3 (0.3675154+0.536373j) - 4 (-0-0j) - 5 (0.2045843+0.2985821j) - 1 (-0-0j) - 2 0j - 3 (0.0256802+0.3419576j) - 4 (-0-0j) - 5 (-0.0428861-0.5710709j) -10 23 - 1 (-0-0j) - 2 (-0+0j) - 3 (-0.1733519+0.0645254j) - 4 (-0+0j) - 5 (0.2894987-0.1077578j) - 1 (-0.1377034+0.0894482j) - 2 (-0+0j) - 3 (-0-0j) - 4 (-0.0002898+0.000267j) - 5 (-0-0j) - 1 (0.0002132-0.0003313j) - 2 -0j - 3 0j - 4 (-0.06447+0.1510193j) - 5 0j - 1 (-0.0386479-0.000869j) - 2 (-0+0j) - 3 (-0-0j) - 4 (-0.5566305-0.0182938j) - 5 (-0-0j) - 1 (-0.2892412-0.4759324j) - 2 (-0+0j) - 3 (-0-0j) - 4 (0.0197331+0.0332419j) - 5 (-0-0j) - 1 (-1e-07-0j) - 2 (-0+1e-07j) - 3 (0.0683882-0.040391j) - 4 (-0+0j) - 5 (-0.1142089+0.067453j) - 1 0j - 2 0j - 3 (-0.0245703-0.0040012j) - 4 (-0-0j) - 5 (-0.0136775-0.0022274j) - 1 (-0.099971+0.0470387j) - 2 (-0+0j) - 3 -0j - 4 (-0.0028895+0.0013595j) - 5 (-0+0j) - 1 (0.0006444+0.0031277j) - 2 0j - 3 0j - 4 (-0.0222906-0.1082126j) - 5 (-0-0j) - 1 (-0+0j) - 2 (-0.1072096+0.9672973j) - 3 (-0+0j) - 4 (-0+0j) - 5 (-0+0j) - 1 (0.0020646-0.0020078j) - 2 (-0+0j) - 3 -0j - 4 (0.5446383-0.5296762j) - 5 (-0+0j) - 1 (-0.4361445-0.6220658j) - 2 0j - 3 (-0-0j) - 4 (0.0016533+0.002358j) - 5 (-0-0j) - 1 (-0+0j) - 2 (-0+0j) - 3 (0.0994177-0.6425572j) - 4 (-0+0j) - 5 (0.0553427-0.3576915j) - 1 (-0+0j) - 2 -0j - 3 (0.3262859-0.105508j) - 4 (-0+0j) - 5 (-0.5448991+0.176199j) -10 23 - 1 (-1e-07+0j) - 2 (-0-0j) - 3 (0.1276138-0.1338997j) - 4 0j - 5 (0.2131158-0.2236133j) - 1 (-0.1592148-0.0401744j) - 2 (-0.0001382+1.34e-05j) - 3 -0j - 4 0j - 5 0j - 1 (9.12e-05-0.0001048j) - 2 (-0.0596493+0.1529879j) - 3 (-0+0j) - 4 (-0-0j) - 5 (-0-0j) - 1 (-0.0337956+0.0219034j) - 2 (-0.4778652+0.2858139j) - 3 -0j - 4 0j - 5 0j - 1 (0.1085553+0.5461322j) - 2 (-0.0064237-0.0397572j) - 3 (-0+0j) - 4 (-0-0j) - 5 (-0-0j) - 1 (-4e-07+1e-07j) - 2 (-2e-07-0j) - 3 (-0.027945+0.0743468j) - 4 (2e-07+2e-07j) - 5 (-0.0466688+0.1241597j) - 1 0j - 2 (-0+0j) - 3 (-0.0180286+0.0171662j) - 4 (-0-0j) - 5 (0.010036-0.0095559j) - 1 (0.108703-0.0199224j) - 2 (0.0019145-0.000351j) - 3 (-0+0j) - 4 -0j - 5 -0j - 1 (0.0005201-0.0018756j) - 2 (-0.0295246+0.1064967j) - 3 -0j - 4 -0j - 5 -0j - 1 0j - 2 (-0+0j) - 3 0j - 4 (0.3917601+0.8908882j) - 5 (-0-0j) - 1 (-0.0028103-0.0001946j) - 2 (-0.7579135-0.0524913j) - 3 (-0-0j) - 4 -0j - 5 (-0-0j) - 1 (0.6214492+0.4370229j) - 2 (-0.0023043-0.0016205j) - 3 0j - 4 (-0-0j) - 5 (-0-0j) - 1 (-0+0j) - 2 (-0+0j) - 3 (0.2052216-0.6169665j) - 4 (-0+0j) - 5 (-0.1142404+0.343446j) - 1 0j - 2 -0j - 3 (-0.0254931+0.3419716j) - 4 (-0+0j) - 5 (-0.0425736+0.5710942j) -10 22 - 1 (-0.0649311-0.3442876j) - 2 (-0-0j) - 3 (0.0378287+0.2005811j) - 4 (-0-0j) - 5 0j - 1 (0.3106791+0.4493758j) - 2 (-0-0j) - 3 (0.0875018+0.1265652j) - 4 (-0+0j) - 5 (-3e-07-5e-07j) - 1 (-4e-07+3e-07j) - 2 0j - 3 (-1e-07+1e-07j) - 4 (-0+0j) - 5 (-0.471188+0.3354972j) - 1 (-0-0j) - 2 (0.2581334+0.1910264j) - 3 (-0+0j) - 4 (0.2581334+0.1910264j) - 5 0j - 1 (-0+0j) - 2 (0.4113635-0.070039j) - 3 -0j - 4 (-0.4113635+0.070039j) - 5 (-0-0j) - 1 (0.0016106-0.0027085j) - 2 -0j - 3 (0.0379126-0.0637563j) - 4 0j - 5 1e-07j - 1 0j - 2 (-0.236061-0.1082325j) - 3 0j - 4 (-0.236061-0.1082325j) - 5 (-0+0j) - 1 0j - 2 0j - 3 0j - 4 (-0-0j) - 5 (0.1545555+0.0883244j) - 1 0j - 2 0j - 3 0j - 4 (-0-0j) - 5 (0.0464772+0.0437532j) - 1 0j - 2 (0.5477333+0.0430706j) - 3 0j - 4 (0.5477332+0.0430706j) - 5 (-0+0j) - 1 (-0-0j) - 2 (-0.1179476-0.53596j) - 3 -0j - 4 (0.1179476+0.5359601j) - 5 (-0-0j) - 1 (-0.3912362-0.4448266j) - 2 0j - 3 (0.0271323+0.0308488j) - 4 0j - 5 0j - 1 (-0.0007282-0.0085436j) - 2 0j - 3 (-0.0618833-0.7260608j) - 4 0j - 5 (-0-0j) -10 22 - 1 (-0.3251665-0.1304481j) - 2 (-1e-07-0j) - 3 (-0.1894412-0.0759987j) - 4 0j - 5 (1e-07+0j) - 1 (0.5384525+0.0923521j) - 2 (2e-07+0j) - 3 (-0.1516534-0.0260108j) - 4 (-0-1e-07j) - 5 (5e-07+1e-07j) - 1 (5e-07+0j) - 2 (-1e-07-0j) - 3 (-2e-07+0j) - 4 (-0+0j) - 5 (-0.5766721-0.0450084j) - 1 0j - 2 (0.297352-0.1212671j) - 3 (-0+0j) - 4 (-0.297352+0.1212672j) - 5 -0j - 1 0j - 2 (0.3819936-0.1679472j) - 3 (-0+0j) - 4 (0.3819937-0.1679472j) - 5 -0j - 1 (0.0031359+0.0003096j) - 2 (1e-07-0j) - 3 (-0.0738181-0.0072888j) - 4 (-0-0j) - 5 (-0+0j) - 1 (-0-0j) - 2 (-0.1050147-0.23751j) - 3 (-0-0j) - 4 (0.1050147+0.23751j) - 5 (-0-0j) - 1 0j - 2 0j - 3 (-0-0j) - 4 (-0-0j) - 5 (-0.1725222-0.0438714j) - 1 -0j - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 (-0.0121359+0.0626673j) - 1 0j - 2 (0.0639723-0.545687j) - 3 0j - 4 (-0.0639723+0.545687j) - 5 -0j - 1 -0j - 2 (0.0330027-0.5477915j) - 3 -0j - 4 (0.0330027-0.5477916j) - 5 0j - 1 (0.5575486+0.2001901j) - 2 (-0-0j) - 3 (0.0386661+0.0138832j) - 4 (-0-0j) - 5 0j - 1 (0.0068083+0.0052126j) - 2 0j - 3 (-0.5785859-0.4429811j) - 4 0j - 5 (-0-0j) -10 23 - 1 (-0+0j) - 2 0j - 3 (-0.1733157+0.0646225j) - 4 0j - 5 (-0.2894383+0.10792j) - 1 (0.0913591-0.1364436j) - 2 (7.13e-05-0.0001072j) - 3 0j - 4 0j - 5 0j - 1 (-0.0001234+3.7e-05j) - 2 (0.1571436-0.0476365j) - 3 0j - 4 0j - 5 0j - 1 (-0.0384934+0.0095109j) - 2 (-0.5406479+0.133395j) - 3 0j - 4 0j - 5 0j - 1 (-0.4575424-0.3174104j) - 2 (0.0325716+0.0226117j) - 3 0j - 4 0j - 5 0j - 1 -0j - 2 (-0-0j) - 3 (-0.0663351+0.043681j) - 4 (-0-0j) - 5 (-0.1107801+0.0729476j) - 1 -0j - 2 (-0+0j) - 3 (-0.0039723+0.024575j) - 4 (-0-0j) - 5 (0.0022112-0.0136801j) - 1 (-0.0243186+0.1078047j) - 2 (-0.0004283+0.0018986j) - 3 0j - 4 (-0+0j) - 5 (-0-0j) - 1 (0.0015793-0.0011376j) - 2 (-0.089671+0.0645937j) - 3 -0j - 4 (-0+0j) - 5 (-0-0j) - 1 (-0-0j) - 2 0j - 3 (-0-0j) - 4 (-0.9558028-0.1833002j) - 5 0j - 1 (-0.0025628-0.0011694j) - 2 (-0.6911981-0.3153306j) - 3 (-0-0j) - 4 (-0+0j) - 5 (-0-0j) - 1 (-0.3231788+0.6875636j) - 2 (0.0011982-0.0025495j) - 3 (-0+0j) - 4 -0j - 5 -0j - 1 -0j - 2 (-0-0j) - 3 (0.4772363+0.4415984j) - 4 (-0-0j) - 5 (-0.2656625-0.245824j) - 1 (-0-0j) - 2 (-0+0j) - 3 (0.0837075-0.332547j) - 4 (-0-0j) - 5 (0.1397919-0.5553552j) -10 22 - 1 (-0.1598438+0.3117691j) - 2 (-0-0j) - 3 (-0.0931246+0.1816359j) - 4 (-0-0j) - 5 -0j - 1 (0.316545-0.4452632j) - 2 0j - 3 (-0.0891539+0.125407j) - 4 0j - 5 (3e-07-4e-07j) - 1 (-4e-07+4e-07j) - 2 (-0-0j) - 3 (1e-07-1e-07j) - 4 (-0-0j) - 5 (0.4209675-0.3966899j) - 1 0j - 2 (-0.1548728+0.2813154j) - 3 0j - 4 (0.1548728-0.2813154j) - 5 (-0+0j) - 1 (-0-0j) - 2 (-0.0725145-0.4109344j) - 3 (-0-0j) - 4 (-0.0725145-0.4109344j) - 5 0j - 1 (0.0021496-0.0023042j) - 2 0j - 3 (-0.050601+0.0542381j) - 4 0j - 5 0j - 1 -0j - 2 (0.2181373-0.1409084j) - 3 (-0+0j) - 4 (-0.2181373+0.1409084j) - 5 -0j - 1 -0j - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 (-0.075198+0.1613501j) - 1 -0j - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 (-0.0138021+0.0623215j) - 1 -0j - 2 (0.3074963+0.4553162j) - 3 0j - 4 (-0.3074963-0.4553161j) - 5 0j - 1 (-0-0j) - 2 (-0.5313799-0.1371137j) - 3 (-0-0j) - 4 (-0.5313799-0.1371138j) - 5 -0j - 1 (0.3010873-0.5101793j) - 2 (-0+0j) - 3 (0.0208805-0.035381j) - 4 (-0+0j) - 5 -0j - 1 (-0.0085158+0.0010024j) - 2 (-0+0j) - 3 (0.7236963-0.085191j) - 4 (-0+0j) - 5 -0j -10 22 - 1 (0.3461913+0.053866j) - 2 (-0+0j) - 3 (-0.2016902-0.0313822j) - 4 (-0+0j) - 5 -0j - 1 (-0.5398321-0.0839132j) - 2 -0j - 3 (-0.152042-0.0236339j) - 4 -0j - 5 (6e-07+1e-07j) - 1 (5e-07+2e-07j) - 2 (-0+0j) - 3 (2e-07+0j) - 4 (-0+0j) - 5 (0.5506471+0.1770995j) - 1 -0j - 2 (0.3072619+0.0933492j) - 3 (-0-0j) - 4 (0.3072619+0.0933492j) - 5 (-0-0j) - 1 (-0+0j) - 2 (0.4143474+0.0494131j) - 3 (-0+0j) - 4 (-0.4143474-0.0494131j) - 5 0j - 1 (0.0028697+0.0013018j) - 2 0j - 3 (0.0675512+0.0306442j) - 4 (-0+0j) - 5 (-0-0j) - 1 0j - 2 (-0.222548-0.1338337j) - 3 0j - 4 (-0.222548-0.1338337j) - 5 0j - 1 -0j - 2 -0j - 3 -0j - 4 (-0+0j) - 5 (0.0068112-0.1778826j) - 1 -0j - 2 -0j - 3 -0j - 4 (-0+0j) - 5 (0.031429-0.0555579j) - 1 0j - 2 (0.2680391+0.4796059j) - 3 0j - 4 (0.2680391+0.4796058j) - 5 -0j - 1 0j - 2 (-0.3931449-0.3828862j) - 3 (-0-0j) - 4 (0.3931449+0.3828862j) - 5 (-0-0j) - 1 (-0.1714822+0.5670365j) - 2 -0j - 3 (0.0118923-0.0393241j) - 4 -0j - 5 -0j - 1 (0.0059642+0.0061605j) - 2 (-0-0j) - 3 (0.5068579+0.5235351j) - 4 (-0-0j) - 5 0j -10 23 - 1 0j - 2 0j - 3 (-0.2381631-0.2572602j) - 4 (-0-0j) - 5 -0j - 1 (-0-0j) - 2 (7.83e-05+1.53e-05j) - 3 (-0-0j) - 4 (0.1310127+0.0989901j) - 5 (-0+0j) - 1 0j - 2 (0.161646+0.0288775j) - 3 0j - 4 (-6.44e-05-4.7e-05j) - 5 -0j - 1 0j - 2 (-0.0272174+0.0096473j) - 3 0j - 4 (-0.427908-0.3573898j) - 5 -0j - 1 (-0-0j) - 2 (-0.502332+0.241858j) - 3 (-0-0j) - 4 (0.0240306+0.0160121j) - 5 (-0+0j) - 1 0j - 2 0j - 3 (0.1476598+0.0292827j) - 4 (-1e-07+0j) - 5 -1e-07j - 1 0j - 2 (-0+0j) - 3 -0j - 4 -0j - 5 (0.0206397-0.0208035j) - 1 0j - 2 (2.77e-05+2.68e-05j) - 3 0j - 4 (0.0794091+0.0768845j) - 5 (-0-0j) - 1 (-0-0j) - 2 (-0.1099844-0.010976j) - 3 (-0-0j) - 4 (3.83e-05+3.8e-06j) - 5 (-0-0j) - 1 (0.5611965+0.7951203j) - 2 0j - 3 0j - 4 0j - 5 0j - 1 -0j - 2 (-0.4667031+0.5994866j) - 3 (-0+0j) - 4 (-0.0001685+0.0002131j) - 5 (-0+0j) - 1 -0j - 2 (2.83e-05-0.0002701j) - 3 (-0+0j) - 4 (-0.0848183+0.7549847j) - 5 -0j - 1 0j - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 (-0.7603683+0.0877228j) - 1 (-0-0j) - 2 -0j - 3 (-0.2680395+0.5920943j) - 4 -0j - 5 -0j -10 22 - 1 (-0-1e-07j) - 2 0j - 3 (-0.0747045+0.0786119j) - 4 (-0.2413475+0.2539712j) - 5 (-0.1241594+0.1306537j) - 1 (-0+1e-07j) - 2 (-0+0j) - 3 (-0.049552+0.065018j) - 4 (0.3311519-0.4345094j) - 5 (-0.0823574+0.1080624j) - 1 0j - 2 (-0-0j) - 3 (0.466613-0.1496885j) - 4 (-1.2e-06+4e-07j) - 5 (-0.2585042+0.0829276j) - 1 (-0.0391107-0.3187385j) - 2 (-0.0391107-0.3187386j) - 3 (-0+0j) - 4 0j - 5 (-0-0j) - 1 (-0.2658556+0.3216306j) - 2 (0.2658556-0.3216306j) - 3 (-0+0j) - 4 0j - 5 -0j - 1 (-1e-07+0j) - 2 (-0-0j) - 3 (-0.0017948-0.039369j) - 4 (0.0001435+0.003148j) - 5 (-0.002983-0.0654316j) - 1 (-0.256565-0.0401683j) - 2 (-0.256565-0.0401683j) - 3 (-0-0j) - 4 0j - 5 0j - 1 -0j - 2 -0j - 3 (-0.1421434+0.0503882j) - 4 -0j - 5 (0.0787478-0.0279151j) - 1 0j - 2 0j - 3 (0.0515882+0.0162174j) - 4 0j - 5 (-0.02858-0.0089845j) - 1 (-0.1868235+0.5166836j) - 2 (-0.1868246+0.5166867j) - 3 (-0+0j) - 4 (-0+0j) - 5 (-0+0j) - 1 (0.5038491-0.2174918j) - 2 (-0.503846+0.2174904j) - 3 (-0+0j) - 4 -0j - 5 (-0+0j) - 1 -0j - 2 (-0+0j) - 3 (-0.021825+0.0003071j) - 4 (-0.5923403+0.0083342j) - 5 (-0.0362733+0.0005104j) - 1 -0j - 2 (-0+0j) - 3 (0.3860531-0.0291359j) - 4 (-0.0085503+0.0006453j) - 5 (0.6416229-0.0484242j) -10 22 - 1 (-0+0j) - 2 0j - 3 (-0.0901265-0.0603143j) - 4 (0.2911712+0.1948572j) - 5 (-0.1497909-0.1002429j) - 1 (-0+0j) - 2 -0j - 3 (0.0789973+0.0210278j) - 4 (0.527932+0.1405269j) - 5 (0.1312966+0.034949j) - 1 (-0+0j) - 2 0j - 3 (0.3391403-0.3537205j) - 4 (9e-07-1e-06j) - 5 (-0.1878842+0.1959616j) - 1 (0.239632-0.2137766j) - 2 (-0.2396321+0.2137766j) - 3 0j - 4 0j - 5 (-0+0j) - 1 (-0.289175+0.3008375j) - 2 (-0.289175+0.3008376j) - 3 0j - 4 0j - 5 (-0+0j) - 1 -0j - 2 (-0-1e-07j) - 3 (0.0132586-0.0371126j) - 4 (0.0010602-0.0029675j) - 5 (0.0220359-0.0616815j) - 1 (-0.2321363+0.1164122j) - 2 (0.2321364-0.1164122j) - 3 -0j - 4 -0j - 5 (-0+0j) - 1 (-0-0j) - 2 0j - 3 (-0.1251119-0.0842065j) - 4 (-0-0j) - 5 (0.0693123+0.0466506j) - 1 (-0+0j) - 2 -0j - 3 (0.0461768-0.0281434j) - 4 (-0+0j) - 5 (-0.0255821+0.0155915j) - 1 (0.3410524+0.430753j) - 2 (-0.3410545-0.4307557j) - 3 (-0-0j) - 4 0j - 5 (-0-0j) - 1 (0.2715043-0.4769193j) - 2 (0.2715026-0.4769164j) - 3 -0j - 4 -0j - 5 -0j - 1 0j - 2 0j - 3 (0.0075332+0.020486j) - 4 (-0.2044533-0.5559994j) - 5 (0.0125202+0.0340479j) - 1 0j - 2 0j - 3 (-0.1912074-0.3366387j) - 4 (-0.0042348-0.0074559j) - 5 (-0.317788-0.5594959j) -10 22 - 1 (-0+0j) - 2 (-0.1234766+0.3278774j) - 3 (-0.0382198+0.1014882j) - 4 0j - 5 (0.0635216-0.1686742j) - 1 -0j - 2 (0.0521713-0.5438182j) - 3 (-0.0078067+0.0813749j) - 4 (-0-0j) - 5 (0.012975-0.1352472j) - 1 (-0+0j) - 2 (8e-07+2e-07j) - 3 (-0.4793712-0.1016736j) - 4 -0j - 5 (-0.2655725-0.0563274j) - 1 (0.108191-0.3023552j) - 2 (-0-0j) - 3 -0j - 4 (0.108191-0.3023552j) - 5 0j - 1 (0.1992612+0.3666338j) - 2 (-0+0j) - 3 -0j - 4 (-0.1992612-0.3666339j) - 5 0j - 1 -0j - 2 (0.0008334-0.003039j) - 3 (-0.0104232+0.0380065j) - 4 (-0+0j) - 5 (0.0173235-0.0631671j) - 1 (-0.1048285-0.2375922j) - 2 0j - 3 (-0-0j) - 4 (-0.1048285-0.2375922j) - 5 (-0-0j) - 1 (-0-0j) - 2 (-0-0j) - 3 (0.0612592+0.1378079j) - 4 (-0-0j) - 5 (0.0339378+0.0763459j) - 1 (-0+0j) - 2 (-0+0j) - 3 (-0.0299063+0.0450551j) - 4 (-0+0j) - 5 (-0.0165682+0.0249606j) - 1 (0.4041486+0.3721946j) - 2 0j - 3 0j - 4 (0.4041511+0.3721968j) - 5 (-0-0j) - 1 (0.216841+0.5041295j) - 2 0j - 3 (-0-0j) - 4 (-0.2168397-0.5041265j) - 5 0j - 1 (-0-0j) - 2 (0.0577942+0.589573j) - 3 (0.0021294+0.0217231j) - 4 0j - 5 (-0.0035392-0.0361039j) - 1 (-0-0j) - 2 (0.0073427+0.0044281j) - 3 (-0.3315318-0.1999314j) - 4 0j - 5 (0.5510081+0.3322874j) -10 21 - 1 (0.0266804-0.191265j) - 2 (0.0266804-0.1912649j) - 3 (-0+1e-07j) - 4 (0.0266804-0.1912649j) - 5 -0j - 1 (0.0150184+0.0124662j) - 2 (-0.0516523-0.0429122j) - 3 (-0.1293059-0.1073315j) - 4 (0.0366337+0.0304459j) - 5 (0.4388582+0.3646539j) - 1 (0.0170772-0.0640336j) - 2 (-0.0041746+0.0156867j) - 3 (-0.1470318+0.5513171j) - 4 (-0.0129026+0.0483472j) - 5 (-0.0433857+0.1623507j) - 1 (-0.1253193-0.3210191j) - 2 (-0.1253193-0.321019j) - 3 1e-07j - 4 (-0.1253193-0.321019j) - 5 (-0-0j) - 1 (0.033639+0.5021813j) - 2 (-0.0174786-0.2520752j) - 3 (0.0071199+0.1062898j) - 4 (-0.0161604-0.2501061j) - 5 (-0.0001611-0.0002406j) - 1 (-0.0009347-0.0009989j) - 2 (-0.416504-0.1264776j) - 3 (-0.0001978-0.0002114j) - 4 (0.4174386+0.1274766j) - 5 (-0.1019076-0.0310332j) - 1 (0.0008405-0.0016868j) - 2 (-0.0089923+0.0180457j) - 3 (0.0041109-0.0082498j) - 4 (0.0081518-0.0163589j) - 5 (-0.0484096+0.0971479j) - 1 (0.0206005+0.0082553j) - 2 (-0.0087852-0.0035205j) - 3 (0.1007525+0.0403748j) - 4 (-0.0118153-0.0047348j) - 5 (0.0085559+0.0034287j) - 1 0j - 2 0j - 3 0j - 4 (-0-0j) - 5 (-0-0j) - 1 (-0.2167601-0.2946513j) - 2 (-0.216763-0.2946553j) - 3 (-1e-07-2e-07j) - 4 (-0.2167629-0.2946552j) - 5 0j - 1 (0.0044653-0.0025254j) - 2 (-0.4003201+0.2264033j) - 3 (-0.0003468+0.0001961j) - 4 (0.3958549-0.223878j) - 5 (0.0356986-0.0201895j) - 1 (0.337287+0.4063527j) - 2 (-0.1658039-0.1997553j) - 3 (-0.0261939-0.0315576j) - 4 (-0.1714787-0.2065922j) - 5 (-0.0002544-0.0003066j) -10 21 - 1 (0.180996+0.0673392j) - 2 (-0.180996-0.0673392j) - 3 (1e-07+0j) - 4 (0.180996+0.0673392j) - 5 (-0-0j) - 1 (0.0169397+0.0092093j) - 2 (0.0590636+0.0318285j) - 3 (0.1458481+0.0792908j) - 4 (0.0421237+0.0226191j) - 5 (-0.5029889-0.270652j) - 1 (-0.0661595-0.004904j) - 2 (-0.0164223-0.0012894j) - 3 (-0.5696205-0.0422228j) - 4 (0.0497374+0.0036146j) - 5 (-0.1656052-0.0115586j) - 1 (0.2963674+0.1758534j) - 2 (-0.2963674-0.1758534j) - 3 1e-07j - 4 (0.2963676+0.1758536j) - 5 (-1e-07-1e-07j) - 1 (-0.1245317-0.4785835j) - 2 (-0.0834806-0.3175658j) - 3 (0.0263579+0.1012952j) - 4 (0.0410511+0.1610178j) - 5 (-0.0051849-0.0191301j) - 1 (-0.0934036+0.0067043j) - 2 (0.3801347-0.0316259j) - 3 (0.0197694-0.001419j) - 4 (0.4735382-0.0383301j) - 5 (0.1043187-0.0085486j) - 1 (0.0106362+0.0126787j) - 2 (0.013615+0.0162295j) - 3 (-0.0520194-0.0620088j) - 4 (0.0029787+0.0035508j) - 5 (0.0468555+0.0558535j) - 1 (0.0098175-0.0112169j) - 2 (-0.0045305+0.0051762j) - 3 (-0.0480153+0.0548596j) - 4 (-0.014348+0.0163932j) - 5 (-0.053307+0.0609054j) - 1 (-0+0j) - 2 (-0+0j) - 3 -0j - 4 (-0+0j) - 5 -0j - 1 (-0.2245956-0.2887233j) - 2 (0.2245987+0.2887271j) - 3 (2e-07+2e-07j) - 4 (-0.2245986-0.2887271j) - 5 (-0-0j) - 1 (0.0034709+0.0069413j) - 2 (0.206264+0.4124994j) - 3 (0.0002695+0.0005391j) - 4 (0.2027932+0.4055583j) - 5 (-0.0183411-0.0366797j) - 1 (0.479977+0.2201664j) - 2 (0.2338765+0.1072796j) - 3 (0.0372753+0.0170983j) - 4 (-0.2460943-0.1128839j) - 5 (0.0005478+0.0002513j) -10 22 - 1 (-0+0j) - 2 (0.2113309-0.2794445j) - 3 (-0.0654134+0.0864967j) - 4 (-0+0j) - 5 (0.1087176-0.1437582j) - 1 -0j - 2 (-0.5330864-0.1194945j) - 3 (-0.079769-0.0178807j) - 4 -0j - 5 (0.1325783+0.0297182j) - 1 (-0+1e-07j) - 2 (8e-07+1e-07j) - 3 (0.4896792+0.0186693j) - 4 0j - 5 (0.2712831+0.0103429j) - 1 (-0.2409274-0.2123156j) - 2 (-0-1e-07j) - 3 (-0-0j) - 4 (0.2409274+0.2123156j) - 5 -0j - 1 (-0.2496325-0.3343785j) - 2 0j - 3 -0j - 4 (-0.2496326-0.3343785j) - 5 0j - 1 (-0+0j) - 2 (0.0031147-0.0004779j) - 3 (0.0389541-0.0059762j) - 4 -0j - 5 (-0.064742+0.0099324j) - 1 (-0.2196089+0.1386038j) - 2 -0j - 3 -0j - 4 (0.2196089-0.1386038j) - 5 -0j - 1 -0j - 2 -0j - 3 (0.0897408-0.1212035j) - 4 (-0+0j) - 5 (0.0497166-0.067147j) - 1 (-0+0j) - 2 (-0+0j) - 3 (0.0527718-0.0118105j) - 4 -0j - 5 (0.0292357-0.0065431j) - 1 (0.3397561+0.4317763j) - 2 0j - 3 (-0-0j) - 4 (-0.3397581-0.4317789j) - 5 0j - 1 (0.460635+0.2982986j) - 2 0j - 3 0j - 4 (0.4606322+0.2982967j) - 5 (-0-0j) - 1 -0j - 2 (-0.3393617+0.4855616j) - 3 (0.0125039-0.0178907j) - 4 -0j - 5 (-0.0207816+0.0297345j) - 1 -0j - 2 (-0.0085536+0.000599j) - 3 (-0.386205+0.0270476j) - 4 -0j - 5 (0.6418754-0.0449534j) -10 21 - 1 (-0.1922488+0.0182892j) - 2 (-0.1922489+0.0182892j) - 3 (-1e-07-0j) - 4 (0.1922488-0.0182892j) - 5 -0j - 1 (0.0186791+0.0058831j) - 2 (-0.0640597-0.020197j) - 3 (0.1608241+0.0506519j) - 4 (-0.0453804-0.0143139j) - 5 (-0.5440128-0.1715492j) - 1 (-0.0638085-0.0178284j) - 2 (0.0155716+0.0043445j) - 3 (-0.5493789-0.1534987j) - 4 (-0.0482371-0.0134839j) - 5 (-0.1623764-0.0454304j) - 1 (0.3444106+0.0118098j) - 2 (0.3444106+0.0118097j) - 3 (1e-07+0j) - 4 (-0.3444105-0.0118097j) - 5 (-1e-07-0j) - 1 (-0.4931486+0.0397544j) - 2 (0.1668077-0.0131739j) - 3 (0.104378-0.0084143j) - 4 (-0.326341+0.0265805j) - 5 (0.0194949-0.0016383j) - 1 (-0.0653873-0.0653302j) - 2 (0.336824+0.3344709j) - 3 (0.0138396+0.0138276j) - 4 (0.2714368+0.2691406j) - 5 (-0.0743294-0.0737612j) - 1 (0.0017617+0.0166422j) - 2 (0.0004591+0.0043365j) - 3 (-0.0086163-0.0813934j) - 4 (0.0022208+0.0209788j) - 5 (-0.0075672-0.0714826j) - 1 (0.0142405-0.0036364j) - 2 (-0.0211628+0.005404j) - 3 (-0.0696472+0.0177846j) - 4 (-0.0069223+0.0017676j) - 5 (0.0793035-0.0202505j) - 1 -0j - 2 -0j - 3 (-0+0j) - 4 -0j - 5 -0j - 1 (0.3116739-0.1914777j) - 2 (0.3116781-0.1914803j) - 3 (-2e-07+1e-07j) - 4 (-0.311678+0.1914803j) - 5 -0j - 1 (-0.0023688+0.0009237j) - 2 (0.4272969-0.1666091j) - 3 (-0.000184+7.17e-05j) - 4 (0.4249283-0.1656855j) - 5 (0.0382117-0.0148993j) - 1 (-0.286342+0.443749j) - 2 (0.1419753-0.2200216j) - 3 (-0.0222375+0.0344618j) - 4 (-0.1443631+0.2237217j) - 5 (-0.0001071+0.0001659j) -10 21 - 1 (-0.0379938+0.1893425j) - 2 (0.0379938-0.1893425j) - 3 -1e-07j - 4 (0.0379938-0.1893425j) - 5 (-0+0j) - 1 (0.0085893-0.0173659j) - 2 (0.0297315-0.0601722j) - 3 (-0.0739527+0.1495175j) - 4 (-0.0211421+0.0428061j) - 5 (0.252886-0.5118919j) - 1 (-0.0184688+0.0636903j) - 2 (-0.0045691+0.0157284j) - 3 (0.1590129-0.5483607j) - 4 (-0.0138997+0.047962j) - 5 (0.046381-0.1602288j) - 1 (-0.0569709+0.3398713j) - 2 (0.056971-0.3398712j) - 3 -1e-07j - 4 (0.0569709-0.3398712j) - 5 (-0+0j) - 1 (-0.0984473-0.4935861j) - 2 (-0.0492445-0.2473405j) - 3 (-0.020837-0.1044706j) - 4 (-0.0492027-0.2462457j) - 5 (5.1e-06+0.0001338j) - 1 (-0.0001074+0.0006234j) - 2 (0.1408778-0.4121537j) - 3 (-2.27e-05+0.0001319j) - 4 (-0.1409851+0.4127771j) - 5 (-0.0344436+0.1008064j) - 1 (-0.006793-0.0211665j) - 2 (-0.003763-0.011725j) - 3 (-0.033223-0.1035207j) - 4 (-0.00303-0.0094415j) - 5 (0.0020695+0.006448j) - 1 (0.0009931-0.0009649j) - 2 (-0.0133111+0.012933j) - 3 (0.0048571-0.0047189j) - 4 (0.0143042-0.0138978j) - 5 (0.0779772-0.0757618j) - 1 0j - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 -0j - 1 (-0.0051332-0.3657567j) - 2 (0.0051332+0.3657617j) - 3 (-0-3e-07j) - 4 (0.0051332+0.3657616j) - 5 0j - 1 (0.0051749+1.66e-05j) - 2 (0.459927+0.0014718j) - 3 (-0.0004019-1.3e-06j) - 4 (-0.4547522-0.0014552j) - 5 (0.041012+0.0001312j) - 1 (0.0847781-0.5212459j) - 2 (0.0416691-0.2561961j) - 3 (-0.0065839+0.0404803j) - 4 (0.043108-0.265043j) - 5 (-6.45e-05+0.0003967j) -10 23 - 1 0j - 2 (-0+0j) - 3 (0.169971+0.3066176j) - 4 (-0+0j) - 5 -0j - 1 (-0-0j) - 2 (1.1e-05+1.68e-05j) - 3 (-0+0j) - 4 (-0.0903043-0.137144j) - 5 0j - 1 0j - 2 (0.1323352+0.0972149j) - 3 -0j - 4 (1.62e-05+1.19e-05j) - 5 (-0-0j) - 1 (-0-0j) - 2 (-0.0025818-0.002754j) - 3 (-0+0j) - 4 (-0.5061166-0.2355808j) - 5 0j - 1 (-0-0j) - 2 (0.0702434+0.5538215j) - 3 (-0+0j) - 4 (-0.0018368-0.0032979j) - 5 0j - 1 (-0+0j) - 2 (-0+0j) - 3 (0.0478756-0.1427193j) - 4 (-0+0j) - 5 -0j - 1 0j - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 (-0.016255+0.0243835j) - 1 (-0-0j) - 2 (-3.48e-05-1.69e-05j) - 3 (-0-0j) - 4 (-0.0993714-0.0483979j) - 5 0j - 1 0j - 2 (0.1104208+0.0049274j) - 3 -0j - 4 (-3.86e-05-1.8e-06j) - 5 0j - 1 (0.6598727-0.7153501j) - 2 -0j - 3 -0j - 4 -0j - 5 (-0+0j) - 1 (-0-0j) - 2 (0.7007046+0.2936138j) - 3 0j - 4 (0.0002504+9.88e-05j) - 5 0j - 1 (-0+0j) - 2 (-0.0002683+2.16e-05j) - 3 -0j - 4 (0.7558501-0.076725j) - 5 (-0+0j) - 1 (-0+0j) - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 (-0.3593545+0.6758103j) - 1 0j - 2 (-0+0j) - 3 (0.1930428-0.6206088j) - 4 (-0+0j) - 5 (-0+0j) -10 22 - 1 (-0+0j) - 2 -0j - 3 (-0.0770352+0.0763294j) - 4 (0.2488772-0.2465972j) - 5 (-0.128033+0.1268601j) - 1 (-0-0j) - 2 (-0+0j) - 3 (-0.0318723+0.0752788j) - 4 (-0.213+0.5030816j) - 5 (-0.0529731+0.1251163j) - 1 (-0+0j) - 2 -0j - 3 (0.0383429+0.4885327j) - 4 (1e-07+1.3e-06j) - 5 (-0.021242-0.2706477j) - 1 (0.1210361-0.2974461j) - 2 (-0.1210361+0.2974461j) - 3 (-0-0j) - 4 -0j - 5 (-0+0j) - 1 (-0.0308891-0.4161385j) - 2 (-0.0308891-0.4161386j) - 3 0j - 4 (-0+0j) - 5 -0j - 1 -0j - 2 (-0-0j) - 3 (-0.0387729+0.0070567j) - 4 (-0.0031003+0.0005643j) - 5 (-0.0644409+0.0117283j) - 1 (0.1224696-0.2289984j) - 2 (-0.1224696+0.2289984j) - 3 (-0+0j) - 4 (-0+0j) - 5 -0j - 1 (-0-0j) - 2 0j - 3 (-0.1460966-0.0374101j) - 4 (-0-0j) - 5 (0.0809378+0.0207253j) - 1 0j - 2 (-0-0j) - 3 (-0.0540033-0.0028269j) - 4 0j - 5 (0.029918+0.0015661j) - 1 (0.536582-0.1180876j) - 2 (-0.5365853+0.1180883j) - 3 (-0+0j) - 4 -0j - 5 (-0+0j) - 1 (0.5474006-0.0389775j) - 2 (0.5473972-0.0389773j) - 3 -0j - 4 -0j - 5 -0j - 1 0j - 2 0j - 3 (0.0105429+0.0191121j) - 4 (-0.2861388-0.518711j) - 5 (0.0175224+0.0317645j) - 1 (-0+0j) - 2 (-0+0j) - 3 (0.0068018-0.3870912j) - 4 (0.0001506-0.0085733j) - 5 (0.0113046-0.6433483j) -10 22 - 1 0j - 2 (-0-0j) - 3 (0.0736874+0.0795661j) - 4 (0.2380616+0.2570538j) - 5 (0.1224691+0.1322395j) - 1 (-0-0j) - 2 (-0+0j) - 3 (0.032624+0.0749561j) - 4 (-0.2180232-0.5009251j) - 5 (0.0542223+0.12458j) - 1 0j - 2 0j - 3 (-0.1419583-0.4690226j) - 4 (4e-07+1.2e-06j) - 5 (0.0786451+0.2598391j) - 1 (0.2574503-0.191946j) - 2 (0.2574503-0.191946j) - 3 -0j - 4 0j - 5 (-0+0j) - 1 (0.243026-0.3392105j) - 2 (-0.243026+0.3392105j) - 3 (-0+0j) - 4 (-0+0j) - 5 -0j - 1 (-0-0j) - 2 0j - 3 (0.018083+0.0350164j) - 4 (-0.0014459-0.0027999j) - 5 (0.030054+0.0581974j) - 1 (0.0108474+0.2594637j) - 2 (0.0108474+0.2594637j) - 3 0j - 4 (-0-0j) - 5 (-0-0j) - 1 (-0+0j) - 2 (-0+0j) - 3 (0.1101443-0.1030143j) - 4 (-0+0j) - 5 (-0.0610202+0.0570701j) - 1 0j - 2 0j - 3 (0.0419385+0.0341396j) - 4 0j - 5 (-0.023234-0.0189134j) - 1 (0.2075556-0.5087097j) - 2 (0.2075569-0.5087128j) - 3 -0j - 4 -0j - 5 -0j - 1 (-0.0488447-0.5466085j) - 2 (0.0488444+0.5466051j) - 3 0j - 4 (-0-0j) - 5 0j - 1 -0j - 2 (-0+0j) - 3 (-0.0016891+0.0217617j) - 4 (-0.0458433+0.5906224j) - 5 (-0.0028073+0.0361681j) - 1 (-0+0j) - 2 -0j - 3 (-0.0986893+0.3743612j) - 4 (0.0021858-0.0082913j) - 5 (-0.1640223+0.6221909j) -10 22 - 1 -0j - 2 (0.3101743-0.162917j) - 3 (-0.0960085+0.0504279j) - 4 (-0+0j) - 5 (0.1595669-0.0838115j) - 1 (-0+0j) - 2 (0.4128783-0.357759j) - 3 (0.0617815-0.0535337j) - 4 (1e-07-1e-07j) - 5 (-0.1026826+0.0889745j) - 1 -0j - 2 (2e-07+8e-07j) - 3 (0.0910885+0.4814947j) - 4 (-0-0j) - 5 (0.0504632+0.2667488j) - 1 (-0.2398135+0.2135729j) - 2 0j - 3 0j - 4 (0.2398136-0.213573j) - 5 (-0+0j) - 1 (0.417256-0.0047748j) - 2 (-0+1e-07j) - 3 (-0-0j) - 4 (0.4172561-0.0047748j) - 5 (-0-0j) - 1 -0j - 2 (0.0030097-0.000934j) - 3 (0.0376389-0.0116813j) - 4 (-0-0j) - 5 (-0.062556+0.0194147j) - 1 (-0.2453607-0.0850719j) - 2 0j - 3 0j - 4 (0.2453607+0.0850719j) - 5 0j - 1 -0j - 2 -0j - 3 (0.1179537-0.0939715j) - 4 (-0+0j) - 5 (0.0653466-0.0520604j) - 1 -0j - 2 -0j - 3 (-0.0003925+0.0540758j) - 4 0j - 5 (-0.0002174+0.0299581j) - 1 (0.4719832-0.2812416j) - 2 -0j - 3 (-0+0j) - 4 (-0.471986+0.2812433j) - 5 -0j - 1 (-0.5215511-0.1707368j) - 2 (-0-0j) - 3 (-0-0j) - 4 (-0.5215479-0.1707357j) - 5 0j - 1 (-0+0j) - 2 (0.5892905-0.0606063j) - 3 (-0.0217126+0.0022331j) - 4 (-0+0j) - 5 (0.0360866-0.0037114j) - 1 (-0+0j) - 2 (0.0069465-0.0050269j) - 3 (0.3136418-0.2269685j) - 4 (-0+0j) - 5 (-0.5212749+0.3772232j) -10 21 - 1 (0.0858148-0.1730027j) - 2 (-0.0858148+0.1730027j) - 3 (-1e-07+0j) - 4 (-0.0858148+0.1730027j) - 5 -0j - 1 (-0.0191865-0.0028874j) - 2 (-0.0663769-0.0099853j) - 3 (0.1651927+0.0248601j) - 4 (0.0471902+0.0070978j) - 5 (-0.5645275-0.084918j) - 1 (-0.0653869-0.0109997j) - 2 (-0.016123-0.0027134j) - 3 (0.5629683+0.0947052j) - 4 (-0.0492641-0.0082863j) - 5 (0.1647399+0.0277019j) - 1 (-0.186063+0.2900667j) - 2 (0.1860631-0.2900667j) - 3 (1e-07-0j) - 4 (0.186063-0.2900667j) - 5 (-0+0j) - 1 (-0.2799825+0.4182455j) - 2 (-0.1399322+0.2092216j) - 3 (-0.0592601+0.0885243j) - 4 (-0.1400503+0.209024j) - 5 (-1.44e-05-2.41e-05j) - 1 (0.0001241+4.75e-05j) - 2 (-0.3148297+0.3014086j) - 3 (2.63e-05+1e-05j) - 4 (0.3149538-0.3013612j) - 5 (0.0769594-0.0736584j) - 1 (0.0168564-0.0144923j) - 2 (0.0093375-0.0080279j) - 3 (0.0824409-0.0708788j) - 4 (0.0075189-0.0064645j) - 5 (-0.005135+0.0044145j) - 1 (0.0013192-0.0004206j) - 2 (-0.0176823+0.0056377j) - 3 (0.0064517-0.0020573j) - 4 (0.0190014-0.0060584j) - 5 (0.1035836-0.0330263j) - 1 0j - 2 -0j - 3 (-0+0j) - 4 (-0+0j) - 5 -0j - 1 (0.3619824+0.0526599j) - 2 (-0.3619873-0.0526607j) - 3 (2e-07+0j) - 4 (-0.3619872-0.0526606j) - 5 (-0-0j) - 1 (0.0047868+0.0019665j) - 2 (0.4254299+0.1747695j) - 3 (-0.0003717-0.0001527j) - 4 (-0.4206433-0.1728031j) - 5 (0.0379359+0.0155843j) - 1 (-0.4923445+0.1910013j) - 2 (-0.2419909+0.0938785j) - 3 (0.0382358-0.0148333j) - 4 (-0.2503472+0.0971203j) - 5 (0.0003747-0.0001454j) -10 21 - 1 (0.1776099-0.075821j) - 2 (0.1776099-0.0758211j) - 3 (1e-07-0j) - 4 (-0.1776099+0.0758211j) - 5 (-0+0j) - 1 (-0.0011601-0.0195589j) - 2 (0.0038281+0.0670614j) - 3 (-0.0099881-0.1683987j) - 4 (0.0026681+0.0475023j) - 5 (0.0322919+0.5694808j) - 1 (-0.0559756-0.0354363j) - 2 (0.0136747+0.0086048j) - 3 (-0.4819394-0.3050993j) - 4 (-0.0423012-0.0268316j) - 5 (-0.1422986-0.0906033j) - 1 (-0.3083103+0.1539574j) - 2 (-0.3083103+0.1539574j) - 3 (-1e-07+1e-07j) - 4 (0.3083102-0.1539574j) - 5 (1e-07+0j) - 1 (0.0946255-0.4856717j) - 2 (-0.0319254+0.1645438j) - 3 (-0.0200281+0.1027955j) - 4 (0.0627002-0.321128j) - 5 (-0.0037607+0.0191346j) - 1 (-0.0018957-0.0921139j) - 2 (0.0090616+0.474493j) - 3 (0.0004012+0.0194965j) - 4 (0.0071658+0.3823791j) - 5 (-0.001983-0.1047096j) - 1 (-0.0162873+0.0038455j) - 2 (-0.0042442+0.0010021j) - 3 (0.0796578-0.0188076j) - 4 (-0.0205315+0.0048476j) - 5 (0.0699588-0.0165177j) - 1 (0.0146504+0.0011755j) - 2 (-0.0217719-0.0017468j) - 3 (-0.0716521-0.0057489j) - 4 (-0.0071214-0.0005714j) - 5 (0.0815858+0.0065458j) - 1 -0j - 2 -0j - 3 (-0+0j) - 4 -0j - 5 -0j - 1 (0.3162043+0.1838998j) - 2 (0.3162086+0.1839023j) - 3 (-2e-07-1e-07j) - 4 (-0.3162085-0.1839023j) - 5 0j - 1 (-0.002198-0.0012783j) - 2 (0.3964525+0.230579j) - 3 (-0.0001707-9.93e-05j) - 4 (0.3942547+0.2293009j) - 5 (0.0354534+0.0206199j) - 1 (0.3660974+0.3806279j) - 2 (-0.18152-0.1887244j) - 3 (0.0284314+0.0295598j) - 4 (0.1845727+0.1918985j) - 5 (0.0001369+0.0001423j) -10 22 - 1 (-0-1e-07j) - 2 (-0.3442878-0.0649297j) - 3 (-0.1065677-0.0200978j) - 4 0j - 5 (0.1771163+0.0334026j) - 1 (1e-07+1e-07j) - 2 (0.5446573-0.0425236j) - 3 (-0.0815007+0.0063631j) - 4 (-1e-07-1e-07j) - 5 (0.1354561-0.0105757j) - 1 1e-07j - 2 (-7e-07-5e-07j) - 3 (0.3857673+0.3021884j) - 4 (-0-0j) - 5 (0.2137158+0.1674128j) - 1 (-0.0788943-0.3112871j) - 2 0j - 3 (1e-07-0j) - 4 (-0.0788943-0.311287j) - 5 (-0+0j) - 1 (-0.3575089+0.215204j) - 2 (1e-07-0j) - 3 (1e-07-0j) - 4 (0.3575089-0.2152041j) - 5 (-1e-07+0j) - 1 1e-07j - 2 (0.0017235+0.0026381j) - 3 (-0.0215556-0.0329924j) - 4 (-0-1e-07j) - 5 (0.0358254+0.0548336j) - 1 (0.0313262-0.257794j) - 2 (-0+0j) - 3 -0j - 4 (0.0313262-0.257794j) - 5 -0j - 1 0j - 2 0j - 3 (-0.1493548-0.0209011j) - 4 0j - 5 (-0.0827429-0.0115793j) - 1 -0j - 2 -0j - 3 (0.0183594-0.0508653j) - 4 -0j - 5 (0.0101712-0.0281795j) - 1 (0.3541611-0.4200415j) - 2 -0j - 3 -0j - 4 (0.3541633-0.420044j) - 5 (-0+0j) - 1 (-0.5009882+0.2240031j) - 2 (-0+0j) - 3 -0j - 4 (0.5009852-0.2240017j) - 5 (-0+0j) - 1 -0j - 2 (-0.5820188+0.1104112j) - 3 (-0.0214447+0.0040681j) - 4 (-0+0j) - 5 (0.0356413-0.0067613j) - 1 (-0+0j) - 2 (0.0060497-0.0060765j) - 3 (-0.2731518+0.274361j) - 4 -0j - 5 (0.4539802-0.4559899j) -10 21 - 1 (-0.1286532+0.1440226j) - 2 (0.1286532-0.1440225j) - 3 (-1e-07+0j) - 4 (-0.1286532+0.1440226j) - 5 0j - 1 (0.0188409-0.0045178j) - 2 (0.0652665-0.0156517j) - 3 (0.1622172-0.0388976j) - 4 (0.0464254-0.0111339j) - 5 (-0.5552056+0.1331479j) - 1 (0.0448326-0.0488625j) - 2 (0.0110728-0.0120674j) - 3 (0.3859999-0.4206967j) - 4 (-0.03376+0.0367953j) - 5 (0.1127752-0.1229195j) - 1 (0.2112891-0.2722409j) - 2 (-0.2112891+0.2722408j) - 3 (1e-07-1e-07j) - 4 (0.2112891-0.2722409j) - 5 (-1e-07-0j) - 1 (0.2468755-0.4286337j) - 2 (0.163549-0.2841377j) - 3 (-0.0522528+0.090723j) - 4 (-0.0833265+0.144496j) - 5 (0.0098032-0.0170642j) - 1 (0.0758111-0.0538314j) - 2 (-0.3110985+0.2214831j) - 3 (-0.0160459+0.0113938j) - 4 (-0.3869096+0.2753146j) - 5 (-0.0852965+0.0607086j) - 1 (-0.0154151+0.0060212j) - 2 (-0.0197322+0.0077074j) - 3 (0.075392-0.0294484j) - 4 (-0.004317+0.0016862j) - 5 (-0.0679076+0.0265245j) - 1 (-0.0093844+0.0115817j) - 2 (0.0043307-0.0053446j) - 3 (0.0458969-0.0566433j) - 4 (0.0137151-0.0169263j) - 5 (0.0509559-0.0628862j) - 1 -0j - 2 -0j - 3 (-0+0j) - 4 -0j - 5 (-0+0j) - 1 (-0.1521792+0.3326347j) - 2 (0.1521812-0.3326391j) - 3 (1e-07-2e-07j) - 4 (-0.1521812+0.3326391j) - 5 (-0+0j) - 1 (0.0029886-0.0071622j) - 2 (0.1776027-0.4256265j) - 3 (0.0002321-0.0005562j) - 4 (0.1746142-0.4184644j) - 5 (-0.0157926+0.037847j) - 1 (0.4906235-0.195294j) - 2 (0.2390641-0.0951602j) - 3 (0.0381021-0.0151667j) - 4 (-0.251553+0.1001313j) - 5 (0.00056-0.0002229j) -10 21 - 1 (-0.191392-0.025753j) - 2 (-0.191392-0.025753j) - 3 (1e-07+0j) - 4 (-0.191392-0.025753j) - 5 (-0-0j) - 1 (0.0133511+0.0142481j) - 2 (-0.0459177-0.0490024j) - 3 (-0.1149507-0.1226732j) - 4 (0.0325665+0.0347542j) - 5 (0.390135+0.4163429j) - 1 (-0.0645688-0.0149168j) - 2 (0.0158085+0.0036521j) - 3 (0.5559247+0.1284306j) - 4 (0.0487605+0.0112647j) - 5 (0.1638+0.0378409j) - 1 (-0.3319918-0.09241j) - 2 (-0.3319918-0.09241j) - 3 (1e-07+0j) - 4 (-0.3319918-0.09241j) - 5 (-0-0j) - 1 (-0.4264657+0.267294j) - 2 (0.2137561-0.1339152j) - 3 (-0.0902642+0.0565745j) - 4 (0.2127096-0.1333788j) - 5 (0.0001279-6.56e-05j) - 1 (-0.0006788-1.4e-05j) - 2 (-0.4330527-0.046475j) - 3 (-0.0001437-3e-06j) - 4 (0.4337315+0.0464891j) - 5 (-0.1059209-0.0113602j) - 1 (0.0002977+0.0018608j) - 2 (-0.0031864-0.0199086j) - 3 (0.001456+0.009101j) - 4 (0.0028887+0.0180478j) - 5 (-0.0171543-0.1071772j) - 1 (0.0219872+0.0030155j) - 2 (-0.0093767-0.0012861j) - 3 (0.1075346+0.0147484j) - 4 (-0.0126105-0.0017294j) - 5 (0.0091313+0.0012517j) - 1 (-0+0j) - 2 (-0+0j) - 3 -0j - 4 (-0-0j) - 5 -0j - 1 (-0.3644743+0.0310289j) - 2 (-0.3644792+0.0310293j) - 3 (-3e-07+0j) - 4 (-0.3644791+0.0310293j) - 5 -0j - 1 (0.0046487+0.0021692j) - 2 (-0.4167665-0.1944743j) - 3 (-0.000361-0.0001685j) - 4 (0.412118+0.1923052j) - 5 (0.0371652+0.0173423j) - 1 (0.4189292-0.3215328j) - 2 (-0.2059377+0.1580595j) - 3 (-0.0325343+0.0249704j) - 4 (-0.2129861+0.1634692j) - 5 (-0.000316+0.0002426j) diff --git a/test/plovasp/proj_group/runtest.sh b/test/plovasp/proj_group/runtest.sh deleted file mode 100755 index 10b8ee04..00000000 --- a/test/plovasp/proj_group/runtest.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../..:../../../../../c:$PYTHONPATH python $1 diff --git a/test/plovasp/proj_shell/runtest.sh b/test/plovasp/proj_shell/runtest.sh deleted file mode 100755 index 10b8ee04..00000000 --- a/test/plovasp/proj_shell/runtest.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../..:../../../../../c:$PYTHONPATH python $1 diff --git a/test/plovasp/run_all.sh b/test/plovasp/run_all.sh deleted file mode 100755 index cb9a28eb..00000000 --- a/test/plovasp/run_all.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../:../../../../c:$PYTHONPATH python test_all.py diff --git a/test/plovasp/vaspio/__init__.py b/test/plovasp/vaspio/__init__.py deleted file mode 100644 index e69de29b..00000000 diff --git a/test/plovasp/vaspio/runtest.sh b/test/plovasp/vaspio/runtest.sh deleted file mode 100755 index 4537817b..00000000 --- a/test/plovasp/vaspio/runtest.sh +++ /dev/null @@ -1 +0,0 @@ -PYTHONPATH=../..:../../../../c:$PYTHONPATH python $1 diff --git a/test/python/CMakeLists.txt b/test/python/CMakeLists.txt new file mode 100644 index 00000000..c880cc1c --- /dev/null +++ b/test/python/CMakeLists.txt @@ -0,0 +1,19 @@ +# Copy h5 files to binary dir +file(GLOB_RECURSE all_h5_ref_files RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.h5) +foreach(file ${all_h5_ref_files}) + configure_file(${file} ${file} COPYONLY) +endforeach() + +# Copy other files +FILE(COPY SrVO3.pmat SrVO3.struct SrVO3.outputs SrVO3.oubwin SrVO3.ctqmcout SrVO3.symqmc SrVO3.sympar SrVO3.parproj hk_convert_hamiltonian.hk LaVO3-Pnma_hr.dat LaVO3-Pnma.inp DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) + + +# List of all tests +file(GLOB all_tests RELATIVE ${CMAKE_CURRENT_SOURCE_DIR} *.py) + +foreach(test ${all_tests}) + get_filename_component(test_name ${test} NAME_WE) + get_filename_component(test_dir ${test} DIRECTORY) + add_test(NAME Py_${test_name} COMMAND ${TRIQS_PYTHON_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/${test_dir}/${test_name}.py WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/${test_dir}) + set_property(TEST Py_${test_name} APPEND PROPERTY ENVIRONMENT PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD}) +endforeach() diff --git a/test/LaVO3-Pnma.inp b/test/python/LaVO3-Pnma.inp similarity index 100% rename from test/LaVO3-Pnma.inp rename to test/python/LaVO3-Pnma.inp diff --git a/test/LaVO3-Pnma_hr.dat b/test/python/LaVO3-Pnma_hr.dat similarity index 100% rename from test/LaVO3-Pnma_hr.dat rename to test/python/LaVO3-Pnma_hr.dat diff --git a/test/SrIrO3_rot.h5 b/test/python/SrIrO3_rot.h5 similarity index 100% rename from test/SrIrO3_rot.h5 rename to test/python/SrIrO3_rot.h5 diff --git a/test/SrVO3.ctqmcout b/test/python/SrVO3.ctqmcout similarity index 100% rename from test/SrVO3.ctqmcout rename to test/python/SrVO3.ctqmcout diff --git a/test/SrVO3.h5 b/test/python/SrVO3.h5 similarity index 100% rename from test/SrVO3.h5 rename to test/python/SrVO3.h5 diff --git a/test/SrVO3.oubwin b/test/python/SrVO3.oubwin similarity index 100% rename from test/SrVO3.oubwin rename to test/python/SrVO3.oubwin diff --git a/test/SrVO3.outputs b/test/python/SrVO3.outputs similarity index 100% rename from test/SrVO3.outputs rename to test/python/SrVO3.outputs diff --git a/test/SrVO3.parproj b/test/python/SrVO3.parproj similarity index 100% rename from test/SrVO3.parproj rename to test/python/SrVO3.parproj diff --git a/test/SrVO3.pmat b/test/python/SrVO3.pmat similarity index 100% rename from test/SrVO3.pmat rename to test/python/SrVO3.pmat diff --git a/test/python/SrVO3.ref.h5 b/test/python/SrVO3.ref.h5 new file mode 100644 index 00000000..1d923255 Binary files /dev/null and b/test/python/SrVO3.ref.h5 differ diff --git a/test/SrVO3.struct b/test/python/SrVO3.struct similarity index 100% rename from test/SrVO3.struct rename to test/python/SrVO3.struct diff --git a/test/SrVO3.sympar b/test/python/SrVO3.sympar similarity index 100% rename from test/SrVO3.sympar rename to test/python/SrVO3.sympar diff --git a/test/SrVO3.symqmc b/test/python/SrVO3.symqmc similarity index 100% rename from test/SrVO3.symqmc rename to test/python/SrVO3.symqmc diff --git a/test/SrVO3_Sigma.h5 b/test/python/SrVO3_Sigma.h5 similarity index 100% rename from test/SrVO3_Sigma.h5 rename to test/python/SrVO3_Sigma.h5 diff --git a/test/analyse_block_structure_from_gf.py b/test/python/analyse_block_structure_from_gf.py similarity index 100% rename from test/analyse_block_structure_from_gf.py rename to test/python/analyse_block_structure_from_gf.py diff --git a/test/analyse_block_structure_from_gf.ref.h5 b/test/python/analyse_block_structure_from_gf.ref.h5 similarity index 100% rename from test/analyse_block_structure_from_gf.ref.h5 rename to test/python/analyse_block_structure_from_gf.ref.h5 diff --git a/test/analyse_block_structure_from_gf2.py b/test/python/analyse_block_structure_from_gf2.py similarity index 100% rename from test/analyse_block_structure_from_gf2.py rename to test/python/analyse_block_structure_from_gf2.py diff --git a/test/blockstructure.in.h5 b/test/python/blockstructure.in.h5 similarity index 100% rename from test/blockstructure.in.h5 rename to test/python/blockstructure.in.h5 diff --git a/test/blockstructure.py b/test/python/blockstructure.py similarity index 100% rename from test/blockstructure.py rename to test/python/blockstructure.py diff --git a/test/blockstructure.ref.h5 b/test/python/blockstructure.ref.h5 similarity index 100% rename from test/blockstructure.ref.h5 rename to test/python/blockstructure.ref.h5 diff --git a/test/hk_convert.py b/test/python/hk_convert.py similarity index 100% rename from test/hk_convert.py rename to test/python/hk_convert.py diff --git a/test/hk_convert.ref.h5 b/test/python/hk_convert.ref.h5 similarity index 100% rename from test/hk_convert.ref.h5 rename to test/python/hk_convert.ref.h5 diff --git a/test/hk_convert_hamiltonian.hk b/test/python/hk_convert_hamiltonian.hk similarity index 100% rename from test/hk_convert_hamiltonian.hk rename to test/python/hk_convert_hamiltonian.hk diff --git a/c++/plovasp/.gitignore b/test/python/plovasp/.gitignore similarity index 100% rename from c++/plovasp/.gitignore rename to test/python/plovasp/.gitignore diff --git a/test/plovasp/CMakeLists.txt b/test/python/plovasp/CMakeLists.txt similarity index 52% rename from test/plovasp/CMakeLists.txt rename to test/python/plovasp/CMakeLists.txt index 3004dadd..88e68eee 100644 --- a/test/plovasp/CMakeLists.txt +++ b/test/python/plovasp/CMakeLists.txt @@ -12,8 +12,9 @@ set(all_tests FILE(COPY ${all_tests} DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) FILE(COPY run_suite.py DESTINATION ${CMAKE_CURRENT_BINARY_DIR}) -foreach(t ${all_tests}) - add_test(NAME ${t} COMMAND ${python_executable} run_suite.py ${t}) +foreach(test_name ${all_tests}) + add_test(NAME Py_${test_name} COMMAND ${TRIQS_PYTHON_EXECUTABLE} run_suite.py ${t}) + set_property(TEST Py_${test_name} APPEND PROPERTY ENVIRONMENT PYTHONPATH=${PROJECT_BINARY_DIR}/python:$ENV{PYTHONPATH} ${SANITIZER_RT_PRELOAD}) endforeach() -set_property(TEST ${all_tests} PROPERTY ENVIRONMENT PYTHONPATH=${CMAKE_BINARY_DIR}/python:$ENV{PYTHONPATH} ) + diff --git a/test/plovasp/atm/mytest.py b/test/python/plovasp/atm/mytest.py similarity index 100% rename from test/plovasp/atm/mytest.py rename to test/python/plovasp/atm/mytest.py diff --git a/test/plovasp/atm/test_atm.py b/test/python/plovasp/atm/test_atm.py similarity index 100% rename from test/plovasp/atm/test_atm.py rename to test/python/plovasp/atm/test_atm.py diff --git a/test/plovasp/converter/example.cfg b/test/python/plovasp/converter/example.cfg similarity index 100% rename from test/plovasp/converter/example.cfg rename to test/python/plovasp/converter/example.cfg diff --git a/test/plovasp/converter/lunio3.cfg b/test/python/plovasp/converter/lunio3.cfg similarity index 100% rename from test/plovasp/converter/lunio3.cfg rename to test/python/plovasp/converter/lunio3.cfg diff --git a/test/plovasp/converter/lunio3.out.h5 b/test/python/plovasp/converter/lunio3.ref.h5 similarity index 100% rename from test/plovasp/converter/lunio3.out.h5 rename to test/python/plovasp/converter/lunio3.ref.h5 diff --git a/test/plovasp/converter/lunio3/DOSCAR b/test/python/plovasp/converter/lunio3/DOSCAR similarity index 100% rename from test/plovasp/converter/lunio3/DOSCAR rename to test/python/plovasp/converter/lunio3/DOSCAR diff --git a/test/plovasp/converter/lunio3/IBZKPT b/test/python/plovasp/converter/lunio3/IBZKPT similarity index 100% rename from test/plovasp/converter/lunio3/IBZKPT rename to test/python/plovasp/converter/lunio3/IBZKPT diff --git a/test/plovasp/converter/lunio3/LOCPROJ b/test/python/plovasp/converter/lunio3/LOCPROJ similarity index 100% rename from test/plovasp/converter/lunio3/LOCPROJ rename to test/python/plovasp/converter/lunio3/LOCPROJ diff --git a/test/plovasp/converter/lunio3/POSCAR b/test/python/plovasp/converter/lunio3/POSCAR similarity index 100% rename from test/plovasp/converter/lunio3/POSCAR rename to test/python/plovasp/converter/lunio3/POSCAR diff --git a/test/plovasp/converter/lunio3/readme.txt b/test/python/plovasp/converter/lunio3/readme.txt similarity index 100% rename from test/plovasp/converter/lunio3/readme.txt rename to test/python/plovasp/converter/lunio3/readme.txt diff --git a/test/plovasp/converter/lunio3/rot_dz2_dx2 b/test/python/plovasp/converter/lunio3/rot_dz2_dx2 similarity index 100% rename from test/plovasp/converter/lunio3/rot_dz2_dx2 rename to test/python/plovasp/converter/lunio3/rot_dz2_dx2 diff --git a/test/plovasp/converter/lunio3/test_lunio3.tar.gz b/test/python/plovasp/converter/lunio3/test_lunio3.tar.gz similarity index 100% rename from test/plovasp/converter/lunio3/test_lunio3.tar.gz rename to test/python/plovasp/converter/lunio3/test_lunio3.tar.gz diff --git a/test/plovasp/converter/mytest.py b/test/python/plovasp/converter/mytest.py similarity index 100% rename from test/plovasp/converter/mytest.py rename to test/python/plovasp/converter/mytest.py diff --git a/test/plovasp/converter/one_site/DOSCAR b/test/python/plovasp/converter/one_site/DOSCAR similarity index 100% rename from test/plovasp/converter/one_site/DOSCAR rename to test/python/plovasp/converter/one_site/DOSCAR diff --git a/test/plovasp/converter/one_site/IBZKPT b/test/python/plovasp/converter/one_site/IBZKPT similarity index 100% rename from test/plovasp/converter/one_site/IBZKPT rename to test/python/plovasp/converter/one_site/IBZKPT diff --git a/test/plovasp/converter/one_site/LOCPROJ b/test/python/plovasp/converter/one_site/LOCPROJ similarity index 100% rename from test/plovasp/converter/one_site/LOCPROJ rename to test/python/plovasp/converter/one_site/LOCPROJ diff --git a/test/plovasp/converter/one_site/POSCAR b/test/python/plovasp/converter/one_site/POSCAR similarity index 100% rename from test/plovasp/converter/one_site/POSCAR rename to test/python/plovasp/converter/one_site/POSCAR diff --git a/test/plovasp/converter/one_site/PROJCAR b/test/python/plovasp/converter/one_site/PROJCAR similarity index 100% rename from test/plovasp/converter/one_site/PROJCAR rename to test/python/plovasp/converter/one_site/PROJCAR diff --git a/test/plovasp/converter/one_site/readme.txt b/test/python/plovasp/converter/one_site/readme.txt similarity index 100% rename from test/plovasp/converter/one_site/readme.txt rename to test/python/plovasp/converter/one_site/readme.txt diff --git a/test/plovasp/converter/pg_output.out.h5 b/test/python/plovasp/converter/pg_output.ref.h5 similarity index 100% rename from test/plovasp/converter/pg_output.out.h5 rename to test/python/plovasp/converter/pg_output.ref.h5 diff --git a/test/plovasp/converter/rpath.py b/test/python/plovasp/converter/rpath.py similarity index 100% rename from test/plovasp/converter/rpath.py rename to test/python/plovasp/converter/rpath.py diff --git a/test/plovasp/converter/test_all.py b/test/python/plovasp/converter/test_all.py similarity index 100% rename from test/plovasp/converter/test_all.py rename to test/python/plovasp/converter/test_all.py diff --git a/test/plovasp/converter/test_converter_lunio3.py b/test/python/plovasp/converter/test_converter_lunio3.py similarity index 90% rename from test/plovasp/converter/test_converter_lunio3.py rename to test/python/plovasp/converter/test_converter_lunio3.py index 1d9a2eb0..ced2a045 100644 --- a/test/plovasp/converter/test_converter_lunio3.py +++ b/test/python/plovasp/converter/test_converter_lunio3.py @@ -29,12 +29,12 @@ class TestConverterLuNiO3(mytest.MyTestCase): generate_and_output_as_text(_rpath + 'lunio3.cfg', _rpath + 'lunio3/') test_file = _rpath + 'lunio3.test.h5' - converter = VaspConverter(filename=_rpath + 'lunio3', + converter = VaspConverter(filename=_rpath + 'lunio3', hdf_filename=test_file) converter.convert_dft_input() - expected_file = _rpath + 'lunio3.out.h5' + expected_file = _rpath + 'lunio3.ref.h5' self.assertH5FileEqual(test_file, expected_file) if __name__ == '__main__': diff --git a/test/plovasp/converter/test_converter_one_site.py b/test/python/plovasp/converter/test_converter_one_site.py similarity index 95% rename from test/plovasp/converter/test_converter_one_site.py rename to test/python/plovasp/converter/test_converter_one_site.py index a53b9bce..29385160 100644 --- a/test/plovasp/converter/test_converter_one_site.py +++ b/test/python/plovasp/converter/test_converter_one_site.py @@ -34,7 +34,7 @@ class TestConverterOneSite(mytest.MyTestCase): converter.convert_dft_input() - expected_file = _rpath + 'pg_output.out.h5' + expected_file = _rpath + 'pg_output.ref.h5' self.assertH5FileEqual(test_file, expected_file) if __name__ == '__main__': diff --git a/python/.gitignore b/test/python/plovasp/inpconf/.gitignore similarity index 100% rename from python/.gitignore rename to test/python/plovasp/inpconf/.gitignore diff --git a/c++/plovasp/__init__.py b/test/python/plovasp/inpconf/__init__.py similarity index 100% rename from c++/plovasp/__init__.py rename to test/python/plovasp/inpconf/__init__.py diff --git a/test/plovasp/inpconf/arraytest.py b/test/python/plovasp/inpconf/arraytest.py similarity index 100% rename from test/plovasp/inpconf/arraytest.py rename to test/python/plovasp/inpconf/arraytest.py diff --git a/test/plovasp/inpconf/example.cfg b/test/python/plovasp/inpconf/example.cfg similarity index 100% rename from test/plovasp/inpconf/example.cfg rename to test/python/plovasp/inpconf/example.cfg diff --git a/test/plovasp/inpconf/example_nogroup.cfg b/test/python/plovasp/inpconf/example_nogroup.cfg similarity index 100% rename from test/plovasp/inpconf/example_nogroup.cfg rename to test/python/plovasp/inpconf/example_nogroup.cfg diff --git a/test/plovasp/inpconf/input_test_1.cfg b/test/python/plovasp/inpconf/input_test_1.cfg similarity index 100% rename from test/plovasp/inpconf/input_test_1.cfg rename to test/python/plovasp/inpconf/input_test_1.cfg diff --git a/test/plovasp/inpconf/input_test_2.cfg b/test/python/plovasp/inpconf/input_test_2.cfg similarity index 100% rename from test/plovasp/inpconf/input_test_2.cfg rename to test/python/plovasp/inpconf/input_test_2.cfg diff --git a/test/plovasp/inpconf/input_test_3.cfg b/test/python/plovasp/inpconf/input_test_3.cfg similarity index 100% rename from test/plovasp/inpconf/input_test_3.cfg rename to test/python/plovasp/inpconf/input_test_3.cfg diff --git a/test/plovasp/inpconf/input_test_4.cfg b/test/python/plovasp/inpconf/input_test_4.cfg similarity index 100% rename from test/plovasp/inpconf/input_test_4.cfg rename to test/python/plovasp/inpconf/input_test_4.cfg diff --git a/test/plovasp/inpconf/parse_groups_1.cfg b/test/python/plovasp/inpconf/parse_groups_1.cfg similarity index 100% rename from test/plovasp/inpconf/parse_groups_1.cfg rename to test/python/plovasp/inpconf/parse_groups_1.cfg diff --git a/test/plovasp/inpconf/parse_shells_1.cfg b/test/python/plovasp/inpconf/parse_shells_1.cfg similarity index 100% rename from test/plovasp/inpconf/parse_shells_1.cfg rename to test/python/plovasp/inpconf/parse_shells_1.cfg diff --git a/test/plovasp/inpconf/parse_shells_2.cfg b/test/python/plovasp/inpconf/parse_shells_2.cfg similarity index 100% rename from test/plovasp/inpconf/parse_shells_2.cfg rename to test/python/plovasp/inpconf/parse_shells_2.cfg diff --git a/test/plovasp/inpconf/parse_shells_3.cfg b/test/python/plovasp/inpconf/parse_shells_3.cfg similarity index 100% rename from test/plovasp/inpconf/parse_shells_3.cfg rename to test/python/plovasp/inpconf/parse_shells_3.cfg diff --git a/test/plovasp/inpconf/parse_shells_4.cfg b/test/python/plovasp/inpconf/parse_shells_4.cfg similarity index 100% rename from test/plovasp/inpconf/parse_shells_4.cfg rename to test/python/plovasp/inpconf/parse_shells_4.cfg diff --git a/test/plovasp/inpconf/parse_shells_5.cfg b/test/python/plovasp/inpconf/parse_shells_5.cfg similarity index 100% rename from test/plovasp/inpconf/parse_shells_5.cfg rename to test/python/plovasp/inpconf/parse_shells_5.cfg diff --git a/test/plovasp/inpconf/rpath.py b/test/python/plovasp/inpconf/rpath.py similarity index 100% rename from test/plovasp/inpconf/rpath.py rename to test/python/plovasp/inpconf/rpath.py diff --git a/test/plovasp/inpconf/test1.cfg b/test/python/plovasp/inpconf/test1.cfg similarity index 100% rename from test/plovasp/inpconf/test1.cfg rename to test/python/plovasp/inpconf/test1.cfg diff --git a/test/plovasp/inpconf/test_all.py b/test/python/plovasp/inpconf/test_all.py similarity index 100% rename from test/plovasp/inpconf/test_all.py rename to test/python/plovasp/inpconf/test_all.py diff --git a/test/plovasp/inpconf/test_general.py b/test/python/plovasp/inpconf/test_general.py similarity index 95% rename from test/plovasp/inpconf/test_general.py rename to test/python/plovasp/inpconf/test_general.py index b30d3879..1d1316da 100644 --- a/test/plovasp/inpconf/test_general.py +++ b/test/python/plovasp/inpconf/test_general.py @@ -2,10 +2,10 @@ r""" Tests of 'parse_general()' defined in ConfigParameters class """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import arraytest +from . import arraytest import numpy as np from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters diff --git a/test/plovasp/inpconf/test_groups.py b/test/python/plovasp/inpconf/test_groups.py similarity index 97% rename from test/plovasp/inpconf/test_groups.py rename to test/python/plovasp/inpconf/test_groups.py index f09b2498..af078fa1 100644 --- a/test/plovasp/inpconf/test_groups.py +++ b/test/python/plovasp/inpconf/test_groups.py @@ -2,10 +2,10 @@ r""" Tests of 'parse_groups()' defined in ConfigParameters class """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import arraytest +from . import arraytest import numpy as np from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters diff --git a/test/plovasp/inpconf/test_input.py b/test/python/plovasp/inpconf/test_input.py similarity index 98% rename from test/plovasp/inpconf/test_input.py rename to test/python/plovasp/inpconf/test_input.py index 9a3652be..9784491f 100644 --- a/test/plovasp/inpconf/test_input.py +++ b/test/python/plovasp/inpconf/test_input.py @@ -2,10 +2,10 @@ r""" Tests of 'parse_input()' defined in ConfigParameters class """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import arraytest +from . import arraytest import numpy as np from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters diff --git a/test/plovasp/inpconf/test_parameter_set.py b/test/python/plovasp/inpconf/test_parameter_set.py similarity index 97% rename from test/plovasp/inpconf/test_parameter_set.py rename to test/python/plovasp/inpconf/test_parameter_set.py index dfa92d4b..de794cb2 100644 --- a/test/plovasp/inpconf/test_parameter_set.py +++ b/test/python/plovasp/inpconf/test_parameter_set.py @@ -2,10 +2,10 @@ r""" Tests of 'parse_parameter_set()' defined in ConfigParameters class """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import arraytest +from . import arraytest import numpy as np from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters @@ -49,4 +49,4 @@ class TestParseParameterSet(arraytest.ArrayTestCase): err_mess = "Required parameter" # .* in section [%s]"%(section) with self.assertRaisesRegex(Exception, err_mess): self.cpars.parse_parameter_set(section, param_set, exception=True) - + diff --git a/test/plovasp/inpconf/test_shells.py b/test/python/plovasp/inpconf/test_shells.py similarity index 98% rename from test/plovasp/inpconf/test_shells.py rename to test/python/plovasp/inpconf/test_shells.py index 70f4c988..ecbc9271 100644 --- a/test/plovasp/inpconf/test_shells.py +++ b/test/python/plovasp/inpconf/test_shells.py @@ -2,10 +2,10 @@ r""" Tests of 'parse_shells()' defined in ConfigParameters class """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import arraytest +from . import arraytest import numpy as np from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters diff --git a/test/plovasp/inpconf/test_special_parsers.py b/test/python/plovasp/inpconf/test_special_parsers.py similarity index 99% rename from test/plovasp/inpconf/test_special_parsers.py rename to test/python/plovasp/inpconf/test_special_parsers.py index 0ff0b976..d3d01f27 100644 --- a/test/plovasp/inpconf/test_special_parsers.py +++ b/test/python/plovasp/inpconf/test_special_parsers.py @@ -2,10 +2,10 @@ r""" Tests of special parseres defined in ConfigParameters class """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import arraytest +from . import arraytest import numpy as np from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters diff --git a/test/plovasp/inpconf/tmatrix_file.dat b/test/python/plovasp/inpconf/tmatrix_file.dat similarity index 100% rename from test/plovasp/inpconf/tmatrix_file.dat rename to test/python/plovasp/inpconf/tmatrix_file.dat diff --git a/test/plovasp/plocar_io/.gitignore b/test/python/plovasp/plocar_io/.gitignore similarity index 100% rename from test/plovasp/plocar_io/.gitignore rename to test/python/plovasp/plocar_io/.gitignore diff --git a/test/plovasp/plocar_io/PLOCAR.example b/test/python/plovasp/plocar_io/PLOCAR.example similarity index 100% rename from test/plovasp/plocar_io/PLOCAR.example rename to test/python/plovasp/plocar_io/PLOCAR.example diff --git a/test/plovasp/plocar_io/PLOCAR.example.out b/test/python/plovasp/plocar_io/PLOCAR.example.out similarity index 100% rename from test/plovasp/plocar_io/PLOCAR.example.out rename to test/python/plovasp/plocar_io/PLOCAR.example.out diff --git a/test/plovasp/plocar_io/PLOCAR.noprec b/test/python/plovasp/plocar_io/PLOCAR.noprec similarity index 100% rename from test/plovasp/plocar_io/PLOCAR.noprec rename to test/python/plovasp/plocar_io/PLOCAR.noprec diff --git a/test/plovasp/plocar_io/PLOCAR.prec8 b/test/python/plovasp/plocar_io/PLOCAR.prec8 similarity index 100% rename from test/plovasp/plocar_io/PLOCAR.prec8 rename to test/python/plovasp/plocar_io/PLOCAR.prec8 diff --git a/test/plovasp/plocar_io/PLOCAR.prec8.out b/test/python/plovasp/plocar_io/PLOCAR.prec8.out similarity index 100% rename from test/plovasp/plocar_io/PLOCAR.prec8.out rename to test/python/plovasp/plocar_io/PLOCAR.prec8.out diff --git a/test/plovasp/plocar_io/PLOCAR.trunc b/test/python/plovasp/plocar_io/PLOCAR.trunc similarity index 100% rename from test/plovasp/plocar_io/PLOCAR.trunc rename to test/python/plovasp/plocar_io/PLOCAR.trunc diff --git a/test/plovasp/plocar_io/mytest.py b/test/python/plovasp/plocar_io/mytest.py similarity index 100% rename from test/plovasp/plocar_io/mytest.py rename to test/python/plovasp/plocar_io/mytest.py diff --git a/test/plovasp/plocar_io/test_fileio.py b/test/python/plovasp/plocar_io/test_fileio.py similarity index 100% rename from test/plovasp/plocar_io/test_fileio.py rename to test/python/plovasp/plocar_io/test_fileio.py diff --git a/test/plovasp/plocar_io/test_plocar_io.py b/test/python/plovasp/plocar_io/test_plocar_io.py similarity index 100% rename from test/plovasp/plocar_io/test_plocar_io.py rename to test/python/plovasp/plocar_io/test_plocar_io.py diff --git a/test/plovasp/plotools/.gitignore b/test/python/plovasp/plotools/.gitignore similarity index 100% rename from test/plovasp/plotools/.gitignore rename to test/python/plovasp/plotools/.gitignore diff --git a/test/plovasp/plotools/DOSCAR b/test/python/plovasp/plotools/DOSCAR similarity index 100% rename from test/plovasp/plotools/DOSCAR rename to test/python/plovasp/plotools/DOSCAR diff --git a/test/plovasp/plotools/EIGENVAL b/test/python/plovasp/plotools/EIGENVAL similarity index 100% rename from test/plovasp/plotools/EIGENVAL rename to test/python/plovasp/plotools/EIGENVAL diff --git a/test/plovasp/plotools/IBZKPT b/test/python/plovasp/plotools/IBZKPT similarity index 100% rename from test/plovasp/plotools/IBZKPT rename to test/python/plovasp/plotools/IBZKPT diff --git a/test/plovasp/plotools/OUTCAR b/test/python/plovasp/plotools/OUTCAR similarity index 100% rename from test/plovasp/plotools/OUTCAR rename to test/python/plovasp/plotools/OUTCAR diff --git a/test/plovasp/plotools/PLOCAR b/test/python/plovasp/plotools/PLOCAR similarity index 100% rename from test/plovasp/plotools/PLOCAR rename to test/python/plovasp/plotools/PLOCAR diff --git a/test/plovasp/plotools/POSCAR b/test/python/plovasp/plotools/POSCAR similarity index 100% rename from test/plovasp/plotools/POSCAR rename to test/python/plovasp/plotools/POSCAR diff --git a/test/plovasp/plotools/POSCAR.complex b/test/python/plovasp/plotools/POSCAR.complex similarity index 100% rename from test/plovasp/plotools/POSCAR.complex rename to test/python/plovasp/plotools/POSCAR.complex diff --git a/test/plovasp/plotools/example.cfg b/test/python/plovasp/plotools/example.cfg similarity index 100% rename from test/plovasp/plotools/example.cfg rename to test/python/plovasp/plotools/example.cfg diff --git a/test/plovasp/plotools/mytest.py b/test/python/plovasp/plotools/mytest.py similarity index 100% rename from test/plovasp/plotools/mytest.py rename to test/python/plovasp/plotools/mytest.py diff --git a/test/plovasp/plotools/rpath.py b/test/python/plovasp/plotools/rpath.py similarity index 100% rename from test/plovasp/plotools/rpath.py rename to test/python/plovasp/plotools/rpath.py diff --git a/test/plovasp/plotools/test_all.py b/test/python/plovasp/plotools/test_all.py similarity index 100% rename from test/plovasp/plotools/test_all.py rename to test/python/plovasp/plotools/test_all.py diff --git a/test/plovasp/plotools/test_consistency.py b/test/python/plovasp/plotools/test_consistency.py similarity index 98% rename from test/plovasp/plotools/test_consistency.py rename to test/python/plovasp/plotools/test_consistency.py index 8b79935c..bd1c9ee5 100644 --- a/test/plovasp/plotools/test_consistency.py +++ b/test/python/plovasp/plotools/test_consistency.py @@ -3,7 +3,7 @@ import triqs_dft_tools.converters.plovasp.vaspio from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters from triqs_dft_tools.converters.plovasp.plotools import check_data_consistency from triqs_dft_tools.converters.plovasp.elstruct import ElectronicStructure -import mytest +from . import mytest ################################################################################ # diff --git a/test/plovasp/plotools/wrong_shell.cfg b/test/python/plovasp/plotools/wrong_shell.cfg similarity index 100% rename from test/plovasp/plotools/wrong_shell.cfg rename to test/python/plovasp/plotools/wrong_shell.cfg diff --git a/test/plovasp/proj_group/.gitignore b/test/python/plovasp/proj_group/.gitignore similarity index 100% rename from test/plovasp/proj_group/.gitignore rename to test/python/plovasp/proj_group/.gitignore diff --git a/test/plovasp/inpconf/__init__.py b/test/python/plovasp/proj_group/__init__.py similarity index 100% rename from test/plovasp/inpconf/__init__.py rename to test/python/plovasp/proj_group/__init__.py diff --git a/test/plovasp/proj_group/block_matrix.cfg b/test/python/plovasp/proj_group/block_matrix.cfg similarity index 100% rename from test/plovasp/proj_group/block_matrix.cfg rename to test/python/plovasp/proj_group/block_matrix.cfg diff --git a/test/plovasp/proj_group/example.cfg b/test/python/plovasp/proj_group/example.cfg similarity index 100% rename from test/plovasp/proj_group/example.cfg rename to test/python/plovasp/proj_group/example.cfg diff --git a/test/plovasp/proj_group/example_two_site.cfg b/test/python/plovasp/proj_group/example_two_site.cfg similarity index 100% rename from test/plovasp/proj_group/example_two_site.cfg rename to test/python/plovasp/proj_group/example_two_site.cfg diff --git a/test/plovasp/proj_group/hk.out.h5 b/test/python/plovasp/proj_group/hk.ref.h5 similarity index 100% rename from test/plovasp/proj_group/hk.out.h5 rename to test/python/plovasp/proj_group/hk.ref.h5 diff --git a/test/plovasp/proj_group/mytest.py b/test/python/plovasp/proj_group/mytest.py similarity index 100% rename from test/plovasp/proj_group/mytest.py rename to test/python/plovasp/proj_group/mytest.py diff --git a/test/plovasp/proj_group/one_site/DOSCAR b/test/python/plovasp/proj_group/one_site/DOSCAR similarity index 100% rename from test/plovasp/proj_group/one_site/DOSCAR rename to test/python/plovasp/proj_group/one_site/DOSCAR diff --git a/test/plovasp/proj_group/one_site/EIGENVAL b/test/python/plovasp/proj_group/one_site/EIGENVAL similarity index 100% rename from test/plovasp/proj_group/one_site/EIGENVAL rename to test/python/plovasp/proj_group/one_site/EIGENVAL diff --git a/test/plovasp/proj_group/one_site/IBZKPT b/test/python/plovasp/proj_group/one_site/IBZKPT similarity index 100% rename from test/plovasp/proj_group/one_site/IBZKPT rename to test/python/plovasp/proj_group/one_site/IBZKPT diff --git a/test/plovasp/proj_group/one_site/LOCPROJ b/test/python/plovasp/proj_group/one_site/LOCPROJ similarity index 100% rename from test/plovasp/proj_group/one_site/LOCPROJ rename to test/python/plovasp/proj_group/one_site/LOCPROJ diff --git a/test/plovasp/proj_group/one_site/POSCAR b/test/python/plovasp/proj_group/one_site/POSCAR similarity index 100% rename from test/plovasp/proj_group/one_site/POSCAR rename to test/python/plovasp/proj_group/one_site/POSCAR diff --git a/test/plovasp/proj_group/projortho.out.h5 b/test/python/plovasp/proj_group/projortho.ref.h5 similarity index 100% rename from test/plovasp/proj_group/projortho.out.h5 rename to test/python/plovasp/proj_group/projortho.ref.h5 diff --git a/test/plovasp/proj_group/projortho_2site.out.h5 b/test/python/plovasp/proj_group/projortho_2site.ref.h5 similarity index 100% rename from test/plovasp/proj_group/projortho_2site.out.h5 rename to test/python/plovasp/proj_group/projortho_2site.ref.h5 diff --git a/test/plovasp/proj_group/projortho_normion.out.h5 b/test/python/plovasp/proj_group/projortho_normion.ref.h5 similarity index 100% rename from test/plovasp/proj_group/projortho_normion.out.h5 rename to test/python/plovasp/proj_group/projortho_normion.ref.h5 diff --git a/test/plovasp/proj_group/rpath.py b/test/python/plovasp/proj_group/rpath.py similarity index 100% rename from test/plovasp/proj_group/rpath.py rename to test/python/plovasp/proj_group/rpath.py diff --git a/test/plovasp/proj_group/simple.cfg b/test/python/plovasp/proj_group/simple.cfg similarity index 100% rename from test/plovasp/proj_group/simple.cfg rename to test/python/plovasp/proj_group/simple.cfg diff --git a/test/plovasp/proj_group/simple/DOSCAR b/test/python/plovasp/proj_group/simple/DOSCAR similarity index 100% rename from test/plovasp/proj_group/simple/DOSCAR rename to test/python/plovasp/proj_group/simple/DOSCAR diff --git a/test/plovasp/proj_group/simple/IBZKPT b/test/python/plovasp/proj_group/simple/IBZKPT similarity index 100% rename from test/plovasp/proj_group/simple/IBZKPT rename to test/python/plovasp/proj_group/simple/IBZKPT diff --git a/test/plovasp/proj_group/simple/LOCPROJ b/test/python/plovasp/proj_group/simple/LOCPROJ similarity index 100% rename from test/plovasp/proj_group/simple/LOCPROJ rename to test/python/plovasp/proj_group/simple/LOCPROJ diff --git a/test/plovasp/proj_group/simple/POSCAR b/test/python/plovasp/proj_group/simple/POSCAR similarity index 100% rename from test/plovasp/proj_group/simple/POSCAR rename to test/python/plovasp/proj_group/simple/POSCAR diff --git a/test/plovasp/proj_group/test_all.py b/test/python/plovasp/proj_group/test_all.py similarity index 100% rename from test/plovasp/proj_group/test_all.py rename to test/python/plovasp/proj_group/test_all.py diff --git a/test/plovasp/proj_group/test_block_map.py b/test/python/plovasp/proj_group/test_block_map.py similarity index 98% rename from test/plovasp/proj_group/test_block_map.py rename to test/python/plovasp/proj_group/test_block_map.py index 2c923226..b51068db 100644 --- a/test/plovasp/proj_group/test_block_map.py +++ b/test/python/plovasp/proj_group/test_block_map.py @@ -1,13 +1,13 @@ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' import numpy as np from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters from triqs_dft_tools.converters.plovasp.proj_shell import ProjectorShell from triqs_dft_tools.converters.plovasp.proj_group import ProjectorGroup -import mytest +from . import mytest ################################################################################ # diff --git a/test/plovasp/proj_group/test_one_site.py b/test/python/plovasp/proj_group/test_one_site.py similarity index 92% rename from test/plovasp/proj_group/test_one_site.py rename to test/python/plovasp/proj_group/test_one_site.py index d7bcbae5..738c6f7e 100644 --- a/test/plovasp/proj_group/test_one_site.py +++ b/test/python/plovasp/proj_group/test_one_site.py @@ -1,6 +1,6 @@ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' import numpy as np @@ -10,7 +10,7 @@ from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters from triqs_dft_tools.converters.plovasp.proj_shell import ProjectorShell from triqs_dft_tools.converters.plovasp.proj_group import ProjectorGroup from h5 import HDFArchive -import mytest +from . import mytest ################################################################################ # @@ -61,8 +61,7 @@ class TestProjectorGroup(mytest.MyTestCase): # FIXME: seems redundant, as 'overl' is written to the file anyway self.assertEqual(overl, np.eye(5)) -# expected_file = _rpath + 'projortho.out' - expected_file = _rpath + 'projortho.out.h5' + expected_file = _rpath + 'projortho.ref.h5' # self.assertFileEqual(testout, expected_file) self.assertH5FileEqual(testout, expected_file) @@ -85,17 +84,16 @@ class TestProjectorGroup(mytest.MyTestCase): # FIXME: seems redundant, as 'overl' is written to the file anyway self.assertEqual(overl, np.eye(5)) -# expected_file = _rpath + 'projortho.out' # self.assertFileEqual(testout, expected_file) - expected_file = _rpath + 'projortho.out.h5' + expected_file = _rpath + 'projortho.ref.h5' self.assertH5FileEqual(testout, expected_file) - + def test_hk(self): self.proj_gr.orthogonalize() self.proj_gr.calc_hk(self.eigvals) - + testout = _rpath + 'hk.test.h5' with HDFArchive(testout, 'w') as h5test: h5test['hk'] = self.proj_gr.hk - expected_file = _rpath + 'hk.out.h5' + expected_file = _rpath + 'hk.ref.h5' self.assertH5FileEqual(testout, expected_file) diff --git a/test/plovasp/proj_group/test_one_site_compl.py b/test/python/plovasp/proj_group/test_one_site_compl.py similarity index 92% rename from test/plovasp/proj_group/test_one_site_compl.py rename to test/python/plovasp/proj_group/test_one_site_compl.py index 8713ebe4..fc5f15e3 100644 --- a/test/plovasp/proj_group/test_one_site_compl.py +++ b/test/python/plovasp/proj_group/test_one_site_compl.py @@ -1,6 +1,6 @@ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' import numpy as np @@ -10,7 +10,7 @@ from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters from triqs_dft_tools.converters.plovasp.proj_shell import ProjectorShell from triqs_dft_tools.converters.plovasp.proj_group import ProjectorGroup from h5 import HDFArchive -import mytest +from . import mytest ################################################################################ # @@ -36,43 +36,43 @@ class TestProjectorGroupCompl(mytest.MyTestCase): efermi = self.el_struct.efermi self.eigvals = self.el_struct.eigvals - efermi - + struct = self.el_struct.structure kmesh = self.el_struct.kmesh - + self.proj_sh = ProjectorShell(self.pars.shells[0], vasp_data.plocar.plo, vasp_data.plocar.proj_params, kmesh, struct, 0) - + def test_num_bands(self): - self.pars.groups[0]['complement'] = True + self.pars.groups[0]['complement'] = True err_mess = "At each band the same number" with self.assertRaisesRegex(AssertionError, err_mess): - self.proj_gr = ProjectorGroup(self.pars.groups[0], [self.proj_sh], self.eigvals) - + self.proj_gr = ProjectorGroup(self.pars.groups[0], [self.proj_sh], self.eigvals) + def test_compl(self): self.pars.groups[0]['complement'] = True self.pars.groups[0]['bands'] = [10, 25] - + self.proj_gr = ProjectorGroup(self.pars.groups[0], [self.proj_sh], self.eigvals) - + self.proj_gr.orthogonalize() self.proj_gr.calc_complement(self.eigvals) - + temp = self.proj_gr.normion self.proj_gr.normion = False block_maps, ndim = self.proj_gr.get_block_matrix_map() self.proj_gr.normion = temp _, ns, nk, _, _ = self.proj_gr.shells[0].proj_win.shape - + # Note that 'ns' and 'nk' are the same for all shells for isp in range(ns): for ik in range(nk): print(('ik',ik)) bmin = self.proj_gr.ib_win[ik, isp, 0] bmax = self.proj_gr.ib_win[ik, isp, 1]+1 - - nb = bmax - bmin + + nb = bmax - bmin p_mat = np.zeros((ndim, nb), dtype=np.complex128) #print(bmin,bmax,nb) # Combine all projectors of the group to one block projector @@ -84,11 +84,11 @@ class TestProjectorGroupCompl(mytest.MyTestCase): nlm = i2 - i1 + 1 shell = self.proj_gr.shells[ish] p_mat[i1:i2, :nb] = shell.proj_win[ion, isp, ik, :nlm, :nb] - + overlap_L = np.dot(p_mat.conjugate().transpose(),p_mat) overlap_N = np.dot(p_mat,p_mat.conjugate().transpose()) - + assert np.all(np.abs(np.eye(overlap_N.shape[0]) - overlap_N) < 1e-13) assert np.all(np.abs(np.eye(overlap_L.shape[0]) - overlap_L) < 1e-13) - + diff --git a/test/plovasp/proj_group/test_select_bands.py b/test/python/plovasp/proj_group/test_select_bands.py similarity index 98% rename from test/plovasp/proj_group/test_select_bands.py rename to test/python/plovasp/proj_group/test_select_bands.py index 42333060..bb9236b6 100644 --- a/test/plovasp/proj_group/test_select_bands.py +++ b/test/python/plovasp/proj_group/test_select_bands.py @@ -1,6 +1,6 @@ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' import numpy as np @@ -9,7 +9,7 @@ from triqs_dft_tools.converters.plovasp.elstruct import ElectronicStructure from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters from triqs_dft_tools.converters.plovasp.proj_shell import ProjectorShell from triqs_dft_tools.converters.plovasp.proj_group import ProjectorGroup -import mytest +from . import mytest ################################################################################ # diff --git a/test/plovasp/proj_group/test_two_site.py b/test/python/plovasp/proj_group/test_two_site.py similarity index 77% rename from test/plovasp/proj_group/test_two_site.py rename to test/python/plovasp/proj_group/test_two_site.py index 1e216263..75ba53e3 100644 --- a/test/plovasp/proj_group/test_two_site.py +++ b/test/python/plovasp/proj_group/test_two_site.py @@ -1,6 +1,6 @@ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' import numpy as np @@ -10,7 +10,7 @@ from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters from triqs_dft_tools.converters.plovasp.proj_shell import ProjectorShell from triqs_dft_tools.converters.plovasp.proj_group import ProjectorGroup from h5 import HDFArchive -import mytest +from . import mytest ################################################################################ # @@ -51,10 +51,6 @@ class TestProjectorGroupTwoSite(mytest.MyTestCase): dens_mat, overl = self.proj_sh.density_matrix(self.el_struct) -# testout = _rpath + 'projortho_2site.out.test' -# with open(testout, 'wt') as f: -# f.write("density matrix: %s\n"%(dens_mat)) -# f.write("overlap matrix: %s\n"%(overl)) testout = _rpath + 'projortho_2site.test.h5' with HDFArchive(testout, 'w') as h5test: h5test['density_matrix'] = dens_mat @@ -64,9 +60,7 @@ class TestProjectorGroupTwoSite(mytest.MyTestCase): self.assertEqual(overl[0, 0, ...], np.eye(5)) self.assertEqual(overl[0, 1, ...], np.eye(5)) -# expected_file = _rpath + 'projortho_2site.out' -# self.assertFileEqual(testout, expected_file) - expected_file = _rpath + 'projortho_2site.out.h5' + expected_file = _rpath + 'projortho_2site.ref.h5' self.assertH5FileEqual(testout, expected_file) # Scenario 2 @@ -76,10 +70,6 @@ class TestProjectorGroupTwoSite(mytest.MyTestCase): dens_mat, overl = self.proj_sh.density_matrix(self.el_struct) -# testout = _rpath + 'projortho_normion.out.test' -# with open(testout, 'wt') as f: -# f.write("density matrix: %s\n"%(dens_mat)) -# f.write("overlap matrix: %s\n"%(overl)) testout = _rpath + 'projortho_normion.test.h5' with HDFArchive(testout, 'w') as h5test: h5test['density_matrix'] = dens_mat @@ -89,9 +79,7 @@ class TestProjectorGroupTwoSite(mytest.MyTestCase): self.assertEqual(overl[0, 0, ...], np.eye(5)) self.assertEqual(overl[0, 1, ...], np.eye(5)) -# expected_file = _rpath + 'projortho_normion.out' -# self.assertFileEqual(testout, expected_file) - expected_file = _rpath + 'projortho_normion.out.h5' + expected_file = _rpath + 'projortho_normion.ref.h5' self.assertH5FileEqual(testout, expected_file) diff --git a/test/plovasp/proj_group/two_site/DOSCAR b/test/python/plovasp/proj_group/two_site/DOSCAR similarity index 100% rename from test/plovasp/proj_group/two_site/DOSCAR rename to test/python/plovasp/proj_group/two_site/DOSCAR diff --git a/test/plovasp/proj_group/two_site/IBZKPT b/test/python/plovasp/proj_group/two_site/IBZKPT similarity index 100% rename from test/plovasp/proj_group/two_site/IBZKPT rename to test/python/plovasp/proj_group/two_site/IBZKPT diff --git a/test/plovasp/proj_group/two_site/LOCPROJ b/test/python/plovasp/proj_group/two_site/LOCPROJ similarity index 100% rename from test/plovasp/proj_group/two_site/LOCPROJ rename to test/python/plovasp/proj_group/two_site/LOCPROJ diff --git a/test/plovasp/proj_group/two_site/POSCAR b/test/python/plovasp/proj_group/two_site/POSCAR similarity index 100% rename from test/plovasp/proj_group/two_site/POSCAR rename to test/python/plovasp/proj_group/two_site/POSCAR diff --git a/test/plovasp/proj_shell/.gitignore b/test/python/plovasp/proj_shell/.gitignore similarity index 100% rename from test/plovasp/proj_shell/.gitignore rename to test/python/plovasp/proj_shell/.gitignore diff --git a/test/plovasp/proj_group/__init__.py b/test/python/plovasp/proj_shell/__init__.py similarity index 100% rename from test/plovasp/proj_group/__init__.py rename to test/python/plovasp/proj_shell/__init__.py diff --git a/test/plovasp/proj_shell/densmat.out b/test/python/plovasp/proj_shell/densmat.out similarity index 100% rename from test/plovasp/proj_shell/densmat.out rename to test/python/plovasp/proj_shell/densmat.out diff --git a/test/plovasp/proj_shell/example.cfg b/test/python/plovasp/proj_shell/example.cfg similarity index 100% rename from test/plovasp/proj_shell/example.cfg rename to test/python/plovasp/proj_shell/example.cfg diff --git a/test/plovasp/proj_shell/mytest.py b/test/python/plovasp/proj_shell/mytest.py similarity index 100% rename from test/plovasp/proj_shell/mytest.py rename to test/python/plovasp/proj_shell/mytest.py diff --git a/test/plovasp/proj_shell/one_site/DOSCAR b/test/python/plovasp/proj_shell/one_site/DOSCAR similarity index 100% rename from test/plovasp/proj_shell/one_site/DOSCAR rename to test/python/plovasp/proj_shell/one_site/DOSCAR diff --git a/test/plovasp/proj_shell/one_site/IBZKPT b/test/python/plovasp/proj_shell/one_site/IBZKPT similarity index 100% rename from test/plovasp/proj_shell/one_site/IBZKPT rename to test/python/plovasp/proj_shell/one_site/IBZKPT diff --git a/test/plovasp/proj_shell/one_site/LOCPROJ b/test/python/plovasp/proj_shell/one_site/LOCPROJ similarity index 100% rename from test/plovasp/proj_shell/one_site/LOCPROJ rename to test/python/plovasp/proj_shell/one_site/LOCPROJ diff --git a/test/plovasp/proj_shell/one_site/POSCAR b/test/python/plovasp/proj_shell/one_site/POSCAR similarity index 100% rename from test/plovasp/proj_shell/one_site/POSCAR rename to test/python/plovasp/proj_shell/one_site/POSCAR diff --git a/test/plovasp/proj_shell/one_site/PROJCAR b/test/python/plovasp/proj_shell/one_site/PROJCAR similarity index 100% rename from test/plovasp/proj_shell/one_site/PROJCAR rename to test/python/plovasp/proj_shell/one_site/PROJCAR diff --git a/test/plovasp/proj_shell/one_site/readme.txt b/test/python/plovasp/proj_shell/one_site/readme.txt similarity index 100% rename from test/plovasp/proj_shell/one_site/readme.txt rename to test/python/plovasp/proj_shell/one_site/readme.txt diff --git a/test/plovasp/proj_shell/projshells.out b/test/python/plovasp/proj_shell/projshells.out similarity index 100% rename from test/plovasp/proj_shell/projshells.out rename to test/python/plovasp/proj_shell/projshells.out diff --git a/test/plovasp/proj_shell/rpath.py b/test/python/plovasp/proj_shell/rpath.py similarity index 100% rename from test/plovasp/proj_shell/rpath.py rename to test/python/plovasp/proj_shell/rpath.py diff --git a/test/plovasp/proj_shell/test_all.py b/test/python/plovasp/proj_shell/test_all.py similarity index 100% rename from test/plovasp/proj_shell/test_all.py rename to test/python/plovasp/proj_shell/test_all.py diff --git a/test/plovasp/proj_shell/test_projshells.py b/test/python/plovasp/proj_shell/test_projshells.py similarity index 98% rename from test/plovasp/proj_shell/test_projshells.py rename to test/python/plovasp/proj_shell/test_projshells.py index bd6ddc7a..f9aaaf05 100644 --- a/test/plovasp/proj_shell/test_projshells.py +++ b/test/python/plovasp/proj_shell/test_projshells.py @@ -1,6 +1,6 @@ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' import numpy as np @@ -9,7 +9,7 @@ from triqs_dft_tools.converters.plovasp.elstruct import ElectronicStructure from triqs_dft_tools.converters.plovasp.inpconf import ConfigParameters from triqs_dft_tools.converters.plovasp.proj_shell import ProjectorShell from triqs_dft_tools.converters.plovasp.proj_group import ProjectorGroup -import mytest +from . import mytest ################################################################################ # @@ -76,4 +76,4 @@ class TestProjectorShell(mytest.MyTestCase): expected_file = _rpath + 'densmat.out' self.assertFileEqual(testout, expected_file) - + diff --git a/test/plovasp/run_suite.py b/test/python/plovasp/run_suite.py old mode 100644 new mode 100755 similarity index 100% rename from test/plovasp/run_suite.py rename to test/python/plovasp/run_suite.py diff --git a/test/plovasp/vaspio/.gitignore b/test/python/plovasp/vaspio/.gitignore similarity index 100% rename from test/plovasp/vaspio/.gitignore rename to test/python/plovasp/vaspio/.gitignore diff --git a/test/plovasp/vaspio/DOSCAR.example b/test/python/plovasp/vaspio/DOSCAR.example similarity index 100% rename from test/plovasp/vaspio/DOSCAR.example rename to test/python/plovasp/vaspio/DOSCAR.example diff --git a/test/plovasp/vaspio/EIGENVAL.example b/test/python/plovasp/vaspio/EIGENVAL.example similarity index 100% rename from test/plovasp/vaspio/EIGENVAL.example rename to test/python/plovasp/vaspio/EIGENVAL.example diff --git a/test/plovasp/vaspio/EIGENVAL.example.out b/test/python/plovasp/vaspio/EIGENVAL.example.out similarity index 100% rename from test/plovasp/vaspio/EIGENVAL.example.out rename to test/python/plovasp/vaspio/EIGENVAL.example.out diff --git a/test/plovasp/vaspio/EIGENVAL.wrong b/test/python/plovasp/vaspio/EIGENVAL.wrong similarity index 100% rename from test/plovasp/vaspio/EIGENVAL.wrong rename to test/python/plovasp/vaspio/EIGENVAL.wrong diff --git a/test/plovasp/vaspio/IBZKPT.example b/test/python/plovasp/vaspio/IBZKPT.example similarity index 100% rename from test/plovasp/vaspio/IBZKPT.example rename to test/python/plovasp/vaspio/IBZKPT.example diff --git a/test/plovasp/vaspio/IBZKPT.example.out b/test/python/plovasp/vaspio/IBZKPT.example.out similarity index 100% rename from test/plovasp/vaspio/IBZKPT.example.out rename to test/python/plovasp/vaspio/IBZKPT.example.out diff --git a/test/plovasp/vaspio/IBZKPT.notet b/test/python/plovasp/vaspio/IBZKPT.notet similarity index 100% rename from test/plovasp/vaspio/IBZKPT.notet rename to test/python/plovasp/vaspio/IBZKPT.notet diff --git a/test/plovasp/vaspio/IBZKPT.notet.out b/test/python/plovasp/vaspio/IBZKPT.notet.out similarity index 100% rename from test/plovasp/vaspio/IBZKPT.notet.out rename to test/python/plovasp/vaspio/IBZKPT.notet.out diff --git a/test/plovasp/vaspio/POSCAR.complex b/test/python/plovasp/vaspio/POSCAR.complex similarity index 100% rename from test/plovasp/vaspio/POSCAR.complex rename to test/python/plovasp/vaspio/POSCAR.complex diff --git a/test/plovasp/vaspio/POSCAR.example b/test/python/plovasp/vaspio/POSCAR.example similarity index 100% rename from test/plovasp/vaspio/POSCAR.example rename to test/python/plovasp/vaspio/POSCAR.example diff --git a/test/plovasp/vaspio/POSCAR.example.out b/test/python/plovasp/vaspio/POSCAR.example.out similarity index 100% rename from test/plovasp/vaspio/POSCAR.example.out rename to test/python/plovasp/vaspio/POSCAR.example.out diff --git a/test/plovasp/proj_shell/__init__.py b/test/python/plovasp/vaspio/__init__.py similarity index 100% rename from test/plovasp/proj_shell/__init__.py rename to test/python/plovasp/vaspio/__init__.py diff --git a/test/plovasp/vaspio/mytest.py b/test/python/plovasp/vaspio/mytest.py similarity index 100% rename from test/plovasp/vaspio/mytest.py rename to test/python/plovasp/vaspio/mytest.py diff --git a/test/plovasp/vaspio/rpath.py b/test/python/plovasp/vaspio/rpath.py similarity index 100% rename from test/plovasp/vaspio/rpath.py rename to test/python/plovasp/vaspio/rpath.py diff --git a/test/plovasp/vaspio/test_all.py b/test/python/plovasp/vaspio/test_all.py similarity index 100% rename from test/plovasp/vaspio/test_all.py rename to test/python/plovasp/vaspio/test_all.py diff --git a/test/plovasp/vaspio/test_doscar.py b/test/python/plovasp/vaspio/test_doscar.py similarity index 95% rename from test/plovasp/vaspio/test_doscar.py rename to test/python/plovasp/vaspio/test_doscar.py index 8c43f8f2..efa32143 100644 --- a/test/plovasp/vaspio/test_doscar.py +++ b/test/python/plovasp/vaspio/test_doscar.py @@ -2,10 +2,10 @@ r""" Tests for class 'Doscar' from module 'vaspio' """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import mytest +from . import mytest import numpy as np from triqs_dft_tools.converters.plovasp.vaspio import Doscar diff --git a/test/plovasp/vaspio/test_eigenval.py b/test/python/plovasp/vaspio/test_eigenval.py similarity index 97% rename from test/plovasp/vaspio/test_eigenval.py rename to test/python/plovasp/vaspio/test_eigenval.py index b74132a2..675814d1 100644 --- a/test/plovasp/vaspio/test_eigenval.py +++ b/test/python/plovasp/vaspio/test_eigenval.py @@ -2,10 +2,10 @@ r""" Tests for class 'Eigneval' from module 'vaspio' """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import mytest +from . import mytest import numpy as np from triqs_dft_tools.converters.plovasp.vaspio import Eigenval diff --git a/test/plovasp/vaspio/test_kpoints.py b/test/python/plovasp/vaspio/test_kpoints.py similarity index 97% rename from test/plovasp/vaspio/test_kpoints.py rename to test/python/plovasp/vaspio/test_kpoints.py index f7410c3b..64cebb7c 100644 --- a/test/plovasp/vaspio/test_kpoints.py +++ b/test/python/plovasp/vaspio/test_kpoints.py @@ -2,10 +2,10 @@ r""" Tests for class 'Ibzkpt' from module 'vaspio' """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import mytest +from . import mytest import numpy as np from triqs_dft_tools.converters.plovasp.vaspio import Kpoints diff --git a/test/plovasp/vaspio/test_poscar.py b/test/python/plovasp/vaspio/test_poscar.py similarity index 97% rename from test/plovasp/vaspio/test_poscar.py rename to test/python/plovasp/vaspio/test_poscar.py index 3ec48e16..c9c5982d 100644 --- a/test/plovasp/vaspio/test_poscar.py +++ b/test/python/plovasp/vaspio/test_poscar.py @@ -2,10 +2,10 @@ r""" Tests for class 'Poscar' from module 'vaspio' """ import os -import rpath +from . import rpath _rpath = os.path.dirname(rpath.__file__) + '/' -import mytest +from . import mytest import numpy as np from triqs_dft_tools.converters.plovasp.vaspio import Poscar diff --git a/test/sigma_from_file.py b/test/python/sigma_from_file.py similarity index 93% rename from test/sigma_from_file.py rename to test/python/sigma_from_file.py index a69e7c2b..48d45f77 100644 --- a/test/sigma_from_file.py +++ b/test/python/sigma_from_file.py @@ -42,7 +42,8 @@ for name, s in Sigma_hdf: # Read self energy from txt files SK = SumkDFTTools(hdf_file = 'SrVO3.h5', use_dft_blocks = True) -a_list = [a for a,al in SK.gf_struct_solver[0].items()] +# the order in the orig SrVO3 file is not assured, hence order it here +a_list = sorted([a for a,al in SK.gf_struct_solver[0].items()]) g_list = [read_gf_from_txt([['Sigma_' + a + '.dat']], a) for a in a_list] Sigma_txt = BlockGf(name_list = a_list, block_list = g_list, make_copies=False) diff --git a/test/python/sigma_from_file.ref.h5 b/test/python/sigma_from_file.ref.h5 new file mode 100644 index 00000000..773e48f7 Binary files /dev/null and b/test/python/sigma_from_file.ref.h5 differ diff --git a/test/srvo3_Gloc.py b/test/python/srvo3_Gloc.py similarity index 97% rename from test/srvo3_Gloc.py rename to test/python/srvo3_Gloc.py index 21abaf4d..71dd525d 100644 --- a/test/srvo3_Gloc.py +++ b/test/python/srvo3_Gloc.py @@ -35,12 +35,13 @@ SK=SumkDFT(hdf_file='SrVO3.h5',use_dft_blocks=True) num_orbitals = SK.corr_shells[0]['dim'] l = SK.corr_shells[0]['l'] -spin_names = ['up','down'] +spin_names = ['down','up'] orb_names = ['%s'%i for i in range(num_orbitals)] orb_hybridized = False gf_struct = set_operator_structure(spin_names,orb_names,orb_hybridized) glist = [ GfImFreq(indices=inner,beta=beta) for block,inner in gf_struct] +print(gf_struct) Sigma_iw = BlockGf(name_list = [block for block,inner in gf_struct], block_list = glist, make_copies = False) SK.set_Sigma([Sigma_iw]) diff --git a/test/python/srvo3_Gloc.ref.h5 b/test/python/srvo3_Gloc.ref.h5 new file mode 100644 index 00000000..e3ff6e82 Binary files /dev/null and b/test/python/srvo3_Gloc.ref.h5 differ diff --git a/test/srvo3_transp.py b/test/python/srvo3_transp.py similarity index 100% rename from test/srvo3_transp.py rename to test/python/srvo3_transp.py diff --git a/test/srvo3_transp.ref.h5 b/test/python/srvo3_transp.ref.h5 similarity index 100% rename from test/srvo3_transp.ref.h5 rename to test/python/srvo3_transp.ref.h5 diff --git a/test/sumkdft_basic.py b/test/python/sumkdft_basic.py similarity index 100% rename from test/sumkdft_basic.py rename to test/python/sumkdft_basic.py diff --git a/test/sumkdft_basic.ref.h5 b/test/python/sumkdft_basic.ref.h5 similarity index 100% rename from test/sumkdft_basic.ref.h5 rename to test/python/sumkdft_basic.ref.h5 diff --git a/test/w90_convert.py b/test/python/w90_convert.py similarity index 100% rename from test/w90_convert.py rename to test/python/w90_convert.py diff --git a/test/w90_convert.ref.h5 b/test/python/w90_convert.ref.h5 similarity index 100% rename from test/w90_convert.ref.h5 rename to test/python/w90_convert.ref.h5 diff --git a/test/wien2k_convert.py b/test/python/wien2k_convert.py similarity index 100% rename from test/wien2k_convert.py rename to test/python/wien2k_convert.py diff --git a/test/wien2k_convert.ref.h5 b/test/python/wien2k_convert.ref.h5 similarity index 100% rename from test/wien2k_convert.ref.h5 rename to test/python/wien2k_convert.ref.h5 diff --git a/test/sigma_from_file.ref.h5 b/test/sigma_from_file.ref.h5 deleted file mode 100644 index 7b6688f1..00000000 Binary files a/test/sigma_from_file.ref.h5 and /dev/null differ diff --git a/test/srvo3_Gloc.ref.h5 b/test/srvo3_Gloc.ref.h5 deleted file mode 100644 index d615317e..00000000 Binary files a/test/srvo3_Gloc.ref.h5 and /dev/null differ