diff options
35 files changed, 2546 insertions, 173 deletions
@@ -12,6 +12,9 @@ Ubuntu/Debian: | |||
12 | 12 | ||
13 | Other distributions may require additional libraries. They can be given in a **--configure-option**. | 13 | Other distributions may require additional libraries. They can be given in a **--configure-option**. |
14 | 14 | ||
15 | Adrian Victor Crisciu has developed an [installation method](http://comments.gmane.org/gmane.comp.lang.haskell.glasgow.user/24976) for systems | ||
16 | which don't provide shared lapack libraries. | ||
17 | |||
15 | ## Mac OS/X ############################################### | 18 | ## Mac OS/X ############################################### |
16 | 19 | ||
17 | GSL must be installed via Homebrew or MacPorts. | 20 | GSL must be installed via Homebrew or MacPorts. |
@@ -30,7 +30,7 @@ Contributions, suggestions, and bug reports are welcome! | |||
30 | [tutorial]: http://dis.um.es/profesores/alberto/material/hmatrix.pdf | 30 | [tutorial]: http://dis.um.es/profesores/alberto/material/hmatrix.pdf |
31 | [installation]: https://github.com/AlbertoRuiz/hmatrix/blob/master/INSTALL.md | 31 | [installation]: https://github.com/AlbertoRuiz/hmatrix/blob/master/INSTALL.md |
32 | [changes]: https://github.com/albertoruiz/hmatrix/tree/master/packages/base/CHANGELOG | 32 | [changes]: https://github.com/albertoruiz/hmatrix/tree/master/packages/base/CHANGELOG |
33 | [examples]: http://dis.um.es/~/alberto/hmatrix/hmatrix.html | 33 | [examples]: http://dis.um.es/~alberto/hmatrix/hmatrix.html |
34 | 34 | ||
35 | 35 | ||
36 | [hmatrix-static]: http://hackage.haskell.org/package/hmatrix-static | 36 | [hmatrix-static]: http://hackage.haskell.org/package/hmatrix-static |
diff --git a/packages/base/CHANGELOG b/packages/base/CHANGELOG index 35ccdbc..c137285 100644 --- a/packages/base/CHANGELOG +++ b/packages/base/CHANGELOG | |||
@@ -1,3 +1,10 @@ | |||
1 | 0.16.1.0 | ||
2 | -------- | ||
3 | |||
4 | * Added (|||) and (===) for "besides" and "above" | ||
5 | |||
6 | * rowOuters | ||
7 | |||
1 | 0.16.0.0 | 8 | 0.16.0.0 |
2 | -------- | 9 | -------- |
3 | 10 | ||
@@ -11,9 +18,11 @@ | |||
11 | Numeric.LinearAlgebra.Data | 18 | Numeric.LinearAlgebra.Data |
12 | Numeric.LinearAlgebra.Devel | 19 | Numeric.LinearAlgebra.Devel |
13 | 20 | ||
14 | The documentation is now hidden for Data.Packed.*, Numeric.Container, and | 21 | For normal usage we only need to import Numeric.LinearAlgebra.HMatrix. |
22 | |||
23 | (The documentation is now hidden for Data.Packed.*, Numeric.Container, and | ||
15 | the other Numeric.LinearAlgebra.* modules, but they continue to be exposed | 24 | the other Numeric.LinearAlgebra.* modules, but they continue to be exposed |
16 | for backwards compatibility. | 25 | for backwards compatibility.) |
17 | 26 | ||
18 | * Added support for empty arrays, extending automatic conformability | 27 | * Added support for empty arrays, extending automatic conformability |
19 | (very useful for construction of block matrices). | 28 | (very useful for construction of block matrices). |
diff --git a/packages/base/THANKS.md b/packages/base/THANKS.md index b1417a6..fdbbe14 100644 --- a/packages/base/THANKS.md +++ b/packages/base/THANKS.md | |||
@@ -103,7 +103,7 @@ module reorganization, monadic mapVectorM, and many other improvements. | |||
103 | deprecation warnings, used more explicit imports, and updated to ghc-7.4. | 103 | deprecation warnings, used more explicit imports, and updated to ghc-7.4. |
104 | 104 | ||
105 | - Tom Nielsen discovered a problem in Config.hs, exposed by link problems | 105 | - Tom Nielsen discovered a problem in Config.hs, exposed by link problems |
106 | in Ubuntu 11.10 beta. | 106 | in Ubuntu 11.10 beta, and fixed the link options on freebsd. |
107 | 107 | ||
108 | - Daniel Fischer reported some Haddock markup errors. | 108 | - Daniel Fischer reported some Haddock markup errors. |
109 | 109 | ||
@@ -120,7 +120,8 @@ module reorganization, monadic mapVectorM, and many other improvements. | |||
120 | 120 | ||
121 | - Takano Akio fixed off-by-one errors in gsl-aux.c producing segfaults. | 121 | - Takano Akio fixed off-by-one errors in gsl-aux.c producing segfaults. |
122 | 122 | ||
123 | - Alex Lang implemented uniRoot and uniRootJ for one-dimensional root-finding. | 123 | - Alex Lang implemented uniRoot and uniRootJ for one-dimensional root-finding, and |
124 | fixed asRow and asColumn for empty vectors. | ||
124 | 125 | ||
125 | - Mike Ledger contributed alternative FFI helpers for matrix interoperation with C | 126 | - Mike Ledger contributed alternative FFI helpers for matrix interoperation with C |
126 | 127 | ||
@@ -139,7 +140,8 @@ module reorganization, monadic mapVectorM, and many other improvements. | |||
139 | 140 | ||
140 | - Clemens Lang updated the MacPort installation instructions. | 141 | - Clemens Lang updated the MacPort installation instructions. |
141 | 142 | ||
142 | - Henning Thielemann reported the pinv inefficient implementation. | 143 | - Henning Thielemann reported the pinv inefficient implementation and the need of |
144 | pkgconfig-depends. | ||
143 | 145 | ||
144 | - bdoering reported the problem of zero absolute tolerance in the integration functions. | 146 | - bdoering reported the problem of zero absolute tolerance in the integration functions. |
145 | 147 | ||
@@ -155,3 +157,25 @@ module reorganization, monadic mapVectorM, and many other improvements. | |||
155 | 157 | ||
156 | - Samium Gromoff reported a build failure caused by a size_t - int mismatch. | 158 | - Samium Gromoff reported a build failure caused by a size_t - int mismatch. |
157 | 159 | ||
160 | - Denis Laxalde separated the gsl tests from the base ones. | ||
161 | |||
162 | - Dominic Steinitz (idontgetoutmuch) reported a bug in the static diagonal creation functions. | ||
163 | |||
164 | - Dylan Thurston reported an error in the glpk documentation and ambiguity in | ||
165 | the description of linearSolve. | ||
166 | |||
167 | - Adrian Victor Crisciu developed an installation method for platforms which | ||
168 | don't provide shared lapack libraries. | ||
169 | |||
170 | - Ian Ross reported the max/minIndex bug. | ||
171 | |||
172 | - Niklas Hambüchen improved the documentation. | ||
173 | |||
174 | - "erdeszt" optimized "conv" using a direct vector reverse. | ||
175 | |||
176 | - John Shahbazian added support for openBLAS. | ||
177 | |||
178 | - "yongqli" reported the bug in randomVector (rand() is not thread-safe and drand48_r() is not portable). | ||
179 | |||
180 | - Kiwamu Ishikura improved randomVector for OSX | ||
181 | |||
diff --git a/packages/base/hmatrix.cabal b/packages/base/hmatrix.cabal index ba719a1..8ba3e06 100644 --- a/packages/base/hmatrix.cabal +++ b/packages/base/hmatrix.cabal | |||
@@ -1,5 +1,5 @@ | |||
1 | Name: hmatrix | 1 | Name: hmatrix |
2 | Version: 0.16.0.3 | 2 | Version: 0.16.1.3 |
3 | License: BSD3 | 3 | License: BSD3 |
4 | License-file: LICENSE | 4 | License-file: LICENSE |
5 | Author: Alberto Ruiz | 5 | Author: Alberto Ruiz |
@@ -14,6 +14,12 @@ Description: Linear algebra based on BLAS and LAPACK. | |||
14 | ["Numeric.LinearAlgebra.HMatrix"] Starting point and recommended import module for most applications. | 14 | ["Numeric.LinearAlgebra.HMatrix"] Starting point and recommended import module for most applications. |
15 | . | 15 | . |
16 | ["Numeric.LinearAlgebra.Static"] Experimental alternative interface. | 16 | ["Numeric.LinearAlgebra.Static"] Experimental alternative interface. |
17 | . | ||
18 | ["Numeric.LinearAlgebra.Devel"] Tools for extending the library. | ||
19 | . | ||
20 | (Other modules are exposed with hidden documentation for backwards compatibility.) | ||
21 | . | ||
22 | Code examples: <http://dis.um.es/~alberto/hmatrix/hmatrix.html> | ||
17 | 23 | ||
18 | Category: Math | 24 | Category: Math |
19 | tested-with: GHC==7.8 | 25 | tested-with: GHC==7.8 |
@@ -26,6 +32,10 @@ extra-source-files: THANKS.md CHANGELOG | |||
26 | 32 | ||
27 | extra-source-files: src/C/lapack-aux.h | 33 | extra-source-files: src/C/lapack-aux.h |
28 | 34 | ||
35 | flag openblas | ||
36 | description: Link with OpenBLAS (https://github.com/xianyi/OpenBLAS) optimized libraries. | ||
37 | default: False | ||
38 | |||
29 | library | 39 | library |
30 | 40 | ||
31 | Build-Depends: base >= 4 && < 5, | 41 | Build-Depends: base >= 4 && < 5, |
@@ -94,7 +104,11 @@ library | |||
94 | 104 | ||
95 | cpp-options: -DBINARY | 105 | cpp-options: -DBINARY |
96 | 106 | ||
97 | extra-libraries: blas lapack | 107 | if flag(openblas) |
108 | extra-lib-dirs: /usr/lib/openblas/lib | ||
109 | extra-libraries: openblas | ||
110 | else | ||
111 | extra-libraries: blas lapack | ||
98 | 112 | ||
99 | if os(OSX) | 113 | if os(OSX) |
100 | extra-lib-dirs: /opt/local/lib/ | 114 | extra-lib-dirs: /opt/local/lib/ |
@@ -108,7 +122,7 @@ library | |||
108 | if os(freebsd) | 122 | if os(freebsd) |
109 | extra-lib-dirs: /usr/local/lib | 123 | extra-lib-dirs: /usr/local/lib |
110 | include-dirs: /usr/local/include | 124 | include-dirs: /usr/local/include |
111 | extra-libraries: blas lapack | 125 | extra-libraries: blas lapack gfortran |
112 | 126 | ||
113 | if os(windows) | 127 | if os(windows) |
114 | extra-libraries: blas lapack | 128 | extra-libraries: blas lapack |
diff --git a/packages/base/src/C/vector-aux.c b/packages/base/src/C/vector-aux.c index 2f47c8f..dda47cb 100644 --- a/packages/base/src/C/vector-aux.c +++ b/packages/base/src/C/vector-aux.c | |||
@@ -172,7 +172,7 @@ double vector_min(KDVEC(x)) { | |||
172 | double vector_max_index(KDVEC(x)) { | 172 | double vector_max_index(KDVEC(x)) { |
173 | int k, r = 0; | 173 | int k, r = 0; |
174 | for (k = 1; k<xn; k++) { | 174 | for (k = 1; k<xn; k++) { |
175 | if(xp[k]>xp[0]) { | 175 | if(xp[k]>xp[r]) { |
176 | r = k; | 176 | r = k; |
177 | } | 177 | } |
178 | } | 178 | } |
@@ -182,7 +182,7 @@ double vector_max_index(KDVEC(x)) { | |||
182 | double vector_min_index(KDVEC(x)) { | 182 | double vector_min_index(KDVEC(x)) { |
183 | int k, r = 0; | 183 | int k, r = 0; |
184 | for (k = 1; k<xn; k++) { | 184 | for (k = 1; k<xn; k++) { |
185 | if(xp[k]<xp[0]) { | 185 | if(xp[k]<xp[r]) { |
186 | r = k; | 186 | r = k; |
187 | } | 187 | } |
188 | } | 188 | } |
@@ -237,7 +237,7 @@ float vector_min_f(KFVEC(x)) { | |||
237 | float vector_max_index_f(KFVEC(x)) { | 237 | float vector_max_index_f(KFVEC(x)) { |
238 | int k, r = 0; | 238 | int k, r = 0; |
239 | for (k = 1; k<xn; k++) { | 239 | for (k = 1; k<xn; k++) { |
240 | if(xp[k]>xp[0]) { | 240 | if(xp[k]>xp[r]) { |
241 | r = k; | 241 | r = k; |
242 | } | 242 | } |
243 | } | 243 | } |
@@ -247,7 +247,7 @@ float vector_max_index_f(KFVEC(x)) { | |||
247 | float vector_min_index_f(KFVEC(x)) { | 247 | float vector_min_index_f(KFVEC(x)) { |
248 | int k, r = 0; | 248 | int k, r = 0; |
249 | for (k = 1; k<xn; k++) { | 249 | for (k = 1; k<xn; k++) { |
250 | if(xp[k]<xp[0]) { | 250 | if(xp[k]<xp[r]) { |
251 | r = k; | 251 | r = k; |
252 | } | 252 | } |
253 | } | 253 | } |
@@ -700,17 +700,86 @@ int saveMatrix(char * file, char * format, KDMAT(a)){ | |||
700 | 700 | ||
701 | //////////////////////////////////////////////////////////////////////////////// | 701 | //////////////////////////////////////////////////////////////////////////////// |
702 | 702 | ||
703 | #ifdef __APPLE__ | ||
704 | |||
705 | #pragma message "randomVector is not thread-safe in OSX" | ||
706 | |||
707 | inline double urandom() { | ||
708 | const long max_random = 2147483647; // 2**31 - 1 | ||
709 | return (double)random() / (double)max_random; | ||
710 | } | ||
711 | |||
712 | double gaussrand(int *phase, double *pV1, double *pV2, double *pS) | ||
713 | { | ||
714 | double V1=*pV1, V2=*pV2, S=*pS; | ||
715 | double X; | ||
716 | |||
717 | if(*phase == 0) { | ||
718 | do { | ||
719 | double U1 = urandom(); | ||
720 | double U2 = urandom(); | ||
721 | |||
722 | V1 = 2 * U1 - 1; | ||
723 | V2 = 2 * U2 - 1; | ||
724 | S = V1 * V1 + V2 * V2; | ||
725 | } while(S >= 1 || S == 0); | ||
726 | |||
727 | X = V1 * sqrt(-2 * log(S) / S); | ||
728 | } else | ||
729 | X = V2 * sqrt(-2 * log(S) / S); | ||
730 | |||
731 | *phase = 1 - *phase; | ||
732 | *pV1=V1; *pV2=V2; *pS=S; | ||
733 | |||
734 | return X; | ||
735 | |||
736 | } | ||
737 | |||
738 | int random_vector(unsigned int seed, int code, DVEC(r)) { | ||
739 | int phase = 0; | ||
740 | double V1,V2,S; | ||
741 | |||
742 | srandom(seed); | ||
743 | |||
744 | int k; | ||
745 | switch (code) { | ||
746 | case 0: { // uniform | ||
747 | for (k=0; k<rn; k++) { | ||
748 | rp[k] = urandom(); | ||
749 | } | ||
750 | OK | ||
751 | } | ||
752 | case 1: { // gaussian | ||
753 | for (k=0; k<rn; k++) { | ||
754 | rp[k] = gaussrand(&phase,&V1,&V2,&S); | ||
755 | } | ||
756 | OK | ||
757 | } | ||
758 | |||
759 | default: ERROR(BAD_CODE); | ||
760 | } | ||
761 | } | ||
762 | |||
763 | #else | ||
764 | |||
765 | inline double urandom(struct random_data * buffer) { | ||
766 | int32_t res; | ||
767 | random_r(buffer,&res); | ||
768 | return (double)res/RAND_MAX; | ||
769 | } | ||
770 | |||
771 | |||
703 | // http://c-faq.com/lib/gaussian.html | 772 | // http://c-faq.com/lib/gaussian.html |
704 | double gaussrand() | 773 | double gaussrand(struct random_data *buffer, |
774 | int *phase, double *pV1, double *pV2, double *pS) | ||
705 | { | 775 | { |
706 | static double V1, V2, S; | 776 | double V1=*pV1, V2=*pV2, S=*pS; |
707 | static int phase = 0; | ||
708 | double X; | 777 | double X; |
709 | 778 | ||
710 | if(phase == 0) { | 779 | if(*phase == 0) { |
711 | do { | 780 | do { |
712 | double U1 = (double)rand() / RAND_MAX; | 781 | double U1 = urandom(buffer); |
713 | double U2 = (double)rand() / RAND_MAX; | 782 | double U2 = urandom(buffer); |
714 | 783 | ||
715 | V1 = 2 * U1 - 1; | 784 | V1 = 2 * U1 - 1; |
716 | V2 = 2 * U2 - 1; | 785 | V2 = 2 * U2 - 1; |
@@ -721,24 +790,37 @@ double gaussrand() | |||
721 | } else | 790 | } else |
722 | X = V2 * sqrt(-2 * log(S) / S); | 791 | X = V2 * sqrt(-2 * log(S) / S); |
723 | 792 | ||
724 | phase = 1 - phase; | 793 | *phase = 1 - *phase; |
794 | *pV1=V1; *pV2=V2; *pS=S; | ||
725 | 795 | ||
726 | return X; | 796 | return X; |
797 | |||
727 | } | 798 | } |
728 | 799 | ||
729 | int random_vector(int seed, int code, DVEC(r)) { | 800 | int random_vector(unsigned int seed, int code, DVEC(r)) { |
730 | srand(seed); | 801 | struct random_data buffer; |
802 | char random_state[128]; | ||
803 | memset(&buffer, 0, sizeof(struct random_data)); | ||
804 | memset(random_state, 0, sizeof(random_state)); | ||
805 | |||
806 | initstate_r(seed,random_state,sizeof(random_state),&buffer); | ||
807 | // setstate_r(random_state,&buffer); | ||
808 | // srandom_r(seed,&buffer); | ||
809 | |||
810 | int phase = 0; | ||
811 | double V1,V2,S; | ||
812 | |||
731 | int k; | 813 | int k; |
732 | switch (code) { | 814 | switch (code) { |
733 | case 0: { // uniform | 815 | case 0: { // uniform |
734 | for (k=0; k<rn; k++) { | 816 | for (k=0; k<rn; k++) { |
735 | rp[k] = (double)rand()/RAND_MAX; | 817 | rp[k] = urandom(&buffer); |
736 | } | 818 | } |
737 | OK | 819 | OK |
738 | } | 820 | } |
739 | case 1: { // gaussian | 821 | case 1: { // gaussian |
740 | for (k=0; k<rn; k++) { | 822 | for (k=0; k<rn; k++) { |
741 | rp[k] = gaussrand(); | 823 | rp[k] = gaussrand(&buffer,&phase,&V1,&V2,&S); |
742 | } | 824 | } |
743 | OK | 825 | OK |
744 | } | 826 | } |
@@ -747,6 +829,8 @@ int random_vector(int seed, int code, DVEC(r)) { | |||
747 | } | 829 | } |
748 | } | 830 | } |
749 | 831 | ||
832 | #endif | ||
833 | |||
750 | //////////////////////////////////////////////////////////////////////////////// | 834 | //////////////////////////////////////////////////////////////////////////////// |
751 | 835 | ||
752 | int smXv(KDVEC(vals),KIVEC(cols),KIVEC(rows),KDVEC(x),DVEC(r)) { | 836 | int smXv(KDVEC(vals),KIVEC(cols),KIVEC(rows),KDVEC(x),DVEC(r)) { |
diff --git a/packages/base/src/Data/Packed/Internal/Matrix.hs b/packages/base/src/Data/Packed/Internal/Matrix.hs index 91a9466..150b978 100644 --- a/packages/base/src/Data/Packed/Internal/Matrix.hs +++ b/packages/base/src/Data/Packed/Internal/Matrix.hs | |||
@@ -253,7 +253,8 @@ compat m1 m2 = rows m1 == rows m2 && cols m1 == cols m2 | |||
253 | operations for selected element types. | 253 | operations for selected element types. |
254 | It provides unoptimised defaults for any 'Storable' type, | 254 | It provides unoptimised defaults for any 'Storable' type, |
255 | so you can create instances simply as: | 255 | so you can create instances simply as: |
256 | @instance Element Foo@. | 256 | |
257 | >instance Element Foo | ||
257 | -} | 258 | -} |
258 | class (Storable a) => Element a where | 259 | class (Storable a) => Element a where |
259 | subMatrixD :: (Int,Int) -- ^ (r0,c0) starting position | 260 | subMatrixD :: (Int,Int) -- ^ (r0,c0) starting position |
diff --git a/packages/base/src/Data/Packed/Matrix.hs b/packages/base/src/Data/Packed/Matrix.hs index 6445ce4..70b9232 100644 --- a/packages/base/src/Data/Packed/Matrix.hs +++ b/packages/base/src/Data/Packed/Matrix.hs | |||
@@ -284,7 +284,7 @@ fromLists = fromRows . map fromList | |||
284 | -- [ 1.0, 2.0, 3.0, 4.0, 5.0 ] | 284 | -- [ 1.0, 2.0, 3.0, 4.0, 5.0 ] |
285 | -- | 285 | -- |
286 | asRow :: Storable a => Vector a -> Matrix a | 286 | asRow :: Storable a => Vector a -> Matrix a |
287 | asRow v = reshape (dim v) v | 287 | asRow = trans . asColumn |
288 | 288 | ||
289 | -- | creates a 1-column matrix from a vector | 289 | -- | creates a 1-column matrix from a vector |
290 | -- | 290 | -- |
@@ -297,7 +297,7 @@ asRow v = reshape (dim v) v | |||
297 | -- , 5.0 ] | 297 | -- , 5.0 ] |
298 | -- | 298 | -- |
299 | asColumn :: Storable a => Vector a -> Matrix a | 299 | asColumn :: Storable a => Vector a -> Matrix a |
300 | asColumn = trans . asRow | 300 | asColumn v = reshape 1 v |
301 | 301 | ||
302 | 302 | ||
303 | 303 | ||
@@ -476,7 +476,7 @@ mapMatrixWithIndexM g m = liftM (reshape c) . mapVectorWithIndexM (mk c g) . fla | |||
476 | 476 | ||
477 | {- | | 477 | {- | |
478 | 478 | ||
479 | >>> mapMatrixWithIndex (\\(i,j) v -> 100*v + 10*fromIntegral i + fromIntegral j) (ident 3:: Matrix Double) | 479 | >>> mapMatrixWithIndex (\(i,j) v -> 100*v + 10*fromIntegral i + fromIntegral j) (ident 3:: Matrix Double) |
480 | (3><3) | 480 | (3><3) |
481 | [ 100.0, 1.0, 2.0 | 481 | [ 100.0, 1.0, 2.0 |
482 | , 10.0, 111.0, 12.0 | 482 | , 10.0, 111.0, 12.0 |
diff --git a/packages/base/src/Data/Packed/Numeric.hs b/packages/base/src/Data/Packed/Numeric.hs index 7aa53f1..6027f43 100644 --- a/packages/base/src/Data/Packed/Numeric.hs +++ b/packages/base/src/Data/Packed/Numeric.hs | |||
@@ -160,7 +160,29 @@ instance Mul Vector Matrix Vector where | |||
160 | 160 | ||
161 | -------------------------------------------------------------------------------- | 161 | -------------------------------------------------------------------------------- |
162 | 162 | ||
163 | -- | least squares solution of a linear system, similar to the \\ operator of Matlab\/Octave (based on linearSolveSVD) | 163 | {- | Least squares solution of a linear system, similar to the \\ operator of Matlab\/Octave (based on linearSolveSVD) |
164 | |||
165 | @ | ||
166 | a = (3><2) | ||
167 | [ 1.0, 2.0 | ||
168 | , 2.0, 4.0 | ||
169 | , 2.0, -1.0 ] | ||
170 | @ | ||
171 | |||
172 | @ | ||
173 | v = vector [13.0,27.0,1.0] | ||
174 | @ | ||
175 | |||
176 | >>> let x = a <\> v | ||
177 | >>> x | ||
178 | fromList [3.0799999999999996,5.159999999999999] | ||
179 | |||
180 | >>> a #> x | ||
181 | fromList [13.399999999999999,26.799999999999997,1.0] | ||
182 | |||
183 | It also admits multiple right-hand sides stored as columns in a matrix. | ||
184 | |||
185 | -} | ||
164 | infixl 7 <\> | 186 | infixl 7 <\> |
165 | (<\>) :: (LSDiv c, Field t) => Matrix t -> c t -> c t | 187 | (<\>) :: (LSDiv c, Field t) => Matrix t -> c t -> c t |
166 | (<\>) = linSolve | 188 | (<\>) = linSolve |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs b/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs index 25700bc..02ac6a0 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Algorithms.hs | |||
@@ -809,7 +809,7 @@ expGolub m = iterate msq f !! j | |||
809 | -------------------------------------------------------------- | 809 | -------------------------------------------------------------- |
810 | 810 | ||
811 | {- | Matrix square root. Currently it uses a simple iterative algorithm described in Wikipedia. | 811 | {- | Matrix square root. Currently it uses a simple iterative algorithm described in Wikipedia. |
812 | It only works with invertible matrices that have a real solution. For diagonalizable matrices you can try @matFunc sqrt@. | 812 | It only works with invertible matrices that have a real solution. |
813 | 813 | ||
814 | @m = (2><2) [4,9 | 814 | @m = (2><2) [4,9 |
815 | ,0,4] :: Matrix Double@ | 815 | ,0,4] :: Matrix Double@ |
@@ -819,6 +819,13 @@ It only works with invertible matrices that have a real solution. For diagonaliz | |||
819 | [ 2.0, 2.25 | 819 | [ 2.0, 2.25 |
820 | , 0.0, 2.0 ] | 820 | , 0.0, 2.0 ] |
821 | 821 | ||
822 | For diagonalizable matrices you can try 'matFunc' @sqrt@: | ||
823 | |||
824 | >>> matFunc sqrt ((2><2) [1,0,0,-1]) | ||
825 | (2><2) | ||
826 | [ 1.0 :+ 0.0, 0.0 :+ 0.0 | ||
827 | , 0.0 :+ 0.0, 0.0 :+ 1.0 ] | ||
828 | |||
822 | -} | 829 | -} |
823 | sqrtm :: Field t => Matrix t -> Matrix t | 830 | sqrtm :: Field t => Matrix t -> Matrix t |
824 | sqrtm = sqrtmInv | 831 | sqrtm = sqrtmInv |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Data.hs b/packages/base/src/Numeric/LinearAlgebra/Data.hs index b1a31fc..6dea407 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Data.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Data.hs | |||
@@ -40,7 +40,7 @@ module Numeric.LinearAlgebra.Data( | |||
40 | takeRows, dropRows, takeColumns, dropColumns, subMatrix, (?), (¿), fliprl, flipud, | 40 | takeRows, dropRows, takeColumns, dropColumns, subMatrix, (?), (¿), fliprl, flipud, |
41 | 41 | ||
42 | -- * Block matrix | 42 | -- * Block matrix |
43 | fromBlocks, (¦), (——), diagBlock, repmat, toBlocks, toBlocksEvery, | 43 | fromBlocks, (|||), (===), diagBlock, repmat, toBlocks, toBlocksEvery, |
44 | 44 | ||
45 | -- * Mapping functions | 45 | -- * Mapping functions |
46 | conj, cmap, step, cond, | 46 | conj, cmap, step, cond, |
@@ -66,7 +66,7 @@ module Numeric.LinearAlgebra.Data( | |||
66 | arctan2, | 66 | arctan2, |
67 | rows, cols, | 67 | rows, cols, |
68 | separable, | 68 | separable, |
69 | 69 | (¦),(——), | |
70 | module Data.Complex, | 70 | module Data.Complex, |
71 | 71 | ||
72 | Vector, Matrix, GMatrix, nRows, nCols | 72 | Vector, Matrix, GMatrix, nRows, nCols |
diff --git a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs index d2cae6c..677f9ee 100644 --- a/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs +++ b/packages/base/src/Numeric/LinearAlgebra/HMatrix.hs | |||
@@ -134,7 +134,7 @@ module Numeric.LinearAlgebra.HMatrix ( | |||
134 | Seed, RandDist(..), randomVector, rand, randn, gaussianSample, uniformSample, | 134 | Seed, RandDist(..), randomVector, rand, randn, gaussianSample, uniformSample, |
135 | 135 | ||
136 | -- * Misc | 136 | -- * Misc |
137 | meanCov, peps, relativeError, haussholder, optimiseMult, udot, nullspaceSVD, orthSVD, ranksv, | 137 | meanCov, rowOuters, peps, relativeError, haussholder, optimiseMult, udot, nullspaceSVD, orthSVD, ranksv, |
138 | ℝ,ℂ,iC, | 138 | ℝ,ℂ,iC, |
139 | -- * Auxiliary classes | 139 | -- * Auxiliary classes |
140 | Element, Container, Product, Numeric, LSDiv, | 140 | Element, Container, Product, Numeric, LSDiv, |
@@ -194,7 +194,37 @@ mul :: Numeric t => Matrix t -> Matrix t -> Matrix t | |||
194 | mul = mXm | 194 | mul = mXm |
195 | 195 | ||
196 | 196 | ||
197 | -- | Solve a linear system (for square coefficient matrix and several right-hand sides) using the LU decomposition, returning Nothing for a singular system. For underconstrained or overconstrained systems use 'linearSolveLS' or 'linearSolveSVD'. | 197 | {- | Solve a linear system (for square coefficient matrix and several right-hand sides) using the LU decomposition, returning Nothing for a singular system. For underconstrained or overconstrained systems use 'linearSolveLS' or 'linearSolveSVD'. |
198 | |||
199 | @ | ||
200 | a = (2><2) | ||
201 | [ 1.0, 2.0 | ||
202 | , 3.0, 5.0 ] | ||
203 | @ | ||
204 | |||
205 | @ | ||
206 | b = (2><3) | ||
207 | [ 6.0, 1.0, 10.0 | ||
208 | , 15.0, 3.0, 26.0 ] | ||
209 | @ | ||
210 | |||
211 | >>> linearSolve a b | ||
212 | Just (2><3) | ||
213 | [ -1.4802973661668753e-15, 0.9999999999999997, 1.999999999999997 | ||
214 | , 3.000000000000001, 1.6653345369377348e-16, 4.000000000000002 ] | ||
215 | |||
216 | >>> let Just x = it | ||
217 | >>> disp 5 x | ||
218 | 2x3 | ||
219 | -0.00000 1.00000 2.00000 | ||
220 | 3.00000 0.00000 4.00000 | ||
221 | |||
222 | >>> a <> x | ||
223 | (2><3) | ||
224 | [ 6.0, 1.0, 10.0 | ||
225 | , 15.0, 3.0, 26.0 ] | ||
226 | |||
227 | -} | ||
198 | linearSolve m b = A.mbLinearSolve m b | 228 | linearSolve m b = A.mbLinearSolve m b |
199 | 229 | ||
200 | -- | return an orthonormal basis of the null space of a matrix. See also 'nullspaceSVD'. | 230 | -- | return an orthonormal basis of the null space of a matrix. See also 'nullspaceSVD'. |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Static.hs b/packages/base/src/Numeric/LinearAlgebra/Static.hs index 5749c40..037396d 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Static.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Static.hs | |||
@@ -512,7 +512,10 @@ crossC (extract -> x) (extract -> y) = mkC (LA.fromList [z1, z2, z3]) | |||
512 | -------------------------------------------------------------------------------- | 512 | -------------------------------------------------------------------------------- |
513 | 513 | ||
514 | diagRectR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℝ -> R k -> L m n | 514 | diagRectR :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℝ -> R k -> L m n |
515 | diagRectR x v = r | 515 | diagRectR x v |
516 | | m' == 1 = mkL (LA.diagRect x ev m' n') | ||
517 | | m'*n' > 0 = r | ||
518 | | otherwise = matrix [] | ||
516 | where | 519 | where |
517 | r = mkL (asRow (vjoin [scalar x, ev, zeros])) | 520 | r = mkL (asRow (vjoin [scalar x, ev, zeros])) |
518 | ev = extract v | 521 | ev = extract v |
@@ -521,7 +524,10 @@ diagRectR x v = r | |||
521 | 524 | ||
522 | 525 | ||
523 | diagRectC :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℂ -> C k -> M m n | 526 | diagRectC :: forall m n k . (KnownNat m, KnownNat n, KnownNat k) => ℂ -> C k -> M m n |
524 | diagRectC x v = r | 527 | diagRectC x v |
528 | | m' == 1 = mkM (LA.diagRect x ev m' n') | ||
529 | | m'*n' > 0 = r | ||
530 | | otherwise = fromList [] | ||
525 | where | 531 | where |
526 | r = mkM (asRow (vjoin [scalar x, ev, zeros])) | 532 | r = mkM (asRow (vjoin [scalar x, ev, zeros])) |
527 | ev = extract v | 533 | ev = extract v |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Static/Internal.hs b/packages/base/src/Numeric/LinearAlgebra/Static/Internal.hs index 339ef7d..ec02cf6 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Static/Internal.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Static/Internal.hs | |||
@@ -150,7 +150,7 @@ gmat st xs' | |||
150 | (xs,rest) = splitAt (m'*n') xs' | 150 | (xs,rest) = splitAt (m'*n') xs' |
151 | v = LA.fromList xs | 151 | v = LA.fromList xs |
152 | x = reshape n' v | 152 | x = reshape n' v |
153 | ok = rem (LA.size v) n' == 0 && LA.size x == (m',n') && null rest | 153 | ok = null rest && ((n' == 0 && dim v == 0) || n'> 0 && (rem (LA.size v) n' == 0) && LA.size x == (m',n')) |
154 | m' = fromIntegral . natVal $ (undefined :: Proxy m) :: Int | 154 | m' = fromIntegral . natVal $ (undefined :: Proxy m) :: Int |
155 | n' = fromIntegral . natVal $ (undefined :: Proxy n) :: Int | 155 | n' = fromIntegral . natVal $ (undefined :: Proxy n) :: Int |
156 | abort info = error $ st ++" "++show m' ++ " " ++ show n'++" can't be created from elements " ++ info | 156 | abort info = error $ st ++" "++show m' ++ " " ++ show n'++" can't be created from elements " ++ info |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Util.hs b/packages/base/src/Numeric/LinearAlgebra/Util.hs index 6bb9d15..043aa21 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Util.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Util.hs | |||
@@ -33,7 +33,7 @@ module Numeric.LinearAlgebra.Util( | |||
33 | diagl, | 33 | diagl, |
34 | row, | 34 | row, |
35 | col, | 35 | col, |
36 | (&), (¦), (——), (#), | 36 | (&), (¦), (|||), (——), (===), (#), |
37 | (?), (¿), | 37 | (?), (¿), |
38 | Indexable(..), size, | 38 | Indexable(..), size, |
39 | Numeric, | 39 | Numeric, |
@@ -157,25 +157,34 @@ a & b = vjoin [a,b] | |||
157 | 157 | ||
158 | {- | horizontal concatenation of real matrices | 158 | {- | horizontal concatenation of real matrices |
159 | 159 | ||
160 | (unicode 0x00a6, broken bar) | 160 | >>> ident 3 ||| konst 7 (3,4) |
161 | |||
162 | >>> ident 3 ¦ konst 7 (3,4) | ||
163 | (3><7) | 161 | (3><7) |
164 | [ 1.0, 0.0, 0.0, 7.0, 7.0, 7.0, 7.0 | 162 | [ 1.0, 0.0, 0.0, 7.0, 7.0, 7.0, 7.0 |
165 | , 0.0, 1.0, 0.0, 7.0, 7.0, 7.0, 7.0 | 163 | , 0.0, 1.0, 0.0, 7.0, 7.0, 7.0, 7.0 |
166 | , 0.0, 0.0, 1.0, 7.0, 7.0, 7.0, 7.0 ] | 164 | , 0.0, 0.0, 1.0, 7.0, 7.0, 7.0, 7.0 ] |
167 | 165 | ||
168 | -} | 166 | -} |
167 | infixl 3 ||| | ||
168 | (|||) :: Matrix Double -> Matrix Double -> Matrix Double | ||
169 | a ||| b = fromBlocks [[a,b]] | ||
170 | |||
171 | -- | a synonym for ('|||') (unicode 0x00a6, broken bar) | ||
169 | infixl 3 ¦ | 172 | infixl 3 ¦ |
170 | (¦) :: Matrix Double -> Matrix Double -> Matrix Double | 173 | (¦) :: Matrix Double -> Matrix Double -> Matrix Double |
171 | a ¦ b = fromBlocks [[a,b]] | 174 | (¦) = (|||) |
175 | |||
172 | 176 | ||
173 | -- | vertical concatenation of real matrices | 177 | -- | vertical concatenation of real matrices |
174 | -- | 178 | -- |
175 | -- (unicode 0x2014, em dash) | 179 | (===) :: Matrix Double -> Matrix Double -> Matrix Double |
180 | infixl 2 === | ||
181 | a === b = fromBlocks [[a],[b]] | ||
182 | |||
183 | -- | a synonym for ('===') (unicode 0x2014, em dash) | ||
176 | (——) :: Matrix Double -> Matrix Double -> Matrix Double | 184 | (——) :: Matrix Double -> Matrix Double -> Matrix Double |
177 | infixl 2 —— | 185 | infixl 2 —— |
178 | a —— b = fromBlocks [[a],[b]] | 186 | (——) = (===) |
187 | |||
179 | 188 | ||
180 | (#) :: Matrix Double -> Matrix Double -> Matrix Double | 189 | (#) :: Matrix Double -> Matrix Double -> Matrix Double |
181 | infixl 2 # | 190 | infixl 2 # |
@@ -356,7 +365,26 @@ pairwiseD2 x y | ok = x2 `outer` oy + ox `outer` y2 - 2* x <> trans y | |||
356 | 365 | ||
357 | -------------------------------------------------------------------------------- | 366 | -------------------------------------------------------------------------------- |
358 | 367 | ||
359 | -- | outer products of rows | 368 | {- | outer products of rows |
369 | |||
370 | >>> a | ||
371 | (3><2) | ||
372 | [ 1.0, 2.0 | ||
373 | , 10.0, 20.0 | ||
374 | , 100.0, 200.0 ] | ||
375 | >>> b | ||
376 | (3><3) | ||
377 | [ 1.0, 2.0, 3.0 | ||
378 | , 4.0, 5.0, 6.0 | ||
379 | , 7.0, 8.0, 9.0 ] | ||
380 | |||
381 | >>> rowOuters a (b ||| 1) | ||
382 | (3><8) | ||
383 | [ 1.0, 2.0, 3.0, 1.0, 2.0, 4.0, 6.0, 2.0 | ||
384 | , 40.0, 50.0, 60.0, 10.0, 80.0, 100.0, 120.0, 20.0 | ||
385 | , 700.0, 800.0, 900.0, 100.0, 1400.0, 1600.0, 1800.0, 200.0 ] | ||
386 | |||
387 | -} | ||
360 | rowOuters :: Matrix Double -> Matrix Double -> Matrix Double | 388 | rowOuters :: Matrix Double -> Matrix Double -> Matrix Double |
361 | rowOuters a b = a' * b' | 389 | rowOuters a b = a' * b' |
362 | where | 390 | where |
diff --git a/packages/base/src/Numeric/LinearAlgebra/Util/Convolution.hs b/packages/base/src/Numeric/LinearAlgebra/Util/Convolution.hs index c8c7536..c9e75de 100644 --- a/packages/base/src/Numeric/LinearAlgebra/Util/Convolution.hs +++ b/packages/base/src/Numeric/LinearAlgebra/Util/Convolution.hs | |||
@@ -16,6 +16,7 @@ module Numeric.LinearAlgebra.Util.Convolution( | |||
16 | corr2, conv2, separable | 16 | corr2, conv2, separable |
17 | ) where | 17 | ) where |
18 | 18 | ||
19 | import qualified Data.Vector.Storable as SV | ||
19 | import Data.Packed.Numeric | 20 | import Data.Packed.Numeric |
20 | 21 | ||
21 | 22 | ||
@@ -51,7 +52,7 @@ conv ker v | |||
51 | | dim ker == 0 = konst 0 (dim v) | 52 | | dim ker == 0 = konst 0 (dim v) |
52 | | otherwise = corr ker' v' | 53 | | otherwise = corr ker' v' |
53 | where | 54 | where |
54 | ker' = (flatten.fliprl.asRow) ker | 55 | ker' = SV.reverse ker |
55 | v' = vjoin [z,v,z] | 56 | v' = vjoin [z,v,z] |
56 | z = konst 0 (dim ker -1) | 57 | z = konst 0 (dim ker -1) |
57 | 58 | ||
diff --git a/packages/glpk/LICENSE b/packages/glpk/LICENSE index f2125ec..94a9ed0 100644 --- a/packages/glpk/LICENSE +++ b/packages/glpk/LICENSE | |||
@@ -1,2 +1,674 @@ | |||
1 | Copyright Alberto Ruiz 2010 | 1 | GNU GENERAL PUBLIC LICENSE |
2 | GPL license | 2 | Version 3, 29 June 2007 |
3 | |||
4 | Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||
5 | Everyone is permitted to copy and distribute verbatim copies | ||
6 | of this license document, but changing it is not allowed. | ||
7 | |||
8 | Preamble | ||
9 | |||
10 | The GNU General Public License is a free, copyleft license for | ||
11 | software and other kinds of works. | ||
12 | |||
13 | The licenses for most software and other practical works are designed | ||
14 | to take away your freedom to share and change the works. By contrast, | ||
15 | the GNU General Public License is intended to guarantee your freedom to | ||
16 | share and change all versions of a program--to make sure it remains free | ||
17 | software for all its users. We, the Free Software Foundation, use the | ||
18 | GNU General Public License for most of our software; it applies also to | ||
19 | any other work released this way by its authors. You can apply it to | ||
20 | your programs, too. | ||
21 | |||
22 | When we speak of free software, we are referring to freedom, not | ||
23 | price. Our General Public Licenses are designed to make sure that you | ||
24 | have the freedom to distribute copies of free software (and charge for | ||
25 | them if you wish), that you receive source code or can get it if you | ||
26 | want it, that you can change the software or use pieces of it in new | ||
27 | free programs, and that you know you can do these things. | ||
28 | |||
29 | To protect your rights, we need to prevent others from denying you | ||
30 | these rights or asking you to surrender the rights. Therefore, you have | ||
31 | certain responsibilities if you distribute copies of the software, or if | ||
32 | you modify it: responsibilities to respect the freedom of others. | ||
33 | |||
34 | For example, if you distribute copies of such a program, whether | ||
35 | gratis or for a fee, you must pass on to the recipients the same | ||
36 | freedoms that you received. You must make sure that they, too, receive | ||
37 | or can get the source code. And you must show them these terms so they | ||
38 | know their rights. | ||
39 | |||
40 | Developers that use the GNU GPL protect your rights with two steps: | ||
41 | (1) assert copyright on the software, and (2) offer you this License | ||
42 | giving you legal permission to copy, distribute and/or modify it. | ||
43 | |||
44 | For the developers' and authors' protection, the GPL clearly explains | ||
45 | that there is no warranty for this free software. For both users' and | ||
46 | authors' sake, the GPL requires that modified versions be marked as | ||
47 | changed, so that their problems will not be attributed erroneously to | ||
48 | authors of previous versions. | ||
49 | |||
50 | Some devices are designed to deny users access to install or run | ||
51 | modified versions of the software inside them, although the manufacturer | ||
52 | can do so. This is fundamentally incompatible with the aim of | ||
53 | protecting users' freedom to change the software. The systematic | ||
54 | pattern of such abuse occurs in the area of products for individuals to | ||
55 | use, which is precisely where it is most unacceptable. Therefore, we | ||
56 | have designed this version of the GPL to prohibit the practice for those | ||
57 | products. If such problems arise substantially in other domains, we | ||
58 | stand ready to extend this provision to those domains in future versions | ||
59 | of the GPL, as needed to protect the freedom of users. | ||
60 | |||
61 | Finally, every program is threatened constantly by software patents. | ||
62 | States should not allow patents to restrict development and use of | ||
63 | software on general-purpose computers, but in those that do, we wish to | ||
64 | avoid the special danger that patents applied to a free program could | ||
65 | make it effectively proprietary. To prevent this, the GPL assures that | ||
66 | patents cannot be used to render the program non-free. | ||
67 | |||
68 | The precise terms and conditions for copying, distribution and | ||
69 | modification follow. | ||
70 | |||
71 | TERMS AND CONDITIONS | ||
72 | |||
73 | 0. Definitions. | ||
74 | |||
75 | "This License" refers to version 3 of the GNU General Public License. | ||
76 | |||
77 | "Copyright" also means copyright-like laws that apply to other kinds of | ||
78 | works, such as semiconductor masks. | ||
79 | |||
80 | "The Program" refers to any copyrightable work licensed under this | ||
81 | License. Each licensee is addressed as "you". "Licensees" and | ||
82 | "recipients" may be individuals or organizations. | ||
83 | |||
84 | To "modify" a work means to copy from or adapt all or part of the work | ||
85 | in a fashion requiring copyright permission, other than the making of an | ||
86 | exact copy. The resulting work is called a "modified version" of the | ||
87 | earlier work or a work "based on" the earlier work. | ||
88 | |||
89 | A "covered work" means either the unmodified Program or a work based | ||
90 | on the Program. | ||
91 | |||
92 | To "propagate" a work means to do anything with it that, without | ||
93 | permission, would make you directly or secondarily liable for | ||
94 | infringement under applicable copyright law, except executing it on a | ||
95 | computer or modifying a private copy. Propagation includes copying, | ||
96 | distribution (with or without modification), making available to the | ||
97 | public, and in some countries other activities as well. | ||
98 | |||
99 | To "convey" a work means any kind of propagation that enables other | ||
100 | parties to make or receive copies. Mere interaction with a user through | ||
101 | a computer network, with no transfer of a copy, is not conveying. | ||
102 | |||
103 | An interactive user interface displays "Appropriate Legal Notices" | ||
104 | to the extent that it includes a convenient and prominently visible | ||
105 | feature that (1) displays an appropriate copyright notice, and (2) | ||
106 | tells the user that there is no warranty for the work (except to the | ||
107 | extent that warranties are provided), that licensees may convey the | ||
108 | work under this License, and how to view a copy of this License. If | ||
109 | the interface presents a list of user commands or options, such as a | ||
110 | menu, a prominent item in the list meets this criterion. | ||
111 | |||
112 | 1. Source Code. | ||
113 | |||
114 | The "source code" for a work means the preferred form of the work | ||
115 | for making modifications to it. "Object code" means any non-source | ||
116 | form of a work. | ||
117 | |||
118 | A "Standard Interface" means an interface that either is an official | ||
119 | standard defined by a recognized standards body, or, in the case of | ||
120 | interfaces specified for a particular programming language, one that | ||
121 | is widely used among developers working in that language. | ||
122 | |||
123 | The "System Libraries" of an executable work include anything, other | ||
124 | than the work as a whole, that (a) is included in the normal form of | ||
125 | packaging a Major Component, but which is not part of that Major | ||
126 | Component, and (b) serves only to enable use of the work with that | ||
127 | Major Component, or to implement a Standard Interface for which an | ||
128 | implementation is available to the public in source code form. A | ||
129 | "Major Component", in this context, means a major essential component | ||
130 | (kernel, window system, and so on) of the specific operating system | ||
131 | (if any) on which the executable work runs, or a compiler used to | ||
132 | produce the work, or an object code interpreter used to run it. | ||
133 | |||
134 | The "Corresponding Source" for a work in object code form means all | ||
135 | the source code needed to generate, install, and (for an executable | ||
136 | work) run the object code and to modify the work, including scripts to | ||
137 | control those activities. However, it does not include the work's | ||
138 | System Libraries, or general-purpose tools or generally available free | ||
139 | programs which are used unmodified in performing those activities but | ||
140 | which are not part of the work. For example, Corresponding Source | ||
141 | includes interface definition files associated with source files for | ||
142 | the work, and the source code for shared libraries and dynamically | ||
143 | linked subprograms that the work is specifically designed to require, | ||
144 | such as by intimate data communication or control flow between those | ||
145 | subprograms and other parts of the work. | ||
146 | |||
147 | The Corresponding Source need not include anything that users | ||
148 | can regenerate automatically from other parts of the Corresponding | ||
149 | Source. | ||
150 | |||
151 | The Corresponding Source for a work in source code form is that | ||
152 | same work. | ||
153 | |||
154 | 2. Basic Permissions. | ||
155 | |||
156 | All rights granted under this License are granted for the term of | ||
157 | copyright on the Program, and are irrevocable provided the stated | ||
158 | conditions are met. This License explicitly affirms your unlimited | ||
159 | permission to run the unmodified Program. The output from running a | ||
160 | covered work is covered by this License only if the output, given its | ||
161 | content, constitutes a covered work. This License acknowledges your | ||
162 | rights of fair use or other equivalent, as provided by copyright law. | ||
163 | |||
164 | You may make, run and propagate covered works that you do not | ||
165 | convey, without conditions so long as your license otherwise remains | ||
166 | in force. You may convey covered works to others for the sole purpose | ||
167 | of having them make modifications exclusively for you, or provide you | ||
168 | with facilities for running those works, provided that you comply with | ||
169 | the terms of this License in conveying all material for which you do | ||
170 | not control copyright. Those thus making or running the covered works | ||
171 | for you must do so exclusively on your behalf, under your direction | ||
172 | and control, on terms that prohibit them from making any copies of | ||
173 | your copyrighted material outside their relationship with you. | ||
174 | |||
175 | Conveying under any other circumstances is permitted solely under | ||
176 | the conditions stated below. Sublicensing is not allowed; section 10 | ||
177 | makes it unnecessary. | ||
178 | |||
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. | ||
180 | |||
181 | No covered work shall be deemed part of an effective technological | ||
182 | measure under any applicable law fulfilling obligations under article | ||
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or | ||
184 | similar laws prohibiting or restricting circumvention of such | ||
185 | measures. | ||
186 | |||
187 | When you convey a covered work, you waive any legal power to forbid | ||
188 | circumvention of technological measures to the extent such circumvention | ||
189 | is effected by exercising rights under this License with respect to | ||
190 | the covered work, and you disclaim any intention to limit operation or | ||
191 | modification of the work as a means of enforcing, against the work's | ||
192 | users, your or third parties' legal rights to forbid circumvention of | ||
193 | technological measures. | ||
194 | |||
195 | 4. Conveying Verbatim Copies. | ||
196 | |||
197 | You may convey verbatim copies of the Program's source code as you | ||
198 | receive it, in any medium, provided that you conspicuously and | ||
199 | appropriately publish on each copy an appropriate copyright notice; | ||
200 | keep intact all notices stating that this License and any | ||
201 | non-permissive terms added in accord with section 7 apply to the code; | ||
202 | keep intact all notices of the absence of any warranty; and give all | ||
203 | recipients a copy of this License along with the Program. | ||
204 | |||
205 | You may charge any price or no price for each copy that you convey, | ||
206 | and you may offer support or warranty protection for a fee. | ||
207 | |||
208 | 5. Conveying Modified Source Versions. | ||
209 | |||
210 | You may convey a work based on the Program, or the modifications to | ||
211 | produce it from the Program, in the form of source code under the | ||
212 | terms of section 4, provided that you also meet all of these conditions: | ||
213 | |||
214 | a) The work must carry prominent notices stating that you modified | ||
215 | it, and giving a relevant date. | ||
216 | |||
217 | b) The work must carry prominent notices stating that it is | ||
218 | released under this License and any conditions added under section | ||
219 | 7. This requirement modifies the requirement in section 4 to | ||
220 | "keep intact all notices". | ||
221 | |||
222 | c) You must license the entire work, as a whole, under this | ||
223 | License to anyone who comes into possession of a copy. This | ||
224 | License will therefore apply, along with any applicable section 7 | ||
225 | additional terms, to the whole of the work, and all its parts, | ||
226 | regardless of how they are packaged. This License gives no | ||
227 | permission to license the work in any other way, but it does not | ||
228 | invalidate such permission if you have separately received it. | ||
229 | |||
230 | d) If the work has interactive user interfaces, each must display | ||
231 | Appropriate Legal Notices; however, if the Program has interactive | ||
232 | interfaces that do not display Appropriate Legal Notices, your | ||
233 | work need not make them do so. | ||
234 | |||
235 | A compilation of a covered work with other separate and independent | ||
236 | works, which are not by their nature extensions of the covered work, | ||
237 | and which are not combined with it such as to form a larger program, | ||
238 | in or on a volume of a storage or distribution medium, is called an | ||
239 | "aggregate" if the compilation and its resulting copyright are not | ||
240 | used to limit the access or legal rights of the compilation's users | ||
241 | beyond what the individual works permit. Inclusion of a covered work | ||
242 | in an aggregate does not cause this License to apply to the other | ||
243 | parts of the aggregate. | ||
244 | |||
245 | 6. Conveying Non-Source Forms. | ||
246 | |||
247 | You may convey a covered work in object code form under the terms | ||
248 | of sections 4 and 5, provided that you also convey the | ||
249 | machine-readable Corresponding Source under the terms of this License, | ||
250 | in one of these ways: | ||
251 | |||
252 | a) Convey the object code in, or embodied in, a physical product | ||
253 | (including a physical distribution medium), accompanied by the | ||
254 | Corresponding Source fixed on a durable physical medium | ||
255 | customarily used for software interchange. | ||
256 | |||
257 | b) Convey the object code in, or embodied in, a physical product | ||
258 | (including a physical distribution medium), accompanied by a | ||
259 | written offer, valid for at least three years and valid for as | ||
260 | long as you offer spare parts or customer support for that product | ||
261 | model, to give anyone who possesses the object code either (1) a | ||
262 | copy of the Corresponding Source for all the software in the | ||
263 | product that is covered by this License, on a durable physical | ||
264 | medium customarily used for software interchange, for a price no | ||
265 | more than your reasonable cost of physically performing this | ||
266 | conveying of source, or (2) access to copy the | ||
267 | Corresponding Source from a network server at no charge. | ||
268 | |||
269 | c) Convey individual copies of the object code with a copy of the | ||
270 | written offer to provide the Corresponding Source. This | ||
271 | alternative is allowed only occasionally and noncommercially, and | ||
272 | only if you received the object code with such an offer, in accord | ||
273 | with subsection 6b. | ||
274 | |||
275 | d) Convey the object code by offering access from a designated | ||
276 | place (gratis or for a charge), and offer equivalent access to the | ||
277 | Corresponding Source in the same way through the same place at no | ||
278 | further charge. You need not require recipients to copy the | ||
279 | Corresponding Source along with the object code. If the place to | ||
280 | copy the object code is a network server, the Corresponding Source | ||
281 | may be on a different server (operated by you or a third party) | ||
282 | that supports equivalent copying facilities, provided you maintain | ||
283 | clear directions next to the object code saying where to find the | ||
284 | Corresponding Source. Regardless of what server hosts the | ||
285 | Corresponding Source, you remain obligated to ensure that it is | ||
286 | available for as long as needed to satisfy these requirements. | ||
287 | |||
288 | e) Convey the object code using peer-to-peer transmission, provided | ||
289 | you inform other peers where the object code and Corresponding | ||
290 | Source of the work are being offered to the general public at no | ||
291 | charge under subsection 6d. | ||
292 | |||
293 | A separable portion of the object code, whose source code is excluded | ||
294 | from the Corresponding Source as a System Library, need not be | ||
295 | included in conveying the object code work. | ||
296 | |||
297 | A "User Product" is either (1) a "consumer product", which means any | ||
298 | tangible personal property which is normally used for personal, family, | ||
299 | or household purposes, or (2) anything designed or sold for incorporation | ||
300 | into a dwelling. In determining whether a product is a consumer product, | ||
301 | doubtful cases shall be resolved in favor of coverage. For a particular | ||
302 | product received by a particular user, "normally used" refers to a | ||
303 | typical or common use of that class of product, regardless of the status | ||
304 | of the particular user or of the way in which the particular user | ||
305 | actually uses, or expects or is expected to use, the product. A product | ||
306 | is a consumer product regardless of whether the product has substantial | ||
307 | commercial, industrial or non-consumer uses, unless such uses represent | ||
308 | the only significant mode of use of the product. | ||
309 | |||
310 | "Installation Information" for a User Product means any methods, | ||
311 | procedures, authorization keys, or other information required to install | ||
312 | and execute modified versions of a covered work in that User Product from | ||
313 | a modified version of its Corresponding Source. The information must | ||
314 | suffice to ensure that the continued functioning of the modified object | ||
315 | code is in no case prevented or interfered with solely because | ||
316 | modification has been made. | ||
317 | |||
318 | If you convey an object code work under this section in, or with, or | ||
319 | specifically for use in, a User Product, and the conveying occurs as | ||
320 | part of a transaction in which the right of possession and use of the | ||
321 | User Product is transferred to the recipient in perpetuity or for a | ||
322 | fixed term (regardless of how the transaction is characterized), the | ||
323 | Corresponding Source conveyed under this section must be accompanied | ||
324 | by the Installation Information. But this requirement does not apply | ||
325 | if neither you nor any third party retains the ability to install | ||
326 | modified object code on the User Product (for example, the work has | ||
327 | been installed in ROM). | ||
328 | |||
329 | The requirement to provide Installation Information does not include a | ||
330 | requirement to continue to provide support service, warranty, or updates | ||
331 | for a work that has been modified or installed by the recipient, or for | ||
332 | the User Product in which it has been modified or installed. Access to a | ||
333 | network may be denied when the modification itself materially and | ||
334 | adversely affects the operation of the network or violates the rules and | ||
335 | protocols for communication across the network. | ||
336 | |||
337 | Corresponding Source conveyed, and Installation Information provided, | ||
338 | in accord with this section must be in a format that is publicly | ||
339 | documented (and with an implementation available to the public in | ||
340 | source code form), and must require no special password or key for | ||
341 | unpacking, reading or copying. | ||
342 | |||
343 | 7. Additional Terms. | ||
344 | |||
345 | "Additional permissions" are terms that supplement the terms of this | ||
346 | License by making exceptions from one or more of its conditions. | ||
347 | Additional permissions that are applicable to the entire Program shall | ||
348 | be treated as though they were included in this License, to the extent | ||
349 | that they are valid under applicable law. If additional permissions | ||
350 | apply only to part of the Program, that part may be used separately | ||
351 | under those permissions, but the entire Program remains governed by | ||
352 | this License without regard to the additional permissions. | ||
353 | |||
354 | When you convey a copy of a covered work, you may at your option | ||
355 | remove any additional permissions from that copy, or from any part of | ||
356 | it. (Additional permissions may be written to require their own | ||
357 | removal in certain cases when you modify the work.) You may place | ||
358 | additional permissions on material, added by you to a covered work, | ||
359 | for which you have or can give appropriate copyright permission. | ||
360 | |||
361 | Notwithstanding any other provision of this License, for material you | ||
362 | add to a covered work, you may (if authorized by the copyright holders of | ||
363 | that material) supplement the terms of this License with terms: | ||
364 | |||
365 | a) Disclaiming warranty or limiting liability differently from the | ||
366 | terms of sections 15 and 16 of this License; or | ||
367 | |||
368 | b) Requiring preservation of specified reasonable legal notices or | ||
369 | author attributions in that material or in the Appropriate Legal | ||
370 | Notices displayed by works containing it; or | ||
371 | |||
372 | c) Prohibiting misrepresentation of the origin of that material, or | ||
373 | requiring that modified versions of such material be marked in | ||
374 | reasonable ways as different from the original version; or | ||
375 | |||
376 | d) Limiting the use for publicity purposes of names of licensors or | ||
377 | authors of the material; or | ||
378 | |||
379 | e) Declining to grant rights under trademark law for use of some | ||
380 | trade names, trademarks, or service marks; or | ||
381 | |||
382 | f) Requiring indemnification of licensors and authors of that | ||
383 | material by anyone who conveys the material (or modified versions of | ||
384 | it) with contractual assumptions of liability to the recipient, for | ||
385 | any liability that these contractual assumptions directly impose on | ||
386 | those licensors and authors. | ||
387 | |||
388 | All other non-permissive additional terms are considered "further | ||
389 | restrictions" within the meaning of section 10. If the Program as you | ||
390 | received it, or any part of it, contains a notice stating that it is | ||
391 | governed by this License along with a term that is a further | ||
392 | restriction, you may remove that term. If a license document contains | ||
393 | a further restriction but permits relicensing or conveying under this | ||
394 | License, you may add to a covered work material governed by the terms | ||
395 | of that license document, provided that the further restriction does | ||
396 | not survive such relicensing or conveying. | ||
397 | |||
398 | If you add terms to a covered work in accord with this section, you | ||
399 | must place, in the relevant source files, a statement of the | ||
400 | additional terms that apply to those files, or a notice indicating | ||
401 | where to find the applicable terms. | ||
402 | |||
403 | Additional terms, permissive or non-permissive, may be stated in the | ||
404 | form of a separately written license, or stated as exceptions; | ||
405 | the above requirements apply either way. | ||
406 | |||
407 | 8. Termination. | ||
408 | |||
409 | You may not propagate or modify a covered work except as expressly | ||
410 | provided under this License. Any attempt otherwise to propagate or | ||
411 | modify it is void, and will automatically terminate your rights under | ||
412 | this License (including any patent licenses granted under the third | ||
413 | paragraph of section 11). | ||
414 | |||
415 | However, if you cease all violation of this License, then your | ||
416 | license from a particular copyright holder is reinstated (a) | ||
417 | provisionally, unless and until the copyright holder explicitly and | ||
418 | finally terminates your license, and (b) permanently, if the copyright | ||
419 | holder fails to notify you of the violation by some reasonable means | ||
420 | prior to 60 days after the cessation. | ||
421 | |||
422 | Moreover, your license from a particular copyright holder is | ||
423 | reinstated permanently if the copyright holder notifies you of the | ||
424 | violation by some reasonable means, this is the first time you have | ||
425 | received notice of violation of this License (for any work) from that | ||
426 | copyright holder, and you cure the violation prior to 30 days after | ||
427 | your receipt of the notice. | ||
428 | |||
429 | Termination of your rights under this section does not terminate the | ||
430 | licenses of parties who have received copies or rights from you under | ||
431 | this License. If your rights have been terminated and not permanently | ||
432 | reinstated, you do not qualify to receive new licenses for the same | ||
433 | material under section 10. | ||
434 | |||
435 | 9. Acceptance Not Required for Having Copies. | ||
436 | |||
437 | You are not required to accept this License in order to receive or | ||
438 | run a copy of the Program. Ancillary propagation of a covered work | ||
439 | occurring solely as a consequence of using peer-to-peer transmission | ||
440 | to receive a copy likewise does not require acceptance. However, | ||
441 | nothing other than this License grants you permission to propagate or | ||
442 | modify any covered work. These actions infringe copyright if you do | ||
443 | not accept this License. Therefore, by modifying or propagating a | ||
444 | covered work, you indicate your acceptance of this License to do so. | ||
445 | |||
446 | 10. Automatic Licensing of Downstream Recipients. | ||
447 | |||
448 | Each time you convey a covered work, the recipient automatically | ||
449 | receives a license from the original licensors, to run, modify and | ||
450 | propagate that work, subject to this License. You are not responsible | ||
451 | for enforcing compliance by third parties with this License. | ||
452 | |||
453 | An "entity transaction" is a transaction transferring control of an | ||
454 | organization, or substantially all assets of one, or subdividing an | ||
455 | organization, or merging organizations. If propagation of a covered | ||
456 | work results from an entity transaction, each party to that | ||
457 | transaction who receives a copy of the work also receives whatever | ||
458 | licenses to the work the party's predecessor in interest had or could | ||
459 | give under the previous paragraph, plus a right to possession of the | ||
460 | Corresponding Source of the work from the predecessor in interest, if | ||
461 | the predecessor has it or can get it with reasonable efforts. | ||
462 | |||
463 | You may not impose any further restrictions on the exercise of the | ||
464 | rights granted or affirmed under this License. For example, you may | ||
465 | not impose a license fee, royalty, or other charge for exercise of | ||
466 | rights granted under this License, and you may not initiate litigation | ||
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that | ||
468 | any patent claim is infringed by making, using, selling, offering for | ||
469 | sale, or importing the Program or any portion of it. | ||
470 | |||
471 | 11. Patents. | ||
472 | |||
473 | A "contributor" is a copyright holder who authorizes use under this | ||
474 | License of the Program or a work on which the Program is based. The | ||
475 | work thus licensed is called the contributor's "contributor version". | ||
476 | |||
477 | A contributor's "essential patent claims" are all patent claims | ||
478 | owned or controlled by the contributor, whether already acquired or | ||
479 | hereafter acquired, that would be infringed by some manner, permitted | ||
480 | by this License, of making, using, or selling its contributor version, | ||
481 | but do not include claims that would be infringed only as a | ||
482 | consequence of further modification of the contributor version. For | ||
483 | purposes of this definition, "control" includes the right to grant | ||
484 | patent sublicenses in a manner consistent with the requirements of | ||
485 | this License. | ||
486 | |||
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free | ||
488 | patent license under the contributor's essential patent claims, to | ||
489 | make, use, sell, offer for sale, import and otherwise run, modify and | ||
490 | propagate the contents of its contributor version. | ||
491 | |||
492 | In the following three paragraphs, a "patent license" is any express | ||
493 | agreement or commitment, however denominated, not to enforce a patent | ||
494 | (such as an express permission to practice a patent or covenant not to | ||
495 | sue for patent infringement). To "grant" such a patent license to a | ||
496 | party means to make such an agreement or commitment not to enforce a | ||
497 | patent against the party. | ||
498 | |||
499 | If you convey a covered work, knowingly relying on a patent license, | ||
500 | and the Corresponding Source of the work is not available for anyone | ||
501 | to copy, free of charge and under the terms of this License, through a | ||
502 | publicly available network server or other readily accessible means, | ||
503 | then you must either (1) cause the Corresponding Source to be so | ||
504 | available, or (2) arrange to deprive yourself of the benefit of the | ||
505 | patent license for this particular work, or (3) arrange, in a manner | ||
506 | consistent with the requirements of this License, to extend the patent | ||
507 | license to downstream recipients. "Knowingly relying" means you have | ||
508 | actual knowledge that, but for the patent license, your conveying the | ||
509 | covered work in a country, or your recipient's use of the covered work | ||
510 | in a country, would infringe one or more identifiable patents in that | ||
511 | country that you have reason to believe are valid. | ||
512 | |||
513 | If, pursuant to or in connection with a single transaction or | ||
514 | arrangement, you convey, or propagate by procuring conveyance of, a | ||
515 | covered work, and grant a patent license to some of the parties | ||
516 | receiving the covered work authorizing them to use, propagate, modify | ||
517 | or convey a specific copy of the covered work, then the patent license | ||
518 | you grant is automatically extended to all recipients of the covered | ||
519 | work and works based on it. | ||
520 | |||
521 | A patent license is "discriminatory" if it does not include within | ||
522 | the scope of its coverage, prohibits the exercise of, or is | ||
523 | conditioned on the non-exercise of one or more of the rights that are | ||
524 | specifically granted under this License. You may not convey a covered | ||
525 | work if you are a party to an arrangement with a third party that is | ||
526 | in the business of distributing software, under which you make payment | ||
527 | to the third party based on the extent of your activity of conveying | ||
528 | the work, and under which the third party grants, to any of the | ||
529 | parties who would receive the covered work from you, a discriminatory | ||
530 | patent license (a) in connection with copies of the covered work | ||
531 | conveyed by you (or copies made from those copies), or (b) primarily | ||
532 | for and in connection with specific products or compilations that | ||
533 | contain the covered work, unless you entered into that arrangement, | ||
534 | or that patent license was granted, prior to 28 March 2007. | ||
535 | |||
536 | Nothing in this License shall be construed as excluding or limiting | ||
537 | any implied license or other defenses to infringement that may | ||
538 | otherwise be available to you under applicable patent law. | ||
539 | |||
540 | 12. No Surrender of Others' Freedom. | ||
541 | |||
542 | If conditions are imposed on you (whether by court order, agreement or | ||
543 | otherwise) that contradict the conditions of this License, they do not | ||
544 | excuse you from the conditions of this License. If you cannot convey a | ||
545 | covered work so as to satisfy simultaneously your obligations under this | ||
546 | License and any other pertinent obligations, then as a consequence you may | ||
547 | not convey it at all. For example, if you agree to terms that obligate you | ||
548 | to collect a royalty for further conveying from those to whom you convey | ||
549 | the Program, the only way you could satisfy both those terms and this | ||
550 | License would be to refrain entirely from conveying the Program. | ||
551 | |||
552 | 13. Use with the GNU Affero General Public License. | ||
553 | |||
554 | Notwithstanding any other provision of this License, you have | ||
555 | permission to link or combine any covered work with a work licensed | ||
556 | under version 3 of the GNU Affero General Public License into a single | ||
557 | combined work, and to convey the resulting work. The terms of this | ||
558 | License will continue to apply to the part which is the covered work, | ||
559 | but the special requirements of the GNU Affero General Public License, | ||
560 | section 13, concerning interaction through a network will apply to the | ||
561 | combination as such. | ||
562 | |||
563 | 14. Revised Versions of this License. | ||
564 | |||
565 | The Free Software Foundation may publish revised and/or new versions of | ||
566 | the GNU General Public License from time to time. Such new versions will | ||
567 | be similar in spirit to the present version, but may differ in detail to | ||
568 | address new problems or concerns. | ||
569 | |||
570 | Each version is given a distinguishing version number. If the | ||
571 | Program specifies that a certain numbered version of the GNU General | ||
572 | Public License "or any later version" applies to it, you have the | ||
573 | option of following the terms and conditions either of that numbered | ||
574 | version or of any later version published by the Free Software | ||
575 | Foundation. If the Program does not specify a version number of the | ||
576 | GNU General Public License, you may choose any version ever published | ||
577 | by the Free Software Foundation. | ||
578 | |||
579 | If the Program specifies that a proxy can decide which future | ||
580 | versions of the GNU General Public License can be used, that proxy's | ||
581 | public statement of acceptance of a version permanently authorizes you | ||
582 | to choose that version for the Program. | ||
583 | |||
584 | Later license versions may give you additional or different | ||
585 | permissions. However, no additional obligations are imposed on any | ||
586 | author or copyright holder as a result of your choosing to follow a | ||
587 | later version. | ||
588 | |||
589 | 15. Disclaimer of Warranty. | ||
590 | |||
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY | ||
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT | ||
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY | ||
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, | ||
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM | ||
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | ||
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||
599 | |||
600 | 16. Limitation of Liability. | ||
601 | |||
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS | ||
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | ||
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE | ||
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF | ||
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD | ||
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), | ||
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF | ||
610 | SUCH DAMAGES. | ||
611 | |||
612 | 17. Interpretation of Sections 15 and 16. | ||
613 | |||
614 | If the disclaimer of warranty and limitation of liability provided | ||
615 | above cannot be given local legal effect according to their terms, | ||
616 | reviewing courts shall apply local law that most closely approximates | ||
617 | an absolute waiver of all civil liability in connection with the | ||
618 | Program, unless a warranty or assumption of liability accompanies a | ||
619 | copy of the Program in return for a fee. | ||
620 | |||
621 | END OF TERMS AND CONDITIONS | ||
622 | |||
623 | How to Apply These Terms to Your New Programs | ||
624 | |||
625 | If you develop a new program, and you want it to be of the greatest | ||
626 | possible use to the public, the best way to achieve this is to make it | ||
627 | free software which everyone can redistribute and change under these terms. | ||
628 | |||
629 | To do so, attach the following notices to the program. It is safest | ||
630 | to attach them to the start of each source file to most effectively | ||
631 | state the exclusion of warranty; and each file should have at least | ||
632 | the "copyright" line and a pointer to where the full notice is found. | ||
633 | |||
634 | <one line to give the program's name and a brief idea of what it does.> | ||
635 | Copyright (C) <year> <name of author> | ||
636 | |||
637 | This program is free software: you can redistribute it and/or modify | ||
638 | it under the terms of the GNU General Public License as published by | ||
639 | the Free Software Foundation, either version 3 of the License, or | ||
640 | (at your option) any later version. | ||
641 | |||
642 | This program is distributed in the hope that it will be useful, | ||
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
645 | GNU General Public License for more details. | ||
646 | |||
647 | You should have received a copy of the GNU General Public License | ||
648 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
649 | |||
650 | Also add information on how to contact you by electronic and paper mail. | ||
651 | |||
652 | If the program does terminal interaction, make it output a short | ||
653 | notice like this when it starts in an interactive mode: | ||
654 | |||
655 | <program> Copyright (C) <year> <name of author> | ||
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||
657 | This is free software, and you are welcome to redistribute it | ||
658 | under certain conditions; type `show c' for details. | ||
659 | |||
660 | The hypothetical commands `show w' and `show c' should show the appropriate | ||
661 | parts of the General Public License. Of course, your program's commands | ||
662 | might be different; for a GUI interface, you would use an "about box". | ||
663 | |||
664 | You should also get your employer (if you work as a programmer) or school, | ||
665 | if any, to sign a "copyright disclaimer" for the program, if necessary. | ||
666 | For more information on this, and how to apply and follow the GNU GPL, see | ||
667 | <http://www.gnu.org/licenses/>. | ||
668 | |||
669 | The GNU General Public License does not permit incorporating your program | ||
670 | into proprietary programs. If your program is a subroutine library, you | ||
671 | may consider it more useful to permit linking proprietary applications with | ||
672 | the library. If this is what you want to do, use the GNU Lesser General | ||
673 | Public License instead of this License. But first, please read | ||
674 | <http://www.gnu.org/philosophy/why-not-lgpl.html>. | ||
diff --git a/packages/glpk/examples/simplex1.hs b/packages/glpk/examples/simplex1.hs index e7aeaa9..a326555 100644 --- a/packages/glpk/examples/simplex1.hs +++ b/packages/glpk/examples/simplex1.hs | |||
@@ -9,9 +9,9 @@ constr = Dense [ [1,1,1] :<=: 100 | |||
9 | , [2,2,6] :<=: 300 ] | 9 | , [2,2,6] :<=: 300 ] |
10 | 10 | ||
11 | -- default bounds | 11 | -- default bounds |
12 | bnds = [ 1 :=>: 0 | 12 | bnds = [ 1 :>=: 0 |
13 | , 2 :=>: 0 | 13 | , 2 :>=: 0 |
14 | , 3 :=>: 0 ] | 14 | , 3 :>=: 0 ] |
15 | 15 | ||
16 | main = do | 16 | main = do |
17 | print $ simplex objFun constr [] | 17 | print $ simplex objFun constr [] |
diff --git a/packages/glpk/examples/simplex2.hs b/packages/glpk/examples/simplex2.hs index f4e27fd..e9e8859 100644 --- a/packages/glpk/examples/simplex2.hs +++ b/packages/glpk/examples/simplex2.hs | |||
@@ -13,6 +13,6 @@ constr2 = Dense [ [2,1,0] :<=: 10 | |||
13 | main = do | 13 | main = do |
14 | print $ simplex prob constr1 [] | 14 | print $ simplex prob constr1 [] |
15 | print $ simplex prob constr2 [] | 15 | print $ simplex prob constr2 [] |
16 | print $ simplex prob constr2 [ 2 :=>: 1, 3 :&: (2,7)] | 16 | print $ simplex prob constr2 [ 2 :>=: 1, 3 :&: (2,7)] |
17 | print $ simplex prob constr2 [ Free 2 ] | 17 | print $ simplex prob constr2 [ Free 2 ] |
18 | 18 | ||
diff --git a/packages/glpk/examples/simplex3.hs b/packages/glpk/examples/simplex3.hs index e093124..0997320 100644 --- a/packages/glpk/examples/simplex3.hs +++ b/packages/glpk/examples/simplex3.hs | |||
@@ -11,7 +11,7 @@ constr = Dense | |||
11 | , [0.03, 0.05, 0.08, 0.02, 0.06, 0.01, 0] :<=: 100 | 11 | , [0.03, 0.05, 0.08, 0.02, 0.06, 0.01, 0] :<=: 100 |
12 | , [0.02, 0.04, 0.01, 0.02, 0.02, 0, 0] :<=: 40 | 12 | , [0.02, 0.04, 0.01, 0.02, 0.02, 0, 0] :<=: 40 |
13 | , [0.02, 0.03, 0, 0, 0.01, 0, 0] :<=: 30 | 13 | , [0.02, 0.03, 0, 0, 0.01, 0, 0] :<=: 30 |
14 | , [0.7, 0.75, 0.8, 0.75, 0.8, 0.97, 0] :=>: 1500 | 14 | , [0.7, 0.75, 0.8, 0.75, 0.8, 0.97, 0] :>=: 1500 |
15 | , [0.02, 0.06, 0.08, 0.12, 0.02, 0.01, 0.97] :&: (250,300) | 15 | , [0.02, 0.06, 0.08, 0.12, 0.02, 0.01, 0.97] :&: (250,300) |
16 | ] | 16 | ] |
17 | 17 | ||
diff --git a/packages/glpk/examples/simplex4.hs b/packages/glpk/examples/simplex4.hs index 9a205ad..22b131c 100644 --- a/packages/glpk/examples/simplex4.hs +++ b/packages/glpk/examples/simplex4.hs | |||
@@ -11,7 +11,7 @@ constr = Sparse | |||
11 | , [0.03#1, 0.05#2, 0.08#3, 0.02#4, 0.06#5, 0.01#6] :<=: 100 | 11 | , [0.03#1, 0.05#2, 0.08#3, 0.02#4, 0.06#5, 0.01#6] :<=: 100 |
12 | , [0.02#1, 0.04#2, 0.01#3, 0.02#4, 0.02#5] :<=: 40 | 12 | , [0.02#1, 0.04#2, 0.01#3, 0.02#4, 0.02#5] :<=: 40 |
13 | , [0.02#1, 0.03#2, 0.01#5] :<=: 30 | 13 | , [0.02#1, 0.03#2, 0.01#5] :<=: 30 |
14 | , [0.7#1, 0.75#2, 0.8#3, 0.75#4, 0.8#5, 0.97#6] :=>: 1500 | 14 | , [0.7#1, 0.75#2, 0.8#3, 0.75#4, 0.8#5, 0.97#6] :>=: 1500 |
15 | , [0.02#1, 0.06#2, 0.08#3, 0.12#4, 0.02#5, 0.01#6, 0.97#7] :&: (250,300) | 15 | , [0.02#1, 0.06#2, 0.08#3, 0.12#4, 0.02#5, 0.01#6, 0.97#7] :&: (250,300) |
16 | ] | 16 | ] |
17 | 17 | ||
diff --git a/packages/glpk/hmatrix-glpk.cabal b/packages/glpk/hmatrix-glpk.cabal index 646c73c..cd761e0 100644 --- a/packages/glpk/hmatrix-glpk.cabal +++ b/packages/glpk/hmatrix-glpk.cabal | |||
@@ -1,5 +1,5 @@ | |||
1 | Name: hmatrix-glpk | 1 | Name: hmatrix-glpk |
2 | Version: 0.4.0 | 2 | Version: 0.4.0.2 |
3 | License: GPL | 3 | License: GPL |
4 | License-file: LICENSE | 4 | License-file: LICENSE |
5 | Author: Alberto Ruiz | 5 | Author: Alberto Ruiz |
diff --git a/packages/glpk/src/Numeric/LinearProgramming.hs b/packages/glpk/src/Numeric/LinearProgramming.hs index 5de8577..b0537cc 100644 --- a/packages/glpk/src/Numeric/LinearProgramming.hs +++ b/packages/glpk/src/Numeric/LinearProgramming.hs | |||
@@ -17,7 +17,8 @@ maximize 4 x_1 - 3 x_2 + 2 x_3 | |||
17 | subject to | 17 | subject to |
18 | 18 | ||
19 | 2 x_1 + x_2 <= 10 | 19 | 2 x_1 + x_2 <= 10 |
20 | x_3 + 5 x_4 <= 20 | 20 | |
21 | x_2 + 5 x_3 <= 20 | ||
21 | 22 | ||
22 | and | 23 | and |
23 | 24 | ||
diff --git a/packages/gsl/LICENSE b/packages/gsl/LICENSE index 3f67c2a..94a9ed0 100644 --- a/packages/gsl/LICENSE +++ b/packages/gsl/LICENSE | |||
@@ -1,2 +1,674 @@ | |||
1 | Copyright Alberto Ruiz 2006-2007 | 1 | GNU GENERAL PUBLIC LICENSE |
2 | GPL license | 2 | Version 3, 29 June 2007 |
3 | |||
4 | Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||
5 | Everyone is permitted to copy and distribute verbatim copies | ||
6 | of this license document, but changing it is not allowed. | ||
7 | |||
8 | Preamble | ||
9 | |||
10 | The GNU General Public License is a free, copyleft license for | ||
11 | software and other kinds of works. | ||
12 | |||
13 | The licenses for most software and other practical works are designed | ||
14 | to take away your freedom to share and change the works. By contrast, | ||
15 | the GNU General Public License is intended to guarantee your freedom to | ||
16 | share and change all versions of a program--to make sure it remains free | ||
17 | software for all its users. We, the Free Software Foundation, use the | ||
18 | GNU General Public License for most of our software; it applies also to | ||
19 | any other work released this way by its authors. You can apply it to | ||
20 | your programs, too. | ||
21 | |||
22 | When we speak of free software, we are referring to freedom, not | ||
23 | price. Our General Public Licenses are designed to make sure that you | ||
24 | have the freedom to distribute copies of free software (and charge for | ||
25 | them if you wish), that you receive source code or can get it if you | ||
26 | want it, that you can change the software or use pieces of it in new | ||
27 | free programs, and that you know you can do these things. | ||
28 | |||
29 | To protect your rights, we need to prevent others from denying you | ||
30 | these rights or asking you to surrender the rights. Therefore, you have | ||
31 | certain responsibilities if you distribute copies of the software, or if | ||
32 | you modify it: responsibilities to respect the freedom of others. | ||
33 | |||
34 | For example, if you distribute copies of such a program, whether | ||
35 | gratis or for a fee, you must pass on to the recipients the same | ||
36 | freedoms that you received. You must make sure that they, too, receive | ||
37 | or can get the source code. And you must show them these terms so they | ||
38 | know their rights. | ||
39 | |||
40 | Developers that use the GNU GPL protect your rights with two steps: | ||
41 | (1) assert copyright on the software, and (2) offer you this License | ||
42 | giving you legal permission to copy, distribute and/or modify it. | ||
43 | |||
44 | For the developers' and authors' protection, the GPL clearly explains | ||
45 | that there is no warranty for this free software. For both users' and | ||
46 | authors' sake, the GPL requires that modified versions be marked as | ||
47 | changed, so that their problems will not be attributed erroneously to | ||
48 | authors of previous versions. | ||
49 | |||
50 | Some devices are designed to deny users access to install or run | ||
51 | modified versions of the software inside them, although the manufacturer | ||
52 | can do so. This is fundamentally incompatible with the aim of | ||
53 | protecting users' freedom to change the software. The systematic | ||
54 | pattern of such abuse occurs in the area of products for individuals to | ||
55 | use, which is precisely where it is most unacceptable. Therefore, we | ||
56 | have designed this version of the GPL to prohibit the practice for those | ||
57 | products. If such problems arise substantially in other domains, we | ||
58 | stand ready to extend this provision to those domains in future versions | ||
59 | of the GPL, as needed to protect the freedom of users. | ||
60 | |||
61 | Finally, every program is threatened constantly by software patents. | ||
62 | States should not allow patents to restrict development and use of | ||
63 | software on general-purpose computers, but in those that do, we wish to | ||
64 | avoid the special danger that patents applied to a free program could | ||
65 | make it effectively proprietary. To prevent this, the GPL assures that | ||
66 | patents cannot be used to render the program non-free. | ||
67 | |||
68 | The precise terms and conditions for copying, distribution and | ||
69 | modification follow. | ||
70 | |||
71 | TERMS AND CONDITIONS | ||
72 | |||
73 | 0. Definitions. | ||
74 | |||
75 | "This License" refers to version 3 of the GNU General Public License. | ||
76 | |||
77 | "Copyright" also means copyright-like laws that apply to other kinds of | ||
78 | works, such as semiconductor masks. | ||
79 | |||
80 | "The Program" refers to any copyrightable work licensed under this | ||
81 | License. Each licensee is addressed as "you". "Licensees" and | ||
82 | "recipients" may be individuals or organizations. | ||
83 | |||
84 | To "modify" a work means to copy from or adapt all or part of the work | ||
85 | in a fashion requiring copyright permission, other than the making of an | ||
86 | exact copy. The resulting work is called a "modified version" of the | ||
87 | earlier work or a work "based on" the earlier work. | ||
88 | |||
89 | A "covered work" means either the unmodified Program or a work based | ||
90 | on the Program. | ||
91 | |||
92 | To "propagate" a work means to do anything with it that, without | ||
93 | permission, would make you directly or secondarily liable for | ||
94 | infringement under applicable copyright law, except executing it on a | ||
95 | computer or modifying a private copy. Propagation includes copying, | ||
96 | distribution (with or without modification), making available to the | ||
97 | public, and in some countries other activities as well. | ||
98 | |||
99 | To "convey" a work means any kind of propagation that enables other | ||
100 | parties to make or receive copies. Mere interaction with a user through | ||
101 | a computer network, with no transfer of a copy, is not conveying. | ||
102 | |||
103 | An interactive user interface displays "Appropriate Legal Notices" | ||
104 | to the extent that it includes a convenient and prominently visible | ||
105 | feature that (1) displays an appropriate copyright notice, and (2) | ||
106 | tells the user that there is no warranty for the work (except to the | ||
107 | extent that warranties are provided), that licensees may convey the | ||
108 | work under this License, and how to view a copy of this License. If | ||
109 | the interface presents a list of user commands or options, such as a | ||
110 | menu, a prominent item in the list meets this criterion. | ||
111 | |||
112 | 1. Source Code. | ||
113 | |||
114 | The "source code" for a work means the preferred form of the work | ||
115 | for making modifications to it. "Object code" means any non-source | ||
116 | form of a work. | ||
117 | |||
118 | A "Standard Interface" means an interface that either is an official | ||
119 | standard defined by a recognized standards body, or, in the case of | ||
120 | interfaces specified for a particular programming language, one that | ||
121 | is widely used among developers working in that language. | ||
122 | |||
123 | The "System Libraries" of an executable work include anything, other | ||
124 | than the work as a whole, that (a) is included in the normal form of | ||
125 | packaging a Major Component, but which is not part of that Major | ||
126 | Component, and (b) serves only to enable use of the work with that | ||
127 | Major Component, or to implement a Standard Interface for which an | ||
128 | implementation is available to the public in source code form. A | ||
129 | "Major Component", in this context, means a major essential component | ||
130 | (kernel, window system, and so on) of the specific operating system | ||
131 | (if any) on which the executable work runs, or a compiler used to | ||
132 | produce the work, or an object code interpreter used to run it. | ||
133 | |||
134 | The "Corresponding Source" for a work in object code form means all | ||
135 | the source code needed to generate, install, and (for an executable | ||
136 | work) run the object code and to modify the work, including scripts to | ||
137 | control those activities. However, it does not include the work's | ||
138 | System Libraries, or general-purpose tools or generally available free | ||
139 | programs which are used unmodified in performing those activities but | ||
140 | which are not part of the work. For example, Corresponding Source | ||
141 | includes interface definition files associated with source files for | ||
142 | the work, and the source code for shared libraries and dynamically | ||
143 | linked subprograms that the work is specifically designed to require, | ||
144 | such as by intimate data communication or control flow between those | ||
145 | subprograms and other parts of the work. | ||
146 | |||
147 | The Corresponding Source need not include anything that users | ||
148 | can regenerate automatically from other parts of the Corresponding | ||
149 | Source. | ||
150 | |||
151 | The Corresponding Source for a work in source code form is that | ||
152 | same work. | ||
153 | |||
154 | 2. Basic Permissions. | ||
155 | |||
156 | All rights granted under this License are granted for the term of | ||
157 | copyright on the Program, and are irrevocable provided the stated | ||
158 | conditions are met. This License explicitly affirms your unlimited | ||
159 | permission to run the unmodified Program. The output from running a | ||
160 | covered work is covered by this License only if the output, given its | ||
161 | content, constitutes a covered work. This License acknowledges your | ||
162 | rights of fair use or other equivalent, as provided by copyright law. | ||
163 | |||
164 | You may make, run and propagate covered works that you do not | ||
165 | convey, without conditions so long as your license otherwise remains | ||
166 | in force. You may convey covered works to others for the sole purpose | ||
167 | of having them make modifications exclusively for you, or provide you | ||
168 | with facilities for running those works, provided that you comply with | ||
169 | the terms of this License in conveying all material for which you do | ||
170 | not control copyright. Those thus making or running the covered works | ||
171 | for you must do so exclusively on your behalf, under your direction | ||
172 | and control, on terms that prohibit them from making any copies of | ||
173 | your copyrighted material outside their relationship with you. | ||
174 | |||
175 | Conveying under any other circumstances is permitted solely under | ||
176 | the conditions stated below. Sublicensing is not allowed; section 10 | ||
177 | makes it unnecessary. | ||
178 | |||
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. | ||
180 | |||
181 | No covered work shall be deemed part of an effective technological | ||
182 | measure under any applicable law fulfilling obligations under article | ||
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or | ||
184 | similar laws prohibiting or restricting circumvention of such | ||
185 | measures. | ||
186 | |||
187 | When you convey a covered work, you waive any legal power to forbid | ||
188 | circumvention of technological measures to the extent such circumvention | ||
189 | is effected by exercising rights under this License with respect to | ||
190 | the covered work, and you disclaim any intention to limit operation or | ||
191 | modification of the work as a means of enforcing, against the work's | ||
192 | users, your or third parties' legal rights to forbid circumvention of | ||
193 | technological measures. | ||
194 | |||
195 | 4. Conveying Verbatim Copies. | ||
196 | |||
197 | You may convey verbatim copies of the Program's source code as you | ||
198 | receive it, in any medium, provided that you conspicuously and | ||
199 | appropriately publish on each copy an appropriate copyright notice; | ||
200 | keep intact all notices stating that this License and any | ||
201 | non-permissive terms added in accord with section 7 apply to the code; | ||
202 | keep intact all notices of the absence of any warranty; and give all | ||
203 | recipients a copy of this License along with the Program. | ||
204 | |||
205 | You may charge any price or no price for each copy that you convey, | ||
206 | and you may offer support or warranty protection for a fee. | ||
207 | |||
208 | 5. Conveying Modified Source Versions. | ||
209 | |||
210 | You may convey a work based on the Program, or the modifications to | ||
211 | produce it from the Program, in the form of source code under the | ||
212 | terms of section 4, provided that you also meet all of these conditions: | ||
213 | |||
214 | a) The work must carry prominent notices stating that you modified | ||
215 | it, and giving a relevant date. | ||
216 | |||
217 | b) The work must carry prominent notices stating that it is | ||
218 | released under this License and any conditions added under section | ||
219 | 7. This requirement modifies the requirement in section 4 to | ||
220 | "keep intact all notices". | ||
221 | |||
222 | c) You must license the entire work, as a whole, under this | ||
223 | License to anyone who comes into possession of a copy. This | ||
224 | License will therefore apply, along with any applicable section 7 | ||
225 | additional terms, to the whole of the work, and all its parts, | ||
226 | regardless of how they are packaged. This License gives no | ||
227 | permission to license the work in any other way, but it does not | ||
228 | invalidate such permission if you have separately received it. | ||
229 | |||
230 | d) If the work has interactive user interfaces, each must display | ||
231 | Appropriate Legal Notices; however, if the Program has interactive | ||
232 | interfaces that do not display Appropriate Legal Notices, your | ||
233 | work need not make them do so. | ||
234 | |||
235 | A compilation of a covered work with other separate and independent | ||
236 | works, which are not by their nature extensions of the covered work, | ||
237 | and which are not combined with it such as to form a larger program, | ||
238 | in or on a volume of a storage or distribution medium, is called an | ||
239 | "aggregate" if the compilation and its resulting copyright are not | ||
240 | used to limit the access or legal rights of the compilation's users | ||
241 | beyond what the individual works permit. Inclusion of a covered work | ||
242 | in an aggregate does not cause this License to apply to the other | ||
243 | parts of the aggregate. | ||
244 | |||
245 | 6. Conveying Non-Source Forms. | ||
246 | |||
247 | You may convey a covered work in object code form under the terms | ||
248 | of sections 4 and 5, provided that you also convey the | ||
249 | machine-readable Corresponding Source under the terms of this License, | ||
250 | in one of these ways: | ||
251 | |||
252 | a) Convey the object code in, or embodied in, a physical product | ||
253 | (including a physical distribution medium), accompanied by the | ||
254 | Corresponding Source fixed on a durable physical medium | ||
255 | customarily used for software interchange. | ||
256 | |||
257 | b) Convey the object code in, or embodied in, a physical product | ||
258 | (including a physical distribution medium), accompanied by a | ||
259 | written offer, valid for at least three years and valid for as | ||
260 | long as you offer spare parts or customer support for that product | ||
261 | model, to give anyone who possesses the object code either (1) a | ||
262 | copy of the Corresponding Source for all the software in the | ||
263 | product that is covered by this License, on a durable physical | ||
264 | medium customarily used for software interchange, for a price no | ||
265 | more than your reasonable cost of physically performing this | ||
266 | conveying of source, or (2) access to copy the | ||
267 | Corresponding Source from a network server at no charge. | ||
268 | |||
269 | c) Convey individual copies of the object code with a copy of the | ||
270 | written offer to provide the Corresponding Source. This | ||
271 | alternative is allowed only occasionally and noncommercially, and | ||
272 | only if you received the object code with such an offer, in accord | ||
273 | with subsection 6b. | ||
274 | |||
275 | d) Convey the object code by offering access from a designated | ||
276 | place (gratis or for a charge), and offer equivalent access to the | ||
277 | Corresponding Source in the same way through the same place at no | ||
278 | further charge. You need not require recipients to copy the | ||
279 | Corresponding Source along with the object code. If the place to | ||
280 | copy the object code is a network server, the Corresponding Source | ||
281 | may be on a different server (operated by you or a third party) | ||
282 | that supports equivalent copying facilities, provided you maintain | ||
283 | clear directions next to the object code saying where to find the | ||
284 | Corresponding Source. Regardless of what server hosts the | ||
285 | Corresponding Source, you remain obligated to ensure that it is | ||
286 | available for as long as needed to satisfy these requirements. | ||
287 | |||
288 | e) Convey the object code using peer-to-peer transmission, provided | ||
289 | you inform other peers where the object code and Corresponding | ||
290 | Source of the work are being offered to the general public at no | ||
291 | charge under subsection 6d. | ||
292 | |||
293 | A separable portion of the object code, whose source code is excluded | ||
294 | from the Corresponding Source as a System Library, need not be | ||
295 | included in conveying the object code work. | ||
296 | |||
297 | A "User Product" is either (1) a "consumer product", which means any | ||
298 | tangible personal property which is normally used for personal, family, | ||
299 | or household purposes, or (2) anything designed or sold for incorporation | ||
300 | into a dwelling. In determining whether a product is a consumer product, | ||
301 | doubtful cases shall be resolved in favor of coverage. For a particular | ||
302 | product received by a particular user, "normally used" refers to a | ||
303 | typical or common use of that class of product, regardless of the status | ||
304 | of the particular user or of the way in which the particular user | ||
305 | actually uses, or expects or is expected to use, the product. A product | ||
306 | is a consumer product regardless of whether the product has substantial | ||
307 | commercial, industrial or non-consumer uses, unless such uses represent | ||
308 | the only significant mode of use of the product. | ||
309 | |||
310 | "Installation Information" for a User Product means any methods, | ||
311 | procedures, authorization keys, or other information required to install | ||
312 | and execute modified versions of a covered work in that User Product from | ||
313 | a modified version of its Corresponding Source. The information must | ||
314 | suffice to ensure that the continued functioning of the modified object | ||
315 | code is in no case prevented or interfered with solely because | ||
316 | modification has been made. | ||
317 | |||
318 | If you convey an object code work under this section in, or with, or | ||
319 | specifically for use in, a User Product, and the conveying occurs as | ||
320 | part of a transaction in which the right of possession and use of the | ||
321 | User Product is transferred to the recipient in perpetuity or for a | ||
322 | fixed term (regardless of how the transaction is characterized), the | ||
323 | Corresponding Source conveyed under this section must be accompanied | ||
324 | by the Installation Information. But this requirement does not apply | ||
325 | if neither you nor any third party retains the ability to install | ||
326 | modified object code on the User Product (for example, the work has | ||
327 | been installed in ROM). | ||
328 | |||
329 | The requirement to provide Installation Information does not include a | ||
330 | requirement to continue to provide support service, warranty, or updates | ||
331 | for a work that has been modified or installed by the recipient, or for | ||
332 | the User Product in which it has been modified or installed. Access to a | ||
333 | network may be denied when the modification itself materially and | ||
334 | adversely affects the operation of the network or violates the rules and | ||
335 | protocols for communication across the network. | ||
336 | |||
337 | Corresponding Source conveyed, and Installation Information provided, | ||
338 | in accord with this section must be in a format that is publicly | ||
339 | documented (and with an implementation available to the public in | ||
340 | source code form), and must require no special password or key for | ||
341 | unpacking, reading or copying. | ||
342 | |||
343 | 7. Additional Terms. | ||
344 | |||
345 | "Additional permissions" are terms that supplement the terms of this | ||
346 | License by making exceptions from one or more of its conditions. | ||
347 | Additional permissions that are applicable to the entire Program shall | ||
348 | be treated as though they were included in this License, to the extent | ||
349 | that they are valid under applicable law. If additional permissions | ||
350 | apply only to part of the Program, that part may be used separately | ||
351 | under those permissions, but the entire Program remains governed by | ||
352 | this License without regard to the additional permissions. | ||
353 | |||
354 | When you convey a copy of a covered work, you may at your option | ||
355 | remove any additional permissions from that copy, or from any part of | ||
356 | it. (Additional permissions may be written to require their own | ||
357 | removal in certain cases when you modify the work.) You may place | ||
358 | additional permissions on material, added by you to a covered work, | ||
359 | for which you have or can give appropriate copyright permission. | ||
360 | |||
361 | Notwithstanding any other provision of this License, for material you | ||
362 | add to a covered work, you may (if authorized by the copyright holders of | ||
363 | that material) supplement the terms of this License with terms: | ||
364 | |||
365 | a) Disclaiming warranty or limiting liability differently from the | ||
366 | terms of sections 15 and 16 of this License; or | ||
367 | |||
368 | b) Requiring preservation of specified reasonable legal notices or | ||
369 | author attributions in that material or in the Appropriate Legal | ||
370 | Notices displayed by works containing it; or | ||
371 | |||
372 | c) Prohibiting misrepresentation of the origin of that material, or | ||
373 | requiring that modified versions of such material be marked in | ||
374 | reasonable ways as different from the original version; or | ||
375 | |||
376 | d) Limiting the use for publicity purposes of names of licensors or | ||
377 | authors of the material; or | ||
378 | |||
379 | e) Declining to grant rights under trademark law for use of some | ||
380 | trade names, trademarks, or service marks; or | ||
381 | |||
382 | f) Requiring indemnification of licensors and authors of that | ||
383 | material by anyone who conveys the material (or modified versions of | ||
384 | it) with contractual assumptions of liability to the recipient, for | ||
385 | any liability that these contractual assumptions directly impose on | ||
386 | those licensors and authors. | ||
387 | |||
388 | All other non-permissive additional terms are considered "further | ||
389 | restrictions" within the meaning of section 10. If the Program as you | ||
390 | received it, or any part of it, contains a notice stating that it is | ||
391 | governed by this License along with a term that is a further | ||
392 | restriction, you may remove that term. If a license document contains | ||
393 | a further restriction but permits relicensing or conveying under this | ||
394 | License, you may add to a covered work material governed by the terms | ||
395 | of that license document, provided that the further restriction does | ||
396 | not survive such relicensing or conveying. | ||
397 | |||
398 | If you add terms to a covered work in accord with this section, you | ||
399 | must place, in the relevant source files, a statement of the | ||
400 | additional terms that apply to those files, or a notice indicating | ||
401 | where to find the applicable terms. | ||
402 | |||
403 | Additional terms, permissive or non-permissive, may be stated in the | ||
404 | form of a separately written license, or stated as exceptions; | ||
405 | the above requirements apply either way. | ||
406 | |||
407 | 8. Termination. | ||
408 | |||
409 | You may not propagate or modify a covered work except as expressly | ||
410 | provided under this License. Any attempt otherwise to propagate or | ||
411 | modify it is void, and will automatically terminate your rights under | ||
412 | this License (including any patent licenses granted under the third | ||
413 | paragraph of section 11). | ||
414 | |||
415 | However, if you cease all violation of this License, then your | ||
416 | license from a particular copyright holder is reinstated (a) | ||
417 | provisionally, unless and until the copyright holder explicitly and | ||
418 | finally terminates your license, and (b) permanently, if the copyright | ||
419 | holder fails to notify you of the violation by some reasonable means | ||
420 | prior to 60 days after the cessation. | ||
421 | |||
422 | Moreover, your license from a particular copyright holder is | ||
423 | reinstated permanently if the copyright holder notifies you of the | ||
424 | violation by some reasonable means, this is the first time you have | ||
425 | received notice of violation of this License (for any work) from that | ||
426 | copyright holder, and you cure the violation prior to 30 days after | ||
427 | your receipt of the notice. | ||
428 | |||
429 | Termination of your rights under this section does not terminate the | ||
430 | licenses of parties who have received copies or rights from you under | ||
431 | this License. If your rights have been terminated and not permanently | ||
432 | reinstated, you do not qualify to receive new licenses for the same | ||
433 | material under section 10. | ||
434 | |||
435 | 9. Acceptance Not Required for Having Copies. | ||
436 | |||
437 | You are not required to accept this License in order to receive or | ||
438 | run a copy of the Program. Ancillary propagation of a covered work | ||
439 | occurring solely as a consequence of using peer-to-peer transmission | ||
440 | to receive a copy likewise does not require acceptance. However, | ||
441 | nothing other than this License grants you permission to propagate or | ||
442 | modify any covered work. These actions infringe copyright if you do | ||
443 | not accept this License. Therefore, by modifying or propagating a | ||
444 | covered work, you indicate your acceptance of this License to do so. | ||
445 | |||
446 | 10. Automatic Licensing of Downstream Recipients. | ||
447 | |||
448 | Each time you convey a covered work, the recipient automatically | ||
449 | receives a license from the original licensors, to run, modify and | ||
450 | propagate that work, subject to this License. You are not responsible | ||
451 | for enforcing compliance by third parties with this License. | ||
452 | |||
453 | An "entity transaction" is a transaction transferring control of an | ||
454 | organization, or substantially all assets of one, or subdividing an | ||
455 | organization, or merging organizations. If propagation of a covered | ||
456 | work results from an entity transaction, each party to that | ||
457 | transaction who receives a copy of the work also receives whatever | ||
458 | licenses to the work the party's predecessor in interest had or could | ||
459 | give under the previous paragraph, plus a right to possession of the | ||
460 | Corresponding Source of the work from the predecessor in interest, if | ||
461 | the predecessor has it or can get it with reasonable efforts. | ||
462 | |||
463 | You may not impose any further restrictions on the exercise of the | ||
464 | rights granted or affirmed under this License. For example, you may | ||
465 | not impose a license fee, royalty, or other charge for exercise of | ||
466 | rights granted under this License, and you may not initiate litigation | ||
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that | ||
468 | any patent claim is infringed by making, using, selling, offering for | ||
469 | sale, or importing the Program or any portion of it. | ||
470 | |||
471 | 11. Patents. | ||
472 | |||
473 | A "contributor" is a copyright holder who authorizes use under this | ||
474 | License of the Program or a work on which the Program is based. The | ||
475 | work thus licensed is called the contributor's "contributor version". | ||
476 | |||
477 | A contributor's "essential patent claims" are all patent claims | ||
478 | owned or controlled by the contributor, whether already acquired or | ||
479 | hereafter acquired, that would be infringed by some manner, permitted | ||
480 | by this License, of making, using, or selling its contributor version, | ||
481 | but do not include claims that would be infringed only as a | ||
482 | consequence of further modification of the contributor version. For | ||
483 | purposes of this definition, "control" includes the right to grant | ||
484 | patent sublicenses in a manner consistent with the requirements of | ||
485 | this License. | ||
486 | |||
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free | ||
488 | patent license under the contributor's essential patent claims, to | ||
489 | make, use, sell, offer for sale, import and otherwise run, modify and | ||
490 | propagate the contents of its contributor version. | ||
491 | |||
492 | In the following three paragraphs, a "patent license" is any express | ||
493 | agreement or commitment, however denominated, not to enforce a patent | ||
494 | (such as an express permission to practice a patent or covenant not to | ||
495 | sue for patent infringement). To "grant" such a patent license to a | ||
496 | party means to make such an agreement or commitment not to enforce a | ||
497 | patent against the party. | ||
498 | |||
499 | If you convey a covered work, knowingly relying on a patent license, | ||
500 | and the Corresponding Source of the work is not available for anyone | ||
501 | to copy, free of charge and under the terms of this License, through a | ||
502 | publicly available network server or other readily accessible means, | ||
503 | then you must either (1) cause the Corresponding Source to be so | ||
504 | available, or (2) arrange to deprive yourself of the benefit of the | ||
505 | patent license for this particular work, or (3) arrange, in a manner | ||
506 | consistent with the requirements of this License, to extend the patent | ||
507 | license to downstream recipients. "Knowingly relying" means you have | ||
508 | actual knowledge that, but for the patent license, your conveying the | ||
509 | covered work in a country, or your recipient's use of the covered work | ||
510 | in a country, would infringe one or more identifiable patents in that | ||
511 | country that you have reason to believe are valid. | ||
512 | |||
513 | If, pursuant to or in connection with a single transaction or | ||
514 | arrangement, you convey, or propagate by procuring conveyance of, a | ||
515 | covered work, and grant a patent license to some of the parties | ||
516 | receiving the covered work authorizing them to use, propagate, modify | ||
517 | or convey a specific copy of the covered work, then the patent license | ||
518 | you grant is automatically extended to all recipients of the covered | ||
519 | work and works based on it. | ||
520 | |||
521 | A patent license is "discriminatory" if it does not include within | ||
522 | the scope of its coverage, prohibits the exercise of, or is | ||
523 | conditioned on the non-exercise of one or more of the rights that are | ||
524 | specifically granted under this License. You may not convey a covered | ||
525 | work if you are a party to an arrangement with a third party that is | ||
526 | in the business of distributing software, under which you make payment | ||
527 | to the third party based on the extent of your activity of conveying | ||
528 | the work, and under which the third party grants, to any of the | ||
529 | parties who would receive the covered work from you, a discriminatory | ||
530 | patent license (a) in connection with copies of the covered work | ||
531 | conveyed by you (or copies made from those copies), or (b) primarily | ||
532 | for and in connection with specific products or compilations that | ||
533 | contain the covered work, unless you entered into that arrangement, | ||
534 | or that patent license was granted, prior to 28 March 2007. | ||
535 | |||
536 | Nothing in this License shall be construed as excluding or limiting | ||
537 | any implied license or other defenses to infringement that may | ||
538 | otherwise be available to you under applicable patent law. | ||
539 | |||
540 | 12. No Surrender of Others' Freedom. | ||
541 | |||
542 | If conditions are imposed on you (whether by court order, agreement or | ||
543 | otherwise) that contradict the conditions of this License, they do not | ||
544 | excuse you from the conditions of this License. If you cannot convey a | ||
545 | covered work so as to satisfy simultaneously your obligations under this | ||
546 | License and any other pertinent obligations, then as a consequence you may | ||
547 | not convey it at all. For example, if you agree to terms that obligate you | ||
548 | to collect a royalty for further conveying from those to whom you convey | ||
549 | the Program, the only way you could satisfy both those terms and this | ||
550 | License would be to refrain entirely from conveying the Program. | ||
551 | |||
552 | 13. Use with the GNU Affero General Public License. | ||
553 | |||
554 | Notwithstanding any other provision of this License, you have | ||
555 | permission to link or combine any covered work with a work licensed | ||
556 | under version 3 of the GNU Affero General Public License into a single | ||
557 | combined work, and to convey the resulting work. The terms of this | ||
558 | License will continue to apply to the part which is the covered work, | ||
559 | but the special requirements of the GNU Affero General Public License, | ||
560 | section 13, concerning interaction through a network will apply to the | ||
561 | combination as such. | ||
562 | |||
563 | 14. Revised Versions of this License. | ||
564 | |||
565 | The Free Software Foundation may publish revised and/or new versions of | ||
566 | the GNU General Public License from time to time. Such new versions will | ||
567 | be similar in spirit to the present version, but may differ in detail to | ||
568 | address new problems or concerns. | ||
569 | |||
570 | Each version is given a distinguishing version number. If the | ||
571 | Program specifies that a certain numbered version of the GNU General | ||
572 | Public License "or any later version" applies to it, you have the | ||
573 | option of following the terms and conditions either of that numbered | ||
574 | version or of any later version published by the Free Software | ||
575 | Foundation. If the Program does not specify a version number of the | ||
576 | GNU General Public License, you may choose any version ever published | ||
577 | by the Free Software Foundation. | ||
578 | |||
579 | If the Program specifies that a proxy can decide which future | ||
580 | versions of the GNU General Public License can be used, that proxy's | ||
581 | public statement of acceptance of a version permanently authorizes you | ||
582 | to choose that version for the Program. | ||
583 | |||
584 | Later license versions may give you additional or different | ||
585 | permissions. However, no additional obligations are imposed on any | ||
586 | author or copyright holder as a result of your choosing to follow a | ||
587 | later version. | ||
588 | |||
589 | 15. Disclaimer of Warranty. | ||
590 | |||
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY | ||
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT | ||
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY | ||
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, | ||
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM | ||
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | ||
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||
599 | |||
600 | 16. Limitation of Liability. | ||
601 | |||
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS | ||
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | ||
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE | ||
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF | ||
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD | ||
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), | ||
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF | ||
610 | SUCH DAMAGES. | ||
611 | |||
612 | 17. Interpretation of Sections 15 and 16. | ||
613 | |||
614 | If the disclaimer of warranty and limitation of liability provided | ||
615 | above cannot be given local legal effect according to their terms, | ||
616 | reviewing courts shall apply local law that most closely approximates | ||
617 | an absolute waiver of all civil liability in connection with the | ||
618 | Program, unless a warranty or assumption of liability accompanies a | ||
619 | copy of the Program in return for a fee. | ||
620 | |||
621 | END OF TERMS AND CONDITIONS | ||
622 | |||
623 | How to Apply These Terms to Your New Programs | ||
624 | |||
625 | If you develop a new program, and you want it to be of the greatest | ||
626 | possible use to the public, the best way to achieve this is to make it | ||
627 | free software which everyone can redistribute and change under these terms. | ||
628 | |||
629 | To do so, attach the following notices to the program. It is safest | ||
630 | to attach them to the start of each source file to most effectively | ||
631 | state the exclusion of warranty; and each file should have at least | ||
632 | the "copyright" line and a pointer to where the full notice is found. | ||
633 | |||
634 | <one line to give the program's name and a brief idea of what it does.> | ||
635 | Copyright (C) <year> <name of author> | ||
636 | |||
637 | This program is free software: you can redistribute it and/or modify | ||
638 | it under the terms of the GNU General Public License as published by | ||
639 | the Free Software Foundation, either version 3 of the License, or | ||
640 | (at your option) any later version. | ||
641 | |||
642 | This program is distributed in the hope that it will be useful, | ||
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
645 | GNU General Public License for more details. | ||
646 | |||
647 | You should have received a copy of the GNU General Public License | ||
648 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
649 | |||
650 | Also add information on how to contact you by electronic and paper mail. | ||
651 | |||
652 | If the program does terminal interaction, make it output a short | ||
653 | notice like this when it starts in an interactive mode: | ||
654 | |||
655 | <program> Copyright (C) <year> <name of author> | ||
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||
657 | This is free software, and you are welcome to redistribute it | ||
658 | under certain conditions; type `show c' for details. | ||
659 | |||
660 | The hypothetical commands `show w' and `show c' should show the appropriate | ||
661 | parts of the General Public License. Of course, your program's commands | ||
662 | might be different; for a GUI interface, you would use an "about box". | ||
663 | |||
664 | You should also get your employer (if you work as a programmer) or school, | ||
665 | if any, to sign a "copyright disclaimer" for the program, if necessary. | ||
666 | For more information on this, and how to apply and follow the GNU GPL, see | ||
667 | <http://www.gnu.org/licenses/>. | ||
668 | |||
669 | The GNU General Public License does not permit incorporating your program | ||
670 | into proprietary programs. If your program is a subroutine library, you | ||
671 | may consider it more useful to permit linking proprietary applications with | ||
672 | the library. If this is what you want to do, use the GNU Lesser General | ||
673 | Public License instead of this License. But first, please read | ||
674 | <http://www.gnu.org/philosophy/why-not-lgpl.html>. | ||
diff --git a/packages/gsl/hmatrix-gsl.cabal b/packages/gsl/hmatrix-gsl.cabal index ce57619..95fa3ed 100644 --- a/packages/gsl/hmatrix-gsl.cabal +++ b/packages/gsl/hmatrix-gsl.cabal | |||
@@ -1,5 +1,5 @@ | |||
1 | Name: hmatrix-gsl | 1 | Name: hmatrix-gsl |
2 | Version: 0.16.0.0 | 2 | Version: 0.16.0.3 |
3 | License: GPL | 3 | License: GPL |
4 | License-file: LICENSE | 4 | License-file: LICENSE |
5 | Author: Alberto Ruiz | 5 | Author: Alberto Ruiz |
@@ -19,6 +19,10 @@ build-type: Simple | |||
19 | 19 | ||
20 | extra-source-files: src/Numeric/GSL/gsl-ode.c | 20 | extra-source-files: src/Numeric/GSL/gsl-ode.c |
21 | 21 | ||
22 | flag onlygsl | ||
23 | description: don't link gslcblas | ||
24 | default: False | ||
25 | |||
22 | library | 26 | library |
23 | 27 | ||
24 | Build-Depends: base<5, hmatrix>=0.16, array, vector, | 28 | Build-Depends: base<5, hmatrix>=0.16, array, vector, |
@@ -76,7 +80,11 @@ library | |||
76 | if arch(x86_64) | 80 | if arch(x86_64) |
77 | cc-options: -fPIC | 81 | cc-options: -fPIC |
78 | 82 | ||
79 | extra-libraries: gsl | 83 | if flag(onlygsl) |
84 | extra-libraries: gsl | ||
85 | else | ||
86 | pkgconfig-depends: gsl | ||
87 | |||
80 | 88 | ||
81 | source-repository head | 89 | source-repository head |
82 | type: git | 90 | type: git |
diff --git a/packages/special/LICENSE b/packages/special/LICENSE index f2125ec..94a9ed0 100644 --- a/packages/special/LICENSE +++ b/packages/special/LICENSE | |||
@@ -1,2 +1,674 @@ | |||
1 | Copyright Alberto Ruiz 2010 | 1 | GNU GENERAL PUBLIC LICENSE |
2 | GPL license | 2 | Version 3, 29 June 2007 |
3 | |||
4 | Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> | ||
5 | Everyone is permitted to copy and distribute verbatim copies | ||
6 | of this license document, but changing it is not allowed. | ||
7 | |||
8 | Preamble | ||
9 | |||
10 | The GNU General Public License is a free, copyleft license for | ||
11 | software and other kinds of works. | ||
12 | |||
13 | The licenses for most software and other practical works are designed | ||
14 | to take away your freedom to share and change the works. By contrast, | ||
15 | the GNU General Public License is intended to guarantee your freedom to | ||
16 | share and change all versions of a program--to make sure it remains free | ||
17 | software for all its users. We, the Free Software Foundation, use the | ||
18 | GNU General Public License for most of our software; it applies also to | ||
19 | any other work released this way by its authors. You can apply it to | ||
20 | your programs, too. | ||
21 | |||
22 | When we speak of free software, we are referring to freedom, not | ||
23 | price. Our General Public Licenses are designed to make sure that you | ||
24 | have the freedom to distribute copies of free software (and charge for | ||
25 | them if you wish), that you receive source code or can get it if you | ||
26 | want it, that you can change the software or use pieces of it in new | ||
27 | free programs, and that you know you can do these things. | ||
28 | |||
29 | To protect your rights, we need to prevent others from denying you | ||
30 | these rights or asking you to surrender the rights. Therefore, you have | ||
31 | certain responsibilities if you distribute copies of the software, or if | ||
32 | you modify it: responsibilities to respect the freedom of others. | ||
33 | |||
34 | For example, if you distribute copies of such a program, whether | ||
35 | gratis or for a fee, you must pass on to the recipients the same | ||
36 | freedoms that you received. You must make sure that they, too, receive | ||
37 | or can get the source code. And you must show them these terms so they | ||
38 | know their rights. | ||
39 | |||
40 | Developers that use the GNU GPL protect your rights with two steps: | ||
41 | (1) assert copyright on the software, and (2) offer you this License | ||
42 | giving you legal permission to copy, distribute and/or modify it. | ||
43 | |||
44 | For the developers' and authors' protection, the GPL clearly explains | ||
45 | that there is no warranty for this free software. For both users' and | ||
46 | authors' sake, the GPL requires that modified versions be marked as | ||
47 | changed, so that their problems will not be attributed erroneously to | ||
48 | authors of previous versions. | ||
49 | |||
50 | Some devices are designed to deny users access to install or run | ||
51 | modified versions of the software inside them, although the manufacturer | ||
52 | can do so. This is fundamentally incompatible with the aim of | ||
53 | protecting users' freedom to change the software. The systematic | ||
54 | pattern of such abuse occurs in the area of products for individuals to | ||
55 | use, which is precisely where it is most unacceptable. Therefore, we | ||
56 | have designed this version of the GPL to prohibit the practice for those | ||
57 | products. If such problems arise substantially in other domains, we | ||
58 | stand ready to extend this provision to those domains in future versions | ||
59 | of the GPL, as needed to protect the freedom of users. | ||
60 | |||
61 | Finally, every program is threatened constantly by software patents. | ||
62 | States should not allow patents to restrict development and use of | ||
63 | software on general-purpose computers, but in those that do, we wish to | ||
64 | avoid the special danger that patents applied to a free program could | ||
65 | make it effectively proprietary. To prevent this, the GPL assures that | ||
66 | patents cannot be used to render the program non-free. | ||
67 | |||
68 | The precise terms and conditions for copying, distribution and | ||
69 | modification follow. | ||
70 | |||
71 | TERMS AND CONDITIONS | ||
72 | |||
73 | 0. Definitions. | ||
74 | |||
75 | "This License" refers to version 3 of the GNU General Public License. | ||
76 | |||
77 | "Copyright" also means copyright-like laws that apply to other kinds of | ||
78 | works, such as semiconductor masks. | ||
79 | |||
80 | "The Program" refers to any copyrightable work licensed under this | ||
81 | License. Each licensee is addressed as "you". "Licensees" and | ||
82 | "recipients" may be individuals or organizations. | ||
83 | |||
84 | To "modify" a work means to copy from or adapt all or part of the work | ||
85 | in a fashion requiring copyright permission, other than the making of an | ||
86 | exact copy. The resulting work is called a "modified version" of the | ||
87 | earlier work or a work "based on" the earlier work. | ||
88 | |||
89 | A "covered work" means either the unmodified Program or a work based | ||
90 | on the Program. | ||
91 | |||
92 | To "propagate" a work means to do anything with it that, without | ||
93 | permission, would make you directly or secondarily liable for | ||
94 | infringement under applicable copyright law, except executing it on a | ||
95 | computer or modifying a private copy. Propagation includes copying, | ||
96 | distribution (with or without modification), making available to the | ||
97 | public, and in some countries other activities as well. | ||
98 | |||
99 | To "convey" a work means any kind of propagation that enables other | ||
100 | parties to make or receive copies. Mere interaction with a user through | ||
101 | a computer network, with no transfer of a copy, is not conveying. | ||
102 | |||
103 | An interactive user interface displays "Appropriate Legal Notices" | ||
104 | to the extent that it includes a convenient and prominently visible | ||
105 | feature that (1) displays an appropriate copyright notice, and (2) | ||
106 | tells the user that there is no warranty for the work (except to the | ||
107 | extent that warranties are provided), that licensees may convey the | ||
108 | work under this License, and how to view a copy of this License. If | ||
109 | the interface presents a list of user commands or options, such as a | ||
110 | menu, a prominent item in the list meets this criterion. | ||
111 | |||
112 | 1. Source Code. | ||
113 | |||
114 | The "source code" for a work means the preferred form of the work | ||
115 | for making modifications to it. "Object code" means any non-source | ||
116 | form of a work. | ||
117 | |||
118 | A "Standard Interface" means an interface that either is an official | ||
119 | standard defined by a recognized standards body, or, in the case of | ||
120 | interfaces specified for a particular programming language, one that | ||
121 | is widely used among developers working in that language. | ||
122 | |||
123 | The "System Libraries" of an executable work include anything, other | ||
124 | than the work as a whole, that (a) is included in the normal form of | ||
125 | packaging a Major Component, but which is not part of that Major | ||
126 | Component, and (b) serves only to enable use of the work with that | ||
127 | Major Component, or to implement a Standard Interface for which an | ||
128 | implementation is available to the public in source code form. A | ||
129 | "Major Component", in this context, means a major essential component | ||
130 | (kernel, window system, and so on) of the specific operating system | ||
131 | (if any) on which the executable work runs, or a compiler used to | ||
132 | produce the work, or an object code interpreter used to run it. | ||
133 | |||
134 | The "Corresponding Source" for a work in object code form means all | ||
135 | the source code needed to generate, install, and (for an executable | ||
136 | work) run the object code and to modify the work, including scripts to | ||
137 | control those activities. However, it does not include the work's | ||
138 | System Libraries, or general-purpose tools or generally available free | ||
139 | programs which are used unmodified in performing those activities but | ||
140 | which are not part of the work. For example, Corresponding Source | ||
141 | includes interface definition files associated with source files for | ||
142 | the work, and the source code for shared libraries and dynamically | ||
143 | linked subprograms that the work is specifically designed to require, | ||
144 | such as by intimate data communication or control flow between those | ||
145 | subprograms and other parts of the work. | ||
146 | |||
147 | The Corresponding Source need not include anything that users | ||
148 | can regenerate automatically from other parts of the Corresponding | ||
149 | Source. | ||
150 | |||
151 | The Corresponding Source for a work in source code form is that | ||
152 | same work. | ||
153 | |||
154 | 2. Basic Permissions. | ||
155 | |||
156 | All rights granted under this License are granted for the term of | ||
157 | copyright on the Program, and are irrevocable provided the stated | ||
158 | conditions are met. This License explicitly affirms your unlimited | ||
159 | permission to run the unmodified Program. The output from running a | ||
160 | covered work is covered by this License only if the output, given its | ||
161 | content, constitutes a covered work. This License acknowledges your | ||
162 | rights of fair use or other equivalent, as provided by copyright law. | ||
163 | |||
164 | You may make, run and propagate covered works that you do not | ||
165 | convey, without conditions so long as your license otherwise remains | ||
166 | in force. You may convey covered works to others for the sole purpose | ||
167 | of having them make modifications exclusively for you, or provide you | ||
168 | with facilities for running those works, provided that you comply with | ||
169 | the terms of this License in conveying all material for which you do | ||
170 | not control copyright. Those thus making or running the covered works | ||
171 | for you must do so exclusively on your behalf, under your direction | ||
172 | and control, on terms that prohibit them from making any copies of | ||
173 | your copyrighted material outside their relationship with you. | ||
174 | |||
175 | Conveying under any other circumstances is permitted solely under | ||
176 | the conditions stated below. Sublicensing is not allowed; section 10 | ||
177 | makes it unnecessary. | ||
178 | |||
179 | 3. Protecting Users' Legal Rights From Anti-Circumvention Law. | ||
180 | |||
181 | No covered work shall be deemed part of an effective technological | ||
182 | measure under any applicable law fulfilling obligations under article | ||
183 | 11 of the WIPO copyright treaty adopted on 20 December 1996, or | ||
184 | similar laws prohibiting or restricting circumvention of such | ||
185 | measures. | ||
186 | |||
187 | When you convey a covered work, you waive any legal power to forbid | ||
188 | circumvention of technological measures to the extent such circumvention | ||
189 | is effected by exercising rights under this License with respect to | ||
190 | the covered work, and you disclaim any intention to limit operation or | ||
191 | modification of the work as a means of enforcing, against the work's | ||
192 | users, your or third parties' legal rights to forbid circumvention of | ||
193 | technological measures. | ||
194 | |||
195 | 4. Conveying Verbatim Copies. | ||
196 | |||
197 | You may convey verbatim copies of the Program's source code as you | ||
198 | receive it, in any medium, provided that you conspicuously and | ||
199 | appropriately publish on each copy an appropriate copyright notice; | ||
200 | keep intact all notices stating that this License and any | ||
201 | non-permissive terms added in accord with section 7 apply to the code; | ||
202 | keep intact all notices of the absence of any warranty; and give all | ||
203 | recipients a copy of this License along with the Program. | ||
204 | |||
205 | You may charge any price or no price for each copy that you convey, | ||
206 | and you may offer support or warranty protection for a fee. | ||
207 | |||
208 | 5. Conveying Modified Source Versions. | ||
209 | |||
210 | You may convey a work based on the Program, or the modifications to | ||
211 | produce it from the Program, in the form of source code under the | ||
212 | terms of section 4, provided that you also meet all of these conditions: | ||
213 | |||
214 | a) The work must carry prominent notices stating that you modified | ||
215 | it, and giving a relevant date. | ||
216 | |||
217 | b) The work must carry prominent notices stating that it is | ||
218 | released under this License and any conditions added under section | ||
219 | 7. This requirement modifies the requirement in section 4 to | ||
220 | "keep intact all notices". | ||
221 | |||
222 | c) You must license the entire work, as a whole, under this | ||
223 | License to anyone who comes into possession of a copy. This | ||
224 | License will therefore apply, along with any applicable section 7 | ||
225 | additional terms, to the whole of the work, and all its parts, | ||
226 | regardless of how they are packaged. This License gives no | ||
227 | permission to license the work in any other way, but it does not | ||
228 | invalidate such permission if you have separately received it. | ||
229 | |||
230 | d) If the work has interactive user interfaces, each must display | ||
231 | Appropriate Legal Notices; however, if the Program has interactive | ||
232 | interfaces that do not display Appropriate Legal Notices, your | ||
233 | work need not make them do so. | ||
234 | |||
235 | A compilation of a covered work with other separate and independent | ||
236 | works, which are not by their nature extensions of the covered work, | ||
237 | and which are not combined with it such as to form a larger program, | ||
238 | in or on a volume of a storage or distribution medium, is called an | ||
239 | "aggregate" if the compilation and its resulting copyright are not | ||
240 | used to limit the access or legal rights of the compilation's users | ||
241 | beyond what the individual works permit. Inclusion of a covered work | ||
242 | in an aggregate does not cause this License to apply to the other | ||
243 | parts of the aggregate. | ||
244 | |||
245 | 6. Conveying Non-Source Forms. | ||
246 | |||
247 | You may convey a covered work in object code form under the terms | ||
248 | of sections 4 and 5, provided that you also convey the | ||
249 | machine-readable Corresponding Source under the terms of this License, | ||
250 | in one of these ways: | ||
251 | |||
252 | a) Convey the object code in, or embodied in, a physical product | ||
253 | (including a physical distribution medium), accompanied by the | ||
254 | Corresponding Source fixed on a durable physical medium | ||
255 | customarily used for software interchange. | ||
256 | |||
257 | b) Convey the object code in, or embodied in, a physical product | ||
258 | (including a physical distribution medium), accompanied by a | ||
259 | written offer, valid for at least three years and valid for as | ||
260 | long as you offer spare parts or customer support for that product | ||
261 | model, to give anyone who possesses the object code either (1) a | ||
262 | copy of the Corresponding Source for all the software in the | ||
263 | product that is covered by this License, on a durable physical | ||
264 | medium customarily used for software interchange, for a price no | ||
265 | more than your reasonable cost of physically performing this | ||
266 | conveying of source, or (2) access to copy the | ||
267 | Corresponding Source from a network server at no charge. | ||
268 | |||
269 | c) Convey individual copies of the object code with a copy of the | ||
270 | written offer to provide the Corresponding Source. This | ||
271 | alternative is allowed only occasionally and noncommercially, and | ||
272 | only if you received the object code with such an offer, in accord | ||
273 | with subsection 6b. | ||
274 | |||
275 | d) Convey the object code by offering access from a designated | ||
276 | place (gratis or for a charge), and offer equivalent access to the | ||
277 | Corresponding Source in the same way through the same place at no | ||
278 | further charge. You need not require recipients to copy the | ||
279 | Corresponding Source along with the object code. If the place to | ||
280 | copy the object code is a network server, the Corresponding Source | ||
281 | may be on a different server (operated by you or a third party) | ||
282 | that supports equivalent copying facilities, provided you maintain | ||
283 | clear directions next to the object code saying where to find the | ||
284 | Corresponding Source. Regardless of what server hosts the | ||
285 | Corresponding Source, you remain obligated to ensure that it is | ||
286 | available for as long as needed to satisfy these requirements. | ||
287 | |||
288 | e) Convey the object code using peer-to-peer transmission, provided | ||
289 | you inform other peers where the object code and Corresponding | ||
290 | Source of the work are being offered to the general public at no | ||
291 | charge under subsection 6d. | ||
292 | |||
293 | A separable portion of the object code, whose source code is excluded | ||
294 | from the Corresponding Source as a System Library, need not be | ||
295 | included in conveying the object code work. | ||
296 | |||
297 | A "User Product" is either (1) a "consumer product", which means any | ||
298 | tangible personal property which is normally used for personal, family, | ||
299 | or household purposes, or (2) anything designed or sold for incorporation | ||
300 | into a dwelling. In determining whether a product is a consumer product, | ||
301 | doubtful cases shall be resolved in favor of coverage. For a particular | ||
302 | product received by a particular user, "normally used" refers to a | ||
303 | typical or common use of that class of product, regardless of the status | ||
304 | of the particular user or of the way in which the particular user | ||
305 | actually uses, or expects or is expected to use, the product. A product | ||
306 | is a consumer product regardless of whether the product has substantial | ||
307 | commercial, industrial or non-consumer uses, unless such uses represent | ||
308 | the only significant mode of use of the product. | ||
309 | |||
310 | "Installation Information" for a User Product means any methods, | ||
311 | procedures, authorization keys, or other information required to install | ||
312 | and execute modified versions of a covered work in that User Product from | ||
313 | a modified version of its Corresponding Source. The information must | ||
314 | suffice to ensure that the continued functioning of the modified object | ||
315 | code is in no case prevented or interfered with solely because | ||
316 | modification has been made. | ||
317 | |||
318 | If you convey an object code work under this section in, or with, or | ||
319 | specifically for use in, a User Product, and the conveying occurs as | ||
320 | part of a transaction in which the right of possession and use of the | ||
321 | User Product is transferred to the recipient in perpetuity or for a | ||
322 | fixed term (regardless of how the transaction is characterized), the | ||
323 | Corresponding Source conveyed under this section must be accompanied | ||
324 | by the Installation Information. But this requirement does not apply | ||
325 | if neither you nor any third party retains the ability to install | ||
326 | modified object code on the User Product (for example, the work has | ||
327 | been installed in ROM). | ||
328 | |||
329 | The requirement to provide Installation Information does not include a | ||
330 | requirement to continue to provide support service, warranty, or updates | ||
331 | for a work that has been modified or installed by the recipient, or for | ||
332 | the User Product in which it has been modified or installed. Access to a | ||
333 | network may be denied when the modification itself materially and | ||
334 | adversely affects the operation of the network or violates the rules and | ||
335 | protocols for communication across the network. | ||
336 | |||
337 | Corresponding Source conveyed, and Installation Information provided, | ||
338 | in accord with this section must be in a format that is publicly | ||
339 | documented (and with an implementation available to the public in | ||
340 | source code form), and must require no special password or key for | ||
341 | unpacking, reading or copying. | ||
342 | |||
343 | 7. Additional Terms. | ||
344 | |||
345 | "Additional permissions" are terms that supplement the terms of this | ||
346 | License by making exceptions from one or more of its conditions. | ||
347 | Additional permissions that are applicable to the entire Program shall | ||
348 | be treated as though they were included in this License, to the extent | ||
349 | that they are valid under applicable law. If additional permissions | ||
350 | apply only to part of the Program, that part may be used separately | ||
351 | under those permissions, but the entire Program remains governed by | ||
352 | this License without regard to the additional permissions. | ||
353 | |||
354 | When you convey a copy of a covered work, you may at your option | ||
355 | remove any additional permissions from that copy, or from any part of | ||
356 | it. (Additional permissions may be written to require their own | ||
357 | removal in certain cases when you modify the work.) You may place | ||
358 | additional permissions on material, added by you to a covered work, | ||
359 | for which you have or can give appropriate copyright permission. | ||
360 | |||
361 | Notwithstanding any other provision of this License, for material you | ||
362 | add to a covered work, you may (if authorized by the copyright holders of | ||
363 | that material) supplement the terms of this License with terms: | ||
364 | |||
365 | a) Disclaiming warranty or limiting liability differently from the | ||
366 | terms of sections 15 and 16 of this License; or | ||
367 | |||
368 | b) Requiring preservation of specified reasonable legal notices or | ||
369 | author attributions in that material or in the Appropriate Legal | ||
370 | Notices displayed by works containing it; or | ||
371 | |||
372 | c) Prohibiting misrepresentation of the origin of that material, or | ||
373 | requiring that modified versions of such material be marked in | ||
374 | reasonable ways as different from the original version; or | ||
375 | |||
376 | d) Limiting the use for publicity purposes of names of licensors or | ||
377 | authors of the material; or | ||
378 | |||
379 | e) Declining to grant rights under trademark law for use of some | ||
380 | trade names, trademarks, or service marks; or | ||
381 | |||
382 | f) Requiring indemnification of licensors and authors of that | ||
383 | material by anyone who conveys the material (or modified versions of | ||
384 | it) with contractual assumptions of liability to the recipient, for | ||
385 | any liability that these contractual assumptions directly impose on | ||
386 | those licensors and authors. | ||
387 | |||
388 | All other non-permissive additional terms are considered "further | ||
389 | restrictions" within the meaning of section 10. If the Program as you | ||
390 | received it, or any part of it, contains a notice stating that it is | ||
391 | governed by this License along with a term that is a further | ||
392 | restriction, you may remove that term. If a license document contains | ||
393 | a further restriction but permits relicensing or conveying under this | ||
394 | License, you may add to a covered work material governed by the terms | ||
395 | of that license document, provided that the further restriction does | ||
396 | not survive such relicensing or conveying. | ||
397 | |||
398 | If you add terms to a covered work in accord with this section, you | ||
399 | must place, in the relevant source files, a statement of the | ||
400 | additional terms that apply to those files, or a notice indicating | ||
401 | where to find the applicable terms. | ||
402 | |||
403 | Additional terms, permissive or non-permissive, may be stated in the | ||
404 | form of a separately written license, or stated as exceptions; | ||
405 | the above requirements apply either way. | ||
406 | |||
407 | 8. Termination. | ||
408 | |||
409 | You may not propagate or modify a covered work except as expressly | ||
410 | provided under this License. Any attempt otherwise to propagate or | ||
411 | modify it is void, and will automatically terminate your rights under | ||
412 | this License (including any patent licenses granted under the third | ||
413 | paragraph of section 11). | ||
414 | |||
415 | However, if you cease all violation of this License, then your | ||
416 | license from a particular copyright holder is reinstated (a) | ||
417 | provisionally, unless and until the copyright holder explicitly and | ||
418 | finally terminates your license, and (b) permanently, if the copyright | ||
419 | holder fails to notify you of the violation by some reasonable means | ||
420 | prior to 60 days after the cessation. | ||
421 | |||
422 | Moreover, your license from a particular copyright holder is | ||
423 | reinstated permanently if the copyright holder notifies you of the | ||
424 | violation by some reasonable means, this is the first time you have | ||
425 | received notice of violation of this License (for any work) from that | ||
426 | copyright holder, and you cure the violation prior to 30 days after | ||
427 | your receipt of the notice. | ||
428 | |||
429 | Termination of your rights under this section does not terminate the | ||
430 | licenses of parties who have received copies or rights from you under | ||
431 | this License. If your rights have been terminated and not permanently | ||
432 | reinstated, you do not qualify to receive new licenses for the same | ||
433 | material under section 10. | ||
434 | |||
435 | 9. Acceptance Not Required for Having Copies. | ||
436 | |||
437 | You are not required to accept this License in order to receive or | ||
438 | run a copy of the Program. Ancillary propagation of a covered work | ||
439 | occurring solely as a consequence of using peer-to-peer transmission | ||
440 | to receive a copy likewise does not require acceptance. However, | ||
441 | nothing other than this License grants you permission to propagate or | ||
442 | modify any covered work. These actions infringe copyright if you do | ||
443 | not accept this License. Therefore, by modifying or propagating a | ||
444 | covered work, you indicate your acceptance of this License to do so. | ||
445 | |||
446 | 10. Automatic Licensing of Downstream Recipients. | ||
447 | |||
448 | Each time you convey a covered work, the recipient automatically | ||
449 | receives a license from the original licensors, to run, modify and | ||
450 | propagate that work, subject to this License. You are not responsible | ||
451 | for enforcing compliance by third parties with this License. | ||
452 | |||
453 | An "entity transaction" is a transaction transferring control of an | ||
454 | organization, or substantially all assets of one, or subdividing an | ||
455 | organization, or merging organizations. If propagation of a covered | ||
456 | work results from an entity transaction, each party to that | ||
457 | transaction who receives a copy of the work also receives whatever | ||
458 | licenses to the work the party's predecessor in interest had or could | ||
459 | give under the previous paragraph, plus a right to possession of the | ||
460 | Corresponding Source of the work from the predecessor in interest, if | ||
461 | the predecessor has it or can get it with reasonable efforts. | ||
462 | |||
463 | You may not impose any further restrictions on the exercise of the | ||
464 | rights granted or affirmed under this License. For example, you may | ||
465 | not impose a license fee, royalty, or other charge for exercise of | ||
466 | rights granted under this License, and you may not initiate litigation | ||
467 | (including a cross-claim or counterclaim in a lawsuit) alleging that | ||
468 | any patent claim is infringed by making, using, selling, offering for | ||
469 | sale, or importing the Program or any portion of it. | ||
470 | |||
471 | 11. Patents. | ||
472 | |||
473 | A "contributor" is a copyright holder who authorizes use under this | ||
474 | License of the Program or a work on which the Program is based. The | ||
475 | work thus licensed is called the contributor's "contributor version". | ||
476 | |||
477 | A contributor's "essential patent claims" are all patent claims | ||
478 | owned or controlled by the contributor, whether already acquired or | ||
479 | hereafter acquired, that would be infringed by some manner, permitted | ||
480 | by this License, of making, using, or selling its contributor version, | ||
481 | but do not include claims that would be infringed only as a | ||
482 | consequence of further modification of the contributor version. For | ||
483 | purposes of this definition, "control" includes the right to grant | ||
484 | patent sublicenses in a manner consistent with the requirements of | ||
485 | this License. | ||
486 | |||
487 | Each contributor grants you a non-exclusive, worldwide, royalty-free | ||
488 | patent license under the contributor's essential patent claims, to | ||
489 | make, use, sell, offer for sale, import and otherwise run, modify and | ||
490 | propagate the contents of its contributor version. | ||
491 | |||
492 | In the following three paragraphs, a "patent license" is any express | ||
493 | agreement or commitment, however denominated, not to enforce a patent | ||
494 | (such as an express permission to practice a patent or covenant not to | ||
495 | sue for patent infringement). To "grant" such a patent license to a | ||
496 | party means to make such an agreement or commitment not to enforce a | ||
497 | patent against the party. | ||
498 | |||
499 | If you convey a covered work, knowingly relying on a patent license, | ||
500 | and the Corresponding Source of the work is not available for anyone | ||
501 | to copy, free of charge and under the terms of this License, through a | ||
502 | publicly available network server or other readily accessible means, | ||
503 | then you must either (1) cause the Corresponding Source to be so | ||
504 | available, or (2) arrange to deprive yourself of the benefit of the | ||
505 | patent license for this particular work, or (3) arrange, in a manner | ||
506 | consistent with the requirements of this License, to extend the patent | ||
507 | license to downstream recipients. "Knowingly relying" means you have | ||
508 | actual knowledge that, but for the patent license, your conveying the | ||
509 | covered work in a country, or your recipient's use of the covered work | ||
510 | in a country, would infringe one or more identifiable patents in that | ||
511 | country that you have reason to believe are valid. | ||
512 | |||
513 | If, pursuant to or in connection with a single transaction or | ||
514 | arrangement, you convey, or propagate by procuring conveyance of, a | ||
515 | covered work, and grant a patent license to some of the parties | ||
516 | receiving the covered work authorizing them to use, propagate, modify | ||
517 | or convey a specific copy of the covered work, then the patent license | ||
518 | you grant is automatically extended to all recipients of the covered | ||
519 | work and works based on it. | ||
520 | |||
521 | A patent license is "discriminatory" if it does not include within | ||
522 | the scope of its coverage, prohibits the exercise of, or is | ||
523 | conditioned on the non-exercise of one or more of the rights that are | ||
524 | specifically granted under this License. You may not convey a covered | ||
525 | work if you are a party to an arrangement with a third party that is | ||
526 | in the business of distributing software, under which you make payment | ||
527 | to the third party based on the extent of your activity of conveying | ||
528 | the work, and under which the third party grants, to any of the | ||
529 | parties who would receive the covered work from you, a discriminatory | ||
530 | patent license (a) in connection with copies of the covered work | ||
531 | conveyed by you (or copies made from those copies), or (b) primarily | ||
532 | for and in connection with specific products or compilations that | ||
533 | contain the covered work, unless you entered into that arrangement, | ||
534 | or that patent license was granted, prior to 28 March 2007. | ||
535 | |||
536 | Nothing in this License shall be construed as excluding or limiting | ||
537 | any implied license or other defenses to infringement that may | ||
538 | otherwise be available to you under applicable patent law. | ||
539 | |||
540 | 12. No Surrender of Others' Freedom. | ||
541 | |||
542 | If conditions are imposed on you (whether by court order, agreement or | ||
543 | otherwise) that contradict the conditions of this License, they do not | ||
544 | excuse you from the conditions of this License. If you cannot convey a | ||
545 | covered work so as to satisfy simultaneously your obligations under this | ||
546 | License and any other pertinent obligations, then as a consequence you may | ||
547 | not convey it at all. For example, if you agree to terms that obligate you | ||
548 | to collect a royalty for further conveying from those to whom you convey | ||
549 | the Program, the only way you could satisfy both those terms and this | ||
550 | License would be to refrain entirely from conveying the Program. | ||
551 | |||
552 | 13. Use with the GNU Affero General Public License. | ||
553 | |||
554 | Notwithstanding any other provision of this License, you have | ||
555 | permission to link or combine any covered work with a work licensed | ||
556 | under version 3 of the GNU Affero General Public License into a single | ||
557 | combined work, and to convey the resulting work. The terms of this | ||
558 | License will continue to apply to the part which is the covered work, | ||
559 | but the special requirements of the GNU Affero General Public License, | ||
560 | section 13, concerning interaction through a network will apply to the | ||
561 | combination as such. | ||
562 | |||
563 | 14. Revised Versions of this License. | ||
564 | |||
565 | The Free Software Foundation may publish revised and/or new versions of | ||
566 | the GNU General Public License from time to time. Such new versions will | ||
567 | be similar in spirit to the present version, but may differ in detail to | ||
568 | address new problems or concerns. | ||
569 | |||
570 | Each version is given a distinguishing version number. If the | ||
571 | Program specifies that a certain numbered version of the GNU General | ||
572 | Public License "or any later version" applies to it, you have the | ||
573 | option of following the terms and conditions either of that numbered | ||
574 | version or of any later version published by the Free Software | ||
575 | Foundation. If the Program does not specify a version number of the | ||
576 | GNU General Public License, you may choose any version ever published | ||
577 | by the Free Software Foundation. | ||
578 | |||
579 | If the Program specifies that a proxy can decide which future | ||
580 | versions of the GNU General Public License can be used, that proxy's | ||
581 | public statement of acceptance of a version permanently authorizes you | ||
582 | to choose that version for the Program. | ||
583 | |||
584 | Later license versions may give you additional or different | ||
585 | permissions. However, no additional obligations are imposed on any | ||
586 | author or copyright holder as a result of your choosing to follow a | ||
587 | later version. | ||
588 | |||
589 | 15. Disclaimer of Warranty. | ||
590 | |||
591 | THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY | ||
592 | APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT | ||
593 | HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY | ||
594 | OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, | ||
595 | THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR | ||
596 | PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM | ||
597 | IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF | ||
598 | ALL NECESSARY SERVICING, REPAIR OR CORRECTION. | ||
599 | |||
600 | 16. Limitation of Liability. | ||
601 | |||
602 | IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING | ||
603 | WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS | ||
604 | THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY | ||
605 | GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE | ||
606 | USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF | ||
607 | DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD | ||
608 | PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), | ||
609 | EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF | ||
610 | SUCH DAMAGES. | ||
611 | |||
612 | 17. Interpretation of Sections 15 and 16. | ||
613 | |||
614 | If the disclaimer of warranty and limitation of liability provided | ||
615 | above cannot be given local legal effect according to their terms, | ||
616 | reviewing courts shall apply local law that most closely approximates | ||
617 | an absolute waiver of all civil liability in connection with the | ||
618 | Program, unless a warranty or assumption of liability accompanies a | ||
619 | copy of the Program in return for a fee. | ||
620 | |||
621 | END OF TERMS AND CONDITIONS | ||
622 | |||
623 | How to Apply These Terms to Your New Programs | ||
624 | |||
625 | If you develop a new program, and you want it to be of the greatest | ||
626 | possible use to the public, the best way to achieve this is to make it | ||
627 | free software which everyone can redistribute and change under these terms. | ||
628 | |||
629 | To do so, attach the following notices to the program. It is safest | ||
630 | to attach them to the start of each source file to most effectively | ||
631 | state the exclusion of warranty; and each file should have at least | ||
632 | the "copyright" line and a pointer to where the full notice is found. | ||
633 | |||
634 | <one line to give the program's name and a brief idea of what it does.> | ||
635 | Copyright (C) <year> <name of author> | ||
636 | |||
637 | This program is free software: you can redistribute it and/or modify | ||
638 | it under the terms of the GNU General Public License as published by | ||
639 | the Free Software Foundation, either version 3 of the License, or | ||
640 | (at your option) any later version. | ||
641 | |||
642 | This program is distributed in the hope that it will be useful, | ||
643 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
644 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
645 | GNU General Public License for more details. | ||
646 | |||
647 | You should have received a copy of the GNU General Public License | ||
648 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
649 | |||
650 | Also add information on how to contact you by electronic and paper mail. | ||
651 | |||
652 | If the program does terminal interaction, make it output a short | ||
653 | notice like this when it starts in an interactive mode: | ||
654 | |||
655 | <program> Copyright (C) <year> <name of author> | ||
656 | This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. | ||
657 | This is free software, and you are welcome to redistribute it | ||
658 | under certain conditions; type `show c' for details. | ||
659 | |||
660 | The hypothetical commands `show w' and `show c' should show the appropriate | ||
661 | parts of the General Public License. Of course, your program's commands | ||
662 | might be different; for a GUI interface, you would use an "about box". | ||
663 | |||
664 | You should also get your employer (if you work as a programmer) or school, | ||
665 | if any, to sign a "copyright disclaimer" for the program, if necessary. | ||
666 | For more information on this, and how to apply and follow the GNU GPL, see | ||
667 | <http://www.gnu.org/licenses/>. | ||
668 | |||
669 | The GNU General Public License does not permit incorporating your program | ||
670 | into proprietary programs. If your program is a subroutine library, you | ||
671 | may consider it more useful to permit linking proprietary applications with | ||
672 | the library. If this is what you want to do, use the GNU Lesser General | ||
673 | Public License instead of this License. But first, please read | ||
674 | <http://www.gnu.org/philosophy/why-not-lgpl.html>. | ||
diff --git a/packages/special/hmatrix-special.cabal b/packages/special/hmatrix-special.cabal index 6d9438c..28b294b 100644 --- a/packages/special/hmatrix-special.cabal +++ b/packages/special/hmatrix-special.cabal | |||
@@ -1,5 +1,5 @@ | |||
1 | Name: hmatrix-special | 1 | Name: hmatrix-special |
2 | Version: 0.3.0 | 2 | Version: 0.3.0.1 |
3 | License: GPL | 3 | License: GPL |
4 | License-file: LICENSE | 4 | License-file: LICENSE |
5 | Author: Alberto Ruiz | 5 | Author: Alberto Ruiz |
diff --git a/packages/tests/LICENSE b/packages/tests/LICENSE index f2125ec..c1cafe1 100644 --- a/packages/tests/LICENSE +++ b/packages/tests/LICENSE | |||
@@ -1,2 +1,26 @@ | |||
1 | Copyright Alberto Ruiz 2010 | 1 | Copyright (c) 2006-2014 Alberto Ruiz and other contributors |
2 | GPL license | 2 | |
3 | All rights reserved. | ||
4 | |||
5 | Redistribution and use in source and binary forms, with or without | ||
6 | modification, are permitted provided that the following conditions are met: | ||
7 | * Redistributions of source code must retain the above copyright | ||
8 | notice, this list of conditions and the following disclaimer. | ||
9 | * Redistributions in binary form must reproduce the above copyright | ||
10 | notice, this list of conditions and the following disclaimer in the | ||
11 | documentation and/or other materials provided with the distribution. | ||
12 | * Neither the name of Alberto Ruiz nor the names of other contributors may | ||
13 | be used to endorse or promote products derived from this software | ||
14 | without specific prior written permission. | ||
15 | |||
16 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND | ||
17 | ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED | ||
18 | WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE | ||
19 | DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE FOR ANY | ||
20 | DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES | ||
21 | (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | ||
22 | LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND | ||
23 | ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT | ||
24 | (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | ||
25 | SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | ||
26 | |||
diff --git a/packages/tests/hmatrix-tests.cabal b/packages/tests/hmatrix-tests.cabal index fec2f98..0514843 100644 --- a/packages/tests/hmatrix-tests.cabal +++ b/packages/tests/hmatrix-tests.cabal | |||
@@ -1,5 +1,5 @@ | |||
1 | Name: hmatrix-tests | 1 | Name: hmatrix-tests |
2 | Version: 0.4 | 2 | Version: 0.4.1.0 |
3 | License: BSD3 | 3 | License: BSD3 |
4 | License-file: LICENSE | 4 | License-file: LICENSE |
5 | Author: Alberto Ruiz | 5 | Author: Alberto Ruiz |
@@ -15,18 +15,28 @@ cabal-version: >=1.8 | |||
15 | 15 | ||
16 | build-type: Simple | 16 | build-type: Simple |
17 | 17 | ||
18 | extra-source-files: CHANGES | 18 | extra-source-files: CHANGES, |
19 | src/tests.hs | 19 | src/TestBase.hs, |
20 | src/TestGSL.hs, | ||
21 | src/Benchmark.hs | ||
22 | |||
23 | flag gsl | ||
24 | description: Enable GSL tests | ||
25 | default: True | ||
20 | 26 | ||
21 | library | 27 | library |
22 | 28 | ||
23 | Build-Depends: base >= 4 && < 5, | 29 | Build-Depends: base >= 4 && < 5, |
24 | hmatrix >= 0.16, hmatrix-gsl >= 0.16, | 30 | QuickCheck >= 2, HUnit, random, |
25 | QuickCheck >= 2, HUnit, random | 31 | hmatrix >= 0.16 |
32 | if flag(gsl) | ||
33 | Build-Depends: hmatrix-gsl >= 0.16 | ||
26 | 34 | ||
27 | hs-source-dirs: src | 35 | hs-source-dirs: src |
28 | 36 | ||
29 | exposed-modules: Numeric.LinearAlgebra.Tests | 37 | exposed-modules: Numeric.LinearAlgebra.Tests |
38 | if flag(gsl) | ||
39 | exposed-modules: Numeric.GSL.Tests | ||
30 | 40 | ||
31 | other-modules: Numeric.LinearAlgebra.Tests.Instances, | 41 | other-modules: Numeric.LinearAlgebra.Tests.Instances, |
32 | Numeric.LinearAlgebra.Tests.Properties | 42 | Numeric.LinearAlgebra.Tests.Properties |
@@ -38,8 +48,30 @@ source-repository head | |||
38 | type: git | 48 | type: git |
39 | location: https://github.com/albertoruiz/hmatrix | 49 | location: https://github.com/albertoruiz/hmatrix |
40 | 50 | ||
41 | Test-Suite basic | 51 | |
42 | Build-Depends: base, hmatrix-tests | 52 | test-suite hmatrix-base-testsuite |
53 | type: exitcode-stdio-1.0 | ||
54 | main-is: src/TestBase.hs | ||
55 | build-depends: base >= 4 && < 5, | ||
56 | hmatrix-tests, | ||
57 | QuickCheck >= 2, HUnit, random | ||
58 | |||
59 | |||
60 | test-suite hmatrix-gsl-testsuite | ||
43 | type: exitcode-stdio-1.0 | 61 | type: exitcode-stdio-1.0 |
44 | main-is: src/tests.hs | 62 | main-is: src/TestGSL.hs |
63 | build-depends: base >= 4 && < 5, | ||
64 | hmatrix-tests, | ||
65 | QuickCheck >= 2, HUnit, random | ||
66 | if flag(gsl) | ||
67 | buildable: True | ||
68 | else | ||
69 | buildable: False | ||
45 | 70 | ||
71 | |||
72 | benchmark hmatrix-base-benchmark | ||
73 | type: exitcode-stdio-1.0 | ||
74 | main-is: src/Benchmark.hs | ||
75 | build-depends: base >= 4 && < 5, | ||
76 | hmatrix-tests, | ||
77 | QuickCheck >= 2, HUnit, random | ||
diff --git a/packages/tests/src/Benchmark.hs b/packages/tests/src/Benchmark.hs new file mode 100644 index 0000000..b37993a --- /dev/null +++ b/packages/tests/src/Benchmark.hs | |||
@@ -0,0 +1,3 @@ | |||
1 | import Numeric.LinearAlgebra.Tests | ||
2 | |||
3 | main = runBenchmarks | ||
diff --git a/packages/tests/src/Numeric/GSL/Tests.hs b/packages/tests/src/Numeric/GSL/Tests.hs new file mode 100644 index 0000000..9dff6f5 --- /dev/null +++ b/packages/tests/src/Numeric/GSL/Tests.hs | |||
@@ -0,0 +1,131 @@ | |||
1 | {-# OPTIONS_GHC -fno-warn-unused-imports -fno-warn-incomplete-patterns #-} | ||
2 | {- | | ||
3 | Module : Numeric.GLS.Tests | ||
4 | Copyright : (c) Alberto Ruiz 2014 | ||
5 | License : BSD3 | ||
6 | Maintainer : Alberto Ruiz | ||
7 | Stability : provisional | ||
8 | |||
9 | Tests for GSL bindings. | ||
10 | |||
11 | -} | ||
12 | |||
13 | module Numeric.GSL.Tests( | ||
14 | runTests | ||
15 | ) where | ||
16 | |||
17 | import Control.Monad(when) | ||
18 | import System.Exit (exitFailure) | ||
19 | |||
20 | import Test.HUnit (runTestTT, failures, Test(..), errors) | ||
21 | |||
22 | import Numeric.LinearAlgebra | ||
23 | import Numeric.GSL | ||
24 | import Numeric.LinearAlgebra.Tests (qCheck, utest) | ||
25 | import Numeric.LinearAlgebra.Tests.Properties ((|~|), (~~)) | ||
26 | |||
27 | --------------------------------------------------------------------- | ||
28 | |||
29 | fittingTest = utest "levmar" (ok1 && ok2) | ||
30 | where | ||
31 | xs = map return [0 .. 39] | ||
32 | sigma = 0.1 | ||
33 | ys = map return $ toList $ fromList (map (head . expModel [5,0.1,1]) xs) | ||
34 | + scalar sigma * (randomVector 0 Gaussian 40) | ||
35 | dats = zip xs (zip ys (repeat sigma)) | ||
36 | dat = zip xs ys | ||
37 | |||
38 | expModel [a,lambda,b] [t] = [a * exp (-lambda * t) + b] | ||
39 | expModelDer [a,lambda,_b] [t] = [[exp (-lambda * t), -t * a * exp(-lambda*t) , 1]] | ||
40 | |||
41 | sols = fst $ fitModelScaled 1E-4 1E-4 20 (expModel, expModelDer) dats [1,0,0] | ||
42 | sol = fst $ fitModel 1E-4 1E-4 20 (expModel, expModelDer) dat [1,0,0] | ||
43 | |||
44 | ok1 = and (zipWith f sols [5,0.1,1]) where f (x,d) r = abs (x-r)<2*d | ||
45 | ok2 = norm2 (fromList (map fst sols) - fromList sol) < 1E-5 | ||
46 | |||
47 | --------------------------------------------------------------------- | ||
48 | |||
49 | odeTest = utest "ode" (last (toLists sol) ~~ newsol) | ||
50 | where | ||
51 | sol = odeSolveV RK8pd 1E-6 1E-6 0 (l2v $ vanderpol 10) (fromList [1,0]) ts | ||
52 | ts = linspace 101 (0,100) | ||
53 | l2v f = \t -> fromList . f t . toList | ||
54 | vanderpol mu _t [x,y] = [y, -x + mu * y * (1-x**2) ] | ||
55 | newsol = [-1.758888036617841, 8.364349410519058e-2] | ||
56 | -- oldsol = [-1.7588880332411019, 8.364348908711941e-2] | ||
57 | |||
58 | --------------------------------------------------------------------- | ||
59 | |||
60 | rootFindingTest = TestList [ utest "root Hybrids" (fst sol1 ~~ [1,1]) | ||
61 | , utest "root Newton" (rows (snd sol2) == 2) | ||
62 | ] | ||
63 | where sol1 = root Hybrids 1E-7 30 (rosenbrock 1 10) [-10,-5] | ||
64 | sol2 = rootJ Newton 1E-7 30 (rosenbrock 1 10) (jacobian 1 10) [-10,-5] | ||
65 | rosenbrock a b [x,y] = [ a*(1-x), b*(y-x**2) ] | ||
66 | jacobian a b [x,_y] = [ [-a , 0] | ||
67 | , [-2*b*x, b] ] | ||
68 | |||
69 | --------------------------------------------------------------------- | ||
70 | |||
71 | minimizationTest = TestList | ||
72 | [ utest "minimization conjugatefr" (minim1 f df [5,7] ~~ [1,2]) | ||
73 | , utest "minimization nmsimplex2" (minim2 f [5,7] `elem` [24,25]) | ||
74 | ] | ||
75 | where f [x,y] = 10*(x-1)**2 + 20*(y-2)**2 + 30 | ||
76 | df [x,y] = [20*(x-1), 40*(y-2)] | ||
77 | minim1 g dg ini = fst $ minimizeD ConjugateFR 1E-3 30 1E-2 1E-4 g dg ini | ||
78 | minim2 g ini = rows $ snd $ minimize NMSimplex2 1E-2 30 [1,1] g ini | ||
79 | |||
80 | --------------------------------------------------------------------- | ||
81 | |||
82 | derivTest = abs (d (\x-> x * d (\y-> x+y) 1) 1 - 1) < 1E-10 | ||
83 | where d f x = fst $ derivCentral 0.01 f x | ||
84 | |||
85 | --------------------------------------------------------------------- | ||
86 | |||
87 | quad f a b = fst $ integrateQAGS 1E-9 100 f a b | ||
88 | |||
89 | -- A multiple integral can be easily defined using partial application | ||
90 | quad2 f a b g1 g2 = quad h a b | ||
91 | where h x = quad (f x) (g1 x) (g2 x) | ||
92 | |||
93 | volSphere r = 8 * quad2 (\x y -> sqrt (r*r-x*x-y*y)) | ||
94 | 0 r (const 0) (\x->sqrt (r*r-x*x)) | ||
95 | |||
96 | --------------------------------------------------------------------- | ||
97 | |||
98 | -- besselTest = utest "bessel_J0_e" ( abs (r-expected) < e ) | ||
99 | -- where (r,e) = bessel_J0_e 5.0 | ||
100 | -- expected = -0.17759677131433830434739701 | ||
101 | |||
102 | -- exponentialTest = utest "exp_e10_e" ( abs (v*10^e - expected) < 4E-2 ) | ||
103 | -- where (v,e,_err) = exp_e10_e 30.0 | ||
104 | -- expected = exp 30.0 | ||
105 | |||
106 | -------------------------------------------------------------------- | ||
107 | |||
108 | polyEval cs x = foldr (\c ac->ac*x+c) 0 cs | ||
109 | |||
110 | polySolveProp p = length p <2 || last p == 0|| 1E-8 > maximum (map magnitude $ map (polyEval (map (:+0) p)) (polySolve p)) | ||
111 | |||
112 | |||
113 | -- | All tests must pass with a maximum dimension of about 20 | ||
114 | -- (some tests may fail with bigger sizes due to precision loss). | ||
115 | runTests :: Int -- ^ maximum dimension | ||
116 | -> IO () | ||
117 | runTests n = do | ||
118 | let test p = qCheck n p | ||
119 | putStrLn "------ fft" | ||
120 | test (\v -> ifft (fft v) |~| v) | ||
121 | c <- runTestTT $ TestList | ||
122 | [ fittingTest | ||
123 | , odeTest | ||
124 | , rootFindingTest | ||
125 | , minimizationTest | ||
126 | , utest "deriv" derivTest | ||
127 | , utest "integrate" (abs (volSphere 2.5 - 4/3*pi*2.5**3) < 1E-8) | ||
128 | , utest "polySolve" (polySolveProp [1,2,3,4]) | ||
129 | ] | ||
130 | when (errors c + failures c > 0) exitFailure | ||
131 | return () | ||
diff --git a/packages/tests/src/Numeric/LinearAlgebra/Tests.hs b/packages/tests/src/Numeric/LinearAlgebra/Tests.hs index c387b5c..8587561 100644 --- a/packages/tests/src/Numeric/LinearAlgebra/Tests.hs +++ b/packages/tests/src/Numeric/LinearAlgebra/Tests.hs | |||
@@ -17,7 +17,8 @@ Some tests. | |||
17 | module Numeric.LinearAlgebra.Tests( | 17 | module Numeric.LinearAlgebra.Tests( |
18 | -- module Numeric.LinearAlgebra.Tests.Instances, | 18 | -- module Numeric.LinearAlgebra.Tests.Instances, |
19 | -- module Numeric.LinearAlgebra.Tests.Properties, | 19 | -- module Numeric.LinearAlgebra.Tests.Properties, |
20 | -- qCheck, | 20 | qCheck, |
21 | utest, | ||
21 | runTests, | 22 | runTests, |
22 | runBenchmarks | 23 | runBenchmarks |
23 | -- , findNaN | 24 | -- , findNaN |
@@ -35,7 +36,6 @@ import Numeric.LinearAlgebra.Tests.Properties | |||
35 | import Test.HUnit hiding ((~:),test,Testable,State) | 36 | import Test.HUnit hiding ((~:),test,Testable,State) |
36 | import System.Info | 37 | import System.Info |
37 | import Data.List(foldl1') | 38 | import Data.List(foldl1') |
38 | import Numeric.GSL | ||
39 | import Prelude hiding ((^)) | 39 | import Prelude hiding ((^)) |
40 | import qualified Prelude | 40 | import qualified Prelude |
41 | import System.CPUTime | 41 | import System.CPUTime |
@@ -68,8 +68,6 @@ a ^ b = a Prelude.^ (b :: Int) | |||
68 | 68 | ||
69 | utest str b = TestCase $ assertBool str b | 69 | utest str b = TestCase $ assertBool str b |
70 | 70 | ||
71 | a ~~ b = fromList a |~| fromList b | ||
72 | |||
73 | feye n = flipud (ident n) :: Matrix Double | 71 | feye n = flipud (ident n) :: Matrix Double |
74 | 72 | ||
75 | 73 | ||
@@ -98,38 +96,6 @@ detTest2 = inv1 |~| inv2 && [det1] ~~ [det2] | |||
98 | (inv2,(lda,sa)) = invlndet m | 96 | (inv2,(lda,sa)) = invlndet m |
99 | det2 = sa * exp lda | 97 | det2 = sa * exp lda |
100 | 98 | ||
101 | -------------------------------------------------------------------- | ||
102 | |||
103 | polyEval cs x = foldr (\c ac->ac*x+c) 0 cs | ||
104 | |||
105 | polySolveProp p = length p <2 || last p == 0|| 1E-8 > maximum (map magnitude $ map (polyEval (map (:+0) p)) (polySolve p)) | ||
106 | |||
107 | --------------------------------------------------------------------- | ||
108 | |||
109 | quad f a b = fst $ integrateQAGS 1E-9 100 f a b | ||
110 | |||
111 | -- A multiple integral can be easily defined using partial application | ||
112 | quad2 f a b g1 g2 = quad h a b | ||
113 | where h x = quad (f x) (g1 x) (g2 x) | ||
114 | |||
115 | volSphere r = 8 * quad2 (\x y -> sqrt (r*r-x*x-y*y)) | ||
116 | 0 r (const 0) (\x->sqrt (r*r-x*x)) | ||
117 | |||
118 | --------------------------------------------------------------------- | ||
119 | |||
120 | derivTest = abs (d (\x-> x * d (\y-> x+y) 1) 1 - 1) < 1E-10 | ||
121 | where d f x = fst $ derivCentral 0.01 f x | ||
122 | |||
123 | --------------------------------------------------------------------- | ||
124 | |||
125 | -- besselTest = utest "bessel_J0_e" ( abs (r-expected) < e ) | ||
126 | -- where (r,e) = bessel_J0_e 5.0 | ||
127 | -- expected = -0.17759677131433830434739701 | ||
128 | |||
129 | -- exponentialTest = utest "exp_e10_e" ( abs (v*10^e - expected) < 4E-2 ) | ||
130 | -- where (v,e,_err) = exp_e10_e 30.0 | ||
131 | -- expected = exp 30.0 | ||
132 | |||
133 | --------------------------------------------------------------------- | 99 | --------------------------------------------------------------------- |
134 | 100 | ||
135 | nd1 = (3><3) [ 1/2, 1/4, 1/4 | 101 | nd1 = (3><3) [ 1/2, 1/4, 1/4 |
@@ -155,59 +121,6 @@ expmTest2 = expm nd2 :~15~: (2><2) | |||
155 | , 2.718281828459045 | 121 | , 2.718281828459045 |
156 | , 2.718281828459045 ] | 122 | , 2.718281828459045 ] |
157 | 123 | ||
158 | --------------------------------------------------------------------- | ||
159 | |||
160 | minimizationTest = TestList | ||
161 | [ utest "minimization conjugatefr" (minim1 f df [5,7] ~~ [1,2]) | ||
162 | , utest "minimization nmsimplex2" (minim2 f [5,7] `elem` [24,25]) | ||
163 | ] | ||
164 | where f [x,y] = 10*(x-1)^2 + 20*(y-2)^2 + 30 | ||
165 | df [x,y] = [20*(x-1), 40*(y-2)] | ||
166 | minim1 g dg ini = fst $ minimizeD ConjugateFR 1E-3 30 1E-2 1E-4 g dg ini | ||
167 | minim2 g ini = rows $ snd $ minimize NMSimplex2 1E-2 30 [1,1] g ini | ||
168 | |||
169 | --------------------------------------------------------------------- | ||
170 | |||
171 | rootFindingTest = TestList [ utest "root Hybrids" (fst sol1 ~~ [1,1]) | ||
172 | , utest "root Newton" (rows (snd sol2) == 2) | ||
173 | ] | ||
174 | where sol1 = root Hybrids 1E-7 30 (rosenbrock 1 10) [-10,-5] | ||
175 | sol2 = rootJ Newton 1E-7 30 (rosenbrock 1 10) (jacobian 1 10) [-10,-5] | ||
176 | rosenbrock a b [x,y] = [ a*(1-x), b*(y-x^2) ] | ||
177 | jacobian a b [x,_y] = [ [-a , 0] | ||
178 | , [-2*b*x, b] ] | ||
179 | |||
180 | --------------------------------------------------------------------- | ||
181 | |||
182 | odeTest = utest "ode" (last (toLists sol) ~~ newsol) | ||
183 | where | ||
184 | sol = odeSolveV RK8pd 1E-6 1E-6 0 (l2v $ vanderpol 10) (fromList [1,0]) ts | ||
185 | ts = linspace 101 (0,100) | ||
186 | l2v f = \t -> fromList . f t . toList | ||
187 | vanderpol mu _t [x,y] = [y, -x + mu * y * (1-x^2) ] | ||
188 | newsol = [-1.758888036617841, 8.364349410519058e-2] | ||
189 | -- oldsol = [-1.7588880332411019, 8.364348908711941e-2] | ||
190 | |||
191 | --------------------------------------------------------------------- | ||
192 | |||
193 | fittingTest = utest "levmar" (ok1 && ok2) | ||
194 | where | ||
195 | xs = map return [0 .. 39] | ||
196 | sigma = 0.1 | ||
197 | ys = map return $ toList $ fromList (map (head . expModel [5,0.1,1]) xs) | ||
198 | + scalar sigma * (randomVector 0 Gaussian 40) | ||
199 | dats = zip xs (zip ys (repeat sigma)) | ||
200 | dat = zip xs ys | ||
201 | |||
202 | expModel [a,lambda,b] [t] = [a * exp (-lambda * t) + b] | ||
203 | expModelDer [a,lambda,_b] [t] = [[exp (-lambda * t), -t * a * exp(-lambda*t) , 1]] | ||
204 | |||
205 | sols = fst $ fitModelScaled 1E-4 1E-4 20 (expModel, expModelDer) dats [1,0,0] | ||
206 | sol = fst $ fitModel 1E-4 1E-4 20 (expModel, expModelDer) dat [1,0,0] | ||
207 | |||
208 | ok1 = and (zipWith f sols [5,0.1,1]) where f (x,d) r = abs (x-r)<2*d | ||
209 | ok2 = norm2 (fromList (map fst sols) - fromList sol) < 1E-5 | ||
210 | |||
211 | ----------------------------------------------------- | 124 | ----------------------------------------------------- |
212 | 125 | ||
213 | mbCholTest = utest "mbCholTest" (ok1 && ok2) where | 126 | mbCholTest = utest "mbCholTest" (ok1 && ok2) where |
@@ -485,13 +398,33 @@ staticTest = utest "static" (fst $ checkT (undefined :: L 3 5)) | |||
485 | 398 | ||
486 | -------------------------------------------------------------------------------- | 399 | -------------------------------------------------------------------------------- |
487 | 400 | ||
401 | indexProp g f x = a1 == g a2 && a2 == a3 && b1 == g b2 && b2 == b3 | ||
402 | where | ||
403 | l = map g (toList (f x)) | ||
404 | a1 = maximum l | ||
405 | b1 = minimum l | ||
406 | a2 = x `atIndex` maxIndex x | ||
407 | b2 = x `atIndex` minIndex x | ||
408 | a3 = maxElement x | ||
409 | b3 = minElement x | ||
410 | |||
411 | -------------------------------------------------------------------------------- | ||
412 | |||
488 | -- | All tests must pass with a maximum dimension of about 20 | 413 | -- | All tests must pass with a maximum dimension of about 20 |
489 | -- (some tests may fail with bigger sizes due to precision loss). | 414 | -- (some tests may fail with bigger sizes due to precision loss). |
490 | runTests :: Int -- ^ maximum dimension | 415 | runTests :: Int -- ^ maximum dimension |
491 | -> IO () | 416 | -> IO () |
492 | runTests n = do | 417 | runTests n = do |
493 | setErrorHandlerOff | ||
494 | let test p = qCheck n p | 418 | let test p = qCheck n p |
419 | putStrLn "------ index" | ||
420 | test( \m -> indexProp id flatten (single (m :: RM)) ) | ||
421 | test( \v -> indexProp id id (single (v :: Vector Double)) ) | ||
422 | test( \m -> indexProp id flatten (m :: RM) ) | ||
423 | test( \v -> indexProp id id (v :: Vector Double) ) | ||
424 | test( \m -> indexProp magnitude flatten (single (m :: CM)) ) | ||
425 | test( \v -> indexProp magnitude id (single (v :: Vector (Complex Double))) ) | ||
426 | test( \m -> indexProp magnitude flatten (m :: CM) ) | ||
427 | test( \v -> indexProp magnitude id (v :: Vector (Complex Double)) ) | ||
495 | putStrLn "------ mult Double" | 428 | putStrLn "------ mult Double" |
496 | test (multProp1 10 . rConsist) | 429 | test (multProp1 10 . rConsist) |
497 | test (multProp1 10 . cConsist) | 430 | test (multProp1 10 . cConsist) |
@@ -595,8 +528,6 @@ runTests n = do | |||
595 | putStrLn "------ expm" | 528 | putStrLn "------ expm" |
596 | test (expmDiagProp . complex. rSqWC) | 529 | test (expmDiagProp . complex. rSqWC) |
597 | test (expmDiagProp . cSqWC) | 530 | test (expmDiagProp . cSqWC) |
598 | putStrLn "------ fft" | ||
599 | test (\v -> ifft (fft v) |~| v) | ||
600 | putStrLn "------ vector operations - Double" | 531 | putStrLn "------ vector operations - Double" |
601 | test (\u -> sin u ^ 2 + cos u ^ 2 |~| (1::RM)) | 532 | test (\u -> sin u ^ 2 + cos u ^ 2 |~| (1::RM)) |
602 | test $ (\u -> sin u ^ 2 + cos u ^ 2 |~| (1::CM)) . liftMatrix makeUnitary | 533 | test $ (\u -> sin u ^ 2 + cos u ^ 2 |~| (1::CM)) . liftMatrix makeUnitary |
@@ -632,11 +563,6 @@ runTests n = do | |||
632 | -- , utest "gamma" (gamma 5 == 24.0) | 563 | -- , utest "gamma" (gamma 5 == 24.0) |
633 | -- , besselTest | 564 | -- , besselTest |
634 | -- , exponentialTest | 565 | -- , exponentialTest |
635 | , utest "deriv" derivTest | ||
636 | , utest "integrate" (abs (volSphere 2.5 - 4/3*pi*2.5^3) < 1E-8) | ||
637 | , utest "polySolve" (polySolveProp [1,2,3,4]) | ||
638 | , minimizationTest | ||
639 | , rootFindingTest | ||
640 | , utest "randomGaussian" randomTestGaussian | 566 | , utest "randomGaussian" randomTestGaussian |
641 | , utest "randomUniform" randomTestUniform | 567 | , utest "randomUniform" randomTestUniform |
642 | , utest "buildVector/Matrix" $ | 568 | , utest "buildVector/Matrix" $ |
@@ -645,8 +571,6 @@ runTests n = do | |||
645 | , utest "rank" $ rank ((2><3)[1,0,0,1,5*eps,0]) == 1 | 571 | , utest "rank" $ rank ((2><3)[1,0,0,1,5*eps,0]) == 1 |
646 | && rank ((2><3)[1,0,0,1,7*eps,0]) == 2 | 572 | && rank ((2><3)[1,0,0,1,7*eps,0]) == 2 |
647 | , utest "block" $ fromBlocks [[ident 3,0],[0,ident 4]] == (ident 7 :: CM) | 573 | , utest "block" $ fromBlocks [[ident 3,0],[0,ident 4]] == (ident 7 :: CM) |
648 | , odeTest | ||
649 | , fittingTest | ||
650 | , mbCholTest | 574 | , mbCholTest |
651 | , utest "offset" offsetTest | 575 | , utest "offset" offsetTest |
652 | , normsVTest | 576 | , normsVTest |
diff --git a/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs b/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs index d6ec957..9bdf897 100644 --- a/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs +++ b/packages/tests/src/Numeric/LinearAlgebra/Tests/Properties.hs | |||
@@ -13,7 +13,7 @@ Testing properties. | |||
13 | -} | 13 | -} |
14 | 14 | ||
15 | module Numeric.LinearAlgebra.Tests.Properties ( | 15 | module Numeric.LinearAlgebra.Tests.Properties ( |
16 | dist, (|~|), (~:), Aprox((:~)), | 16 | dist, (|~|), (~~), (~:), Aprox((:~)), |
17 | zeros, ones, | 17 | zeros, ones, |
18 | square, | 18 | square, |
19 | unitary, | 19 | unitary, |
@@ -60,6 +60,8 @@ infixl 4 |~| | |||
60 | a |~| b = a :~10~: b | 60 | a |~| b = a :~10~: b |
61 | --a |~| b = dist a b < 10^^(-10) | 61 | --a |~| b = dist a b < 10^^(-10) |
62 | 62 | ||
63 | a ~~ b = fromList a |~| fromList b | ||
64 | |||
63 | data Aprox a = (:~) a Int | 65 | data Aprox a = (:~) a Int |
64 | -- (~:) :: (Normed a, Num a) => Aprox a -> a -> Bool | 66 | -- (~:) :: (Normed a, Num a) => Aprox a -> a -> Bool |
65 | a :~n~: b = dist a b < 10^^(-n) | 67 | a :~n~: b = dist a b < 10^^(-n) |
diff --git a/packages/tests/src/tests.hs b/packages/tests/src/TestBase.hs index 23fd675..23fd675 100644 --- a/packages/tests/src/tests.hs +++ b/packages/tests/src/TestBase.hs | |||
diff --git a/packages/tests/src/TestGSL.hs b/packages/tests/src/TestGSL.hs new file mode 100644 index 0000000..112422d --- /dev/null +++ b/packages/tests/src/TestGSL.hs | |||
@@ -0,0 +1,3 @@ | |||
1 | import Numeric.GSL.Tests | ||
2 | |||
3 | main = runTests 20 | ||