Home Reference Source Test

packages/causality-datasets/src/Readers/csvReader.mixins.js

import { csvUtils } from 'causal-net.utils';
const CSVReaderMixins = ( BaseDataSource ) => class extends BaseDataSource {
    extractingAttribute(rows, sampleAttributes=[], labelAttributes=[]){
        let samples = [], labels = [];
        let i = 0;
        for(let row of rows){
            if(sampleAttributes.length){
                samples.push(sampleAttributes.map(k=>row[k]));
            }
            if(labelAttributes.length){
                labels.push(labelAttributes.map(k=>row[k]));
            }
        }
        if(samples.length>0 && labels.length>0){
            return {samples, labels};
        }
        else if(samples.length>0){
            return samples;
        }
        else if(labels.length>0){
            return labels;
        }
        else{
            throw Error(`${JSON.stringify(rows)} do not match ${sampleAttributes} and ${labelAttributes}`);
        }
    }
    makeCSVReader(baseLink, sampleAttributes=[], labelAttributes=[]){
        if( baseLink.startsWith('http') ){
            return async (fileName) => {
                let rows = await csvUtils.fetchCSV(baseLink + fileName);
                return this.extractingAttribute(rows, sampleAttributes, labelAttributes);
            };
        }
        else{
            return async (fileName) => { 
                let rows = await csvUtils.readCSV(baseLink + fileName);
                return this.extractingAttribute(rows, sampleAttributes, labelAttributes);
            };
        }
    }
};

export default CSVReaderMixins;