Exemple de sortie écran :
 Copy/Past into the octave window. 
 A=[
-827.0,-63.0,+524.0,-186.0;
-52.0,-187.0,+520.0,-611.0;
-315.0,+90.0,-103.0,-27.0;
-972.0,-875.0,+21.0,+679.0]
 det(A)
 Press return to continue. 
p_mR(T,S8,P4,C6);
 -827.0000 -63.0000 +524.0000 -186.0000 
 -52.0000 -187.0000 +520.0000 -611.0000 
 -315.0000 +90.0000 -103.0000 -27.0000 
 -972.0000 -875.0000 +21.0000 +679.0000 
 Press return to continue. 
deter *= pivotbest_mR(T,rc);
 -972.0000 -875.0000 +21.0000 +679.0000 
 -52.0000 -187.0000 +520.0000 -611.0000 
 -315.0000 +90.0000 -103.0000 -27.0000 
 -827.0000 -63.0000 +524.0000 -186.0000 
 Press return to continue. 
deter *= zero_under_pivot_mR(T,rc);
 +1.0000 +0.9002 -0.0216 -0.6986 
 +0.0000 -140.1893 +518.8765 -647.3251 
 +0.0000 +373.5648 -109.8056 -247.0463 
 +0.0000 +681.4702 +506.1327 -763.7088 
 Press return to continue. 
deter *= pivotbest_mR(T,rc);
 +1.0000 -0.6986 -0.0216 +0.9002 
 +0.0000 -763.7088 +506.1327 +681.4702 
 +0.0000 -247.0463 -109.8056 +373.5648 
 +0.0000 -647.3251 +518.8765 -140.1893 
 Press return to continue. 
deter *= zero_under_pivot_mR(T,rc);
 +1.0000 -0.6986 -0.0216 +0.9002 
 -0.0000 +1.0000 -0.6627 -0.8923 
 +0.0000 +0.0000 -273.5305 +153.1213 
 +0.0000 +0.0000 +89.8748 -717.8083 
 Press return to continue. 
deter *= pivotbest_mR(T,rc);
 +1.0000 -0.6986 +0.9002 -0.0216 
 -0.0000 +1.0000 -0.8923 -0.6627 
 +0.0000 +0.0000 -717.8083 +89.8748 
 +0.0000 +0.0000 +153.1213 -273.5305 
 Press return to continue. 
deter *= zero_under_pivot_mR(T,rc);
 +1.0000 -0.6986 +0.9002 -0.0216 
 -0.0000 +1.0000 -0.8923 -0.6627 
 -0.0000 -0.0000 +1.0000 -0.1252 
 +0.0000 +0.0000 +0.0000 -254.3586 
 Press return to continue. 
deter *= pivotbest_mR(T,rc);
 +1.0000 -0.6986 +0.9002 -0.0216 
 -0.0000 +1.0000 -0.8923 -0.6627 
 -0.0000 -0.0000 +1.0000 -0.1252 
 +0.0000 +0.0000 +0.0000 -254.3586 
 Press return to continue. 
deter *= zero_under_pivot_mR(T,rc);
 +1.0000 -0.6986 +0.9002 -0.0216 
 -0.0000 +1.0000 -0.8923 -0.6627 
 -0.0000 -0.0000 +1.0000 -0.1252 
 -0.0000 -0.0000 -0.0000 +1.0000 
 det(A) = -1.3553e+11
 Press return to continue
 Press X to stop

Mathc matrices/c071c
Étude du code
Installer et compiler ces fichiers dans votre répertoire de travail.
/* Save as : c01c.c */
/* ------------------------------------ */
double Xdet_R(
double **A
double **T = c_mR(A,
 i_RC_mR(A[R_SIZE][C0],A[C_SIZE][C0]));
double SIGN = 1;
double PIVOT = 1;
double deter=1;
int rc;
 for( rc=C1; rc<T[C_SIZE][C0]; rc++)
 SIGN = pivotbest_mR(T,rc);
 deter *= SIGN; 
 clrscrn();
 printf(" deter *= pivotbest_mR(T,rc);\n\n" 
 " SIGN = %+0.4f \n deter = %+0.4f\n\n\n",SIGN,deter); 
 p_mR(T,S10,P4,C6);
 stop();
 PIVOT = zero_under_pivot_mR(T,rc);
 deter *= PIVOT; 
 clrscrn();
 printf(" deter *= zero_under_pivot_mR(T,rc);\n\n" 
 " PIVOT = %+0.4f\n" 
 " deter *= PIVOT \n" 
 " deter = %+0.4f\n",PIVOT,deter); 
 p_mR(T,S10,P4,C6);
 if(rc+C1<T[C_SIZE][C0]) stop();
 f_mR(T);
return(deter);
/* ------------------------------------ */
void fun(void)
double **A = r_mR(i_mR(R4,R4),999);
 clrscrn();
 printf(" Copy/Past into the octave window. \n\n");
 p_Octave_mR(A,"A",P1);
 printf(" det(A)\n\n\n");
 stop();
 printf(" det(A) = %.4e\n",Xdet_R(A));
 f_mR(A);
/* ------------------------------------ */
int main(void)
time_t t;
 srand(time(&t));
do
 fun();
} while(stop_w());
 return 0;
