Search in sources :

Example 1 with UnaryOperator

use of org.apache.sysml.runtime.matrix.operators.UnaryOperator in project incubator-systemml by apache.

the class LibMatrixOuterAgg method prepareRowIndicesMax.

/**
	 * This function will return max indices, based on column vector data. 
	 * This indices will be computed based on operator. 
	 * These indices can be used to compute max index for a given input value in subsequent operation.
	 * 
	 *  e.g. Right Vector has data (V1)    :                6   3   9   7   2   4   4   3
	 *       Original indices for this data will be (I1):   1   2   3   4   5   6   7   8		
	 * 
	 *  Sorting this data based on value will be (V2):      2   3   3   4   4   6   7   9	
	 *      Then indices will be ordered as (I2):           5   2   8   6   7   1   4   3
	 * 
	 * CumMax of I2 will be A:  (CumMin(I2))                5   5   8   8   8   8   8   8
	 * CumMax of I2 in reverse order be B:                  8   8   8   7   7   4   4   3
	 * 
	 * Values from vector A is used to compute RowIndexMax for > & >= operators
	 * Values from vector B is used to compute RowIndexMax for < & <= operators
	 * Values from I2 is used to compute RowIndexMax for == operator.
	 * Original values are directly used to compute RowIndexMax for != operator
	 * 
	 * Shifting values from vector A or B is required to compute final indices.
	 * Once indices are shifted from vector A or B, their cell value corresponding to input data will be used. 
	 * 
	 * @param iCols ?
	 * @param vmb ?
	 * @param bOp binary operator
	 * @return array of maximum row indices
	 * @throws DMLRuntimeException if DMLRuntimeException occurs
	 */
public static int[] prepareRowIndicesMax(int iCols, double[] vmb, BinaryOperator bOp) throws DMLRuntimeException {
    int[] vixCumSum = null;
    int[] vix = new int[iCols];
    //sort index vector on extracted data (unstable)
    if (!(bOp.fn instanceof NotEquals)) {
        for (int i = 0; i < iCols; i++) vix[i] = i;
        SortUtils.sortByValueStable(0, iCols, vmb, vix);
    }
    if (bOp.fn instanceof LessThan || bOp.fn instanceof LessThanEquals || bOp.fn instanceof GreaterThan || bOp.fn instanceof GreaterThanEquals) {
        boolean bPrimeCumSum = false;
        if (bOp.fn instanceof LessThan || bOp.fn instanceof LessThanEquals)
            bPrimeCumSum = true;
        double[] dvix = new double[vix.length];
        if (bPrimeCumSum)
            for (int i = 0; i < vix.length; i++) dvix[vix.length - 1 - i] = vix[i];
        else
            for (int i = 0; i < vix.length; i++) dvix[i] = vix[i];
        MatrixBlock mbix = DataConverter.convertToMatrixBlock(dvix, true);
        UnaryOperator u_op = new UnaryOperator(Builtin.getBuiltinFnObject(Builtin.BuiltinCode.CUMMAX));
        MatrixBlock mbResult = (MatrixBlock) mbix.unaryOperations(u_op, new MatrixBlock());
        vixCumSum = DataConverter.convertToIntVector(mbResult);
        if (bPrimeCumSum)
            for (int i = 0; i < (vixCumSum.length + 1) / 2; i++) {
                int iTemp = vixCumSum[vixCumSum.length - 1 - i];
                vixCumSum[vixCumSum.length - 1 - i] = vixCumSum[i];
                vixCumSum[i] = iTemp;
            }
        adjustRowIndicesMax(vixCumSum, vmb, bOp);
    } else if (bOp.fn instanceof Equals || bOp.fn instanceof NotEquals) {
        adjustRowIndicesMax(vix, vmb, bOp);
        vixCumSum = vix;
    }
    return vixCumSum;
}
Also used : GreaterThanEquals(org.apache.sysml.runtime.functionobjects.GreaterThanEquals) LessThan(org.apache.sysml.runtime.functionobjects.LessThan) Equals(org.apache.sysml.runtime.functionobjects.Equals) GreaterThanEquals(org.apache.sysml.runtime.functionobjects.GreaterThanEquals) LessThanEquals(org.apache.sysml.runtime.functionobjects.LessThanEquals) NotEquals(org.apache.sysml.runtime.functionobjects.NotEquals) GreaterThan(org.apache.sysml.runtime.functionobjects.GreaterThan) AggregateUnaryOperator(org.apache.sysml.runtime.matrix.operators.AggregateUnaryOperator) UnaryOperator(org.apache.sysml.runtime.matrix.operators.UnaryOperator) NotEquals(org.apache.sysml.runtime.functionobjects.NotEquals) LessThanEquals(org.apache.sysml.runtime.functionobjects.LessThanEquals)

