FazBrowse GitHub Viewer
|
Trending
|
URL:
|
Home
Tools:
[Download Repo ZIP]
[View Raw Code]
[Original HTTPS Page]
matplotlib/src/mplutils.h at main · spha-code/matplotlib · GitHub
spha-code
matplotlib
Repository navigation
Code
Pull requests
Actions
Projects
Security and quality
Insights
Expand file tree
Breadcrumbs
matplotlib
/
src
/
mplutils.h
Copy path
More file actions
More file actions
Latest commit
History
History
History
118 lines (103 loc) · 2.88 KB
Breadcrumbs
matplotlib
/
src
/
mplutils.h
Copy path
File metadata and controls
118 lines (103 loc) · 2.88 KB
Raw
Copy raw file
Download raw file
Open symbols panel
Edit and raw actions
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
/*
-*- mode: c++; c-basic-offset: 4 -*-
*/
/*
Small utilities that are shared by most extension modules.
*/
#
ifndef
MPLUTILS_H
#
define
MPLUTILS_H
#
define
PY_SSIZE_T_CLEAN
#
include
<
Python.h
>
#
ifdef
_POSIX_C_SOURCE
#
undef
_POSIX_C_SOURCE
#
endif
#
ifndef
_AIX
#
ifdef
_XOPEN_SOURCE
#
undef
_XOPEN_SOURCE
#
endif
#
endif
//
Prevent multiple conflicting definitions of swab from stdlib.h and unistd.h
#
if
defined(__sun) || defined(sun)
#
if
defined(_XPG4)
#
undef
_XPG4
#
endif
#
if
defined(_XPG3)
#
undef
_XPG3
#
endif
#
endif
inline
int
mpl_round_to_int
(
double
v)
{
return
(
int
)(v + ((v >=
0.0
) ?
0.5
: -
0.5
));
}
inline
double
mpl_round
(
double
v)
{
return
(
double
)
mpl_round_to_int
(v);
}
//
'kind' codes for paths.
enum
{
STOP
=
0
,
MOVETO
=
1
,
LINETO
=
2
,
CURVE3
=
3
,
CURVE4
=
4
,
CLOSEPOLY
=
0x4f
};
#
ifdef
__cplusplus
//
not for macosx.m
//
Check that array has shape (N, d1) or (N, d1, d2). We cast d1, d2 to longs
//
so that we don't need to access the NPY_INTP_FMT macro here.
#
include
<
pybind11/pybind11.h
>
#
include
<
pybind11/numpy.h
>
namespace
py
=
pybind11;
using
namespace
pybind11
::literals
;
template
<
typename
T>
inline
void
check_trailing_shape
(T array,
char
const
* name,
long
d1)
{
if
(array.
ndim
() !=
2
) {
throw
py::value_error
(
"
Expected 2-dimensional array, got %d
"
_s.
format
(array.
ndim
()));
}
if
(array.
size
() ==
0
) {
//
Sometimes things come through as atleast_2d, etc., but they're empty, so
//
don't bother enforcing the trailing shape.
return
;
}
if
(array.
shape
(
1
) != d1) {
throw
py::value_error
(
"
%s must have shape (N, %d), got (%d, %d)
"
_s.
format
(
name, d1, array.
shape
(
0
), array.
shape
(
1
)));
}
}
template
<
typename
T>
inline
void
check_trailing_shape
(T array,
char
const
* name,
long
d1,
long
d2)
{
if
(array.
ndim
() !=
3
) {
throw
py::value_error
(
"
Expected 3-dimensional array, got %d
"
_s.
format
(array.
ndim
()));
}
if
(array.
size
() ==
0
) {
//
Sometimes things come through as atleast_3d, etc., but they're empty, so
//
don't bother enforcing the trailing shape.
return
;
}
if
(array.
shape
(
1
) != d1 || array.
shape
(
2
) != d2) {
throw
py::value_error
(
"
%s must have shape (N, %d, %d), got (%d, %d, %d)
"
_s.
format
(
name, d1, d2, array.
shape
(
0
), array.
shape
(
1
), array.
shape
(
2
)));
}
}
/*
In most cases, code should use safe_first_shape(obj) instead of obj.shape(0), since
safe_first_shape(obj) == 0 when any dimension is 0.
*/
template
<
typename
T, py::
ssize_t
ND
>
py::
ssize_t
safe_first_shape
(
const
py::detail::unchecked_reference<T,
ND
> &a)
{
bool
empty = (
ND
==
0
);
for
(py::
ssize_t
i =
0
; i <
ND
; i++) {
if
(a.
shape
(i) ==
0
) {
empty =
true
;
}
}
if
(empty) {
return
0
;
}
else
{
return
a.
shape
(
0
);
}
}
#
endif
#
endif
Back
|
FazBrowse Home
|
New Git URL