Skip to content
Snippets Groups Projects

Compare revisions

Changes are shown as if the source revision was being merged into the target revision. Learn more about comparing revisions.

Source

Select target project
No results found
Select Git revision
  • devel
  • update_flake_lock_action
  • master
  • pr/370
  • pr/456
  • pr/455
  • pre-commit-ci-update-config
  • pr/238
  • 1.3.1
  • 1.3.4
  • v1.0.0
  • v1.0.1
  • v1.1.0
  • v1.2.0
  • v1.3.0
  • v1.3.1
  • v1.3.2
  • v1.3.3
  • v1.4.0
  • v1.4.1
  • v1.4.2
  • v1.4.3
  • v1.4.4
  • v1.4.5
  • v1.5.0
  • v1.5.1
  • v1.5.2
  • v1.5.3
  • v1.5.4
  • v1.5.5
  • v1.5.6
  • v1.5.7
  • v1.5.8
  • v1.6.0
  • v1.6.1
  • v1.6.10
  • v1.6.11
  • v1.6.12
  • v1.6.13
  • v1.6.2
  • v1.6.3
  • v1.6.4
  • v1.6.5
  • v1.6.6
  • v1.6.7
  • v1.6.8
  • v1.6.9
  • v2.0.0
  • v2.0.1
  • v2.0.2
  • v2.0.3
  • v2.1.0
  • v2.1.1
  • v2.1.2
  • v2.2.0
  • v2.2.1
  • v2.2.2
  • v2.3.0
  • v2.3.1
  • v2.3.2
  • v2.3.3
  • v2.4.0
  • v2.4.1
  • v2.4.2
  • v2.4.3
  • v2.4.4
  • v2.5.0
  • v2.6.0
  • v2.6.1
  • v2.6.10
  • v2.6.11
  • v2.6.2
  • v2.6.3
  • v2.6.4
  • v2.6.5
  • v2.6.6
  • v2.6.7
  • v2.6.8
  • v2.6.9
  • v2.7.0
  • v2.7.1
  • v2.7.10
  • v2.7.11
  • v2.7.12
  • v2.7.13
  • v2.7.14
  • v2.7.2
  • v2.7.3
  • v2.7.4
  • v2.7.5
  • v2.7.6
  • v2.7.7
  • v2.7.8
  • v2.7.9
  • v2.8.0
  • v2.8.1
  • v2.9.0
  • v2.9.1
  • v2.9.2
  • v3.0.0
  • v3.1.0
  • v3.11.0
102 results

Target

Select target project
  • Justin Carpentier / eigenpy
  • Guilhem Saurel / eigenpy
  • Stack Of Tasks / eigenpy
3 results
Select Git revision
  • devel
  • master
  • topic/perf
  • topic/multipy
  • topic/multipy2
  • topic/soabi
  • 1.3.1
  • 1.3.4
  • v1.0.1
  • v1.2.0
  • v1.3.0
  • v1.3.1
  • v1.3.2
  • v1.3.3
  • v1.4.0
  • v1.4.1
  • v1.4.2
  • v1.4.3
  • v1.4.4
  • v1.4.5
  • v1.5.0
21 results
Show changes

Commits on Source 723

623 additional commits have been omitted to prevent performance issues.
223 files
+ 17403
2266
Compare changes
  • Side-by-side
  • Inline

Files

.clang-format

0 → 100644
+3 −0
Original line number Original line Diff line number Diff line
BasedOnStyle: Google
SortIncludes: false
Standard: Cpp11
+9 −0
Original line number Original line Diff line number Diff line
# pre-commit run -a (Guilhem Saurel, 2022-07-27)
# pre-commit run -a (Guilhem Saurel, 2022-07-27)
4af05ec6781f9da65b81af8e3af8d69213f99e85
4af05ec6781f9da65b81af8e3af8d69213f99e85

# pre-commit run -a (Guilhem Saurel, 2024-02-17)
48fb48c83f0456de2fb612ef55df8ad789824d87

# pre-commit run -a (Guilhem Saurel, 2024-02-19)
0bae435330ee475f8dbb11bf5e672284d294d9b3

# pre-commit run -a (ManifoldFR, 2025-04-25)
51b49061575d46e0668eba0da200217cbfd9e883

.gitattributes

0 → 100644
+3 −0
Original line number Original line Diff line number Diff line
# GitHub syntax highlighting
pixi.lock linguist-language=YAML
+15 −0
Original line number Original line Diff line number Diff line
name: CI - Check-changelog

on:
  pull_request:
    types: [assigned, opened, synchronize, reopened, labeled, unlabeled, edited]
    branches:
      - devel
jobs:
  check-changelog:
    name: Check changelog action
    runs-on: ubuntu-latest
    steps:
      - uses: tarides/changelog-check-action@v2
        with:
          changelog: CHANGELOG.md
+0 −10
Original line number Original line Diff line number Diff line
name: eigenpy
channels:
  - conda-forge
  - defaults
dependencies:
  - eigen
  - cmake
  - numpy
  - pkg-config
  - boost
+29 −5
Original line number Original line Diff line number Diff line
name: JRL-cmakemodules
name: CI - JRL-cmakemodules
on: [push,pull_request]

on:
  push:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true


jobs:
jobs:
  with-submodules:
  with-submodules:
@@ -9,7 +31,7 @@ jobs:
      - uses: actions/checkout@v3
      - uses: actions/checkout@v3
        with:
        with:
          submodules: true
          submodules: true
      - run: sudo apt install libboost-all-dev libeigen3-dev python3-numpy
      - run: sudo apt install libboost-all-dev libeigen3-dev python3-numpy python3-scipy
      - run: cmake .
      - run: cmake .




@@ -20,5 +42,7 @@ jobs:
      - uses: actions/checkout@v3
      - uses: actions/checkout@v3
        with:
        with:
          submodules: false
          submodules: false
      - run: sudo apt install libboost-all-dev libeigen3-dev python3-numpy
          path: eigenpy
      - run: cmake .
      - run: sudo apt install libboost-all-dev libeigen3-dev python3-numpy python3-scipy
      - run: cmake -B build -S eigenpy
      - run: grep -qvz CMAKE_PROJECT_VERSION:STATIC=0.0 build/CMakeCache.txt
+44 −9
Original line number Original line Diff line number Diff line
name: Check build on linux
name: CI - Linux via APT


on: ["push", "pull_request"]
on:
  push:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true


jobs:
jobs:
  test:
  test:
@@ -9,17 +30,31 @@ jobs:
    strategy:
    strategy:
      matrix:
      matrix:
        python: [3]
        python: [3]
        ubuntu: [18, 20, 22]
        ubuntu: [22, 24]
        include:
          - ubuntu: 18
            python: 2
    steps:
    steps:
      - uses: actions/checkout@v3
      - uses: actions/checkout@v3
        with:
        with:
          submodules: 'true'
          submodules: 'true'
      - run: |
      - run: |
          sudo apt-get update
          sudo apt-get update
          sudo apt-get install cmake libboost-all-dev libeigen3-dev python*-numpy python*-dev
          sudo apt-get install cmake libboost-all-dev libeigen3-dev python*-numpy python*-dev python*-scipy
      - run: cmake -DPYTHON_EXECUTABLE=$(which python${{ matrix.python }}) .
          echo $(sudo apt list --installed)
          echo $(g++ --version)
      - run: cmake . -DPYTHON_EXECUTABLE=$(which python${{ matrix.python }}) -DBUILD_TESTING_SCIPY=ON
      - run: make -j2
      - run: make -j2
      - run: make test
      - run: ctest --output-on-failure

  check:
    if: always()
    name: check-linux

    needs:
    - test

    runs-on: Ubuntu-latest

    steps:
    - name: Decide whether the needed jobs succeeded or failed
      uses: re-actors/alls-green@release/v1
      with:
        jobs: ${{ toJSON(needs) }}
+0 −90
Original line number Original line Diff line number Diff line
name: Conda-CI

on: [push,pull_request]