Example 2 with UnaryOperator

use of org.apache.sysml.runtime.matrix.operators.UnaryOperator in project incubator-systemml by apache.

the class LibMatrixOuterAgg method prepareRowIndicesMin.

/**
	 * This function will return min indices, based on column vector data. 
	 * This indices will be computed based on operator. 
	 * These indices can be used to compute min index for a given input value in subsequent operation.
	 * 
	 *  e.g. Right Vector has data (V1)    :                6   3   9   7   2   4   4   3
	 *       Original indices for this data will be (I1):   1   2   3   4   5   6   7   8		
	 * 
	 *  Sorting this data based on value will be (V2):      2   3   3   4   4   6   7   9	
	 *      Then indices will be ordered as (I2):           5   2   8   6   7   1   4   3
	 * 
	 * CumMin of I2 will be A:  (CumMin(I2))                5   2   2   2   2   1   1   1
	 * CumMin of I2 in reverse order be B:                  1   1   1   1   1   1   3   3
	 * 
	 * Values from vector A is used to compute RowIndexMin for &gt; operator
	 * Values from vector B is used to compute RowIndexMin for &lt;, &lt;= and &gt;= operators
	 * Values from I2 is used to compute RowIndexMax for == operator.
	 * Original values are directly used to compute RowIndexMax for != operator
	 * 
	 * Shifting values from vector A or B is required to compute final indices.
	 * Once indices are shifted from vector A or B, their cell value corresponding to input data will be used.
	 * 
	 * @param iCols ?
	 * @param vmb ?
	 * @param bOp binary operator
	 * @return array of minimum row indices
	 * @throws DMLRuntimeException if DMLRuntimeException occurs
	 */
