docs: public static void symmLowerToFull( DMatrixSparseCSC A , DMatrixSparseCSC B , @Nullable IGrowArray gw )
      {
          if( A.numCols != A.numRows )
              throw new IllegalArgumentException("Must be a lower triangular square matrix");
  
          int N = A.numCols;
          int w[] = adjust(gw,N,N);
          B.reshape(N,N,A.nz_length*2);
          B.indicesSorted = false;
  
          //=== determine the row counts of the full matrix
          for (int col = 0; col < N; col++) {
              int idx0 = A.col_idx[col];
              int idx1 = A.col_idx[col+1];
  
              // We know the length of the lower part of this column already
              w[col] += idx1 - idx0;
  
              // add elements to the top of the other columns along row with index 'col'
              for (int i = idx0; i < idx1; i++) {
                  int row = A.nz_rows[i];
                  if( row > col ) {
                      w[row]++;
                  }
              }
          }
  
          // Update the structure of B
          B.histogramToStructure(w);
  
          // Zero W again. It's being used to keep track of how many elements have been added to a column already
          Arrays.fill(w,0,N,0);
          // Fill in matrix
          for (int col = 0; col < N; col++) {
  
              int idx0 = A.col_idx[col];
              int idx1 = A.col_idx[col+1];
  
              int lengthA = idx1 - idx0;
              int lengthB = B.col_idx[col+1] - B.col_idx[col];
  
              // Copy the non-zero values from A into B along the columns while taking in account the upper
              // elements already copied
              System.arraycopy(A.nz_values,idx0,B.nz_values,B.col_idx[col]+lengthB-lengthA,lengthA);
              System.arraycopy(A.nz_rows,idx0,B.nz_rows,B.col_idx[col]+lengthB-lengthA,lengthA);
  
              // Copy this column into the upper portion of B
              for (int i = idx0; i < idx1; i++) {
                  int row = A.nz_rows[i];
                  if( row > col ) {
                      int indexB = B.col_idx[row] + w[row]++;
                      B.nz_rows[indexB] = col;
                      B.nz_values[indexB] = A.nz_values[i];
                  }
              }
          }
  
      }