Package org.apache.sysds.runtime.compress.colgroup

## Class ColGroupDDC

- java.lang.Object
- - org.apache.sysds.runtime.compress.colgroup.AColGroup
  - - org.apache.sysds.runtime.compress.colgroup.AColGroupCompressed
    - - org.apache.sysds.runtime.compress.colgroup.AColGroupValue
      - - org.apache.sysds.runtime.compress.colgroup.APreAgg
        - - org.apache.sysds.runtime.compress.colgroup.ColGroupDDC

All Implemented Interfaces:
  `Serializable`, `Cloneable`

Direct Known Subclasses:
  `ColGroupDeltaDDC`

    public class ColGroupDDC
    extends APreAgg

Class to encapsulate information about a column group that is encoded with dense dictionary encoding (DDC).

See Also:
  Serialized Form

### Nested Class Summary

### Nested classes/interfaces inherited from class org.apache.sysds.runtime.compress.colgroup.AColGroup

`AColGroup.CompressionType`

### Method Summary

All Methods Instance Methods Concrete Methods
`AColGroup` `binaryRowOpLeft​(BinaryOperator op, double[] v, boolean isRowSafe)` Perform a binary row operation.
`AColGroup` `binaryRowOpRight​(BinaryOperator op, double[] v, boolean isRowSafe)` Perform a binary row operation.
`long` `estimateInMemorySize()` Get the upper bound estimate of in memory allocation for the column group.
`org.apache.sysds.runtime.compress.colgroup.AColGroup.ColGroupType` `getColGroupType()`
`AColGroup.CompressionType` `getCompType()` Obtain the compression type.
`double` `getCost​(ComputationCostEstimator e, int nRows)` Get the computation cost associated with this column group.
`int[]` `getCounts​(int[] counts)`
`long` `getExactSizeOnDisk()` Returns the exact serialized size of column group.
`double` `getIdx​(int r, int colIdx)` Get the value at a colGroup specific row/column index position.
`void` `leftMultByMatrixNoPreAgg​(MatrixBlock matrix, MatrixBlock result, int rl, int ru, int cl, int cu)` Left multiply with this column group.
`void` `preAggregateDense​(MatrixBlock m, double[] preAgg, int rl, int ru, int cl, int cu)` Pre aggregate a dense matrix block into a pre aggregate target (first step of left matrix multiplication)
`void` `preAggregateSparse​(SparseBlock sb, double[] preAgg, int rl, int ru)`
`void` `preAggregateThatDDCStructure​(ColGroupDDC that, Dictionary ret)`
`void` `preAggregateThatSDCSingleZerosStructure​(ColGroupSDCSingleZeros that, Dictionary ret)`
`void` `preAggregateThatSDCZerosStructure​(ColGroupSDCZeros that, Dictionary ret)`
`void` `readFields​(DataInput in)` Deserialize column group from data input.
`boolean` `sameIndexStructure​(AColGroupCompressed that)`
`AColGroup` `scalarOperation​(ScalarOperator op)` Perform the specified scalar operation directly on the compressed column group, without decompressing individual cells if possible.
`String` `toString()`
`AColGroup` `unaryOperation​(UnaryOperator op)`
`void` `write​(DataOutput out)` Serializes column group to data output.

### Methods inherited from class org.apache.sysds.runtime.compress.colgroup.APreAgg

`getPreAggregateSize, leftMultByAColGroup, mmWithDictionary, preAggregate, preAggregateThatIndexStructure, tsmmAColGroup`

### Methods inherited from class org.apache.sysds.runtime.compress.colgroup.AColGroupValue

`centralMoment, computeColSums, containsValue, copy, decompressToDenseBlock, decompressToSparseBlock, forceMatrixBlockDictionary, getCachedCounts, getCounts, getDictionary, getNumberNonZeros, getNumValues, replace, rexpandCols, rightMultByMatrix`

### Methods inherited from class org.apache.sysds.runtime.compress.colgroup.AColGroupCompressed

`getMax, getMin, preAggRows, tsmm, unaryAggregateOperations, unaryAggregateOperations`

### Methods inherited from class org.apache.sysds.runtime.compress.colgroup.AColGroup

`colSum, decompressToDenseBlock, decompressToSparseBlock, get, getColIndices, getNumCols, shiftColIndices, sliceColumn, sliceColumns`

### Methods inherited from class java.lang.Object

`equals, getClass, hashCode, notify, notifyAll, wait, wait, wait`

### Method Detail

#### getCompType

    public AColGroup.CompressionType getCompType()

Description copied from class: `AColGroup`
Obtain the compression type.

Specified by:
  `getCompType` in class `AColGroup`
Returns:
  How the elements of the column group are compressed.

#### getIdx

    public double getIdx​(int r,
                         int colIdx)

Description copied from class: `AColGroup`
Get the value at a colGroup specific row/column index position.

Specified by:
  `getIdx` in class `AColGroup`
Parameters:
  `r` - row
  `colIdx` - column index in the _colIndexes.
Returns:
  value at the row/column index position

#### getCounts

    public int[] getCounts​(int[] counts)

Specified by:
  `getCounts` in class `AColGroupValue`

#### leftMultByMatrixNoPreAgg

    public void leftMultByMatrixNoPreAgg​(MatrixBlock matrix,
                                         MatrixBlock result,
                                         int rl,
                                         int ru,
                                         int cl,
                                         int cu)

