Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Python: align style with PEP-008
authorGabriel Corona <gabriel.corona@loria.fr>
Mon, 22 Feb 2016 15:46:21 +0000 (16:46 +0100)
committerGabriel Corona <gabriel.corona@loria.fr>
Mon, 22 Feb 2016 15:48:43 +0000 (16:48 +0100)
With autopep8.

.editorconfig
examples/java/bittorrent/generate.py
examples/msg/bittorrent/generate.py
examples/msg/chord/generate.py
examples/msg/kademlia/generate.py
src/simix/simcalls.py
tools/internal/generate-multi-jar.py
tools/normalize-pointers.py
tools/platf_route_rulebased2full.py
tools/sg_xml_unit_converter.py

index e70572d..6e09c62 100644 (file)
@@ -11,5 +11,12 @@ charset = utf-8
 indent_style = space
 indent_size = 2
 
 indent_style = space
 indent_size = 2
 
+# PEP8 https://www.python.org/dev/peps/pep-0008/ http://pep8.org/
+[*.py]
+trim_trailing_whitespace = true
+charset = utf-8
+indent_style = space
+indent_size = 4
+
 [Makefile]
 indent_style = tab
 [Makefile]
 indent_style = tab
index 155957f..d416c5f 100755 (executable)
 # Usage: python generate.py nb_nodes nb_bits end_date percentage
 # Example: python generate.py 10000 5000
 
 # Usage: python generate.py nb_nodes nb_bits end_date percentage
 # Example: python generate.py 10000 5000
 
-import sys, random
+import sys
+import random
 
 if len(sys.argv) != 4:
 
 if len(sys.argv) != 4:
-       print("Usage: python generate.py nb_nodes end_date seed_percentage > deployment_file.xml")
-       sys.exit(1)
+    print(
+        "Usage: python generate.py nb_nodes end_date seed_percentage > deployment_file.xml")
+    sys.exit(1)
 
 nb_nodes = int(sys.argv[1])
 end_date = int(sys.argv[2])
 
 nb_nodes = int(sys.argv[1])
 end_date = int(sys.argv[2])
-seed_percentage = int(sys.argv[3]);
+seed_percentage = int(sys.argv[3])
 
 nb_bits = 24
 max_id = 2 ** nb_bits - 1
 all_ids = [42]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
 
 nb_bits = 24
 max_id = 2 ** nb_bits - 1
 all_ids = [42]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
-"<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n"
-"<platform version=\"3\">\n"
-"  <process host=\"c-0.me\" function=\"bittorrent.Tracker\"><argument value=\"%d\"/></process>\n" % end_date)
+                 "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n"
+                 "<platform version=\"3\">\n"
+                 "  <process host=\"c-0.me\" function=\"bittorrent.Tracker\"><argument value=\"%d\"/></process>\n" % end_date)
 
 for i in range(1, nb_nodes):
 
 
 for i in range(1, nb_nodes):
 
-  ok = False
-  while not ok:
-    my_id = random.randint(0, max_id)
-    ok = not my_id in all_ids
-  start_date = i * 10
-  line = "  <process host=\"c-%d.me\" function=\"bittorrent.Peer\"><argument value=\"%d\" /><argument value=\"%d\" />" % (i, my_id, end_date)
-  if random.randint(0,100) < seed_percentage:
-    line += "<argument value=\"1\" />"
-  line += "</process>\n";
-  sys.stdout.write(line)
-  all_ids.append(my_id)
+    ok = False
+    while not ok:
+        my_id = random.randint(0, max_id)
+        ok = not my_id in all_ids
+    start_date = i * 10
+    line = "  <process host=\"c-%d.me\" function=\"bittorrent.Peer\"><argument value=\"%d\" /><argument value=\"%d\" />" % (
+        i, my_id, end_date)
+    if random.randint(0, 100) < seed_percentage:
+        line += "<argument value=\"1\" />"
+    line += "</process>\n"
+    sys.stdout.write(line)
+    all_ids.append(my_id)
 sys.stdout.write("</platform>")
 sys.stdout.write("</platform>")
-
index 564a5fa..f1d2b54 100755 (executable)
 # Usage: python generate.py nb_nodes nb_bits end_date percentage
 # Example: python generate.py 10000 5000
 
 # Usage: python generate.py nb_nodes nb_bits end_date percentage
 # Example: python generate.py 10000 5000
 
-import sys, random
+import sys
+import random
 
 if len(sys.argv) != 4:
 
 if len(sys.argv) != 4:
-       print("Usage: python generate.py nb_nodes end_date seed_percentage > deployment_file.xml")
-       sys.exit(1)
+    print(
+        "Usage: python generate.py nb_nodes end_date seed_percentage > deployment_file.xml")
+    sys.exit(1)
 
 nb_nodes = int(sys.argv[1])
 end_date = int(sys.argv[2])
 
 nb_nodes = int(sys.argv[1])
 end_date = int(sys.argv[2])
-seed_percentage = int(sys.argv[3]);
+seed_percentage = int(sys.argv[3])
 
 nb_bits = 24
 max_id = 2 ** nb_bits - 1
 all_ids = [42]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
 
 nb_bits = 24
 max_id = 2 ** nb_bits - 1
 all_ids = [42]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
-"<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n"
-"<platform version=\"4\">\n"
-"  <process host=\"node-0.acme.org\" function=\"tracker\">\n"
-"    <argument value=\"%d\"/>\n  </process>\n" % end_date)
+                 "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n"
+                 "<platform version=\"4\">\n"
+                 "  <process host=\"node-0.acme.org\" function=\"tracker\">\n"
+                 "    <argument value=\"%d\"/>\n  </process>\n" % end_date)
 
 for i in range(1, nb_nodes):
 
 
 for i in range(1, nb_nodes):
 
-  ok = False
-  while not ok:
-    my_id = random.randint(0, max_id)
-    ok = not my_id in all_ids
-  start_date = i * 10
-  line = "  <process host=\"node-%d.acme.org\" function=\"peer\">\n" % i
-  line += "    <argument value=\"%d\"/>\n    <argument value=\"%d\"/>\n" % (my_id, end_date)
-  if random.randint(0,100) < seed_percentage:
-    line += "    <argument value=\"1\"/>\n"
-  line += "  </process>\n";
-  sys.stdout.write(line)
-  all_ids.append(my_id)
+    ok = False
+    while not ok:
+        my_id = random.randint(0, max_id)
+        ok = not my_id in all_ids
+    start_date = i * 10
+    line = "  <process host=\"node-%d.acme.org\" function=\"peer\">\n" % i
+    line += "    <argument value=\"%d\"/>\n    <argument value=\"%d\"/>\n" % (
+        my_id, end_date)
+    if random.randint(0, 100) < seed_percentage:
+        line += "    <argument value=\"1\"/>\n"
+    line += "  </process>\n"
+    sys.stdout.write(line)
+    all_ids.append(my_id)
 sys.stdout.write("</platform>")
 sys.stdout.write("</platform>")
-
index 3b707ac..3817771 100755 (executable)
 # Usage: python generate.py nb_nodes nb_bits end_date
 # Example: python generate.py 100000 32 1000
 
 # Usage: python generate.py nb_nodes nb_bits end_date
 # Example: python generate.py 100000 32 1000
 
-import sys, random
+import sys
+import random
 
 if len(sys.argv) != 4:
 
 if len(sys.argv) != 4:
-       print("Usage: python generate.py nb_nodes nb_bits end_date > deployment_file.xml")
-       sys.exit(1)
+    print(
+        "Usage: python generate.py nb_nodes nb_bits end_date > deployment_file.xml")
+    sys.exit(1)
 
 nb_nodes = int(sys.argv[1])
 nb_bits = int(sys.argv[2])
 
 nb_nodes = int(sys.argv[1])
 nb_bits = int(sys.argv[2])
@@ -25,22 +27,22 @@ max_id = 2 ** nb_bits - 1
 all_ids = [42]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
 all_ids = [42]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
-"<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n"
-"<platform version=\"3\">\n"
-"  <process host=\"node-0.acme.org\" function=\"node\"><argument value=\"42\"/><argument value=\"%d\"/></process>\n" % end_date)
+                 "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid.dtd\">\n"
+                 "<platform version=\"3\">\n"
+                 "  <process host=\"node-0.acme.org\" function=\"node\"><argument value=\"42\"/><argument value=\"%d\"/></process>\n" % end_date)
 
 for i in range(1, nb_nodes):
 
 
 for i in range(1, nb_nodes):
 
-       ok = False
-       while not ok:
-               my_id = random.randint(0, max_id)
-               ok = not my_id in all_ids
+    ok = False
+    while not ok:
+        my_id = random.randint(0, max_id)
+        ok = not my_id in all_ids
 
 
-       known_id = all_ids[random.randint(0, len(all_ids) - 1)]
-       start_date = i * 10
-       line = "  <process host=\"node-%d.acme.org\" function=\"node\"><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /></process>\n" % (i, my_id, known_id, start_date, end_date)
-       sys.stdout.write(line)
-       all_ids.append(my_id)
+    known_id = all_ids[random.randint(0, len(all_ids) - 1)]
+    start_date = i * 10
+    line = "  <process host=\"node-%d.acme.org\" function=\"node\"><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /><argument value=\"%d\" /></process>\n" % (
+        i, my_id, known_id, start_date, end_date)
+    sys.stdout.write(line)
+    all_ids.append(my_id)
 
 sys.stdout.write("</platform>")
 
 sys.stdout.write("</platform>")
-
index c1c7a72..d75dbba 100755 (executable)
@@ -6,11 +6,13 @@
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
-import sys, random
+import sys
+import random
 
 if len(sys.argv) != 4:
 
 if len(sys.argv) != 4:
-       print("Usage: python generate.py nb_nodes nb_bits end_date > deployment_file.xml")
-       sys.exit(1)
+    print(
+        "Usage: python generate.py nb_nodes nb_bits end_date > deployment_file.xml")
+    sys.exit(1)
 
 nb_nodes = int(sys.argv[1])
 nb_bits = int(sys.argv[2])
 
 nb_nodes = int(sys.argv[1])
 nb_bits = int(sys.argv[2])
@@ -20,21 +22,21 @@ max_id = 2 ** nb_bits - 1
 all_ids = [0]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
 all_ids = [0]
 
 sys.stdout.write("<?xml version='1.0'?>\n"
-"<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n"
-"<platform version=\"4\">\n  <process host=\"node-0.acme.org\" function=\"node\">\n"
-"     <argument value=\"0\"/>\n     <argument value=\"%d\"/>\n  </process>\n" % end_date)
+                 "<!DOCTYPE platform SYSTEM \"http://simgrid.gforge.inria.fr/simgrid/simgrid.dtd\">\n"
+                 "<platform version=\"4\">\n  <process host=\"node-0.acme.org\" function=\"node\">\n"
+                 "     <argument value=\"0\"/>\n     <argument value=\"%d\"/>\n  </process>\n" % end_date)
 
 for i in range(1, nb_nodes):
 
 for i in range(1, nb_nodes):
-       ok = False
-       while not ok:
-               my_id = random.randint(0, max_id)
-               ok = not my_id in all_ids
-       known_id = all_ids[random.randint(0, len(all_ids) - 1)]
-       start_date = i * 10
-       line = "  <process host=\"node-%d.acme.org\" function=\"node\">\n    <argument value=\"%s\"/>"\
-              "\n    <argument value=\"%s\"/>\n    <argument value=\"%d\"/>\n  </process>\n" % (i, my_id, known_id,end_date)
-       sys.stdout.write(line)
-       all_ids.append(my_id)
+    ok = False
+    while not ok:
+        my_id = random.randint(0, max_id)
+        ok = not my_id in all_ids
+    known_id = all_ids[random.randint(0, len(all_ids) - 1)]
+    start_date = i * 10
+    line = "  <process host=\"node-%d.acme.org\" function=\"node\">\n    <argument value=\"%s\"/>"\
+           "\n    <argument value=\"%s\"/>\n    <argument value=\"%d\"/>\n  </process>\n" % (
+               i, my_id, known_id, end_date)
+    sys.stdout.write(line)
+    all_ids.append(my_id)
 
 sys.stdout.write("</platform>")
 
 sys.stdout.write("</platform>")
-
index 815bb2f..73c78ce 100755 (executable)
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
-import re, glob
-
-types = [('TCHAR', 'char', 'c')
-        ,('TSTRING', 'const char*', 'cc')
-        ,('TINT', 'int', 'i')
-        ,('TLONG', 'long', 'l')
-        ,('TUCHAR', 'unsigned char', 'uc')
-        ,('TUSHORT', 'unsigned short', 'us')
-        ,('TUINT', 'unsigned int', 'ui')
-        ,('TULONG', 'unsigned long', 'ul')
-        ,('TFLOAT', 'float', 'f')
-        ,('TDOUBLE', 'double', 'd')
-        ,('TDPTR', 'void*', 'dp')
-        ,('TFPTR', 'FPtr', 'fp')
-        ,('TCPTR', 'const void*', 'cp')
-        ,('TSIZE', 'size_t', 'sz')
-        ,('TSGSIZE', 'sg_size_t', 'sgsz')
-        ,('TSGOFF', 'sg_offset_t', 'sgoff')
-        ,('TVOID', 'void', '')
-        ,('TDSPEC', 'void*', 'dp')
-        ,('TFSPEC', 'FPtr', 'fp')]
+import re
+import glob
+
+types = [(
+    'TCHAR', 'char', 'c'), ('TSTRING', 'const char*', 'cc'), ('TINT', 'int', 'i'), ('TLONG', 'long', 'l'), ('TUCHAR', 'unsigned char', 'uc'), ('TUSHORT', 'unsigned short', 'us'), ('TUINT', 'unsigned int', 'ui'), ('TULONG', 'unsigned long', 'ul'), ('TFLOAT', 'float', 'f'),
+    ('TDOUBLE', 'double', 'd'), ('TDPTR', 'void*', 'dp'), ('TFPTR', 'FPtr', 'fp'), ('TCPTR', 'const void*', 'cp'), ('TSIZE', 'size_t', 'sz'), ('TSGSIZE', 'sg_size_t', 'sgsz'), ('TSGOFF', 'sg_offset_t', 'sgoff'), ('TVOID', 'void', ''), ('TDSPEC', 'void*', 'dp'), ('TFSPEC', 'FPtr', 'fp')]
+
 
 class Arg(object):
 
 class Arg(object):
