@@ -5,7 +5,7 @@ use test::{black_box, Bencher};
5
5
6
6
use std:: ops:: Range ;
7
7
8
- use numpy:: PyArray1 ;
8
+ use numpy:: { PyArray1 , PyArray2 , PyArray3 } ;
9
9
use pyo3:: { Python , ToPyObject } ;
10
10
11
11
struct Iter ( Range < usize > ) ;
@@ -134,6 +134,56 @@ fn from_object_slice_large(bencher: &mut Bencher) {
134
134
from_object_slice ( bencher, 2_usize . pow ( 15 ) ) ;
135
135
}
136
136
137
+ fn from_vec2 ( bencher : & mut Bencher , size : usize ) {
138
+ let vec2 = vec ! [ vec![ 0 ; size] ; size] ;
139
+
140
+ iter_with_gil ( bencher, |py| {
141
+ let vec2 = black_box ( & vec2) ;
142
+
143
+ PyArray2 :: from_vec2 ( py, vec2) . unwrap ( ) ;
144
+ } ) ;
145
+ }
146
+
147
+ #[ bench]
148
+ fn from_vec2_small ( bencher : & mut Bencher ) {
149
+ from_vec2 ( bencher, 2_usize . pow ( 3 ) ) ;
150
+ }
151
+
152
+ #[ bench]
153
+ fn from_vec2_medium ( bencher : & mut Bencher ) {
154
+ from_vec2 ( bencher, 2_usize . pow ( 5 ) ) ;
155
+ }
156
+
157
+ #[ bench]
158
+ fn from_vec2_large ( bencher : & mut Bencher ) {
159
+ from_vec2 ( bencher, 2_usize . pow ( 8 ) ) ;
160
+ }
161
+
162
+ fn from_vec3 ( bencher : & mut Bencher , size : usize ) {
163
+ let vec3 = vec ! [ vec![ vec![ 0 ; size] ; size] ; size] ;
164
+
165
+ iter_with_gil ( bencher, |py| {
166
+ let vec3 = black_box ( & vec3) ;
167
+
168
+ PyArray3 :: from_vec3 ( py, vec3) . unwrap ( ) ;
169
+ } ) ;
170
+ }
171
+
172
+ #[ bench]
173
+ fn from_vec3_small ( bencher : & mut Bencher ) {
174
+ from_vec3 ( bencher, 2_usize . pow ( 2 ) ) ;
175
+ }
176
+
177
+ #[ bench]
178
+ fn from_vec3_medium ( bencher : & mut Bencher ) {
179
+ from_vec3 ( bencher, 2_usize . pow ( 4 ) ) ;
180
+ }
181
+
182
+ #[ bench]
183
+ fn from_vec3_large ( bencher : & mut Bencher ) {
184
+ from_vec3 ( bencher, 2_usize . pow ( 5 ) ) ;
185
+ }
186
+
137
187
fn iter_with_gil ( bencher : & mut Bencher , mut f : impl FnMut ( Python ) ) {
138
188
Python :: with_gil ( |py| {
139
189
bencher. iter ( || {
0 commit comments