Commit Graph

2240 Commits

Author SHA1 Message Date
Ivan Smirnov 223afe37fa Add documentation re: PYBIND11_DTYPE macro 2016-08-13 12:43:16 +01:00
Ivan Smirnov 4c9a160a1d Exclude double type from is_pod_struct 2016-08-13 12:43:16 +01:00
Ivan Smirnov 3b803846d5 Add a few comments throughout numpy.h 2016-08-13 12:43:16 +01:00
Ivan Smirnov 2f01f01866 Always allocate at least one element 2016-08-13 12:43:16 +01:00
Ivan Smirnov b38ca22e94 Add a few braces for clarity 2016-08-13 12:43:16 +01:00
Ivan Smirnov 95545e6256 Change PB11_IMPL prefix to PYBIND11, add comment 2016-08-13 12:43:16 +01:00
Ivan Smirnov 7bdd74a9fb Fix PYBIND11_DTYPE to work with MSVC compiler 2016-08-13 12:43:16 +01:00
Ivan Smirnov 5dc6c5445d Cosmetic: fix indentation 2016-08-13 12:43:16 +01:00
Ivan Smirnov 73f56830f8 Add detail::is_pod_struct<T> helper 2016-08-13 12:43:16 +01:00
Ivan Smirnov d0bafd90e0 Add a test for buffer format of unbound struct 2016-08-13 12:43:16 +01:00
Ivan Smirnov a0e37f250e npy_format_descriptor::format() - fail if unbound 2016-08-13 12:43:16 +01:00
Ivan Smirnov 5a47a16e47 Revert accidental whitespace change 2016-08-13 12:43:16 +01:00
Ivan Smirnov 40eadfeb73 Make npy_format_descriptor backwards-compat
The typenum for non-structured types is still accessible at ::value,
and the dtype object for all types is accessible at ::dtype().
2016-08-13 12:43:16 +01:00
Ivan Smirnov 95e9b12322 Prefix the FIELD_DESCRIPTOR macro 2016-08-13 12:43:16 +01:00
Ivan Smirnov 5e71e17bdf Make changes to format_descriptor backwards-compat
The format strings that are known at compile time are now accessible
via both ::value and ::format(), and format strings for everything
else is accessible via ::format(). This makes it backwards compatible.
2016-08-13 12:43:16 +01:00
Ivan Smirnov 4f164217e4 Add dtype_of<T>() function, update the tests 2016-08-13 12:43:16 +01:00
Ivan Smirnov 036e8cd32f Remove erroneous py:: prefix in numpy.h 2016-08-13 12:43:16 +01:00
Ivan Smirnov 873d267471 Prefix all macros in numpy.h to avoid name clashes 2016-08-13 12:43:16 +01:00
Ivan Smirnov 1f54cd9209 Use object instead of ptrs in numpy descriptors 2016-08-13 12:43:16 +01:00
Ivan Smirnov 2a7acb6d55 Incref descriptors properly when creating arrays 2016-08-13 12:43:16 +01:00
Ivan Smirnov 669e14269d Add test for a function accepting recarray (WIP) 2016-08-13 12:43:16 +01:00
Ivan Smirnov f5b166d042 Simplify npy_format_descriptor slightly 2016-08-13 12:43:16 +01:00
Ivan Smirnov bdc9902041 Add explicit test for recarray format descriptors 2016-08-13 12:43:16 +01:00
Ivan Smirnov 7f913aecab Add tests for nested recarrays 2016-08-13 12:43:16 +01:00
Ivan Smirnov 80a3785a66 Borrow field descriptors for recarray dtype 2016-08-13 12:43:16 +01:00
Ivan Smirnov 8502f542b3 Add packed recarray tests 2016-08-13 12:43:16 +01:00
Ivan Smirnov 2e1565e414 Add empty recarray test, check for calloc fail 2016-08-13 12:43:16 +01:00
Ivan Smirnov f10c84eb9b Release format descriptor args before converting 2016-08-13 12:43:16 +01:00
Ivan Smirnov bb4015ded3 Add a basic test for recarrays and complex dtypes 2016-08-13 12:43:16 +01:00
Ivan Smirnov 2488b32066 Add PYBIND11_DTYPE macro for registering dtypes 2016-08-13 12:43:16 +01:00
Ivan Smirnov fab02efb10 Switch away from typenums for numpy descriptors 2016-08-13 12:43:16 +01:00
Ivan Smirnov a67c2b52e4 Use memoryview for constructing array from buffer 2016-08-13 12:43:16 +01:00
Ivan Smirnov ea2755ccdc Use a macro for numpy API definitions 2016-08-13 12:43:16 +01:00
Ivan Smirnov f7143dc589 Update gitignore to ignore debug test builds 2016-08-13 12:43:16 +01:00
Ivan Smirnov 7709d6b77d Add memoryview type 2016-08-13 12:43:16 +01:00
Ivan Smirnov 8b5fc8b5e1 Dump test output if the test runner fails 2016-08-13 12:43:16 +01:00
Ivan Smirnov 42ad328481 Change format_descriptor::value to a static func 2016-08-13 12:43:16 +01:00
Ivan Smirnov a7e62e1ca6 Add buffer_info::as_pybuffer() method 2016-08-13 12:43:16 +01:00
Ivan Smirnov 3dd325b772 Change npy_format_descriptor typenum to static fn 2016-08-13 12:43:16 +01:00
Wenzel Jakob 09f40e010f Merge pull request #282 from jagerman/key-iterators
Add pybind11::make_key_iterator for map iteration
2016-08-12 08:35:45 +02:00
Jason Rhinelander 5aa85be26e Added pybind11::make_key_iterator for map iteration
This allows exposing a dict-like interface to python code, allowing
iteration over keys via:

    for k in custommapping:
        ...

