GNU bug report logs - #32219
[PATCH] gnu: Add avogadro.

Previous Next

Package: guix-patches;

Reported by: Kei Kebreau <kkebreau <at> posteo.net>

Date: Fri, 20 Jul 2018 05:11:02 UTC

Severity: normal

Tags: patch

Done: Kei Kebreau <kkebreau <at> posteo.net>

Bug is archived. No further changes may be made.

To add a comment to this bug, you must first unarchive it, by sending
a message to control AT debbugs.gnu.org, with unarchive 32219 in the body.
You can then email your comments to 32219 AT debbugs.gnu.org in the normal way.

Toggle the display of automated, internal messages from the tracker.

View this report as an mbox folder, status mbox, maintainer mbox


Report forwarded to guix-patches <at> gnu.org:
bug#32219; Package guix-patches. (Fri, 20 Jul 2018 05:11:02 GMT) Full text and rfc822 format available.

Acknowledgement sent to Kei Kebreau <kkebreau <at> posteo.net>:
New bug report received and forwarded. Copy sent to guix-patches <at> gnu.org. (Fri, 20 Jul 2018 05:11:02 GMT) Full text and rfc822 format available.

Message #5 received at submit <at> debbugs.gnu.org (full text, mbox):

From: Kei Kebreau <kkebreau <at> posteo.net>
To: guix-patches <at> gnu.org
Cc: Kei Kebreau <kkebreau <at> posteo.net>
Subject: [PATCH] gnu: Add avogadro.
Date: Fri, 20 Jul 2018 01:10:26 -0400
* gnu/packages/chemistry.scm (avogadro): New variable.
* gnu/packages/patches/avogadro-boost148.patch,
gnu/packages/patches/avogadro-eigen3-update.patch,
gnu/packages/patches/avogadro-python-eigen-lib.patch: New files.
* gnu/local.mk (dist_patch_DATA): Add them.
---
 gnu/local.mk                                  |   3 +
 gnu/packages/chemistry.scm                    |  81 +++
 gnu/packages/patches/avogadro-boost148.patch  |  70 ++
 .../patches/avogadro-eigen3-update.patch      | 603 ++++++++++++++++++
 .../patches/avogadro-python-eigen-lib.patch   | 162 +++++
 5 files changed, 919 insertions(+)
 create mode 100644 gnu/packages/patches/avogadro-boost148.patch
 create mode 100644 gnu/packages/patches/avogadro-eigen3-update.patch
 create mode 100644 gnu/packages/patches/avogadro-python-eigen-lib.patch

diff --git a/gnu/local.mk b/gnu/local.mk
index e55c2bf3b..923257ff6 100644
--- a/gnu/local.mk
+++ b/gnu/local.mk
@@ -579,6 +579,9 @@ dist_patch_DATA =						\
   %D%/packages/patches/audacity-build-with-system-portaudio.patch \
   %D%/packages/patches/automake-skip-amhello-tests.patch	\
   %D%/packages/patches/avahi-localstatedir.patch		\
+  %D%/packages/patches/avogadro-boost148.patch			\
+  %D%/packages/patches/avogadro-eigen3-update.patch		\
+  %D%/packages/patches/avogadro-python-eigen-lib.patch		\
   %D%/packages/patches/avidemux-install-to-lib.patch		\
   %D%/packages/patches/awesome-reproducible-png.patch		\
   %D%/packages/patches/azr3.patch				\
diff --git a/gnu/packages/chemistry.scm b/gnu/packages/chemistry.scm
index a81c14b43..9aa1b5e4f 100644
--- a/gnu/packages/chemistry.scm
+++ b/gnu/packages/chemistry.scm
@@ -21,17 +21,98 @@
   #:use-module (guix packages)
   #:use-module ((guix licenses) #:prefix license:)
   #:use-module (guix download)
+  #:use-module (gnu packages)
   #:use-module (gnu packages algebra)
+  #:use-module (gnu packages boost)
   #:use-module (gnu packages compression)
+  #:use-module (gnu packages documentation)
+  #:use-module (gnu packages gl)
   #:use-module (gnu packages gv)
   #:use-module (gnu packages maths)
   #:use-module (gnu packages pkg-config)
   #:use-module (gnu packages python)
+  #:use-module (gnu packages qt)
   #:use-module (gnu packages xml)
   #:use-module (guix build-system cmake)
   #:use-module (guix build-system gnu)
   #:use-module (guix build-system python))
 
