1. 29 Jul, 2021 1 commit
  2. 14 Jul, 2021 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      * Removing stray semicolons (discovered by running clang-format v12 followed... · aca6c3ba
      Ralf W. Grosse-Kunstleve authored
      * Removing stray semicolons (discovered by running clang-format v12 followed by tools/check-style.sh). (#3087)
      
      * Manually moving `// NOLINT` comments so that clang-format does not move them to the wrong places.
      
      * Manually reformatting comments related to `static_assert`s so that clang-format does not need two passes.
      
      * Empty lines between #includes, to prevent clang-format from shuffling the order and thereby confusing MSVC 2015.
      
      * git diff -U0 --no-color HEAD^ | python3 $HOME/clone/llvm-project/clang/tools/clang-format/clang-format-diff.py -p1 -style=file -i
      aca6c3ba
  3. 12 Jul, 2021 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      NOLINT reduction (#3096) · 2d468697
      Ralf W. Grosse-Kunstleve authored
      * Copying from prework_no_rst branch (PR #3087): test_numpy_array.cpp, test_stl.cpp
      
      * Manual changes reducing NOLINTs.
      
      * clang-format-diff.py
      
      * Minor adjustment to avoid MSVC warning C4702: unreachable code
      2d468697
  4. 26 Jun, 2021 1 commit
  5. 22 Jun, 2021 1 commit
    • Aaron Gokaslan's avatar
      fix(clang-tidy): performance fixes applied in tests and CI (#3051) · dac74ebd
      Aaron Gokaslan authored
      * Initial fixes
      
      * Whoops
      
      * Finish clang-tidy manual fixes
      
      * Add two missing fixes
      
      * Revert
      
      * Update clang-tidy
      
      * Try to fix unreachable code error
      
      * Move nolint comment
      
      * Apply missing fix
      
      * Don't override clang-tidy config
      
      * Does this fix clang-tidy?
      
      * Make all clang-tidy errors visible
      
      * Add comments about NOLINTs and remove a few
      
      * Fix typo
      dac74ebd
  6. 21 Jun, 2021 1 commit
  7. 15 Jan, 2021 1 commit
    • Axel Huebl's avatar
      ci: Intel icc/icpc via oneAPI (#2573) · 0b3df7f9
      Axel Huebl authored
      
      
      * CI: Intel icc/icpc via oneAPI
      
      Add testing for Intel icc/icpc via the oneAPI images.
      Intel oneAPI is in a late beta stage, currently shipping
      oneAPI beta09 with ICC 20.2.
      
      * CI: Skip Interpreter Tests for Intel
      
      Cannot find how to add this, neiter the package `libc6-dev` nor
      `intel-oneapi-mkl-devel` help when installed to solve this:
      ```
      -- Looking for C++ include pthread.h
      -- Looking for C++ include pthread.h - not found
      CMake Error at /__t/cmake/3.18.4/x64/cmake-3.18.4-Linux-x86_64/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:165 (message):
        Could NOT find Threads (missing: Threads_FOUND)
      Call Stack (most recent call first):
        /__t/cmake/3.18.4/x64/cmake-3.18.4-Linux-x86_64/share/cmake-3.18/Modules/FindPackageHandleStandardArgs.cmake:458 (_FPHSA_FAILURE_MESSAGE)
        /__t/cmake/3.18.4/x64/cmake-3.18.4-Linux-x86_64/share/cmake-3.18/Modules/FindThreads.cmake:234 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
        tests/test_embed/CMakeLists.txt:17 (find_package)
      ```
      
      * CI: libc6-dev from GCC for ICC
      
      * CI: Run bare metal for oneAPI
      
      * CI: Ubuntu 18.04 for oneAPI
      
      * CI: Intel +Catch -Eigen
      
      * CI: CMake from Apt (ICC tests)
      
      * CI: Replace Intel Py with GCC Py
      
      * CI: Intel w/o GCC's Eigen
      
      * CI: ICC with verbose make
      
      * [Debug] Find core dump
      
      * tests: use arg{} instead of arg() for Intel
      
      * tests: adding a few more missing {}
      
      * fix: sync with @tobiasleibner's branch
      
      * fix: try ubuntu 20-04
      
      * fix: drop exit 1
      
      * style: clang tidy fix
      
      * style: fix missing NOLINT
      
      * ICC: Update Compiler Name
      
      Changed upstream with the last oneAPI release.
      
      * ICC CI: Downgrade pytest
      
      pytest 6 does not capture the `discard_as_unraisable` stderr and
      just writes a warning with its content instead.
      
      * Use new test pinning requirements.txt
      
      * tests: add notes about intel, cleanup
      Co-authored-by: default avatarHenry Schreiner <henryschreineriii@gmail.com>
      0b3df7f9
  8. 20 Oct, 2020 1 commit
  9. 06 Oct, 2020 1 commit
    • Henry Schreiner's avatar
      feat: py::prepend tag (#1131) · 9a0c96dd
      Henry Schreiner authored
      * feat: add a priority overload with py::prepend
      
      * doc: fix wording as suggested by rwgk
      
      * feat: add get_pointer
      
      * refactor: is_prepended -> prepend (internal)
      
      * docs: suggestion from @wjakob
      
      * tests: add test covering get_pointer/set_pointer
      9a0c96dd
  10. 03 Oct, 2020 1 commit
  11. 26 Jul, 2020 1 commit
  12. 07 Jul, 2020 1 commit
  13. 30 Jun, 2020 1 commit
  14. 10 Jun, 2020 1 commit
  15. 19 Aug, 2019 1 commit
    • Andre Schmeißer's avatar
      Make `overload_cast_impl` available in C++11 mode. (#1581) · 19189b4c
      Andre Schmeißer authored
      * Make `overload_cast_impl` available in C++11 mode.
      
      Narrow the scope of the `#if defined(PYBIND11_CPP14)` block around overload_cast to only
      cover the parts where C++14 is stricly required. Thus, the implementation in
      `pybind11::details::overload_cast_impl` is still available in C++11 mode.
      
      * PR #1581: Modify test to use overload_cast_impl, update docs and change log
      19189b4c
  16. 07 Nov, 2017 1 commit
    • Ted Drain's avatar
      Added write only property functions for issue #1142 (#1144) · 0a0758ce
      Ted Drain authored
      py::class_<T>'s `def_property` and `def_property_static` can now take a
      `nullptr` as the getter to allow a write-only property to be established
      (mirroring Python's `property()` built-in when `None` is given for the
      getter).
      
      This also updates properties to use the new nullptr constructor internally.
      0a0758ce
  17. 05 Aug, 2017 1 commit
    • Jason Rhinelander's avatar
      Update all remaining tests to new test styles · 391c7544
      Jason Rhinelander authored
      This udpates all the remaining tests to the new test suite code and
      comment styles started in #898.  For the most part, the test coverage
      here is unchanged, with a few minor exceptions as noted below.
      
      - test_constants_and_functions: this adds more overload tests with
        overloads with different number of arguments for more comprehensive
        overload_cast testing.  The test style conversion broke the overload
        tests under MSVC 2015, prompting the additional tests while looking
        for a workaround.
      
      - test_eigen: this dropped the unused functions `get_cm_corners` and
        `get_cm_corners_const`--these same tests were duplicates of the same
        things provided (and used) via ReturnTester methods.
      
      - test_opaque_types: this test had a hidden dependence on ExampleMandA
        which is now fixed by using the global UserType which suffices for the
        relevant test.
      
      - test_methods_and_attributes: this required some additions to UserType
        to make it usable as a replacement for the test's previous SimpleType:
        UserType gained a value mutator, and the `value` property is not
        mutable (it was previously readonly).  Some overload tests were also
        added to better test overload_cast (as described above).
      
      - test_numpy_array: removed the untemplated mutate_data/mutate_data_t:
        the templated versions with an empty parameter pack expand to the same
        thing.
      
      - test_stl: this was already mostly in the new style; this just tweaks
        things a bit, localizing a class, and adding some missing
        `// test_whatever` comments.
      
      - test_virtual_functions: like `test_stl`, this was mostly in the new
        test style already, but needed some `// test_whatever` comments.
        This commit also moves the inherited virtual example code to the end
        of the file, after the main set of tests (since it is less important
        than the other tests, and rather length); it also got renamed to
        `test_inherited_virtuals` (from `test_inheriting_repeat`) because it
        tests both inherited virtual approaches, not just the repeat approach.
      391c7544
  18. 16 Jul, 2017 1 commit
    • Jason Rhinelander's avatar
      Support `take_ownership` for custom type casters given a pointer · 60526d46
      Jason Rhinelander authored
      This changes the pointer `cast()` in `PYBIND11_TYPE_CASTER` to recognize
      the `take_ownership` policy: if casting a pointer with take-ownership,
      the `cast()` now recalls `cast()` with a dereferenced rvalue (rather
      than the previous code, which was always calling it with a const lvalue
      reference), and deletes the pointer after the chained `cast()` is
      complete.
      
      This makes code like:
      
          m.def("f", []() { return new std::vector<int>(100, 1); },
              py::return_value_policy::take_ownership);
      
      do the expected thing by taking over ownership of the returned pointer
      (which is deleted once the chained cast completes).
      60526d46
  19. 03 Jul, 2017 1 commit
    • Jason Rhinelander's avatar
      Override deduced Base class when defining Derived methods · 23bf8945
      Jason Rhinelander authored
      
      
      When defining method from a member function pointer (e.g. `.def("f",
      &Derived::f)`) we run into a problem if `&Derived::f` is actually
      implemented in some base class `Base` when `Base` isn't
      pybind-registered.
      
      This happens because the class type is deduced from the member function
      pointer, which then becomes a lambda with first argument this deduced
      type.  For a base class implementation, the deduced type is `Base`, not
      `Derived`, and so we generate and registered an overload which takes a
      `Base *` as first argument.  Trying to call this fails if `Base` isn't
      registered (e.g.  because it's an implementation detail class that isn't
      intended to be exposed to Python) because the type caster for an
      unregistered type always fails.
      
      This commit adds a `method_adaptor` function that rebinds a member
      function to a derived type member function and otherwise (i.e. regular
      functions/lambda) leaves the argument as-is.  This is now used for class
      definitions so that they are bound with type being registered rather
      than a potential base type.
      
      A closely related fix in this commit is to similarly update the lambdas
      used for `def_readwrite` (and related) to bind to the class type being
      registered rather than the deduced type so that registering a property
      that resolves to a base class member similarly generates a usable
      function.
      
      Fixes #854, #910.
      Co-Authored-By: default avatarDean Moldovan <dean0x7d@gmail.com>
      23bf8945
  20. 27 Jun, 2017 1 commit
  21. 24 May, 2017 1 commit
  22. 28 Apr, 2017 1 commit
    • Jason Rhinelander's avatar
      Don't let PyInstanceMethod hide itself · 0a90b2db
      Jason Rhinelander authored
      Python 3's `PyInstanceMethod_Type` hides itself via its `tp_descr_get`,
      which prevents aliasing methods via `cls.attr("m2") = cls.attr("m1")`:
      instead the `tp_descr_get` returns a plain function, when called on a
      class, or a `PyMethod`, when called on an instance.  Override that
      behaviour for pybind11 types with a special bypass for
      `PyInstanceMethod_Types`.
      0a90b2db
  23. 18 Apr, 2017 1 commit
    • Jason Rhinelander's avatar
      Don't allow mixed static/non-static overloads · d355f2fc
      Jason Rhinelander authored
      We currently fail at runtime when trying to call a method that is
      overloaded with both static and non-static methods.  This is something
      python won't allow: the object is either a function or an instance, and
      can't be both.
      d355f2fc
  24. 15 Apr, 2017 1 commit
    • Jason Rhinelander's avatar
      Fixed bad_arg_def imports · 2d14c1c5
      Jason Rhinelander authored
      Don't try to define these in the issues submodule, because that fails
      if testing without issues compiled in (e.g. using
      cmake -DPYBIND11_TEST_OVERRIDE=test_methods_and_attributes.cpp).
      2d14c1c5
  25. 07 Apr, 2017 1 commit
  26. 23 Feb, 2017 2 commits
    • Dean Moldovan's avatar
      Enable static properties (py::metaclass) by default · dd01665e
      Dean Moldovan authored
      Now that only one shared metaclass is ever allocated, it's extremely
      cheap to enable it for all pybind11 types.
      
      * Deprecate the default py::metaclass() since it's not needed anymore.
      * Allow users to specify a custom metaclass via py::metaclass(handle).
      dd01665e
    • Dean Moldovan's avatar
      Reimplement static properties by extending PyProperty_Type · c91f8bd6
      Dean Moldovan authored
      Instead of creating a new unique metaclass for each type, the builtin
      `property` type is subclassed to support static properties. The new
      setter/getters always pass types instead of instances in their `self`
      argument. A metaclass is still required to support this behavior, but
      it doesn't store any data anymore, so a new one doesn't need to be
      created for each class. There is now only one common metaclass which
      is shared by all pybind11 types.
      c91f8bd6
  27. 08 Feb, 2017 1 commit
    • Jason Rhinelander's avatar
      Fix debugging output for nameless py::arg_v annotations (#648) · 1eaacd19
      Jason Rhinelander authored
      * Fix debugging output for nameless py::arg annotations
      
      This fixes a couple bugs with nameless py::arg() (introduced in #634)
      annotations:
      
      - the argument name was being used in debug mode without checking that
        it exists (which would result in the std::string construction throwing
        an exception for being invoked with a nullptr)
      - the error output says "keyword arguments", but py::arg_v() can now
        also be used for positional argument defaults.
      - the debugging output "in function named 'blah'" was overly verbose:
        changed it to just "in function 'blah'".
      
      * Fix missing space in debug test string
      
      * Moved tests from issues to methods_and_attributes
      1eaacd19
  28. 04 Feb, 2017 2 commits
    • Jason Rhinelander's avatar
      Prefer non-converting argument overloads · e550589b
      Jason Rhinelander authored
      This changes the function dispatching code for overloaded functions into
      a two-pass procedure where we first try all overloads with
      `convert=false` for all arguments.  If no function calls succeeds in the
      first pass, we then try a second pass where we allow arguments to have
      `convert=true` (unless, of course, the argument was explicitly specified
      with `py::arg().noconvert()`).
      
      For non-overloaded methods, the two-pass procedure is skipped (we just
      make the overload-allowed call).  The second pass is also skipped if it
      would result in the same thing (i.e. where all arguments are
      `.noconvert()` arguments).
      e550589b
    • Jason Rhinelander's avatar
      Add support for non-converting arguments · abc29cad
      Jason Rhinelander authored
      This adds support for controlling the `convert` flag of arguments
      through the py::arg annotation.  This then allows arguments to be
      flagged as non-converting, which the type_caster is able to use to
      request different behaviour.
      
      Currently, AFAICS `convert` is only used for type converters of regular
      pybind11-registered types; all of the other core type_casters ignore it.
      We can, however, repurpose it to control internal conversion of
      converters like Eigen and `array`: most usefully to give callers a way
      to disable the conversion that would otherwise occur when a
      `Eigen::Ref<const Eigen::Matrix>` argument is passed a numpy array that
      requires conversion (either because it has an incompatible stride or the
      wrong dtype).
      
      Specifying a noconvert looks like one of these:
      
          m.def("f1", &f, "a"_a.noconvert() = "default"); // Named, default, noconvert
          m.def("f2", &f, "a"_a.noconvert()); // Named, no default, no converting
          m.def("f3", &f, py::arg().noconvert()); // Unnamed, no default, no converting
      
      (The last part--being able to declare a py::arg without a name--is new:
      previous py::arg() only accepted named keyword arguments).
      
      Such an non-convert argument is then passed `convert = false` by the
      type caster when loading the argument.  Whether this has an effect is up
      to the type caster itself, but as mentioned above, this would be
      extremely helpful for the Eigen support to give a nicer way to specify
      a "no-copy" mode than the custom wrapper in the current PR, and
      moreover isn't an Eigen-specific hack.
      abc29cad
  29. 26 Dec, 2016 1 commit
  30. 16 Dec, 2016 1 commit
    • Wenzel Jakob's avatar
      WIP: PyPy support (#527) · 1d1f81b2
      Wenzel Jakob authored
      This commit includes modifications that are needed to get pybind11 to work with PyPy. The full test suite compiles and runs except for a last few functions that are commented out (due to problems in PyPy that were reported on the PyPy bugtracker).
      
      Two somewhat intrusive changes were needed to make it possible: two new tags ``py::buffer_protocol()`` and ``py::metaclass()`` must now be specified to the ``class_`` constructor if the class uses the buffer protocol and/or requires a metaclass (e.g. for static properties).
      
      Note that this is only for the PyPy version based on Python 2.7 for now. When the PyPy 3.x has caught up in terms of cpyext compliance, a PyPy 3.x patch will follow.
      1d1f81b2
  31. 08 Dec, 2016 1 commit
  32. 01 Nov, 2016 1 commit
    • Dean Moldovan's avatar
      Make reference(_internal) the default return value policy for properties (#473) · 03f627eb
      Dean Moldovan authored
      * Make reference(_internal) the default return value policy for properties
      
      Before this, all `def_property*` functions used `automatic` as their
      default return value policy. This commit makes it so that:
      
       * Non-static properties use `reference_interal` by default, thus
         matching `def_readonly` and `def_readwrite`.
      
       * Static properties use `reference` by default, thus matching
         `def_readonly_static` and `def_readwrite_static`.
      
      In case `cpp_function` is passed to any `def_property*`, its policy will
      be used instead of any defaults. User-defined arguments in `extras`
      still have top priority and will override both the default policies and
      the ones from `cpp_function`.
      
      Resolves #436.
      
      * Almost always use return_value_policy::move for rvalues
      
      For functions which return rvalues or rvalue references, the only viable
      return value policies are `copy` and `move`. `reference(_internal)` and
      `take_ownership` would take the address of a temporary which is always
      an error.
      
      This commit prevents possible user errors by overriding the bad rvalue
      policies with `move`. Besides `move`, only `copy` is allowed, and only
      if it's explicitly selected by the user.
      
      This is also a necessary safety feature to support the new default
      return value policies for properties: `reference(_internal)`.
      03f627eb
  33. 21 Oct, 2016 1 commit
  34. 14 Oct, 2016 1 commit
  35. 11 Oct, 2016 1 commit
  36. 03 Sep, 2016 1 commit
    • Jason Rhinelander's avatar
      Make test initialization self-registering · 52f4be89
      Jason Rhinelander authored
      Adding or removing tests is a little bit cumbersome currently: the test
      needs to be added to CMakeLists.txt, the init function needs to be
      predeclared in pybind11_tests.cpp, then called in the plugin
      initialization.  While this isn't a big deal for tests that are being
      committed, it's more of a hassle when working on some new feature or
      test code for which I temporarily only care about building and linking
      the test being worked on rather than the entire test suite.
      
      This commit changes tests to self-register their initialization by
      having each test initialize a local object (which stores the
      initialization function in a static variable).  This makes changing the
      set of tests being build easy: one only needs to add or comment out
      test names in tests/CMakeLists.txt.
      
      A couple other minor changes that go along with this:
      
      - test_eigen.cpp is now included in the test list, then removed if eigen
        isn't available.  This lets you disable the eigen tests by commenting
        it out, just like all the other tests, but keeps the build working
        without eigen eigen isn't available.  (Also, if it's commented out, we
        don't even bother looking for and reporting the building with/without
        eigen status message).
      
      - pytest is now invoked with all the built test names (with .cpp changed
        to .py) so that it doesn't try to run tests that weren't built.
      52f4be89
  37. 19 Aug, 2016 1 commit
    • Dean Moldovan's avatar
      Port tests to pytest · a0c1ccf0
      Dean Moldovan authored
      Use simple asserts and pytest's powerful introspection to make testing
      simpler. This merges the old .py/.ref file pairs into simple .py files
      where the expected values are right next to the code being tested.
      
      This commit does not touch the C++ part of the code and replicates the
      Python tests exactly like the old .ref-file-based approach.
      a0c1ccf0
  38. 15 Aug, 2016 1 commit