diff --git a/src/builtins/transpose.c b/src/builtins/transpose.c index e1e04e81..c2613303 100644 --- a/src/builtins/transpose.c +++ b/src/builtins/transpose.c @@ -60,8 +60,7 @@ B transp_c1(B t, B x) { usz ia = IA(x); usz* xsh = SH(x); usz h = xsh[0]; - if (ia==0 || h==1) { - no_reorder:; + if (ia==0 || h==1 || h==ia /*w==1*/) { Arr* r = cpyWithShape(x); ShArr* sh = m_shArr(xr); shcpy(sh->a, xsh+1, xr-1); @@ -70,45 +69,57 @@ B transp_c1(B t, B x) { return taga(r); } usz w = xsh[1] * shProd(xsh, 2, xr); - if (w==1) goto no_reorder; Arr* r; usz xi = 0; u8 xe = TI(x,elType); bool toBit = false; - if (h==2) { - if (xe==el_B) { - B* xp = TO_BPTR(x); + if (xe==el_B) { + B xf = getFillR(x); + B* xp = TO_BPTR(x); + + HArr_p p = m_harrUp(ia); + if (h==2) { B* x0 = xp; B* x1 = x0+w; - HArr_p rp = m_harrUp(ia); - for (usz i=0; ia; - for (usz i=0; ia; + for (usz i=0; i