we need to depend on the LISTOFLIST package.
[CommonLispStat.git] / src / packages.lisp
blob3e0429eb464f32a1c3afbb6e83147ecb00311242
1 ;;; -*- mode: lisp -*-
3 ;;; Time-stamp: <2009-12-20 12:42:50 tony>
4 ;;; Creation: <2008-03-11 19:18:34 user>
5 ;;; File: packages.lisp
6 ;;; Author: AJ Rossini <blindglobe@gmail.com>
7 ;;; Copyright: (c)2007--2008, AJ Rossini. BSD, LLGPL, or GPLv2, depending
8 ;;; on how it arrives.
9 ;;; Purpose: package structure description for lispstat
11 ;;; What is this talk of 'release'? Klingons do not make software
12 ;;; 'releases'. Our software 'escapes', leaving a bloody trail of
13 ;;; designers and quality assurance people in its wake.
15 (in-package :cl-user)
17 ;;; Current structure, dependencies:
19 (progn
20 (ls-user :depends-on lisp-stat)
21 (lisp-stat :depends-on '(cls-dataframe
22 cls-data
23 lisp-matrix
25 (cls-dataframe :depends-on cls-data)
26 |#
30 ;;; Basics
32 (defpackage :lisp-stat-config
33 (:documentation "global settings and variables. Probably need a
34 localization tool as well.")
35 (:use :common-lisp)
36 (:export *common-lisp-stat-version*
37 *default-path* *lsos-files* *basic-files* *ls-files*
39 *cls-data-dir* *cls-home-dir* *cls-examples-dir*))
41 (defpackage :lisp-stat-object-system
42 (:nicknames :ls-objects :lsos)
43 (:use :common-lisp)
44 (:shadow :call-method :call-next-method)
45 (:export ls-object objectp *object* kind-of-p make-object
46 *message-hook*
47 *set-slot-hook* proto-slot-value self
48 send call-next-method call-method
49 defmeth defproto instance-slots proto-name))
51 ;;; -types and -float probably ought to be moved into a -numerics
52 ;;; package.
54 (defpackage :lisp-stat-types
55 (:documentation "Provides some typeing for LispStat, but is clearly
56 a bit incomplete.")
57 (:use :common-lisp)
58 (:export fixnump
59 check-nonneg-fixnum check-one-nonneg-fixnum
60 check-one-fixnum check-one-real check-one-number))
62 (defpackage :lisp-stat-float
63 (:use :common-lisp)
64 (:export +stat-float-typing+ +stat-cfloat-typing+ +stat-float-template+
65 machine-epsilon base-float makedouble
67 make-base-trans-fun-2 make-base-trans-fun
69 base-log base-exp base-expt base-sqrt base-sin base-cos
70 base-tan base-asin base-acos base-atan base-sinh
71 BASE-COSH BASE-TANH BASE-ASINH BASE-ACOSH BASE-ATANH
72 BASE-ABS BASE-PHASE BASE-FFLOOR BASE-FCEILING BASE-FTRUNCATE
73 BASE-FROUND BASE-SIGNUM BASE-CIS))
75 ;;; Probably should move into cls-data package.
77 (defpackage :lisp-stat-compound-data
78 (:use :common-lisp
79 :lisp-stat-object-system
80 :lisp-stat-types)
81 (:shadowing-import-from :lisp-stat-object-system
82 call-next-method call-method)
83 (:export compound-data-p *compound-data-proto*
84 compound-object-p
85 compound-data-seq compound-data-length
86 element-list element-seq
87 sort-data order rank
88 recursive-map-elements map-elements repeat
89 check-sequence
90 get-next-element make-next-element set-next-element
91 ;; sequencep
92 iseq ordered-nneg-seq
93 select split-list which
94 difference rseq
95 flatten-list))
97 (defpackage :lisp-stat-macros
98 (:use :common-lisp
99 :lisp-stat-compound-data)
100 (:export make-rv-function make-rv-function-1))
102 (defpackage :lisp-stat-basics
103 (:use :common-lisp
104 :lisp-stat-object-system
105 :lisp-stat-types
106 :lisp-stat-float
107 :lisp-stat-macros
108 :lisp-stat-compound-data)
109 (:shadowing-import-from :lisp-stat-object-system
110 call-method call-next-method)
111 (:export permute-array sum prod count-elements mean
112 if-else sample))
114 (defpackage :lisp-stat-float
115 (:use :common-lisp)
116 (:export +stat-float-typing+ +stat-cfloat-typing+ +stat-float-template+
117 machine-epsilon base-float makedouble
119 make-base-trans-fun-2 make-base-trans-fun
121 BASE-LOG BASE-EXP BASE-EXPT BASE-SQRT BASE-SIN BASE-COS
122 BASE-TAN BASE-ASIN BASE-ACOS BASE-ATAN BASE-SINH
123 BASE-COSH BASE-TANH BASE-ASINH BASE-ACOSH BASE-ATANH
124 BASE-ABS BASE-PHASE BASE-FFLOOR BASE-FCEILING BASE-FTRUNCATE
125 BASE-FROUND BASE-SIGNUM BASE-CIS))
127 (defpackage :lisp-stat-macros
128 (:use :common-lisp
129 :lisp-stat-compound-data)
130 (:export make-rv-function make-rv-function-1))
133 (defpackage :cls-matrix
134 (:documentation "basic utilities for using lisp arrays as numerical
135 matrices. Not optimized, and must consider this slow. Routines
136 should be optimized, it is only that we need them first, optimize
137 them later.")
138 (:use :common-lisp)
139 (:export matrixp num-rows num-cols matmult identity-matrix diagonal
140 row-list column-list inner-product outer-product
141 cross-product transpose bind-columns bind-rows
142 array-data-vector vector-to-array))
145 ;;; NEW CLOS STRUCTURE
147 ;;; cls-data... in dataframe, though.
148 (defpackage :cls-dataframe
149 (:use :common-lisp
150 :xarray
151 :lisp-matrix
152 :listoflist)
153 (:shadowing-import-from :xarray slice)
154 (:export
155 ;; generic container class for data -- if small enough
156 ;; could be value, otherwise might be reference.
157 dataframe-like
158 dataframe-array
159 make-dataframe
161 ;; accessors
162 varlabels caselabels nrows ncols
163 dataframe-dimension dataframe-dimensons
164 xref xtype xdims xdim xrank slice take carray
166 dfref dfref-case dfref-var
167 consistent-dataframe-p
170 dataset
171 list-of-columns ;; list-of-variables
172 list-of-rows ;; list-of-observations
175 (defpackage :cls-data
176 (:use :common-lisp
177 :xarray
178 :lisp-matrix
179 :cls-dataframe) ; for dataframe
180 (:shadowing-import-from :xarray slice)
181 (:export listoflist->dataframe
182 listoflist->array
183 listoflist->matrix-like))
185 lists-of-same-size
186 equal-listoflist
187 transpose-listoflist
190 (defpackage :cls-dataimport
191 (:documentation "Data I/O and similar import technologies.")
192 (:use :common-lisp
193 :lisp-stat-object-system
194 :cls-dataframe
195 :cls-data
196 :rsm.string)
197 (:shadowing-import-from :lisp-stat-object-system
198 call-method call-next-method)
199 (:export dsvstream->dataframe dsvstream->matrix dsvstream->listoflist))
202 (defpackage :lisp-stat-model
203 (:documentation "Model management for data analysis.")
204 (:use :common-lisp
205 :lisp-matrix)
206 (:export
207 ;; data structures for model and model/data combination
208 model statistical-model analysis))
210 ;;; visualization
212 (defpackage :cls-visualize
213 (:use :common-lisp
214 :lisp-matrix
215 :cls-dataframe)
216 (:shadowing-import-from :xarray slice)
220 (defpackage :cls-visualize-plplot
221 (:use :common-lisp
222 :lisp-matrix
223 :cls-dataframe
224 :cl-plplot-system)
225 (:export
226 ;; examples
227 plot-ex contour-plot-ex fn-contour-plot-ex shade-plot-ex 3D-plot-ex))
230 ;;; USER PACKAGES
232 (defpackage :lisp-stat-ffi-int
233 (:use :common-lisp
234 :cffi)
235 (:export ccl-store-integer ccl-store-double ccl-store-ptr
236 get-buf ))
238 (defpackage :lisp-stat-probability
239 (:use :common-lisp
240 :cffi
241 :lisp-stat-ffi-int
242 :lisp-stat-macros)
243 (:export log-gamma set-seed
244 uniform-rand
245 normal-cdf normal-quant normal-dens normal-rand
246 bivnorm-cdf
247 cauchy-cdf cauchy-quant cauchy-dens cauchy-rand
248 gamma-cdf gamma-quant gamma-dens gamma-rand
249 chisq-cdf chisq-quant chisq-dens chisq-rand
250 beta-cdf beta-quant beta-dens beta-rand
251 t-cdf t-quant t-dens t-rand
252 f-cdf f-quant f-dens f-rand
253 poisson-cdf poisson-quant poisson-pmf poisson-rand
254 binomial-cdf binomial-quant binomial-pmf binomial-rand))
258 (defpackage :lisp-stat-math
259 (:use :common-lisp
260 :lisp-stat-object-system
261 :lisp-stat-macros
262 :lisp-stat-compound-data
263 :lisp-stat-float)
264 (:shadowing-import-from :lisp-stat-object-system
265 call-method call-next-method)
266 (:shadow expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan
267 asin acos atan sinh cosh tanh asinh acosh atanh float random
268 truncate floor ceiling round minusp zerop plusp evenp oddp
269 < <= = /= >= > ;; complex
270 conjugate realpart imagpart phase
271 min max logand logior logxor lognot ffloor fceiling
272 ftruncate fround signum cis)
273 (:export ^ ** expt + - * / mod rem pmin pmax abs 1+ 1- log exp sqrt sin cos
274 tan asin acos atan sinh cosh tanh asinh acosh atanh float random
275 truncate floor ceiling round minusp zerop plusp evenp oddp < <= =
276 /= >= > ;; complex
277 conjugate realpart imagpart phase min max
278 logand logior logxor lognot ffloor fceiling ftruncate fround
279 signum cis)
280 (:documentation "Vectorization of numerical functions"))
283 #| ;; some of this goes back in, but not all of it?
284 (defpackage :lisp-stat-linalg
285 (:use :common-lisp
286 :cffi
287 :lisp-matrix
288 :lisp-stat-math
289 :lisp-stat-types
290 :lisp-stat-float
291 :lisp-stat-compound-data)
292 (:shadowing-import-from :lisp-stat-math
293 expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan
294 asin acos atan sinh cosh tanh asinh acosh atanh float random
295 truncate floor ceiling round minusp zerop plusp evenp oddp
296 < <= = /= >= > complex conjugate realpart imagpart phase
297 min max logand logior logxor lognot ffloor fceiling
298 ftruncate fround signum cis)
299 (:export chol-decomp lu-decomp lu-solve determinant inverse
300 sv-decomp qr-decomp rcondest make-rotation spline
301 kernel-dens kernel-smooth
302 fft make-sweep-matrix sweep-operator ax+y eigen
304 check-real ;; for optimize
306 covariance-matrix matrix print-matrix solve
307 backsolve eigenvalues eigenvectors accumulate cumsum combine
308 lowess))
315 (defpackage :lisp-stat-data
316 (:documentation "Data management, integration, I/O, and other data technologies.")
317 (:nicknames :ls-data)
318 (:use :common-lisp
319 :lisp-stat-object-system
320 :lisp-stat-config
321 :lisp-stat-types
322 :lisp-stat-compound-data)
323 (:shadowing-import-from :lisp-stat-object-system
324 call-method call-next-method)
325 (:export
326 ;; generic structures
327 ;; Variables
328 empirical-statistical-variable
329 modelbased-statistical-variable
330 categorical-statistical-variable
331 nominal-statistical-variable
332 ordinal-statistical-variable
333 continuous-statistical-variable
335 ordering factor-levels nobs support pdmf draw
336 print-object
338 ;; Observations
339 statistical-observation
340 measurement-types record
341 ;; XLS compat tools
342 open-file-dialog read-data-file read-data-columns load-data
343 load-example *variables* *ask-on-redefine*
344 def variables savevar undef))
346 (defpackage :lisp-stat-descriptive-statistics
347 (:use :common-lisp
348 :lisp-matrix
349 :lisp-stat-data
350 :lisp-stat-math
351 :lisp-stat-compound-data
352 :lisp-stat-basics)
353 (:shadowing-import-from :lisp-stat-math ;; life is a vector!
354 expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan
355 asin acos atan sinh cosh tanh asinh acosh atanh float random
356 truncate floor ceiling round minusp zerop plusp evenp oddp
357 < <= = /= >= > ;; complex
358 conjugate realpart imagpart phase
359 min max logand logior logxor lognot ffloor fceiling
360 ftruncate fround signum cis)
361 (:export mean standard-deviation variance
362 quantile median interquartile-range
363 fivnum sample))
365 (defpackage :lisp-stat-regression-linear
366 (:use :common-lisp
367 :lisp-matrix
368 :lisp-stat-basics
369 :lisp-stat-compound-data
370 :lisp-stat-descriptive-statistics )
371 (:shadowing-import-from :lisp-stat-object-system
372 call-method call-next-method)
373 (:export regression-model fit-model
375 estimates covariance-matrix
376 ;; functions for helpers
377 lm xtxinv
378 print-object ;; for method dispatch
381 (defpackage :common-lisp-statistics
382 (:documentation "Experimentation package for LispStat. Serious work
383 should be packaged up as a separate but similar package to help
384 drive reproducibility. By this I mean, creating a
385 data/analytics/analysis package with the minimal set of
386 objects/packages required.")
387 (:nicknames :cls :common-lisp-statistics :lisp-stat)
388 (:use :common-lisp
389 :xarray ;; generic reference -- internally supporting array, lol structs
390 :lisp-matrix ;; conversion to a more robust linalg approach
391 :lisp-stat-config
392 :lisp-stat-object-system
393 :lisp-stat-compound-data
394 :lisp-stat-probability
395 :lisp-stat-types
396 :lisp-stat-float
397 :lisp-stat-basics
398 :lisp-stat-data
399 :cls-dataframe
400 :cls-data
401 :lisp-stat-math
402 :lisp-stat-descriptive-statistics
403 :lisp-stat-regression-linear
404 :cls-visualize
405 ;; :cybertiggyr-dsv
406 ;; :cls-visualize-plplot
408 (:shadowing-import-from :xarray slice)
409 (:shadowing-import-from :lisp-stat-object-system
410 call-method call-next-method)
411 (:shadowing-import-from :lisp-stat-math
412 expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan
413 asin acos atan sinh cosh tanh asinh acosh atanh float random
414 truncate floor ceiling round minusp zerop plusp evenp oddp
415 < <= = /= >= >
416 ;;complex
417 conjugate realpart imagpart phase
419 min max
420 logand logior logxor lognot
421 ffloor fceiling ftruncate fround
422 signum cis)
423 (:export
424 ;; lisp-stat-config:
425 *default-path* *lsos-files* *basic-files* *ls-files*
426 l *cls-home-dir* *cls-data-dir* *cls-examples-dir*
428 ;; lsobjects :
429 defproto defproto2
430 defmeth send proto-slot-value
432 ;; lstypes :
433 fixnump check-nonneg-fixnum check-one-fixnum
434 check-one-nonneg-fixnum
435 check-one-real check-one-number
437 ;; lsmacros:
439 ;; lsfloat :
440 machine-epsilon
442 ;; compound :
443 compound-data-p *compound-data-proto* compound-object-p
444 compound-data-seq compound-data-length
445 element-list element-seq
446 sort-data order rank
447 recursive-map-elements map-elements
448 repeat
449 check-sequence
450 get-next-element make-next-element set-next-element
451 ;; sequencep
452 iseq
453 ordered-nneg-seq
454 select which
455 difference rseq
457 ;; lsmath.lsp
458 ^ ** expt + - * / mod rem pmin pmax abs 1+ 1- log exp sqrt sin cos
459 tan asin acos atan sinh cosh tanh asinh acosh atanh float random
460 truncate floor ceiling round minusp zerop plusp evenp oddp < <= =
461 /= >= > ;; complex
462 conjugate realpart imagpart phase min max
463 logand logior logxor lognot ffloor fceiling ftruncate fround
464 signum cis
466 #| ;; The following need to be re-found in lisp-matrix...
468 ;; matrices.lisp
469 matrixp num-rows num-cols matmult identity-matrix diagonal row-list
470 column-list inner-product outer-product cross-product transpose
471 bind-columns bind-rows
473 ;; linalg.lisp
474 chol-decomp lu-decomp lu-solve determinant inverse
475 sv-decomp qr-decomp rcondest make-rotation spline
476 kernel-dens kernel-smooth
477 fft make-sweep-matrix sweep-operator ax+y eigen
478 check-real
479 covariance-matrix matrix print-matrix solve
480 backsolve eigenvalues eigenvectors accumulate cumsum combine
481 lowess
483 ;; in linalg.lisp, possibly not supported by matlisp
484 spline kernel-dens kernel-smooth
488 ;; optimize.lsp
489 newtonmax nelmeadmax
491 ;; lispstat-macros
492 make-rv-function make-rv-function-1
494 ;; xarray
495 xref xtype xdims xdim xdims*
496 lists-of-same-size equal-listoflist transpose-listoflist
498 ;; data
499 ;; need to take this list and make it strings... specs could mean
500 ;; that we process the strings in different ways?
502 (let ((lst ()))
503 (unlist
504 (mapc #'symbol-for-symbol-to-string-or-symbol
505 (do-external-symbols (s (find-package 'lisp-stat-data) lst) (push s lst))))
506 lst)
508 open-file-dialog read-data-file read-data-columns load-data
509 load-example *variables* *ask-on-redefine*
510 def variables savevar undef
511 ;; dataframe
512 dataframe-like dataframe-array make-dataframe
513 varlabels caselabels nrows ncols
514 dataframe-dimension dataframe-dimensons
515 dfref dfref-case dfref-var
516 consistent-dataframe-p
517 dataset list-of-columns list-of-rows
519 ;; listoflist
520 listoflist->dataframe listoflist->array listoflist->matrix-like
522 ;; statistics.lsp (descriptions, should probably be moved
523 ;; later...?
524 standard-deviation quantile median interquartile-range
525 fivnum sample
527 ;; probability (dists.lisp)
528 log-gamma set-seed
529 uniform-rand normal-cdf normal-quant normal-dens
530 normal-rand bivnorm-cdf cauchy-cdf cauchy-quant cauchy-dens
531 cauchy-rand gamma-cdf gamma-quant gamma-dens gamma-rand
532 chisq-cdf chisq-quant chisq-dens chisq-rand beta-cdf beta-quant
533 beta-dens beta-rand t-cdf t-quant t-dens t-rand f-cdf f-quant
534 f-dens f-rand poisson-cdf poisson-quant poisson-pmf poisson-rand
535 binomial-cdf binomial-quant binomial-pmf binomial-rand
537 ;; Here is where we have a problem -- lispstat core should be core
538 ;; data management and config problems, with packages providing
539 ;; specialized extensions to LispStat, i.e. regression, nonlin
540 ;; regression, bayesian regression via laplace approximation, etc.
542 ;; The following could be considered "recommended packages",
543 ;; similar to the idea of the recommended packages in R. Probably
544 ;; we want them to do the exporting within that package, therefore
545 ;; NOT being able to lock the "data-ish" package, but only the
546 ;; subpackages prior to export.
548 ;; regression.lsp
549 ;; -- linear regressin models.
550 regression-model fit-model
551 estimates covariance-matrix
553 regression-model-proto x y intercept sweep-matrix
554 basis weights included total-sum-of-squares residual-sum-of-squares
555 predictor-names response-name case-labels
556 lm xtxinv
558 ;; nonlin.lsp
559 ;; -- nonlinear regression models
560 nreg-model nreg-model-proto mean-function theta-hat epsilon
561 count-limit verbose
562 ;; we might need something like xtxinv here? But should be
563 ;; encapsulated, so we use the one in regression.lisp
565 ;; bayes.lsp
566 bayes-model bayes-model-proto bayes-internals
568 ;; plots.lisp
569 plot-ex
570 contour-plot-ex
571 fn-contour-plot-ex
572 shade-plot-ex
573 3D-plot-ex
578 ;;;; PACKAGES FOR USEABILITY
580 (defpackage :lisp-stat-data-examples
581 (:documentation "Example data for unittests, examples, illustrations,")
582 (:use :common-lisp
583 :common-lisp-statistics)
584 (:shadowing-import-from :lisp-stat
585 call-method call-next-method
587 expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan
588 asin acos atan sinh cosh tanh asinh acosh atanh float random
589 truncate floor ceiling round minusp zerop plusp evenp oddp
590 < <= = /= >= > > ;; complex
591 conjugate realpart imagpart phase
592 min max logand logior logxor lognot ffloor fceiling
593 ftruncate fround signum cis
595 <= float imagpart)
596 (:export iron aluminum absorbtion
597 diabetes dlabs))
600 (defpackage :lisp-stat-user
601 (:documentation "Experimentation package for LispStat. Serious work
602 should be placed in a similar package elsewhere for
603 reproducibility. But this should hint as to what needs to be done
604 for a user- or analysis-package.")
605 (:nicknames :ls-user :cls-user)
606 (:use :common-lisp ; always needed for user playgrounds!
607 :lisp-matrix
608 :common-lisp-statistics
609 :lisp-stat-data-examples) ;; this last is to have 'things to play with'
610 (:shadowing-import-from :lisp-stat
611 call-method call-next-method
613 expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan
614 asin acos atan sinh cosh tanh asinh acosh atanh float random
615 truncate floor ceiling round minusp zerop plusp evenp oddp
616 < <= = /= >= > > ;; complex
617 conjugate realpart imagpart phase
618 min max logand logior logxor lognot ffloor fceiling
619 ftruncate fround signum cis
621 <= float imagpart))
623 (defpackage :lisp-stat-unittests
624 (:use :common-lisp
625 :lift :lisp-matrix
626 :lisp-stat :lisp-stat-data-examples)
627 (:shadowing-import-from :lisp-stat
628 call-method call-next-method ;; objects
629 expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan ;; lsmath
630 asin acos atan sinh cosh tanh asinh acosh atanh float random
631 truncate floor ceiling round minusp zerop plusp evenp oddp
632 < <= = /= >= > ;; complex
633 conjugate realpart imagpart phase
634 min max logand logior logxor lognot ffloor fceiling
635 ftruncate fround signum cis)
636 (:export run-lisp-stat-tests run-lisp-stat-test scoreboard ; exec
637 almost= almost=lists numerical=)) ; compare
639 (defpackage :cls-dataframe-example
640 (:use :common-lisp
641 :lift :lisp-stat-unittests
642 :lisp-stat-data-examples
643 :cls-dataframe)
644 (:export absorbtion aluminum iron))
647 (defpackage :lisp-stat-optimize
648 (:use :common-lisp
649 :cffi
650 :lisp-matrix
651 :lisp-stat-ffi-int
652 :lisp-stat-object-system
653 :lisp-stat-types
654 :lisp-stat-compound-data
655 :lisp-stat-math
656 :lisp-stat-float
657 :lisp-stat-basics
659 :lisp-stat-matrix
660 :lisp-stat-linalg-data
661 :lisp-stat-linalg
664 (:shadowing-import-from :lisp-stat-object-system
665 call-method call-next-method)
666 (:shadowing-import-from :lisp-stat-math
667 expt + - * / ** mod rem abs 1+ 1- log exp sqrt sin cos tan
668 asin acos atan sinh cosh tanh asinh acosh atanh float random
669 truncate floor ceiling round minusp zerop plusp evenp oddp
670 < <= = /= >= > complex conjugate realpart imagpart phase
671 min max logand logior logxor lognot ffloor fceiling
672 ftruncate fround signum cis)
673 (:export
674 ;; derivatives
675 numgrad numhess
677 ;; optimization
678 newtonmax nelmeadmax))