PIPS
sc_to_matrice.c File Reference
#include <stdio.h>
#include "linear_assert.h"
#include "arithmetique.h"
#include "boolean.h"
#include "vecteur.h"
#include "contrainte.h"
#include "sc.h"
#include "sommet.h"
#include "matrix.h"
#include "plint.h"
+ Include dependency graph for sc_to_matrice.c:

Go to the source code of this file.

Functions

void sys_mat_conv (Psysteme ps, Pmatrix A, Pmatrix B, int n, int m)
 package sur les polyedres More...
 
void mat_sys_conv (Psysteme ps, Pmatrix B, int n, int m, int nbl)
 void mat_sys_conv(Psysteme ps, matrice B, int n, int m, int nbl) remplissage du champ des egalites ps->egalites en fonction de la matrice B qui contient les coefficients et les termes constant More...
 
char * variable_name (Variable v)
 polynome_ri.c More...
 
void egalites_to_matrice (Pmatrix a, int n, int m, Pcontrainte leg, Pbase b)
 void egalites_to_matrice(matrice a, int n, int m, Pcontrainte leg, Pbase b): conversion d'une liste d'egalites leg representees par des vecteurs creux en une matrice pleine a de n lignes representant les egalites et de m colonnes representant les variables. More...
 
Pcontrainte matrice_to_contraintes (Pmatrix a, int n, int m, Pbase b)
 Pcontrainte matrice_to_contraintes(matrice a, int n, int m, Pbase b): fonction inverse de la precedente; les termes constants sont pris en colonne 0; les contraintes, egalites ou inegalites, sont allouees en fonction des besoins. More...
 

Function Documentation

◆ egalites_to_matrice()

void egalites_to_matrice ( Pmatrix  a,
int  n,
int  m,
Pcontrainte  leg,
Pbase  b 
)

void egalites_to_matrice(matrice a, int n, int m, Pcontrainte leg, Pbase b): conversion d'une liste d'egalites leg representees par des vecteurs creux en une matrice pleine a de n lignes representant les egalites et de m colonnes representant les variables.

Les lignes sont assignees suivant l'ordre dans lequel les egalites apparaissent dans la liste leg. Les colonnes sont assignees suivant les rang des variables dans la base b.

Les termes constants sont pris en compte et stockes (arbitrairement) dans la colonne 0.

La matrice a est supposees avoir ete allouees en memoire avec des dimensions suffisantes. Elle est initialisee a 0. Ni la liste d'egalites leg, ni la base b ne sont modifiees.

Les nombres effectifs d'egalites et de variables ne sont pas retournes.

L'implementation n'est pas propre, meme je ne vois pas ce qu'on peut faire de mieux sans un iterateurs sur les coefficients non nuls d'un vecteur. De plus, cette conversion de format est typiquement implementation dependante. L'implementation faite par Corinne pour syst_mat_conv() est cependante correcte. En plus, je parcours plein de fois la base... I'm lost!

Francois Irigoin, 17 avril 1990

Definition at line 168 of file sc_to_matrice.c.

