2
2
3
3
use crate :: { errors:: InputError , quantities:: ThermodynamicQuantity } ;
4
4
#[ cfg( feature = "array" ) ]
5
- use ndarray:: { Array , Dimension , FoldWhile , Zip } ;
5
+ use ndarray:: { Array , ArrayView , Dimension , FoldWhile , Zip } ;
6
6
#[ cfg( feature = "parallel" ) ]
7
7
use rayon:: iter:: { IndexedParallelIterator , IntoParallelIterator , ParallelIterator } ;
8
8
@@ -62,7 +62,14 @@ pub trait Formula1<O: ThermodynamicQuantity, I1: ThermodynamicQuantity> {
62
62
#[ cfg( feature = "array" ) ]
63
63
#[ allow( missing_docs) ]
64
64
#[ allow( clippy:: missing_errors_doc) ]
65
- fn compute_ndarray < D : Dimension > ( i1 : & Array < I1 , D > ) -> Result < Array < O , D > , InputError > {
65
+ fn compute_ndarray < ' a , D : Dimension + Copy , A : Into < ArrayView < ' a , I1 , D > > > (
66
+ i1 : A ,
67
+ ) -> Result < Array < O , D > , InputError >
68
+ where
69
+ I1 : ' a ,
70
+ {
71
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
72
+
66
73
Zip :: from ( i1)
67
74
. fold_while ( Ok ( ( ) ) , |_, & i1| match Self :: validate_inputs ( i1) {
68
75
Ok ( _) => FoldWhile :: Continue ( Ok ( ( ) ) ) ,
@@ -83,9 +90,14 @@ pub trait Formula1<O: ThermodynamicQuantity, I1: ThermodynamicQuantity> {
83
90
#[ cfg( feature = "parallel" ) ]
84
91
#[ allow( missing_docs) ]
85
92
#[ allow( clippy:: missing_errors_doc) ]
86
- fn compute_ndarray_parallel < D : Dimension > (
87
- i1 : & Array < I1 , D > ,
88
- ) -> Result < Array < O , D > , InputError > {
93
+ fn compute_ndarray_parallel < ' a , D : Dimension + Copy , A : Into < ArrayView < ' a , I1 , D > > > (
94
+ i1 : A ,
95
+ ) -> Result < Array < O , D > , InputError >
96
+ where
97
+ I1 : ' a ,
98
+ {
99
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
100
+
89
101
Zip :: from ( i1)
90
102
. fold_while ( Ok ( ( ) ) , |_, & a| match Self :: validate_inputs ( a) {
91
103
Ok ( _) => FoldWhile :: Continue ( Ok ( ( ) ) ) ,
@@ -157,10 +169,22 @@ pub trait Formula2<O: ThermodynamicQuantity, I1: ThermodynamicQuantity, I2: Ther
157
169
#[ cfg( feature = "array" ) ]
158
170
#[ allow( missing_docs) ]
159
171
#[ allow( clippy:: missing_errors_doc) ]
160
- fn compute_ndarray < D : Dimension > (
161
- i1 : & Array < I1 , D > ,
162
- i2 : & Array < I2 , D > ,
163
- ) -> Result < Array < O , D > , InputError > {
172
+ fn compute_ndarray <
173
+ ' a ,
174
+ D : Dimension + Copy ,
175
+ A1 : Into < ArrayView < ' a , I1 , D > > ,
176
+ A2 : Into < ArrayView < ' a , I2 , D > > ,
177
+ > (
178
+ i1 : A1 ,
179
+ i2 : A2 ,
180
+ ) -> Result < Array < O , D > , InputError >
181
+ where
182
+ I1 : ' a ,
183
+ I2 : ' a ,
184
+ {
185
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
186
+ let i2: ArrayView < I2 , D > = i2. into ( ) ;
187
+
164
188
Zip :: from ( i1)
165
189
. and ( i2)
166
190
. fold_while ( Ok ( ( ) ) , |_, & i1, & i2| match Self :: validate_inputs ( i1, i2) {
@@ -187,10 +211,22 @@ pub trait Formula2<O: ThermodynamicQuantity, I1: ThermodynamicQuantity, I2: Ther
187
211
#[ cfg( feature = "parallel" ) ]
188
212
#[ allow( missing_docs) ]
189
213
#[ allow( clippy:: missing_errors_doc) ]
190
- fn compute_ndarray_parallel < D : Dimension > (
191
- i1 : & Array < I1 , D > ,
192
- i2 : & Array < I2 , D > ,
193
- ) -> Result < Array < O , D > , InputError > {
214
+ fn compute_ndarray_parallel <
215
+ ' a ,
216
+ D : Dimension + Copy ,
217
+ A1 : Into < ArrayView < ' a , I1 , D > > ,
218
+ A2 : Into < ArrayView < ' a , I2 , D > > ,
219
+ > (
220
+ i1 : A1 ,
221
+ i2 : A2 ,
222
+ ) -> Result < Array < O , D > , InputError >
223
+ where
224
+ I1 : ' a ,
225
+ I2 : ' a ,
226
+ {
227
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
228
+ let i2: ArrayView < I2 , D > = i2. into ( ) ;
229
+
194
230
Zip :: from ( i1)
195
231
. and ( i2)
196
232
. fold_while ( Ok ( ( ) ) , |_, & i1, & i2| match Self :: validate_inputs ( i1, i2) {
@@ -273,11 +309,26 @@ pub trait Formula3<
273
309
#[ cfg( feature = "array" ) ]
274
310
#[ allow( missing_docs) ]
275
311
#[ allow( clippy:: missing_errors_doc) ]
276
- fn compute_ndarray < D : Dimension > (
277
- i1 : & Array < I1 , D > ,
278
- i2 : & Array < I2 , D > ,
279
- i3 : & Array < I3 , D > ,
280
- ) -> Result < Array < O , D > , InputError > {
312
+ fn compute_ndarray <
313
+ ' a ,
314
+ D : Dimension + Copy ,
315
+ A1 : Into < ArrayView < ' a , I1 , D > > ,
316
+ A2 : Into < ArrayView < ' a , I2 , D > > ,
317
+ A3 : Into < ArrayView < ' a , I3 , D > > ,
318
+ > (
319
+ i1 : A1 ,
320
+ i2 : A2 ,
321
+ i3 : A3 ,
322
+ ) -> Result < Array < O , D > , InputError >
323
+ where
324
+ I1 : ' a ,
325
+ I2 : ' a ,
326
+ I3 : ' a ,
327
+ {
328
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
329
+ let i2: ArrayView < I2 , D > = i2. into ( ) ;
330
+ let i3: ArrayView < I3 , D > = i3. into ( ) ;
331
+
281
332
Zip :: from ( i1)
282
333
. and ( i2)
283
334
. and ( i3)
@@ -309,11 +360,26 @@ pub trait Formula3<
309
360
#[ cfg( feature = "parallel" ) ]
310
361
#[ allow( missing_docs) ]
311
362
#[ allow( clippy:: missing_errors_doc) ]
312
- fn compute_ndarray_parallel < D : Dimension > (
313
- i1 : & Array < I1 , D > ,
314
- i2 : & Array < I2 , D > ,
315
- i3 : & Array < I3 , D > ,
316
- ) -> Result < Array < O , D > , InputError > {
363
+ fn compute_ndarray_parallel <
364
+ ' a ,
365
+ D : Dimension + Copy ,
366
+ A1 : Into < ArrayView < ' a , I1 , D > > ,
367
+ A2 : Into < ArrayView < ' a , I2 , D > > ,
368
+ A3 : Into < ArrayView < ' a , I3 , D > > ,
369
+ > (
370
+ i1 : A1 ,
371
+ i2 : A2 ,
372
+ i3 : A3 ,
373
+ ) -> Result < Array < O , D > , InputError >
374
+ where
375
+ I1 : ' a ,
376
+ I2 : ' a ,
377
+ I3 : ' a ,
378
+ {
379
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
380
+ let i2: ArrayView < I2 , D > = i2. into ( ) ;
381
+ let i3: ArrayView < I3 , D > = i3. into ( ) ;
382
+
317
383
Zip :: from ( i1)
318
384
. and ( i2)
319
385
. and ( i3)
@@ -403,12 +469,30 @@ pub trait Formula4<
403
469
#[ cfg( feature = "array" ) ]
404
470
#[ allow( missing_docs) ]
405
471
#[ allow( clippy:: missing_errors_doc) ]
406
- fn compute_ndarray < D : Dimension > (
407
- i1 : & Array < I1 , D > ,
408
- i2 : & Array < I2 , D > ,
409
- i3 : & Array < I3 , D > ,
410
- i4 : & Array < I4 , D > ,
411
- ) -> Result < Array < O , D > , InputError > {
472
+ fn compute_ndarray <
473
+ ' a ,
474
+ D : Dimension + Copy ,
475
+ A1 : Into < ArrayView < ' a , I1 , D > > ,
476
+ A2 : Into < ArrayView < ' a , I2 , D > > ,
477
+ A3 : Into < ArrayView < ' a , I3 , D > > ,
478
+ A4 : Into < ArrayView < ' a , I4 , D > > ,
479
+ > (
480
+ i1 : A1 ,
481
+ i2 : A2 ,
482
+ i3 : A3 ,
483
+ i4 : A4 ,
484
+ ) -> Result < Array < O , D > , InputError >
485
+ where
486
+ I1 : ' a ,
487
+ I2 : ' a ,
488
+ I3 : ' a ,
489
+ I4 : ' a ,
490
+ {
491
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
492
+ let i2: ArrayView < I2 , D > = i2. into ( ) ;
493
+ let i3: ArrayView < I3 , D > = i3. into ( ) ;
494
+ let i4: ArrayView < I4 , D > = i4. into ( ) ;
495
+
412
496
Zip :: from ( i1)
413
497
. and ( i2)
414
498
. and ( i3)
@@ -449,12 +533,30 @@ pub trait Formula4<
449
533
#[ cfg( feature = "parallel" ) ]
450
534
#[ allow( missing_docs) ]
451
535
#[ allow( clippy:: missing_errors_doc) ]
452
- fn compute_ndarray_parallel < D : Dimension > (
453
- i1 : & Array < I1 , D > ,
454
- i2 : & Array < I2 , D > ,
455
- i3 : & Array < I3 , D > ,
456
- i4 : & Array < I4 , D > ,
457
- ) -> Result < Array < O , D > , InputError > {
536
+ fn compute_ndarray_parallel <
537
+ ' a ,
538
+ D : Dimension + Copy ,
539
+ A1 : Into < ArrayView < ' a , I1 , D > > ,
540
+ A2 : Into < ArrayView < ' a , I2 , D > > ,
541
+ A3 : Into < ArrayView < ' a , I3 , D > > ,
542
+ A4 : Into < ArrayView < ' a , I4 , D > > ,
543
+ > (
544
+ i1 : A1 ,
545
+ i2 : A2 ,
546
+ i3 : A3 ,
547
+ i4 : A4 ,
548
+ ) -> Result < Array < O , D > , InputError >
549
+ where
550
+ I1 : ' a ,
551
+ I2 : ' a ,
552
+ I3 : ' a ,
553
+ I4 : ' a ,
554
+ {
555
+ let i1: ArrayView < I1 , D > = i1. into ( ) ;
556
+ let i2: ArrayView < I2 , D > = i2. into ( ) ;
557
+ let i3: ArrayView < I3 , D > = i3. into ( ) ;
558
+ let i4: ArrayView < I4 , D > = i4. into ( ) ;
559
+
458
560
Zip :: from ( i1)
459
561
. and ( i2)
460
562
. and ( i3)
0 commit comments