/**
* Simple Javascript eXtension - 1.0, Machine Leanring Module
* (c) 2011 - 2015 Steve L. Nyemba, steve@the-phi.com
* License GPL version 3.0
*
* dependencies:
*	jx.utils	collection of utilities and design patterns used 
*	jx.math		various math & statistical functions
* This file implements a few reusable machine learning models/techniques
* 
* jx.ml.mapreduce	Performs a standard/basic mapreduce (single thread for now)
* jx.ml.regression	Will perform linear & logistic regressions 
*/

if(!jx){
	var jx = {} ;
}
jx.ml = {}
/**
* The function performs map/reduce and at the very least map i.e the reduce function is optional
*/
jx.ml.mapreduce = function(data,fn_map,fn_reduce){
	//
	// insure that the mapping function has been provided
	//
	var __map = {}
	var emit = function(id,mvalue){
		if(__map[id] == null){
			__map[id] = []
		}
		__map[id].push(mvalue) ;
	}//-- end of the emitter
	
	if(data.constructor != Array){
		jx.utils.patterns.visitor(jx.utils.keys(data),function(id){	
			fn_map(data[id],emit) ;
		});
	}else{
		jx.utils.patterns.visitor(data,function(row){
			fn_map(row,emit) ;
		});
	}

	if(fn_reduce != null){
		//
		// We will be performing a reduce operation at this point

		var ids = jx.utils.keys(__map) ;
		jx.utils.patterns.visitor(ids,function(id){
			return __map[id] = fn_reduce(id,__map[id]) ;
		});
	}

	return __map ;

}//-- 

/**
 * The modules developed below will perform linear regression and logistic regression
 */
jx.ml.regression = {}