174 {
175  Pvecteur v;
176  int ligne;
177 
178  matrix_nulle(a);
179 
180  for(ligne=0;!CONTRAINTE_NULLE_P(leg); leg=leg->succ, ligne++) {
181  assert(ligne<n);
182  for(v = contrainte_vecteur(leg); !VECTEUR_UNDEFINED_P(v);
183  v = v->succ)
184  {
185  int rank = vecteur_var(v) == TCST? 0 :
187  vecteur_var(v),
188  variable_name);
189  assert(rank < m);
190  MATRIX_ELEM(a, ligne, rank) = vecteur_val(v);
191  }
192  }
193 }
int base_find_variable_rank(Pbase b, Variable v, char *(*variable_name)(Variable))
int base_find_variable_rank(Pbase b, Variable v, char * (*variable_name)()): returns variable v's ran...
Definition: base.c:194
#define CONTRAINTE_NULLE_P(c)
contrainte nulle (non contrainte 0 == 0 ou 0 <= 0)
#define contrainte_vecteur(c)
passage au champ vecteur d'une contrainte "a la Newgen"
#define MATRIX_ELEM(matrix, i, j)
Macros d'acces aux elements d'une matrice.
Definition: matrix-local.h:80
void matrix_nulle(Pmatrix Z)
void matrix_nulle(Pmatrix Z): Initialisation de la matrice Z a la valeur matrice nulle
Definition: matrix.c:293
static entity rank
#define assert(ex)
Definition: newgen_assert.h:41
char * variable_name(Variable v)
polynome_ri.c
Definition: polynome_ri.c:73
struct Scontrainte * succ
le type des coefficients dans les vecteurs: Value est defini dans le package arithmetique
Definition: vecteur-local.h:89
struct Svecteur * succ
Definition: vecteur-local.h:92
#define TCST
VARIABLE REPRESENTANT LE TERME CONSTANT.
#define vecteur_val(v)
#define vecteur_var(v)
#define VECTEUR_UNDEFINED_P(v)

References assert, base_find_variable_rank(), CONTRAINTE_NULLE_P, contrainte_vecteur, MATRIX_ELEM, matrix_nulle(), rank, Scontrainte::succ, Svecteur::succ, TCST, variable_name(), VECTEUR_UNDEFINED_P, vecteur_val, and vecteur_var.

+ Here is the call graph for this function:

◆ mat_sys_conv()

void mat_sys_conv ( Psysteme  ps,
Pmatrix  B,
int  n,
int  m,
int  nbl 
)

void mat_sys_conv(Psysteme ps, matrice B, int n, int m, int nbl) remplissage du champ des egalites ps->egalites en fonction de la matrice B qui contient les coefficients et les termes constant

La matrice B passee en parametres est celle calculee a l'aide de la fonction "matrice_smith"

Les parametres de la fonction :

!Psysteme ps : systeme lineaire avec un champ base initialise int B[] : matrice de dimension (m,m+1) correspondant a la matrice solution du systeme d'egalites du systeme lineaire int n : nombre de lignes de la matrice (FI laquelle?) int m : nombre de colonnes de la matrice int nbl : nombre de variables non contraintes ajoutees a la matrice

Modifications:

  • prise en compte du changement de cote du terme constant (FI, 19/12/89)

Definition at line 103 of file sc_to_matrice.c.

108 {
109  Pvecteur pv=NULL;
110  Pcontrainte pc=NULL;
111  Pcontrainte cp = NULL;
112  Pbase b;
113  Pbase b1;
114  int i,j;
115  Value den;
116 
117  for(i = 1; i <= nbl; i++)
118  creat_new_var(ps);
119 
120  if(value_notzero_p(den = MATRIX_DENOMINATOR(B))) {
121  for (i=1, b = ps->base;i<=m && !VECTEUR_NUL_P(b); i++, b = b->succ) {
122  cp = contrainte_new();
123  pv = vect_new(vecteur_var(b),den);
124 
125  for (j=1, b1 = b; j<=nbl && !VECTEUR_NUL_P(b1); j++, b1=b1->succ)
127  value_uminus(MATRIX_ELEM(B,i,j+1)));
128 
129  vect_chg_coeff(&pv,TCST,MATRIX_ELEM(B,i,1));
130  cp->vecteur = pv;
131  cp->succ = pc;
132  pc = cp;
133  }
134  }
135  ps->egalites = pc;
136  ps->nb_eq = n+nbl;
137 }
#define value_notzero_p(val)
#define value_uminus(val)
unary operators on values
int Value
Pcontrainte contrainte_new(void)
package contrainte - allocations et desallocations
Definition: alloc.c:47
#define B(A)
Definition: iabrev.h:61
#define MATRIX_DENOMINATOR(matrix)
int MATRIX_DENONIMATOR(matrix): acces au denominateur global d'une matrice matrix
Definition: matrix-local.h:86
Value b1
booleen indiquant quel membre est en cours d'analyse
Definition: sc_gram.c:105
Pvecteur cp
pointeur sur l'egalite ou l'inegalite courante
Definition: sc_read.c:87
Variable creat_new_var(Psysteme ps)
char * noms_var(int i): cette fonction convertit un numero de variable en chaine de caracteres
Definition: sc_var.c:102
Pcontrainte egalites
Definition: sc-local.h:70
Pbase base
Definition: sc-local.h:75
int nb_eq
Definition: sc-local.h:72
#define VECTEUR_NUL_P(v)
Pvecteur vect_new(Variable var, Value coeff)
Pvecteur vect_new(Variable var,Value coeff): allocation d'un vecteur colineaire au vecteur de base va...
Definition: alloc.c:110
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val)
void vect_chg_coeff(Pvecteur *ppv, Variable var, Value val): mise de la coordonnee var du vecteur *pp...
Definition: unaires.c:143