-  simcall_types = {k:v for _,k,v in types}
-  def __init__(self, name, type, casted=None):
-    self.name = name 
-    self.type = type
-    self.casted = casted
-    assert type in self.simcall_types, '%s not in (%s)'%(type, ', '.join(self.simcall_types.keys()))
+    simcall_types = {k: v for _, k, v in types}
+
+    def __init__(self, name, type, casted=None):
+        self.name = name
+        self.type = type
+        self.casted = casted
+        assert type in self.simcall_types, '%s not in (%s)' % (
+            type, ', '.join(self.simcall_types.keys()))
 
 
-  def field(self):
-    return self.simcall_types[self.type]
+    def field(self):
+        return self.simcall_types[self.type]
 
 
-  def rettype(self):
-    return '%s'%self.casted if self.casted else self.type
+    def rettype(self):
+        return '%s' % self.casted if self.casted else self.type
+
+    def cast(self):
+        return '(%s)' % self.casted if self.casted else ''
 
 
-  def cast(self):
-    return '(%s)'%self.casted if self.casted else '' 
 
 class Simcall(object):
 
 class Simcall(object):
-  simcalls_BODY = None
-  simcalls_PRE = None
-  def __init__(self, name, handler, res, args, call_kind):
-    self.name = name
-    self.res = res
-    self.args = args
-    self.need_handler = handler
-    self.call_kind = call_kind
-
-  def check(self):
-      # libsmx.c  simcall_BODY_
-      if self.simcalls_BODY is None:
-          f = open('libsmx.cpp')
-          self.simcalls_BODY = set(re.findall('simcall_BODY_(.*?)\(', f.read()))
-          f.close()
-      if self.name not in self.simcalls_BODY:
-          print '# ERROR: No function calling simcall_BODY_%s'%self.name
-          print '# Add something like this to libsmx.c:'
-          print '%s simcall_%s(%s) {'%(self.res.rettype() ,self.name ,', '.join('%s %s'%(arg.rettype(), arg.name) for arg in self.args))
-          print '  return simcall_BODY_%s(%s);'%(self.name)
-          print '}'
-          return False
-      
-      # smx_*.c void simcall_HANDLER_host_on(smx_simcall_t simcall, smx_host_t h)
-      if self.simcalls_PRE is None:
-        self.simcalls_PRE = set()
-        for fn in glob.glob('smx_*') + glob.glob('../mc/*'):
-            f = open(fn)
-            self.simcalls_PRE |= set(re.findall('simcall_HANDLER_(.*?)\(', f.read()))
+    simcalls_BODY = None
+    simcalls_PRE = None
+
+    def __init__(self, name, handler, res, args, call_kind):
+        self.name = name
+        self.res = res
+        self.args = args
+        self.need_handler = handler
+        self.call_kind = call_kind
+
+    def check(self):
+        # libsmx.c  simcall_BODY_
+        if self.simcalls_BODY is None:
+            f = open('libsmx.cpp')
+            self.simcalls_BODY = set(
+                re.findall('simcall_BODY_(.*?)\(', f.read()))
             f.close()
             f.close()