while still allowing iteration over pairs, so that you can also
implement 'dict.items()' functionality which returns a pair iterator,
allowing:

    for k, v in custommapping.items():
        ...

example-sequences-and-iterators is updated with a custom class providing
both types of iteration.
2016-08-11 21:22:05 -04:00
Wenzel Jakob 216df0dd67 quench warning on clang/OSX 2016-08-12 00:59:57 +02:00
Wenzel Jakob bb6c1f9c4d add Jason Rhinelander to contributors list 2016-08-12 00:58:49 +02:00
Wenzel Jakob f4f2afb6c9 Merge pull request #324 from jagerman/example-constructor-tracking
Improve constructor/destructor tracking
2016-08-12 00:56:26 +02:00
Jason Rhinelander 3f589379ec Improve constructor/destructor tracking
This commit rewrites the examples that look for constructor/destructor
calls to do so via static variable tracking rather than output parsing.

The added ConstructorStats class provides methods to keep track of
constructors and destructors, number of default/copy/move constructors,
and number of copy/move assignments.  It also provides a mechanism for
storing values (e.g. for value construction), and then allows all of
this to be checked at the end of a test by getting the statistics for a
C++ (or python mapping) class.

By not relying on the precise pattern of constructions/destructions,
but rather simply ensuring that every construction is matched with a
destruction on the same object, we ensure that everything that gets
created also gets destroyed as expected.

This replaces all of the various "std::cout << whatever" code in
constructors/destructors with
`print_created(this)`/`print_destroyed(this)`/etc. functions which
provide similar output, but now has a unified format across the
different examples, including a new ### prefix that makes mixed example
output and lifecycle events easier to distinguish.

With this change, relaxed mode is no longer needed, which enables
testing for proper destruction under MSVC, and under any other compiler
that generates code calling extra constructors, or optimizes away any
constructors.  GCC/clang are used as the baseline for move
constructors; the tests are adapted to allow more move constructors to
be evoked (but other types are constructors much have matching counts).

This commit also disables output buffering of tests, as the buffering
sometimes results in C++ output ending up in the middle of python
output (or vice versa), depending on the OS/python version.
2016-08-11 18:16:04 -04:00
Wenzel Jakob 85557b1dec Merge pull request #330 from jagerman/silence-msvc-warning
Silence MSVC warning
2016-08-11 22:35:15 +02:00
Jason Rhinelander e20fc61a33 Silence MSVC warning
PR #329 generates the following warning under MSVC:

    ...\cast.h(202): warning C4456: declaration of 'it' hides previous local declaration

This renames the second iterator to silence it.
2016-08-11 16:23:23 -04:00
Wenzel Jakob 5a4cd3b45c Merge pull request #329 from jagerman/track-same-ptr-instances
Track registered instances that share a pointer address
2016-08-10 18:24:10 +02:00
Jason Rhinelander f2ecd8927e Implement reference_internal with a keep_alive
reference_internal requires an `instance` field to track the returned
reference's parent, but that's just a duplication of what
keep_alive<0,1> does, so use a keep alive to do this to eliminate the
duplication.
2016-08-10 12:08:04 -04:00
Jason Rhinelander efc2aa7ee7 Removed obsolete documentation about duplicate address problems
It no longer applies since instances are now identified by both address
and type.
2016-08-10 11:38:33 -04:00