eliminate spin from basis

db4
Joe Groff 2009-11-05 14:05:06 -06:00
parent 02f209b30a
commit fa6d7b7069
10 changed files with 39 additions and 39 deletions

View File

@ -1,7 +1,7 @@
! Copyright (C) 2009 Marc Fauconneau. ! Copyright (C) 2009 Marc Fauconneau.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: accessors arrays byte-arrays combinators USING: accessors arrays byte-arrays combinators
grouping compression.huffman images grouping compression.huffman images fry
images.processing io io.binary io.encodings.binary io.files images.processing io io.binary io.encodings.binary io.files
io.streams.byte-array kernel locals math math.bitwise io.streams.byte-array kernel locals math math.bitwise
math.constants math.functions math.matrices math.order math.constants math.functions math.matrices math.order
@ -232,7 +232,7 @@ MEMO: dct-matrix-blas ( -- m ) dct-matrix >float-blas-matrix ;
block dup length>> sqrt >fixnum group flip block dup length>> sqrt >fixnum group flip
dup matrix-dim coord-matrix flip dup matrix-dim coord-matrix flip
[ [
[ first2 spin nth nth ] [ '[ _ [ second ] [ first ] bi ] dip nth nth ]
[ x,y v+ color-id jpeg-image draw-color ] bi [ x,y v+ color-id jpeg-image draw-color ] bi
] with each^2 ; ] with each^2 ;

View File

@ -50,16 +50,17 @@ M: winnt add-completion ( win32-handle -- )
} cond } cond
] with-timeout ; ] with-timeout ;
:: wait-for-overlapped ( us -- bytes-transferred overlapped error? ) :: wait-for-overlapped ( usec -- bytes-transferred overlapped error? )
master-completion-port get-global master-completion-port get-global
0 <int> [ ! bytes 0 <int> :> bytes
f <void*> ! key f <void*> :> key
f <void*> [ ! overlapped f <void*> :> overlapped
us [ 1000 /i ] [ INFINITE ] if* ! timeout usec [ 1000 /i ] [ INFINITE ] if* :> timeout
GetQueuedCompletionStatus zero? bytes key overlapped timeout GetQueuedCompletionStatus zero? :> error?
] keep
*void* dup [ OVERLAPPED memory>struct ] when bytes *int
] keep *int spin ; overlapped *void* dup [ OVERLAPPED memory>struct ] when
error? ;
: resume-callback ( result overlapped -- ) : resume-callback ( result overlapped -- )
>c-ptr pending-overlapped get-global delete-at* drop resume-with ; >c-ptr pending-overlapped get-global delete-at* drop resume-with ;

View File

@ -78,10 +78,10 @@ PRIVATE>
: n*V+V ( alpha x y -- alpha*x+y ) clone n*V+V! ; inline : n*V+V ( alpha x y -- alpha*x+y ) clone n*V+V! ; inline
: n*V ( alpha x -- alpha*x ) clone n*V! ; inline : n*V ( alpha x -- alpha*x ) clone n*V! ; inline
: V+ ( x y -- x+y ) :: V+ ( x y -- x+y )
1.0 -rot n*V+V ; inline 1.0 x y n*V+V ; inline
: V- ( x y -- x-y ) :: V- ( x y -- x-y )
-1.0 spin n*V+V ; inline -1.0 y x n*V+V ; inline
: Vneg ( x -- -x ) : Vneg ( x -- -x )
-1.0 swap n*V ; inline -1.0 swap n*V ; inline

View File

