UNPKG

@eagleoutice/flowr-dev

Version:

Static Dataflow Analyzer and Program Slicer for the R Programming Language

77 lines 3.18 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.DataFrameDomain = void 0; const positive_interval_domain_1 = require("../domains/positive-interval-domain"); const product_domain_1 = require("../domains/product-domain"); const set_range_domain_1 = require("../domains/set-range-domain"); /** * The data frame abstract domain as product domain of a column names domain, column count domain, and row count domain. */ class DataFrameDomain extends product_domain_1.ProductDomain { create(value) { return new DataFrameDomain(value); } /** * The current abstract value of the column names domain. */ get colnames() { return this.value.colnames; } /** * The current abstract value of the column count domain. */ get cols() { return this.value.cols; } /** * The current abstract value of the row count domain. */ get rows() { return this.value.rows; } static bottom(maxColNames) { return new DataFrameDomain({ colnames: set_range_domain_1.SetRangeDomain.bottom(maxColNames), cols: positive_interval_domain_1.PosIntervalDomain.bottom(), rows: positive_interval_domain_1.PosIntervalDomain.bottom() }); } static top(maxColNames) { return new DataFrameDomain({ colnames: set_range_domain_1.SetRangeDomain.top(maxColNames), cols: positive_interval_domain_1.PosIntervalDomain.top(), rows: positive_interval_domain_1.PosIntervalDomain.top() }); } reduce(value) { if (value.colnames.isValue() && value.cols.isValue()) { const minColNames = value.colnames.must.size; const maxColNames = value.colnames.isFinite() ? value.colnames.must.size + value.colnames.may.size : Infinity; if (minColNames >= value.cols.upper) { value = { ...value, colnames: value.colnames.create({ must: value.colnames.must, may: new Set() }) }; } else if (value.colnames.isFinite() && value.colnames.may.size > 0 && maxColNames <= value.cols.lower) { value = { ...value, colnames: value.colnames.create({ must: value.colnames.upper(), may: new Set() }) }; } } if (value.colnames.isValue() && value.cols.isValue()) { const minColNames = value.colnames.must.size; const maxColNames = value.colnames.isFinite() ? value.colnames.must.size + value.colnames.may.size : Infinity; if ((minColNames > value.cols.lower || maxColNames < value.cols.upper) && Math.max(minColNames, value.cols.lower) <= Math.min(maxColNames, value.cols.upper)) { value = { ...value, cols: value.cols.create([Math.max(minColNames, value.cols.lower), Math.min(maxColNames, value.cols.upper)]) }; } } return value; } } exports.DataFrameDomain = DataFrameDomain; //# sourceMappingURL=dataframe-domain.js.map