1. Feb 07, 2018
    • Jason Rhinelander's avatar
      Fix segfault when reloading interpreter with external modules (#1092) · 20d6d1d4
      Jason Rhinelander authored
      * Fix segfault when reloading interpreter with external modules
      
      When embedding the interpreter and loading external modules in that
      embedded interpreter, the external module correctly shares its
      internals_ptr with the one in the embedded interpreter.  When the
      interpreter is shut down, however, only the `internals_ptr` local to
      the embedded code is actually reset to nullptr: the external module
      remains set.
      
      The result is that loading an external pybind11 module, letting the
      interpreter go through a finalize/initialize, then attempting to use
      something in the external module fails because this external module is
      still trying to use the old (destroyed) internals.  This causes
      undefined behaviour (typically a segfault).
      
      This commit fixes it by adding a level of indirection in the internals
      path, converting the local internals variable to `internals **` instead
      of `internals *`.  With this change, we can detect a stale internals
      pointer and reload the internals pointer (either from a capsule or by
      creating a new internals instance).
      
      (No issue number: this was reported on gitter by @henryiii and @aoloe).
      20d6d1d4
    • Jeff VanOss's avatar
      fix return from std::map bindings to __delitem__ (#1229) · 17ad517d
      Jeff VanOss authored
      Fix return from `std::map` bindings to `__delitem__`: we should be returning `void`, not an iterator.
      
      Also adds a test for map item deletion.
      17ad517d
    • luz.paz's avatar
      misc. typos · ed0a72eb
      luz.paz authored
      Found via `codespell`
      ed0a72eb
    • Jason Rhinelander's avatar
      Use a named rather than anon struct in instance · c8f07b5d
      Jason Rhinelander authored
      The anonymous struct nested in a union triggers a -Wnested-anon-type
      warning ("anonymous types declared in an anonymous union are an
      extension") under clang (#1204).  This names the struct and defines it
      out of the definition of `instance` to get around to warning (and makes
      the code slightly simpler).
      c8f07b5d
    • Jason Rhinelander's avatar
      Fixes for numpy 1.14.0 compatibility · 7f170fe4
      Jason Rhinelander authored
      - UPDATEIFCOPY is deprecated, replaced with similar (but not identical)
        WRITEBACKIFCOPY; trying to access the flag causes a deprecation
        warning under numpy 1.14, so just check the new flag there.
      - Numpy `repr` formatting of floats changed in 1.14.0 to `[1., 2., 3.]`
        instead of the pre-1.14 `[ 1.,  2.,  3.]`.  Updated the tests to
        check for equality with the `repr(...)` value rather than the
        hard-coded (and now version-dependent) string representation.
      7f170fe4
    • Jason Rhinelander's avatar
      Added py::args ref counting tests · 8310aa46
      Jason Rhinelander authored
      8310aa46
    • Jason Rhinelander's avatar
      Simplify arg copying · 0c7aec48
      Jason Rhinelander authored
      0c7aec48
    • Zach DeVito's avatar
      Fix leak in var arg handling · 155cc7c4
      Zach DeVito authored
      When using the mixed position + vararg path, pybind over inc_ref's
      the vararg positions. Printing the ref_count() of `item` before
      and after this change you see:
      
      Before change:
      
      ```
      refcount of item before assign 3
      refcount of item after assign 5
      ```
      
      After change
      ```
      refcount of item before assign 3
      refcount of item after assign 4
      ```
      155cc7c4
    • Jason Rhinelander's avatar
      Fix premature destruction of args/kwargs arguments · c715c70e
      Jason Rhinelander authored
      The `py::args` or `py::kwargs` arguments aren't properly referenced
      when added to the function_call arguments list: their reference counts
      drop to zero if the first (non-converting) function call fails, which
      means they might be cleaned up before the second pass call runs.
      
      This commit adds a couple of extra `object`s to the `function_call`
      where we can stash a reference to them when needed to tie their
      lifetime to the function_call object's lifetime.
      
      (Credit to YannickJadoul for catching and proposing a fix in #1223).
      c715c70e
    • Elliott Sales de Andrade's avatar
      Update PyPI URLs. · 53e0aa03
      Elliott Sales de Andrade authored
      53e0aa03
    • Jason Rhinelander's avatar
      Silence new MSVC C++17 deprecation warnings · 3793c7ed
      Jason Rhinelander authored
      In the latest MSVC in C++17 mode including Eigen causes warnings:
      
          warning C4996: 'std::unary_negate<_Fn>': warning STL4008: std::not1(),
          std::not2(), std::unary_negate, and std::binary_negate are deprecated in
          C++17. They are superseded by std::not_fn(). You can define
          _SILENCE_CXX17_NEGATORS_DEPRECATION_WARNING or
          _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to acknowledge that you have
          received this warning.
      
      This disables 4996 for the Eigen includes.
      
      Catch generates a similar warning for std::uncaught_exception, so
      disable the warning there, too.
      
      In both cases this is temporary; we can (and should) remove the warnings
      disabling once new upstream versions of Eigen and Catch are available
      that address the warning. (The Catch one, in particular, looks to be
      fixed in upstream master, so will probably be fixed in the next (2.0.2)
      release).
      3793c7ed
    • Antony Lee's avatar
      7ab1cd34
    • Wenzel Jakob's avatar
    • Jason Rhinelander's avatar
      __qualname__ and nested class naming fixes (#1171) · 07dc73da
      Jason Rhinelander authored
      A few fixes related to how we set `__qualname__` and how we show the
      type name in function signatures:
      
      - `__qualname__` isn't supposed to have the module name at the
      beginning, but we've been putting it there.  This removes it, while
      keeping the `Nested.Class` name chaining.
      
      - print `__module__.__qualname__` rather than `type->tp_name`; the
      latter doesn't work properly for nested classes, so we would get
      `module.B` rather than `module.A.B` for a class `B` with parent `A`.
      This also unifies the Python 3 and PyPy code.  Fixes #1166.
      
      - This now sets a `__qualname__` attribute on the type (as would happen
      in Python 3.3+) for Python <3.3, including PyPy.  While not particularly
      important to have in earlier Python versions, it's useful for us to be
      able to extracted the nested name, which is why `__qualname__` was
      invented in the first place.
      
      - Added tests for the above.
      07dc73da
    • Unknown's avatar
      Trivial typos · 09579726
      Unknown authored
      Non-user facing. 
      Found using `codespell -q 3`
      09579726
    • Jason Rhinelander's avatar
      Fix new flake8 E741 error from using `l` variable · fc8d1c76
      Jason Rhinelander authored
      The just-updated flake8 package hits a bunch of:
      
          E741 ambiguous variable name 'l'
      
      warnings.  This commit renames them all from `l` to `lst` (they are all
      list values) to avoid the error.
      fc8d1c76
    • Wenzel Jakob's avatar
      2406a0cf
    • Jason Rhinelander's avatar
      Miscellaneous travis-ci updates/fixes · fbb2ef7e
      Jason Rhinelander authored
      - For the debian/buster docker build (GCC 7/C++17) install and use the
        system `catch` package; this also renames "COMPILER_PACKAGES" to
        "EXTRA_PACKAGES" since it now contains a non-compiler package.
      
      - Add a status message indicating the catch version being used for
        compiling the embedded tests
      
      - Simplify some bash code by using VAR+=" foo" to append (rather than
        VAR="${VAR} foo"
      
      - Fix CMAKE_INCLUDE_PATH appending: it was prepending the ':' but not
        the existing $CMAKE_INCLUDE_PATH value and so would end up with
        ":/eigen-path" if CMAKE_INCLUDE_PATH was already set.  (This wasn't
        bug that was actually noticed since currently nothing else sets it).
      fbb2ef7e
    • Jason Rhinelander's avatar
      Build /permissive- under VS2017 · 6519388f
      Jason Rhinelander authored
      Building with the (VS2017) /permissive- flag puts the compiler into
      stricter standards-compliant mode.  It shouldn't cause the compiler to
      work differently--it just disallows some non-conforming code--so should
      be perfectly fine for the test suite under all VS2017 builds.
      
      This commit also fixes one failure under non-permissive mode.
      6519388f
    • Jason Rhinelander's avatar
      Fix 2D Nx1/1xN inputs to eigen dense vector args · a28393cf
      Jason Rhinelander authored
      This fixes a bug introduced in b68959e8
      when passing in a two-dimensional, but conformable, array as the value
      for a compile-time Eigen vector (such as VectorXd or RowVectorXd).  The
      commit switched to using numpy to copy into the eigen data, but this
      broke the described case because numpy refuses to broadcast a (N,1)
      into a (N).
      
      This commit fixes it by squeezing the input array whenever the output
      array is 1-dimensional, which will let the problematic case through.
      (This shouldn't squeeze inappropriately as dimension compatibility is
      already checked for conformability before getting to the copy code).
      a28393cf
    • Jason Rhinelander's avatar
      Fix `char &` arguments being non-bindable · fe1266e0
      Jason Rhinelander authored
      This changes the caster to return a reference to a (new) local `CharT`
      type caster member so that binding lvalue-reference char arguments
      works (currently it results in a compilation failure).
      
      Fixes #1116
      fe1266e0
  2. Sep 14, 2017
  3. Sep 13, 2017
  4. Sep 12, 2017
    • Dean Moldovan's avatar
      Make TypeErrors more informative when an optional header is missing · 2b4477eb
      Dean Moldovan authored
      E.g. trying to convert a `list` to a `std::vector<int>` without
      including <pybind11/stl.h> will now raise an error with a note that
      suggests checking the headers.
      
      The note is only appended if `std::` is found in the function
      signature. This should only be the case when a header is missing.
      E.g. when stl.h is included, the signature would contain `List[int]`
      instead of `std::vector<int>` while using stl_bind.h would produce
      something like `MyVector`. Similarly for `std::map`/`Dict`, `complex`,
      `std::function`/`Callable`, etc.
      
      There's a possibility for false positives, but it's pretty low.
      2b4477eb
    • Gunnar Läthén's avatar
      c64e6b16
  5. Sep 11, 2017
  6. Sep 10, 2017
  7. Sep 08, 2017
    • Dean Moldovan's avatar
      Remove unused value assignment · 2d49aee4
      Dean Moldovan authored
      2d49aee4
    • Dean Moldovan's avatar
    • Dean Moldovan's avatar
      Move the style check/barebones config up to the first position on Travis · cdf38dc6
      Dean Moldovan authored
      This runs the most basic tests first and avoids waiting until the very
      end for style checks.
      
      [skip appveyor]
      cdf38dc6
    • Dean Moldovan's avatar
      Speed up Travis CI build (#1056) · b7c98d21
      Dean Moldovan authored
      * Update Python 3 osx image to xcode8.3 to speed up brew install. 
        The Python 2 osx image remains xcode7.3.
      
      * Have one osx config run in debug mode to improve coverage.
      
      * Only run CMake build tests on two configs to speed up overall build.
      
        The CMake tests take ~30 seconds on each configuration, but we really 
        only need to them to run on two: one on Linux and one on macOS. This
        mirrors the recent change on AppVeyor.
      
      * Merge the style/docs/pip tests with the barebones build.
      
      * Merge 32-bit and CMake install configurations.
      
        This removes clang 3.9 from testing, but there are already 3 other clang 
        versions being tested on Travis and the new xcode8.3 image should be 
        close to clang 3.9.
      
      [skip appveyor]
      b7c98d21
  8. Sep 07, 2017
  9. Sep 06, 2017