/* ------------------------------------ */

Exemple de sortie écran :
 Copy/Past into the octave window. 
 A=[
-371.0,+380.0,+569.0,-320.0;
+424.0,-915.0,-201.0,-76.0;
-939.0,-571.0,+985.0,-110.0;
+785.0,+834.0,-901.0,-651.0]
 det(A)
 Press return to continue. 
 deter *= pivotbest_mR(T,rc);
 SIGN = +1.0000 
 deter = +1.0000
 +985.0000 -571.0000 -939.0000 -110.0000 
 -201.0000 -915.0000 +424.0000 -76.0000 
 +569.0000 +380.0000 -371.0000 -320.0000 
 -901.0000 +834.0000 +785.0000 -651.0000 
 Press return to continue. 
 deter *= zero_under_pivot_mR(T,rc);
 PIVOT = +985.0000
 deter *= PIVOT 
 deter = +985.0000
 +1.0000 -0.5797 -0.9533 -0.1117 
 +0.0000 -1031.5188 +232.3868 -98.4467 
 +0.0000 +709.8467 +171.4274 -256.4569 
 +0.0000 +311.6944 -73.9228 -751.6193 
 Press return to continue. 
 deter *= pivotbest_mR(T,rc);
 SIGN = +1.0000 
 deter = +985.0000
 +1.0000 -0.5797 -0.9533 -0.1117 
 +0.0000 -1031.5188 +232.3868 -98.4467 
 +0.0000 +709.8467 +171.4274 -256.4569 
 +0.0000 +311.6944 -73.9228 -751.6193 
 Press return to continue. 
 deter *= zero_under_pivot_mR(T,rc);
 PIVOT = -1031.5188
 deter *= PIVOT 
 deter = -1016046.0000
 +1.0000 -0.5797 -0.9533 -0.1117 
 -0.0000 +1.0000 -0.2253 +0.0954 
 +0.0000 +0.0000 +331.3460 -324.2036 
 +0.0000 +0.0000 -3.7024 -781.3670 
 Press return to continue. 
 deter *= pivotbest_mR(T,rc);
 SIGN = +1.0000 
 deter = -1016046.0000
 +1.0000 -0.5797 -0.1117 -0.9533 
 -0.0000 +1.0000 +0.0954 -0.2253 
 +0.0000 +0.0000 -781.3670 -3.7024 
 +0.0000 +0.0000 -324.2036 +331.3460 
 Press return to continue. 
 deter *= zero_under_pivot_mR(T,rc);
 PIVOT = -781.3670
 deter *= PIVOT 
 deter = +793904780.0000
 +1.0000 -0.5797 -0.1117 -0.9533 
 -0.0000 +1.0000 +0.0954 -0.2253 
 -0.0000 -0.0000 +1.0000 +0.0047 
 +0.0000 +0.0000 +0.0000 +332.8822 
 Press return to continue. 
 deter *= pivotbest_mR(T,rc);
 SIGN = +1.0000 
 deter = +793904780.0000
 +1.0000 -0.5797 -0.1117 -0.9533 
 -0.0000 +1.0000 +0.0954 -0.2253 
 -0.0000 -0.0000 +1.0000 +0.0047 
 +0.0000 +0.0000 +0.0000 +332.8822 
 Press return to continue. 
 deter *= zero_under_pivot_mR(T,rc);
 PIVOT = +332.8822
 deter *= PIVOT 
 deter = +264276759105.0000
 +1.0000 -0.5797 -0.1117 -0.9533 
 -0.0000 +1.0000 +0.0954 -0.2253 
 -0.0000 -0.0000 +1.0000 +0.0047 
 +0.0000 +0.0000 +0.0000 +1.0000 
 det(A) = 2.6428e+11
 Press return to continue
 Press X to stop

Symfony
Programmation Python/Analyse statique de programmes

Python offre plusieurs outils d'.
pylint.
Cet analyseur de code statique vérifie les potentiels erreurs (ex : variable non déclarée) et le formatage du code pour le rendre plus lisible par les humains.
Installation :
 apt install pylint
Lancement de l'analyse, qui donne une note sur 10 :
 pylint $(git ls-files '*.py')
flake8.
Idem.
Installation :
 pip install flake8
Lancement :
 flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
autopep8.
Utilitaire de formatage du code selon la norme https://peps.python.org/pep-0008/.
Installation :
 pip install autopep8
Lancement du reformatage d'un fichier :
 autopep8 --in-place --aggressive mon_fichier.py
Lancement du reformatage du dossier courant récursivement :
 find . -name '*.py' -exec autopep8 --in-place '{}' \;:
Sourcery.
Il s'agit d'un outil avec deux composants :
Installation.
 pip install sourcery
Puis dans la racine du programme :
 sourcery init
Cela crée un .sourcery.yaml permettant d'ajuster la configuration du scanner, par exemple pour ignorer certaines recommandations ou certains fichiers.
Utilisation.
Pour scanner :
 sourcery review .
Pour scanner et modifier un seul fichier :
 sourcery review ./mon_fichier.py --fix

Programmation PHP/Analyse statique de programmes