Ivan Smirnov
fb74df50c9
Implement format/numpy descriptors for enums
2016-10-20 12:38:43 +01:00
Jason Rhinelander
12d76600f8
Disable most implicit conversion constructors
...
We have various classes that have non-explicit constructors that accept
a single argument, which is implicitly making them implicitly
convertible from the argument. In a few cases, this is desirable (e.g.
implicit conversion of std::string to py::str, or conversion of double
to py::float_); in many others, however, it is unintended (e.g. implicit
conversion of size_t to some pre-declared py::array_t<T> type).
This disables most of the unwanted implicit conversions by marking them
`explicit`, and comments the ones that are deliberately left implicit.
2016-10-16 16:27:42 -04:00
Wenzel Jakob
c01a1c1ade
added array::ensure() function wrapping PyArray_FromAny
...
This convenience function ensures that a py::object is either a
py::array, or the implementation will try to convert it into one. Layout
requirements (such as c_style or f_style) can be also be provided.
2016-10-14 01:08:07 +02:00
Wenzel Jakob
fac7c09458
NumPy "base" feature: integrated feedback by @aldanor
2016-10-13 10:49:53 +02:00
Wenzel Jakob
369e9b3937
Permit creation of NumPy arrays with a "base" object that owns the data
...
This patch adds an extra base handle parameter to most ``py::array`` and
``py::array_t<>`` constructors. If specified along with a pointer to
data, the base object will be registered within NumPy, which increases
the base's reference count. This feature is useful to create shallow
copies of C++ or Python arrays while ensuring that the owners of the
underlying can't be garbage collected while referenced by NumPy.
The commit also adds a simple test function involving a ``wrap()``
function that creates shallow copies of various N-D arrays.
2016-10-13 01:03:40 +02:00
Wenzel Jakob
ba7678016c
numpy.h: added array::squeeze() method
2016-10-07 11:19:57 +02:00
Dean Moldovan
242b146a51
Extend attribute and item accessor interface using object_api
2016-09-23 02:00:01 +02:00
Dean Moldovan
865e43034b
Make attr and item accessors throw on error instead of returning nullptr
...
This also adds the `hasattr` and `getattr` functions which are needed
with the new attribute behavior. The new functions behave exactly like
their Python counterparts.
Similarly `object` gets a `contains` method which calls `__contains__`,
i.e. it's the same as the `in` keyword in Python.
2016-09-23 01:40:22 +02:00
Dzhelil Rufat
c250ee5146
Use more consistent indentation and typenames names.
2016-09-22 14:51:41 -07:00
Wenzel Jakob
c1fc27e2b5
use detail::enable_if_t everywhere
2016-09-19 13:45:34 +02:00
Ivan Smirnov
f2a0ad5855
array: add direct data access and indexing methods
2016-09-10 16:24:00 +01:00
Ivan Smirnov
91b3d681ad
Expose some dtype/array attributes via NumPy C API
2016-09-10 16:24:00 +01:00
Wenzel Jakob
a3906778eb
minor: renamed argument in array constructor
2016-08-28 01:55:07 +02:00
Ivan Smirnov
d8b11b8708
Fix dtype::strip_padding() on Intel compiler
2016-08-25 21:52:52 +01:00
Wenzel Jakob
9a777a263d
numpy.h: fix test suite issues on the Intel Compiler
2016-08-25 02:18:00 +02:00
Ivan Smirnov
1c8828fe8f
Fix int_ shadowing problem in detail namespace
...
If operators.h is included, int_ function in the `detail`
namespace will shadow pybind11::int_ type, so the fully qualified
name has to be used.
2016-08-25 00:33:02 +01:00
Ivan Smirnov
67b3daeea4
Always decay type param of npy_format_descriptor
2016-08-15 18:41:54 +01:00
Ivan Smirnov
edbd4cb0a7
Decay const qualifiers in is_pod_struct<>
2016-08-15 18:41:54 +01:00
Ivan Smirnov
03fb488579
format_descriptor::format() now yields std::string
...
This is required since format descriptors for string types that
were using PYBIND11_DESCR were causing problems on C++14 on Linux.
Although this is technically a breaking change, it shouldn't cause
problems since the only use of format strings is passing them to
buffer_info constructor which expects std::string.
Note: for non-structured types, the const char * value is still
accessible via ::value for compatibility purpose.
2016-08-15 00:40:29 +01:00
Ivan Smirnov
61e3b0bd15
Use builtin str type for recarray field names
2016-08-13 12:51:31 +01:00
Ivan Smirnov
ad5ca6d4e6
Added dtype from const char pointer ctor
2016-08-13 12:43:16 +01:00
Ivan Smirnov
c6257f8641
Allow nullptr in array ctors wherever possible
2016-08-13 12:43:16 +01:00
Ivan Smirnov
6636ae9d4e
Also add the new ctors to py::array_t
2016-08-13 12:43:16 +01:00
Ivan Smirnov
6bb0ee1186
Add all possible ctors for py::array
2016-08-13 12:43:16 +01:00
Ivan Smirnov
d77bc8c343
Add dtype(names, offsets, formats, itemsize) ctor
2016-08-13 12:43:16 +01:00
Ivan Smirnov
fc5620afa6
Fix a segfault where func object wasn't released
2016-08-13 12:43:16 +01:00
Ivan Smirnov
01f7409550
Initial implementation of py::dtype
2016-08-13 12:43:16 +01:00
Ivan Smirnov
05cb58ade2
Cleanup: move numpy API bindings out of py::array
2016-08-13 12:43:16 +01:00
Ivan Smirnov
afb07e7e92
Code reordering / cleanup only
2016-08-13 12:43:16 +01:00
Ivan Smirnov
f9c0defed7
Add numpy wrappers for char[] and std::array<char>
2016-08-13 12:43:16 +01:00
Ivan Smirnov
103d5eadc3
Remove redundant definition
2016-08-13 12:43:16 +01:00
Ivan Smirnov
098f9aef73
Replace 4096B format buffer with std::string
2016-08-13 12:43:16 +01:00
Ivan Smirnov
b37985ee0c
Fix a comment and wrong indentation
2016-08-13 12:43:16 +01:00
Ivan Smirnov
41c3399021
Update npy_format_descriptor::name()
2016-08-13 12:43:16 +01:00
Ivan Smirnov
076b953ccd
Restore dtype equivalence sanity check
2016-08-13 12:43:16 +01:00
Ivan Smirnov
8f2f7cd61c
Various cleanup
2016-08-13 12:43:16 +01:00
Ivan Smirnov
8fa09cb871
Strip padding fields in dtypes, update the tests
2016-08-13 12:43:16 +01:00
Ivan Smirnov
13022f1b8c
Bugfix: pass struct size as itemsize to descriptor
...
Without this, partially bound structs will have incorrect itemsize.
2016-08-13 12:43:16 +01:00
Ivan Smirnov
eeb4c043f9
Change field descriptor offset type to size_t
2016-08-13 12:43:16 +01:00
Ivan Smirnov
511401599c
Use malloc insterad of calloc for numpy arrays
2016-08-13 12:43:16 +01:00
Ivan Smirnov
5412a05cf0
Rename PYBIND11_DTYPE to PYBIND11_NUMPY_DTYPE
2016-08-13 12:43:16 +01:00
Ivan Smirnov
872bd92575
Use proper type for an int literal
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
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
f5b166d042
Simplify npy_format_descriptor slightly
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
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
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
42ad328481
Change format_descriptor::value to a static func
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
Dean Moldovan
ed23dda93b
Adopt PEP 484 type hints for C++ types exported to Python
2016-08-04 23:47:07 +02:00
Wenzel Jakob
0a07805ab6
fixed many conversion warnings on clang
2016-05-29 13:40:40 +02:00
Wenzel Jakob
b47a9de035
ability to prevent force casts in numpy arguments
2016-05-19 16:02:09 +02:00
Johan Mabille
a63d93ba44
constructor fix
2016-05-11 15:03:16 +02:00
Johan Mabille
a580ed8c47
Compilation issue fixed
2016-05-11 14:45:01 +02:00
Wenzel Jakob
9e0a0568fe
transparent conversion of dense and sparse Eigen types
2016-05-05 21:44:29 +02:00
Wenzel Jakob
f1032df891
only do numpy contiguous C/Fortran array conversion when explicitly requested
2016-05-05 10:00:00 +02:00
Wenzel Jakob
876eeab4ca
redesigned format_descriptor<> and npy_format_descriptor<>
...
This somewhat heavyweight solution will avoid size_t/long long/long/int
mismatches on various platforms once and for all. The previous template
overloads could e.g. not handle size_t on Darwin.
One gotcha: the 'format_descriptor<T>::value()' syntax changed to just
'format_descriptor<T>::value'
2016-05-04 22:36:57 +02:00
Wenzel Jakob
8cb6cb33ef
minor cleanups in common.h; updated author info and copyright year
2016-04-18 10:53:38 +02:00
Wenzel Jakob
d6e4cef65f
minor formatting changes, removed missing header files referenced in setup.py
2016-02-20 12:17:17 +01:00
Johan Mabille
1dc960c37f
NumPy-style broadcasting support in pybind11::vectorize
2016-02-20 12:14:52 +01:00
Wenzel Jakob
48548ea4a5
general cleanup of the codebase
...
- new pybind11::base<> attribute to indicate a subclass relationship
- unified infrastructure for parsing variadic arguments in class_ and cpp_function
- use 'handle' and 'object' more consistently everywhere
2016-01-17 22:31:15 +01:00
Wenzel Jakob
e45b29047a
numpy.h: fixed a leak, added some comments to buffer_info
2016-01-17 22:31:15 +01:00
Wenzel Jakob
d33361a6d7
moved lifetime management of Py_buffer to pybind11::buffer_info, renamed count->size to match NumPy naming ( fixes #34 )
2016-01-17 22:31:15 +01:00
Wenzel Jakob
87187afe91
switch NumPy array to object API, avoid unnecessary copy operation in vectorize
2016-01-17 22:31:15 +01:00
Wenzel Jakob
87dfad6544
avoid naming clashes with numpy ( fixes #36 )
2016-01-17 22:31:15 +01:00
Wenzel Jakob
56e9f4942b
improved signature names for subclasses of pybind11::handle
2016-01-17 22:31:15 +01:00
Wenzel Jakob
4c1a6be4bd
minor cleanups in numpy.h, updated gitignore file for ninja
2016-01-17 22:31:15 +01:00
Tomasz Miąsko
875df5528d
Make handle and related classes const correct.
...
This gives handle classes a typical pointer semantics with respects to
constness.
2015-12-28 08:11:16 +01:00
Wenzel Jakob
d1a24823bc
considerable simplifications to the Python type casters
2015-12-16 12:17:46 +01:00
Jan Dohl
ab92eb3765
Fixed py:array constructor from failing for complex types
...
The array(const buffer_info &info) constructor fails when given
complex types since their format string is 'Zd' or 'Zf' which has
a length of two and causes an error here:
if (info.format.size() != 1)
throw std::runtime_error("Unsupported buffer format!");
Fixed by allowing format sizes of one and two.
2015-12-15 04:16:49 +01:00
Wenzel Jakob
b1b714023a
consistent macro naming throughout the project
2015-10-18 16:48:30 +02:00
Wenzel Jakob
8f4eb00690
last breaking change: be consistent about the project name
2015-10-15 18:23:56 +02:00