From 0c29c27028b57691e1a348424e24f1551a18c528 Mon Sep 17 00:00:00 2001
From: Christophe Geuzaine <cgeuzaine@ulg.ac.be>
Date: Mon, 30 Mar 2009 15:32:21 +0000
Subject: [PATCH] remove trash

---
 contrib/kbipack/Makefile~          |  75 ---
 contrib/kbipack/gmp_blas.o         | Bin 10724 -> 0 bytes
 contrib/kbipack/gmp_matrix.c~      | 678 -------------------------
 contrib/kbipack/gmp_matrix.h~      | 144 ------
 contrib/kbipack/gmp_matrix.o       | Bin 20660 -> 0 bytes
 contrib/kbipack/gmp_matrix_io.o    | Bin 8060 -> 0 bytes
 contrib/kbipack/gmp_normal_form.c~ | 784 -----------------------------
 contrib/kbipack/gmp_normal_form.o  | Bin 16308 -> 0 bytes
 8 files changed, 1681 deletions(-)
 delete mode 100755 contrib/kbipack/Makefile~
 delete mode 100755 contrib/kbipack/gmp_blas.o
 delete mode 100755 contrib/kbipack/gmp_matrix.c~
 delete mode 100755 contrib/kbipack/gmp_matrix.h~
 delete mode 100755 contrib/kbipack/gmp_matrix.o
 delete mode 100755 contrib/kbipack/gmp_matrix_io.o
 delete mode 100755 contrib/kbipack/gmp_normal_form.c~
 delete mode 100755 contrib/kbipack/gmp_normal_form.o

diff --git a/contrib/kbipack/Makefile~ b/contrib/kbipack/Makefile~
deleted file mode 100755
index 3c361030c3..0000000000
--- a/contrib/kbipack/Makefile~
+++ /dev/null
@@ -1,75 +0,0 @@
-#FLAGS = -O3 -funroll-all-loops -ansi -pedantic -Wall -U DEBUG
-# Flags for different diagnostics: 
-#FLAGS = -g -ansi -pedantic -Wall -fprofile-arcs -ftest-coverage -pg
-#FLAGS = -g -ansi -pedantic -Wall -pg 
-
-# If gmp.h is not found de facto (e.g. when it is privately intalled), 
-# its path should be put here
-#INCL  = 
-
-#LIBS   = -lgmp
-#LIBDIR = .
-#SRC    = gmp_normal_form.c gmp_matrix_io.c gmp_matrix.c gmp_blas.c
-
-# The compiler options are for gcc. If it is not available, 
-# suitable flags must be set for the compiler
-#CC     = gcc
-#RM     = rm -f
-#RANLIB = ranlib
-
-#libkbi.a: $(SRC) 
-#	$(RM) *.o
-#	$(CC) -c $(FLAGS) $(SRC)
-#	ar r libkbi.a *.o
-#	$(RM) *.o
-#	$(RANLIB) libkbi.a 
-
-#compute_normal_form: libkbi compute_normal_form.c 
-#	$(CC) $(FLAGS) -L $(LIBDIR) $(INCL) compute_normal_form.c -o compute_normal_form -lkbi $(LIBS)
-#clean:
-#	$(RM) compute_normal_form
-#	$(RM) *.o
-
-##
-
-include ../../variables
-
-LIB = ../../lib/libGmshKbi${LIBEXT}
-
-INC = ${DASH}I.
-
-CFLAGS = ${OPTIM} ${FLAGS} ${INC} ${SYSINCLUDE} -lgmp
-
-SRC = gmp_normal_form.c gmp_matrix_io.c gmp_matrix.c gmp_blas.c
-      
-OBJ = ${SRC:.c=${OBJEXT}}
-
-.SUFFIXES: ${OBJEXT} .c
-
-${LIB}: ${OBJ}
-	${AR} ${ARFLAGS}${LIB} ${OBJ}
-	${RANLIB} ${LIB}
-
-cpobj: ${OBJ} 
-	cp -f ${OBJ} ../../lib/
-
-.c${OBJEXT}:
-	${CC} ${CFLAGS} ${DASH}c $<
-       
-clean:
-	${RM} *.o *.obj
-	
-depend:
-	(sed '/^# DO NOT DELETE THIS LINE/q' Makefile && \
-         ${CXX} -MM ${CFLAGS} ${SRC} | sed 's/.o:/$${OBJEXT}:/g' \
-        ) > Makefile.new
-	cp Makefile Makefile.bak
-	cp Makefile.new Makefile
-	rm -f Makefile.new
-
-# DO NOT DELETE THIS LINE	
-gmp_normal_form${OBJEXT}: gmp_normal_form.c gmp_blas.h gmp_matrix.h \
-  gmp_normal_form.h
-gmp_matrix_io${OBJEXT}: gmp_matrix_io.c gmp_matrix_io.h gmp_matrix.h gmp_blas.h
-gmp_matrix${OBJEXT}: gmp_matrix.c gmp_matrix.h gmp_blas.h
-gmp_blas${OBJEXT}: gmp_blas.c gmp_blas.h
diff --git a/contrib/kbipack/gmp_blas.o b/contrib/kbipack/gmp_blas.o
deleted file mode 100755
index 02064581725915c72fb204793a3f9436e14c5cfc..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 10724
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
Jk?&B-{}+rJd=dZv