-      if self.need_handler:
-          if (self.name not in self.simcalls_PRE):
-              print '# ERROR: No function called simcall_HANDLER_%s'%self.name
-              print '# Add something like this to the relevant C file (like smx_io.c if it\'s an IO call):'
-              print '%s simcall_HANDLER_%s(smx_simcall_t simcall%s) {'%(self.res.rettype()
-                                                                        ,self.name                                               
-                                                                        ,''.join(', %s %s'%(arg.rettype(), arg.name)
-                                                                             for arg in self.args))
-              print '  // Your code handling the simcall'
-              print '}'
-              return False
-      else:
-          if (self.name in self.simcalls_PRE):
-              print '# ERROR: You have a function called simcall_HANDLER_%s, but that simcall is not using any handler'%self.name
-              print '# Either change your simcall definition, or kill that function'
-              return False
-      return True
-
-  def enum(self):
-    return '  SIMCALL_%s,'%(self.name.upper())
-
-  def string(self):
-    return '  "SIMCALL_%s",'% self.name.upper()
-
-  def accessors(self):
-    res = []
-    res.append('')
-    # Arguments getter/setters
-    for i in range(len(self.args)):
-        arg = self.args[i]
-        res.append('static inline %s simcall_%s__get__%s(smx_simcall_t simcall) {'%(arg.rettype(), self.name, arg.name))
-        res.append('  return %s simcall->args[%i].%s;'%(arg.cast(), i, arg.field()))
-        res.append('}')
-        res.append('static inline void simcall_%s__set__%s(smx_simcall_t simcall, %s arg) {'%(self.name, arg.name, arg.type))
-        res.append('    simcall->args[%i].%s = arg;'%(i, arg.field()))
-        res.append('}')
-      
-    # Return value getter/setters
-    if self.res.type != 'void':
-        res.append('static inline %s simcall_%s__get__result(smx_simcall_t simcall){'%(self.res.rettype(), self.name))
-        res.append('    return %s simcall->result.%s;'%(self.res.cast(), self.res.field()))
-        res.append('}')
-        res.append('static inline void simcall_%s__set__result(smx_simcall_t simcall, %s result){'%(self.name, self.res.type,))
-        res.append('    simcall->result.%s = result;'%(self.res.field()))
-        res.append('}')
-    return '\n'.join(res)
-
-  def case(self):
-      res = []
-      res.append('case SIMCALL_%s:'%(self.name.upper()))
-      if self.need_handler:
-          res.append('      %ssimcall_HANDLER_%s(simcall %s);'%('simcall->result.%s = '%self.res.field() if self.call_kind == 'Func' else ' ',
-                                                                self.name,
-                                                                ''.join(', %s simcall->args[%d].%s'%(arg.cast(), i, arg.field()) 
-                                                                        for i, arg in enumerate(self.args))))
-      else:
-          res.append('      %sSIMIX_%s(%s);'%('simcall->result.%s = '%self.res.field() if self.call_kind == 'Func' else ' ',
-                                                self.name,  
-                                                ','.join('%s simcall->args[%d].%s'%(arg.cast(), i, arg.field()) 
-                                                         for i, arg in enumerate(self.args))))
-      res.append('      %sbreak;  \n'%('SIMIX_simcall_answer(simcall);\n      ' if self.call_kind != 'Blck' else ' '))  
-      return '\n'.join(res)
-
-  def body(self):
-      res = ['  ']
-      res.append('inline static %s simcall_BODY_%s(%s) {'%(self.res.rettype(),
-                                                           self.name,
-                                                           ', '.join('%s %s'%(arg.rettype(), arg.name) for arg in self.args)))
-      res.append('    smx_process_t self = SIMIX_process_self();')
-      res.append('')
-      res.append('    /* Go to that function to follow the code flow through the simcall barrier */')
-      if self.need_handler:
-          res.append('    if (0) simcall_HANDLER_%s(%s);'%(self.name,
-                                                           ', '.join(["&self->simcall"]+ [arg.name for arg in self.args])))
-      else:
-          res.append('    if (0) SIMIX_%s(%s);'%(self.name,
-                                                   ', '.join(arg.name for arg in self.args)))
-      res.append('    /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */')
-      res.append('')
-      res.append('    self->simcall.call = SIMCALL_%s;'%(self.name.upper()))
-      res.append('    memset(&self->simcall.result, 0, sizeof(self->simcall.result));')
-      res.append('    memset(self->simcall.args, 0, sizeof(self->simcall.args));')
-      res.append('\n'.join('    self->simcall.args[%d].%s = (%s) %s;'%(i, arg.field(), arg.type, arg.name)
-                  for i, arg in enumerate(self.args)))
-      res.append('    if (self != simix_global->maestro_process) {')
-      res.append('      XBT_DEBUG("Yield process \'%s\' on simcall %s (%d)", self->name,')
-      res.append('                SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call);')
-      res.append('      SIMIX_process_yield(self);')
-      res.append('    } else {')
-      res.append('      SIMIX_simcall_handle(&self->simcall, 0);')
-      res.append('    }    ')   
-      if self.res.type != 'void':
-          res.append('    return (%s) self->simcall.result.%s;' % 
-              (self.res.rettype(), self.res.field()))
-      else:
-          res.append('    ')
-      res.append('  }')
-      return '\n'.join(res)
-
-      
-  def handler_prototype(self):
-      if self.need_handler:
-          return "XBT_PRIVATE %s simcall_HANDLER_%s(smx_simcall_t simcall%s);"%(self.res.rettype() if self.call_kind == 'Func' else 'void', 
-                                                                    self.name, 
-                                                                    ''.join(', %s %s'%(arg.rettype(), arg.name) 
-                    for i, arg in enumerate(self.args)))
-      else:
-          return ""
+        if self.name not in self.simcalls_BODY:
+            print '# ERROR: No function calling simcall_BODY_%s' % self.name
+            print '# Add something like this to libsmx.c:'
+            print '%s simcall_%s(%s) {' % (self.res.rettype(), self.name, ', '.join('%s %s' % (arg.rettype(), arg.name) for arg in self.args))
+            print '  return simcall_BODY_%s(%s);' % (self.name)
+            print '}'
+            return False
+
+        # smx_*.c void simcall_HANDLER_host_on(smx_simcall_t simcall,
+        # smx_host_t h)
+        if self.simcalls_PRE is None:
+            self.simcalls_PRE = set()
+            for fn in glob.glob('smx_*') + glob.glob('../mc/*'):
+                f = open(fn)
+                self.simcalls_PRE |= set(
+                    re.findall('simcall_HANDLER_(.*?)\(', f.read()))
+                f.close()
+        if self.need_handler:
+            if (self.name not in self.simcalls_PRE):
+                print '# ERROR: No function called simcall_HANDLER_%s' % self.name
+                print '# Add something like this to the relevant C file (like smx_io.c if it\'s an IO call):'
+                print '%s simcall_HANDLER_%s(smx_simcall_t simcall%s) {' % (self.res.rettype(), self.name, ''.join(', %s %s' % (arg.rettype(), arg.name)
+                                                                                                                   for arg in self.args))
+                print '  // Your code handling the simcall'
+                print '}'
+                return False
+        else:
+            if (self.name in self.simcalls_PRE):
+                print '# ERROR: You have a function called simcall_HANDLER_%s, but that simcall is not using any handler' % self.name
+                print '# Either change your simcall definition, or kill that function'
+                return False
+        return True
+
+    def enum(self):
+        return '  SIMCALL_%s,' % (self.name.upper())
+
+    def string(self):
+        return '  "SIMCALL_%s",' % self.name.upper()
+
+    def accessors(self):
+        res = []
+        res.append('')
+        # Arguments getter/setters
+        for i in range(len(self.args)):
+            arg = self.args[i]
+            res.append('static inline %s simcall_%s__get__%s(smx_simcall_t simcall) {' % (
+                arg.rettype(), self.name, arg.name))
+            res.append(
+                '  return %s simcall->args[%i].%s;' % (arg.cast(), i, arg.field()))
+            res.append('}')
+            res.append('static inline void simcall_%s__set__%s(smx_simcall_t simcall, %s arg) {' % (
+                self.name, arg.name, arg.type))
+            res.append('    simcall->args[%i].%s = arg;' % (i, arg.field()))
+            res.append('}')
+
+        # Return value getter/setters
+        if self.res.type != 'void':
+            res.append(
+                'static inline %s simcall_%s__get__result(smx_simcall_t simcall){' % (self.res.rettype(), self.name))
+            res.append('    return %s simcall->result.%s;' %
+                       (self.res.cast(), self.res.field()))
+            res.append('}')
+            res.append(
+                'static inline void simcall_%s__set__result(smx_simcall_t simcall, %s result){' % (self.name, self.res.type,))
+            res.append('    simcall->result.%s = result;' % (self.res.field()))
+            res.append('}')
+        return '\n'.join(res)
+
+    def case(self):
+        res = []
+        res.append('case SIMCALL_%s:' % (self.name.upper()))
+        if self.need_handler:
+            res.append(
+                '      %ssimcall_HANDLER_%s(simcall %s);' % ('simcall->result.%s = ' % self.res.field() if self.call_kind == 'Func' else ' ',
+                                                             self.name,
+                                                             ''.join(', %s simcall->args[%d].%s' % (arg.cast(), i, arg.field())
+                                                                     for i, arg in enumerate(self.args))))
+        else:
+            res.append(
+                '      %sSIMIX_%s(%s);' % ('simcall->result.%s = ' % self.res.field() if self.call_kind == 'Func' else ' ',
+                                           self.name,
+                                           ','.join('%s simcall->args[%d].%s' % (arg.cast(), i, arg.field())
+                                                    for i, arg in enumerate(self.args))))
+        res.append('      %sbreak;  \n' %
+                   ('SIMIX_simcall_answer(simcall);\n      ' if self.call_kind != 'Blck' else ' '))
+        return '\n'.join(res)
+
+    def body(self):
+        res = ['  ']
+        res.append(
+            'inline static %s simcall_BODY_%s(%s) {' % (self.res.rettype(),
+                                                        self.name,
+                                                        ', '.join('%s %s' % (arg.rettype(), arg.name) for arg in self.args)))
+        res.append('    smx_process_t self = SIMIX_process_self();')
+        res.append('')
+        res.append(
+            '    /* Go to that function to follow the code flow through the simcall barrier */')
+        if self.need_handler:
+            res.append('    if (0) simcall_HANDLER_%s(%s);' % (self.name,
+                                                               ', '.join(["&self->simcall"] + [arg.name for arg in self.args])))
+        else:
+            res.append('    if (0) SIMIX_%s(%s);' % (self.name,
+                                                     ', '.join(arg.name for arg in self.args)))
+        res.append(
+            '    /* end of the guide intended to the poor programmer wanting to go from MSG to Surf */')
+        res.append('')
+        res.append('    self->simcall.call = SIMCALL_%s;' %
+                   (self.name.upper()))
+        res.append(
+            '    memset(&self->simcall.result, 0, sizeof(self->simcall.result));')
+        res.append(
+            '    memset(self->simcall.args, 0, sizeof(self->simcall.args));')
+        res.append('\n'.join('    self->simcall.args[%d].%s = (%s) %s;' % (i, arg.field(), arg.type, arg.name)
+                             for i, arg in enumerate(self.args)))
+        res.append('    if (self != simix_global->maestro_process) {')
+        res.append(
+            '      XBT_DEBUG("Yield process \'%s\' on simcall %s (%d)", self->name,')
+        res.append(
+            '                SIMIX_simcall_name(self->simcall.call), (int)self->simcall.call);')
+        res.append('      SIMIX_process_yield(self);')
+        res.append('    } else {')
+        res.append('      SIMIX_simcall_handle(&self->simcall, 0);')
+        res.append('    }    ')
+        if self.res.type != 'void':
+            res.append('    return (%s) self->simcall.result.%s;' %
+                       (self.res.rettype(), self.res.field()))
+        else:
+            res.append('    ')
+        res.append('  }')
+        return '\n'.join(res)
+
+    def handler_prototype(self):
+        if self.need_handler:
+            return "XBT_PRIVATE %s simcall_HANDLER_%s(smx_simcall_t simcall%s);" % (self.res.rettype() if self.call_kind == 'Func' else 'void',
+                                                                                    self.name,
+                                                                                    ''.join(', %s %s' % (arg.rettype(), arg.name)
+                                                                                            for i, arg in enumerate(self.args)))
+        else:
+            return ""
+
 
 def parse(fn):
 
 def parse(fn):
