[med-svn] [Git][med-team/praat][master] 7 commits: New upstream version 6.1.14

Rafael Laboissiere gitlab at salsa.debian.org
Thu May 21 21:31:33 BST 2020



Rafael Laboissiere pushed to branch master at Debian Med / praat


Commits:
696c3294 by Rafael Laboissière at 2020-05-03T10:11:32-03:00
New upstream version 6.1.14
- - - - -
2ccd0e80 by Rafael Laboissière at 2020-05-21T11:04:12-03:00
Merge branch 'upstream'

- - - - -
b1f5226a by Rafael Laboissière at 2020-05-21T11:04:39-03:00
New upstream version 6.1.15
- - - - -
73f73c21 by Rafael Laboissière at 2020-05-21T11:06:58-03:00
Merge tag 'upstream/6.1.15'

Upstream version 6.1.15

- - - - -
4773f2d7 by Rafael Laboissière at 2020-05-21T11:09:44-03:00
d/t/run-tests: Drop workaround for test_Discriminant.praat

- - - - -
cd4fb638 by Rafael Laboissière at 2020-05-21T16:19:18-03:00
d/clean: Extend list of files to remove

- - - - -
50946a46 by Rafael Laboissière at 2020-05-21T17:31:00-03:00
Changelog entry for version 6.1.15-1

Gbp-Dch: Ignore

- - - - -


19 changed files:

- debian/changelog
- debian/clean
- debian/tests/run-tests
- dwsys/NUM2.cpp
- dwtest/test_Covariance.praat
- dwtest/test_Discriminant.praat
- dwtools/Covariance.cpp
- dwtools/Discriminant.cpp
- dwtools/praat_David_init.cpp
- fon/manual_tutorials.cpp
- melder/MelderArg.h
- melder/melder_debug.cpp
- melder/melder_tensorio.cpp
- melder/melder_tensorio.h
- sys/Graphics_text.cpp
- sys/praat_version.h
- + test/dwtools/Discriminant2.praat
- + test/dwtools/Discriminant3.praat
- + test/dwtools/pols_50males_format0.Discriminant


Changes:

=====================================
debian/changelog
=====================================
@@ -1,3 +1,11 @@
+praat (6.1.15-1) unstable; urgency=medium
+
+  * New upstream version 6.1.15
+  * d/t/run-tests: Drop workaround for test_Discriminant.praat
+  * d/clean: Extend list of files to remove
+
+ -- Rafael Laboissière <rafael at debian.org>  Thu, 21 May 2020 11:10:34 -0300
+
 praat (6.1.14-3) unstable; urgency=medium
 
   * d/p/cross-build.patch: New patch


=====================================
debian/clean
=====================================
@@ -1,5 +1,6 @@
 dwtest/kanweg.FFNet
 dwtest/kanweg.SpeechSynthesizer
+test/dwtools/kanweg.*
 test/fon/kanweg*.txt
 test/fon/kanweg.nsp
 test/fon/kanweg.Object
@@ -19,3 +20,4 @@ praat.1
 praat_nogui.1
 sendpraat.1
 praat-open-files.1
+    
\ No newline at end of file


=====================================
debian/tests/run-tests
=====================================
@@ -6,13 +6,7 @@
 ### Allow specification of the Praat executable
 PRAAT=${PRAAT:-praat}
 
-### Temporarily disable unit test
-mv dwtest/test_Discriminant.praat dwtest/test_Discriminant.praat-away
-
 ### Run the unit tests
 for dir in test dwtest ; do
     (cd $dir ; $PRAAT --run runAllTests_batch.praat)
 done
-
-### Restore disabled unit test
-mv dwtest/test_Discriminant.praat-away dwtest/test_Discriminant.praat


=====================================
dwsys/NUM2.cpp
=====================================
@@ -1,6 +1,6 @@
 /* NUM2.cpp
  *
- * Copyright (C) 1993-2020 David Weenink, Paul Boersma 2017
+ * Copyright (C) 1993-2020 David Weenink, Paul Boersma 2017,2020
  *
  * This code is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -259,7 +259,7 @@ autoMAT newMATlowerCholeslyInverse_fromLowerCholesky (constMAT const& m) {
 	return result;
 }
 
-void MATlowerCholesky_inplace (MAT a, double *out_lnd) {
+void MATlowerCholesky_inplace (MAT a, double *out_lnDeterminant) {
 	Melder_assert (a.nrow == a.ncol);
 	/*
 		Cholesky decomposition in lower, leave upper intact
@@ -272,11 +272,12 @@ void MATlowerCholesky_inplace (MAT a, double *out_lnd) {
 	/*
 		Determinant from diagonal, diagonal is now sqrt (a [i] [i]) !
 	*/
-	if (out_lnd) {
-		longdouble lnd = 0.0;
+	if (out_lnDeterminant) {
+		longdouble lnDeterminant = 0.0;
 		for (integer i = 1; i <= a.nrow; i ++)
-			lnd += log (a [i] [i]);
-		*out_lnd *= 2.0 * lnd; /* because A = L . L' */
+			lnDeterminant += log (a [i] [i]);
+		lnDeterminant *= 2.0;   /* because A = L . L' */
+		*out_lnDeterminant = double (lnDeterminant);
 	}
 }
 


