fast highrank⊸⊏˘ table
This commit is contained in:
parent
7509d0c238
commit
81abc80863
@ -701,19 +701,24 @@ NOINLINE B for_cells_SA(B f, B w, B x, ur xcr, ur xr, u32 chr) { // w⊸F⎉xcr
|
|||||||
case n_rtack: dec(w); return x;
|
case n_rtack: dec(w); return x;
|
||||||
case n_ltack: return const_cells(x, xk, xsh, w, chr);
|
case n_ltack: return const_cells(x, xk, xsh, w, chr);
|
||||||
case n_select:
|
case n_select:
|
||||||
if (isArr(w) && RNK(w)==1 && xcr==1) { // TODO handle RNK(w)!=1
|
if (isArr(w) && xcr==1) {
|
||||||
if (!TI(w,arrD1)) {
|
if (!TI(w,arrD1)) {
|
||||||
w = num_squeezeChk(w);
|
w = num_squeezeChk(w);
|
||||||
if (!TI(w,arrD1)) break;
|
if (!TI(w,arrD1)) break;
|
||||||
}
|
}
|
||||||
assert(xr > 1);
|
assert(xr > 1);
|
||||||
ux wia = IA(w);
|
ur wr = RNK(w);
|
||||||
ShArr* rsh = m_shArr(xr);
|
if (wr == 0) {
|
||||||
|
usz ind = WRAP(o2i64(IGetU(w,0)), xsh[xk], break);
|
||||||
|
decG(w);
|
||||||
|
return select_cells(ind, x, cam, xk, false);
|
||||||
|
}
|
||||||
|
ur rr = xk+wr;
|
||||||
|
ShArr* rsh = m_shArr(rr);
|
||||||
shcpy(rsh->a, xsh, xk);
|
shcpy(rsh->a, xsh, xk);
|
||||||
rsh->a[xk] = wia;
|
shcpy(rsh->a+xk, SH(w), wr);
|
||||||
Arr* r = customizeShape(select_rows_B(x, shProd(xsh,xk,xr), cam, w));
|
Arr* r = customizeShape(select_rows_B(x, shProd(xsh,xk,xr), cam, w));
|
||||||
arr_shSetUG(r, xr, rsh);
|
return taga(arr_shSetUG(r, rr, rsh));
|
||||||
return taga(r);
|
|
||||||
}
|
}
|
||||||
if (isF64(w) && xcr>=1) {
|
if (isF64(w) && xcr>=1) {
|
||||||
usz l = xsh[xk];
|
usz l = xsh[xk];
|
||||||
|
|||||||
@ -903,7 +903,7 @@ B select_rows_direct(B x, ux csz, ux cam, void* inds, ux indn, u8 ie) { // ⥊ (
|
|||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
B select_rows_B(B x, ux csz, ux cam, B inds) { // consumes inds,x; ⥊ inds⊸⊏˘ cam‿csz⥊x
|
B select_rows_B(B x, ux csz, ux cam, B inds) { // consumes inds,x; ⥊ inds⊸⊏˘ cam‿csz⥊x; if inds isn't rank 1, result may or may not be high rank
|
||||||
assert(csz*cam == IA(x));
|
assert(csz*cam == IA(x));
|
||||||
if (csz==0) goto generic;
|
if (csz==0) goto generic;
|
||||||
if (cam<=1) {
|
if (cam<=1) {
|
||||||
|
|||||||
@ -97,11 +97,17 @@
|
|||||||
!"⊏: Indexing out-of-bounds (1000∊𝕨, 3≡≠𝕩)" % %USE evar ⋄ (3⥊1000) {𝕨⊸⊏˘𝕩}_evar 100‿3⥊1
|
!"⊏: Indexing out-of-bounds (1000∊𝕨, 3≡≠𝕩)" % %USE evar ⋄ (3⥊1000) {𝕨⊸⊏˘𝕩}_evar 100‿3⥊1
|
||||||
!"⊏: Indexing out-of-bounds (1000∊𝕨, 4≡≠𝕩)" % %USE evar ⋄ (4⥊1000) {𝕨⊸⊏˘𝕩}_evar 100‿4⥊1
|
!"⊏: Indexing out-of-bounds (1000∊𝕨, 4≡≠𝕩)" % %USE evar ⋄ (4⥊1000) {𝕨⊸⊏˘𝕩}_evar 100‿4⥊1
|
||||||
!"⊏: Indexing out-of-bounds (1000∊𝕨, 8≡≠𝕩)" % %USE evar ⋄ (8⥊1000) {𝕨⊸⊏˘𝕩}_evar 100‿8⥊1
|
!"⊏: Indexing out-of-bounds (1000∊𝕨, 8≡≠𝕩)" % %USE evar ⋄ (8⥊1000) {𝕨⊸⊏˘𝕩}_evar 100‿8⥊1
|
||||||
|
!"⊏: Indexing out-of-bounds (100∊𝕨, 8≡≠𝕩)" % %USE evar ⋄ (<100) {𝕨⊸⊏˘𝕩}_evar 100‿8⥊1
|
||||||
|
!"Integer out of range: 9e99" % %USE evar ⋄ (<9e99) {𝕨⊸⊏˘𝕩}_evar 100‿8⥊1
|
||||||
⟨1‿2⟩⊸⊏˘ 10‿8⥊↕100 %% (8×↕10) +⌜ 1‿2
|
⟨1‿2⟩⊸⊏˘ 10‿8⥊↕100 %% (8×↕10) +⌜ 1‿2
|
||||||
⟨1‿2⟩⊸⊏˘ 10‿4‿2⥊↕100 %% (8×↕10) +⌜ [2‿3,4‿5]
|
⟨1‿2⟩⊸⊏˘ 10‿4‿2⥊↕100 %% (8×↕10) +⌜ [2‿3,4‿5]
|
||||||
⟨1‿2,⟨1,0⟩⟩⊸⊏˘ 10‿4‿2⥊↕100 %% (8×↕10) +⌜ [3‿2,5‿4]
|
⟨1‿2,⟨1,0⟩⟩⊸⊏˘ 10‿4‿2⥊↕100 %% (8×↕10) +⌜ [3‿2,5‿4]
|
||||||
[2‿1,4‿5]⊸⊏˘ 10‿8⥊↕100 %% (8×↕10) +⌜ [2‿1,4‿5]
|
[2‿1,4‿5]⊸⊏˘ 10‿8⥊↕100 %% (8×↕10) +⌜ [2‿1,4‿5]
|
||||||
[1‿1,0‿1]⊸⊏˘ 10‿2‿2⥊↕100 %% (4×↕10) +⌜ 2‿2‿2⥊2‿3‿2‿3‿0‿1‿2‿3
|
[1‿1,0‿1]⊸⊏˘ 10‿2‿2⥊↕100 %% (4×↕10) +⌜ 2‿2‿2⥊2‿3‿2‿3‿0‿1‿2‿3
|
||||||
|
%USE eqvar ⋄ [2‿1‿3,4‿5‿7] {𝕨⊸⊏˘ 𝕩}_eqvar 10‿8⥊↕100 %% (8×↕10) +⌜ [2‿1‿3,4‿5‿7]
|
||||||
|
%USE eqvar ⋄ [2‿1‿3,4‿5‿7] {𝕨⊸⊏⎉1𝕩}_eqvar 3‿4‿8⥊↕100 %% (3‿4⥊8×↕12) +⌜ [2‿1‿3,4‿5‿7]
|
||||||
|
%USE eqvar ⋄ [2‿1‿3,4‿5‿7] {𝕨⊸⊏˘ 𝕩}_eqvar 1‿8⥊↕100 %% ≍[2‿1‿3,4‿5‿7]
|
||||||
|
%USE eqvar ⋄ (<2) {𝕨⊸⊏˘𝕩}_eqvar 10‿8⥊↕100 %% 2 + 8×↕10
|
||||||
|
|
||||||
≍⁼˘ 10‿1⥊↕10 %% ↕10
|
≍⁼˘ 10‿1⥊↕10 %% ↕10
|
||||||
≍⁼˘ 10‿1‿3⥊↕30 %% 10‿3⥊↕30
|
≍⁼˘ 10‿1‿3⥊↕30 %% 10‿3⥊↕30
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user