-  simcalls = []
-  resdi = None
-  simcalls_guarded = {}
-  for line in open(fn).read().split('\n'):
-    if line.startswith('##'):
-      resdi = []
-      simcalls_guarded[re.search(r'## *(.*)', line).group(1)] = resdi
-    if line.startswith('#') or not line:
-      continue
-    match = re.match(r'(\S*?) *(\S*?) *(\S*?) *\((.*?)(?:, *(.*?))?\) *(.*)', line)
-    assert match, line
-    ans, handler, name, rest, resc, args = match.groups()
-    assert (ans == 'Proc' or ans == 'Func' or ans == 'Blck'),"Invalid call type: '%s'. Faulty line:\n%s\n"%(ans,line)
-    assert (handler == 'H' or handler == '-'),"Invalid need_handler indication: '%s'. Faulty line:\n%s\n"%(handler,line)
-    sargs = []
-    for n,t,c in re.findall(r'\((.*?), *(.*?)(?:, *(.*?))?\)', args):
-      sargs.append(Arg(n,t,c))
-    sim = Simcall(name, handler=='H', Arg('result', rest, resc), sargs, ans)
-    if resdi is None:
-      simcalls.append(sim)
-    else:
-      resdi.append(sim)
-  return simcalls, simcalls_guarded
+    simcalls = []
+    resdi = None
+    simcalls_guarded = {}
+    for line in open(fn).read().split('\n'):
+        if line.startswith('##'):
+            resdi = []
+            simcalls_guarded[re.search(r'## *(.*)', line).group(1)] = resdi
+        if line.startswith('#') or not line:
+            continue
+        match = re.match(
+            r'(\S*?) *(\S*?) *(\S*?) *\((.*?)(?:, *(.*?))?\) *(.*)', line)
+        assert match, line
+        ans, handler, name, rest, resc, args = match.groups()
+        assert (ans == 'Proc' or ans == 'Func' or ans == 'Blck'), "Invalid call type: '%s'. Faulty line:\n%s\n" % (
+            ans, line)
+        assert (handler == 'H' or handler == '-'), "Invalid need_handler indication: '%s'. Faulty line:\n%s\n" % (
+            handler, line)
+        sargs = []
+        for n, t, c in re.findall(r'\((.*?), *(.*?)(?:, *(.*?))?\)', args):
+            sargs.append(Arg(n, t, c))
+        sim = Simcall(name, handler == 'H',
+                      Arg('result', rest, resc), sargs, ans)
+        if resdi is None:
+            simcalls.append(sim)
+        else:
+            resdi.append(sim)
+    return simcalls, simcalls_guarded
+
 
 def header(name):
     fd = open(name, 'w')
 
 def header(name):
     fd = open(name, 'w')
-    fd.write('/**********************************************************************/\n')
-    fd.write('/* File generated by src/simix/simcalls.py from src/simix/simcalls.in */\n')
-    fd.write('/*                                                                    */\n')
-    fd.write('/*                    DO NOT EVER CHANGE THIS FILE                    */\n')
-    fd.write('/*                                                                    */\n')
-    fd.write('/* change simcalls specification in src/simix/simcalls.in             */\n')  
-    fd.write('/**********************************************************************/\n\n')
+    fd.write(
+        '/**********************************************************************/\n')
+    fd.write(
+        '/* File generated by src/simix/simcalls.py from src/simix/simcalls.in */\n')
+    fd.write(
+        '/*                                                                    */\n')
+    fd.write(
+        '/*                    DO NOT EVER CHANGE THIS FILE                    */\n')
+    fd.write(
+        '/*                                                                    */\n')
+    fd.write(
+        '/* change simcalls specification in src/simix/simcalls.in             */\n')
+    fd.write(
+        '/**********************************************************************/\n\n')
     fd.write('/*\n')
     fd.write('/*\n')
-    fd.write(' * Note that the name comes from http://en.wikipedia.org/wiki/Popping\n') 
-    fd.write(' * Indeed, the control flow is doing a strange dance in there.\n')
+    fd.write(
+        ' * Note that the name comes from http://en.wikipedia.org/wiki/Popping\n')
+    fd.write(
+        ' * Indeed, the control flow is doing a strange dance in there.\n')
     fd.write(' *\n')
     fd.write(' *\n')
-    fd.write(' * That\'s not about http://en.wikipedia.org/wiki/Poop, despite the odor :)\n')
+    fd.write(
+        ' * That\'s not about http://en.wikipedia.org/wiki/Poop, despite the odor :)\n')
     fd.write(' */\n\n')
     return fd
 
     fd.write(' */\n\n')
     return fd
 
-def handle(fd,func, simcalls, guarded_simcalls):
+
+def handle(fd, func, simcalls, guarded_simcalls):
     def nonempty(e): return e != ''
     def nonempty(e): return e != ''
-    fd.write('\n'.join( filter(nonempty, (func(simcall) for simcall in simcalls))))
-    
+    fd.write(
+        '\n'.join(filter(nonempty, (func(simcall) for simcall in simcalls))))
+
     for guard, list in guarded_simcalls.items():
     for guard, list in guarded_simcalls.items():
-        fd.write('\n#ifdef %s\n'%(guard))
+        fd.write('\n#ifdef %s\n' % (guard))
         fd.write('\n'.join(func(simcall) for simcall in list))
         fd.write('\n#endif\n')
 
         fd.write('\n'.join(func(simcall) for simcall in list))
         fd.write('\n#endif\n')
 