References B, b1, contrainte_new(), cp, creat_new_var(), MATRIX_DENOMINATOR, MATRIX_ELEM, Svecteur::succ, TCST, value_notzero_p, value_uminus, vect_chg_coeff(), vect_new(), VECTEUR_NUL_P, and vecteur_var.

Referenced by sc_resol_smith().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ matrice_to_contraintes()

Pcontrainte matrice_to_contraintes ( Pmatrix  a,
int  n,
int  m,
Pbase  b 
)

Pcontrainte matrice_to_contraintes(matrice a, int n, int m, Pbase b): fonction inverse de la precedente; les termes constants sont pris en colonne 0; les contraintes, egalites ou inegalites, sont allouees en fonction des besoins.

`

Comme on ne sait pas representer des contraintes rationnelles avec le type de donnees "contrainte", le denominateur de la matrice doit valoir 1.

Definition at line 204 of file sc_to_matrice.c.

209 {
211  return leg;
212 }
#define CONTRAINTE_UNDEFINED

References CONTRAINTE_UNDEFINED.

◆ sys_mat_conv()

void sys_mat_conv ( Psysteme  ps,
Pmatrix  A,
Pmatrix  B,
int  n,
int  m 
)

package sur les polyedres

Francois Irigoin void sys_mat_conv(Psysteme ps, matrice A, matrice B, int n, int m): calcul de la matrice A correspondant a la partie lineaire des egalites (ou des inegalites?) du systeme lineaire ps et de la matrice B correspondant aux termes constants de ps

Les parametres de la fonction :

Psysteme ps : systeme lineaire !int A[] : matrice !int B[] : matrice int n : nombre de lignes de la matrice int m : nombre de colonnes de la matrice

Modifications:

  • prise en compte du changement de signe du terme constant (FI, 19/12/89)

Definition at line 65 of file sc_to_matrice.c.

70 {
71  int i,j;
73  Pbase b;
74 
75  matrix_nulle(B);
76  matrix_nulle(A);
77  for(eq = ps->egalites,i=1; eq != NULL; eq=eq->succ,i++) {
78  for (j=1, b=ps->base; j<= m && !VECTEUR_NUL_P(b); j++, b = b->succ)
81  }
82 }
Pcontrainte eq
element du vecteur colonne du systeme donne par l'analyse
Definition: sc_gram.c:108
Definition: pip__tab.h:25
Pvecteur vecteur
Value vect_coeff(Variable var, Pvecteur vect)
Variable vect_coeff(Variable var, Pvecteur vect): coefficient de coordonnee var du vecteur vect —> So...
Definition: unaires.c:228

References B, eq, MATRIX_ELEM, matrix_nulle(), Scontrainte::succ, Svecteur::succ, TCST, vect_coeff(), Scontrainte::vecteur, VECTEUR_NUL_P, and vecteur_var.

Referenced by sc_resol_smith(), and smith_int().

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ variable_name()

char* variable_name ( Variable  var)

polynome_ri.c

This file gathers some functions interfacing polynomial library and the RI.

The "Variable" type used by polynomials is casted to "entity", the "Value" type, to int.

char *variable_name(Variable var) return the complete name of the entity var

char *variable_local_name(Variable var) return the abbreviated, local name of var

bool is_inferior_var(Variable var1, var2) return true if the complete name of var1 is lexicographically before var2's one.

Variable name_to_variable(char *name) inverse function of variable_name. name must be the complete name of the variable. Modif: – entity_local_name is replaced by module_local_name. LZ 230993

FI: no longer useful

Definition at line 73 of file polynome_ri.c.

75 {
76  string s = (string) malloc(10);
77 
78  if (var == TCST)
79  s = strdup(TCST_NAME);
80  /* FI: no longer useful */
81  /*
82  else if (var == UNKNOWN_VARIABLE)
83  s = strdup(UNKNOWN_VARIABLE_NAME);
84  else if (var == UNKNOWN_RANGE)
85  s = strdup(UNKNOWN_RANGE_NAME);
86  */
87  else if (var == (Variable) chunk_undefined)
88  pips_internal_error("unexpected var == chunk_undefined.");
89  else
90  s = strdup(entity_name((entity) var));
91 
92  return (s);
93 }
#define TCST_NAME
#define chunk_undefined
obsolete
Definition: genC.h:79
void * malloc(YYSIZE_T)
#define pips_internal_error
Definition: misc-local.h:149
char * string
STRING.
Definition: newgen_types.h:39
#define entity_name(x)
Definition: ri.h:2790
char * strdup()
void * Variable
arithmetique is a requirement for vecteur, but I do not want to inforce it in all pips files....
Definition: vecteur-local.h:60

References chunk_undefined, entity_name, malloc(), pips_internal_error, strdup(), TCST, and TCST_NAME.

Referenced by add_parameter_variable_to_module(), add_private_variable_to_module(), adg_contrainte_fprint(), adg_egalite_fprint(), adg_inegalite_fprint(), adg_vecteur_fprint(), base_find_variable_name(), base_find_variable_rank(), base_fprint(), complexity_sprint(), complexity_var_subst(), contrainte_fprint(), contrainte_sprint(), contrainte_sprint_format(), contrainte_text_format(), contrainte_to_text_1(), contrainte_to_text_2(), contrainte_translate(), contraintes_text_format(), egalite_fprint(), egalite_sprint(), egalite_sprint_format(), egalite_text_format(), egalites_fprint(), egalites_to_matrice(), fprint_contrainte_vecteur(), generate_variable_with_unique_name_to_module(), generic_make_entity_copy_with_new_name(), heuristique_1(), heuristique_3(), inegalite_fprint(), inegalite_sprint(), inegalite_sprint_format(), inegalite_text_format(), inegalites_fprint(), make_new_derived_entity_with_prefix(), make_new_scalar_variable_with_prefix(), make_variable_from_name_and_entity(), monome_fprint(), monome_sprint(), polynome_fprint(), polynome_sprint(), print_homogeneous_arguments(), prp(), prv(), pu_contrainte_fprint(), pu_egalite_fprint(), pu_inegalite_fprint(), pvecteur_to_polynome(), relation_to_string(), replace_formal_parameters_by_real_ones(), sc_strong_normalize4(), sc_strong_normalize5(), sc_strong_normalize_and_check_feasibility2(), sc_translate(), sc_variables_rename(), signed_operation_to_textline(), system_sorted_text_format(), system_text_format(), translate_complexity_from_local_to_current_name(), unsigned_operation_to_textline(), vect_fprint(), vect_fprint_as_monome(), vect_print(), vect_rename(), vect_sprint_as_monome(), vect_translate(), and vecteur_fprint().

+ Here is the call graph for this function: