1 ! Copyright (C) 2005, 2007 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: arrays combinators kernel math math.functions math.libm math.vectors sequences ;
14 [ [ { 1 0 0 0 } vshuffle ] [ { 1 1 2 3 } vshuffle ] bi* v* ]
15 [ [ { 2 1 2 3 } vshuffle ] [ { 2 0 0 0 } vshuffle ] bi* v* v+ ]
16 [ [ { 3 2 3 1 } vshuffle ] [ { 3 3 1 2 } vshuffle ] bi* v* v+ ]
17 [ [ { 0 3 1 2 } vshuffle ] [ { 0 2 3 1 } vshuffle ] bi* v* v- ]
18 } 2cleave { -1 1 1 1 } v* ; inline
20 : qconjugate ( u -- u' )
21 { 1 -1 -1 -1 } v* ; inline
24 qconjugate dup norm-sq v/n ; inline
38 : n>q-like ( c exemplar -- q )
39 [ 0 0 0 ] dip 4sequence ; inline
42 >rect 0 0 4array ; inline
44 : c>q-like ( c exemplar -- q )
45 [ >rect 0 0 ] dip 4sequence ; inline
51 : (euler) ( theta exemplar shuffle -- q )
53 [ 0.5 * [ fcos ] [ fsin ] bi 0.0 0.0 ] [ call ] [ 4sequence ] tri* ; inline
57 : euler-like ( phi theta psi exemplar -- q )
58 [ [ ] (euler) ] [ [ swapd ] (euler) ] [ [ rot ] (euler) ] tri-curry tri* q* q* ; inline
60 : euler ( phi theta psi -- q )
61 { } euler-like ; inline