+(define-public avogadro
+  (package
+    (name "avogadro")
+    (version "1.2.0")
+    (source (origin
+              (method url-fetch)
+              (uri (string-append "https://github.com/cryos/avogadro/archive/"
+                                  version ".tar.gz"))
+              (sha256
+               (base32
+                "02v4h6hi1m7ilv0apdf74a8l1cm6dxnxyqp0rdaidrp3i9pf6lv4"))
+              (file-name (string-append name "-" version ".tar.gz"))
+              (patches
+               (search-patches "avogadro-eigen3-update.patch"
+                               "avogadro-python-eigen-lib.patch"
+                               "avogadro-boost148.patch"))))
+    (build-system cmake-build-system)
+    (arguments
+     '(#:tests? #f
+       #:configure-flags
+       (list "-DENABLE_GLSL=ON"
+             (string-append "-DPYTHON_LIBRARIES="
+                            (assoc-ref %build-inputs "python")
+                            "/lib")
+             (string-append "-DPYTHON_INCLUDE_DIRS="
+                            (assoc-ref %build-inputs "python")
+                            "/include/python2.7"))
+       #:phases
+       (modify-phases %standard-phases
+         (add-after 'unpack 'patch-python-lib-path
+           (lambda* (#:key outputs #:allow-other-keys)
+             ;; This is necessary to install the Python module in the correct
+             ;; directory.
+             (substitute* "libavogadro/src/python/CMakeLists.txt"
+               (("^EXECUTE_PROCESS.*$") "")
+               (("^.*from sys import stdout.*$") "")
+               (("^.*OUTPUT_VARIABLE.*")
+                (string-append "set(PYTHON_LIB_PATH \""
+                               (assoc-ref outputs "out")
+                               "/lib/python2.7/site-packages\")")))
+             #t))
+         (add-after 'install 'wrap-program
+           (lambda* (#:key inputs outputs #:allow-other-keys)
+             ;; Make sure 'avogadro' runs with the correct PYTHONPATH.
+             (let* ((out (assoc-ref outputs "out")))
+               (setenv "PYTHONPATH"
+                       (string-append
+                        (assoc-ref outputs "out")
+                        "/lib/python2.7/site-packages:"
+                        (getenv "PYTHONPATH")))
+               (wrap-program (string-append out "/bin/avogadro")
+                 `("PYTHONPATH" ":" prefix (,(getenv "PYTHONPATH")))))
+             #t)))))
+    (native-inputs
+     `(("doxygen" ,doxygen)
+       ("pkg-config" ,pkg-config)))
+    (inputs
+     `(("boost" ,boost)
+       ("eigen" ,eigen)
+       ("glew" ,glew)
+       ("openbabel" ,openbabel)
+       ("python" ,python-2)
+       ("python-numpy" ,python2-numpy)
+       ("python-pyqt" ,python2-pyqt-4)
+       ("python-sip" ,python2-sip)
+       ("qt" ,qt-4)
+       ("zlib" ,zlib)))
+    (home-page "https://avogadro.cc")
+    (synopsis "Advanced molecule editor")
+    (description
+     "Avogadro is an advanced molecule editor and visualizer designed for use
+in computational chemistry, molecular modeling, bioinformatics, materials
+science, and related areas.  It offers flexible high quality rendering and a
+powerful plugin architecture.")
+    (license license:gpl2+)))
+
 (define-public domainfinder
   (package
     (name "domainfinder")
diff --git a/gnu/packages/patches/avogadro-boost148.patch b/gnu/packages/patches/avogadro-boost148.patch
new file mode 100644
index 000000000..a2e570d8b
--- /dev/null
+++ b/gnu/packages/patches/avogadro-boost148.patch
@@ -0,0 +1,70 @@
+Index: avogadro-1.2.0/libavogadro/src/pythonengine_p.h
+===================================================================
+--- avogadro-1.2.0.orig/libavogadro/src/pythonengine_p.h
++++ avogadro-1.2.0/libavogadro/src/pythonengine_p.h
+@@ -31,7 +31,9 @@
+ 
+ #include <avogadro/global.h>
+ #include <avogadro/engine.h>
++#ifndef Q_MOC_RUN
+ #include <boost/python.hpp>
++#endif
+ 
+ namespace Avogadro {
+ 
+Index: avogadro-1.2.0/libavogadro/src/pythonextension_p.h
+===================================================================
+--- avogadro-1.2.0.orig/libavogadro/src/pythonextension_p.h
++++ avogadro-1.2.0/libavogadro/src/pythonextension_p.h
+@@ -33,7 +33,9 @@
+ #include <avogadro/extension.h>
+ #include <avogadro/primitive.h>
+ #include <avogadro/glwidget.h>
++#ifndef Q_MOC_RUN
+ #include <boost/python.hpp>
++#endif
+ 
+ #include <QWidget>
+ #include <QList>
+Index: avogadro-1.2.0/libavogadro/src/pythontool_p.h
+===================================================================
+--- avogadro-1.2.0.orig/libavogadro/src/pythontool_p.h
++++ avogadro-1.2.0/libavogadro/src/pythontool_p.h
+@@ -31,7 +31,9 @@
+ 
+ #include <avogadro/global.h>
+ #include <avogadro/tool.h>
++#ifndef Q_MOC_RUN
+ #include <boost/python.hpp>
++#endif
+ 
+ #include <QObject>
+ #include <QAction>
+Index: avogadro-1.2.0/libavogadro/src/pythoninterpreter.h
+===================================================================
+--- avogadro-1.2.0.orig/libavogadro/src/pythoninterpreter.h
++++ avogadro-1.2.0/libavogadro/src/pythoninterpreter.h
+@@ -26,7 +26,9 @@
+ #define PYTHONINTERPRETER_H
+ 
+ #include <avogadro/global.h>
++#ifndef Q_MOC_RUN
+ #include <boost/python.hpp>
++#endif
+ #include <avogadro/primitive.h>
+ #include <QString>
+ 
+Index: avogadro-1.2.0/libavogadro/src/pythonscript.h
+===================================================================
+--- avogadro-1.2.0.orig/libavogadro/src/pythonscript.h
++++ avogadro-1.2.0/libavogadro/src/pythonscript.h
+@@ -27,7 +27,9 @@
+ #define PYTHONSCRIPT_H
+ 
+ #include <avogadro/global.h>
++#ifndef Q_MOC_RUN
+ #include <boost/python.hpp>
++#endif
+ 
+ #include "pythonerror.h"
+ 
diff --git a/gnu/packages/patches/avogadro-eigen3-update.patch b/gnu/packages/patches/avogadro-eigen3-update.patch
new file mode 100644
index 000000000..2269b0a14
--- /dev/null
+++ b/gnu/packages/patches/avogadro-eigen3-update.patch
@@ -0,0 +1,603 @@
+From 43af3c117b0b3220b15c2fe2895b94bbd83d3a60 Mon Sep 17 00:00:00 2001
+From: Claudio Fernandes <claudiosf.claudio <at> gmail.com>
+Date: Sun, 15 Jan 2017 21:23:39 -0200
+Subject: [PATCH] Adapt Avogadro to Eigen 3.3
+
+---
+ CMakeLists.txt                                     |  9 +------
+ avogadro/src/mainwindow.cpp                        |  5 ++--
+ libavogadro/src/camera.cpp                         | 10 ++++----
+ libavogadro/src/camera.h                           | 14 +++++------
+ libavogadro/src/engines/wireengine.cpp             |  4 ++--
+ .../crystallography/crystallographyextension.cpp   |  2 +-
+ .../crystallography/ui/ceviewoptionswidget.cpp     |  2 +-
+ .../src/extensions/orca/orcaanalysedialog.cpp      |  1 -
+ .../src/extensions/orca/orcainputdialog.cpp        |  1 -
+ .../src/extensions/qtaim/qtaimmathutilities.cpp    |  1 +
+ .../qtaim/qtaimwavefunctionevaluator.cpp           | 28 +++++++++++-----------
+ .../extensions/surfaces/openqube/gamessukout.cpp   |  1 +
+ .../src/extensions/surfaces/openqube/slaterset.cpp |  6 +++--
+ libavogadro/src/glpainter_p.cpp                    | 14 +++++------
+ libavogadro/src/glwidget.cpp                       |  4 ++--
+ libavogadro/src/molecule.cpp                       | 26 ++++++++++++++++++--
+ libavogadro/src/navigate.cpp                       |  2 +-
+ libavogadro/src/tools/bondcentrictool.cpp          | 28 +++++++++++-----------
+ libavogadro/src/tools/manipulatetool.cpp           | 17 +++++++------
+ libavogadro/src/tools/navigatetool.cpp             |  3 ++-
+ libavogadro/src/tools/skeletontree.cpp             |  7 +++---
+ libavogadro/src/tools/skeletontree.h               |  2 +-
+ 22 files changed, 102 insertions(+), 85 deletions(-)
+
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -231,14 +231,7 @@ if(NOT Linguist_FOUND)
+   message(WARNING " Qt4 Linguist not found, please install it if you want Avogadro translations")
+ endif()
+ 
+-find_package(Eigen3) # find and setup Eigen3 if available
+-if(NOT EIGEN3_FOUND)
+-   message(STATUS "Cannot find Eigen3, trying Eigen2")
+-   find_package(Eigen2 REQUIRED) # Some version is required
+-else()
+-# Use Stage10 Eigen3 support
+-   set (EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API TRUE)
+-endif()
++find_package(Eigen3 REQUIRED) # find and setup Eigen3 if available
+ 
+ find_package(ZLIB REQUIRED)
+ find_package(OpenBabel2 REQUIRED) # find and setup OpenBabel
+--- a/avogadro/src/mainwindow.cpp
++++ b/avogadro/src/mainwindow.cpp
+@@ -115,7 +115,6 @@
+ #include <QDebug>
+ 
+ #include <Eigen/Geometry>
+-#include <Eigen/Array>
+ #define USEQUAT
+ // This is a "hidden" exported Qt function on the Mac for Qt-4.x.
+ #ifdef Q_WS_MAC
+@@ -2775,7 +2774,7 @@ protected:
+     linearGoal.row(1) = linearGoal.row(2).cross(linearGoal.row(0));
+ 
+     // calculate the translation matrix
+-    Transform3d goal(linearGoal);
++    Projective3d goal(linearGoal);
+ 
+     goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ());
+ 
+@@ -2840,7 +2839,7 @@ protected:
+     Matrix3d linearGoal = Matrix3d::Identity();
+ 
+     // calculate the translation matrix
+-    Transform3d goal(linearGoal);
++    Projective3d goal(linearGoal);
+ 
+     goal.pretranslate(- 3.0 * (d->glWidget->radius() + CAMERA_NEAR_DISTANCE) * Vector3d::UnitZ());
+ 
+--- a/libavogadro/src/camera.cpp
++++ b/libavogadro/src/camera.cpp
+@@ -47,7 +47,7 @@ namespace Avogadro
+ 
+       CameraPrivate() {};
+ 
+-      Eigen::Transform3d modelview, projection;
++      Eigen::Projective3d modelview, projection;
+       const GLWidget *parent;
+       double angleOfViewY;
+       double orthoScale;
+@@ -169,20 +169,20 @@ namespace Avogadro
+ 
+   double Camera::distance(const Eigen::Vector3d & point) const
+   {
+-    return ( d->modelview * point ).norm();
++    return ( d->modelview * point.homogeneous() ).head<3>().norm();
+   }
+ 
+-  void Camera::setModelview(const Eigen::Transform3d &matrix)
++  void Camera::setModelview(const Eigen::Projective3d &matrix)
+   {
+     d->modelview = matrix;
+   }
+ 
+-  const Eigen::Transform3d & Camera::modelview() const
++  const Eigen::Projective3d & Camera::modelview() const
+   {
+     return d->modelview;
+   }
+ 
+-  Eigen::Transform3d & Camera::modelview()
++  Eigen::Projective3d & Camera::modelview()
+   {
+     return d->modelview;
+   }
+--- a/libavogadro/src/camera.h
++++ b/libavogadro/src/camera.h
+@@ -101,16 +101,16 @@ namespace Avogadro {
+       double angleOfViewY() const;
+       /** Sets 4x4 "modelview" matrix representing the camera orientation and position.
+         * @param matrix the matrix to copy from
+-        * @sa Eigen::Transform3d & modelview(), applyModelview() */
+-      void setModelview(const Eigen::Transform3d &matrix);
++        * @sa Eigen::Projective3d & modelview(), applyModelview() */
++      void setModelview(const Eigen::Projective3d &matrix);
+       /** @return a constant reference to the 4x4 "modelview" matrix representing
+         *         the camera orientation and position
+-        * @sa setModelview(), Eigen::Transform3d & modelview() */
+-      const Eigen::Transform3d & modelview() const;
++        * @sa setModelview(), Eigen::Projective3d & modelview() */
++      const Eigen::Projective3d & modelview() const;
+       /** @return a non-constant reference to the 4x4 "modelview" matrix representing
+         *         the camera orientation and position
+-        * @sa setModelview(), const Eigen::Transform3d & modelview() const */
+-      Eigen::Transform3d & modelview();
++        * @sa setModelview(), const Eigen::Projective3d & modelview() const */
++      Eigen::Projective3d & modelview();
+       /** Calls gluPerspective() or glOrtho() with parameters automatically chosen
+         * for rendering the GLWidget's molecule with this camera. Should be called
+         * only in GL_PROJECTION matrix mode. Example code is given
+@@ -342,7 +342,7 @@ namespace Avogadro {
+        * @return {x/w, y/w, z/w} vector
+        */
+       Eigen::Vector3d V4toV3DivW(const Eigen::Vector4d & v4) {
+-        return v4.start<3>()/v4.w();
++        return v4.head<3>()/v4.w();
+       }
+   };
+ 
+--- a/libavogadro/src/engines/wireengine.cpp
++++ b/libavogadro/src/engines/wireengine.cpp
+@@ -109,7 +109,7 @@ namespace Avogadro {
+     const Camera *camera = pd->camera();
+ 
+     // perform a rough form of frustum culling
+-    Eigen::Vector3d transformedPos = pd->camera()->modelview() * v;
++    Eigen::Vector3d transformedPos = (pd->camera()->modelview() * v.homogeneous()).head<3>();
+     double dot = transformedPos.z() / transformedPos.norm();
+     if(dot > -0.8)
+       return true;
+@@ -167,7 +167,7 @@ namespace Avogadro {
+       map = pd->colorMap(); // fall back to global color map
+ 
+     // perform a rough form of frustum culling
+-    Eigen::Vector3d transformedEnd1 = pd->camera()->modelview() * v1;
++    Eigen::Vector3d transformedEnd1 = (pd->camera()->modelview() * v1.homogeneous()).head<3>();
+     double dot = transformedEnd1.z() / transformedEnd1.norm();
+     if(dot > -0.8)
+       return true; // i.e., don't bother rendering
+--- a/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
++++ b/libavogadro/src/extensions/crystallography/crystallographyextension.cpp
+@@ -1989,7 +1989,7 @@ namespace Avogadro
+     // fix coordinates
+     // Apply COB matrix:
+     Eigen::Matrix3d invCob;
+-    cob.computeInverse(&invCob);
++    invCob = cob.inverse();
+     for (QList<Eigen::Vector3d>::iterator
+            it = fcoords.begin(),
+            it_end = fcoords.end();
+--- a/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
++++ b/libavogadro/src/extensions/crystallography/ui/ceviewoptionswidget.cpp
+@@ -139,7 +139,7 @@ namespace Avogadro
+   {
+     // View into a Miller plane
+     Camera *camera = m_glWidget->camera();
+-    Eigen::Transform3d modelView;
++    Eigen::Projective3d modelView;
+     modelView.setIdentity();
+ 
+     // OK, so we want to rotate to look along the normal at the plane
+--- a/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
++++ b/libavogadro/src/extensions/orca/orcaanalysedialog.cpp
+@@ -41,7 +41,6 @@
+ #include <openbabel/mol.h>
+ 
+ #include <Eigen/Geometry>
+-#include <Eigen/LeastSquares>
+ 
+ #include <vector>
+ 
+--- a/libavogadro/src/extensions/orca/orcainputdialog.cpp
++++ b/libavogadro/src/extensions/orca/orcainputdialog.cpp
+@@ -33,7 +33,6 @@
+ #include <openbabel/mol.h>
+ 
+ #include <Eigen/Geometry>
+-#include <Eigen/LeastSquares>
+ 
+ #include <vector>
+ 
+--- a/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
++++ b/libavogadro/src/extensions/qtaim/qtaimmathutilities.cpp
+@@ -28,6 +28,7 @@
+ 
+ #include <cmath>
+ #include <Eigen/QR>
++#include <Eigen/Eigenvalues>
+ 
+ namespace Avogadro {
+   namespace QTAIMMathUtilities {
+--- a/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp
++++ b/libavogadro/src/extensions/qtaim/qtaimwavefunctionevaluator.cpp
+@@ -35,21 +35,21 @@ namespace Avogadro
+     m_nprim=wfn.numberOfGaussianPrimitives();
+     m_nnuc=wfn.numberOfNuclei();
+ 
+-    m_nucxcoord=Map<Matrix<qreal,Dynamic,1> >(wfn.xNuclearCoordinates(),m_nnuc);
+-    m_nucycoord=Map<Matrix<qreal,Dynamic,1> >(wfn.yNuclearCoordinates(),m_nnuc);
+-    m_nuczcoord=Map<Matrix<qreal,Dynamic,1> >(wfn.zNuclearCoordinates(),m_nnuc);
+-    m_nucz=Map<Matrix<qint64,Dynamic,1> >(wfn.nuclearCharges(),m_nnuc);
+-    m_X0=Map<Matrix<qreal,Dynamic,1> >(wfn.xGaussianPrimitiveCenterCoordinates(),m_nprim,1);
+-    m_Y0=Map<Matrix<qreal,Dynamic,1> >(wfn.yGaussianPrimitiveCenterCoordinates(),m_nprim,1);
+-    m_Z0=Map<Matrix<qreal,Dynamic,1> >(wfn.zGaussianPrimitiveCenterCoordinates(),m_nprim,1);
+-    m_xamom=Map<Matrix<qint64,Dynamic,1> >(wfn.xGaussianPrimitiveAngularMomenta(),m_nprim,1);
+-    m_yamom=Map<Matrix<qint64,Dynamic,1> >(wfn.yGaussianPrimitiveAngularMomenta(),m_nprim,1);
+-    m_zamom=Map<Matrix<qint64,Dynamic,1> >(wfn.zGaussianPrimitiveAngularMomenta(),m_nprim,1);
+-    m_alpha=Map<Matrix<qreal,Dynamic,1> >(wfn.gaussianPrimitiveExponentCoefficients(),m_nprim,1);
++    m_nucxcoord=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.xNuclearCoordinates()),m_nnuc);
++    m_nucycoord=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.yNuclearCoordinates()),m_nnuc);
++    m_nuczcoord=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.zNuclearCoordinates()),m_nnuc);
++    m_nucz=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.nuclearCharges()),m_nnuc);
++    m_X0=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.xGaussianPrimitiveCenterCoordinates()),m_nprim,1);
++    m_Y0=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.yGaussianPrimitiveCenterCoordinates()),m_nprim,1);
++    m_Z0=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.zGaussianPrimitiveCenterCoordinates()),m_nprim,1);
++    m_xamom=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.xGaussianPrimitiveAngularMomenta()),m_nprim,1);
++    m_yamom=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.yGaussianPrimitiveAngularMomenta()),m_nprim,1);
++    m_zamom=Map<Matrix<qint64,Dynamic,1> >(const_cast<qint64*>(wfn.zGaussianPrimitiveAngularMomenta()),m_nprim,1);
++    m_alpha=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.gaussianPrimitiveExponentCoefficients()),m_nprim,1);
+     // TODO Implement screening for unoccupied molecular orbitals.
+-    m_occno=Map<Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalOccupationNumbers(),m_nmo,1);
+-    m_orbe=Map<Matrix<qreal,Dynamic,1> >(wfn.molecularOrbitalEigenvalues(),m_nmo,1);
+-    m_coef=Map<Matrix<qreal,Dynamic,Dynamic,RowMajor> >(wfn.molecularOrbitalCoefficients(),m_nmo,m_nprim);
++    m_occno=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.molecularOrbitalOccupationNumbers()),m_nmo,1);
++    m_orbe=Map<Matrix<qreal,Dynamic,1> >(const_cast<qreal*>(wfn.molecularOrbitalEigenvalues()),m_nmo,1);
++    m_coef=Map<Matrix<qreal,Dynamic,Dynamic,RowMajor> >(const_cast<qreal*>(wfn.molecularOrbitalCoefficients()),m_nmo,m_nprim);
+     m_totalEnergy=wfn.totalEnergy();
+     m_virialRatio=wfn.virialRatio();
+ 
+--- a/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
++++ b/libavogadro/src/extensions/surfaces/openqube/gamessukout.cpp
+@@ -19,6 +19,7 @@
+ using Eigen::Vector3d;
+ using std::vector;
+ 
++#include <iostream>
+ #include <fstream>
+ 
+ namespace OpenQube
+--- a/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
++++ b/libavogadro/src/extensions/surfaces/openqube/slaterset.cpp
+@@ -25,9 +25,9 @@
+ 
+ #include "cube.h"
+ 
+-#include <Eigen/Array>
+ #include <Eigen/LU>
+ #include <Eigen/QR>
++#include <Eigen/Eigenvalues>
+ 
+ #include <cmath>
+ 
+@@ -250,7 +250,9 @@ bool SlaterSet::initialize()
+ 
+   SelfAdjointEigenSolver<MatrixXd> s(m_overlap);
+   MatrixXd p = s.eigenvectors();
+-  MatrixXd m = p * s.eigenvalues().cwise().inverse().cwise().sqrt().asDiagonal() * p.inverse();
++  // TODO check if this is correct
++  MatrixXd m1 = (s.eigenvalues().array().inverse().sqrt());
++  MatrixXd m = p.array()*(m1.diagonal().array())*p.inverse().array();
+   m_normalized = m * m_eigenVectors;
+ 
+   if (!(m_overlap*m*m).isIdentity())
+--- a/libavogadro/src/glpainter_p.cpp
++++ b/libavogadro/src/glpainter_p.cpp
+@@ -789,13 +789,13 @@ namespace Avogadro
+         } else {
+           points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u;
+         }
+-        points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]);
++        points[theta-1] = (d->widget->camera()->modelview() * (origin + points[theta-1]).homogeneous()).head<3>();
+       }
+ 
+     // Get vectors representing the points' positions in terms of the model view.
+-    Eigen::Vector3d _origin = d->widget->camera()->modelview() * origin;
+-    Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin+u);
+-    Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin+v);
++    Eigen::Vector3d _origin = (d->widget->camera()->modelview() * origin.homogeneous()).head<3>();
++    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * (origin+u).homogeneous()).head<3>();
++    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * (origin+v).homogeneous()).head<3>();
+ 
+     glPushAttrib(GL_ALL_ATTRIB_BITS);
+     glPushMatrix();
+@@ -880,12 +880,12 @@ namespace Avogadro
+         } else {
+           points[theta-1] = Eigen::AngleAxisd(theta * (M_PI / 180.0) / 2, n) * u;
+         }
+-        points[theta-1] = d->widget->camera()->modelview() * (origin + points[theta-1]);
++        points[theta-1] = (d->widget->camera()->modelview() * (origin + points[theta-1]).homogeneous()).head<3>();
+       }
+ 
+     // Get vectors representing the points' positions in terms of the model view.
+-    Eigen::Vector3d _direction1 = d->widget->camera()->modelview() * (origin + u);
+-    Eigen::Vector3d _direction2 = d->widget->camera()->modelview() * (origin + v);
++    Eigen::Vector3d _direction1 = (d->widget->camera()->modelview() * (origin + u).homogeneous()).head<3>();
++    Eigen::Vector3d _direction2 = (d->widget->camera()->modelview() * (origin + v).homogeneous()).head<3>();
+ 
+     glPushAttrib(GL_ALL_ATTRIB_BITS);
+     glPushMatrix();
+--- a/libavogadro/src/glwidget.cpp
++++ b/libavogadro/src/glwidget.cpp
+@@ -765,7 +765,7 @@ namespace Avogadro {
+       GLfloat fogColor[4]= {static_cast<GLfloat>(d->background.redF()), static_cast<GLfloat>(d->background.greenF()),
+                             static_cast<GLfloat>(d->background.blueF()), static_cast<GLfloat>(d->background.alphaF())};
+       glFogfv(GL_FOG_COLOR, fogColor);
+-      Vector3d distance = camera()->modelview() * d->center;
++      Vector3d distance = (camera()->modelview() * d->center.homogeneous()).head<3>();
+       double distanceToCenter = distance.norm();
+       glFogf(GL_FOG_DENSITY, 1.0);
+       glHint(GL_FOG_HINT, GL_NICEST);
+@@ -1711,7 +1711,7 @@ namespace Avogadro {
+ 
+       if (d->renderModelViewDebug) {
+         // Model view matrix:
+-        const Eigen::Transform3d &modelview = d->camera->modelview();
++        const Eigen::Projective3d &modelview = d->camera->modelview();
+         y += d->pd->painter()->drawText
+             (x, y, tr("ModelView row 1: %L1 %L2 %L3 %L4")
+              .arg(modelview(0, 0), 6, 'f', 2, ' ')
+--- a/libavogadro/src/molecule.cpp
++++ b/libavogadro/src/molecule.cpp
+@@ -38,7 +38,7 @@
+ #include "zmatrix.h"
+ 
+ #include <Eigen/Geometry>
+-#include <Eigen/LeastSquares>
++#include <Eigen/Eigenvalues>
+ 
+ #include <vector>
+ 
+@@ -1907,7 +1907,29 @@ namespace Avogadro{
+         }
+         d->center /= static_cast<double>(nAtoms);
+         Eigen::Hyperplane<double, 3> planeCoeffs;
+-        Eigen::fitHyperplane(numAtoms(), atomPositions, &planeCoeffs);
++        //Eigen::fitHyperplane(numAtoms(), atomPositions, &planeCoeffs);
++
++        // TODO check if this is OK
++        /************************/
++        typedef Eigen::Matrix<double,3,3> CovMatrixType;
++        typedef Eigen::Vector3d VectorType;
++        
++        VectorType mean = d->center;
++        int size=3;
++        int numPoints=numAtoms();
++        VectorType ** points=atomPositions;
++        CovMatrixType covMat = CovMatrixType::Zero(size, size);
++        VectorType remean = VectorType::Zero(size);
++        for(int i = 0; i < numPoints; ++i)
++        {
++          VectorType diff = (*(points[i]) - mean).conjugate();
++          covMat += diff * diff.adjoint();
++        }
++        Eigen::SelfAdjointEigenSolver<CovMatrixType> eig(covMat);
++        planeCoeffs.normal() = eig.eigenvectors().col(0);
++        /************************/
++
++
+         delete[] atomPositions;
+         d->normalVector = planeCoeffs.normal();
+       }
+--- a/libavogadro/src/navigate.cpp
++++ b/libavogadro/src/navigate.cpp
+@@ -40,7 +40,7 @@ namespace Avogadro {
+   void Navigate::zoom(GLWidget *widget, const Eigen::Vector3d &goal,
+                       double delta)
+   {
+-    Vector3d transformedGoal = widget->camera()->modelview() * goal;
++    Vector3d transformedGoal = (widget->camera()->modelview() * goal.homogeneous()).head<3>();
+     double distanceToGoal = transformedGoal.norm();
+ 
+     double t = ZOOM_SPEED * delta;
+--- a/libavogadro/src/tools/bondcentrictool.cpp
++++ b/libavogadro/src/tools/bondcentrictool.cpp
+@@ -578,8 +578,8 @@ namespace Avogadro {
+ 
+           Vector3d clicked = *m_clickedAtom->pos();
+ 
+-          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >=
+-                (widget->camera()->modelview() * center).z() ? -1 : 1));
++          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other.homogeneous()).z() >=
++                (widget->camera()->modelview() * center.homogeneous()).z() ? -1 : 1));
+ 
+           Vector3d centerProj = widget->camera()->project(center);
+           centerProj -= Vector3d(0,0,centerProj.z());
+@@ -673,8 +673,8 @@ namespace Avogadro {
+ 
+           Vector3d clicked = *m_clickedAtom->pos();
+ 
+-          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other).z() >=
+-                (widget->camera()->modelview() * center).z() ? -1 : 1));
++          Vector3d axis = Vector3d(0, 0, ((widget->camera()->modelview() * other.homogeneous()).z() >=
++                (widget->camera()->modelview() * center.homogeneous()).z() ? -1 : 1));
+ 
+           Vector3d centerProj = widget->camera()->project(center);
+           centerProj -= Vector3d(0,0,centerProj.z());
+@@ -1362,10 +1362,10 @@ namespace Avogadro {
+ 
+     planeVec = length * (planeVec / planeVec.norm());
+ 
+-    Vector3d topLeft = widget->camera()->modelview() * (left + planeVec);
+-    Vector3d topRight = widget->camera()->modelview() * (right + planeVec);
+-    Vector3d botRight = widget->camera()->modelview() * (right - planeVec);
+-    Vector3d botLeft = widget->camera()->modelview() * (left - planeVec);
++    Vector3d topLeft = (widget->camera()->modelview() * (left + planeVec).homogeneous()).head<3>();
++    Vector3d topRight = (widget->camera()->modelview() * (right + planeVec).homogeneous()).head<3>();
++    Vector3d botRight = (widget->camera()->modelview() * (right - planeVec).homogeneous()).head<3>();
++    Vector3d botLeft = (widget->camera()->modelview() * (left - planeVec).homogeneous()).head<3>();
+ 
+     float alpha = 0.4;
+     double lineWidth = 1.5;
+@@ -1444,10 +1444,10 @@ namespace Avogadro {
+       C = D + ((C-D).normalized() * minWidth);
+     }
+ 
+-    Vector3d topLeft = widget->camera()->modelview() * D;
+-    Vector3d topRight = widget->camera()->modelview() * C;
+-    Vector3d botRight = widget->camera()->modelview() * B;
+-    Vector3d botLeft = widget->camera()->modelview() * A;
++    Vector3d topLeft = (widget->camera()->modelview() * D.homogeneous()).head<3>();
++    Vector3d topRight = (widget->camera()->modelview() * C.homogeneous()).head<3>();
++    Vector3d botRight = (widget->camera()->modelview() * B.homogeneous()).head<3>();
++    Vector3d botLeft = (widget->camera()->modelview() * A.homogeneous()).head<3>();
+ 
+     float alpha = 0.4;
+     double lineWidth = 1.5;
+@@ -1506,12 +1506,12 @@ namespace Avogadro {
+       Vector3d positionVector)
+   {
+     //Rotate skeleton around a particular axis and center point
+-    Eigen::Transform3d rotation;
++    Eigen::Projective3d rotation;
+     rotation = Eigen::AngleAxisd(angle, rotationVector);
+     rotation.pretranslate(centerVector);
+     rotation.translate(-centerVector);
+ 
+-    return rotation*positionVector;
++    return (rotation*positionVector.homogeneous()).head<3>();
+   }
+ 
+   // ##########  showAnglesChanged  ##########
+--- a/libavogadro/src/tools/manipulatetool.cpp
++++ b/libavogadro/src/tools/manipulatetool.cpp
+@@ -40,7 +40,6 @@
+ #include <QAbstractButton>
+ 
+ using Eigen::Vector3d;
+-using Eigen::Transform3d;
+ using Eigen::AngleAxisd;
+ 
+ namespace Avogadro {
+@@ -138,7 +137,7 @@ namespace Avogadro {
+     double yRotate = m_settingsWidget->yRotateSpinBox->value() * DEG_TO_RAD;
+     double zRotate = m_settingsWidget->zRotateSpinBox->value() * DEG_TO_RAD;
+ 
+-    Eigen::Transform3d rotation;
++    Eigen::Projective3d rotation;
+     rotation.matrix().setIdentity();
+     rotation.translation() = center;
+     rotation.rotate(AngleAxisd(xRotate, Vector3d::UnitX())
+@@ -152,12 +151,12 @@ namespace Avogadro {
+         if (p->type() == Primitive::AtomType) {
+           Atom *atom = static_cast<Atom*>(p);
+           tempPos = translate + *(atom->pos());
+-          atom->setPos(rotation * tempPos);
++          atom->setPos((rotation * tempPos.homogeneous()).head<3>());
+         }
+     } else {
+       foreach(Atom *atom, widget->molecule()->atoms()) {
+         tempPos = translate + *(atom->pos());
+-        atom->setPos(rotation * tempPos);
++        atom->setPos((rotation * tempPos.homogeneous()).head<3>());
+       }
+     }
+ 
+@@ -199,7 +198,7 @@ namespace Avogadro {
+     widget->setCursor(Qt::SizeVerCursor);
+ 
+     // Move the selected atom(s) in to or out of the screen
+-    Vector3d transformedGoal = widget->camera()->modelview() * *goal;
++    Vector3d transformedGoal = (widget->camera()->modelview() * goal->homogeneous()).head<3>();
+     double distanceToGoal = transformedGoal.norm();
+ 
+     double t = ZOOM_SPEED * delta;
+@@ -255,7 +254,7 @@ namespace Avogadro {
+ 
+     // Rotate the selected atoms about the center
+     // rotate only selected primitives
+-    Transform3d fragmentRotation;
++    Eigen::Projective3d fragmentRotation;
+     fragmentRotation.matrix().setIdentity();
+     fragmentRotation.translation() = *center;
+     fragmentRotation.rotate(
+@@ -266,7 +265,7 @@ namespace Avogadro {
+ 
+     foreach(Primitive *p, widget->selectedPrimitives())
+       if (p->type() == Primitive::AtomType)
+-        static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom *>(p)->pos());
++        static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom *>(p)->pos()->homogeneous()).head<3>());
+     widget->molecule()->update();
+   }
+ 
+@@ -274,7 +273,7 @@ namespace Avogadro {
+                             double delta) const
+   {
+     // Tilt the selected atoms about the center
+-    Transform3d fragmentRotation;
++    Eigen::Projective3d fragmentRotation;
+     fragmentRotation.matrix().setIdentity();
+     fragmentRotation.translation() = *center;
+     fragmentRotation.rotate(AngleAxisd(delta * ROTATION_SPEED, widget->camera()->backTransformedZAxis()));
+@@ -282,7 +281,7 @@ namespace Avogadro {
+ 
+     foreach(Primitive *p, widget->selectedPrimitives())
+       if (p->type() == Primitive::AtomType)
+-        static_cast<Atom *>(p)->setPos(fragmentRotation * *static_cast<Atom *>(p)->pos());
++        static_cast<Atom *>(p)->setPos((fragmentRotation * static_cast<Atom *>(p)->pos()->homogeneous()).head<3>());
+     widget->molecule()->update();
+   }
+ 
+--- a/libavogadro/src/tools/navigatetool.cpp
++++ b/libavogadro/src/tools/navigatetool.cpp
+@@ -92,7 +92,8 @@ namespace Avogadro {
+       double sumOfWeights = 0.;
+       QList<Atom*> atoms = widget->molecule()->atoms();
+       foreach (Atom *atom, atoms) {
+-        Vector3d transformedAtomPos = widget->camera()->modelview() * *atom->pos();
++        Vector3d transformedAtomPos = (widget->camera()->modelview() *
++                                       atom->pos()->homogeneous()).head<3>();
+         double atomDistance = transformedAtomPos.norm();
+         double dot = transformedAtomPos.z() / atomDistance;
+         double weight = exp(-30. * (1. + dot));
+--- a/libavogadro/src/tools/skeletontree.cpp
++++ b/libavogadro/src/tools/skeletontree.cpp
+@@ -29,6 +29,7 @@
+ #include <avogadro/atom.h>
+ #include <avogadro/bond.h>
+ #include <avogadro/molecule.h>
++#include <iostream>
+ 
+ using namespace Eigen;
+ using namespace std;
+@@ -221,7 +222,7 @@ namespace Avogadro {
+   {
+     if (m_rootNode) {
+       //Rotate skeleton around a particular axis and center point
+-      Eigen::Transform3d rotation;
++      Eigen::Projective3d rotation;
+       rotation = Eigen::AngleAxisd(angle, rotationAxis);
+       rotation.pretranslate(centerVector);
+       rotation.translate(-centerVector);
+@@ -248,11 +249,11 @@ namespace Avogadro {
+   // ##########  recursiveRotate  ##########
+ 
+   void SkeletonTree::recursiveRotate(Node* n,
+-                                     const Eigen::Transform3d &rotationMatrix)
++                                     const Eigen::Projective3d &rotationMatrix)
+   {
+     // Update the root node with the new position
+     Atom* a = n->atom();
+-    a->setPos(rotationMatrix * (*a->pos()));
++    a->setPos((rotationMatrix * (*a->pos()).homogeneous()).head<3>());
+     a->update();
+ 
+     // Now update the children
+--- a/libavogadro/src/tools/skeletontree.h
++++ b/libavogadro/src/tools/skeletontree.h
+@@ -230,7 +230,7 @@ namespace Avogadro {
+        * @param centerVector Center location to rotate around.
+        */
+       void recursiveRotate(Node* n,
+-                           const Eigen::Transform3d &rotationMatrix);
++                           const Eigen::Projective3d &rotationMatrix);
+ 
+   };
+ } // End namespace Avogadro
diff --git a/gnu/packages/patches/avogadro-python-eigen-lib.patch b/gnu/packages/patches/avogadro-python-eigen-lib.patch
new file mode 100644
index 000000000..405a9d82d
--- /dev/null
+++ b/gnu/packages/patches/avogadro-python-eigen-lib.patch
@@ -0,0 +1,162 @@
+From 2d4be7ede177a8df7340fe3b209698d591ee8a04 Mon Sep 17 00:00:00 2001
+From: Claudio Fernandes <claudiosf.claudio <at> gmail.com>
+Date: Mon, 16 Jan 2017 19:48:23 -0200
+Subject: [PATCH] Adapt libavogadro/python to Eigen 3.3
+
+---
+ libavogadro/src/python/camera.cpp |  2 +-
+ libavogadro/src/python/eigen.cpp  | 60 +++++++++++++++++++--------------------
+ 2 files changed, 31 insertions(+), 31 deletions(-)
+
+diff --git a/libavogadro/src/python/camera.cpp b/libavogadro/src/python/camera.cpp
+index 69ca87bf8..30b32af7d 100644
+--- a/libavogadro/src/python/camera.cpp
++++ b/libavogadro/src/python/camera.cpp
+@@ -10,7 +10,7 @@ using namespace Avogadro;
+ void export_Camera()
+ {
+ 
+-  const Eigen::Transform3d& (Camera::*modelview_ptr)() const = &Camera::modelview;
++  const Eigen::Projective3d& (Camera::*modelview_ptr)() const = &Camera::modelview;
+   Eigen::Vector3d (Camera::*unProject_ptr1)(const Eigen::Vector3d&) const = &Camera::unProject;
+   Eigen::Vector3d (Camera::*unProject_ptr2)(const QPoint&, const Eigen::Vector3d&) const = &Camera::unProject;
+   Eigen::Vector3d (Camera::*unProject_ptr3)(const QPoint&) const = &Camera::unProject;
+diff --git a/libavogadro/src/python/eigen.cpp b/libavogadro/src/python/eigen.cpp
+index c1faedbcc..20b4e719d 100644
+--- a/libavogadro/src/python/eigen.cpp
++++ b/libavogadro/src/python/eigen.cpp
+@@ -305,9 +305,9 @@ template <> struct ScalarTraits<double>
+     struct innerclass
+     {
+       //
+-      //  Eigen::Transform3d --> python array (4x4)
++      //  Eigen::Projective3d --> python array (4x4)
+       //
+-      static PyObject* convert(Eigen::Transform3d const &trans)
++      static PyObject* convert(Eigen::Projective3d const &trans)
+       {
+         npy_intp dims[2] = { 4, 4 };
+         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
+@@ -321,9 +321,9 @@ template <> struct ScalarTraits<double>
+         return incref(result);
+       }
+       //
+-      //  Eigen::Transform3d* --> python array (4x4)
++      //  Eigen::Projective3d* --> python array (4x4)
+       //
+-      static PyObject* convert(Eigen::Transform3d *trans)
++      static PyObject* convert(Eigen::Projective3d *trans)
+       {
+         npy_intp dims[2] = { 4, 4 };
+         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
+@@ -337,9 +337,9 @@ template <> struct ScalarTraits<double>
+         return incref(result);
+       }
+       //
+-      //  const Eigen::Transform3d* --> python array (4x4)
++      //  const Eigen::Projective3d* --> python array (4x4)
+       //
+-      static PyObject* convert(const Eigen::Transform3d *trans)
++      static PyObject* convert(const Eigen::Projective3d *trans)
+       {
+         npy_intp dims[2] = { 4, 4 };
+         PyObject *result = PyArray_SimpleNew(2, dims, PyArray_DOUBLE);
+@@ -358,10 +358,10 @@ template <> struct ScalarTraits<double>
+     Transform3d_to_python_array()
+     {
+       #ifndef WIN32
+-      to_python_converter<Eigen::Transform3d, innerclass>();
++      to_python_converter<Eigen::Projective3d, innerclass>();
+       #endif
+-      to_python_converter<Eigen::Transform3d*, innerclass>();
+-      to_python_converter<const Eigen::Transform3d*, innerclass>();
++      to_python_converter<Eigen::Projective3d*, innerclass>();
++      to_python_converter<const Eigen::Projective3d*, innerclass>();
+     }
+ 
+   };
+@@ -373,17 +373,17 @@ template <> struct ScalarTraits<double>
+       // Insert an rvalue from_python converter at the tail of the
+       // chain. Used for implicit conversions
+       //
+-      //  python array --> Eigen::Transform3d
++      //  python array --> Eigen::Projective3d
+       //
+       // used for:
+       //
+-      //  void function(Eigen::Transform3d vec)
+-      //  void function(Eigen::Transform3d & vec)
+-      //  void function(const Eigen::Transform3d & vec)
++      //  void function(Eigen::Projective3d vec)
++      //  void function(Eigen::Projective3d & vec)
++      //  void function(const Eigen::Projective3d & vec)
+       //
+-      converter::registry::push_back( &convertible, &construct, type_id<Eigen::Transform3d>() );
++      converter::registry::push_back( &convertible, &construct, type_id<Eigen::Projective3d>() );
+       
+-      converter::registry::insert( &convert, type_id<Eigen::Transform3d>() );
++      converter::registry::insert( &convert, type_id<Eigen::Projective3d>() );
+     }
+ 
+     static void* convert(PyObject *obj_ptr)
+@@ -401,7 +401,7 @@ template <> struct ScalarTraits<double>
+         throw_error_already_set(); // the 1D array does not have exactly 3 elements
+ 
+       double *values = reinterpret_cast<double*>(array->data);
+-      Eigen::Transform3d *c_obj = new Eigen::Transform3d();
++      Eigen::Projective3d *c_obj = new Eigen::Projective3d();
+       double *dataPtr = c_obj->data();
+ 
+       for (int i = 0; i < 16; ++i)
+@@ -432,7 +432,7 @@ template <> struct ScalarTraits<double>
+       // I think this is a better way to get at the double array, where is this
+       // deleted though? Does Boost::Python do it?
+       double *values = reinterpret_cast<double*>(array->data);
+-      Eigen::Transform3d *storage = new Eigen::Transform3d();
++      Eigen::Projective3d *storage = new Eigen::Projective3d();
+       double *dataPtr = storage->data();
+ 
+       for (int i = 0; i < 16; ++i)
+@@ -467,21 +467,21 @@ class EigenUnitTestHelper
+     void set_vector3d_ptr(Eigen::Vector3d* vec)                 { m_vector3d = *vec; }
+     void set_const_vector3d_ptr(const Eigen::Vector3d* const vec) { m_vector3d = *vec; }
+ 
+-    //Eigen::Transform3d             transform3d()              { return m_transform3d; }
+-    //Eigen::Transform3d&            transform3d_ref()          { return m_transform3d; }
+-    const Eigen::Transform3d&      const_transform3d_ref()    { return m_transform3d; }
+-    Eigen::Transform3d*            transform3d_ptr()          { return &m_transform3d; }
+-    const Eigen::Transform3d*      const_transform3d_ptr()    { return &m_transform3d; }
+-
+-    //void set_transform3d(Eigen::Transform3d vec)                      { m_transform3d = vec; }
+-    //void set_transform3d_ref(Eigen::Transform3d& vec)                 { m_transform3d = vec; }
+-    void set_const_transform3d_ref(const Eigen::Transform3d& vec)     { m_transform3d = vec; }
+-    void set_transform3d_ptr(Eigen::Transform3d* vec)                 { m_transform3d = *vec; }
+-    void set_const_transform3d_ptr(const Eigen::Transform3d* const vec) { m_transform3d = *vec; }
++    //Eigen::Projective3d             transform3d()              { return m_transform3d; }
++    //Eigen::Projective3d&            transform3d_ref()          { return m_transform3d; }
++    const Eigen::Projective3d&      const_transform3d_ref()    { return m_transform3d; }
++    Eigen::Projective3d*            transform3d_ptr()          { return &m_transform3d; }
++    const Eigen::Projective3d*      const_transform3d_ptr()    { return &m_transform3d; }
++
++    //void set_transform3d(Eigen::Projective3d vec)                      { m_transform3d = vec; }
++    //void set_transform3d_ref(Eigen::Projective3d& vec)                 { m_transform3d = vec; }
++    void set_const_transform3d_ref(const Eigen::Projective3d& vec)     { m_transform3d = vec; }
++    void set_transform3d_ptr(Eigen::Projective3d* vec)                 { m_transform3d = *vec; }
++    void set_const_transform3d_ptr(const Eigen::Projective3d* const vec) { m_transform3d = *vec; }
+  
+   private:
+     Eigen::Vector3d m_vector3d;
+-    Eigen::Transform3d m_transform3d;
++    Eigen::Projective3d m_transform3d;
+ 
+ };
+ #endif
+@@ -529,7 +529,7 @@ void export_Eigen()
+   Vector3x_to_python_array<Eigen::Vector3i>();
+   Vector3x_from_python_array<Eigen::Vector3i>();
+ 
+-  // Eigen::Transform3d
++  // Eigen::Projective3d
+   Transform3d_to_python_array();
+   Transform3d_from_python_array();
+ 
-- 
2.18.0






Information forwarded to guix-patches <at> gnu.org:
bug#32219; Package guix-patches. (Tue, 21 Aug 2018 21:26:01 GMT) Full text and rfc822 format available.

Message #8 received at 32219 <at> debbugs.gnu.org (full text, mbox):

From: ludo <at> gnu.org (Ludovic Courtès)
To: Kei Kebreau <kkebreau <at> posteo.net>
Cc: 32219 <at> debbugs.gnu.org
Subject: Re: [bug#32219] [PATCH] gnu: Add avogadro.
Date: Tue, 21 Aug 2018 23:25:40 +0200
Hello Kei,

Kei Kebreau <kkebreau <at> posteo.net> skribis:

> * gnu/packages/chemistry.scm (avogadro): New variable.
> * gnu/packages/patches/avogadro-boost148.patch,
> gnu/packages/patches/avogadro-eigen3-update.patch,
> gnu/packages/patches/avogadro-python-eigen-lib.patch: New files.
> * gnu/local.mk (dist_patch_DATA): Add them.

This patch apparently fell through the cracks but I see no reason not to
apply it.

Thank you!

Ludo’.




Reply sent to Kei Kebreau <kkebreau <at> posteo.net>:
You have taken responsibility. (Sat, 25 Aug 2018 23:46:02 GMT) Full text and rfc822 format available.

Notification sent to Kei Kebreau <kkebreau <at> posteo.net>:
bug acknowledged by developer. (Sat, 25 Aug 2018 23:46:02 GMT) Full text and rfc822 format available.

Message #13 received at 32219-done <at> debbugs.gnu.org (full text, mbox):

From: Kei Kebreau <kkebreau <at> posteo.net>
To: ludo <at> gnu.org (Ludovic Courtès)
Cc: 32219-done <at> debbugs.gnu.org
Subject: Re: [bug#32219] [PATCH] gnu: Add avogadro.
Date: Sat, 25 Aug 2018 19:45:36 -0400
ludo <at> gnu.org (Ludovic Courtès) writes:

> Hello Kei,
>
> Kei Kebreau <kkebreau <at> posteo.net> skribis:
>
>> * gnu/packages/chemistry.scm (avogadro): New variable.
>> * gnu/packages/patches/avogadro-boost148.patch,
>> gnu/packages/patches/avogadro-eigen3-update.patch,
>> gnu/packages/patches/avogadro-python-eigen-lib.patch: New files.
>> * gnu/local.mk (dist_patch_DATA): Add them.
>
> This patch apparently fell through the cracks but I see no reason not to
> apply it.
>
> Thank you!
>
> Ludo’.

Thank you for reviewing! I've pushed this to master.




bug archived. Request was from Debbugs Internal Request <help-debbugs <at> gnu.org> to internal_control <at> debbugs.gnu.org. (Sun, 23 Sep 2018 11:24:04 GMT) Full text and rfc822 format available.

This bug report was last modified 6 years and 267 days ago.

Previous Next


GNU bug tracking system
Copyright (C) 1999 Darren O. Benham, 1997,2003 nCipher Corporation Ltd, 1994-97 Ian Jackson.