Description copied from class: `AColGroup`
Left multiply with this column group.

Specified by:
  `leftMultByMatrixNoPreAgg` in class `AColGroup`
Parameters:
  `matrix` - The matrix to multiply with on the left
  `result` - The result to output the values into, always dense for the purpose of the column groups parallelizing
  `rl` - The row to begin the multiplication from on the lhs matrix
  `ru` - The row to end the multiplication at on the lhs matrix
  `cl` - The column to begin the multiplication from on the lhs matrix
  `cu` - The column to end the multiplication at on the lhs matrix

#### preAggregateDense

    public void preAggregateDense​(MatrixBlock m,
                                  double[] preAgg,
                                  int rl,
                                  int ru,
                                  int cl,
                                  int cu)

Description copied from class: `APreAgg`
Pre aggregate a dense matrix block into a pre aggregate target (first step of left matrix multiplication)

Specified by:
  `preAggregateDense` in class `APreAgg`
Parameters:
  `m` - The matrix to preAggregate
  `preAgg` - The preAggregate target
  `rl` - Row lower on the left side matrix
  `ru` - Row upper on the left side matrix
  `cl` - Column lower on the left side matrix (or row lower in the column group)
  `cu` - Column upper on the left side matrix (or row upper in the column group)

#### preAggregateSparse

    public void preAggregateSparse​(SparseBlock sb,
                                   double[] preAgg,
                                   int rl,
                                   int ru)

Specified by:
  `preAggregateSparse` in class `APreAgg`

#### preAggregateThatDDCStructure

    public void preAggregateThatDDCStructure​(ColGroupDDC that,
                                             Dictionary ret)

#### preAggregateThatSDCZerosStructure

    public void preAggregateThatSDCZerosStructure​(ColGroupSDCZeros that,
                                                  Dictionary ret)

#### preAggregateThatSDCSingleZerosStructure

    public void preAggregateThatSDCSingleZerosStructure​(ColGroupSDCSingleZeros that,
                                                        Dictionary ret)

#### sameIndexStructure

    public boolean sameIndexStructure​(AColGroupCompressed that)

#### getColGroupType

    public org.apache.sysds.runtime.compress.colgroup.AColGroup.ColGroupType getColGroupType()

#### estimateInMemorySize

    public long estimateInMemorySize()

Description copied from class: `AColGroup`
Get the upper bound estimate of in memory allocation for the column group.

Overrides:
  `estimateInMemorySize` in class `AColGroupValue`
Returns:
  an upper bound on the number of bytes used to store this ColGroup in memory.

#### scalarOperation

    public AColGroup scalarOperation​(ScalarOperator op)

Description copied from class: `AColGroup`
Perform the specified scalar operation directly on the compressed column group, without decompressing individual cells if possible.

Specified by:
  `scalarOperation` in class `AColGroup`
Parameters:
  `op` - operation to perform
Returns:
  version of this column group with the operation applied

#### unaryOperation

    public AColGroup unaryOperation​(UnaryOperator op)

Specified by:
  `unaryOperation` in class `AColGroup`

#### binaryRowOpLeft

    public AColGroup binaryRowOpLeft​(BinaryOperator op,
                                     double[] v,
                                     boolean isRowSafe)

Description copied from class: `AColGroup`
Perform a binary row operation.

Specified by:
  `binaryRowOpLeft` in class `AColGroup`
Parameters:
  `op` - The operation to execute
  `v` - The vector of values to apply, should be same length as dictionary length.
  `isRowSafe` - True if the binary op is applied to an entire zero row and all results are zero
Returns:
  A updated column group with the new values.

#### binaryRowOpRight

    public AColGroup binaryRowOpRight​(BinaryOperator op,
                                      double[] v,
                                      boolean isRowSafe)

Description copied from class: `AColGroup`
Perform a binary row operation.

Specified by:
  `binaryRowOpRight` in class `AColGroup`
Parameters:
  `op` - The operation to execute
  `v` - The vector of values to apply, should be same length as dictionary length.
  `isRowSafe` - True if the binary op is applied to an entire zero row and all results are zero
Returns:
  A updated column group with the new values.

#### write

    public void write​(DataOutput out)
               throws IOException

Description copied from class: `AColGroup`
Serializes column group to data output.

Overrides:
  `write` in class `AColGroupValue`
Parameters:
  `out` - data output
Throws:
  `IOException` - if IOException occurs

#### readFields

    public void readFields​(DataInput in)
                    throws IOException

Description copied from class: `AColGroup`
Deserialize column group from data input.

Overrides:
  `readFields` in class `AColGroupValue`
Parameters:
  `in` - data input
Throws:
  `IOException` - if IOException occurs

#### getExactSizeOnDisk

    public long getExactSizeOnDisk()

Description copied from class: `AColGroup`
Returns the exact serialized size of column group. This can be used for example for buffer preallocation.

Overrides:
  `getExactSizeOnDisk` in class `AColGroupValue`
Returns:
  exact serialized size for column group

#### getCost

    public double getCost​(ComputationCostEstimator e,
                          int nRows)

Description copied from class: `AColGroup`
Get the computation cost associated with this column group.

Specified by:
  `getCost` in class `AColGroup`
Parameters:
  `e` - The computation cost estimator
  `nRows` - the number of rows in the column group
Returns:
  The cost of this column group

#### toString

    public String toString()

Overrides:
  `toString` in class `AColGroupValue`