Subversion Repositories Remote Hare Voting

Rev

Rev 38 | Rev 45 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 38 Rev 39
Line 1... Line 1...
1
#!/p/python-2.5.1/bin/python
1
#!/p/python-2.5.1/bin/python
2
 
2
 
-
 
3
import optparse
3
import cgi
4
import cgi
4
import string
5
import string
5
import sys
6
import sys
6
 
7
 
7
import revision
8
import revision
Line 54... Line 55...
54
    results = tally.dotally(nWinners, ballots)
55
    results = tally.dotally(nWinners, ballots)
55
    print "\nFINAL RESULTS"
56
    print "\nFINAL RESULTS"
56
    for winner in results:
57
    for winner in results:
57
        print "\t%s" % winner
58
        print "\t%s" % winner
58
 
59
 
-
 
60
def domany(nTimes, nWinners, ballots):
-
 
61
    print "RUNNING %d TIMES" % (nTimes)
-
 
62
    tally.fTrace = 0
-
 
63
    summary = {}
-
 
64
    for i in range(nTimes):
-
 
65
        results = str(tally.dotally(nWinners, ballots))
-
 
66
        # print "Run %2d: %s" % (i+1, results)
-
 
67
        if not summary.has_key(results):
-
 
68
            summary[results] = 0
-
 
69
        summary[results] = summary[results] + 1
-
 
70
    print "\nSUMMARY"
-
 
71
    l = summary.items()
-
 
72
    l.sort(lambda x,y: cmp(y[1], x[1]))
-
 
73
    for pair in l:
-
 
74
        print "%2d %s" % (pair[1], pair[0])
-
 
75
 
59
def doweb(argv):
76
def doweb():
60
    emitPreHTML(formaction)
77
    emitPreHTML(formaction)
61
    form = cgi.FieldStorage()
78
    form = cgi.FieldStorage()
62
 
79
 
63
    if not form:
80
    if not form:
64
        emitHTML("Enter file name and press a button to see results.")
81
        emitHTML("Enter file name and press a button to see results.")
Line 79... Line 96...
79
 
96
 
80
        nWinners, ballots = parseinput.parsestring(contents)
97
        nWinners, ballots = parseinput.parsestring(contents)
81
        if form.has_key("run1"):
98
        if form.has_key("run1"):
82
            doone(nWinners, ballots)
99
            doone(nWinners, ballots)
83
        elif form.has_key("run1000"):
100
        elif form.has_key("run1000"):
84
            print "RUNNING 1000 TIMES"
-
 
85
            tally.fTrace = 0
-
 
86
            summary = {}
-
 
87
            for i in range(1000):
-
 
88
                results = str(tally.dotally(nWinners, ballots))
101
            domany(1000, nWinners, ballots)
89
                # print "Run %2d: %s" % (i+1, results)
-
 
90
                if not summary.has_key(results):
-
 
91
                    summary[results] = 0
-
 
92
                summary[results] = summary[results] + 1
-
 
93
            print "\nSUMMARY"
-
 
94
            l = summary.items()
-
 
95
            l.sort(lambda x,y: cmp(y[1], x[1]))
-
 
96
            for pair in l:
-
 
97
                print "%2d %s" % (pair[1], pair[0])
-
 
98
        else:
102
        else:
99
            print "UNEXPECTED SUBMIT BUTTON: %s" % form
103
            print "UNEXPECTED SUBMIT BUTTON: %s" % form
100
                
104
                
101
    emitPostHTML()
105
    emitPostHTML()
102
    return
106
    return
103
 
107
 
104
def main(argv=[__name__]):
108
def main():
-
 
109
    usage = "usage: %prog [options] filename.csv"
-
 
110
    parser = optparse.OptionParser(usage)
-
 
111
    parser.add_option("-m", "--multi", dest="multi", action="store_true",
-
 
112
                      help="run process multiple (1000) times")
-
 
113
    (options, args) = parser.parse_args()
-
 
114
 
105
    if len(argv) == 1:
115
    if len(args) == 0:
106
        doweb(argv)
116
        doweb()
107
    else:
117
    else:
108
        nWinners, ballots = parseinput.parsefile(argv[1])
118
        nWinners, ballots = parseinput.parsefile(args[0])
-
 
119
        if options.multi:
-
 
120
            domany(1000, nWinners, ballots)
-
 
121
        else:
109
        doone(nWinners, ballots)
122
            doone(nWinners, ballots)
110
 
123
 
111
if __name__=='__main__':
124
if __name__=='__main__':
112
    main(sys.argv)
125
    main()