1. 22 Mar, 2017 4 commits
    • Jason Rhinelander's avatar
      Change pypy travis-ci PyPy build to 5.7 release · ed8a461d
      Jason Rhinelander authored
      We no longer need a nightly build now that 5.7 is released (and the
      current nightly 5.8 is failing).
      ed8a461d
    • Jason Rhinelander's avatar
      array-unchecked: add runtime dimension support and array-compatible methods · 773339f1
      Jason Rhinelander authored
      The extends the previous unchecked support with the ability to
      determine the dimensions at runtime.  This incurs a small performance
      hit when used (versus the compile-time fixed alternative), but is still considerably
      faster than the full checks on every call that happen with
      `.at()`/`.mutable_at()`.
      773339f1
    • Jason Rhinelander's avatar
      array: add unchecked access via proxy object · 423a49b8
      Jason Rhinelander authored
      This adds bounds-unchecked access to arrays through a `a.unchecked<Type,
      Dimensions>()` method.  (For `array_t<T>`, the `Type` template parameter
      is omitted).  The mutable version (which requires the array have the
      `writeable` flag) is available as `a.mutable_unchecked<...>()`.
      
      Specifying the Dimensions as a template parameter allows storage of an
      std::array; having the strides and sizes stored that way (as opposed to
      storing a copy of the array's strides/shape pointers) allows the
      compiler to make significant optimizations of the shape() method that it
      can't make with a pointer; testing with nested loops of the form:
      
          for (size_t i0 = 0; i0 < r.shape(0); i0++)
              for (size_t i1 = 0; i1 < r.shape(1); i1++)
                  ...
                      r(i0, i1, ...) += 1;
      
      over a 10 million element array gives around a 25% speedup (versus using
      a pointer) for the 1D case, 33% for 2D, and runs more than twice as fast
      with a 5D array.
      423a49b8
    • Dean Moldovan's avatar
      Support class-specific operator new and delete · 0d765f4a
      Dean Moldovan authored
      Fixes #754.
      0d765f4a
  2. 21 Mar, 2017 3 commits
    • Jason Rhinelander's avatar
      vectorize: trivial handling for F-order arrays · b0292c1d
      Jason Rhinelander authored
      This extends the trivial handling to support trivial handling for
      Fortran-order arrays (i.e. column major): if inputs aren't all
      C-contiguous, but *are* all F-contiguous, the resulting array will be
      F-contiguous and we can do trivial processing.
      
      For anything else (e.g. C-contiguous, or inputs requiring non-trivial
      processing), the result is in (numpy-default) C-contiguous layout.
      b0292c1d
    • Jason Rhinelander's avatar
      Stop forcing c-contiguous in py::vectorize · ae5a8f7e
      Jason Rhinelander authored
      The only part of the vectorize code that actually needs c-contiguous is
      the "trivial" broadcast; for non-trivial arguments, the code already
      uses strides properly (and so handles C-style, F-style, neither, slices,
      etc.)
      
      This commit rewrites `broadcast` to additionally check for C-contiguous
      storage, then takes off the `c_style` flag for the arguments, which
      will keep the functionality more or less the same, except for no longer
      requiring an array copy for non-c-contiguous input arrays.
      
      Additionally, if we're given a singleton slice (e.g. a[0::4, 0::4] for a
      4x4 or smaller array), we no longer fail triviality because the trivial
      code path never actually uses the strides on a singleton.
      ae5a8f7e
    • Dean Moldovan's avatar
      Throw an exception when attempting to load an incompatible holder · cd3d1fc7
      Dean Moldovan authored
      Instead of a segfault. Fixes #751.
      
      This covers the case of loading a custom holder from a default-holder
      instance. Attempting to load one custom holder from a different custom
      holder (i.e. not `std::unique_ptr`) yields undefined behavior, just as
      #588 established for inheritance.
      cd3d1fc7
  3. 19 Mar, 2017 2 commits
    • Jason Rhinelander's avatar
      Error message wording tweak · 0f5ec0a8
      Jason Rhinelander authored
      py::arg() doesn't only specify named arguments anymore, so the error
      message was misleading (e.g. when using `py::arg().noconvert()` and
      forgetting `py::arg()` for a second positional argument).
      0f5ec0a8
    • Jason Rhinelander's avatar
      Added minimum compiler version assertions · 5a924787
      Jason Rhinelander authored
      We now require (and enforce at compile time):
      - GCC 4.8+
      - clang 3.3+ (5.0+ for Apple's renumbered clang)
      - MSVC 2015u3+
      - ICC 15+
      
      This also updates the versions listed in the README, and removes a
      now-redundant MSVC version check.
      5a924787
  4. 18 Mar, 2017 1 commit
  5. 17 Mar, 2017 5 commits
    • Jason Rhinelander's avatar
      Fail to compile with MI via class_ ctor parameters · b961626c
      Jason Rhinelander authored
      We can't support this for classes from imported modules (which is the
      primary purpose of a ctor argument base class) because we *have* to
      have both parent and derived to properly extract a multiple-inheritance
      base class pointer from a derived class pointer.
      
      We could support this for actual `class_<Base, ...> instances, but since
      in that case the `Base` is already present in the code, it seems more
      consistent to simply always require MI to go via template options.
      b961626c
    • Jason Rhinelander's avatar
      Use C++17 fold expression macro · d51acb68
      Jason Rhinelander authored
      This puts the fold expressions behind the feature macro instead of a
      general C++17 macro.
      
      It also adds a fold expression optimization to constexpr_sum (guarded
      by the same feature macro).
      d51acb68
    • Jason Rhinelander's avatar
      Eigen: don't require conformability on length-1 dimensions · efa8726f
      Jason Rhinelander authored
      Fixes #738
      
      The current check for conformability fails when given a 2D, 1xN or Nx1
      input to a row-major or column-major, respectively, Eigen::Ref, leading
      to a copy-required state in the type_caster, but this later failed
      because the copy was also non-conformable because it had the same shape
      and strides (because a 1xN or Nx1 is both F and C contiguous).
      
      In such cases we can safely ignore the stride on the "1" dimension since
      it'll never be used: only the "N" dimension stride needs to match the
      Eigen::Ref stride, which both fixes the non-conformable copy problem,
      but also avoids a copy entirely as long as the "N" dimension has a
      compatible stride.
      efa8726f
    • Jean-Michaël Celerier's avatar
      Use custom definitions for negation and bool_constant (#737) · 68e089a8
      Jean-Michaël Celerier authored
      Instead of relying on sometimes missing C++17 definitions
      68e089a8
    • Jason Rhinelander's avatar
      Add VS 2017 build, and bump conda to 3.6 · cabbf610
      Jason Rhinelander authored
      This adds VS 2017 to the build matrix, plus various other small
      appveyor build changes:
      
      - conda version bumped from 3.5 to 3.6
      - build newer versions/architectures/python first (i.e. VS2017/x64/3.6
        is the first build, VS2015/x86/2.7 is the last)
      - stop building after a job failure: often a build failure in one
        occurs everywhere; this just stops processing jobs (freeing them up
        for other PRs) if an error is hit.
      
      Annoyingly, appveyor doesn't allow excluding tests: i.e. the test matrix
      is always dense (appveyor issue 386), so for now we'll just run
      everything.  (Once appveyor issue 386 is resolved, we can come back and
      cut this down to 4-5 builds).
      cabbf610
  6. 16 Mar, 2017 2 commits
  7. 15 Mar, 2017 1 commit
  8. 14 Mar, 2017 3 commits
  9. 13 Mar, 2017 3 commits
  10. 12 Mar, 2017 4 commits
    • Jason Rhinelander's avatar
      Add MSVC 2017 cpp_function ICE workaround · 2d965d43
      Jason Rhinelander authored
      The `decltype(...)` in the template parameter that gives us SFINAE
      matching for a lambda makes MSVC 2017 ICE; this works around if by
      changing the test to an explicit not-a-function-or-pointer test, which
      seems to work everywhere.
      2d965d43
    • Dean Moldovan's avatar
      Fix readthedocs build (#721) · b7017c3d
      Dean Moldovan authored
      RTD updated their build environment which broke the 1.8.14.dev build of
      doxygen that we were using. The update also breaks the conda-forge build
      of 1.8.13 (but that version has other issues).
      
      Luckily, the RTD update did bring their doxygen version up to 1.8.11
      which is enough to parse the C++11 code we need (ref qualifiers) and it
      also avoids the segfault found in 1.8.13.
      
      Since we're using the native doxygen, conda isn't required anymore and
      we can simplify the RTD configuration.
      
      [skip ci]
      b7017c3d
    • Jason Rhinelander's avatar
      Call PyUnicode_DecodeUTF* directly · ee929639
      Jason Rhinelander authored
      Some versions of Python 2.7 reportedly (#713) have issues with
      PyUnicode_Decode being passed the encoding string, so just skip it
      entirely by calling the PyUnicode_DecodeUTF* function directly.  This
      will also be slightly more efficient by avoiding having to check the
      encoding string, and (for python 2) going through the unicode class's
      decode (python 3 fast-tracks this for all utf-{8,16,32} encodings;
      python 2 only fast-tracked for the exact string "utf-8", which we
      weren't passing anyway (we had "utf8")).
      
      This doesn't work for PyPy, however: its `PyUnicode_DecodeUTF{8,16,32}`
      appear rather broken: the UTF8 one segfaults, while the 16/32 require
      recasting into a non-const `char *` (and might segfault; I didn't get
      far enough to find out).  Just avoid the whole thing by keeping the
      encoding-passed-as-string version for PyPy, which seems to work
      reliably.
      ee929639
    • Jason Rhinelander's avatar
      Fix for floating point durations · e5456c22
      Jason Rhinelander authored
      The duration calculation was using %, but that's only supported on
      duration objects when the arithmetic type supports %, and hence fails
      for floats.  Fixed by subtracting off the calculated values instead.
      e5456c22
  11. 10 Mar, 2017 3 commits
    • Jason Rhinelander's avatar
      Add failure-allowed clang-4.0/libc++-4.0 build · 28a837a0
      Jason Rhinelander authored
      This adds a linux docker clang 4.0 with libc++ and c++1z build.
      28a837a0
    • Dean Moldovan's avatar
      Minor pytest maintenance (#702) · d47febcb
      Dean Moldovan authored
      * Add `pytest.ini` config file and set default options there instead of
        in `CMakeLists.txt` (command line arguments).
      
      * Change all output capture from `capfd` (filedescriptors) to `capsys`
        (Python's `sys.stdout` and `sys.stderr`). This avoids capturing
        low-level C errors, e.g. from the debug build of Python.
      
      * Set pytest minimum version to 3.0 to make it easier to use new
        features. Removed conditional use of `excinfo.match()`.
      
      * Clean up some leftover function-level `@pytest.requires_numpy`.
      d47febcb
    • Jason Rhinelander's avatar
      Use trusty for travis-ci pypy build (#716) · 303ee29d
      Jason Rhinelander authored
      Nightlies for pypy no longer run on Ubuntu 12.04; change the pypy build
      distribution to the travis-ci trusty (i.e. 14.04) beta container.
      
      The pypy build was also installing numpy and scipy for the *system*
      python version, which was pointless; this also adds a guard to the
      eigen/numpy/scipy install code with a !PYPY check.
      303ee29d
  12. 08 Mar, 2017 1 commit
    • Jason Rhinelander's avatar
      Fix extra docstring newlines under `options.disable_function_signatures()` · 10d13048
      Jason Rhinelander authored
      When using pybind::options to disable function signatures, user-defined
      docstrings only get appended if they exist, but newlines were getting
      appended unconditionally, so the docstring could end up with blank lines
      (depending on which overloads, in particular, provided docstrings).
      
      This commit suppresses the empty lines by only adding newlines for
      overloads when needed.
      10d13048
  13. 06 Mar, 2017 1 commit
  14. 04 Mar, 2017 2 commits
  15. 03 Mar, 2017 2 commits
  16. 01 Mar, 2017 1 commit
    • eirrgang's avatar
      fix python version check (#705) · 11c9f32c
      eirrgang authored
      Commit 11a337f1 added major and minor python version
      checking to cast.h but does not use the macros defined
      via the Python.h inclusion. This may be due to an
      intention to use the variables defined by the cmake
      module FindPythonInterpreter, but nothing in the
      pybind11 repo does anything to convert the cmake
      variables to preprocessor defines.
      11c9f32c
  17. 28 Feb, 2017 1 commit
  18. 27 Feb, 2017 1 commit