jobs:
  eigenpy-conda:
    name: ${{ matrix.os }} - ${{ matrix.build_type }} ${{ matrix.cxx_options }}
    runs-on: ${{ matrix.os }}
    env:
      CCACHE_DIR: /github/home/.ccache # Enable ccache

    strategy:
      fail-fast: false
      matrix:
        os: ["ubuntu-latest", "macos-latest"]
        cxx_options: ['', '-mavx2']
        build_type: [Release, Debug]


        exclude:
          - build_type: Debug
            cxx_options: -mavx2
            os: macos-latest
          - build_type: Release
            cxx_options: -mavx2
            os: macos-latest

    steps:
    - uses: actions/checkout@v3
      with:
        submodules: recursive

    - uses: conda-incubator/setup-miniconda@v2
      with:
        activate-environment: eigenpy
        auto-update-conda: true
        environment-file: .github/workflows/conda/environment.yml
        python-version: '3.10'

    - uses: actions/cache@v3
      with:
        path: ${{ env.CCACHE_DIR }}
        key: ccache-${{ matrix.os }}-${{ matrix.build_type }}-${{ matrix.cxx_options }}

    - name: Install cmake and update conda
      shell: bash -l {0}
      run: |
        conda activate eigenpy
        conda install cmake -c main
        conda list

    - name: Build EigenPy
      shell: bash -l {0}
      run: |
        conda activate eigenpy
        echo $CONDA_PREFIX

        mkdir build
        cd build

        cmake .. -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$(which python3) -DGENERATE_PYTHON_STUBS=ON -DCMAKE_BUILD_TYPE=${{ matrix.build_type }} -DCMAKE_CXX_FLAGS=${{ matrix.cxx_options }}
        make
        make build_tests
        export CTEST_OUTPUT_ON_FAILURE=1
        make test
        make install

    - name: Test packaging
      shell: bash -l {0}
      run: |
        conda activate eigenpy

        cmake -B test-packaging -S unittest/packaging/cmake -DPYTHON_EXECUTABLE=$(which python3)

    - name: Configure hpp-fcl
      shell: bash -l {0}
      run: |
        conda activate eigenpy
        conda install -c conda-forge octomap assimp qhull

        git clone https://github.com/humanoid-path-planner/hpp-fcl.git --recursive
        cd hpp-fcl
        mkdir build && cd build
        cmake .. -DCMAKE_INSTALL_PREFIX=$CONDA_PREFIX -DCMAKE_BUILD_TYPE=Release -DPYTHON_EXECUTABLE=$(which python3)

    - name: Uninstall EigenPy
      shell: bash -l {0}
      run: |
        cd build
        make uninstall
+97 −0
Original line number Original line Diff line number Diff line
name: CI - MacOS/Linux/Windows via Pixi

on:
  push:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  eigenpy-pixi:
    name: ${{ matrix.os }} - Env ${{ matrix.environment }} ${{ matrix.build_type }} ${{ matrix.cxx_options }} ${{ matrix.compiler }}
    runs-on: ${{ matrix.os }}
    env:
      CCACHE_BASEDIR: "${GITHUB_WORKSPACE}"
      CCACHE_DIR: "${GITHUB_WORKSPACE}/.ccache"
      CCACHE_COMPRESS: true
      CCACHE_COMPRESSLEVEL: 6

    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, macos-latest, macos-13]
        environment: [all, all-py39]
        build_type: [Release, Debug]
        cxx_options: ['', '-mavx2']

        exclude:
          - os: macos-latest
            cxx_options: '-mavx2'
          - os: macos-13
            cxx_options: '-mavx2'

        include:
          - os: windows-latest
            environment: all
            cxx_options: ''
            build_type: Release
          - os: windows-latest
            environment: all-clang-cl
            cxx_options: ''
            build_type: Release

    steps:
    - uses: actions/checkout@v4
      with:
        submodules: recursive

    - uses: actions/cache@v4
      with:
        path: .ccache
        key: ccache-macos-linux-windows-pixi-${{ matrix.os }}-${{ matrix.build_type }}-${{ matrix.cxx_options }}-${{ matrix.environment }}-${{ github.sha }}
        restore-keys: ccache-macos-linux-windows-pixi-${{ matrix.os }}-${{ matrix.build_type }}-${{ matrix.cxx_options }}-${{ matrix.environment }}-

    - uses: prefix-dev/setup-pixi@v0.8.1
      with:
        cache: true
        environments: ${{ matrix.environment }}

    - name: Build EigenPy [MacOS/Linux/Windows]
      env:
        CMAKE_BUILD_PARALLEL_LEVEL: 2
        EIGENPY_BUILD_TYPE: ${{ matrix.build_type }}
        EIGENPY_CXX_FLAGS: ${{ matrix.cxx_options }}
      run: |
        pixi run -e ${{ matrix.environment }} test

  check:
    if: always()
    name: check-macos-linux-windows-pixi

    needs:
    - eigenpy-pixi

    runs-on: Ubuntu-latest

    steps:
    - name: Decide whether the needed jobs succeeded or failed
      uses: re-actors/alls-green@release/v1
      with:
        jobs: ${{ toJSON(needs) }}
+19 −0
Original line number Original line Diff line number Diff line
name: "CI - Nix"

on:
  push:

jobs:
  nix:
    runs-on: "${{ matrix.os }}-latest"
    strategy:
      matrix:
        os: [ubuntu, macos]
    steps:
      - uses: actions/checkout@v4
      - uses: cachix/install-nix-action@v27
      - uses: cachix/cachix-action@v15
        with:
          name: gepetto
          authToken: '${{ secrets.CACHIX_AUTH_TOKEN }}'
      - run: nix build -L
+24 −3
Original line number Original line Diff line number Diff line
name: Ensure relocatable
name: CI - Ensure relocatable


on: [push,pull_request]
on:
  push:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true


jobs:
jobs:
  relocatable:
  relocatable:
@@ -30,7 +51,7 @@ jobs:
      run: git -C /RELOC/SRC clone --recursive $(pwd)
      run: git -C /RELOC/SRC clone --recursive $(pwd)


    - name: install dependencies
    - name: install dependencies
      run: sudo apt install libboost-all-dev libeigen3-dev python-is-python3 python3-numpy python3-pip ccache
      run: sudo apt install libboost-all-dev libeigen3-dev python-is-python3 python3-numpy python3-pip python3-scipy ccache


    - name: update CMake
    - name: update CMake
      run: pip install -U pip && pip install -U cmake
      run: pip install -U pip && pip install -U cmake
+43 −24
Original line number Original line Diff line number Diff line
# This config uses industrial_ci (https://github.com/ros-industrial/industrial_ci.git).
# This config uses industrial_ci (https://github.com/ros-industrial/industrial_ci.git).
# For troubleshooting, see readme (https://github.com/ros-industrial/industrial_ci/blob/master/README.rst)
# For troubleshooting, see readme (https://github.com/ros-industrial/industrial_ci/blob/master/README.rst)


name: ROS-CI
name: CI - Linux via ROS


# This determines when this workflow is run
# This determines when this workflow is run
on: [push, pull_request] # on all pushes and PRs
on:
  push:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
  pull_request:
    paths-ignore:
      - 'doc/**'
      - '.gitlab-ci.yml'
      - '.gitignore'
      - '*.md'
      - 'LICENSE'
      - 'colcon.pkg'
      - '.pre-commit-config.yaml'
concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true


jobs:
jobs:
  CI:
  CI:
    strategy:
    strategy:
      matrix:
      matrix:
        env:
        env:
          - {ROS_DISTRO: melodic, PRERELEASE: false}
          - {ROS_DISTRO: noetic}
          - {ROS_DISTRO: foxy}
          - {ROS_DISTRO: rolling}
          - {ROS_DISTRO: humble}
          - {ROS_DISTRO: humble}
          - {ROS_DISTRO: jazzy}
          - {ROS_DISTRO: rolling}
    env:
    env:
      CCACHE_DIR: /github/home/.ccache # Enable ccache
      # PRERELEASE: true  # Fails due to issues in the underlying Docker image
      PRERELEASE: true
      BUILDER: colcon
      BUILDER: colcon
    runs-on: ubuntu-latest
    runs-on: ubuntu-latest
    steps:
    steps:
      - uses: actions/checkout@v3
      - uses: actions/checkout@v4
        with:
        with:
          submodules: recursive
          submodules: recursive
      # This step will fetch/store the directory used by ccache before/after the ci run
      - uses: actions/cache@v3
        with:
          path: ${{ env.CCACHE_DIR }}
          key: ccache-${{ matrix.env.ROS_DISTRO }}-${{ matrix.env.ROS_REPO }}
      - name: Echo CCACHE_DIR
        shell: bash -l {0}
        env: ${{ matrix.env }}
        run: |
          echo CCACHE_DIR=${CCACHE_DIR}
      - name: Echo CCACHE_DIR
        shell: bash -l {0}
        run: |
          echo CCACHE_DIR=${CCACHE_DIR}
      # Run industrial_ci
      # Run industrial_ci
      - uses: 'ros-industrial/industrial_ci@6a8f546cbd31fbd5c9f77e3409265c8b39abc3d6'
      - uses: 'ros-industrial/industrial_ci@3e67ec54d63496e076267392148a26229740befc'
        env: ${{ matrix.env }}
        env: ${{ matrix.env }}

  check:
    if: always()
    name: check-ros-ci

    needs:
    - CI

    runs-on: Ubuntu-latest

    steps:
    - name: Decide whether the needed jobs succeeded or failed
      uses: re-actors/alls-green@release/v1
      with:
        jobs: ${{ toJSON(needs) }}
+20 −0
Original line number Original line Diff line number Diff line
name: update-flake-lock

on:
  workflow_dispatch:
  schedule:
    - cron: '0 15 3 * *'

jobs:
  lockfile:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
      - name: Install Nix
        uses: DeterminateSystems/nix-installer-action@main
      - name: Update flake.lock
        uses: DeterminateSystems/update-flake-lock@main
        with:
          pr-labels: "no changelog"
          token: ${{ secrets.GH_TOKEN_FOR_UPDATES }}
