%DEF k _k ← {𝔽○‒internal.Keep} %DEF tcc %USE k β‹„ _tcc ← { ! ∧´ (<𝕨 𝔽_k˘⎊'e' 𝕩) ≑¨ (𝕨 π”½Λ˜βŽŠ'e'β€’internal.VariationβŸœπ•©)Β¨ "i"β€’internal.ListVariations 𝕩} 1β€Ώ2 1βŽ‰0 1 %% 1β€Ώ1 1 1βŽ‰0 1β€Ώ2 %% 1β€Ώ1 ! 20β€Ώ1200≑≒β₯ŠΛ˜a←20β€Ώ30β€Ώ40β₯Šβ†•24 β‹„ ! 20β€Ώ30β€Ώ40 ≑ β‰’a ! (2⊸-βŽ‰1 ≑ {2-𝕩}βŽ‰1) 10β€Ώ10β₯Šβ†•100 ! (-⟜2βŽ‰1 ≑ {𝕩-2}βŽ‰1) 10β€Ώ10β₯Šβ†•100 %USE k β‹„ n←1 β‹„ β‰ {π•Š: (β€’Repr a) ! (β‰‘βŽ‰n ≑ ≑_kβŽ‰n)Β΄ a←(⊏⟜(3β€Ώ2β€Ώ2β₯Š'a'+↕26))Β¨ <˘ 2β€Ώ2β€Ώ2β€Ώ2β€’rand.Range 3}Β¨ ↕1000 %USE k β‹„ n←2 β‹„ β‰ {π•Š: (β€’Repr a) ! (β‰‘βŽ‰n ≑ ≑_kβŽ‰n)Β΄ a←(⊏⟜(3β€Ώ2β€Ώ2β₯Š'a'+↕26))Β¨ <˘ 2β€Ώ2β€Ώ2β€Ώ2β€’rand.Range 3}Β¨ ↕1000 %USE k β‹„ n←3 β‹„ β‰ {π•Š: (β€’Repr a) ! (β‰‘βŽ‰n ≑ ≑_kβŽ‰n)Β΄ a←(⊏⟜(3β€Ώ2β€Ώ2β₯Š'a'+↕26))Β¨ <˘ 2β€Ώ2β€Ώ2β€Ώ2β€’rand.Range 3}Β¨ ↕1000 β‰ {π•Šk: ! (3βŠΈβ†‘βŽ‰k ≑ {3↑𝕩}βŽ‰k) 2β€Ώ2β€Ώ2β€Ώ2β₯Šβ†•16}Β¨ Β―2+↕10 β‰ {π•Šk: ! (1βŠΈβ†“βŽ‰k ≑ {1↓𝕩}βŽ‰k) 3β€Ώ3β€Ώ3β€Ώ3β₯Šβ†•81}Β¨ Β―2+↕10 !"˘: Result rank too large" % (0∾254β₯Š2)⊸β₯Šβˆ˜1˘ 0β€Ώ2β₯Š1 !"βŽ‰: Result rank too large" % (0∾254β₯Š2)⊸β₯Šβˆ˜1βŽ‰Β―1 0β€Ώ2β₯Š1 !"βŽ‰: Result rank too large" % (1β₯ŠΛœ 0∾204β₯Š2)βŽ‰50 1β₯ŠΛœ 0∾100β₯Š2 !"βŽ‰: Result rank too large (204 ≑ =𝕩, 200 ≑ =𝔽v)" % {π•Š:(200β₯Š1)β₯Š1}βŽ‰1 (205β₯Š1)β₯Š1 !"βŽ‰: Argument frames don't agree (⟨3⟩ ≑ ≒𝕨, ⟨2⟩ ≑ ≒𝕩, common frame of 1 axes)" % "abc" βŠ’βŽ‰0 "ab" !"˘: Argument frames don't agree (⟨3⟩ ≑ ≒𝕨, ⟨2⟩ ≑ ≒𝕩, common frame of 1 axes)" % "abc" ⊒˘ "ab" ! ∧´{π•Š: ! (βˆΎβ‰‘{π•¨βˆΎπ•©}Β΄) (<β€’rand.Rangeβˆ˜β‰ βŠΈβŠ‘ ⟨"ab",1β€Ώ2,⟨⟩,↕0,""⟩) ∾˜ (4β€’rand.Rangeβ‰ )⊸⊏ ⟨1, {⇐}, 'a', <'a', <{⇐}, "ab", ↕0, ""⟩}¨↕10000 # error cases that could be affected by special code !"∧: Argument cannot have rank 0" % βˆ§Λ˜β†•2 !"∨: Argument cannot have rank 0" % ∨˘"a" !"Expected non-negative integer, got Β―3" % 2β€ΏΒ―3/βŽ‰1 6β€Ώ2β₯Š0 !"/: Lengths of components of 𝕨 must match 𝕩 (3 β‰  4)" % 1β€Ώ2β€Ώ3⊸/Λ˜β‰4β€Ώ5β€Ώ6β€Ώ7 !"/: Simple 𝕨 must have rank 0 or 1 (2≑=𝕨)" % (2β€Ώ3β€Ώ1β₯Šβ†•4) /˘ ↕2 !"𝕨/𝕩: Length of compound 𝕨 must be at most rank of 𝕩" % (<↕0)/Λ˜β—‹(5⊸β₯Š)<"ab" !"⊏: Indexing out-of-bounds (24βˆŠπ•¨, 4≑≠𝕩)" % 1β€Ώ24βŠβŽ‰1↕4β€Ώ4 !"⊏: Indexing out-of-bounds (4βˆŠπ•¨, 4≑≠𝕩)" % βŠβŽ‰1˜6β€Ώ4β₯Šβ†•24 !"π•¨βŠπ•©: 𝕨 must be an array of numbers or list of such arrays" % 0β€Ώ@β€ΏΒ―1βŠβŽ‰1 5β€Ώ2β₯Š0.5 !"Expected integer, got Β―5.25" % Β―5.25βŠΛ˜βˆ˜β€Ώ4β₯Šβ†•24 !"⊏: Indexing out-of-bounds (1βˆŠπ•¨, 1≑≠𝕩)" % 0β€Ώ0β€Ώ1 βŠΛ˜β—‹(β‰Λ˜) 10000×↕3 !"⊏: 𝕩 cannot be a unit" % 0⊏˘5β₯Š<"a" !"⊏: 𝕩 cannot be a unit" % (3β€Ώ0β₯ŠβŸ¨βŸ©)βŠΛ˜β†•3 !"Expected integer, got 0.1" % 0.1βŠ‘Λ˜3β€Ώ5β₯Šβ†•15 !"βŠ‘: 𝕩 must be a list when 𝕨 is a number (3β€Ώ4 ≑ ≒𝕩)" % 5βŠ‘Λ˜β†•2β€Ώ3β€Ώ4 !">: Result rank too large (80 ≑ =𝕩, 205 ≑ =βŠ‘π•©)" % >βŽ‰80 (200β₯Š1)β₯Š<(205β₯Š1)β₯Š1 !"βŽ‰: Result rank too large (195 ≑ =𝕩, 210 ≑ =𝔽v)" % >βŽ‰5 (200β₯Š1)β₯Š<(205β₯Š1)β₯Š1 !"∾: Lengths not matchable (⟨6⟩ ≑ ≒𝕨, 1β€Ώ1 ≑ ≒𝕩)" % ("abc"∾"def")βˆΎΛ˜β—‹(3/≍)≍"a" !"∾: Argument ranks must differ by 1 or less (0≑=𝕨, 2≑=𝕩)" % 1βˆΎΛ˜β†•3β€Ώ3β€Ώ3 !"∾: Lengths not matchable (4β€Ώ2 ≑ ≒𝕨, 3β€Ώ3 ≑ ≒𝕩)" % (3β€Ώ4β€Ώ2β₯Š4)∾˘3β€Ώ3β€Ώ3β₯Š5 !"≍: 𝕨 and 𝕩 must have equal shapes (3β€Ώ4 ≑ ≒𝕨, 3β€Ώ3 ≑ ≒𝕩)" % (↕3β€Ώ4)β‰βŽ‰2 2β€Ώ3β€Ώ3β₯Šβ†•18 !"≍: Result rank too large (255≑=𝕩)" % β‰βŽ‰βˆž 0β₯ŠΛœ255β₯Š1 !"shift: Lengths not matchable (⟨6⟩ ≑ ≒𝕨, 1β€Ώ1 ≑ ≒𝕩)" % ("abc"∾"def")Β«Λ˜β—‹(3/≍)≍"a" !"shift: =𝕨 must be =𝕩 or Β―1+=𝕩 (0≑=𝕨, 2≑=𝕩)" % 1Β«Λ˜β†•2β€Ώ2β€Ώ2 !"Β»: Argument cannot be a scalar" % Β»βŽ‰0 2β€Ώ3β€Ώ1β₯Šβ†•6 !"⌽: Argument cannot be a unit" % βŒ½Λ˜β†•10 !"Expected integer, got 1.5" % 1.5β†‘Λ˜β†•2β€Ώ3β€Ώ2 !"↑: 𝕨 must have rank at most 1 (1β€Ώ2 ≑ ≒𝕨)" % (≍1β€Ώ2)βŠΈβ†‘Λ˜β†•2β€Ώ3β€Ώ2 !"↓: 𝕨 must have rank at most 1 (4β€Ώ2 ≑ ≒𝕨)" % (4β€Ώ2β₯Šβ†•8)β†“Λ˜β—‹β‰@ !"Integer out of range: 1e20" % 1e20⌽˘3β€Ώ10β₯Š10 !"Expected number" % 3β€Ώ4β€Ώ@βŒ½Λ˜β†•3β€Ώ4 !"Expected integer, got 0.5" % 0.5⊸⌽˘4β€Ώ3β₯Šβ†•12 !"↑: Argument must have rank at least 1" % β†‘Λ˜β†•2 !"↓: Argument must have rank at least 1" % β†“βŽ‰0 2β€Ώ1β₯Š0 !"⊐: 𝕩 cannot have rank 0" % ⊐˘"abcd" !"βŠ’: Argument cannot have rank 0" % βŠ’Λ˜"abcd" !"∊: Argument cannot have rank 0" % ∊˘"abcd" !"⍋: 𝕨 must be sorted" % 0β€Ώ2β€Ώ1βŠΈβ‹Λ˜ 3β€Ώ4β₯Šβ†•12 !"`: Shape of 𝕨 must match the cell of 𝕩 (⟨2⟩ ≑ ≒𝕨, 2β€Ώ3 ≑ ≒𝕩)" % (2β€Ώ2β₯Š1)+`˘2β€Ώ2β€Ώ3β₯Š0.4 !"`: Shape of 𝕨 must match the cell of 𝕩 (⟨⟩ ≑ ≒𝕨, 3β€Ώ3 ≑ ≒𝕩)" % 2+`Λ˜β†•3β€Ώ3β€Ώ3 !"Β΄: Argument must be a list (3β€Ώ3 ≑ ≒𝕩)" % +´˘2β€Ώ3β€Ώ3β₯Šβ†•18 !"Β΄: 𝕩 must be a list (3β€Ώ3 ≑ ≒𝕩)" % 1+´˘2β€Ώ3β€Ώ3β₯Šβ†•18 !"˝: 𝕩 must have rank at least 1" % +˝˘˘10β€Ώ10β₯Šβ†•100 %USE tcc β‹„ ⟨2, 20, Β―2, Β―20, 0⟩ {𝕨 ↑_tcc 𝕩 β‹„ 𝕨 ↓_tcc 𝕩}⌜ ⟨<4, ↕5, 4β€Ώ5β₯Šβ†•20, 4β€Ώ5β€Ώ6β₯Šβ†•120⟩ %USE tcc β‹„ ⟨<, ≍, ⊏, β₯ŠβŸ© {π•Ž _tcc 𝕩}⌜ ⟨<4, ↕5, 4β€Ώ5β₯Šβ†•20, 4β€Ώ5β€Ώ6β₯Šβ†•120, 2β€Ώ3β€Ώ4β€Ώ5β₯Šβ†•120⟩ %USE tcc β‹„ ⟨<, ≍, β₯ŠβŸ© {π•Ž _tcc 𝕩}⌜ ⟨<4, ↕5, 4β€Ώ5β₯Šβ†•20, 4β€Ώ5β€Ώ6β₯Šβ†•120, 2β€Ώ3β€Ώ4β€Ώ5β₯Šβ†•120⟩ %USE tcc β‹„ ⟨⊏⟩ {π•Ž _tcc 𝕩}⌜ ⟨4β€Ώ5β₯Šβ†•20, 4β€Ώ5β€Ώ6β₯Šβ†•120, 2β€Ώ3β€Ώ4β€Ώ5β₯Šβ†•120⟩ %USE tcc β‹„ ⊏_tcc 4β€Ώ2β₯Šβ†•8 β‹„ 1⊏_tcc 4β€Ώ2β₯Šβ†•8 β‹„ ⊏_tcc ↕4β€Ώ2 β‹„ 1⊏_tcc ↕4β€Ώ2 %USE tcc β‹„ βŠ‘_tcc 4β€Ώ2β₯Šβ†•8 β‹„ 1βŠ‘_tcc 4β€Ώ2β₯Šβ†•8 β‹„ βŠ‘_tcc ↕4β€Ώ2 β‹„ 1βŠ‘_tcc ↕4β€Ώ2 ( %USE IS_HEAPVERIFY # big ˝˘ & `˘ tester _basicArgs ← { Test _𝕣 ranks: {π•Šf: {{f Test 0β€Ώ1β₯ŠΛœ π•©βŠ0β€Ώ2β€Ώ4β€Ώ8β€Ώ32}Β¨ ↕𝕩β₯Š3 β‹„ 1}Β¨ ranks}Β¨ +β€Ώβˆ§β€Ώβˆ¨β€Ώ=β€Ώβ‰ β€ΏβŠ£β€ΏβŠ’ } # TODO replace β—‹βŠ’ with some pureness-preserving β€’internal.Keep # w F _thing x tests F _thingβŽ‰w x _testFoldCells ← {βˆ¨Β΄π•—=βŠ’β€ΏβŠ£? 0=Γ—Β΄(-𝕨)↑≒𝕩? 1; heapverify? 0=β‰ β₯Šπ•©? 1 ⊣ π”½ΛβŽ‰π•¨ 𝕩; ! (π”½ΛβŽ‰π•¨ ≑ π”½Λβ—‹βŠ’βŽ‰π•¨) 𝕩} _testScanCells ← { heapverify? 0=β‰ β₯Šπ•©? 1 ⊣ 𝔽`βŽ‰π•¨ 𝕩; ! (𝔽`βŽ‰π•¨ ≑ 𝔽`β—‹βŠ’βŽ‰π•¨) 𝕩} {1 𝕨 _testFoldCells 𝕩} _basicArgs 2β€Ώ3β€Ώ4 {1 𝕨 _testScanCells 𝕩} _basicArgs 2β€Ώ3β€Ώ4 {2 𝕨 _testScanCells 𝕩} _basicArgs 3β€Ώ4 {2 𝕨 _testScanCells 𝕩} _basicArgs 3β€Ώ4 ⟨0, 0β€Ώ1, 1β€Ώ0, 2β€Ώ2, 1, 10, 10β€Ώ1, 1β€Ώ10, 30⟩ { 𝕨‿𝕩 β₯ŠΒ¨β†© sh ← π•¨βˆΎπ•© cr ← ≠𝕩 +β€Ώβˆ§β€Ώβˆ¨β€Ώ=β€Ώβ‰ β€ΏβŠ£β€ΏβŠ’ { cr π•Ž _testFoldCells 𝕩 cr π•Ž _testScanCells 𝕩 }⌜ {0=Γ—Β΄sh? 𝕩; βˆΎβŸ¨π•©, Β¬βŒΎβŠ‘Β¨ 𝕩, ¬⌾(Β―1βŠ‘β₯Š)Β¨ π•©βŸ©} sh⊸β₯ŠΒ¨ 0β€Ώ1 }⌜ ⟨0, 1, 2, 8, 32, 8β€Ώ1, 4β€Ώ8, 4β€Ώ2, 59, 60, 63, 80, 81, 200, 640, 641⟩ )