diff --git a/contrib/kbipack/gmp_matrix.c~ b/contrib/kbipack/gmp_matrix.c~
deleted file mode 100755
index 2afe8d1dd2..0000000000
--- a/contrib/kbipack/gmp_matrix.c~
+++ /dev/null
@@ -1,678 +0,0 @@
-/* 
-   Source file for integer-oriented matrix, relying on the arbitrary 
-   precision integers from the GNU gmp package. 
-
-   Copyright (C) 28.10.2003 Saku Suuriniemi TUT/CEM
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-   Saku Suuriniemi, TUT/Electromagetics
-   P.O.Box 692, FIN-33101 Tampere, Finland
-   saku.suuriniemi@tut.fi
-
-   $Id: gmp_matrix.c~,v 1.1 2009-03-30 14:10:57 matti Exp $
-*/
-
-
-#include<stdlib.h>
-#include"gmp_matrix.h"
-
-int gmp_kaka(int laalaa){
-  printf("kissa %d", laalaa);
-  return laalaa;
-}
-
-gmp_matrix * 
-create_gmp_matrix(size_t r, size_t c, 
-		  const mpz_t * e)
-{
-  gmp_matrix * new_matrix;
-  size_t       ind;
-
-  new_matrix = (gmp_matrix * ) malloc(sizeof(gmp_matrix));
-  if(new_matrix == NULL)
-    {
-      return NULL;
-    }
-
-  new_matrix -> storage = (mpz_t *) calloc(r*c, sizeof(mpz_t));
-  if(new_matrix -> storage == NULL)
-    {
-      free(new_matrix);
-      return NULL;
-    }
-
-  new_matrix -> rows = r;
-  new_matrix -> cols = c;
-
-  for(ind = 0; ind < r*c; ind ++)
-    {
-      mpz_init (new_matrix -> storage[ind]);
-      mpz_set  (new_matrix -> storage[ind], e[ind]);
-    }
-
-  return new_matrix;
-}
-
-
-gmp_matrix * 
-create_gmp_matrix_identity(size_t dim)
-{
-  gmp_matrix * new_matrix;
-  size_t       ind;
-
-  new_matrix = (gmp_matrix * ) malloc(sizeof(gmp_matrix));
-  if(new_matrix == NULL)
-    {
-      return NULL;
-    }
-
-  new_matrix -> storage = (mpz_t *) calloc(dim*dim, sizeof(mpz_t));
-  if(new_matrix -> storage == NULL)
-    {
-      free(new_matrix);
-      return NULL;
-    }
-
-  new_matrix -> rows = dim;
-  new_matrix -> cols = dim;
-
-  for(ind = 0; ind < dim*dim; ind ++)
-    {
-      mpz_init_set_si (new_matrix -> storage[ind], 0);
-    }
-
-  for(ind = 0; ind < dim; ind ++)
-    {
-      mpz_set_ui(new_matrix -> storage[ind*(dim+1)], 1);
-    }
-
-  return new_matrix;
-}
-
-
-gmp_matrix * 
-create_gmp_matrix_zero(size_t rows, size_t cols)
-{
-  gmp_matrix * new_matrix;
-  size_t       ind;
-
-  new_matrix = (gmp_matrix * ) malloc(sizeof(gmp_matrix));
-  if(new_matrix == NULL)
-    {
-      return NULL;
-    }
-
-  new_matrix -> storage = (mpz_t *) calloc(rows*cols, sizeof(mpz_t));
-  if(new_matrix -> storage == NULL)
-    {
-      free(new_matrix);
-      return NULL;
-    }
-
-  new_matrix -> rows = rows;
-  new_matrix -> cols = cols;
-
-  for(ind = 0; ind < rows*cols; ind ++)
-    {
-      mpz_init_set_si (new_matrix -> storage[ind], 0);
-    }
-
-  return new_matrix;
-}
-
-int 
-destroy_gmp_matrix(gmp_matrix * m)
-{
-  size_t       ind, nmb_storage;;
-
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  if(m -> storage == NULL)
-    {
-      free(m);
-      return EXIT_FAILURE;
-    }
-
-  nmb_storage = (m -> rows)*(m -> cols);
-
-  for(ind = 0; ind < nmb_storage; ind++)
-    {
-      mpz_clear(m -> storage[ind]);
-    }
-
-  free(m -> storage);
-  free(m);
-  return EXIT_SUCCESS;
-}
-
-
-size_t
-gmp_matrix_rows(const gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return 0;
-    }
-
-  return m -> rows;
-}
-
-
-size_t
-gmp_matrix_cols(const gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return 0;
-    }
-
-  return m -> cols;
-}
-
-/* elem <- (matrix(row, col)) */
-int
-gmp_matrix_get_elem(mpz_t elem, size_t row, size_t col,
-		    const gmp_matrix * m)
-{
-#ifdef DEBUG
-
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-#endif
-
-  mpz_set(elem, m -> storage[(col-1)*(m -> rows)+row-1]);
-  return EXIT_SUCCESS;
-}
-
-int  
-gmp_matrix_swap_rows(size_t row1, size_t row2, gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((row1 < 1) || (row1 > m->rows) || (row2 < 1) || (row2 > m->rows))
-    {
-      return EXIT_FAILURE;
-    }
-
-  /* printf("Swapping rows %i %i\n", row1, row2); */
-  gmp_blas_swap(m -> cols,
-		&(m -> storage[row1-1]), m -> rows, 
-		&(m -> storage[row2-1]), m -> rows);
-
-  return EXIT_SUCCESS;
-}
-
-int
-gmp_matrix_swap_cols(size_t col1, size_t col2, gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((col1 < 1) || (col1 > m->cols) || (col2 < 1) || (col2 > m->cols))
-    {
-      return EXIT_FAILURE;
-    }
-
-  /* printf("Swapping cols %i %i\n", col1, col2); */
-  gmp_blas_swap(m -> rows, 
-		&(m -> storage[(m->rows)*(col1-1)]), 1, 
-		&(m -> storage[(m->rows)*(col2-1)]), 1);
-
-  return EXIT_SUCCESS;
-}
-
-int
-gmp_matrix_negate_row(size_t row, gmp_matrix * m)
-{
-  mpz_t minus_one;
-
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((row < 1) || (row > m->rows))
-    {
-      return EXIT_FAILURE;
-    }
-
-  mpz_init(minus_one);
-  mpz_set_si(minus_one, -1);
-  gmp_blas_scal(m -> cols, minus_one, (&m -> storage[row-1]), m -> rows); 
-  mpz_clear(minus_one);
-  return EXIT_SUCCESS; 
-}
-
-int
-gmp_matrix_negate_col(size_t col, gmp_matrix * m)
-{
-  mpz_t minus_one;
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((col < 1) || (col > m->cols))
-    {
-      return EXIT_FAILURE;
-    }
-
-  mpz_init(minus_one);
-  mpz_set_si(minus_one, -1);
-  gmp_blas_scal(m -> rows, minus_one, 
-		&(m -> storage[(m->rows)*(col-1)]), 1); 
-  mpz_clear(minus_one);
-  return EXIT_SUCCESS;
-}
-
-/* row2 <- a*row1 + row2*/
-int
-gmp_matrix_add_row(mpz_t a, size_t row1, size_t row2,
-		   gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((row1 < 1) || (row1 > m->rows) || (row2 < 1) || (row2 > m->rows))
-    {
-      return EXIT_FAILURE;
-    }
-
-  gmp_blas_axpy(m->cols, a, 
-		(const mpz_t *) &(m->storage[row1-1]), m->rows, 
-		&(m->storage[row2-1]), m->rows); 
-
-  return EXIT_SUCCESS;
-}
-
-int
-gmp_matrix_add_col(mpz_t a, size_t col1, size_t col2,
-		   gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((col1 < 1) || (col1 > m->cols) || (col2 < 1) || (col2 > m->cols))
-    {
-      return EXIT_FAILURE;
-    }
-
-  gmp_blas_axpy(m->rows, a, 
-		(const mpz_t *) &(m -> storage[(m->rows)*(col1-1)]), 1, 
-		&(m -> storage[(m->rows)*(col2-1)]), 1); 
-
-  return EXIT_SUCCESS;
-}
-
-/* row1 <- a*row1 + b*row2
-   row2 <- c*row1 + d*row2 */
-int
-gmp_matrix_row_rot(mpz_t a, mpz_t b, size_t row1,
-		   mpz_t c, mpz_t d, size_t row2,
-		   gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((row1 < 1) || (row1 > m->rows) || (row2 < 1) || (row2 > m->rows))
-    {
-      return EXIT_FAILURE;
-    }
-
-  gmp_blas_rot(m->cols, 
-	       a, b, &(m->storage[row1-1]), m->rows, 
-	       c, d, &(m->storage[row2-1]), m->rows); 
-
-  return EXIT_SUCCESS;
-}
-int
-gmp_matrix_col_rot(mpz_t a, mpz_t b, size_t col1,
-		   mpz_t c, mpz_t d, size_t col2,
-		   gmp_matrix * m)
-{
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  if((col1 < 1) || (col1 > m->cols) || (col2 < 1) || (col2 > m->cols))
-    {
-      return EXIT_FAILURE;
-    }
-
-/*   printf("a: %i b: %i c: %i d:%i col1: %i col2: %i\n", */
-/* 	 mpz_get_si(a), */
-/* 	 mpz_get_si(b), */
-/* 	 mpz_get_si(c), */
-/* 	 mpz_get_si(d), */
-/* 	 col1, col2); */
-
-  gmp_blas_rot(m->rows, 
-	       a, b, &(m -> storage[(m->rows)*(col1-1)]), 1, 
-	       c, d, &(m -> storage[(m->rows)*(col2-1)]), 1); 
-
-  return EXIT_SUCCESS;
-}
-
-size_t
-gmp_matrix_col_inz (size_t r1, size_t r2, size_t c, 
-		    gmp_matrix * m)
-{
-  size_t result;
-
-  if(m == NULL)
-    {
-      return 0;
-    }
-  if((r1 < 1) || (r1 > m->rows) || 
-     (r2 < 1) || (r2 > m->rows) ||
-     (r2 < r1) || (c < 1) || (c > m->cols))
-    {
-      return 0;
-    }
-
-  result = gmp_blas_inz(r2-r1+1, 
-			(const mpz_t *) &(m->storage[(c-1)*(m->rows)+r1-1]), 
-			1);
-
-  if(result > r2-r1+1)
-    {
-      return 0;
-    }
-
-  return result;
-}
-
-size_t
-gmp_matrix_row_inz (size_t r, size_t c1, size_t c2, 
-		    gmp_matrix * m)
-{
-  size_t result;
-
-  if(m == NULL)
-    {
-      return 0;
-    }
-  if((r  < 1) || (r  > m->rows) || 
-     (c1 < 1) || (c1 > m->cols) ||
-     (c2 < c1) || (c2 < 1) || (c2 > m->cols))
-    {
-      return 0;
-    }
-
-  result = gmp_blas_inz(c2-c1+1, 
-			(const mpz_t *) &(m->storage[(c1-1)*(m->rows)+r-1]), 
-			m->rows);
-
-  if(result > c2-c1+1)
-    {
-      return 0;
-    }
-
-  return result;
-}
-
-
-int
-gmp_matrix_is_diagonal(const gmp_matrix * M)
-{
-  size_t i,j;
-  size_t rows, cols;
-
-  if(M == NULL)
-    {
-      return 0;
-    }
-  
-  rows = M->rows;
-  cols = M->cols;
-
-  for(j = 1; j <= cols; j ++)
-    {
-      for(i = 1; i <= rows; i ++)
-	{
-	  if((mpz_cmp_si(M->storage[(i-1)+(j-1)*rows], 0) != 0) && 
-	     (i != j))
-	    {
-	      return 0;
-	    }
-	}
-    }
-
-  return 1;
-}
-
-
-int
-gmp_matrix_transp(gmp_matrix * M)
-{
-  mpz_t * new_storage;
-  size_t i,j;
-  size_t rows, cols;
-
-  if(M == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-  
-  rows = M->rows;
-  cols = M->cols;
-
-  new_storage = (mpz_t *) calloc(rows*cols, sizeof(mpz_t));
-  if(new_storage == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  for(i = 1; i <= rows; i++)
-    {
-      for(j = 1; j <= cols; j++)
-	{
-	  mpz_init_set(new_storage[(j-1)+(i-1)*cols], 
-		       M-> storage[(i-1)+(j-1)*rows]);
-	  mpz_clear(M-> storage[(i-1)+(j-1)*rows]);
-	}
-    }
-  free(M->storage);
-
-  M -> storage = new_storage;
-  M -> rows = cols;
-  M -> cols = rows;
-
-  return EXIT_SUCCESS;
-}
-
-
-int
-gmp_matrix_right_mult(gmp_matrix * A, const gmp_matrix * B)
-{
-  mpz_t * new_storage;
-  size_t i,j;
-  size_t rows_A, cols_A, rows_B, cols_B;
-
-  if((A == NULL) || (B == NULL))
-    {
-      return EXIT_FAILURE;
-    }
-  
-  rows_A = A->rows;
-  cols_A = A->cols;
-  rows_B = B->rows;
-  cols_B = B->cols;
-
-  if(cols_A != rows_B)
-    {
-      return EXIT_FAILURE;
-    }
-
-  /* Create new storage for the product */
-  new_storage = (mpz_t *) calloc(rows_A*cols_B, sizeof(mpz_t));
-  if(new_storage == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  /* Compute the product to the storage */
-  for(j = 1; j <= cols_B; j++)
-    {
-      for(i = 1; i <= rows_A; i++)
-	{
-	  mpz_init (new_storage[(i-1)+(j-1)*rows_A]);
-	  gmp_blas_dot(&(new_storage[(i-1)+(j-1)*rows_A]),
-		       cols_A,
-		       (const mpz_t *) &(A->storage[i-1]),          rows_A,
-		       (const mpz_t *) &(B->storage[(j-1)*rows_B]), 1);
-	}
-    }
-
-  /* Get rid of the old storage */
-  for(i = 1; i <= rows_A*cols_A; i++)
-    {
-      mpz_clear (A->storage[i-1]);
-    }
-  free(A->storage);
-
-  /* Update A */
-  A -> storage = new_storage;
-  A -> cols    = cols_B;
-
-  return EXIT_SUCCESS;
-}
-
-int
-gmp_matrix_left_mult(const gmp_matrix * A, gmp_matrix * B)
-{
-  mpz_t * new_storage;
-  size_t i,j;
-  size_t rows_A, cols_A, rows_B, cols_B;
-
-  if((A == NULL) || (B == NULL))
-    {
-      return EXIT_FAILURE;
-    }
-  
-  rows_A = A->rows;
-  cols_A = A->cols;
-  rows_B = B->rows;
-  cols_B = B->cols;
-
-  if(cols_A != rows_B)
-    {
-      return EXIT_FAILURE;
-    }
-
-  /* Create new storage for the product */
-  new_storage = (mpz_t *) calloc(rows_A*cols_B, sizeof(mpz_t));
-  if(new_storage == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  /* Compute the product to the storage */
-  for(j = 1; j <= cols_B; j++)
-    {
-      for(i = 1; i <= rows_A; i++)
-	{
-	  mpz_init (new_storage[(i-1)+(j-1)*rows_A]);
-	  gmp_blas_dot(&(new_storage[(i-1)+(j-1)*rows_A]),
-		       cols_A,
-		       (const mpz_t *) &(A->storage[i-1]),          rows_A,
-		       (const mpz_t *) &(B->storage[(j-1)*rows_B]), 1);
-	}
-    }
-
-  /* Get rid of the old storage */
-  for(i = 1; i <= rows_B*cols_B; i++)
-    {
-      mpz_clear (B->storage[i-1]);
-    }
-  free(B->storage);
-
-  /* Update A */
-  B -> storage = new_storage;
-  B -> rows    = rows_A;
-
-  return EXIT_SUCCESS;
-}
-
-
-int gmp_matrix_printf(const gmp_matrix * m)
-{
-
-  mpz_t        outz;
-  size_t rows, cols, i, j;
-
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  rows = m->rows;
-  cols = m->cols;
-  mpz_init(outz);
-  for(i = 1; i <= rows ; i++)
-    {
-      for(j = 1; j <= cols ; j++)
-	{
-	  gmp_matrix_get_elem(outz, i, j, m);
-	  mpz_out_str (stdout, 10, outz);
-	  printf(" ");
-	}
-      printf("\n");
-    }
-
-  mpz_clear(outz);
-
-  return EXIT_SUCCESS;
-}
-
-int gmp_matrix_fprintf(FILE* stream, const gmp_matrix * m)
-{
-  mpz_t        outz;
-  size_t rows, cols, i, j;
-
-  if(m == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  rows = m->rows;
-  cols = m->cols;
-  mpz_init(outz);
-  for(i = 1; i <= rows ; i++)
-    {
-      for(j = 1; j <= cols ; j++)
-	{
-	  gmp_matrix_get_elem(outz, i, j, m);
-	  mpz_out_str (stream, 10, outz);
-	  printf(" ");
-	}
-      printf("\n");
-    }
-
-  mpz_clear(outz);
-
-  return EXIT_SUCCESS;
-}
diff --git a/contrib/kbipack/gmp_matrix.h~ b/contrib/kbipack/gmp_matrix.h~
deleted file mode 100755
index 217b5fe7e1..0000000000
--- a/contrib/kbipack/gmp_matrix.h~
+++ /dev/null
@@ -1,144 +0,0 @@
-/* 
-   Header file for integer-oriented matrix, relying on the arbitrary 
-   precision integers from the GNU gmp package. 
-
-   Copyright (C) 28.10.2003 Saku Suuriniemi TUT/CEM
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-   Saku Suuriniemi, TUT/Electromagetics
-   P.O.Box 692, FIN-33101 Tampere, Finland
-   saku.suuriniemi@tut.fi
-
-   $Id: gmp_matrix.h~,v 1.1 2009-03-30 14:10:57 matti Exp $
-*/
-
-#ifndef __GMP_MATRIX_H__
-#define __GMP_MATRIX_H__
-
-#include"gmp_blas.h"
-
-typedef struct
-{
-  size_t  rows;
-  size_t  cols;
-  mpz_t * storage;
-} gmp_matrix;
-
-int gmp_kaka(int laalaa);
-
-/* Sets the values of "elems" column by column. The user is 
-   responsible for sufficient supply. */
-gmp_matrix * 
-create_gmp_matrix(size_t rows, size_t cols, 
-		  const mpz_t * elems);
-
-gmp_matrix * 
-create_gmp_matrix_identity(size_t dim);
-
-gmp_matrix * 
-create_gmp_matrix_zero(size_t rows, size_t cols);
-
-int 
-destroy_gmp_matrix(gmp_matrix *);
-
-size_t
-gmp_matrix_rows(const gmp_matrix *);
-
-size_t
-gmp_matrix_cols(const gmp_matrix *);
-
-/* elem <- (matrix(row, col)) */
-int
-gmp_matrix_get_elem(mpz_t elem, size_t row, size_t col,
-		    const gmp_matrix *);
-
-int
-gmp_matrix_swap_rows(size_t row1, size_t row2, gmp_matrix *);
-
-int
-gmp_matrix_swap_cols(size_t col1, size_t col2, gmp_matrix *);
-
-int  
-gmp_matrix_negate_row(size_t row, gmp_matrix *);
-
-int 
-gmp_matrix_negate_col(size_t col, gmp_matrix *); 
-
-/* row2 <- a*row1 + row2*/
-int
-gmp_matrix_add_row(mpz_t a, size_t row1, size_t row2,
-		   gmp_matrix *);
-int
-gmp_matrix_add_col(mpz_t a, size_t col1, size_t col2,
-		   gmp_matrix *);
-
-/* row1 <- a*row1 + b*row2
-   row2 <- c*row1 + d*row2 */
-int
-gmp_matrix_row_rot(mpz_t a, mpz_t b, size_t row1,
-		   mpz_t c, mpz_t d, size_t row2,
-		   gmp_matrix *);
-int
-gmp_matrix_col_rot(mpz_t a, mpz_t b, size_t col1,
-		   mpz_t c, mpz_t d, size_t col2,
-		   gmp_matrix *);
-
-/* 0 for no, 1 for yes */
-int
-gmp_matrix_is_diagonal(const gmp_matrix * M);
-
-/* Finds a nonzero in a subcolumn M(r1:r2,c). */
-/* Returns zero if no nonzeros found. */
-size_t
-gmp_matrix_col_inz (size_t r1, size_t r2, size_t c, 
-		    gmp_matrix * M);
-
-/* Finds a nonzero in a subrow M(r,c1:c2). */
-/* Returns zero if no nonzeros found. */
-size_t
-gmp_matrix_row_inz (size_t r, size_t c1, size_t c2, 
-		    gmp_matrix * M);
-
-int
-gmp_matrix_transp(gmp_matrix * M);
-
-/* A <- A*B */
-int
-gmp_matrix_right_mult(gmp_matrix * A, const gmp_matrix * B);
-
-/* B <- A*B */
-int
-gmp_matrix_left_mult(const gmp_matrix * A, gmp_matrix * B);
-
-/* (TBD ?)Implement the BLAS style GEMM? Place it here at all? */
-/*         (T)   (T) */
-/*   A <- B   * C    */
-/* Give 1 if the transpose of the matrix is to be used, else 0 */
-/* int */
-/* gmp_matrix_mult(gmp_matrix * A,  */
-/* 		const gmp_matrix * B, int transpose_B,  */
-/* 		const gmp_matrix * C, int transpose_C);  */
-
-/* 
-   Mainly for diagnostics ...        
-   --------------------------
-*/
-
-int gmp_matrix_printf(const gmp_matrix *);
-int gmp_matrix_fprintf(FILE*, const gmp_matrix *);
-
-
-#endif
diff --git a/contrib/kbipack/gmp_matrix.o b/contrib/kbipack/gmp_matrix.o
deleted file mode 100755
index b151210c86fa837e700afce35afff9326bbec789..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 20660
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

diff --git a/contrib/kbipack/gmp_matrix_io.o b/contrib/kbipack/gmp_matrix_io.o
deleted file mode 100755
index c7231192ab4007c70d68c083fb81cab8a3fddd0f..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 8060
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

diff --git a/contrib/kbipack/gmp_normal_form.c~ b/contrib/kbipack/gmp_normal_form.c~
deleted file mode 100755
index 5f695a53d0..0000000000
--- a/contrib/kbipack/gmp_normal_form.c~
+++ /dev/null
@@ -1,784 +0,0 @@
-/* 
-   Implementation for integer computation of Hermite and Smith normal 
-   forms of matrices of modest size. 
-
-   Implementation: Dense matrix with GMP-library's mpz_t elements to 
-                   hold huge integers. 
-
-   Algorithm: Kannan - Bachem algorithm with improvement by
-              Chou and Collins. Expects a large number of unit invariant 
-	      factors and takes advantage of them as they appear. 
-
-   References: 
-    [1] Ravindran Kannan, Achim Bachem: 
-        "Polynomial algorithms for computing the Smith and Hermite normal 
-	forms of an integer matrix", 
-	SIAM J. Comput., vol. 8, no. 5, pp. 499-507, 1979.
-    [2] Tsu-Wu J.Chou, George E. Collins: 
-        "Algorithms for the solution of systems of linear Diophantine 
-	equations", 
-	SIAM J. Comput., vol. 11, no. 4, pp. 687-708, 1982.
-    [3] GMP homepage http://www.swox.com/gmp/
-    [4] GNU gmp page http://www.gnu.org/software/gmp/
-
-   Copyright (C) 30.10.2003 Saku Suuriniemi TUT/CEM
-
-   This program is free software; you can redistribute it and/or modify
-   it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
-   any later version.
-   
-   This program is distributed in the hope that it will be useful,
-   but WITHOUT ANY WARRANTY; without even the implied warranty of
-   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-   GNU General Public License for more details.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-
-   Saku Suuriniemi, TUT/Electromagetics
-   P.O.Box 692, FIN-33101 Tampere, Finland
-   saku.suuriniemi@tut.fi
-
-   $Id: gmp_normal_form.c~,v 1.1 2009-03-30 14:10:57 matti Exp $
-*/
-
-#include<stdlib.h>
-#include"gmp_blas.h"
-#include"gmp_matrix.h"
-#include"gmp_normal_form.h"
-
-
-/* The unaltered matrix and identity left and right factors */
-static gmp_normal_form *
-create_gmp_trivial_normal_form(gmp_matrix * A, 
-			       inverted_flag left_inverted,
-			       inverted_flag right_inverted)
-{
-  size_t rows, cols;
-
-  gmp_normal_form * new_nf;
-  if(A == NULL)
-    {
-      return NULL;
-    }
-
-  new_nf = (gmp_normal_form *) malloc(sizeof(gmp_normal_form));
-  if(new_nf == NULL)
-    {
-      destroy_gmp_matrix(A);
-      return NULL;
-    }
-
-  rows = A -> rows;
-  cols = A -> cols;
-
-  if((rows == 0) || (cols == 0))
-    {
-      destroy_gmp_matrix(A);
-      return NULL;
-    }
-
-  new_nf->left = create_gmp_matrix_identity(rows);
-  if(new_nf->left == NULL)
-    {
-      destroy_gmp_matrix(A);
-      free(new_nf);
-      return NULL;
-    }
-
-  new_nf->right = create_gmp_matrix_identity(cols);
-  if(new_nf->right == NULL)
-    {
-      destroy_gmp_matrix(A);
-      destroy_gmp_matrix(new_nf->left);
-      free(new_nf);
-      return NULL;
-    }
-
-  new_nf -> canonical = A;
-  new_nf -> left_inverted  = left_inverted;
-  new_nf -> right_inverted = right_inverted;
-
-  return new_nf;
-}
-
-static int
-gmp_Hermite_eliminate_step(gmp_matrix * L, gmp_matrix * U, 
-			   size_t col, inverted_flag right_inverted)
-{
-  size_t ind, row_limit;
-  mpz_t  pivot, elem;
-  mpz_t  bez1, bez2, gc_div;
-  mpz_t  cff1, cff2;
-
-  mpz_init(pivot);
-  mpz_init(elem);
-  mpz_init(bez1);
-  mpz_init(bez2);
-  mpz_init(cff1);
-  mpz_init(cff2);
-  mpz_init(gc_div);
-
-  row_limit = (L->rows >= col) ? 
-    col-1 : 
-    L->rows;
-
-  for(ind = 1; ind <= row_limit; ind++)
-    {
-      gmp_matrix_get_elem(elem, ind, col, L);
-
-      /* Eliminate only if nonzero */
-      if(mpz_sgn (elem) != 0)
-	{
-	  gmp_matrix_get_elem(pivot, ind, ind, L);
-
-	  /* Extended Euclid's: 
-	     bez1*pivot+bez2*elem = gc_div */
-	  gmp_blas_rotg(gc_div, bez1, bez2, pivot, elem);
-
-	  /* Make cff1 = -elem/gc_div */
-	  mpz_divexact(cff1, elem,  gc_div);
-	  mpz_neg     (cff1, cff1);
-	  /* Make cff2 = pivot/gc_div */
-	  mpz_divexact(cff2, pivot, gc_div);
-
-	  /* Update the HNF canonical matrix */
-	  gmp_matrix_col_rot(bez1, bez2, ind,
-			     cff1, cff2, col,
-			     L);
-
-	  /* Update the unimodular factor matrix */
-	  if(right_inverted == INVERTED)
-	    {
-	      gmp_matrix_col_rot(bez1, bez2, ind,
-				 cff1, cff2, col,
-				 U);
-	    }
-	  else
-	    {
-
-	      /* [bez1, -elem/gc_div] [pivot/gc_div, elem/gc_div]
-		 [bez2, pivot/gc_div] [-bez2,        bez1       ]  = I_2 */
-	      mpz_neg(cff1, cff1);
-	      mpz_neg(bez2, bez2);
-	      gmp_matrix_row_rot(cff2, cff1, ind,
-				 bez2, bez1, col,
-				 U);
-	    }
-	}
-    }
-  mpz_clear(pivot);
-  mpz_clear(elem);
-  mpz_clear(bez1);
-  mpz_clear(bez2);
-  mpz_clear(cff1);
-  mpz_clear(cff2);
-  mpz_clear(gc_div);
-
-  return EXIT_SUCCESS;
-}
-
-
-
-static int
-gmp_Hermite_reduce_step(gmp_matrix * L,  gmp_matrix * U, 
-			size_t col, inverted_flag right_inverted)
-{
-
-  size_t i, j;
-  mpz_t  pivot, elem;
-  mpz_t  cff;
-
-  mpz_init(pivot);
-  mpz_init(elem);
-  mpz_init(cff);
-
-  if(col > (L->rows))
-    {
-      return EXIT_FAILURE;
-    }
-
-  /*  printf("Col = %i\n", col);
-      printf("L before\n");
-      gmp_matrix_printf(L);*/
-
-  for(j = col-1; j >= 1; j--)
-    {
-      for(i = j+1; i <= col; i++)
-	{
-	  gmp_matrix_get_elem(pivot, i, i, L);
-	  gmp_matrix_get_elem(elem,  i, j, L);
-	  /* printf("   i %i j %i\n",i,j);  */
-
-	  if((mpz_cmpabs(elem, pivot) >= 0) || (mpz_sgn(elem) < 0))
-	    {
-	      /* The objective:
-		  0           <= elem + k*pivot < pivot
-		  -elem       <= k*pivot        < pivot - elem
-		  -elem/pivot <= k              < - elem/pivot + 1
-
-		  Solution:
-		  k = ceil(-elem/pivot)
-	      */
-
-	      /* Make cff = -elem */
-	      mpz_neg    (cff, elem);
-	      mpz_cdiv_q (cff, cff, pivot);
-
-	      /* printf("col %i j %i\n", i, j); 
-		 printf("elem %i k %i pivot %i\n", 
-		 mpz_get_si(elem), 
-		 mpz_get_si(cff), 
-		 mpz_get_si(pivot));*/
-
-
-	      gmp_matrix_add_col(cff, i, j, L);
-
-	      /* Update the unimodular factor matrix */
-	      if(right_inverted == INVERTED)
-		{
-		  gmp_matrix_add_col(cff, i, j, U);
-		}
-
-	      /* [1   0] [ 1   0] = [1 0]
-		 [cff 1] [-cff 1]   [0 1] */
-	      else
-		{
-		  mpz_neg (cff, cff);
-		  gmp_matrix_add_row(cff, j, i, U);
-		}
-
-	      /* printf("\n");
-		 gmp_matrix_printf(L);*/
-
-	    }
-	}
-    }
-
-/*  printf("L after\n"); */
-/*   gmp_matrix_printf(L); */
-
-  mpz_clear(pivot);
-  mpz_clear(elem);
-  mpz_clear(cff);
-  return EXIT_SUCCESS;
-}
-
-
-static int
-gmp_normal_form_make_Hermite(gmp_normal_form * nf)
-{
-  size_t rows, cols;
-  size_t pivot_ind;
-  size_t schur, colind;
-  mpz_t  pivot;
-  gmp_matrix * canonical;
-  gmp_matrix * left;
-  gmp_matrix * right;
-
-  if(nf == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  /* OK, it's safe to get to business */
-  canonical = nf->canonical;
-  left      = nf->left;
-  right     = nf->right;
-  rows      = canonical -> rows;
-  cols      = canonical -> cols;
-
-  mpz_init(pivot);
-
-  /* "schur" denotes where the present Schur complement starts */
-  schur = 1;
-
-  while((schur <= rows) && (schur <= cols))
-    {
-      /* Eliminate a column */
-      if (schur > 1)
-	{
-	  gmp_Hermite_eliminate_step(canonical, right, 
-				     schur, nf->right_inverted);
-	}
-
-      /* Find a pivot */
-      pivot_ind = gmp_matrix_col_inz(schur, rows, schur, canonical);
-
-
-      /* If no nonzeros was found, the column is all zero, hence 
-	 settled with. Permute it to the end and decrement cols. */
-      if(pivot_ind == 0)
-	{
-	  gmp_matrix_swap_cols(schur, cols, canonical);
-
-	  if(nf -> right_inverted == INVERTED)
-	    {
-	      gmp_matrix_swap_cols(schur, cols, right);
-	    }
-	  else
-	    {
-	      gmp_matrix_swap_rows(schur, cols, right);
-	    }
-
-	  cols--;
-
-	  /* When the whole column was zeroed, the diagonal 
-	     elements may have got reduced. Reduce the sub-
-	     diagonals as well*/
-
-	  if(schur > 1)
-	    {
-	      gmp_Hermite_reduce_step (canonical, right, schur-1, 
-				       nf -> right_inverted);
-	    }
-	}
-
-      /* A nonzero pivot was found. Permute it to the diagonal position, 
-	 make it positive, and reduce the off-diagonals. 
-	 The schur complement now starts from the next diagonal. */
-      else
-	{
-	  pivot_ind = schur+pivot_ind-1;
-	  gmp_matrix_swap_rows(schur, pivot_ind, canonical);
-
-	  if(nf->left_inverted == INVERTED)
-	    {
-	      gmp_matrix_swap_rows(schur, pivot_ind, left);
-	    }
-	  else
-	    {
-	      gmp_matrix_swap_cols(schur, pivot_ind, left);
-	    }
-
-	  /* Make the pivot positive */
-	  gmp_matrix_get_elem(pivot, schur, schur, canonical);
-
-	  if(mpz_cmp_si(pivot, 0) < 0)
-	    {
-	      gmp_matrix_negate_col(schur, canonical); 
-
-	      if(nf->right_inverted == INVERTED)
-		{
-		  gmp_matrix_negate_col(schur, right); 
-		}
-	      else
-		{
-		  gmp_matrix_negate_row(schur, right); 
-		}
-	    }
-
-	  /*  Reduce off-diagonals */
-	  gmp_Hermite_reduce_step (canonical, right, schur, nf -> right_inverted);
-
-	  schur++;
-	}
-    }
-
-  /* The Schur complement is now empty. There may still be uneliminated 
-     columns left (in case of a wide matrix) */
-
-  colind = schur;
-  while (colind <= cols)
-    {
-      gmp_Hermite_eliminate_step (canonical, right, colind,  nf->right_inverted);
-      gmp_Hermite_reduce_step    (canonical, right, schur-1, nf->right_inverted);
-      colind++;
-    }
-
-  mpz_clear(pivot);
-
-  return EXIT_SUCCESS;
-}
-
-
-
-gmp_normal_form * 
-create_gmp_Hermite_normal_form(gmp_matrix * A, 
-			       inverted_flag left_inverted,
-			       inverted_flag right_inverted)
-{
-  gmp_normal_form * new_nf;
-
-  if(A == NULL)
-    {
-      return NULL;
-    }
-
-  new_nf = 
-    create_gmp_trivial_normal_form(A, left_inverted, right_inverted);
-
-  if(new_nf == NULL)
-    {
-      /* A has been destroyed already */
-      return NULL;
-    }
-
-  if(gmp_normal_form_make_Hermite(new_nf) != EXIT_SUCCESS)
-    {
-      destroy_gmp_normal_form(new_nf);
-      return NULL;
-    }
-
-  return new_nf;
-}
-
-
-gmp_normal_form *
-create_gmp_Smith_normal_form(gmp_matrix * A,
-			     inverted_flag left_inverted,
-			     inverted_flag right_inverted)
-{
-
-  gmp_normal_form * new_nf;
-  gmp_matrix * canonical;
-  gmp_matrix * elbow;
-  inverted_flag elbow_flag;
-  size_t rows, cols;
-  size_t i, j;
-  size_t subd_ind, row_undivisible;
-  size_t last_ready_row, first_ready_col, ind;
-  mpz_t  pivot;
-  mpz_t  remainder;
-
-  if(A == NULL)
-    {
-      return NULL;
-    }
-
-  new_nf = 
-    create_gmp_trivial_normal_form(A, left_inverted, right_inverted);
-
-  if(new_nf == NULL)
-    {
-      /* A has been destroyed already */
-      return NULL;
-    }
-
-  canonical = new_nf -> canonical;
-  mpz_init(pivot);
-  mpz_init(remainder);
-  rows = canonical->rows;
-  cols = canonical->cols;
-  last_ready_row  = 0;
-  first_ready_col = (cols < rows) ? (cols+1) : (rows+1);
-
-  while(first_ready_col > last_ready_row + 1)
-    {
-      /*******/
-      /* HNF */
-      /*******/
-
-      if(gmp_normal_form_make_Hermite(new_nf) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-
-#ifdef DEBUG
-      printf("HNF\n");
-      gmp_matrix_printf (new_nf -> left);
-      gmp_matrix_printf (new_nf -> canonical);
-      gmp_matrix_printf (new_nf -> right);
-#endif
-
-      /**********************/
-      /* Find ready columns */
-      /**********************/
-
-      /* If a diagonal entry is zero, so is the corresponding 
-	 column. The zero diagonals always reside in the end. 
-	 Seek until zero diagonal encountered, but stay within the matrix! */
-      ind = 1;
-      while ( (mpz_cmp_si(canonical -> storage[(ind-1)+(ind-1)*rows], 0) 
-	       != 0) 
-	      && 
-	      (ind < first_ready_col) )
-	{
-	  ind ++;
-	}
-      first_ready_col = ind;
-
-      /* Note: The number of ready cols is settled after the first HNF, 
-	 but the check is cheap. */
-
-      /**********************************************/
-      /* Permute unit diagonals such that they lead */
-      /**********************************************/
-
-      /* If the recently computed HNF has ones on the diagonal, their 
-	 corresponding rows are all zero (except the diagonal). 
-	 They are then settled, because the next LHNF kills the elements
-	 on their columns. */
-
-      ind = last_ready_row+1;
-  
-      /* Stay within the nonzero cols of the matrix */
-      while (ind < first_ready_col)
-	{
-	  /* Unit diagonal encountered */
-	  if(mpz_cmp_si ( canonical->storage[(ind-1) + (ind-1)*rows], 
-			  1) == 0)
-	    {
-	      /* If not in the beginning, permute to extend the leading minor 
-		 with unit diagonals */
-	      if(ind != last_ready_row+1)
-		{
-		  gmp_matrix_swap_rows(last_ready_row+1,     ind, 
-				       new_nf -> canonical);
-		  
-		  if(left_inverted == INVERTED)
-		    {
-		      gmp_matrix_swap_rows(last_ready_row+1, ind, 
-					   new_nf -> left);
-		    }
-		  else
-		    {
-		      gmp_matrix_swap_cols(last_ready_row+1, ind, 
-					   new_nf -> left);
-		    }
-		  
-		  gmp_matrix_swap_cols(last_ready_row+1,     ind, 
-				       new_nf -> canonical);
-		  
-		  if(right_inverted == INVERTED)
-		    {
-		      gmp_matrix_swap_cols(last_ready_row+1, ind, 
-					   new_nf -> right);
-		    }
-		  else
-		    {
-		      gmp_matrix_swap_rows(last_ready_row+1, ind, 
-					   new_nf -> right);
-		    }
-		}
-	      last_ready_row ++;
-	    }
-	  ind++;
-	}
-      
-#ifdef DEBUG
-      printf("Leading units\n");
-      gmp_matrix_printf (new_nf -> left);
-      gmp_matrix_printf (new_nf -> canonical);
-      gmp_matrix_printf (new_nf -> right);
-#endif
-
-      /********/
-      /* LHNF */
-      /********/
-
-      /* Extravagant strategy: Compute HNF of an explicit tranpose. */
-
-      /* 1. Transpose everything in the normal form */
-      if(gmp_matrix_transp(canonical) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-      if(gmp_matrix_transp(new_nf->left) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-      if(gmp_matrix_transp(new_nf->right) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-
-      elbow          = new_nf ->left;
-      new_nf ->left  = new_nf ->right;
-      new_nf ->right = elbow;
-      elbow_flag              = new_nf ->left_inverted;
-      new_nf ->left_inverted  = new_nf ->right_inverted;
-      new_nf ->right_inverted = elbow_flag;
-
-      /* 2. Compute HNF of the transpose */
-      if(gmp_normal_form_make_Hermite(new_nf) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-
-      /* 3. Transpose everything back */
-      if(gmp_matrix_transp(canonical) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-      if(gmp_matrix_transp(new_nf->left) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-      if(gmp_matrix_transp(new_nf->right) != EXIT_SUCCESS)
-	{
-	  destroy_gmp_normal_form(new_nf);
-	  mpz_clear(pivot);
-	  mpz_clear(remainder);
-	  return NULL;
-	}
-      elbow          = new_nf ->left;
-      new_nf ->left  = new_nf ->right;
-      new_nf ->right = elbow;
-      elbow_flag              = new_nf ->left_inverted;
-      new_nf ->left_inverted  = new_nf ->right_inverted;
-      new_nf ->right_inverted = elbow_flag;
-
-
-#ifdef DEBUG
-      printf("LHNF\n");
-      gmp_matrix_printf (new_nf -> left);
-      gmp_matrix_printf (new_nf -> canonical);
-      gmp_matrix_printf (new_nf -> right);
-#endif
-
-
-      /*****************************************************/
-      /* Check if more of the leading normal form is ready */
-      /*****************************************************/
-
-      /* The matrix is in LHNF, i.e. it is upper triangular. 
-	 If the row trailing the top left diagonal element is 
-	 zero, the diagonal element may be an invariant factor 
-	 on its final position, and the stage may be ready.
-
-	 The stage may not still be ready: The leading diagonal element 
-	 of D may not divide the rest of the Schur complement. */
-
-      subd_ind = 0;
-      row_undivisible = 0;
-
-      /* Explanation of loop conditions:
-	 1.) No relative primes found from Schur complement
-	 2.) Stay within the Schur complement
-	 3.) If a nonzero is found from the trailing row, the stage is 
-	     definitely not ready */
-      while (row_undivisible == 0 &&   
-	     last_ready_row + 1 < first_ready_col && 
-	     subd_ind == 0)        
-	{
-	  subd_ind = 
-	    gmp_matrix_row_inz(last_ready_row+1,
-			       last_ready_row+2, cols, 
-			       canonical);
-
-	  /* printf("subd_ind %i\n", subd_ind);
-	     printf("last_ready_row %i\n", last_ready_row); */
-      
-	  /* No nonzeros found, the stage may be ready */
-	  if (subd_ind == 0)
-	    {
-	      mpz_set (pivot, 
-		       canonical->storage[(last_ready_row)+
-					  (last_ready_row)*rows]);
-
-	      /* Check whether the pivot divides all elements in the Schur 
-		 complement */
-	      row_undivisible = 0;
-	      for(j = last_ready_row+2; j < first_ready_col; j++)
-		{
-		  for(i = last_ready_row+2; i <= j; i++)
-		    {
-		      mpz_tdiv_r (remainder, 
-				  canonical->storage[(i-1)+
-						     (j-1)*rows], 
-				  pivot);
-		  
-		      if(mpz_cmp_si(remainder, 0) !=0)
-			{
-			  row_undivisible = i;
-			  /* col_undivisible = j; */
-			}
-		    }
-		}
-
-	      /* printf("Row undivisible %i\n", row_undivisible); */
-
-	      /* If a relative prime was found from the Schur complement,  
-		 add that row to the first row of the Schur complement */
-	      if(row_undivisible != 0)
-		{
-		  mpz_set_si (remainder, 1);
-		  gmp_matrix_add_row(remainder, 
-				     row_undivisible, last_ready_row+1, 
-				     canonical);
-
-		  /* [ 1 0] [1 0] = [1 0]
-		     [-1 1] [1 1]   [0 1] */
-
-		  if(left_inverted == INVERTED)
-		    {
-		      gmp_matrix_add_row(remainder, 
-					 row_undivisible, last_ready_row+1, 
-					 new_nf->left);
-		    }
-		  else
-		    {
-		      mpz_neg (remainder, remainder);
-		      gmp_matrix_add_col(remainder, 
-					 last_ready_row+1, row_undivisible,
-					 new_nf->left);
-		    }
-		}
-	      /* The Schur complement is smaller by one again */
-	      else
-		{
-		  last_ready_row++;
-		}
-	    }
-	} 
-    }  /* The main loop ends here */
-  
-  mpz_clear(pivot);
-  mpz_clear(remainder);
-  return new_nf;
-}
-
-int destroy_gmp_normal_form(gmp_normal_form * nf)
-{
-  int status;
-
-  if(nf == NULL)
-    {
-      return EXIT_FAILURE;
-    }
-
-  status = EXIT_SUCCESS;
-  if(destroy_gmp_matrix(nf -> left) == EXIT_FAILURE)
-    {
-      status = EXIT_FAILURE;
-    }
-
-  if(destroy_gmp_matrix(nf -> canonical) == EXIT_FAILURE)
-    {
-      status = EXIT_FAILURE;
-    }
-
-  if(destroy_gmp_matrix(nf -> right) == EXIT_FAILURE)
-    {
-      status = EXIT_FAILURE;      
-    }
-  free(nf);
-
-  return status;
-}
-
-
diff --git a/contrib/kbipack/gmp_normal_form.o b/contrib/kbipack/gmp_normal_form.o
deleted file mode 100755
index f165a904233fc099325f1bb789f948c5207669de..0000000000000000000000000000000000000000
GIT binary patch
literal 0
HcmV?d00001

literal 16308
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
SLZ1~H<){o?T;w|r{r)Eq1>N}o

-- 
GitLab