changeset 674:01b89182891a

corrected bug for intersection of lines (thanks to Paul for finding)
author Nicolas Saunier <nicolas.saunier@polymtl.ca>
date Tue, 26 May 2015 18:16:51 +0200
parents 5505f9dbb28e
children ab3fdff42624
files python/moving.py python/tests/moving.txt python/utils.py
diffstat 3 files changed, 21 insertions(+), 8 deletions(-) [+]
line wrap: on
line diff
--- a/python/moving.py	Tue May 26 15:02:47 2015 +0200
+++ b/python/moving.py	Tue May 26 18:16:51 2015 +0200
@@ -536,8 +536,8 @@
     dp12 = p2-p1
     dp34 = p4-p3
     #det = (p4.y-p3.y)*(p2.x-p1.x)-(p4.x-p3.x)*(p2.y-p1.y)
-    det = dp34.y*dp12.x-dp34.x*dp12.y
-    if det == 0:
+    det = float(dp34.y*dp12.x-dp34.x*dp12.y)
+    if det == 0.:
         return None
     else:
         ua = (dp34.x*(p1.y-p3.y)-dp34.y*(p1.x-p3.x))/det
--- a/python/tests/moving.txt	Tue May 26 15:02:47 2015 +0200
+++ b/python/tests/moving.txt	Tue May 26 18:16:51 2015 +0200
@@ -66,6 +66,8 @@
 >>> segmentIntersection(Point(0,1), Point(0,3), Point(1,0), Point(3,1))
 >>> segmentIntersection(Point(0.,0.), Point(2.,2.), Point(0.,2.), Point(2.,0.))
 (1.000000,1.000000)
+>>> segmentIntersection(Point(0,0), Point(4,4), Point(0,4), Point(4,0))
+(2.000000,2.000000)
 >>> segmentIntersection(Point(0,1), Point(1,2), Point(2,0), Point(3,2))
 
 >>> left = Trajectory.fromPointList([(92.291666666666686, 102.99239033124439), (56.774193548387103, 69.688898836168306)])
--- a/python/utils.py	Tue May 26 15:02:47 2015 +0200
+++ b/python/utils.py	Tue May 26 18:16:51 2015 +0200
@@ -318,7 +318,10 @@
                     newVariables.append(newVariable)
     return newVariables
 
-def kruskalWallis(data, dependentVariable, independentVariable, plotFigure = False, figureFilenamePrefix = None, figureFileType = 'pdf'):
+def frenchify(s, displayNames):
+    return s
+
+def kruskalWallis(data, dependentVariable, independentVariable, plotFigure = False, filenamePrefix = None, figureFileType = 'pdf', saveLatex = False):
     '''Studies the influence of (nominal) independent variable over the dependent variable
 
     Makes tests if the conditional distributions are normal
@@ -327,6 +330,9 @@
     tmp = data[data[independentVariable].notnull()]
     independentVariableValues = sorted(tmp[independentVariable].unique().tolist())
     if len(independentVariableValues) >= 2:
+        if saveLatex:
+            from storage import openCheck
+            out = openCheck(filenamePrefix+'-{}-{}.tex'.format(dependentVariable, independentVariable), 'w')
         for x in independentVariableValues:
             print('Shapiro-Wilk normality test for {} when {}={}: {} obs'.format(dependentVariable,independentVariable, x, len(tmp.loc[tmp[independentVariable] == x, dependentVariable])))
             if len(tmp.loc[tmp[independentVariable] == x, dependentVariable]) >= 3:
@@ -338,11 +344,15 @@
             #plt.ylim(ymax = q75+1.5*(q75-q25))
             plt.xticks(range(1,len(independentVariableValues)+1), independentVariableValues)
             plt.title('{} vs {}'.format(dependentVariable, independentVariable))
-            if figureFilenamePrefix is not None:
-                plt.savefig(figureFilenamePrefix+'{}-{}.{}'.format(dependentVariable, independentVariable, figureFileType))
-        #else:
-        # TODO formatter le tableau (html?)
-        print tmp.groupby([independentVariable])[dependentVariable].describe().unstack().sort(['50%'], ascending = False)
+            if filenamePrefix is not None:
+                plt.savefig(filenamePrefix+'-{}-{}.{}'.format(dependentVariable, independentVariable, figureFileType))
+        table = tmp.groupby([independentVariable])[dependentVariable].describe().unstack().sort(['50%'], ascending = False)
+        if saveLatex:
+            out.write('\begin{table}[htp!]')
+            out.write(frenchify(table.to_latex(), displayNames))
+            out.write('\end{table}[htp!]')
+        else:
+            print table
         return kruskal(*[tmp.loc[tmp[independentVariable] == x, dependentVariable] for x in independentVariableValues])
     else:
         return None
@@ -444,6 +454,7 @@
     experiments = generateExperiments(independentVariables)
     nModels = len(experiments)
     print("Running {} models with {} processes".format(nModels, nProcesses))
+    print("IndependentVariables: {}".format(independentVariables))
     if nProcesses == 1:
         return runModels(experiments, data, dependentVariable, independentVariables, regressionType)
     else: