MatrixTranslationOper.js 3.14 KB
def.type('pvc.data.MatrixTranslationOper',pvc.data.TranslationOper).add({_initType:function(){this.J=this.metadata.length;this.I=this.source.length;this._processMetadata();this.base()},_knownContinuousColTypes:{'numeric':1,'number':1,'integer':1},_processMetadata:function(){var knownContinColTypes=this._knownContinuousColTypes;var columns=def.query(this.metadata).select(function(colDef,colIndex){colDef.colIndex=colIndex;return colDef}).where(function(colDef){var colType=colDef.colType;return!colType||knownContinColTypes[colType.toLowerCase()]!==1}).select(function(colDef){return colDef.colIndex}).array();var columnTypes=def.array.create(this.J,1);var I=this.I;var source=this.source;var J=columns.length;for(var i=0;i<I&&J>0;i++){var row=source[i];var m=0;while(m<J){var j=columns[m];var value=row[j];if(value!=null){columnTypes[j]=this._getSourceValueType(value);columns.splice(m,1);J--}else{m++}}}this._columnTypes=columnTypes},_getSourceValueType:function(value){switch(typeof value){case'number':return 1;case'object':if(value instanceof Date){return 1}}return 0},logSource:function(){var out=["DATA SOURCE SUMMARY",pvc.logSeparator,"ROWS ("+Math.min(10,this.I)+"/"+this.I+")"];def.query(this.source).take(10).each(function(row,index){out.push("  ["+index+"] "+pvc.stringify(row))});if(this.I>10){out.push('  ...')}out.push("COLS ("+this.J+")");var colTypes=this._columnTypes;this.metadata.forEach(function(col,j){out.push("  ["+j+"] "+"'"+col.colName+"' ("+"type: "+col.colType+", "+"inspected: "+(colTypes[j]?'continuous':'discrete')+(col.colLabel?(", label: '"+col.colLabel+"'"):"")+")")});pvc.log(out.join('\n'))},_createPlot2SeriesKeySet:function(plot2SeriesIndexes,seriesKeys){var plot2SeriesKeySet=null,seriesCount=seriesKeys.length;def.query(plot2SeriesIndexes).each(function(indexText){var seriesIndex=+indexText;if(isNaN(seriesIndex)){throw def.error.argumentInvalid('plot2SeriesIndexes',"Element is not a number '{0}'.",[indexText])}if(seriesIndex<0){if(seriesIndex<=-seriesCount){throw def.error.argumentInvalid('plot2SeriesIndexes',"Index is out of range '{0}'.",[seriesIndex])}seriesIndex=seriesCount+seriesIndex}else if(seriesIndex>=seriesCount){throw def.error.argumentInvalid('plot2SeriesIndexes',"Index is out of range '{0}'.",[seriesIndex])}if(!plot2SeriesKeySet){plot2SeriesKeySet={}}plot2SeriesKeySet[seriesKeys[seriesIndex]]=true});return plot2SeriesKeySet},_dataPartGet:function(calcAxis2SeriesKeySet,seriesReader){var me=this;var dataPartDimName=this.options.dataPartDimName;var dataPartDimension,plot2SeriesKeySet,part1Atom,part2Atom,outAtomsSeries={};function dataPartGet(item,outAtoms){if(!dataPartDimension){plot2SeriesKeySet=calcAxis2SeriesKeySet();dataPartDimension=me.data.dimensions(dataPartDimName);if(pvc.debug>=3&&plot2SeriesKeySet){pvc.log("Second axis series values: "+pvc.stringify(def.keys(plot2SeriesKeySet)))}}var partAtom;seriesReader(item,outAtomsSeries);var series=outAtomsSeries.series;if(series!=null&&series.v!=null){series=series.v}if(def.hasOwn(plot2SeriesKeySet,series)){partAtom=part2Atom||(part2Atom=dataPartDimension.intern("1"))}else{partAtom=part1Atom||(part1Atom=dataPartDimension.intern("0"))}outAtoms[dataPartDimName]=partAtom}return dataPartGet}});