1. 04 Aug, 2016 4 commits
    • Jason Rhinelander's avatar
      Eigen support for special matrix objects · 9ffb3dda
      Jason Rhinelander authored
      Functions returning specialized Eigen matrices like Eigen::DiagonalMatrix and
      Eigen::SelfAdjointView--which inherit from EigenBase but not
      DenseBase--isn't currently allowed; such classes are explicitly copyable
      into a Matrix (by definition), and so we can support functions that
      return them by copying the value into a Matrix then casting that
      resulting dense Matrix into a numpy.ndarray.  This commit does exactly
      that.
      9ffb3dda
    • Jason Rhinelander's avatar
      Fix eigen copying of non-standard stride values · 8657f308
      Jason Rhinelander authored
      Some Eigen objects, such as those returned by matrix.diagonal() and
      matrix.block() have non-standard stride values because they are
      basically just maps onto the underlying matrix without copying it (for
      example, the primary diagonal of a 3x3 matrix is a vector-like object
      with .src equal to the full matrix data, but with stride 4).  Returning
      such an object from a pybind11 method breaks, however, because pybind11
      assumes vectors have stride 1, and that matrices have strides equal to
      the number of rows/columns or 1 (depending on whether the matrix is
      stored column-major or row-major).
      
      This commit fixes the issue by making pybind11 use Eigen's stride
      methods when copying the data.
      8657f308
    • Jason Rhinelander's avatar
      Only support ==/!= int on unscoped enums · d41a2730
      Jason Rhinelander authored
      This makes the Python interface mirror the C++ interface:
      pybind11-exported scoped enums aren't directly comparable to the
      underlying integer values.
      d41a2730
    • Jason Rhinelander's avatar
      Fix scoped enums and add scoped enum example · 61354194
      Jason Rhinelander authored
      PR #309 broke scoped enums, which failed to compile because the added:
      
          value == value2
      
      comparison isn't valid for a scoped enum (they aren't implicitly
      convertible to the underlying type).  This commit fixes it by
      explicitly converting the enum value to its underlying type before
      doing the comparison.
      
      It also adds a scoped enum example to the constants-and-functions
      example that triggers the problem fixed in this commit.
      61354194
  2. 03 Aug, 2016 2 commits
    • Jason Rhinelander's avatar
      Add support for Eigen::Ref<...> function arguments · 5fd5074a
      Jason Rhinelander authored
      Eigen::Ref is a common way to pass eigen dense types without needing a
      template, e.g. the single definition `void
      func(Eigen::Ref<Eigen::MatrixXd> x)` can be called with any double
      matrix-like object.
      
      The current pybind11 eigen support fails with internal errors if
      attempting to bind a function with an Eigen::Ref<...> argument because
      Eigen::Ref<...> satisfies the "is_eigen_dense" requirement, but can't
      compile if actually used: Eigen::Ref<...> itself is not default
      constructible, and so the argument std::tuple containing an
      Eigen::Ref<...> isn't constructible, which results in compilation
      failure.
      
      This commit adds support for Eigen::Ref<...> by giving it its own
      type_caster implementation which consists of an internal type_caster of
      the referenced type, load/cast methods that dispatch to the internal
      type_caster, and a unique_ptr to an Eigen::Ref<> instance that gets
      set during load().
      
      There is, of course, no performance advantage for pybind11-using code of
      using Eigen::Ref<...>--we are allocating a matrix of the derived type
      when loading it--but this has the advantage of allowing pybind11 to bind
      transparently to C++ methods taking Eigen::Refs.
      5fd5074a
    • Pim Schellart's avatar
      Fix zero valued enum comparison error · 3d079fbd
      Pim Schellart authored
      3d079fbd
  3. 02 Aug, 2016 1 commit
  4. 01 Aug, 2016 1 commit
  5. 19 Jul, 2016 2 commits
  6. 18 Jul, 2016 2 commits
  7. 17 Jul, 2016 1 commit
    • Jason Rhinelander's avatar
      Fix #283: don't print first arg of constructor · 4e45e180
      Jason Rhinelander authored
      This changes the exception error message of a bad-arguments error to
      suppress the constructor argument when the failure is a constructor.
      
      This changes both the "Invoked with: " output to omit the object
      instances, and rewrites the constructor signature to make it look
      like a constructor (changing the first argument to the object name, and
      removing the ' -> NoneType' return type.
      4e45e180
  8. 12 Jul, 2016 1 commit
  9. 11 Jul, 2016 2 commits
  10. 10 Jul, 2016 1 commit
  11. 09 Jul, 2016 1 commit
  12. 08 Jul, 2016 5 commits
  13. 07 Jul, 2016 2 commits
    • Jason Rhinelander's avatar
      Only disable placement-new warning under gcc >= 6 · 0b12f91f
      Jason Rhinelander authored
      Otherwise this would create unknown option warnings under g++ < 6.
      0b12f91f
    • Jason Rhinelander's avatar
      Disable -Wplacement-new warning false alarm · cae0e009
      Jason Rhinelander authored
      GCC-6 adds a -Wplacement-new warning that warns for placement-new into a
      space that is too small, which is sometimes being triggered here (e.g.
      example5 always generates the warning under g++-6).  It's a false
      warning, however: the line immediately before just checked the size, and
      so this line is never going to actually be reached in the cases where
      the GCC warning is being triggered.
      
      This localizes the warning disabling just to this one spot as there are
      other placement-new uses in pybind11 where this warning could warn about
      legitimate future problems.
      cae0e009
  14. 06 Jul, 2016 1 commit
    • Jason Rhinelander's avatar
      Add _<bool>("s1", "s2") ternary & use TYPE_CASTER · 8469f751
      Jason Rhinelander authored
      This commit adds an additional _ template function for compile-time
      selection between two description strings.  This in turn allows the
      elimination of needing two name() methods in type_caster<arithmetic
      types> and type_caster<eigen types>, which allows them to start using
      PYBIND11_TYPE_CASTER instead, simplifying their code by eliminating all
      the code that they are duplicating from the macro.
      8469f751
  15. 05 Jul, 2016 1 commit
    • Ben North's avatar
      Fix handling of one-dimensional input arrays · 93594a38
      Ben North authored
      In eigen.h, type_caster<Type>::load():  For the 'ndim == 1' case, use
      the 'InnerStride' type because there is only an inner stride for a
      vector.  Choose between (n_elts x 1) or (1 x n_elts) according to
      whether we're constructing a Vector or a RowVector.
      93594a38
  16. 01 Jul, 2016 4 commits
  17. 27 Jun, 2016 1 commit
  18. 22 Jun, 2016 2 commits
  19. 17 Jun, 2016 2 commits
  20. 15 Jun, 2016 2 commits
  21. 14 Jun, 2016 1 commit
  22. 03 Jun, 2016 1 commit