The unified diff between revisions [6566c817..] and [8f58bb18..] is displayed below. It can also be downloaded as a raw diff.
#
#
# add_file "test.xml"
# content [80db91d1df5e612d00c80a534d723e949d7e55cf]
#
# patch "fritz.py"
# from [28c80476a119ac744f16107031bb10ed60e3e780]
# to [e53a6d5f470a753ab5d51ac45f98c501ff0bfe1c]
#
# patch "mk2.py"
# from [a7028cf9ec6b8a7ed3584edd7c2adc04e5ffbe51]
# to [b5da43536911ecf9293ffb03ec84abf7eefda811]
#
============================================================
--- test.xml 80db91d1df5e612d00c80a534d723e949d7e55cf
+++ test.xml 80db91d1df5e612d00c80a534d723e949d7e55cf
@@ -0,0 +1,289 @@
+<project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project><project default="all">
+
+
+ <target name="all">
+ <ant dir="tools" />
+ <ant dir="forta-util" />
+ <ant dir="forta-sso-agent-support" />
+ <ant dir="forta-sso-agent-core" />
+
+ <ant dir="forta-sso-agent-all" />
+ <ant dir="forta-sso-dao" />
+ <ant dir="forta-test-app" />
+ <ant dir="forta-sso-server" />
+ <ant dir="forta-console" />
+ <!--<ant dir="forta-access-manager" />-->
+ </target>
+
+
+ <target name="clean">
+ <ant dir="forta-util" target="clean" />
+ <ant dir="forta-sso-agent-core" target="clean" />
+ <ant dir="forta-sso-agent-support" target="clean" />
+ <ant dir="forta-sso-agent-all" target="clean" />
+ <ant dir="forta-sso-dao" target="clean" />
+ <ant dir="forta-sso-server" target="clean" />
+ <ant dir="forta-console" target="clean" />
+ <delete dir="${basedir}" defaultexcludes="no">
+ <include name="**/*~" />
+ </delete>
+ <!-- <ant dir="forta-access-manager" target="clean" />-->
+</target>
+
+</project>
============================================================
--- fritz.py 28c80476a119ac744f16107031bb10ed60e3e780
+++ fritz.py e53a6d5f470a753ab5d51ac45f98c501ff0bfe1c
@@ -4,16 +4,10 @@ import cPickle
import random
random.seed()
import cPickle
+import getopt
import sys
-
-def debug_fritzable(chain):
- def fritzable(s):
- return len (s.state) > 1
- print chain.states.values()
- fritzable_states = filter (fritzable, chain.states.values())
- print map (lambda s : ''.join (s.state), fritzable_states)
-def fritz(chain, max_bytes):
+def fritz_gen(fd, chain, max_bytes):
def starting_point():
# pick a starting point
total = sum (map (lambda s : s.total, chain.states.values ()))
@@ -38,7 +32,7 @@ def fritz(chain, max_bytes):
to_out = ''.join (state.state)
if out_bytes + len(to_out) >= max_bytes:
to_out = to_out[:max_bytes - out_bytes]
- sys.stdout.write (to_out)
+ fd.write (to_out)
out_bytes += len(to_out)
cycle_count = cycle_counts[id(state)] = cycle_counts.setdefault(id(state), 0) + 1
if cycle_count > 5:
@@ -46,8 +40,45 @@ def fritz(chain, max_bytes):
cycle_count = {}
else:
state = chain.random_next (state)
- sys.stdout.write('\n')
+ fd.write('\n')
+def log(s):
+ print >>sys.stderr, s
+
+def usage():
+ print """\
+Usage: %s [ --output=<file> ... ] [ --fritzfrom=<file> ] model.mk
+ --output specifies a file that should be generated from the model
+ --fritzfrom specifies a file that should be used as a basis for fritzing
+ (output is written to stdout)
+"""
+
+def get_fritzable(chain):
+ def fritzable(s):
+ return len (s.state) > 1
+ log (chain.states.values())
+ fritzable_states = filter (fritzable, chain.states.values())
+ #log ("%s" % repr(map (lambda s : ''.join (s.state), fritzable_states)))
+ return fritzable_states
+
+def fritz_file(fd, chain):
+ find_states = get_fritzable(chain)
+
+
if __name__ == '__main__':
+ try:
+ optlist, args = getopt.getopt (sys.argv[1:], '', ['output=', 'fritzfile='])
+ except getopt.GetoptError:
+ usage()
+ sys.exit(1)
+ if len(args) != 1:
+ usage()
+ sys.exit(2)
+ log("Loading %s" % args[0])
+ chain = cPickle.load (open (args[0], 'rb'))
+ for o, a in optlist:
+ if o == '--output':
+ log ("Writing fritz to %s." % (a))
+ fritz_gen (open (a, 'wb'), chain, 1024)
+ elif o == "--fritzfile":
+ log ("Fritzing %s." % (a))
- chain = cPickle.load (sys.stdin)
- fritz(chain, 1024)
============================================================
--- mk2.py a7028cf9ec6b8a7ed3584edd7c2adc04e5ffbe51
+++ mk2.py b5da43536911ecf9293ffb03ec84abf7eefda811
@@ -86,19 +86,15 @@ class MarkovChain(object):
self.clear()
self.update(self.__upchunk_gen (stash_copy, to_upchunk))
del stash_copy
-
- def entropy_sort(self):
+
+ def __select_upchunk(self):
q = []
keys = self.states.keys()
if len(keys) == 0:
- return q
+ return None
for idx, tokens in enumerate(keys):
state = self.states[tokens]
heapq.heappush(q, state)
- return q
-
- def __select_upchunk(self):
- q = self.entropy_sort ()
cutoff = math.log (len (keys), 2) / 4
candidate = heapq.heappop(q)
print >>sys.stderr, "best entropy vs. cutoff is: %s :: %.2f vs. cutoff %.2f" % (candidate.state, candidate.entropy(), cutoff)