=====================================
dwtest/test_Covariance.praat
=====================================
@@ -1,13 +1,37 @@
 # test_Covariance.praat
-# djmw 2015
+# djmw 2015, 2020
 
 appendInfoLine: "test_Covariance"
 appendInfoLine: tab$, "Morrison_example_7.3"
 @test_Morrison_example_7_3
 appendInfoLine: tab$, "Morrison_example_3.5"
 @test_Morrison_example_3_5
+appendInfoLine: tab$, "Morrison_example_4.3"
+ at test_Morrison_example_4_3
 appendInfoLine: "test_Covariance OK"
 
+procedure test_Morrison_example_4_3
+	.covariances$ = "11.264 9.4060 7.1550 3.3791 13.5265 7.3784 2.5014 11.5796 2.6167 5.8133"
+	.means1$ = "12.57 9.57 11.49 7.97"
+	.means2$ = "8.75 5.33 8.50 4.75"
+	.covariance1 = Create simple Covariance: "4_3_1", .covariances$, .means1$, 37
+	.covariance2 = Create simple Covariance: "4_3_2", .covariances$, .means2$, 12
+	selectObject: .covariance1, .covariance2
+	.report$ =  Report multivariate mean difference: "yes"
+	.fisher = extractNumber (.report$, "Fisher's F:")
+	assert abs (.fisher - 5.18) < 0.005
+	.p = extractNumber (.report$, "Significance from zero:")
+	assert .p < 0.005
+	.numberOfObservations1 = extractNumber (.report$, "Number of observations 1:")
+	assert .numberOfObservations1 = 37
+	.numberOfObservations2 = extractNumber (.report$, "Number of observations 2:")
+	assert .numberOfObservations2 = 12
+	.dof1 = 	extractNumber (.report$, "Degrees of freedom 1:")
+	assert .dof1 == 4
+	.dof2 = 	extractNumber (.report$, "Degrees of freedom 2:")
+	assert .dof2 = 44
+endproc
+
 procedure test_Morrison_example_7_3
 	.p = 2
 	.k = 2
@@ -41,7 +65,7 @@ procedure test_Morrison_example_7_3
 	.chisq$ = fixed$ (.chisq, 2)
 	assert .chisq$ = "2.72" 
 	.cInv = 1 - (2*.p^2+3*.p-1)/(6*(.p+1)*(.k-1))*(1/31+1/31-1/62)
-	appendInfoLine: "C^-1 = ", .cInv
+	appendInfoLine: tab$, "C^-1 = ", .cInv
 	removeObject: .sm, .sf
 endproc
 


=====================================
dwtest/test_Discriminant.praat
=====================================
@@ -1,5 +1,6 @@
 # test_Discriminant.praat
 # djmw 20110518, 20141030, 20150128
+# ppgb 20200505 added abs in four places
 
 appendInfoLine: "test_Discriminant"
 
@@ -19,14 +20,16 @@ appendInfoLine: tab$ + "Query old and new Discriminant"
 appendInfoLine: tab$ + "Assert old and new Discriminant classify the same"
 @classify: discriminant[1], tableOfReal, 1
 @classify: discriminant[2], tableOfReal, 2
-assert classify.fc[1] = classify.fc[2]   ; 'classify.fc[1]' 'classify.fc[2]'
+assert classify.fc[1] = classify.fc[2]   ; 'fractionCorrect1' 'fractionCorrect2' 'classify.fc[1]' 'classify.fc[2]'
 
 procedure classify: .discriminant, .tableOfReal, .index
 	selectObject: .discriminant, .tableOfReal
 	.classificationTable = To ClassificationTable: "yes", "yes"
 	.confusion = To Confusion: "no"
+	fractionCorrect'.index' = Get fraction correct
+	assert abs (fractionCorrect'.index' - 0.74) < 0.00001   ; 'fractionCorrect1' 'fractionCorrect2' 'classify.fc[1]' 'classify.fc[2]'
 	.fc[.index] = Get fraction correct
-	assert .fc[.index] -0.74 < 0.00001
+	assert abs (.fc[.index] - 0.74) < 0.00001   ; 'fractionCorrect1' 'fractionCorrect2' 'classify.fc[1]' 'classify.fc[2]'
 	removeObject: .classificationTable, .confusion
 endproc
 
@@ -36,9 +39,9 @@ procedure query: .discriminant
 	endfor
 	.numberOfEigenvectors = Get number of eigenvectors
 	.dimension = Get eigenvector dimension
-	assert (.eigenvalue[1] - 21.139) < 0.00001
-	assert (.eigenvalue[2] - 4.35530) < 0.00001
-	assert (.eigenvalue[3] - 0.68289) < 0.00001
+	assert abs (.eigenvalue[1] - 21.139) < 0.00001   ; '.eigenvalue[1]'
+	assert abs (.eigenvalue[2] - 4.35530) < 0.00001   ; '.eigenvalue[2]'
+	assert abs (.eigenvalue[3] - 0.68289) < 0.00001   ; '.eigenvalue[3]'
 	assert .numberOfEigenvectors = 3
 	assert .dimension = 3
 endproc


