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)