]> gitweb.factorcode.org Git - factor.git/commitdiff
tensors.tensor-slice: move step-slice to sequences.extras
authorJohn Benediktsson <mrjbq7@gmail.com>
Sun, 30 Jan 2022 21:25:12 +0000 (13:25 -0800)
committerJohn Benediktsson <mrjbq7@gmail.com>
Sun, 30 Jan 2022 21:25:31 +0000 (13:25 -0800)
extra/sequences/extras/extras-tests.factor
extra/sequences/extras/extras.factor
extra/tensors/tensor-slice/tensor-slice-tests.factor [deleted file]
extra/tensors/tensor-slice/tensor-slice.factor [deleted file]

index edad8b5a4d13af723874780a4b7f2aa5d829ebf8..b86e2739e32e5191535266ad766da7d07b001795 100644 (file)
@@ -276,3 +276,13 @@ tools.test vectors vocabs ;
 { -2 } [ { -3 -2 } max-subarray-sum ] unit-test
 { 7 } [ { 1 2 3 -4 5 } max-subarray-sum ] unit-test
 { 6 } [ { 1 2 3 -4 1 1 } max-subarray-sum ] unit-test
+
+{ { 9 7 5 } } [ -1 -6 -2 10 <iota> <step-slice> >array ] unit-test
+{ { 9 7 } } [ -1 -5 -2 10 <iota> <step-slice> >array ] unit-test
+{ { 9 7 } } [ -1 -4 -2 10 <iota> <step-slice> >array ] unit-test
+{ { 9 } } [ -1 -3 -2 10 <iota> <step-slice> >array ] unit-test
+{ { } } [ -4 10 -2 10 <iota> <step-slice> >array ] unit-test
+{ { 6 8 } } [ -4 15 2 10 <iota> <step-slice> >array ] unit-test
+{ { 1 3 } } [ 1 4 2 10 <iota> <step-slice> >array ] unit-test
+{ { 1 3 } } [ 1 5 2 10 <iota> <step-slice> >array ] unit-test
+{ { 1 3 5 } } [ 1 6 2 10 <iota> <step-slice> >array ] unit-test
index 27d3b82653ef1f233bffc161b82a3fb07d79a284..6a3fbc449b39a857ff87a05f9b1522ec954d852f 100644 (file)
@@ -12,8 +12,7 @@ IN: sequences.extras
 :: subseq* ( from to seq -- subseq )
     seq length :> len
     from [ dup 0 < [ len + ] when ] [ 0 ] if*
-    to [ dup 0 < [ len + ] when ] [ len ] if*
-    [ 0 len clamp ] bi@ dupd max seq subseq ;
+    to [ dup 0 < [ len + ] when ] [ len ] if* [ 0 len clamp ] bi@ dupd max seq subseq ;
 
 : safe-subseq ( from to seq -- subseq )
     [ length '[ 0 _ clamp ] bi@ ] keep subseq ;
@@ -669,3 +668,36 @@ PRIVATE>
 : max-subarray-sum ( seq -- sum )
     [ -1/0. 0 ] dip
     [ [ + ] keep max [ max ] keep ] each drop ;
+
+TUPLE: step-slice
+    { from integer read-only initial: 0 }
+    { to integer read-only initial: 0 }
+    { seq read-only }
+    { step integer read-only } ;
+
+:: <step-slice> ( from to step seq -- step-slice )
+    step zero? [ "can't be zero" throw ] when
+    seq length :> len
+    step 0 > [
+        from [ 0 ] unless*
+        to [ len ] unless*
+    ] [
+        from [ len ] unless*
+        to [ 0 ] unless*
+    ] if
+    [ dup 0 < [ len + ] when 0 len clamp ] bi@
+    ! FIXME: make this work with steps
+    seq dup slice? [ collapse-slice ] when
+    step step-slice boa ;
+
+M: step-slice virtual-exemplar seq>> ; inline
+
+M: step-slice virtual@
+    [ step>> * ] [ from>> + ] [ seq>> ] tri ; inline
+
+M: step-slice length
+    [ to>> ] [ from>> - ] [ step>> ] tri
+    dup 0 < [ [ neg 0 max ] dip neg ] when /mod
+    zero? [ 1 + ] unless ; inline
+
+INSTANCE: step-slice virtual-sequence
diff --git a/extra/tensors/tensor-slice/tensor-slice-tests.factor b/extra/tensors/tensor-slice/tensor-slice-tests.factor
deleted file mode 100644 (file)
index a2bdb87..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-USING: arrays sequences tensors.tensor-slice tools.test ;
-IN: tensors.tensor-slice.tests
-
-{ { 9 7 5 } } [ -1 -6 -2 10 <iota> <step-slice> >array ] unit-test
-{ { 9 7 } } [ -1 -5 -2 10 <iota> <step-slice> >array ] unit-test
-{ { 9 7 } } [ -1 -4 -2 10 <iota> <step-slice> >array ] unit-test
-{ { 9 } } [ -1 -3 -2 10 <iota> <step-slice> >array ] unit-test
-{ { } } [ -4 10 -2 10 <iota> <step-slice> >array ] unit-test
-{ { 6 8 } } [ -4 15 2 10 <iota> <step-slice> >array ] unit-test
-{ { 1 3 } } [ 1 4 2 10 <iota> <step-slice> >array ] unit-test
-{ { 1 3 } } [ 1 5 2 10 <iota> <step-slice> >array ] unit-test
-{ { 1 3 5 } } [ 1 6 2 10 <iota> <step-slice> >array ] unit-test
\ No newline at end of file
diff --git a/extra/tensors/tensor-slice/tensor-slice.factor b/extra/tensors/tensor-slice/tensor-slice.factor
deleted file mode 100644 (file)
index a4f8ec5..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-USING: accessors kernel math math.order sequences ;
-IN: tensors.tensor-slice
-
-TUPLE: step-slice
-    { from integer read-only initial: 0 }
-    { to integer read-only initial: 0 }
-    { seq read-only }
-    { step integer read-only } ;
-
-:: <step-slice> ( from to step seq -- step-slice )
-    step zero? [ "can't be zero" throw ] when
-    seq length :> len
-    step 0 > [
-        from [ 0 ] unless*
-        to [ len ] unless*
-    ] [
-        from [ len ] unless*
-        to [ 0 ] unless*
-    ] if
-    [ dup 0 < [ len + ] when 0 len clamp ] bi@
-    ! FIXME: make this work with steps
-    seq dup slice? [ collapse-slice ] when
-    step step-slice boa ;
-
-M: step-slice virtual-exemplar seq>> ; inline
-
-M: step-slice virtual@
-    [ step>> * ] [ from>> + ] [ seq>> ] tri ; inline
-
-M: step-slice length
-    [ to>> ] [ from>> - ] [ step>> ] tri
-    dup 0 < [ [ neg 0 max ] dip neg ] when /mod
-    zero? [ 1 + ] unless ; inline
-
-INSTANCE: step-slice virtual-sequence