+52 −0
Original line number Original line Diff line number Diff line
name: CI - Update Pixi lockfile
permissions:
  contents: write
  pull-requests: write

on:
  workflow_dispatch:
  schedule:
    - cron: 0 5 1 * *

jobs:
  pixi-update:
    runs-on: ubuntu-latest

    steps:
      - uses: actions/create-github-app-token@v1
        id: generate-token
        with:
          app-id: ${{ secrets.APP_ID }}
          private-key: ${{ secrets.APP_PRIVATE_KEY }}

      - uses: actions/checkout@v4
        with:
          token: ${{ steps.generate-token.outputs.token }}
          ref: devel
          # Make sure the value of GITHUB_TOKEN will not be persisted in repo's config
          persist-credentials: false

      - name: Set up pixi
        uses: prefix-dev/setup-pixi@v0.8.1
        with:
          run-install: false

      - name: Update lockfile
        run: |
          set -o pipefail
          pixi update --json | pixi exec pixi-diff-to-markdown >> diff.md

      - name: Create pull request
        uses: peter-evans/create-pull-request@v7
        with:
          token: ${{ steps.generate-token.outputs.token }}
          commit-message: 'pixi: Update pixi lockfile'
          title: Update pixi lockfile
          body-path: diff.md
          branch: topic/update-pixi
          base: devel
          labels: |
            pixi
            no changelog
          delete-branch: true
          add-paths: pixi.lock
+0 −92
Original line number Original line Diff line number Diff line
name: Build Eigenpy on Windows via Conda
on: [push,pull_request]

jobs:
  build:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
          os: [windows-latest]
    steps:
    - uses: actions/checkout@v3
    - name: Checkout submodules
      run: |
        git submodule update --init
    - uses: goanpeca/setup-miniconda@v1
      env:
        ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
      with:
        activate-environment: eigenpy
        environment-file: .github/workflows/conda/environment.yml
        python-version: 3.7
    - name: Build Eigenpy
      shell: cmd /C CALL {0}
      env:
        ACTIONS_ALLOW_UNSECURE_COMMANDS: 'true'
      run: |
        :: unset extra Boost envs
        set Boost_ROOT=
        set BOOST_ROOT_1_69_0=
        set BOOST_ROOT_1_72_0=
        set PATH=%PATH:C:\hostedtoolcache\windows\Boost\1.72.0;=%
        if errorlevel 1 exit 1

        :: start building
        call "%programfiles%\Microsoft Visual Studio\2022\Enterprise\VC\Auxiliary\Build\vcvarsall.bat" amd64
        if errorlevel 1 exit 1
        mkdir build
        pushd build
        cmake ^
          -G "NMake Makefiles" ^
          -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX%\Library ^
          -DCMAKE_BUILD_TYPE=Release ^
          -DGENERATE_PYTHON_STUBS=ON ^
          -DPYTHON_SITELIB=%CONDA_PREFIX%\Lib\site-packages ^
          -DPYTHON_EXECUTABLE=%CONDA_PREFIX%\python.exe ^
          ..
        if errorlevel 1 exit 1

        :: Build and Install
        cmake --build . --config Release --target install
        if errorlevel 1 exit 1

        :: Build stubs
        git clone https://github.com/jcarpent/pybind11-stubgen.git
        python "%CD%\pybind11-stubgen\pybind11_stubgen\__init__.py" -o %CONDA_PREFIX%\Lib\site-packages\eigenpy eigenpy --boost-python --ignore-invalid signature --no-setup-py --root-module-suffix ""
        if errorlevel 1 exit 1

        :: Testing
        ctest --output-on-failure -C Release -V
        if errorlevel 1 exit 1

        :: Test Python import
        cd ..
        python -c "import eigenpy"
        if errorlevel 1 exit 1

        :: Test packaging

        cmake -B test-packaging -S unittest/packaging/cmake ^
          -G "NMake Makefiles" ^
          -DPYTHON_EXECUTABLE=%CONDA_PREFIX%\python.exe
        if errorlevel 1 exit 1

        :: Configure hpp-fcl
        conda install -c conda-forge octomap assimp qhull
        git clone --recursive https://github.com/humanoid-path-planner/hpp-fcl.git
        pushd hpp-fcl
        mkdir build
        pushd build
        cmake ^
          -G "NMake Makefiles" ^
          -DCMAKE_INSTALL_PREFIX=%CONDA_PREFIX%\Library ^
          -DCMAKE_BUILD_TYPE=Release ^
          -DPYTHON_EXECUTABLE=%CONDA_PREFIX%\python.exe ^
          ..
        cd ..
        if errorlevel 1 exit 1

        :: Uninstall
        cmake --build . --config Release --target uninstall
        if errorlevel 1 exit 1
+3 −1
Original line number Original line Diff line number Diff line
*~
*~
*build*
*build*/
# pixi environments
.pixi
+30 −18
Original line number Original line Diff line number Diff line
ci:
ci:
    autoupdate_branch: 'devel'
  autoupdate_branch: devel
  autofix_prs: false
  autoupdate_schedule: quarterly
repos:
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
  rev: v0.11.4
  hooks:
  - id: ruff
    args:
    - --fix
    - --exit-non-zero-on-fix
    - --ignore
    - UP036
  - id: ruff-format
- repo: https://github.com/cheshirekow/cmake-format-precommit
  rev: v0.6.13
  hooks:
  - id: cmake-format
- repo: https://github.com/pappasam/toml-sort
  rev: v0.24.2
  hooks:
  - id: toml-sort-fix
    exclude: pixi.toml
- repo: https://github.com/pre-commit/mirrors-clang-format
- repo: https://github.com/pre-commit/mirrors-clang-format
    rev: v15.0.7
  rev: v20.1.0
  hooks:
  hooks:
  - id: clang-format
  - id: clang-format
        args: ['--style={BasedOnStyle: Google, SortIncludes: false}']
- repo: https://github.com/pre-commit/pre-commit-hooks
- repo: https://github.com/pre-commit/pre-commit-hooks
    rev: v4.4.0
  rev: v5.0.0
  hooks:
  hooks:
  - id: trailing-whitespace
  - id: trailing-whitespace
-   repo: https://github.com/psf/black
    rev: 23.1.0
    hooks:
    -   id: black
-   repo: https://github.com/cheshirekow/cmake-format-precommit
    rev: v0.6.13
    hooks:
    - id: cmake-format

CHANGELOG.md

0 → 100644
+852 −0

File added.

Preview size limit exceeded, changes collapsed.

+204 −43
Original line number Original line Diff line number Diff line
@@ -2,7 +2,7 @@
# Copyright (c) 2014-2019 CNRS Copyright (c) 2018-2023 INRIA
# Copyright (c) 2014-2019 CNRS Copyright (c) 2018-2023 INRIA
#
#


cmake_minimum_required(VERSION 3.1)
cmake_minimum_required(VERSION 3.10)


set(PROJECT_NAME eigenpy)
set(PROJECT_NAME eigenpy)
set(PROJECT_DESCRIPTION "Bindings between Numpy and Eigen using Boost.Python")
set(PROJECT_DESCRIPTION "Bindings between Numpy and Eigen using Boost.Python")
@@ -11,14 +11,30 @@ set(PROJECT_USE_CMAKE_EXPORT TRUE)
set(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE)
set(PROJECT_USE_KEYWORD_LINK_LIBRARIES TRUE)
set(PROJECT_CUSTOM_HEADER_EXTENSION "hpp")
set(PROJECT_CUSTOM_HEADER_EXTENSION "hpp")
set(PROJECT_COMPATIBILITY_VERSION AnyNewerVersion)
set(PROJECT_COMPATIBILITY_VERSION AnyNewerVersion)
# To enable jrl-cmakemodules compatibility with workspace we must define the two
# following lines
set(PROJECT_AUTO_RUN_FINALIZE FALSE)
set(PROJECT_SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR})