-if __name__=='__main__':
-  import sys
-  simcalls, simcalls_dict = parse('simcalls.in')
-  
-  ok = True
-  ok &= all(map(Simcall.check, simcalls))
-  for k,v in simcalls_dict.items():
-    ok &= all(map(Simcall.check, v))
-  # FIXME: we should not hide it
-  #if not ok:
-  #  print ("Some checks fail!")
-  #  sys.exit(1)
-
-  ###
-  ### smx_popping_accessors.c
-  ###
-  fd = header('popping_accessors.h')
-  handle(fd, Simcall.accessors, simcalls, simcalls_dict)
-  fd.write("\n\n/* The prototype of all simcall handlers, automatically generated for you */\n\n")
-  handle(fd, Simcall.handler_prototype, simcalls, simcalls_dict)
-  fd.close()
-
-  ###
-  ### smx_popping_enum.c
-  ###
-  fd = header("popping_enum.h")
-  fd.write('/**\n')
-  fd.write(' * @brief All possible simcalls.\n')
-  fd.write(' */\n')
-  fd.write('typedef enum {\n')
-  fd.write('  SIMCALL_NONE,\n')
-  
-  handle(fd, Simcall.enum, simcalls, simcalls_dict)
-  
-  fd.write('  NUM_SIMCALLS\n')
-  fd.write('} e_smx_simcall_t;\n')
-  fd.close()
-
-  ###
-  ### smx_popping_generated.cpp
-  ###
-  
-  fd = header("popping_generated.cpp")
-  
-  fd.write('#include <xbt/base.h>\n');
-  fd.write('#include "smx_private.h"\n');
-  fd.write('#ifdef HAVE_MC\n');
-  fd.write('#include "src/mc/mc_forward.h"\n');
-  fd.write('#endif\n');
-  fd.write('\n');
-  fd.write('XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping);\n\n');
-  
-  fd.write('/** @brief Simcalls\' names (generated from src/simix/simcalls.in) */\n')
-  fd.write('const char* simcall_names[] = {\n')
-
-  fd.write('   "SIMCALL_NONE",');
-  handle(fd, Simcall.string, simcalls, simcalls_dict)
-
-  fd.write('};\n\n')
-
-
-  fd.write('/**\n');
-  fd.write(' * @brief (in kernel mode) unpack the simcall and activate the handler\n');
-  fd.write(' * \n')
-  fd.write(' * This function is generated from src/simix/simcalls.in\n')
-  fd.write(' */\n');
-  fd.write('void SIMIX_simcall_handle(smx_simcall_t simcall, int value) {\n');
-  fd.write('  XBT_DEBUG("Handling simcall %p: %s", simcall, SIMIX_simcall_name(simcall->call));\n');
-  fd.write('  SIMCALL_SET_MC_VALUE(simcall, value);\n');
-  fd.write('  if (simcall->issuer->context->iwannadie && simcall->call != SIMCALL_PROCESS_CLEANUP)\n');
-  fd.write('    return;\n');
-  fd.write('  switch (simcall->call) {\n');
-
-  handle(fd, Simcall.case, simcalls, simcalls_dict)
-
-  fd.write('    case NUM_SIMCALLS:\n');
-  fd.write('      break;\n');
-  fd.write('    case SIMCALL_NONE:\n');
-  fd.write('      THROWF(arg_error,0,"Asked to do the noop syscall on %s@%s",\n');
-  fd.write('          SIMIX_process_get_name(simcall->issuer),\n');
-  fd.write('          sg_host_get_name(SIMIX_process_get_host(simcall->issuer))\n');
-  fd.write('          );\n');
-  fd.write('      break;\n');
-  fd.write('\n');
-  fd.write('  }\n');
-  fd.write('}\n');
-  
-  fd.close()
-  
-  ###
-  ### smx_popping_bodies.cpp
-  ###
-  fd = header('popping_bodies.cpp')
-  fd.write('#include "smx_private.h"\n')
-  fd.write('#include "src/mc/mc_forward.h"\n')
-  fd.write('#include "xbt/ex.h"\n')
-  fd.write('#include <simgrid/simix.hpp>\n')
-  handle(fd, Simcall.body, simcalls, simcalls_dict)
-  fd.close()
+if __name__ == '__main__':
+    import sys
+    simcalls, simcalls_dict = parse('simcalls.in')
+
+    ok = True
+    ok &= all(map(Simcall.check, simcalls))
+    for k, v in simcalls_dict.items():
+        ok &= all(map(Simcall.check, v))
+    # FIXME: we should not hide it
+    # if not ok:
+    #  print ("Some checks fail!")
+    #  sys.exit(1)
+
+    #
+    # smx_popping_accessors.c
+    #
+    fd = header('popping_accessors.h')
+    handle(fd, Simcall.accessors, simcalls, simcalls_dict)
+    fd.write(
+        "\n\n/* The prototype of all simcall handlers, automatically generated for you */\n\n")
+    handle(fd, Simcall.handler_prototype, simcalls, simcalls_dict)
+    fd.close()
+
+    #
+    # smx_popping_enum.c
+    #
+    fd = header("popping_enum.h")
+    fd.write('/**\n')
+    fd.write(' * @brief All possible simcalls.\n')
+    fd.write(' */\n')
+    fd.write('typedef enum {\n')
+    fd.write('  SIMCALL_NONE,\n')
+
+    handle(fd, Simcall.enum, simcalls, simcalls_dict)
+
+    fd.write('  NUM_SIMCALLS\n')
+    fd.write('} e_smx_simcall_t;\n')
+    fd.close()
+
+    #
+    # smx_popping_generated.cpp
+    #
+
+    fd = header("popping_generated.cpp")
+
+    fd.write('#include <xbt/base.h>\n')
+    fd.write('#include "smx_private.h"\n')
+    fd.write('#ifdef HAVE_MC\n')
+    fd.write('#include "src/mc/mc_forward.h"\n')
+    fd.write('#endif\n')
+    fd.write('\n')
+    fd.write('XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(simix_popping);\n\n')
+
+    fd.write(
+        '/** @brief Simcalls\' names (generated from src/simix/simcalls.in) */\n')
+    fd.write('const char* simcall_names[] = {\n')
+
+    fd.write('   "SIMCALL_NONE",')
+    handle(fd, Simcall.string, simcalls, simcalls_dict)
+
+    fd.write('};\n\n')
+
+    fd.write('/**\n')
+    fd.write(
+        ' * @brief (in kernel mode) unpack the simcall and activate the handler\n')
+    fd.write(' * \n')
+    fd.write(' * This function is generated from src/simix/simcalls.in\n')
+    fd.write(' */\n')
+    fd.write(
+        'void SIMIX_simcall_handle(smx_simcall_t simcall, int value) {\n')
+    fd.write(
+        '  XBT_DEBUG("Handling simcall %p: %s", simcall, SIMIX_simcall_name(simcall->call));\n')
+    fd.write('  SIMCALL_SET_MC_VALUE(simcall, value);\n')
+    fd.write(
+        '  if (simcall->issuer->context->iwannadie && simcall->call != SIMCALL_PROCESS_CLEANUP)\n')
+    fd.write('    return;\n')
+    fd.write('  switch (simcall->call) {\n')
+
+    handle(fd, Simcall.case, simcalls, simcalls_dict)
+
+    fd.write('    case NUM_SIMCALLS:\n')
+    fd.write('      break;\n')
+    fd.write('    case SIMCALL_NONE:\n')
+    fd.write(
+        '      THROWF(arg_error,0,"Asked to do the noop syscall on %s@%s",\n')
+    fd.write('          SIMIX_process_get_name(simcall->issuer),\n')
+    fd.write(
+        '          sg_host_get_name(SIMIX_process_get_host(simcall->issuer))\n')
+    fd.write('          );\n')
+    fd.write('      break;\n')
+    fd.write('\n')
+    fd.write('  }\n')
+    fd.write('}\n')
+
+    fd.close()
+
+    #
+    # smx_popping_bodies.cpp
+    #
+    fd = header('popping_bodies.cpp')
+    fd.write('#include "smx_private.h"\n')
+    fd.write('#include "src/mc/mc_forward.h"\n')
+    fd.write('#include "xbt/ex.h"\n')
+    fd.write('#include <simgrid/simix.hpp>\n')
+    handle(fd, Simcall.body, simcalls, simcalls_dict)
+    fd.close()
index d18f223..a032416 100755 (executable)
@@ -12,60 +12,65 @@ Tool to generate the simgrid.jar
 import urllib2
 import zipfile
 import tempfile
 import urllib2
 import zipfile
 import tempfile
