view src/scheme/modelbase.scm @ 1:5df24c91468d

Oh my what a mess.
author samer
date Fri, 05 Apr 2019 16:26:00 +0100
parents bf79fb79ee13
children
line wrap: on
line source
;;; these functions handle the model hierarchy: it is notionally
;;; a multidimensional array. A particular model is a member of
;;; the product space:
;;; 	{ sampling-rate x {mono, stereo} x frame-size x ensemble x model-class }
;;; sampling-rate in { 11kHz, 22kHz, 44kHz }
;;; frame-size is an integer
;;; ensemble denotes the set of audio files used to train the model
;;; model-class is eg, ICA, Gaussian, etc.
;;; The model classes may have a taxonomic hierarchy, eg, 
;;;    Gaussian: full covariance, spherical, diagonal, PCA
;;; and may have finer refinements, eg
;;;    ICA with exponential prior, cauchy prior, generalised exponential
;;; In addition, there may be different instances of each model,
;;; trained at different times using a different realisation of the 
;;; ensemble.
;;;
;;; Of-course, the file system doesn't support multidimensional arrays or
;;; product spaces: only strict hierarchies, so there needs to be a mapping
;;; between the two. The order in which the dimensions are arranged is somewhat
;;; arbitrary and invovles replication of directory names. Hence, these
;;; functions to automate the whole thing.

(define root "models")		; root defaults to "models" in current directory
(define (_rate rate)			; return path component for rate
	(string-append (.toString rate) "kmono"))

(define (_frame fr)
	(string-append "x" (.toString fr)))
		

(define (model-path rate frame data class)
	(define / "/")		; path separator
	(string-append 
		root / 
		(_rate rate) / 
		data /  
		(_frame frame) /
		class /
	)
)

;; set up environment for running given model
(define (push-model rate x class data)

	; compose path for properties file
	(define model-props (cat (model-path rate (.size x) data class) "args"))		
	
	; create new properties object for persistent properties
	;(define model-env (samer.core.util.Properties. (env) (Node. class (.getNode x))))
	(define model-env (samer.core.util.Properties. (env) (.getNode x)))
	
	; load any previously saved properties
	(.load model-env (java.io.FileInputStream. model-props))
	
	; push an environment for non-persistent objects, with the properties as parent
	(Shell.push (samer.core.util.HashMap. model-env))	
	(put "props-file" model-props)		; save the properties file name for later
	
	;; should we load a model script here?
)

(define (pop-model)
	; current environment should be a  HashMap containing "props-file"
	; it's parent should be a Properties environment 
	; so we save the parent environment to the recovered file
	(.save (.parent (env)) (java.io.FileOutputStream. (get "props-file")))
	(Shell.pop)		; this will unlink and discard both environments
)