public static int[] prepareRowIndicesMin(int iCols, double[] vmb, BinaryOperator bOp) throws DMLRuntimeException {
    int[] vixCumSum = null;
    int[] vix = new int[iCols];
    //sort index vector on extracted data (unstable)
    if (!(bOp.fn instanceof NotEquals || bOp.fn instanceof Equals)) {
        for (int i = 0; i < iCols; i++) vix[i] = i;
        SortUtils.sortByValueStable(0, iCols, vmb, vix);
    }
    if (bOp.fn instanceof LessThan || bOp.fn instanceof LessThanEquals || bOp.fn instanceof GreaterThan || bOp.fn instanceof GreaterThanEquals) {
        boolean bPrimeCumSum = false;
        if (bOp.fn instanceof GreaterThan || bOp.fn instanceof GreaterThanEquals)
            bPrimeCumSum = true;
        double[] dvix = new double[vix.length];
        if (bPrimeCumSum)
            for (int i = 0; i < vix.length; i++) dvix[vix.length - 1 - i] = vix[i];
        else
            for (int i = 0; i < vix.length; i++) dvix[i] = vix[i];
        MatrixBlock mbix = DataConverter.convertToMatrixBlock(dvix, true);
        UnaryOperator u_op = new UnaryOperator(Builtin.getBuiltinFnObject(Builtin.BuiltinCode.CUMMIN));
        MatrixBlock mbResult = (MatrixBlock) mbix.unaryOperations(u_op, new MatrixBlock());
        vixCumSum = DataConverter.convertToIntVector(mbResult);
        if (bPrimeCumSum)
            for (int i = 0; i < (vixCumSum.length + 1) / 2; i++) {
                int iTemp = vixCumSum[vixCumSum.length - 1 - i];
                vixCumSum[vixCumSum.length - 1 - i] = vixCumSum[i];
                vixCumSum[i] = iTemp;
            }
        adjustRowIndicesMin(vixCumSum, vmb, bOp);
    } else if (bOp.fn instanceof Equals || bOp.fn instanceof NotEquals) {
        adjustRowIndicesMin(vix, vmb, bOp);
        vixCumSum = vix;
    }
    return vixCumSum;
}
Also used : GreaterThanEquals(org.apache.sysml.runtime.functionobjects.GreaterThanEquals) Equals(org.apache.sysml.runtime.functionobjects.Equals) GreaterThanEquals(org.apache.sysml.runtime.functionobjects.GreaterThanEquals) LessThanEquals(org.apache.sysml.runtime.functionobjects.LessThanEquals) NotEquals(org.apache.sysml.runtime.functionobjects.NotEquals) LessThan(org.apache.sysml.runtime.functionobjects.LessThan) GreaterThan(org.apache.sysml.runtime.functionobjects.GreaterThan) AggregateUnaryOperator(org.apache.sysml.runtime.matrix.operators.AggregateUnaryOperator) UnaryOperator(org.apache.sysml.runtime.matrix.operators.UnaryOperator) NotEquals(org.apache.sysml.runtime.functionobjects.NotEquals) LessThanEquals(org.apache.sysml.runtime.functionobjects.LessThanEquals)

Example 3 with UnaryOperator

use of org.apache.sysml.runtime.matrix.operators.UnaryOperator in project incubator-systemml by apache.

the class MatrixBuiltinCPInstruction method processInstruction.

@Override
public void processInstruction(ExecutionContext ec) throws DMLRuntimeException {
    UnaryOperator u_op = (UnaryOperator) _optr;
    String output_name = output.getName();
    String opcode = getOpcode();
    if (LibCommonsMath.isSupportedUnaryOperation(opcode)) {
        MatrixBlock retBlock = LibCommonsMath.unaryOperations(ec.getMatrixObject(input1.getName()), getOpcode());
        ec.setMatrixOutput(output_name, retBlock);
    } else {
        MatrixBlock inBlock = ec.getMatrixInput(input1.getName());
        MatrixBlock retBlock = (MatrixBlock) (inBlock.unaryOperations(u_op, new MatrixBlock()));
        ec.releaseMatrixInput(input1.getName());
        // Ensure right dense/sparse output representation (guarded by released input memory)
        if (checkGuardedRepresentationChange(inBlock, retBlock)) {
            retBlock.examSparsity();
        }
        ec.setMatrixOutput(output_name, retBlock);
    }
}
Also used : MatrixBlock(org.apache.sysml.runtime.matrix.data.MatrixBlock) UnaryOperator(org.apache.sysml.runtime.matrix.operators.UnaryOperator)

Example 4 with UnaryOperator

use of org.apache.sysml.runtime.matrix.operators.UnaryOperator in project incubator-systemml by apache.

the class BuiltinUnaryCPInstruction method parseInstruction.