-import os, sys, re
+import os
+import sys
+import re
+
+dists = ['https://ci.inria.fr/simgrid/job/SimGrid-Multi/build_mode=Debug,label=%s/lastSuccessfulBuild/artifact/build/SimGrid-3.11/simgrid.jar' % dist
+         for dist in ["small-debian-32", "small-debian-64", "small-freebsd-64-clang"]]
+dists.append(
+    'https://ci.inria.fr/simgrid/job/Simgrid-Mult-Win7/build_mode=Debug,label=windows-64/lastSuccessfulBuild/artifact/build/simgrid.jar')
 
 
-dists = ['https://ci.inria.fr/simgrid/job/SimGrid-Multi/build_mode=Debug,label=%s/lastSuccessfulBuild/artifact/build/SimGrid-3.11/simgrid.jar'%dist
-         for dist in ["small-debian-32"
-                     ,"small-debian-64"
-                     ,"small-freebsd-64-clang"]]
-dists.append('https://ci.inria.fr/simgrid/job/Simgrid-Mult-Win7/build_mode=Debug,label=windows-64/lastSuccessfulBuild/artifact/build/simgrid.jar')
 
 class SimJar(object):
 
 class SimJar(object):
-  def __init__(self, filename='simgrid.jar'):
-       self.zipfile = zipfile.ZipFile(filename, 'w')
-       self.done = set()
-       self.git_version = None
 
 
-  def addJar(self, filename):
-    with zipfile.ZipFile(filename) as zf:
-      platform = None
-      arch = None
-      git_version = None
-      for z in zf.infolist():
-       path = filter(None, z.filename.split('/'))
-       if len(path)==3 and path[0] == 'NATIVE':
-         platform, arch = path[1:3]
-       elif z.filename=='META-INF/MANIFEST.MF':
-          zf.read('META-INF/MANIFEST.MF')
-          git_version = re.findall(r"Implementation-Version: \"(.*?)\"", zf.read('META-INF/MANIFEST.MF'))
+    def __init__(self, filename='simgrid.jar'):
+        self.zipfile = zipfile.ZipFile(filename, 'w')
+        self.done = set()
+        self.git_version = None
+
+    def addJar(self, filename):
+        with zipfile.ZipFile(filename) as zf:
+            platform = None
+            arch = None
+            git_version = None
+            for z in zf.infolist():
+                path = filter(None, z.filename.split('/'))
+                if len(path) == 3 and path[0] == 'NATIVE':
+                    platform, arch = path[1:3]
+                elif z.filename == 'META-INF/MANIFEST.MF':
+                    zf.read('META-INF/MANIFEST.MF')
+                    git_version = re.findall(
+                        r"Implementation-Version: \"(.*?)\"", zf.read('META-INF/MANIFEST.MF'))
 
 
-      assert platform is not None and git_version is not None, "Jar file not valid (%s, %s)"%(platform, git_version)
-      print "Adding: %s %s"%(platform, arch)
-      if self.git_version is None:
-       self.git_version = git_version
-      elif self.git_version != git_version:
-       print "WARNING: Assembling jar of various commits (%s vs %s)"%(self.git_version, git_version)
+            assert platform is not None and git_version is not None, "Jar file not valid (%s, %s)" % (
+                platform, git_version)
+            print "Adding: %s %s" % (platform, arch)
+            if self.git_version is None:
+                self.git_version = git_version
+            elif self.git_version != git_version:
+                print "WARNING: Assembling jar of various commits (%s vs %s)" % (self.git_version, git_version)
 
 
-      for info in zf.infolist():
-        if info.filename not in self.done:
-          self.done.add(info.filename)
-          self.zipfile.writestr(info, zf.read(info.filename))
+            for info in zf.infolist():
+                if info.filename not in self.done:
+                    self.done.add(info.filename)
+                    self.zipfile.writestr(info, zf.read(info.filename))
 
 
-  def addByUrl(self, url):
-    data = urllib2.urlopen(url)
-    f = tempfile.NamedTemporaryFile(delete=False)
-    f.write(data.read())
-    f.close()
-    self.addJar(f.name)
-    os.unlink(f.name)
+    def addByUrl(self, url):
+        data = urllib2.urlopen(url)
+        f = tempfile.NamedTemporaryFile(delete=False)
+        f.write(data.read())
+        f.close()
+        self.addJar(f.name)
+        os.unlink(f.name)
 
 
-  def close(self):
-       self.zipfile.close()
+    def close(self):
+        self.zipfile.close()
 
 
-if __name__=="__main__":
-  jar = SimJar()
-  for dist in dists:
-       jar.addByUrl(dist)
-  for a in sys.argv[1:]:
-       jar.addJar(a)
-  jar.close()
+if __name__ == "__main__":
+    jar = SimJar()
+    for dist in dists:
+        jar.addByUrl(dist)
+    for a in sys.argv[1:]:
+        jar.addJar(a)
+    jar.close()
index ba78a80..bb2f59a 100755 (executable)
@@ -13,11 +13,12 @@ first address encountered will be replaced by 0X0000001, second by 0X0000002, ..
 
 """
 
 
 """
 
-import sys, re
+import sys
+import re
 
 
-if len(sys.argv)!=2:
-  print "Usage ./normalize-pointers.py <filename>"
-  sys.exit(1)
+if len(sys.argv) != 2:
+    print "Usage ./normalize-pointers.py <filename>"
+    sys.exit(1)
 
 f = open(sys.argv[1])
 t = f.read()
 
 f = open(sys.argv[1])
 t = f.read()
@@ -28,15 +29,11 @@ s = r.search(t)
 offset = 0
 pointers = {}
 while (s):
 offset = 0
 pointers = {}
 while (s):
-  if s.group() not in pointers:
-    pointers[s.group()] = "0X%07d"%len(pointers)
-  print t[offset:s.start()],
-  print pointers[s.group()],
-  offset = s.end()
-  s = r.search(t, offset)
+    if s.group() not in pointers:
+        pointers[s.group()] = "0X%07d" % len(pointers)
+    print t[offset:s.start()],
+    print pointers[s.group()],
+    offset = s.end()
+    s = r.search(t, offset)
 
 print t[offset:]
 
 print t[offset:]
-
-
-
-
index 948ddbb..191d473 100755 (executable)
@@ -7,38 +7,38 @@
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
 # This program is free software; you can redistribute it and/or modify it
 # under the terms of the license (GNU LGPL) which comes with this package.
 
-import sys, re
+import sys
+import re
 from lxml import etree
 
 xml = etree.parse(sys.argv[1])
 for e in xml.xpath('//*[@routing="RuleBased"]'):
 from lxml import etree
 
 xml = etree.parse(sys.argv[1])
 for e in xml.xpath('//*[@routing="RuleBased"]'):
