From 2f3b322280a742069fd8965d723a2205a4a8cc00 Mon Sep 17 00:00:00 2001 From: Sascha Bischoff Date: Fri, 15 Feb 2013 17:40:10 -0500 Subject: [PATCH] base: Add warn() and inform() to m5.utils for use from python This patch adds two fuctions to m5.util, warn and inform, which mirror those found in the C++ side of gem5. These are added in addition to the already existing m5.util.panic and m5.util.fatal which already mirror the C++ functionality. This ensures that warning and information messages generated by python are in the same format as those generated by C++. Occurrences of print "Warning: %s..." % name have been replaced with warn("%s...", name) --- src/python/m5/SimObject.py | 10 ++++------ src/python/m5/ticks.py | 5 +++-- src/python/m5/util/__init__.py | 11 +++++++++++ src/python/m5/util/dot_writer.py | 3 ++- 4 files changed, 20 insertions(+), 9 deletions(-) diff --git a/src/python/m5/SimObject.py b/src/python/m5/SimObject.py index 5db33d4bc..09145f498 100644 --- a/src/python/m5/SimObject.py +++ b/src/python/m5/SimObject.py @@ -213,8 +213,7 @@ class MetaSimObject(type): if 'cxx_header' not in cls._value_dict: global noCxxHeader noCxxHeader = True - print >> sys.stderr, \ - "warning: No header file specified for SimObject: %s" % name + warn("No header file specified for SimObject: %s", name) # Export methods are automatically inherited via C++, so we # don't want the method declarations to get inherited on the @@ -804,8 +803,8 @@ class SimObject(object): def add_child(self, name, child): child = coerceSimObjectOrVector(child) if child.has_parent(): - print "warning: add_child('%s'): child '%s' already has parent" % \ - (name, child.get_name()) + warn("add_child('%s'): child '%s' already has parent", name, + child.get_name()) if self._children.has_key(name): # This code path had an undiscovered bug that would make it fail # at runtime. It had been here for a long time and was only @@ -828,8 +827,7 @@ class SimObject(object): val = SimObjectVector(val) self._values[key] = val if isSimObjectOrVector(val) and not val.has_parent(): - print "warning: %s adopting orphan SimObject param '%s'" \ - % (self, key) + warn("%s adopting orphan SimObject param '%s'", self, key) self.add_child(key, val) def path(self): diff --git a/src/python/m5/ticks.py b/src/python/m5/ticks.py index 181a65eba..0d82f6edd 100644 --- a/src/python/m5/ticks.py +++ b/src/python/m5/ticks.py @@ -27,6 +27,7 @@ # Authors: Nathan Binkert import sys +from m5.util import warn tps = 1.0e12 # default to 1 THz (1 Tick == 1 ps) tps_fixed = False # once set to true, can't be changed @@ -81,8 +82,8 @@ def fromSeconds(value): int_value = int(round(value)) err = (value - int_value) / value if err > frequency_tolerance: - print >>sys.stderr, "Warning: rounding error > tolerance" - print >>sys.stderr, " %f rounded to %d" % (value, int_value) + warn("rounding error > tolerance\n %f rounded to %d", value, + int_value) return int_value __all__ = [ 'setGlobalFrequency', 'fixGlobalFrequency', 'fromSeconds', diff --git a/src/python/m5/util/__init__.py b/src/python/m5/util/__init__.py index 591781977..66ebb3cfe 100644 --- a/src/python/m5/util/__init__.py +++ b/src/python/m5/util/__init__.py @@ -56,6 +56,17 @@ def fatal(fmt, *args): print >>sys.stderr, 'fatal:', fmt % args sys.exit(1) +# warn() should be called when the user should be warned about some condition +# that may or may not be the user's fault, but that they should be made aware +# of as it may affect the simulation or results. +def warn(fmt, *args): + print >>sys.stderr, 'warn:', fmt % args + +# inform() should be called when the user should be informed about some +# condition that they may be interested in. +def inform(fmt, *args): + print >>sys.stdout, 'info:', fmt % args + class Singleton(type): def __call__(cls, *args, **kwargs): if hasattr(cls, '_instance'): diff --git a/src/python/m5/util/dot_writer.py b/src/python/m5/util/dot_writer.py index c1c5ff3ac..52d0b4b62 100644 --- a/src/python/m5/util/dot_writer.py +++ b/src/python/m5/util/dot_writer.py @@ -57,6 +57,7 @@ import m5, os, re from m5.SimObject import isRoot, isSimObjectVector +from m5.util import warn try: import pydot except: @@ -176,4 +177,4 @@ def do_dot(root, outdir, dotFilename): # So avoid terminating simulation unnecessarily callgraph.write_pdf(dot_filename + ".pdf") except: - print "warning: failed to generate pdf output from %s" % dot_filename + warn("failed to generate pdf output from %s", dot_filename) -- 2.30.2