@@ -3070,7 +3070,7 @@ unittest
3070
3070
}
3071
3071
3072
3072
// / Transposed adjusted to ignore dim=0 and include universal
3073
- @fastmath private template adjTransposed(Dimensions... )
3073
+ private template adjTransposed (Dimensions... )
3074
3074
if (Dimensions.length)
3075
3075
{
3076
3076
import mir.ndslice.slice : Slice, SliceKind;
@@ -3081,17 +3081,25 @@ unittest
3081
3081
alias adjTransposed = .adjTransposed! (staticMap! (toSize_t, Dimensions));
3082
3082
else
3083
3083
// /
3084
- auto adjTransposed (SliceKind kind, size_t [] packs, Iterator)(Slice! (kind, packs, Iterator) slice)
3084
+ @fastmath auto adjTransposed(SliceKind kind, size_t [] packs, Iterator)(Slice! (kind, packs, Iterator) slice)
3085
3085
{
3086
3086
import mir.ndslice.topology : ipack;
3087
3087
import mir.ndslice.internal : DimensionsCountCTError, DimensionCTError;
3088
-
3088
+ import mir.internal.utility : Iota;
3089
+
3089
3090
mixin DimensionsCountCTError;
3090
-
3091
- static if (Dimensions.length == 1 && Dimensions[ 0 ] == 0 )
3091
+
3092
+ static if (Dimensions == Iota ! ( Dimensions.length) )
3092
3093
{
3093
3094
return slice;
3094
3095
}
3096
+ else static if (Dimensions[0 ] + 1 < packs[0 ] || packs.length > 1 )
3097
+ {
3098
+ import mir.ndslice.topology : canonical;
3099
+ import mir.ndslice.dynamic : transposed;
3100
+
3101
+ return slice.canonical.transposed! Dimensions;
3102
+ }
3095
3103
else
3096
3104
{
3097
3105
import mir.ndslice.topology : universal;
@@ -3103,7 +3111,7 @@ unittest
3103
3111
}
3104
3112
3105
3113
// /
3106
- @fastmath private auto adjTransposed(SliceKind kind, size_t [] packs, Iterator)
3114
+ private auto adjTransposed (SliceKind kind, size_t [] packs, Iterator)
3107
3115
(Slice! (kind, packs, Iterator) slice)
3108
3116
{
3109
3117
return slice.adjTransposed! 0 ;
@@ -3411,7 +3419,7 @@ unittest
3411
3419
}
3412
3420
3413
3421
// Ensure works on canonical packed slice
3414
- // @safe @nogc pure nothrow
3422
+ @safe @nogc pure nothrow
3415
3423
unittest
3416
3424
{
3417
3425
import mir.ndslice.topology : iota, universal, flattened, reshape;
@@ -3523,7 +3531,7 @@ template byDim(Dimensions...)
3523
3531
alias byDim = .byDim! (staticMap! (toSize_t, Dimensions));
3524
3532
else
3525
3533
// /
3526
- auto byDim (SliceKind kind, size_t [] packs, Iterator)
3534
+ @fastmath auto byDim(SliceKind kind, size_t [] packs, Iterator)
3527
3535
(Slice! (kind, packs, Iterator) slice)
3528
3536
{
3529
3537
import mir.ndslice.topology : ipack;
0 commit comments