From 7d01ee66d46c30152f1a8c855c20042e376d207c Mon Sep 17 00:00:00 2001 From: Kei Kebreau Date: Wed, 18 Jul 2018 14:11:16 -0400 Subject: gnu: Add avogadro. * 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. --- .../patches/avogadro-python-eigen-lib.patch | 161 +++++++++++++++++++++ 1 file changed, 161 insertions(+) create mode 100644 gnu/packages/patches/avogadro-python-eigen-lib.patch (limited to 'gnu/packages/patches/avogadro-python-eigen-lib.patch') 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 0000000000..ac9f2e30af --- /dev/null +++ b/gnu/packages/patches/avogadro-python-eigen-lib.patch @@ -0,0 +1,161 @@ +From 2d4be7ede177a8df7340fe3b209698d591ee8a04 Mon Sep 17 00:00:00 2001 +From: Claudio Fernandes +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 + 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 + 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 + 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 + Transform3d_to_python_array() + { + #ifndef WIN32 +- to_python_converter(); ++ to_python_converter(); + #endif +- to_python_converter(); +- to_python_converter(); ++ to_python_converter(); ++ to_python_converter(); + } + + }; +@@ -373,17 +373,17 @@ template <> struct ScalarTraits + // 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() ); ++ converter::registry::push_back( &convertible, &construct, type_id() ); + +- converter::registry::insert( &convert, type_id() ); ++ converter::registry::insert( &convert, type_id() ); + } + + static void* convert(PyObject *obj_ptr) +@@ -401,7 +401,7 @@ template <> struct ScalarTraits + throw_error_already_set(); // the 1D array does not have exactly 3 elements + + double *values = reinterpret_cast(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 + // 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(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,6 +529,6 @@ void export_Eigen() + Vector3x_to_python_array(); + Vector3x_from_python_array(); + +- // Eigen::Transform3d ++ // Eigen::Projective3d + Transform3d_to_python_array(); + Transform3d_from_python_array(); -- cgit v1.2.3