# Check if the submodule cmake have been initialized
# Check if the submodule cmake have been initialized
set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake")
set(JRL_CMAKE_MODULES "${CMAKE_CURRENT_LIST_DIR}/cmake")
if(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake/base.cmake")
if(EXISTS "${JRL_CMAKE_MODULES}/base.cmake")
  if(${CMAKE_VERSION} VERSION_LESS "3.14.0")
  message(STATUS "JRL cmakemodules found in 'cmake/' git submodule")
else()
  find_package(jrl-cmakemodules QUIET CONFIG)
  if(jrl-cmakemodules_FOUND)
    get_property(
      JRL_CMAKE_MODULES
      TARGET jrl-cmakemodules::jrl-cmakemodules
      PROPERTY INTERFACE_INCLUDE_DIRECTORIES)
    message(STATUS "JRL cmakemodules found on system at ${JRL_CMAKE_MODULES}")
  elseif(${CMAKE_VERSION} VERSION_LESS "3.14.0")
    message(
    message(
      FATAL_ERROR
      FATAL_ERROR
        "\nPlease run the following command first:\ngit submodule update --init\n"
        "\nCan't find jrl-cmakemodules. Please either:\n"
        "  - use git submodule: 'git submodule update --init'\n"
        "  - or install https://github.com/jrl-umi3218/jrl-cmakemodules\n"
        "  - or upgrade your CMake version to >= 3.14 to allow automatic fetching\n"
    )
    )
  else()
  else()
    message(STATUS "JRL cmakemodules not found. Let's fetch it.")
    message(STATUS "JRL cmakemodules not found. Let's fetch it.")
@@ -31,6 +47,14 @@ if(NOT EXISTS "${CMAKE_SOURCE_DIR}/cmake/base.cmake")
  endif()
  endif()
endif()
endif()


function(set_standard_output_directory target)
  set_target_properties(
    ${target}
    PROPERTIES RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin
               LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib
               ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
endfunction()

# Disable -Werror on Unix for now.
# Disable -Werror on Unix for now.
set(CXX_DISABLE_WERROR True)
set(CXX_DISABLE_WERROR True)
set(CMAKE_VERBOSE_MAKEFILE True)
set(CMAKE_VERBOSE_MAKEFILE True)
@@ -41,16 +65,30 @@ set(CMAKE_VERBOSE_MAKEFILE True)
# ----------------------------------------------------
# ----------------------------------------------------
option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF)
option(INSTALL_DOCUMENTATION "Generate and install the documentation" OFF)
option(SUFFIX_SO_VERSION "Suffix library name with its version" OFF)
option(SUFFIX_SO_VERSION "Suffix library name with its version" OFF)
option(BUILD_TESTING_SCIPY
       "Build the SciPy tests (scipy should be installed on the machine)" ON)


if(DEFINED BUILD_UNIT_TESTS)
# ----------------------------------------------------
  message(
# --- Policy -----------------------------------------
    AUTHOR_WARNING
# CMake Policy setup
      "BUILD_UNIT_TESTS is deprecated. Use BUILD_TESTING instead.\
# ----------------------------------------------------
    If you are manually building EigenPy from source in an existing build folder,\
# Policy can be removed when cmake_minimum_required is updated.
    we suggest that you delete your build folder and make a new one.")

  set(BUILD_TESTING ${BUILD_UNIT_TESTS})
# We also set CMAKE_POLICY_DEFAULT_CMPXXXX because CMake modules can reset
endif(DEFINED BUILD_UNIT_TESTS)
# policy and redefine some macros like `find_dependency` that will not use our
# policy.


# Use BoostConfig module distributed by boost library instead of using FindBoost
# module distributed by CMake (to remove in 3.30).
if(POLICY CMP0167)
  cmake_policy(SET CMP0167 NEW)
  set(CMAKE_POLICY_DEFAULT_CMP0167 NEW)
endif()
# install() DESTINATION paths are normalized (to remove in 3.31).
if(POLICY CMP0177)
  cmake_policy(SET CMP0177 NEW)
  set(CMAKE_POLICY_DEFAULT_CMP0177 NEW)
endif()
include("${JRL_CMAKE_MODULES}/base.cmake")
include("${JRL_CMAKE_MODULES}/base.cmake")
compute_project_args(PROJECT_ARGS LANGUAGES CXX)
compute_project_args(PROJECT_ARGS LANGUAGES CXX)
project(${PROJECT_NAME} ${PROJECT_ARGS})
project(${PROJECT_NAME} ${PROJECT_ARGS})
@@ -63,10 +101,20 @@ include("${JRL_CMAKE_MODULES}/apple.cmake")
option(GENERATE_PYTHON_STUBS
option(GENERATE_PYTHON_STUBS
       "Generate the Python stubs associated to the Python library" OFF)
       "Generate the Python stubs associated to the Python library" OFF)


option(BUILD_WITH_CHOLMOD_SUPPORT "Build EigenPy with the Cholmod support" OFF)

if(APPLE)
  option(BUILD_WITH_ACCELERATE_SUPPORT
         "Build EigenPy with the Accelerate support" OFF)
else(APPLE)
  set(BUILD_WITH_ACCELERATE_SUPPORT FALSE)
endif(APPLE)

string(REPLACE "-pedantic" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})
string(REPLACE "-pedantic" "" CMAKE_CXX_FLAGS ${CMAKE_CXX_FLAGS})


# If needed, fix CMake policy for APPLE systems
# If needed, fix CMake policy for APPLE systems
apply_default_apple_configuration()
apply_default_apple_configuration()
check_minimal_cxx_standard(11 ENFORCE)


if(WIN32)
if(WIN32)
  set(LINK copy_if_different)
  set(LINK copy_if_different)
@@ -105,12 +153,45 @@ export_boost_default_options()
find_package(Boost REQUIRED)
find_package(Boost REQUIRED)
search_for_boost_python(REQUIRED)
search_for_boost_python(REQUIRED)


if(BUILD_WITH_CHOLMOD_SUPPORT)
  set(CMAKE_MODULE_PATH ${JRL_CMAKE_MODULES}/find-external/CHOLMOD
                        ${CMAKE_MODULE_PATH})
  add_project_dependency(CHOLMOD REQUIRED FIND_EXTERNAL "CHOLMOD")
  message(
    STATUS
      "Build with CHOLDOD support (LGPL). See CHOLMOD/Doc/License.txt for further details."
  )
  add_definitions(-DEIGENPY_WITH_CHOLMOD_SUPPORT)
endif(BUILD_WITH_CHOLMOD_SUPPORT)

if(BUILD_WITH_ACCELERATE_SUPPORT)
  if(NOT ${Eigen3_VERSION} VERSION_GREATER_EQUAL "3.4.90")
    message(
      FATAL_ERROR
        "Your version of Eigen is too low. Should be at least 3.4.90. Current version is ${Eigen3_VERSION}."
    )
  endif()

  set(CMAKE_MODULE_PATH ${JRL_CMAKE_MODULES}/find-external/Accelerate
                        ${CMAKE_MODULE_PATH})
  find_package(
    Accelerate REQUIRED # FIND_EXTERNAL "Accelerate" # We don't export yet as
                        # there might be an issue on AMR64 platforms
  )
  message(STATUS "Build with Accelerate support framework.")
  add_definitions(-DEIGENPY_WITH_ACCELERATE_SUPPORT)
endif(BUILD_WITH_ACCELERATE_SUPPORT)

# ----------------------------------------------------
# ----------------------------------------------------
# --- INCLUDE ----------------------------------------
# --- INCLUDE ----------------------------------------
# ----------------------------------------------------
# ----------------------------------------------------
set(${PROJECT_NAME}_UTILS_HEADERS
set(${PROJECT_NAME}_UTILS_HEADERS
    include/eigenpy/utils/scalar-name.hpp include/eigenpy/utils/is-approx.hpp
    include/eigenpy/utils/scalar-name.hpp
    include/eigenpy/utils/is-aligned.hpp)
    include/eigenpy/utils/is-approx.hpp
    include/eigenpy/utils/is-aligned.hpp
    include/eigenpy/utils/traits.hpp
    include/eigenpy/utils/python-compat.hpp
    include/eigenpy/utils/empty-visitor.hpp)


set(${PROJECT_NAME}_SOLVERS_HEADERS
set(${PROJECT_NAME}_SOLVERS_HEADERS
    include/eigenpy/solvers/solvers.hpp
    include/eigenpy/solvers/solvers.hpp
@@ -122,20 +203,57 @@ set(${PROJECT_NAME}_SOLVERS_HEADERS
    include/eigenpy/solvers/BasicPreconditioners.hpp
    include/eigenpy/solvers/BasicPreconditioners.hpp
    include/eigenpy/solvers/BFGSPreconditioners.hpp)
    include/eigenpy/solvers/BFGSPreconditioners.hpp)


set(${PROJECT_NAME}_EIGEN_HEADERS include/eigenpy/eigen/EigenBase.hpp)

set(${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_CHOLMOD_HEADERS
    include/eigenpy/decompositions/sparse/cholmod/CholmodBase.hpp
    include/eigenpy/decompositions/sparse/cholmod/CholmodDecomposition.hpp
    include/eigenpy/decompositions/sparse/cholmod/CholmodSimplicialLDLT.hpp
    include/eigenpy/decompositions/sparse/cholmod/CholmodSimplicialLLT.hpp
    include/eigenpy/decompositions/sparse/cholmod/CholmodSupernodalLLT.hpp)

set(${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_ACCELERATE_HEADERS
    include/eigenpy/decompositions/sparse/accelerate/accelerate.hpp)

set(${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_HEADERS
    include/eigenpy/decompositions/sparse/LLT.hpp
    include/eigenpy/decompositions/sparse/LDLT.hpp
    include/eigenpy/decompositions/sparse/SimplicialCholesky.hpp
    include/eigenpy/decompositions/sparse/SparseSolverBase.hpp)

if(BUILD_WITH_CHOLMOD_SUPPORT)
  list(APPEND ${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_HEADERS
       ${${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_CHOLMOD_HEADERS})
endif(BUILD_WITH_CHOLMOD_SUPPORT)

if(BUILD_WITH_ACCELERATE_SUPPORT)
  list(APPEND ${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_HEADERS
       ${${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_ACCELERATE_HEADERS})
endif(BUILD_WITH_ACCELERATE_SUPPORT)

set(${PROJECT_NAME}_DECOMPOSITIONS_HEADERS
set(${PROJECT_NAME}_DECOMPOSITIONS_HEADERS
    ${${PROJECT_NAME}_DECOMPOSITIONS_SPARSE_HEADERS}
    include/eigenpy/decompositions/decompositions.hpp
    include/eigenpy/decompositions/decompositions.hpp
    include/eigenpy/decompositions/EigenSolver.hpp
    include/eigenpy/decompositions/EigenSolver.hpp
    include/eigenpy/decompositions/PermutationMatrix.hpp
    include/eigenpy/decompositions/LDLT.hpp
    include/eigenpy/decompositions/LDLT.hpp
    include/eigenpy/decompositions/LLT.hpp
    include/eigenpy/decompositions/LLT.hpp
    include/eigenpy/decompositions/QR.hpp
    include/eigenpy/decompositions/HouseholderQR.hpp
    include/eigenpy/decompositions/ColPivHouseholderQR.hpp
    include/eigenpy/decompositions/CompleteOrthogonalDecomposition.hpp
    include/eigenpy/decompositions/FullPivHouseholderQR.hpp
    include/eigenpy/decompositions/SelfAdjointEigenSolver.hpp
    include/eigenpy/decompositions/SelfAdjointEigenSolver.hpp
    include/eigenpy/decompositions/minres.hpp)
    include/eigenpy/decompositions/minres.hpp)


set(${PROJECT_NAME}_HEADERS
set(${PROJECT_NAME}_HEADERS
    ${${PROJECT_NAME}_UTILS_HEADERS}
    ${${PROJECT_NAME}_UTILS_HEADERS}
    ${${PROJECT_NAME}_SOLVERS_HEADERS}
    ${${PROJECT_NAME}_SOLVERS_HEADERS}
    ${${PROJECT_NAME}_EIGEN_HEADERS}
    ${${PROJECT_NAME}_DECOMPOSITIONS_HEADERS}
    ${${PROJECT_NAME}_DECOMPOSITIONS_HEADERS}
    include/eigenpy/alignment.hpp
    include/eigenpy/alignment.hpp
    include/eigenpy/computation-info.hpp
    include/eigenpy/computation-info.hpp
    include/eigenpy/deprecation-policy.hpp
    include/eigenpy/eigenpy.hpp
    include/eigenpy/eigenpy.hpp
    include/eigenpy/exception.hpp
    include/eigenpy/exception.hpp
    include/eigenpy/scalar-conversion.hpp
    include/eigenpy/scalar-conversion.hpp
@@ -147,25 +265,37 @@ set(${PROJECT_NAME}_HEADERS
    include/eigenpy/eigen-to-python.hpp
    include/eigenpy/eigen-to-python.hpp
    include/eigenpy/eigen-from-python.hpp
    include/eigenpy/eigen-from-python.hpp
    include/eigenpy/eigen-typedef.hpp
    include/eigenpy/eigen-typedef.hpp
    include/eigenpy/id.hpp
    include/eigenpy/numpy-map.hpp
    include/eigenpy/numpy-map.hpp
    include/eigenpy/geometry.hpp
    include/eigenpy/geometry.hpp
    include/eigenpy/geometry-conversion.hpp
    include/eigenpy/geometry-conversion.hpp
    include/eigenpy/map.hpp
    include/eigenpy/memory.hpp
    include/eigenpy/memory.hpp
    include/eigenpy/numpy.hpp
    include/eigenpy/numpy.hpp
    include/eigenpy/numpy-allocator.hpp
    include/eigenpy/numpy-allocator.hpp
    include/eigenpy/numpy-type.hpp
    include/eigenpy/numpy-type.hpp
    include/eigenpy/registration.hpp
    include/eigenpy/registration.hpp
    include/eigenpy/registration_class.hpp
    include/eigenpy/angle-axis.hpp
    include/eigenpy/angle-axis.hpp
    include/eigenpy/quaternion.hpp
    include/eigenpy/quaternion.hpp
    include/eigenpy/user-type.hpp
    include/eigenpy/user-type.hpp
    include/eigenpy/ufunc.hpp
    include/eigenpy/ufunc.hpp
    include/eigenpy/register.hpp
    include/eigenpy/register.hpp
    include/eigenpy/std-array.hpp
    include/eigenpy/std-map.hpp
    include/eigenpy/std-map.hpp
    include/eigenpy/std-pair.hpp
    include/eigenpy/std-vector.hpp
    include/eigenpy/std-vector.hpp
    include/eigenpy/optional.hpp
    include/eigenpy/pickle-vector.hpp
    include/eigenpy/pickle-vector.hpp
    include/eigenpy/stride.hpp
    include/eigenpy/stride.hpp
    include/eigenpy/tensor/eigen-from-python.hpp
    include/eigenpy/tensor/eigen-from-python.hpp
    include/eigenpy/sparse/eigen-from-python.hpp
    include/eigenpy/scipy-allocator.hpp
    include/eigenpy/scipy-type.hpp
    include/eigenpy/variant.hpp
    include/eigenpy/std-unique-ptr.hpp
    include/eigenpy/swig.hpp
    include/eigenpy/swig.hpp
    include/eigenpy/type_info.hpp
    include/eigenpy/version.hpp)
    include/eigenpy/version.hpp)


list(
list(
@@ -182,7 +312,27 @@ set(${PROJECT_NAME}_SOLVERS_SOURCES src/solvers/preconditioners.cpp
                                    src/solvers/solvers.cpp)
                                    src/solvers/solvers.cpp)


set(${PROJECT_NAME}_DECOMPOSITIONS_SOURCES
set(${PROJECT_NAME}_DECOMPOSITIONS_SOURCES
    src/decompositions/decompositions.cpp)
    src/decompositions/decompositions.cpp
    src/decompositions/eigen-solver.cpp
    src/decompositions/llt-solver.cpp
    src/decompositions/ldlt-solver.cpp
    src/decompositions/minres-solver.cpp
    src/decompositions/qr-solvers.cpp
    src/decompositions/eigen-solver.cpp
    src/decompositions/self-adjoint-eigen-solver.cpp
    src/decompositions/permutation-matrix.cpp
    src/decompositions/simplicial-llt-solver.cpp
    src/decompositions/simplicial-ldlt-solver.cpp)

if(BUILD_WITH_CHOLMOD_SUPPORT)
  list(APPEND ${PROJECT_NAME}_DECOMPOSITIONS_SOURCES
       src/decompositions/cholmod.cpp)
endif(BUILD_WITH_CHOLMOD_SUPPORT)

if(BUILD_WITH_ACCELERATE_SUPPORT)
  list(APPEND ${PROJECT_NAME}_DECOMPOSITIONS_SOURCES
       src/decompositions/accelerate.cpp)
endif(BUILD_WITH_ACCELERATE_SUPPORT)


set(${PROJECT_NAME}_SOURCES
set(${PROJECT_NAME}_SOURCES
    ${${PROJECT_NAME}_SOLVERS_SOURCES}
    ${${PROJECT_NAME}_SOLVERS_SOURCES}
@@ -199,20 +349,39 @@ set(${PROJECT_NAME}_SOURCES
    src/matrix-long-double.cpp
    src/matrix-long-double.cpp
    src/matrix-complex-long-double.cpp
    src/matrix-complex-long-double.cpp
    src/matrix-bool.cpp
    src/matrix-bool.cpp
    src/matrix-int.cpp
    src/matrix-char.cpp
    src/matrix-long.cpp
    src/matrix-int8.cpp
    src/matrix-uint8.cpp
    src/matrix-int16.cpp
    src/matrix-uint16.cpp
    src/matrix-int32.cpp
    src/matrix-uint32.cpp
    src/matrix-windows-long.cpp
    src/matrix-windows-ulong.cpp
    src/matrix-mac-long.cpp
    src/matrix-mac-ulong.cpp
    src/matrix-int64.cpp
    src/matrix-uint64.cpp
    src/matrix-linux-long-long.cpp
    src/matrix-linux-ulong-long.cpp
    src/angle-axis.cpp
    src/angle-axis.cpp
    src/quaternion.cpp
    src/quaternion.cpp
    src/geometry-conversion.cpp
    src/geometry-conversion.cpp
    src/scipy-type.cpp
    src/std-vector.cpp
    src/std-vector.cpp
    src/optional.cpp
    src/type_info.cpp
    src/version.cpp)
    src/version.cpp)


add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
add_library(${PROJECT_NAME} SHARED ${${PROJECT_NAME}_SOURCES}
                                   ${${PROJECT_NAME}_HEADERS})
                                   ${${PROJECT_NAME}_HEADERS})
add_library(${PROJECT_NAME}::${PROJECT_NAME} ALIAS ${PROJECT_NAME})
set_standard_output_directory(${PROJECT_NAME})
target_include_directories(
target_include_directories(
  ${PROJECT_NAME} SYSTEM
  ${PROJECT_NAME} SYSTEM
  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
  PUBLIC $<BUILD_INTERFACE:${CMAKE_CURRENT_BINARY_DIR}/include>
         $<INSTALL_INTERFACE:include>)
         $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}/include>
         $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}>)


modernize_target_link_libraries(
modernize_target_link_libraries(
  ${PROJECT_NAME}
  ${PROJECT_NAME}
@@ -233,17 +402,30 @@ modernize_target_link_libraries(
  ${NUMPY_INCLUDE_DIRS}
  ${NUMPY_INCLUDE_DIRS}
  ${PYTHON_INCLUDE_DIR})
  ${PYTHON_INCLUDE_DIR})


# Links against CholMod
if(BUILD_WITH_CHOLMOD_SUPPORT)
  modernize_target_link_libraries(${PROJECT_NAME} SCOPE PUBLIC TARGETS
                                  CHOLMOD::CHOLMOD)
endif(BUILD_WITH_CHOLMOD_SUPPORT)

# Links against accelerate
if(BUILD_WITH_ACCELERATE_SUPPORT)
  # modernize_target_link_libraries(${PROJECT_NAME} SCOPE PUBLIC TARGETS
  # Accelerate)
  target_link_libraries(${PROJECT_NAME} PRIVATE "-framework accelerate")
endif(BUILD_WITH_ACCELERATE_SUPPORT)

if(SUFFIX_SO_VERSION)
if(SUFFIX_SO_VERSION)
  set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
  set_target_properties(${PROJECT_NAME} PROPERTIES SOVERSION ${PROJECT_VERSION})
endif(SUFFIX_SO_VERSION)
endif(SUFFIX_SO_VERSION)


if(NOT WIN32)
if(NOT WIN32)
  target_compile_options(
  target_compile_options(
    ${PROJECT_NAME} PRIVATE $<$<CXX_COMPILER_ID:MSVC>:-bigobj>
    ${PROJECT_NAME} PRIVATE $<$<CXX_COMPILER_ID:MSVC>:-bigobj -MP>
                            "-Wno-conversion")
                            "-Wno-conversion")
else()
else()
  target_compile_options(${PROJECT_NAME}
  target_compile_options(${PROJECT_NAME}
                         PRIVATE $<$<CXX_COMPILER_ID:MSVC>:-bigobj>)
                         PRIVATE $<$<CXX_COMPILER_ID:MSVC>:-bigobj -MP>)
  target_compile_definitions(${PROJECT_NAME} PUBLIC "HAVE_SNPRINTF")
  target_compile_definitions(${PROJECT_NAME} PUBLIC "HAVE_SNPRINTF")
endif()
endif()


@@ -263,29 +445,6 @@ add_source_group(${PROJECT_NAME}_SOURCES)


# Install package for ROS
# Install package for ROS
install(FILES package.xml DESTINATION share/eigenpy)
install(FILES package.xml DESTINATION share/eigenpy)
# Allows Colcon to find non-Ament packages when using workspace underlays
file(
  WRITE
  ${CMAKE_CURRENT_BINARY_DIR}/share/ament_index/resource_index/packages/${PROJECT_NAME}
  "")
install(
  FILES
    ${CMAKE_CURRENT_BINARY_DIR}/share/ament_index/resource_index/packages/${PROJECT_NAME}
  DESTINATION share/ament_index/resource_index/packages)
file(
  WRITE
  ${CMAKE_CURRENT_BINARY_DIR}/share/${PROJECT_NAME}/hook/ament_prefix_path.dsv
  "prepend-non-duplicate;AMENT_PREFIX_PATH;")
install(
  FILES
    ${CMAKE_CURRENT_BINARY_DIR}/share/${PROJECT_NAME}/hook/ament_prefix_path.dsv
  DESTINATION share/${PROJECT_NAME}/hook)
file(WRITE
     ${CMAKE_CURRENT_BINARY_DIR}/share/${PROJECT_NAME}/hook/python_path.dsv
     "prepend-non-duplicate;PYTHONPATH;${PYTHON_SITELIB}")
install(
  FILES ${CMAKE_CURRENT_BINARY_DIR}/share/${PROJECT_NAME}/hook/python_path.dsv
  DESTINATION share/${PROJECT_NAME}/hook)


# ----------------------------------------------------
# ----------------------------------------------------
# --- PYTHON LIBRARY ---------------------------------
# --- PYTHON LIBRARY ---------------------------------
@@ -301,3 +460,5 @@ pkg_config_append_libs(${PROJECT_NAME})
pkg_config_append_cflags("-I${PYTHON_INCLUDE_DIRS}")
pkg_config_append_cflags("-I${PYTHON_INCLUDE_DIRS}")
pkg_config_append_cflags("-I${NUMPY_INCLUDE_DIRS}")
pkg_config_append_cflags("-I${NUMPY_INCLUDE_DIRS}")
pkg_config_append_boost_libs(${BOOST_COMPONENTS})
pkg_config_append_boost_libs(${BOOST_COMPONENTS})

setup_project_finalize()
+1 −1
Original line number Original line Diff line number Diff line
BSD 2-Clause License
BSD 2-Clause License


Copyright (c) 2014-2020, CNRS
Copyright (c) 2014-2020, CNRS
Copyright (c) 2018-2023, INRIA
Copyright (c) 2018-2025, INRIA
All rights reserved.
All rights reserved.


Redistribution and use in source and binary forms, with or without
Redistribution and use in source and binary forms, with or without
+37 −26
Original line number Original line Diff line number Diff line
EigenPy — Efficient Python bindings between Numpy/Eigen
EigenPy — Versatile and efficient Python bindings between Numpy and Eigen
======
======


<p align="center">
<p align="center">
  <a href="https://opensource.org/licenses/BSD-2-Clause"><img src="https://img.shields.io/badge/License-BSD%202--Clause-green.svg" alt="License"/></a>
  <a href="https://opensource.org/licenses/BSD-2-Clause"><img src="https://img.shields.io/badge/License-BSD%202--Clause-green.svg" alt="License"/></a>
  <a href="https://travis-ci.org/stack-of-tasks/eigenpy"><img src="https://travis-ci.org/stack-of-tasks/eigenpy.svg?branch=master" alt="Build Status"/></a>
  <a href="https://github.com/stack-of-tasks/eigenpy/workflows/linux.yml"><img alt="Build Status" src="https://github.com/stack-of-tasks/eigenpy/actions/workflows/linux.yml/badge.svg?branch=devel" /></a>
  <a href="https://anaconda.org/conda-forge/eigenpy"><img src="https://img.shields.io/conda/dn/conda-forge/eigenpy.svg" alt="Conda Downloads"/></a>
  <a href="https://anaconda.org/conda-forge/eigenpy"><img src="https://img.shields.io/conda/dn/conda-forge/eigenpy.svg" alt="Conda Downloads"/></a>
  <a href="https://anaconda.org/conda-forge/eigenpy"><img src="https://img.shields.io/conda/vn/conda-forge/eigenpy.svg" alt="Conda Version"/></a>
  <a href="https://anaconda.org/conda-forge/eigenpy"><img src="https://img.shields.io/conda/vn/conda-forge/eigenpy.svg" alt="Conda Version"/></a>
  <a href="https://badge.fury.io/py/eigenpy"><img src="https://badge.fury.io/py/eigenpy.svg" alt="PyPI version"></a>
  <a href="https://badge.fury.io/py/eigenpy"><img src="https://badge.fury.io/py/eigenpy.svg" alt="PyPI version"></a>
  <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black"></a>
  <a href="https://github.com/psf/black"><img src="https://img.shields.io/badge/code%20style-black-000000.svg" alt="Code style: black"></a>
  <a href="https://github.com/astral-sh/ruff"><img src="https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json" alt="Linter: ruff"></a>
</p>
</p>


**EigenPy** is an open source framework which allows to bind the famous [Eigen](http://eigen.tuxfamily.org) C++ library in Python.
**EigenPy** is an open-source framework that allows the binding of the famous [Eigen](http://eigen.tuxfamily.org) C++ library in Python via Boost.Python.


**EigenPy** provides:
**EigenPy** provides:
 - full memory sharing between Numpy and Eigen avoiding memory allocation

- full memory sharing between Numpy and Eigen, avoiding memory allocation
- full support Eigen::Ref avoiding memory allocation
- full support Eigen::Ref avoiding memory allocation
- full support of the Eigen::Tensor module
- exposition of the Geometry module of Eigen for easy code prototyping
- exposition of the Geometry module of Eigen for easy code prototyping
 - standard matrix decomposion routines of Eigen such as the Cholesky decomposition, SVD decomposition, QR decomposition, and etc.
- standard matrix decomposion routines of Eigen such as the Cholesky decomposition (SVD and QR decompositions [can be added](#contributing))
- full support of SWIG objects
- full support of SWIG objects
- full support of runtime declaration of Numpy scalar types
- extended API to expose several STL types and some of their Boost equivalents: `optional` types, `std::pair`, maps, variants...
- full support of vectorization between C++ and Python (all the hold objects are properly aligned in memory)


## Setup
## Installation


The installation of **EigenPy** on your computer is made easy for Linux/BSD, Mac OS X and Windows environments.
The installation of **EigenPy** on your computer is made easy for Linux/BSD, Mac OS X, and Windows environments.


### The Conda approach
### Conda


You simply need this simple line:
You simply need this simple line:
```
```bash
conda install eigenpy -c conda-forge
conda install eigenpy -c conda-forge
```
```

### Ubuntu
### Ubuntu


You can easily install **EigenPy** from binairies.
You can easily install **EigenPy** from binaries.


#### Add robotpkg apt repository
#### Add robotpkg apt repository

1. Add robotpkg as source repository to apt:
1. Add robotpkg as source repository to apt:
```
```
sudo sh -c "echo 'deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -cs) robotpkg' >> /etc/apt/sources.list.d/robotpkg.list"
sudo sh -c "echo 'deb [arch=amd64] http://robotpkg.openrobots.org/packages/debian/pub $(lsb_release -cs) robotpkg' >> /etc/apt/sources.list.d/robotpkg.list"
@@ -42,27 +50,24 @@ sudo sh -c "echo 'deb [arch=amd64] http://robotpkg.openrobots.org/packages/debia
```
```
curl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | sudo apt-key add -
curl http://robotpkg.openrobots.org/packages/debian/robotpkg.key | sudo apt-key add -
```
```
3. You need to run at least once apt update to fetch the package descriptions:
3. You need to run at least one apt update to fetch the package descriptions:
```
```bash
sudo apt-get update
sudo apt-get update
```
```

#### Install EigenPy
#### Install EigenPy

4. The installation of **EigenPy** and its dependencies is made through the line:
4. The installation of **EigenPy** and its dependencies is made through the line:


For Python 2.7
```bash
```
sudo apt install robotpkg-py27-eigenpy
```
or for Python 3.{5,6,7}
```
sudo apt install robotpkg-py35-eigenpy
sudo apt install robotpkg-py35-eigenpy
```
```
where 35 should be replaced by the python 3 you want to work this (e.g. `robotpkg-py36-eigenpy` to work with Python 3.6).
where 35 should be replaced by the Python 3, you want to work this (e.g., `robotpkg-py36-eigenpy` to work with Python 3.6).


### Mac OS X
### Mac OS X


The installation of **EigenPy** on Mac OS X is made via [HomeBrew](https://brew.sh/).
The installation of **EigenPy** on Mac OS X is made via [HomeBrew](https://brew.sh/).
You just need to register the tap of the sofware repository.
You just need to register the tap of the software repository.


```
```
brew tap gepetto/homebrew-gepetto
brew tap gepetto/homebrew-gepetto
@@ -72,17 +77,23 @@ and then install **EigenPy** for Python 3.x with:
brew install eigenpy
brew install eigenpy
```
```


## Build

Build instruction can be found [here](./development/build.md)

## Credits
## Credits


The following people have been involved in the development of **EigenPy**:
The following people have been involved in the development of **EigenPy**:


- [Justin Carpentier](https://jcarpent.github.io) (INRIA): main developer and manager of the project
- [Justin Carpentier](https://jcarpent.github.io) (Inria): main developer and manager of the project
- [Nicolas Mansard](http://projects.laas.fr/gepetto/index.php/Members/NicolasMansard) (LAAS-CNRS): initial project instructor
- [Nicolas Mansard](http://projects.laas.fr/gepetto/index.php/Members/NicolasMansard) (LAAS-CNRS): initial project instructor
- [Wolfgang Merkt](http://www.wolfgangmerkt.com/) (University of Edinburgh): ROS integration and support
- [Wolfgang Merkt](http://www.wolfgangmerkt.com/) (University of Edinburgh): ROS integration and support
- [Sean Yen](https://www.linkedin.com/in/seanyentw) (Microsoft): Windows integration
- [Sean Yen](https://www.linkedin.com/in/seanyentw) (Microsoft): Windows integration
- [Loïc Estève](https://github.com/lesteve) (INRIA): Conda integration
- [Loïc Estève](https://github.com/lesteve) (Inria): Conda integration
- [Wilson Jallet](https://manifoldfr.github.io/) (Inria/LAAS-CNRS): core developer
- [Joris Vaillant](https://github.com/jorisv) (Inria): core developer and manager of the project


If you have taken part to the development of **EigenPy**, feel free to add your name and contribution here.
If you have taken part in the development of **EigenPy**, feel free to add your name and contribution here.


## Acknowledgments
## Acknowledgments


+3 −22
Original line number Original line Diff line number Diff line
from __future__ import print_function

import eigenpy
import numpy as np

import time  # noqa
import time  # noqa
import timeit  # noqa
import timeit  # noqa


import numpy as np
from IPython import get_ipython
from IPython import get_ipython


import eigenpy

ipython = get_ipython()
ipython = get_ipython()


quat = eigenpy.Quaternion()
quat = eigenpy.Quaternion()
@@ -24,23 +22,6 @@ print(cmd2)
ipython.magic(cmd2)
ipython.magic(cmd2)
print("\n")
print("\n")


eigenpy.switchToNumpyMatrix()
print("----------------------")
print("switch to numpy matrix")
print("----------------------")
print("\n")

cmd3 = "timeit quat.coeffs()"
print(cmd3)
ipython.magic(cmd3)
print("\n")

eigenpy.switchToNumpyArray()
print("---------------------")
print("switch to numpy array")
print("---------------------")
print("\n")

cmd4 = "timeit quat.coeffs()"
cmd4 = "timeit quat.coeffs()"
print(cmd4)
print(cmd4)
ipython.magic(cmd4)
ipython.magic(cmd4)
Compare 4bf6c7fc to b5ae8e49
Original line number Original line Diff line number Diff line
Subproject commit 4bf6c7fc970aa5ef35627f2c7cca79eb9275bec8
Subproject commit b5ae8e49306840a50ae9c752c5b4040f892c89d8

development/build.md

0 → 100644
+17 −0
Original line number Original line Diff line number Diff line
# Build and install from source with Pixi

To build **EigenPy** from source the easiest way is to use [Pixi](https://pixi.sh/latest/#installation).

[Pixi](https://pixi.sh/latest/) is a cross-platform package management tool for developers that
will install all required dependencies in `.pixi` directory.
It's used by our CI agent so you have the guarantee to get the right dependencies.

Run the following command to install dependencies, configure, build and test the project:

```bash
pixi run test
```

The project will be built in the `build` directory.
You can run `pixi shell` and build the project with `cmake` and `ninja` manually.
+7 −0
Original line number Original line Diff line number Diff line
# Contributing

Standard matrix decomposion routines of Eigen such as the SVD and QR decompositions
can be readily added to **EigenPy** following the example of the Cholesky decomposition
that is already implemented.
Feel free to open a PR if you wrap them for your use case.

development/release.md

0 → 100644
+34 −0
Original line number Original line Diff line number Diff line
# Release with Pixi

To create a release with Pixi run the following commands on the **devel** branch:

```bash
EIGENPY_VERSION=X.Y.Z pixi run release_new_version
git push origin
git push origin vX.Y.Z
git push origin devel:master
```

Where `X.Y.Z` is the new version.
Be careful to follow the [Semantic Versioning](https://semver.org/spec/v2.0.0.html) rules.

You will find the following assets:
- `./build_new_version/eigenpy-X.Y.Z.tar.gz`
- `./build_new_version/eigenpy-X.Y.Z.tar.gz.sig`

Then, create a new release on [GitHub](https://github.com/stack-of-tasks/eigenpy/releases/new) with:

* Tag: vX.Y.Z
* Title: EigenPy X.Y.Z
* Body:
```
## What's Changed

CHANGELOG CONTENT

**Full Changelog**: https://github.com/stack-of-tasks/eigenpy/compare/vXX.YY.ZZ...vX.Y.Z
```

Where `XX.YY.ZZ` is the last release version.

Then upload `eigenpy-X.Y.Z.tar.gz` and `eigenpy-X.Y.Z.tar.gz.sig` and publish the release.
+14 −0
Original line number Original line Diff line number Diff line
:: Setup ccache
set CMAKE_CXX_COMPILER_LAUNCHER=ccache

:: Create compile_commands.json for language server
set CMAKE_EXPORT_COMPILE_COMMANDS=1

:: Activate color output with Ninja
set CMAKE_COLOR_DIAGNOSTICS=1

:: Set default build value only if not previously set
if not defined EIGENPY_BUILD_TYPE (set EIGENPY_BUILD_TYPE=Release)
if not defined EIGENPY_PYTHON_STUBS (set EIGENPY_PYTHON_STUBS=ON)
if not defined EIGENPY_CHOLMOD_SUPPORT (set EIGENPY_CHOLMOD_SUPPORT=OFF)
if not defined EIGENPY_ACCELERATE_SUPPORT (set EIGENPY_ACCELERATE_SUPPORT=OFF)
+38 −0
Original line number Original line Diff line number Diff line
#! /bin/bash
# Activation script

# Remove flags setup from cxx-compiler
unset CFLAGS
unset CPPFLAGS
unset CXXFLAGS
unset DEBUG_CFLAGS
unset DEBUG_CPPFLAGS
unset DEBUG_CXXFLAGS
unset LDFLAGS

if [[ $host_alias == *"apple"* ]];
then
  # On OSX setting the rpath and -L it's important to use the conda libc++ instead of the system one.
  # If conda-forge use install_name_tool to package some libs, -headerpad_max_install_names is then mandatory
  export LDFLAGS="-Wl,-headerpad_max_install_names -Wl,-rpath,$CONDA_PREFIX/lib -L$CONDA_PREFIX/lib"
elif [[ $host_alias == *"linux"* ]];
then
  # On GNU/Linux, I don't know if these flags are mandatory with g++ but
  # it allow to use clang++ as compiler
  export LDFLAGS="-Wl,-rpath,$CONDA_PREFIX/lib -Wl,-rpath-link,$CONDA_PREFIX/lib -L$CONDA_PREFIX/lib"
fi

# Setup ccache
export CMAKE_CXX_COMPILER_LAUNCHER=ccache

# Create compile_commands.json for language server
export CMAKE_EXPORT_COMPILE_COMMANDS=1

# Activate color output with Ninja
export CMAKE_COLOR_DIAGNOSTICS=1

# Set default build value only if not previously set
export EIGENPY_BUILD_TYPE=${EIGENPY_BUILD_TYPE:=Release}
export EIGENPY_PYTHON_STUBS=${EIGENPY_PYTHON_STUBS:=ON}
export EIGENPY_CHOLMOD_SUPPORT=${EIGENPY_CHOLMOD_SUPPORT:=OFF}
export EIGENPY_ACCELERATE_SUPPORT=${EIGENPY_ACCELERATE_SUPPORT:=OFF}
+5 −0
Original line number Original line Diff line number Diff line
#! /bin/bash
# Clang activation script

export CC="clang"
export CXX="clang++"
+3 −0
Original line number Original line Diff line number Diff line
:: Setup clang-cl compiler
set CC=clang-cl
set CXX=clang-cl
+32 −5
Original line number Original line Diff line number Diff line
INPUT                  = @CMAKE_SOURCE_DIR@/src \
INPUT                 = @PROJECT_SOURCE_DIR@/doc \
                         @CMAKE_SOURCE_DIR@/doc/additionalDoc
                        @PROJECT_SOURCE_DIR@/include \
IMAGE_PATH             = @CMAKE_SOURCE_DIR@/doc/pictures
                        @PROJECT_SOURCE_DIR@/README.md


FILE_PATTERNS          = *.cc *.cpp *.h *.hpp *.hxx
RECURSIVE               = YES


TAGFILES               = \
FILE_PATTERNS          = *.cpp *.h *.hpp *.hxx

EXTRACT_ALL             = NO
EXTRACT_ANON_NSPACES    = NO

ENABLE_PREPROCESSING    = YES
MACRO_EXPANSION         = YES

FULL_PATH_NAMES         = YES
EXCLUDE_SYMBOLS         = std, *::internal, internal::*, *::internal::*

INCLUDE_PATH            = @PROJECT_SOURCE_DIR@/include

GENERATE_TREEVIEW       = YES

VERBATIM_HEADERS        = YES

SHOW_FILES              = YES
SHOW_NAMESPACES         = YES

SOURCE_BROWSER          = YES

ALPHABETICAL_INDEX      = YES

USE_MDFILE_AS_MAINPAGE  = README.md
BUILTIN_STL_SUPPORT     = YES
HAVE_DOT                = YES
DOT_IMAGE_FORMAT        = SVG

doc/additionalDoc/package.hh

deleted100644 → 0
+0 −26
Original line number Original line Diff line number Diff line
/*
 * Copyright 2010,
 * François Bleibel,
 * Olivier Stasse,
 *
 * CNRS/AIST
 *
 * This file is part of sot-dynamic.
 * sot-dynamic is free software: you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation, either version 3 of
 * the License, or (at your option) any later version.
 * sot-dynamic 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 Lesser General Public License for more details.  You should
 * have received a copy of the GNU Lesser General Public License along
 * with sot-dynamic.  If not, see <http://www.gnu.org/licenses/>.
 */

/** \mainpage
\section soth_section_introduction Introduction

The soth package is ...

**/

doc/footer.html

deleted100644 → 0
+0 −11
Original line number Original line Diff line number Diff line
 <br><br>
 <hr>
 <center>
 <img src="./pictures/footer.jpg" Height=100>
 <br>soth library documentation</br>
 </center>
 <hr>
 </center>
 </body>
 </head>

doc/header.html

deleted100644 → 0
+0 −7
Original line number Original line Diff line number Diff line
<HTML>
    <HEAD>
      <TITLE>soth library documentation</TITLE>
      <LINK HREF="package.css" REL="stylesheet" TYPE="text/css">
    </HEAD>
    <BODY>

doc/package.css

deleted100644 → 0
+0 −230
Original line number Original line Diff line number Diff line
body {
    font-family: 'Lucida Grande','Lucida Sans Unicode',Verdana,Sans-Serif;
    color: #5D5D5D;
}

dl {
    border: 1.5px #82b6d7 solid;
    width: 97%;
    padding: 5px;
    color: #330077;
}

code {
    color: #3C9A35;
}

td.md {
    color: #0066CC;
}

h1 {
    padding-top: 50px;
    padding: 0px;
    font-family: 'Lucida Grande','Lucida Sans Unicode',Verdana,Sans-Serif;
    font-variant: small-caps;
    color:#0066CC;
    text-align: center;
}

h2,h3,hr {
    magin-top: 15px;
    padding: 0px;
    font-family: 'Lucida Grande','Lucida Sans Unicode',Verdana,Sans-Serif;
    font-variant: small-caps;
    color:#0066CC;
}

h4 {
    color: #3C9A35;
}

a:link {
    font-weight: bold;
    text-decoration: none;
    color:#0066CC
}

a:hover, a:active {
	text-decoration: underline;
	color: #3C9A35;
}

a:visited {
    font-weight: bold;
    color: #3C9A35;
    text-decoration: none;
}

DIV.memitem
{
  spacing: 10px;
  width:100%;
  background:#FFFFFF;
  font-size:100%;
  line-height:normal;
  border-width: 1px;
  border-style: solid;
  border-color: #808080;
  -moz-border-radius: 8px 8px 8px 8px;
}

DIV.memproto
{
  width:100%;
  background:#F0F0F0;
  font-size:100%;
  line-height:normal;
  border-width: 1px;
  border-style: solid;
  border-color: #808080;
  -moz-border-radius: 8px 8px 8px 8px;
}

DIV.memdoc
{
  padding: 10px;
  width:100%;
  font-size:100%;
  line-height:normal;
}

DIV.tabs
{
   float            : left;
   width            : 100%;
   background       : url("tab_b.gif") repeat-x bottom;
   margin-bottom    : 4px;
}

DIV.tabs UL
{
   margin           : 0px;
   padding-left     : 10px;
   list-style       : none;
}

DIV.tabs LI, DIV.tabs FORM
{
   display          : inline;
   margin           : 0px;
   padding          : 0px;
}

DIV.tabs FORM
{
   float            : right;
}

DIV.tabs A
{
   float            : left;
   background       : url("tab_r.gif") no-repeat right top;
   border-bottom    : 1px solid #84B0C7;
   font-size        : x-small;
   font-weight      : bold;
   text-decoration  : none;
}

DIV.tabs A:hover
{
   background-position: 100% -150px;
}

DIV.tabs A:link, DIV.tabs A:visited,
DIV.tabs A:active, DIV.tabs A:hover
{
       color: #1A419D;
}

DIV.tabs SPAN
{
   float            : left;
   display          : block;
   background       : url("tab_l.gif") no-repeat left top;
   padding          : 5px 9px;
   white-space      : nowrap;
}

DIV.tabs INPUT
{
   float            : right;
   display          : inline;
   font-size        : 1em;
}

DIV.tabs TD
{
   font-size        : x-small;
   font-weight      : bold;
   text-decoration  : none;
}



DIV.tabs SPAN {float : none;}

DIV.tabs A:hover SPAN
{
   background-position: 0% -150px;
}

DIV.tabs LI#current A
{
   background-position: 100% -150px;
   border-width     : 0px;
}

DIV.tabs LI#current SPAN
{
   background-position: 0% -150px;
   padding-bottom   : 6px;
}

DIV.nav
{
   background       : none;
   border           : none;
   border-bottom    : 1px solid #84B0C7;
}

DIV.groupHeader
{
  padding-top: 30px;
  padding-bottom: 20px;
  background       : none;
  border           : none;
  border-bottom    : 1px solid #84B0C7;
  font-family: 'Lucida Grande','Lucida Sans Unicode',Verdana,Sans-Serif;
  font-variant: small-caps;
  font-size: 14pt;
  color:#0066CC;
}

.directory p
{
    margin: 0px;
    white-space: nowrap;
    font-family: 'Lucida Grande','Lucida Sans Unicode',Verdana,Sans-Serif;
    font-size: 10pt;
    font-weight: normal;
}