@ -1,7 +1,7 @@
! Copyright (C) 2006, 2008 Slava Pestov. ! Copyright (C) 2006, 2008 Slava Pestov.
! See http://factorcode.org/license.txt for BSD license. ! See http://factorcode.org/license.txt for BSD license.
USING: kernel math math.vectors math.matrices namespaces USING: kernel locals math math.vectors math.matrices
sequences ; namespaces sequences ;
IN: math.matrices.elimination IN: math.matrices.elimination
SYMBOL: matrix SYMBOL: matrix
@ -85,12 +85,11 @@ SYMBOL: matrix
] each ] each
] with-matrix ; ] with-matrix ;
: basis-vector ( row col# -- ) :: basis-vector ( row col# -- )
[ clone ] dip row clone :> row'
[ swap nth neg recip ] 2keep col# row' nth neg recip :> a
[ 0 spin set-nth ] 2keep 0 col# row' set-nth
[ n*v ] dip a row n*v col# matrix get set-nth ;
matrix get set-nth ;
: nullspace ( matrix -- seq ) : nullspace ( matrix -- seq )
echelon reduced dup empty? [ echelon reduced dup empty? [

View File

@ -1,6 +1,6 @@
IN: persistent.hashtables.tests IN: persistent.hashtables.tests
USING: persistent.hashtables persistent.assocs hashtables assocs USING: persistent.hashtables persistent.assocs hashtables assocs
tools.test kernel namespaces random math.ranges sequences fry ; tools.test kernel locals namespaces random math.ranges sequences fry ;
[ t ] [ PH{ } assoc-empty? ] unit-test [ t ] [ PH{ } assoc-empty? ] unit-test
@ -86,7 +86,7 @@ M: hash-0-b hashcode* 2drop 0 ;
: random-assocs ( n -- hash phash ) : random-assocs ( n -- hash phash )
[ random-string ] replicate [ random-string ] replicate
[ H{ } clone [ '[ swap _ set-at ] each-index ] keep ] [ H{ } clone [ '[ swap _ set-at ] each-index ] keep ]
[ PH{ } clone swap [ spin new-at ] each-index ] [ PH{ } clone swap [| ph elt i | i elt ph new-at ] each-index ]
bi ; bi ;
: ok? ( assoc1 assoc2 -- ? ) : ok? ( assoc1 assoc2 -- ? )

View File

@ -1,7 +1,7 @@
! Based on Clojure's PersistentHashMap by Rich Hickey. ! Based on Clojure's PersistentHashMap by Rich Hickey.
USING: kernel math accessors assocs fry combinators parser USING: kernel math accessors assocs fry combinators parser
prettyprint.custom make prettyprint.custom locals make
persistent.assocs persistent.assocs
persistent.hashtables.nodes persistent.hashtables.nodes
persistent.hashtables.nodes.empty persistent.hashtables.nodes.empty
@ -38,8 +38,8 @@ M: persistent-hash pluck-at
M: persistent-hash >alist [ root>> >alist% ] { } make ; M: persistent-hash >alist [ root>> >alist% ] { } make ;
: >persistent-hash ( assoc -- phash ) :: >persistent-hash ( assoc -- phash )
T{ persistent-hash } swap [ spin new-at ] assoc-each ; T{ persistent-hash } assoc [| ph k v | v k ph new-at ] assoc-each ;
M: persistent-hash equal? M: persistent-hash equal?
over persistent-hash? [ assoc= ] [ 2drop f ] if ; over persistent-hash? [ assoc= ] [ 2drop f ] if ;

View File

@ -44,12 +44,12 @@ TUPLE: parts in out ;
[ _ meaningful-integers ] keep add-out [ _ meaningful-integers ] keep add-out
] map ; ] map ;
: class-partitions ( classes -- assoc ) :: class-partitions ( classes -- assoc )
[ integer? ] partition [ classes [ integer? ] partition :> ( integers classes )
dup powerset-partition spin add-integers
[ [ partition>class ] keep 2array ] map classes powerset-partition classes integers add-integers
[ first ] filter [ [ partition>class ] keep 2array ] map [ first ] filter
] [ '[ _ singleton-partition ] map ] 2bi append ; integers [ classes singleton-partition ] map append ;
: new-transitions ( transitions -- assoc ) ! assoc is class, partition : new-transitions ( transitions -- assoc ) ! assoc is class, partition
values [ keys ] gather values [ keys ] gather

View File

@ -9,7 +9,7 @@ IN: validators
>lower "on" = ; >lower "on" = ;
: v-default ( str def -- str/def ) : v-default ( str def -- str/def )
over empty? spin ? ; [ nip empty? ] 2keep ? ;
: v-required ( str -- str ) : v-required ( str -- str )
dup empty? [ "required" throw ] when ; dup empty? [ "required" throw ] when ;

View File

@ -44,8 +44,8 @@ C: <test-implementation> test-implementation
[ >>x drop ] ! IInherited::setX [ >>x drop ] ! IInherited::setX
} } } }
{ IUnrelated { { IUnrelated {
[ swap x>> + ] ! IUnrelated::xPlus [ [ x>> ] [ + ] bi* ] ! IUnrelated::xPlus
[ spin x>> * + ] ! IUnrelated::xMulAdd [ [ x>> ] [ * ] [ + ] tri* ] ! IUnrelated::xMulAdd
} } } }
} <com-wrapper> } <com-wrapper>
dup +test-wrapper+ set [ dup +test-wrapper+ set [

View File

@ -27,8 +27,8 @@ COM-INTERFACE: IUnrelated IUnknown {b06ac3f4-30e4-406b-a7cd-c29cead4552c}
[ >>x drop ] ! IInherited::setX [ >>x drop ] ! IInherited::setX
} } } }
{ "IUnrelated" { { "IUnrelated" {
[ swap x>> + ] ! IUnrelated::xPlus [ [ x>> ] [ + ] bi* ] ! IUnrelated::xPlus
[ spin x>> * + ] ! IUnrealted::xMulAdd [ [ x>> ] [ * ] [ + ] tri* ] ! IUnrealted::xMulAdd
} } } }
} <com-wrapper>""" } ; } <com-wrapper>""" } ;