=====================================
dwtools/Covariance.cpp
=====================================
@@ -371,7 +371,7 @@ double Covariances_getMultivariateCentroidDifference (Covariance me, Covariance
 	
 	Melder_require (df2 >= 1.0, 
 		U"Not enough observations (", N, U") for this test.");
-	Melder_require (p >= N1 && p >= N2,
+	Melder_require (p <= N1 && p <= N2,
 		U"The number of observations should be larger than the number of variables.");
 	double dif = 0.0;
 	for (integer i = 1; i <= p; i ++) {


=====================================
dwtools/Discriminant.cpp
=====================================
@@ -28,7 +28,7 @@
  djmw 20050405 Modified column label: eigenvector->Eigenvector
  djmw 20061212 Changed info to Melder_writeLine<x> format.
  djmw 20071009 wchar
- djmw 20071012 Added: o_CAN_WRITE_AS_ENCODING.h
+ djmw 20071012 Added: oo_CAN_WRITE_AS_ENCODING.h
  djmw 20071201 Melder_warning<n>
  djmw 20081119 Check in TableOfReal_to_Discriminant if TableOfReal_areAllCellsDefined
  djmw 20100107 +Discriminant_TableOfReal_mahalanobis
@@ -500,33 +500,32 @@ autoClassificationTable Discriminant_TableOfReal_to_ClassificationTable (Discrim
 		/*
 			Scale the sscp to become a covariance matrix.
 		*/
-		
 		pool -> data.get()  *=  1.0 / (pool -> numberOfObservations - numberOfGroups);
 		
 		double lnd;
 		autoSSCPList agroups;
 		SSCPList groups;   // ppgb FIXME dit kan niet goed izjn
 		if (poolCovarianceMatrices) {
-			
 			/*
 				Covariance matrix S can be decomposed as S = L.L'. Calculate L^-1.
 				L^-1 will be used later in the Mahalanobis distance calculation:
 				v'.S^-1.v == v'.L^-1'.L^-1.v == (L^-1.v)'.(L^-1.v).
 			*/
-
+			if (Melder_debug == 52)
+				Melder_casual (U"***** before lower Cholesky inverse: \n", pool -> data.all());
 			MATlowerCholeskyInverse_inplace (pool -> data.get(), & lnd);
+			if (Melder_debug == 52)
+				Melder_casual (U"***** after lower Cholesky inverse: \n", pool -> data.all());
 			for (integer j = 1; j <= numberOfGroups; j ++) {
 				ln_determinant [j] = lnd;
 				sscpvec [j] = pool.get();
 			}
 			groups = my groups.get();
 		} else {
-			
 			/*
 				Calculate the inverses of all group covariance matrices.
 				In case of a singular matrix, substitute inverse of pooled.
 			*/
-
 			agroups = Data_copy (my groups.get());
 			groups = agroups.get();
 			integer npool = 0;
@@ -539,12 +538,10 @@ autoClassificationTable Discriminant_TableOfReal_to_ClassificationTable (Discrim
 				try {
 					MATlowerCholeskyInverse_inplace (t -> data.get(), & ln_determinant [j]);
 				} catch (MelderError) {
-					
 					/*
 						Clear the error.
 						Try the alternative: the pooled covariance matrix.
 					*/
-
 					Melder_clearError ();
 					if (npool == 0)
 						MATlowerCholeskyInverse_inplace (pool -> data.get(), & lnd);
@@ -560,7 +557,6 @@ autoClassificationTable Discriminant_TableOfReal_to_ClassificationTable (Discrim
 		/*
 			Labels for columns in ClassificationTable
 		*/
-
 		for (integer j = 1; j <= numberOfGroups; j ++) {
 			conststring32 name = Thing_getName (my groups->at [j]);
 			if (! name)
@@ -572,8 +568,11 @@ autoClassificationTable Discriminant_TableOfReal_to_ClassificationTable (Discrim
 			Normalize the sum of the apriori probabilities to 1.
 			Next take ln (p) because otherwise probabilities might be too small to represent.
 		*/
-
+		if (Melder_debug == 52)
+			Melder_casual (U"***** before normalizing priors: \n", my aprioriProbabilities.all());
 		VECnormalize_inplace (my aprioriProbabilities.get(), 1.0, 1.0);
+		if (Melder_debug == 52)
+			Melder_casual (U"***** after normalizing priors: \n", my aprioriProbabilities.all());
 		const double logg = log (numberOfGroups);
 		for (integer j = 1; j <= numberOfGroups; j ++)
 			log_apriori [j] = ( useAprioriProbabilities ? log (my aprioriProbabilities [j]) : - logg );
@@ -582,12 +581,13 @@ autoClassificationTable Discriminant_TableOfReal_to_ClassificationTable (Discrim
 			Generalized squared distance function:
 			D^2(x) = (x - mu)' S^-1 (x - mu) + ln (determinant(S)) - 2 ln (apriori)
 		*/
-
 		for (integer i = 1; i <= thy numberOfRows; i ++) {
 			double norm = 0.0, pt_max = -1e308;
 			for (integer j = 1; j <= numberOfGroups; j ++) {
 				const SSCP t = groups->at [j];
 				const double md = NUMmahalanobisDistanceSquared (sscpvec [j] -> data.get(), thy data.row (i), t -> centroid.get());
+				if (Melder_debug == 52)
+					Melder_casual (U"***** Mahalanobis distance (squared): ", i, U" ", j, U" ", md);
 				const double pt = log_apriori [j] - 0.5 * (ln_determinant [j] + md);
 				if (pt > pt_max)
 					pt_max = pt;
@@ -595,7 +595,6 @@ autoClassificationTable Discriminant_TableOfReal_to_ClassificationTable (Discrim
 			}
 			for (integer j = 1; j <= numberOfGroups; j ++)
 				norm += log_p [j] = exp (log_p [j] - pt_max);
-
 			for (integer j = 1; j <= numberOfGroups; j ++)
 				his data [i] [j] = log_p [j] / norm;
 		}


=====================================
dwtools/praat_David_init.cpp
=====================================
@@ -1068,12 +1068,14 @@ DO
 		MelderInfo_open ();
 		difference = Covariances_getMultivariateCentroidDifference (me, you, covariancesAreEqual, & prob, & fisher, & df1, & df2);
 		MelderInfo_writeLine (U"Under the assumption that the two covariances are", (covariancesAreEqual ? U" " : U" not "), U"equal:");
-		MelderInfo_writeLine (U"Difference between multivariate means = ", difference);
-		MelderInfo_writeLine (U"Fisher's F = ", fisher);
-		MelderInfo_writeLine (U"Significance from zero = ", prob);
-		MelderInfo_writeLine (U"Degrees of freedom = ", df1, U", ", df2);
-		MelderInfo_writeLine (U"(Number of observations = ", me -> numberOfObservations, U", ", you -> numberOfObservations);
-		MelderInfo_writeLine (U"Dimension of covariance matrices = ", me -> numberOfRows, U")");
+		MelderInfo_writeLine (U"Difference between multivariate means: ", difference);
+		MelderInfo_writeLine (U"Fisher's F: ", fisher);
+		MelderInfo_writeLine (U"Significance from zero: ", prob);
+		MelderInfo_writeLine (U"Degrees of freedom 1: ", df1);
+		MelderInfo_writeLine (U"Degrees of freedom 2: ", df2);
+		MelderInfo_writeLine (U"Number of observations 1: ", me -> numberOfObservations);
+		MelderInfo_writeLine (U"Number of observations 2: ", you -> numberOfObservations);
+		MelderInfo_writeLine (U"Number of variables: ", me -> numberOfRows);
 		MelderInfo_close ();
 	INFO_COUPLE_END
 }
@@ -8232,7 +8234,7 @@ void praat_uvafon_David_init () {
 	praat_addAction2 (classDiscriminant, 1, classStrings, 1, U"Set group labels", nullptr, 0, MODIFY_Discriminant_setGroupLabels);
 
 	praat_addAction2 (classDiscriminant, 1, classTableOfReal, 1, U"To Configuration...", nullptr, 0, NEW1_Discriminant_TableOfReal_to_Configuration);
-	praat_addAction2 (classDiscriminant, 1, classTableOfReal, 1,U"To ClassificationTable...", nullptr, 0, NEW1_Discriminant_TableOfReal_to_ClassificationTable);
+	praat_addAction2 (classDiscriminant, 1, classTableOfReal, 1, U"To ClassificationTable...", nullptr, 0, NEW1_Discriminant_TableOfReal_to_ClassificationTable);
 	praat_addAction2 (classDiscriminant, 1, classTableOfReal, 1, U"To TableOfReal (mahalanobis)...", nullptr, 0, NEW1_Discriminant_TableOfReal_mahalanobis);
 
 	praat_addAction1 (classDTW, 0, U"DTW help", nullptr, 0, HELP_DTW_help);


=====================================
fon/manual_tutorials.cpp
=====================================
@@ -22,8 +22,10 @@
 void manual_tutorials_init (ManPages me);
 void manual_tutorials_init (ManPages me) {
 
-MAN_BEGIN (U"What's new?", U"ppgb", 20200502)
+MAN_BEGIN (U"What's new?", U"ppgb", 20200520)
 INTRO (U"Latest changes in Praat.")
+NORMAL (U"##6.1.15# (20 May 2020)")
+LIST_ITEM (U"• Repaired a bug introduced in 6.0.44 that could cause an incorrect (namely, totally constant) ClassificationTable.")
 NORMAL (U"##6.1.14# (2 May 2020)")
 LIST_ITEM (U"• Repaired a bug in drawing ranges introduced in 6.1.06.")
 NORMAL (U"##6.1.13# (19 April 2020)")


=====================================
melder/MelderArg.h
=====================================
@@ -2,7 +2,7 @@
 #define _melder_arg_h_
 /* MelderArg.h
  *
- * Copyright (C) 1992-2018 Paul Boersma
+ * Copyright (C) 1992-2020 Paul Boersma
  *
  * This code is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -44,6 +44,8 @@ struct MelderArg {
 	*/
 	MelderArg (constVECVU const&         arg) : _arg (Melder_VEC             (arg)) { }
 	MelderArg (constMATVU const&         arg) : _arg (Melder_MAT             (arg)) { }
+	MelderArg (VECVU const&              arg) : _arg (Melder_VEC             (arg)) { }
+	MelderArg (MATVU const&              arg) : _arg (Melder_MAT             (arg)) { }
 	MelderArg (Thing                     arg) : _arg (Thing_messageName      (arg)) { }
 	MelderArg (MelderFile                arg) : _arg (MelderFile_messageName (arg)) { }
 	/*


=====================================
melder/melder_debug.cpp
=====================================
@@ -1,6 +1,6 @@
 /* melder_debug.cpp
  *
- * Copyright (C) 2000-2018 Paul Boersma
+ * Copyright (C) 2000-2020 Paul Boersma
  *
  * This code is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -81,6 +81,7 @@ the behaviour of Praat will temporarily change in the following ways:
 50: compute sum, mean, stdev with first-element offset (80 bits)
 51: compute sum, mean, stdev with two cycles, as in R (80 bits)
 (other numbers than 48-51: compute sum, mean, stdev with simple pairwise algorithm, base case 64 [80 bits])
+52: debug Discriminant_TableOfReal_to_ClassificationTable
 181: read and write native-endian real64
 900: use DG Meta Serif Science instead of Palatino
 1264: Mac: Sound_record_fixedTime uses microphone "FW Solo (1264)"


=====================================
melder/melder_tensorio.cpp
=====================================
@@ -151,6 +151,7 @@ FUNCTION (double, r32)
 FUNCTION (double, r64)
 FUNCTION (dcomplex, c64)
 FUNCTION (dcomplex, c128)
+FUNCTION (bool, eb)
 #undef FUNCTION
 
 /* End of file melder_tensorio.cpp */


=====================================
melder/melder_tensorio.h
=====================================
@@ -45,6 +45,7 @@ FUNCTION (double, r32)
 FUNCTION (double, r64)
 FUNCTION (dcomplex, c64)
 FUNCTION (dcomplex, c128)
+FUNCTION (bool, eb)
 #undef FUNCTION
 
 /*


=====================================
sys/Graphics_text.cpp
=====================================
@@ -1412,11 +1412,11 @@ static void parseTextIntoCellsLinesRuns (Graphics me, conststring32 txt /* catta
 			((my fontStyle & Graphics_BOLD) | charBold | wordBold | globalBold ? Graphics_BOLD : 0);
 		out -> font.string = nullptr;
 		out -> font.integer_ = my fontStyle == Graphics_CODE || wordCode || globalCode ||
-			kar == U'/' || kar == U'|' ? (int) kGraphics_font::COURIER : (int) my font;
+			(kar == U'/' || kar == U'|') && my font != kGraphics_font::PALATINO ? (int) kGraphics_font::COURIER : (int) my font;
 		out -> link = wordLink | globalLink;
 		out -> baseline = charSuperscript | globalSuperscript ? 34 : charSubscript | globalSubscript ? -25 : 0;
 		out -> size = globalSmall || out -> baseline != 0 ? 80 : 100;
-		if (kar == U'/') {
+		if (kar == U'/' && my font != kGraphics_font::PALATINO) {
 			out -> baseline -= out -> size / 12;
 			out -> size += out -> size / 10;
 			if (my screen) out -> font.integer_ = (int) kGraphics_font::PALATINO;


=====================================
sys/praat_version.h
=====================================
@@ -1,5 +1,5 @@
-#define PRAAT_VERSION_STR 6.1.14
-#define PRAAT_VERSION_NUM 6114
+#define PRAAT_VERSION_STR 6.1.15
+#define PRAAT_VERSION_NUM 6115
 #define PRAAT_YEAR 2020
 #define PRAAT_MONTH May
-#define PRAAT_DAY 2
+#define PRAAT_DAY 20


=====================================
test/dwtools/Discriminant2.praat
=====================================
@@ -0,0 +1,59 @@
+# Discriminant2.praat
+# Paul Boersma 2020-05-06
+
+writeInfoLine: "Discriminant2"
+
+table = Create TableOfReal (Pols 1973): "no"
+Formula: "log10(self)"
+
+procedure tryOldFormat
+	oldDiscriminant = Read from file: "pols_50males_format0.Discriminant"
+	Save as text file: "kanweg.Discriminant"
+	plusObject: table
+	classificationTable = To ClassificationTable: "yes", "yes"
+	confusion = To Confusion: "no"
+	fractionCorrect = Get fraction correct
+	appendInfoLine: "Old format correct: ", fractionCorrect
+	removeObject: classificationTable, confusion, oldDiscriminant
+endproc
+
+procedure tryNewFormat
+	newDiscriminant = Read from file: "kanweg.Discriminant"
+	plusObject: table
+	classificationTable = To ClassificationTable: "yes", "yes"
+	confusion = To Confusion: "no"
+	fractionCorrect = Get fraction correct
+	appendInfoLine: "New format correct: ", fractionCorrect
+	removeObject: classificationTable, confusion, newDiscriminant
+endproc
+
+procedure tryComputation
+	selectObject: table
+	computedDiscriminant = To Discriminant
+	plusObject: table
+	classificationTable = To ClassificationTable: "yes", "yes"
+	confusion = To Confusion: "no"
+	fractionCorrect = Get fraction correct
+	appendInfoLine: "Computed correct: ", fractionCorrect
+	removeObject: classificationTable, confusion, computedDiscriminant
+endproc
+
+ at tryComputation
+ at tryOldFormat
+ at tryNewFormat
+
+ at tryComputation
+ at tryOldFormat
+ at tryNewFormat
+
+ at tryNewFormat
+ at tryOldFormat
+ at tryComputation
+
+ at tryNewFormat
+ at tryOldFormat
+ at tryComputation
+
+removeObject: table
+
+appendInfoLine: "Discriminant2 OK"


=====================================
test/dwtools/Discriminant3.praat
=====================================
@@ -0,0 +1,24 @@
+# Discriminant3.praat
+# Paul Boersma 2020-05-14
+
+writeInfoLine: "Discriminant3"
+
+Debug: 0, 52
+
+table = Create TableOfReal (Pols 1973): "no"
+Save as text file: "kanweg.Table"
+Formula: "log10(self)"
+computedDiscriminant = To Discriminant
+Save as text file: "kanweg.Discriminant"
+plusObject: table
+classificationTable = To ClassificationTable: "yes", "yes"
+Save as text file: "kanweg.ClassificationTable"
+confusion = To Confusion: "no"
+Save as text file: "kanweg.Confusion"
+fractionCorrect = Get fraction correct
+appendInfoLine: "Computed correct: ", fractionCorrect
+removeObject: classificationTable, confusion, computedDiscriminant, table
+
+Debug: 0, 0
+
+appendInfoLine: "Discriminant3 OK"


=====================================
test/dwtools/pols_50males_format0.Discriminant
=====================================
@@ -0,0 +1,389 @@
+File type = "ooTextFile"
+Object class = "Discriminant"
+
+numberOfEigenvalues = 3 
+dimension = 3 
+eigenvalues []: 
+    eigenvalues [1] = 21.139001553325844 
+    eigenvalues [2] = 4.355295817120748 
+    eigenvalues [3] = 0.6828853876561858 
+eigenvectors [] []: 
+    eigenvectors [1]:
+        eigenvectors [1] [1] = -0.4968246733001902 
+        eigenvectors [1] [2] = 0.7929232798703864 
+        eigenvectors [1] [3] = -0.35275758849349803 
+    eigenvectors [2]:
+        eigenvectors [2] [1] = 0.8675540972437397 
+        eigenvectors [2] [2] = 0.46440535560029494 
+        eigenvectors [2] [3] = -0.17798189246483306 
+    eigenvectors [3]:
+        eigenvectors [3] [1] = -0.022696527394271637 
+        eigenvectors [3] [2] = 0.39446208680854555 
+        eigenvectors [3] [3] = 0.9186318793264734 
+numberOfGroups = 12 
+groups? <exists> 
+size = 12 
+item []: 
+    item [1]:
+        class = "SSCP" 
+        name = "\as" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.1371322072880503	0.06507801179217895	-0.011074735561417193
+row [2]: "F2"	0.06507801179217895	0.07640416821463858	-0.0019956280460737305
+row [3]: "F3"	-0.011074735561417193	-0.0019956280460737305	0.04095240135530774
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.829041821512515 
+            centroid [2] = 3.0200046382498926 
+            centroid [3] = 3.4171619939756255 
+    item [2]:
+        class = "SSCP" 
+        name = "\ct" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.09067302012389811	0.03716882530705852	0.010895111765093148
+row [2]: "F2"	0.03716882530705852	0.06623815158562135	-0.008040088713702414
+row [3]: "F3"	0.010895111765093148	-0.008040088713702414	0.047514137896571926
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.7164753792040868 
+            centroid [2] = 2.9358032337839095 
+            centroid [3] = 3.428957254834133 
+    item [3]:
+        class = "SSCP" 
+        name = "\ep" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.12325126739884948	0.007977535637010664	0.014713593912108792
+row [2]: "F2"	0.007977535637010664	0.08256097042007325	0.05045318851511985
+row [3]: "F3"	0.014713593912108792	0.05045318851511985	0.07438879619774624
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.763135965884448 
+            centroid [2] = 3.2349692064700704 
+            centroid [3] = 3.391162711212973 
+    item [4]:
+        class = "SSCP" 
+        name = "\ic" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.17647612299370122	-0.02063302628174945	-0.005697855587989537
+row [2]: "F2"	-0.02063302628174945	0.07460647712948608	0.049614643436171904
+row [3]: "F3"	-0.005697855587989537	0.049614643436171904	0.05109063361148622
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.585018518814506 
+            centroid [2] = 3.3000373347537915 
+            centroid [3] = 3.408994217433088 
+    item [5]:
+        class = "SSCP" 
+        name = "\o/" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.09908822912163297	0.015541819671631943	0.013775375020258235
+row [2]: "F2"	0.015541819671631943	0.056684926460000895	0.025520496405190735
+row [3]: "F3"	0.013775375020258235	0.025520496405190735	0.03527931367299332
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.643922974695668 
+            centroid [2] = 3.174039321160438 
+            centroid [3] = 3.353368431962918 
+    item [6]:
+        class = "SSCP" 
+        name = "\yc" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.11604848853561119	0.004638097797573026	0.014234726305389083
+row [2]: "F2"	0.004638097797573026	0.08910829880242509	0.05772847540761414
+row [3]: "F3"	0.014234726305389083	0.05772847540761414	0.059535232541858635
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.638814682287954 
+            centroid [2] = 3.1732312476628675 
+            centroid [3] = 3.3702977370451324 
+    item [7]:
+        class = "SSCP" 
+        name = "a" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.13373820303933756	0.043918895913021325	0.009483926777506332
+row [2]: "F2"	0.043918895913021325	0.07185378889695229	0.017946300429884602
+row [3]: "F3"	0.009483926777506332	0.017946300429884602	0.056974025547855855
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.8971834611872826 
+            centroid [2] = 3.1126947721089406 
+            centroid [3] = 3.407776548856642 
+    item [8]:
+        class = "SSCP" 
+        name = "e" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.16197482567602983	0.002298374666522604	0.012604046776579057
+row [2]: "F2"	0.002298374666522604	0.061562730940411266	0.04116004354455001
+row [3]: "F3"	0.012604046776579057	0.04116004354455001	0.043223685110515324
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.606165152281404 
+            centroid [2] = 3.3033427054078994 
+            centroid [3] = 3.406164846453073 
+    item [9]:
+        class = "SSCP" 
+        name = "i" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.15428266876841684	0.013276386826015094	0.012320309785365528
+row [2]: "F2"	0.013276386826015094	0.055510083642718484	0.03784952638535774
+row [3]: "F3"	0.012320309785365528	0.03784952638535774	0.05006027585038744
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.464795953065796 
+            centroid [2] = 3.3427245505456598 
+            centroid [3] = 3.4407579626513725 
+    item [10]:
+        class = "SSCP" 
+        name = "o" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.06861045715394555	0.035093223137004324	-0.0023606822102749565
+row [2]: "F2"	0.035093223137004324	0.09021650740495563	0.006512208041729222
+row [3]: "F3"	-0.0023606822102749565	0.006512208041729222	0.07700471610942107
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.6855835642500985 
+            centroid [2] = 2.9572369144661237 
+            centroid [3] = 3.392825472161562 
+    item [11]:
+        class = "SSCP" 
+        name = "u" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.1699999779614091	0.021885675183543243	0.0161142422435738
+row [2]: "F2"	0.021885675183543243	0.1039591160562141	-0.00200153380888963
+row [3]: "F3"	0.0161142422435738	-0.00200153380888963	0.07540959694619889
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.5268057305429337 
+            centroid [2] = 2.9058781887555085 
+            centroid [3] = 3.3643364436087393 
+    item [12]:
+        class = "SSCP" 
+        name = "y" 
+        numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+        numberOfRows = 3 
+row [1]: "F1"	0.18909356327139404	0.014010234547664086	0.020273089008566562
+row [2]: "F2"	0.014010234547664086	0.0734940861707178	0.054864607563280654
+row [3]: "F3"	0.020273089008566562	0.054864607563280654	0.08826214244880358
+        numberOfObservations = 50 
+        centroid []: 
+            centroid [1] = 2.4797538722099293 
+            centroid [2] = 3.236360871766193 
+            centroid [3] = 3.341855942791658 
+total? <exists> 
+numberOfColumns = 3 
+columnLabels []: 
+"F1"	"F2"	"F3"	
+numberOfRows = 3 
+row [1]: "F1"	11.43514736353313	-3.8028772011835716	0.7254293171774202
+row [2]: "F2"	-3.8028772011835716	13.851776134183913	0.4932432271899076
+row [3]: "F3"	0.7254293171774202	0.4932432271899076	1.2160403917859772
+numberOfObservations = 600 
+centroid []: 
+    centroid [1] = 2.6530580896613785 
+    centroid [2] = 3.141360248760944 
+    centroid [3] = 3.3936382969155714 
+aprioriProbabilities []: 
+    aprioriProbabilities [1] = 0.08333333333333333 
+    aprioriProbabilities [2] = 0.08333333333333333 
+    aprioriProbabilities [3] = 0.08333333333333333 
+    aprioriProbabilities [4] = 0.08333333333333333 
+    aprioriProbabilities [5] = 0.08333333333333333 
+    aprioriProbabilities [6] = 0.08333333333333333 
+    aprioriProbabilities [7] = 0.08333333333333333 
+    aprioriProbabilities [8] = 0.08333333333333333 
+    aprioriProbabilities [9] = 0.08333333333333333 
+    aprioriProbabilities [10] = 0.08333333333333333 
+    aprioriProbabilities [11] = 0.08333333333333333 
+    aprioriProbabilities [12] = 0.08333333333333333 
+costs [] []: 
+    costs [1]:
+        costs [1] [1] = 0 
+        costs [1] [2] = 1 
+        costs [1] [3] = 1 
+        costs [1] [4] = 1 
+        costs [1] [5] = 1 
+        costs [1] [6] = 1 
+        costs [1] [7] = 1 
+        costs [1] [8] = 1 
+        costs [1] [9] = 1 
+        costs [1] [10] = 1 
+        costs [1] [11] = 1 
+        costs [1] [12] = 1 
+    costs [2]:
+        costs [2] [1] = 1 
+        costs [2] [2] = 0 
+        costs [2] [3] = 1 
+        costs [2] [4] = 1 
+        costs [2] [5] = 1 
+        costs [2] [6] = 1 
+        costs [2] [7] = 1 
+        costs [2] [8] = 1 
+        costs [2] [9] = 1 
+        costs [2] [10] = 1 
+        costs [2] [11] = 1 
+        costs [2] [12] = 1 
+    costs [3]:
+        costs [3] [1] = 1 
+        costs [3] [2] = 1 
+        costs [3] [3] = 0 
+        costs [3] [4] = 1 
+        costs [3] [5] = 1 
+        costs [3] [6] = 1 
+        costs [3] [7] = 1 
+        costs [3] [8] = 1 
+        costs [3] [9] = 1 
+        costs [3] [10] = 1 
+        costs [3] [11] = 1 
+        costs [3] [12] = 1 
+    costs [4]:
+        costs [4] [1] = 1 
+        costs [4] [2] = 1 
+        costs [4] [3] = 1 
+        costs [4] [4] = 0 
+        costs [4] [5] = 1 
+        costs [4] [6] = 1 
+        costs [4] [7] = 1 
+        costs [4] [8] = 1 
+        costs [4] [9] = 1 
+        costs [4] [10] = 1 
+        costs [4] [11] = 1 
+        costs [4] [12] = 1 
+    costs [5]:
+        costs [5] [1] = 1 
+        costs [5] [2] = 1 
+        costs [5] [3] = 1 
+        costs [5] [4] = 1 
+        costs [5] [5] = 0 
+        costs [5] [6] = 1 
+        costs [5] [7] = 1 
+        costs [5] [8] = 1 
+        costs [5] [9] = 1 
+        costs [5] [10] = 1 
+        costs [5] [11] = 1 
+        costs [5] [12] = 1 
+    costs [6]:
+        costs [6] [1] = 1 
+        costs [6] [2] = 1 
+        costs [6] [3] = 1 
+        costs [6] [4] = 1 
+        costs [6] [5] = 1 
+        costs [6] [6] = 0 
+        costs [6] [7] = 1 
+        costs [6] [8] = 1 
+        costs [6] [9] = 1 
+        costs [6] [10] = 1 
+        costs [6] [11] = 1 
+        costs [6] [12] = 1 
+    costs [7]:
+        costs [7] [1] = 1 
+        costs [7] [2] = 1 
+        costs [7] [3] = 1 
+        costs [7] [4] = 1 
+        costs [7] [5] = 1 
+        costs [7] [6] = 1 
+        costs [7] [7] = 0 
+        costs [7] [8] = 1 
+        costs [7] [9] = 1 
+        costs [7] [10] = 1 
+        costs [7] [11] = 1 
+        costs [7] [12] = 1 
+    costs [8]:
+        costs [8] [1] = 1 
+        costs [8] [2] = 1 
+        costs [8] [3] = 1 
+        costs [8] [4] = 1 
+        costs [8] [5] = 1 
+        costs [8] [6] = 1 
+        costs [8] [7] = 1 
+        costs [8] [8] = 0 
+        costs [8] [9] = 1 
+        costs [8] [10] = 1 
+        costs [8] [11] = 1 
+        costs [8] [12] = 1 
+    costs [9]:
+        costs [9] [1] = 1 
+        costs [9] [2] = 1 
+        costs [9] [3] = 1 
+        costs [9] [4] = 1 
+        costs [9] [5] = 1 
+        costs [9] [6] = 1 
+        costs [9] [7] = 1 
+        costs [9] [8] = 1 
+        costs [9] [9] = 0 
+        costs [9] [10] = 1 
+        costs [9] [11] = 1 
+        costs [9] [12] = 1 
+    costs [10]:
+        costs [10] [1] = 1 
+        costs [10] [2] = 1 
+        costs [10] [3] = 1 
+        costs [10] [4] = 1 
+        costs [10] [5] = 1 
+        costs [10] [6] = 1 
+        costs [10] [7] = 1 
+        costs [10] [8] = 1 
+        costs [10] [9] = 1 
+        costs [10] [10] = 0 
+        costs [10] [11] = 1 
+        costs [10] [12] = 1 
+    costs [11]:
+        costs [11] [1] = 1 
+        costs [11] [2] = 1 
+        costs [11] [3] = 1 
+        costs [11] [4] = 1 
+        costs [11] [5] = 1 
+        costs [11] [6] = 1 
+        costs [11] [7] = 1 
+        costs [11] [8] = 1 
+        costs [11] [9] = 1 
+        costs [11] [10] = 1 
+        costs [11] [11] = 0 
+        costs [11] [12] = 1 
+    costs [12]:
+        costs [12] [1] = 1 
+        costs [12] [2] = 1 
+        costs [12] [3] = 1 
+        costs [12] [4] = 1 
+        costs [12] [5] = 1 
+        costs [12] [6] = 1 
+        costs [12] [7] = 1 
+        costs [12] [8] = 1 
+        costs [12] [9] = 1 
+        costs [12] [10] = 1 
+        costs [12] [11] = 1 
+        costs [12] [12] = 0 



View it on GitLab: https://salsa.debian.org/med-team/praat/-/compare/c6d755f037d97abdea49c8c1bfdc0b4dc274ff6e...50946a466990f4a2ab58dfee0a62fdf8c3e7bf77

-- 
View it on GitLab: https://salsa.debian.org/med-team/praat/-/compare/c6d755f037d97abdea49c8c1bfdc0b4dc274ff6e...50946a466990f4a2ab58dfee0a62fdf8c3e7bf77
You're receiving this email because of your account on salsa.debian.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20200521/cbfcc05f/attachment-0001.html>


More information about the debian-med-commit mailing list