public static BuiltinUnaryCPInstruction parseInstruction(String str) throws DMLRuntimeException {
    CPOperand in = new CPOperand("", ValueType.UNKNOWN, DataType.UNKNOWN);
    CPOperand out = new CPOperand("", ValueType.UNKNOWN, DataType.UNKNOWN);
    String[] parts = InstructionUtils.getInstructionPartsWithValueType(str);
    String opcode = null;
    ValueFunction func = null;
    //print or stop or cumulative aggregates
    if (parts.length == 4) {
        opcode = parts[0];
        in.split(parts[1]);
        out.split(parts[2]);
        func = Builtin.getBuiltinFnObject(opcode);
        if (Arrays.asList(new String[] { "ucumk+", "ucum*", "ucummin", "ucummax" }).contains(opcode))
            return new MatrixBuiltinCPInstruction(new UnaryOperator(func, Integer.parseInt(parts[3])), in, out, opcode, str);
        else
            return new ScalarBuiltinCPInstruction(new SimpleOperator(func), in, out, opcode, str);
    } else //2+1, general case
    {
        opcode = parseUnaryInstruction(str, in, out);
        func = Builtin.getBuiltinFnObject(opcode);
        if (in.getDataType() == DataType.SCALAR)
            return new ScalarBuiltinCPInstruction(new SimpleOperator(func), in, out, opcode, str);
        else if (in.getDataType() == DataType.MATRIX)
            return new MatrixBuiltinCPInstruction(new UnaryOperator(func), in, out, opcode, str);
    }
    return null;
}
Also used : ValueFunction(org.apache.sysml.runtime.functionobjects.ValueFunction) SimpleOperator(org.apache.sysml.runtime.matrix.operators.SimpleOperator) UnaryOperator(org.apache.sysml.runtime.matrix.operators.UnaryOperator)

Example 5 with UnaryOperator

use of org.apache.sysml.runtime.matrix.operators.UnaryOperator in project incubator-systemml by apache.

the class BuiltinUnarySPInstruction method parseInstruction.

public static BuiltinUnarySPInstruction parseInstruction(String str) throws DMLRuntimeException {
    CPOperand in = new CPOperand("", ValueType.UNKNOWN, DataType.UNKNOWN);
    CPOperand out = new CPOperand("", ValueType.UNKNOWN, DataType.UNKNOWN);
    String opcode = parseUnaryInstruction(str, in, out);
    ValueFunction func = Builtin.getBuiltinFnObject(opcode);
    return new MatrixBuiltinSPInstruction(new UnaryOperator(func), in, out, opcode, str);
}
Also used : ValueFunction(org.apache.sysml.runtime.functionobjects.ValueFunction) CPOperand(org.apache.sysml.runtime.instructions.cp.CPOperand) UnaryOperator(org.apache.sysml.runtime.matrix.operators.UnaryOperator)

Aggregations

UnaryOperator (org.apache.sysml.runtime.matrix.operators.UnaryOperator)8 ValueFunction (org.apache.sysml.runtime.functionobjects.ValueFunction)3 Equals (org.apache.sysml.runtime.functionobjects.Equals)2 GreaterThan (org.apache.sysml.runtime.functionobjects.GreaterThan)2 GreaterThanEquals (org.apache.sysml.runtime.functionobjects.GreaterThanEquals)2 LessThan (org.apache.sysml.runtime.functionobjects.LessThan)2 LessThanEquals (org.apache.sysml.runtime.functionobjects.LessThanEquals)2 NotEquals (org.apache.sysml.runtime.functionobjects.NotEquals)2 CPOperand (org.apache.sysml.runtime.instructions.cp.CPOperand)2 MatrixBlock (org.apache.sysml.runtime.matrix.data.MatrixBlock)2 AggregateUnaryOperator (org.apache.sysml.runtime.matrix.operators.AggregateUnaryOperator)2 DMLRuntimeException (org.apache.sysml.runtime.DMLRuntimeException)1 SparkExecutionContext (org.apache.sysml.runtime.controlprogram.context.SparkExecutionContext)1 MatrixIndexes (org.apache.sysml.runtime.matrix.data.MatrixIndexes)1 SimpleOperator (org.apache.sysml.runtime.matrix.operators.SimpleOperator)1