public void process ( DMatrixSparseCSC A , int parent [ ] , int post [ ] , int counts [ ] ) { if ( counts . length < A . numCols ) throw new IllegalArgumentException ( "counts must be at least of length A.numCols" ) ; initialize ( A ) ; int delta [ ] = counts ; findFirstDescendant ( parent , post , delta ) ; if ( ata ) { init_ata ( post ) ; } for ( int i = 0 ; i < n ; i ++ ) w [ ancestor + i ] = i ; int [ ] ATp = At . col_idx ; int [ ] ATi = At . nz_rows ; for ( int k = 0 ; k < n ; k ++ ) { int j = post [ k ] ; if ( parent [ j ] != - 1 ) delta [ parent [ j ] ] -- ; // j is not a root for ( int J = HEAD ( k , j ) ; J != - 1 ; J = NEXT ( J ) ) { for ( int p = ATp [ J ] ; p < ATp [ J + 1 ] ; p ++ ) { int i = ATi [ p ] ; int q = isLeaf ( i , j ) ; if ( jleaf >= 1 ) delta [ j ] ++ ; if ( jleaf == 2 ) delta [ q ] -- ; } } if ( parent [ j ] != - 1 ) w [ ancestor + j ] = parent [ j ] ; } // sum up delta's of each child for ( int j = 0 ; j < n ; j ++ ) { if ( parent [ j ] != - 1 ) counts [ parent [ j ] ] += counts [ j ] ; } }
Processes and computes column counts of A