-  e.attrib['routing'] = "Full"
-  ids = e.xpath('./*[@id]/@id')
-  done = set()  
-  for asr in e.xpath("./ASroute"):
-    src_ids = {}
-    dst_ids = {}
-    for id in ids:
-      src_s = re.search(r"%s"%asr.attrib['src'], id)
-      dst_s = re.search(r"%s"%asr.attrib['dst'], id)
-      if src_s  :
-        src_ids[id] = src_s
-      if dst_s:
-        dst_ids[id] = dst_s
-    for sid, smat in src_ids.items():
-      for did, dmat in dst_ids.items():
-        todo = tuple(sorted((smat.group(1), dmat.group(1))))
-        if todo not in done or asr.attrib.get("symmetrical")=="NO":
-          done.add(todo)
-          dasr = etree.tounicode(asr)
-          dasr = dasr.replace("$1src", smat.group(1))
-          dasr = dasr.replace("$1dst", dmat.group(1))
-          dasr = etree.fromstring(dasr)
-          dasr.tag = "__ASroute__"
-          dasr.attrib['src'] = sid
-          dasr.attrib['dst'] = did
-          asr.addnext(dasr)
-    asr.getparent().remove(asr)
+    e.attrib['routing'] = "Full"
+    ids = e.xpath('./*[@id]/@id')
+    done = set()
+    for asr in e.xpath("./ASroute"):
+        src_ids = {}
+        dst_ids = {}
+        for id in ids:
+            src_s = re.search(r"%s" % asr.attrib['src'], id)
+            dst_s = re.search(r"%s" % asr.attrib['dst'], id)
+            if src_s:
+                src_ids[id] = src_s
+            if dst_s:
+                dst_ids[id] = dst_s
+        for sid, smat in src_ids.items():
+            for did, dmat in dst_ids.items():
+                todo = tuple(sorted((smat.group(1), dmat.group(1))))
+                if todo not in done or asr.attrib.get("symmetrical") == "NO":
+                    done.add(todo)
+                    dasr = etree.tounicode(asr)
+                    dasr = dasr.replace("$1src", smat.group(1))
+                    dasr = dasr.replace("$1dst", dmat.group(1))
+                    dasr = etree.fromstring(dasr)
+                    dasr.tag = "__ASroute__"
+                    dasr.attrib['src'] = sid
+                    dasr.attrib['dst'] = did
+                    asr.addnext(dasr)
+        asr.getparent().remove(asr)
 
 print etree.tounicode(xml).replace("__ASroute__", "ASroute")
 
 print etree.tounicode(xml).replace("__ASroute__", "ASroute")
-
index 3976f66..8f6c631 100644 (file)
@@ -9,82 +9,87 @@
 
 # grep -ohrI 'bw=".*"' . | sort | uniq
 
 
 # grep -ohrI 'bw=".*"' . | sort | uniq
 
-import sys, fnmatch, os
+import sys
+import fnmatch
+import os
 from decimal import Decimal
 import re
 
 from decimal import Decimal
 import re
 
+
 def to_str(dec):
 def to_str(dec):
-  return re.sub(r"(\.\d*?)0*$", r"\1", dec.to_eng_string()).rstrip(".")
+    return re.sub(r"(\.\d*?)0*$", r"\1", dec.to_eng_string()).rstrip(".")
+
 
 def format(xml, formats, attrib):
 
 def format(xml, formats, attrib):
-  res = []
-  m = re.search(r'%s="(.*?)"'%attrib, xml)
-  while m:
-    b, e = m.span(1)
-    res.append(xml[:b])
-    val = xml[b:e]
-    xml = xml[e:]
-    try:
-      power = Decimal(val)
-      tmp = to_str(power)
-      for p, f in formats:
-        d = power / p
-        if d >= 1.0:
-          tmp = "%s%s"%(to_str(d), f)
-          break
-      res.append(tmp)
-    except:
-      print "Error with:", val
-      res.append(val)
-    m = re.search(r'%s="(.*?)"'%attrib, xml)
-
-  res.append(xml)
-  return "".join(res)
+    res = []
+    m = re.search(r'%s="(.*?)"' % attrib, xml)
+    while m:
+        b, e = m.span(1)
+        res.append(xml[:b])
+        val = xml[b:e]
+        xml = xml[e:]
+        try:
+            power = Decimal(val)
+            tmp = to_str(power)
+            for p, f in formats:
+                d = power / p
+                if d >= 1.0:
+                    tmp = "%s%s" % (to_str(d), f)
+                    break
+            res.append(tmp)
+        except:
+            print "Error with:", val
+            res.append(val)
+        m = re.search(r'%s="(.*?)"' % attrib, xml)
+
+    res.append(xml)
+    return "".join(res)
+
 
 def formats(list):
 
 def formats(list):
-  return sorted(((Decimal(i), j) for i,j in list), key=lambda x: x[0], reverse=True)
+    return sorted(((Decimal(i), j) for i, j in list), key=lambda x: x[0], reverse=True)
 
 for root, dirnames, filenames in os.walk(sys.argv[1]):
 
 for root, dirnames, filenames in os.walk(sys.argv[1]):
-  for filename in fnmatch.filter(filenames, '*.xml'):
-    print root, dirnames, filename
-    path = os.path.join(root, filename)
-    xml = open(path).read()
-      
-    power_formats = formats([( "1E0",  "f"),
-                             "1E3", "kf"),
-                             "1E6", "Mf"),
-                             "1E9", "Gf"),
-                             ("1E12", "Tf"),
-                             ("1E15", "Pt"),
-                             ("1E18", "Ef"),
-                             ("1E21", "Zf")])
-    xml = format(xml, power_formats, "power")
-    
-    bandwidth_formats = formats([( "1E0",  "Bps"),
-                                 "1E3", "kBps"),
-                                 ( "1E6", "MBps"),                     
-                                 "1E9", "GBps"),
-                                 ("1E12", "TBps")])
-    xml = format(xml, bandwidth_formats, "bandwidth")
-    xml = format(xml, bandwidth_formats, "bw")
-    xml = format(xml, bandwidth_formats, "bb_bw")
-    xml = format(xml, bandwidth_formats, "bw_in")
-    xml = format(xml, bandwidth_formats, "bw_out")
-    
-    time_formats = formats([(     "1E-12",  "ps"),
-                            (     "1E-9" ,  "ns"),
-                            (     "1E-6" ,  "us"),
-                            (     "1E-3" ,  "ms"),
-                            (     "1E0"  ,   "s"),
-                            (    "60E0"  ,   "m"),
-                            (  "3600E0"  ,   "h"),                     
-                            ( "86400E0"  ,   "d"),
-                            ("604800E0"  ,   "w")])
-    xml = format(xml, time_formats, "latency")
-    xml = format(xml, time_formats, "lat")
-    xml = format(xml, time_formats, "bb_lat")
-    
-    #print xml
-    file = open(path, "w")
-    file.write(xml)
-    file.close()
+    for filename in fnmatch.filter(filenames, '*.xml'):
+        print root, dirnames, filename
+        path = os.path.join(root, filename)
+        xml = open(path).read()
+
+        power_formats = formats([("1E0", "f"),
+                                 ("1E3", "kf"),
+                                 ("1E6", "Mf"),
+                                 ("1E9", "Gf"),
+                                 ("1E12", "Tf"),
+                                 ("1E15", "Pt"),
+                                 ("1E18", "Ef"),
+                                 ("1E21", "Zf")])
+        xml = format(xml, power_formats, "power")
+
+        bandwidth_formats = formats([("1E0", "Bps"),
+                                     ("1E3", "kBps"),
+                                     ("1E6", "MBps"),
+                                     ("1E9", "GBps"),
+                                     ("1E12", "TBps")])
+        xml = format(xml, bandwidth_formats, "bandwidth")
+        xml = format(xml, bandwidth_formats, "bw")
+        xml = format(xml, bandwidth_formats, "bb_bw")
+        xml = format(xml, bandwidth_formats, "bw_in")
+        xml = format(xml, bandwidth_formats, "bw_out")
+
+        time_formats = formats([("1E-12", "ps"),
+                                ("1E-9", "ns"),
+                                ("1E-6", "us"),
+                                ("1E-3", "ms"),
+                                ("1E0", "s"),
+                                ("60E0", "m"),
+                                ("3600E0", "h"),
+                                ("86400E0", "d"),
+                                ("604800E0", "w")])
+        xml = format(xml, time_formats, "latency")
+        xml = format(xml, time_formats, "lat")
+        xml = format(xml, time_formats, "bb_lat")
+
+        # print xml
+        file = open(path, "w")
+        file.write(xml)
+        file.close()