diff --git a/Examples/python/performance/operator/Makefile b/Examples/python/performance/operator/Makefile new file mode 100644 index 000000000..0df09d908 --- /dev/null +++ b/Examples/python/performance/operator/Makefile @@ -0,0 +1,23 @@ +TOP = ../../.. +SWIG = $(TOP)/../preinst-swig +CXXSRCS = +TARGET = Simple +INTERFACE = Simple.i + +default : all + +all : + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG) -module Simple_baseline' \ + TARGET='$(TARGET)_baseline' INTERFACE='$(INTERFACE)' python_cpp + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG) -O -module Simple_optimized' \ + TARGET='$(TARGET)_optimized' INTERFACE='$(INTERFACE)' python_cpp + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG) -builtin -O -module Simple_builtin' \ + TARGET='$(TARGET)_builtin' INTERFACE='$(INTERFACE)' python_cpp + +static : + $(MAKE) -f $(TOP)/Makefile CXXSRCS='$(CXXSRCS)' SWIG='$(SWIG)' \ + TARGET='mypython' INTERFACE='$(INTERFACE)' python_cpp_static + +clean : + $(MAKE) -f $(TOP)/Makefile python_clean + rm -f $(TARGET).py diff --git a/Examples/python/performance/operator/Simple.i b/Examples/python/performance/operator/Simple.i new file mode 100644 index 000000000..fb0dd992c --- /dev/null +++ b/Examples/python/performance/operator/Simple.i @@ -0,0 +1,8 @@ +%inline %{ +class MyClass { +public: + MyClass () {} + ~MyClass () {} + MyClass& operator+ (int i) { return *this; } +}; +%} diff --git a/Examples/python/performance/operator/Simple_baseline.py b/Examples/python/performance/operator/Simple_baseline.py new file mode 100644 index 000000000..62da3e348 --- /dev/null +++ b/Examples/python/performance/operator/Simple_baseline.py @@ -0,0 +1,86 @@ +# This file was automatically generated by SWIG (http://www.swig.org). +# Version 2.0.2 +# +# Do not make changes to this file unless you know what you are doing--modify +# the SWIG interface file instead. +# This file is compatible with both classic and new-style classes. + +from sys import version_info +if version_info >= (2,6,0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_Simple_baseline', [dirname(__file__)]) + except ImportError: + import _Simple_baseline + return _Simple_baseline + if fp is not None: + try: + _mod = imp.load_module('_Simple_baseline', fp, pathname, description) + finally: + fp.close() + return _mod + _Simple_baseline = swig_import_helper() + del swig_import_helper +else: + import _Simple_baseline +del version_info +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. +def _swig_setattr_nondynamic(self,class_type,name,value,static=1): + if (name == "thisown"): return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + if (not static) or hasattr(self,name): + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + +def _swig_setattr(self,class_type,name,value): + return _swig_setattr_nondynamic(self,class_type,name,value,0) + +def _swig_getattr(self,class_type,name): + if (name == "thisown"): return self.this.own() + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError(name) + +def _swig_repr(self): + try: strthis = "proxy of " + self.this.__repr__() + except: strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except AttributeError: + class _object : pass + _newclass = 0 + + +class MyClass(_object): + __swig_setmethods__ = {} + __setattr__ = lambda self, name, value: _swig_setattr(self, MyClass, name, value) + __swig_getmethods__ = {} + __getattr__ = lambda self, name: _swig_getattr(self, MyClass, name) + __repr__ = _swig_repr + def __init__(self): + this = _Simple_baseline.new_MyClass() + try: self.this.append(this) + except: self.this = this + __swig_destroy__ = _Simple_baseline.delete_MyClass + __del__ = lambda self : None; + def __add__(self, *args): return _Simple_baseline.MyClass___add__(self, *args) +MyClass_swigregister = _Simple_baseline.MyClass_swigregister +MyClass_swigregister(MyClass) + + + diff --git a/Examples/python/performance/operator/Simple_builtin.py b/Examples/python/performance/operator/Simple_builtin.py new file mode 100644 index 000000000..4ecd8a63e --- /dev/null +++ b/Examples/python/performance/operator/Simple_builtin.py @@ -0,0 +1,81 @@ +# This file was automatically generated by SWIG (http://www.swig.org). +# Version 2.0.2 +# +# Do not make changes to this file unless you know what you are doing--modify +# the SWIG interface file instead. + +from sys import version_info +if version_info >= (2,6,0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_Simple_builtin', [dirname(__file__)]) + except ImportError: + import _Simple_builtin + return _Simple_builtin + if fp is not None: + try: + _mod = imp.load_module('_Simple_builtin', fp, pathname, description) + finally: + fp.close() + return _mod + _Simple_builtin = swig_import_helper() + del swig_import_helper +else: + import _Simple_builtin +del version_info +from _Simple_builtin import * +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. +def _swig_setattr_nondynamic(self,class_type,name,value,static=1): + if (name == "thisown"): return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + if (not static) or hasattr(self,name): + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + +def _swig_setattr(self,class_type,name,value): + return _swig_setattr_nondynamic(self,class_type,name,value,0) + +def _swig_getattr(self,class_type,name): + if (name == "thisown"): return self.this.own() + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError(name) + +def _swig_repr(self): + try: strthis = "proxy of " + self.this.__repr__() + except: strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except AttributeError: + class _object : pass + _newclass = 0 + + +def _swig_setattr_nondynamic_method(set): + def set_attr(self,name,value): + if (name == "thisown"): return self.this.own(value) + if hasattr(self,name) or (name == "this"): + set(self,name,value) + else: + raise AttributeError("You cannot add attributes to %s" % self) + return set_attr + + + + + diff --git a/Examples/python/performance/operator/Simple_optimized.py b/Examples/python/performance/operator/Simple_optimized.py new file mode 100644 index 000000000..2db323a34 --- /dev/null +++ b/Examples/python/performance/operator/Simple_optimized.py @@ -0,0 +1,93 @@ +# This file was automatically generated by SWIG (http://www.swig.org). +# Version 2.0.2 +# +# Do not make changes to this file unless you know what you are doing--modify +# the SWIG interface file instead. + +from sys import version_info +if version_info >= (3,0,0): + new_instancemethod = lambda func, inst, cls: _Simple_optimized.SWIG_PyInstanceMethod_New(func) +else: + from new import instancemethod as new_instancemethod +if version_info >= (2,6,0): + def swig_import_helper(): + from os.path import dirname + import imp + fp = None + try: + fp, pathname, description = imp.find_module('_Simple_optimized', [dirname(__file__)]) + except ImportError: + import _Simple_optimized + return _Simple_optimized + if fp is not None: + try: + _mod = imp.load_module('_Simple_optimized', fp, pathname, description) + finally: + fp.close() + return _mod + _Simple_optimized = swig_import_helper() + del swig_import_helper +else: + import _Simple_optimized +del version_info +try: + _swig_property = property +except NameError: + pass # Python < 2.2 doesn't have 'property'. +def _swig_setattr_nondynamic(self,class_type,name,value,static=1): + if (name == "thisown"): return self.this.own(value) + if (name == "this"): + if type(value).__name__ == 'SwigPyObject': + self.__dict__[name] = value + return + method = class_type.__swig_setmethods__.get(name,None) + if method: return method(self,value) + if (not static) or hasattr(self,name): + self.__dict__[name] = value + else: + raise AttributeError("You cannot add attributes to %s" % self) + +def _swig_setattr(self,class_type,name,value): + return _swig_setattr_nondynamic(self,class_type,name,value,0) + +def _swig_getattr(self,class_type,name): + if (name == "thisown"): return self.this.own() + method = class_type.__swig_getmethods__.get(name,None) + if method: return method(self) + raise AttributeError(name) + +def _swig_repr(self): + try: strthis = "proxy of " + self.this.__repr__() + except: strthis = "" + return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,) + +try: + _object = object + _newclass = 1 +except AttributeError: + class _object : pass + _newclass = 0 + + +def _swig_setattr_nondynamic_method(set): + def set_attr(self,name,value): + if (name == "thisown"): return self.this.own(value) + if hasattr(self,name) or (name == "this"): + set(self,name,value) + else: + raise AttributeError("You cannot add attributes to %s" % self) + return set_attr + + +class MyClass(object): + thisown = _swig_property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc='The membership flag') + __repr__ = _swig_repr + def __init__(self): + _Simple_optimized.MyClass_swiginit(self,_Simple_optimized.new_MyClass()) + __swig_destroy__ = _Simple_optimized.delete_MyClass +MyClass.__add__ = new_instancemethod(_Simple_optimized.MyClass___add__,None,MyClass) +MyClass_swigregister = _Simple_optimized.MyClass_swigregister +MyClass_swigregister(MyClass) + + + diff --git a/Examples/python/performance/operator/runme.py b/Examples/python/performance/operator/runme.py new file mode 100644 index 000000000..7e50aff16 --- /dev/null +++ b/Examples/python/performance/operator/runme.py @@ -0,0 +1,17 @@ +#!/usr/bin/env + +import sys +from subprocess import * + +proc = Popen([sys.executable, 'runme_baseline.py'], stdout=PIPE) +(stdout, stderr) = proc.communicate() +print stdout + +proc = Popen([sys.executable, 'runme_optimized.py'], stdout=PIPE) +(stdout, stderr) = proc.communicate() +print stdout + +proc = Popen([sys.executable, 'runme_builtin.py'], stdout=PIPE) +(stdout, stderr) = proc.communicate() +print stdout + diff --git a/Examples/python/performance/operator/runme_baseline.py b/Examples/python/performance/operator/runme_baseline.py new file mode 100644 index 000000000..f7fa9094b --- /dev/null +++ b/Examples/python/performance/operator/runme_baseline.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +import Simple_baseline +import time + +t1 = time.clock() +x = Simple_baseline.MyClass() +for i in range(10000000) : + x = x + i +t2 = time.clock() +print "Simple_baseline took %f seconds" % (t2 - t1) diff --git a/Examples/python/performance/operator/runme_builtin.py b/Examples/python/performance/operator/runme_builtin.py new file mode 100644 index 000000000..73da3afb2 --- /dev/null +++ b/Examples/python/performance/operator/runme_builtin.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +import Simple_builtin +import time + +t1 = time.clock() +x = Simple_builtin.MyClass() +for i in range(10000000) : + x = x + i +t2 = time.clock() +print "Simple_builtin took %f seconds" % (t2 - t1) diff --git a/Examples/python/performance/operator/runme_optimized.py b/Examples/python/performance/operator/runme_optimized.py new file mode 100644 index 000000000..4f22e0bda --- /dev/null +++ b/Examples/python/performance/operator/runme_optimized.py @@ -0,0 +1,11 @@ +#!/usr/bin/env python + +import Simple_optimized +import time + +t1 = time.clock() +x = Simple_optimized.MyClass() +for i in range(10000000) : + x = x + i +t2 = time.clock() +print "Simple_optimized took %f seconds" % (t2 - t1)