text: #include "cs.h"
  /* remove duplicate entries from A */
  int cs_dupl (cs *A)
  {
      int i, j, p, q, nz = 0, n, m, *Ap, *Ai, *w ;
      double *Ax ;
      if (!CS_CSC (A)) return (0) ;               /* check inputs */
      m = A->m ; n = A->n ; Ap = A->p ; Ai = A->i ; Ax = A->x ;
      w = cs_malloc (m, sizeof (int)) ;           /* get workspace */
      if (!w) return (0) ;                        /* out of memory */
      for (i = 0 ; i < m ; i++) w [i] = -1 ;      /* row i not yet seen */
      for (j = 0 ; j < n ; j++)
      {
          q = nz ;                                /* column j will start at q */
          for (p = Ap [j] ; p < Ap [j+1] ; p++)
          {
              i = Ai [p] ;                        /* A(i,j) is nonzero */
              if (w [i] >= q)
              {
                  Ax [w [i]] += Ax [p] ;          /* A(i,j) is a duplicate */
              }
              else
              {
                  w [i] = nz ;                    /* record where row i occurs */
                  Ai [nz] = i ;                   /* keep A(i,j) */
                  Ax [nz++] = Ax [p] ;
              }
          }
          Ap [j] = q ;                            /* record start of column j */
      }
      Ap [n] = nz ;                               /* finalize A */
      cs_free (w) ;                               /* free workspace */
      return (cs_sprealloc (A, 0)) ;              /* remove extra space from A */
  }
  