From: <rom...@us...> - 2006-05-17 05:54:41
|
Revision: 106 Author: roman_yakovenko Date: 2006-05-16 22:54:23 -0700 (Tue, 16 May 2006) ViewCVS: http://svn.sourceforge.net/pygccxml/?rev=106&view=rev Log Message: ----------- updating to use new functions Modified Paths: -------------- pyplusplus_dev/examples/pyboost_dev/pyboost/crc/generate_code.py pyplusplus_dev/examples/pyboost_dev/pyboost/random/generate_code.py pyplusplus_dev/examples/pyboost_dev/pyboost/random/sconscript pyplusplus_dev/examples/pyboost_dev/pyboost/rational/generate_code.py pyplusplus_dev/examples/pyboost_dev/pyboost/rational/rational_export.hpp pyplusplus_dev/examples/pyboost_dev/unittests/rational/__init__.py pyplusplus_dev/examples/pyboost_dev/unittests/rational/unittests/test_all.py pyplusplus_dev/examples/pyeasybmp_dev/pyeasybmp/generate_code.py Modified: pyplusplus_dev/examples/pyboost_dev/pyboost/crc/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/pyboost/crc/generate_code.py 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyboost_dev/pyboost/crc/generate_code.py 2006-05-17 05:54:23 UTC (rev 106) @@ -58,7 +58,7 @@ for arg in f.arguments: if arg.default_value == 'InitRem': arg.default_value = InitRem - aliases = set( map( lambda decl: decl.name, cls.typedefs ) ) + aliases = set( map( lambda decl: decl.name, cls.aliases ) ) if 'optimal_crc_type' in aliases: aliases.remove( 'optimal_crc_type' ) if len( aliases ) == 1: Modified: pyplusplus_dev/examples/pyboost_dev/pyboost/random/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/pyboost/random/generate_code.py 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyboost_dev/pyboost/random/generate_code.py 2006-05-17 05:54:23 UTC (rev 106) @@ -9,12 +9,14 @@ import sys import time import shutil +import logging import random_settings from pygccxml import parser from pygccxml import declarations -from pyplusplus import code_creators from pyplusplus import module_builder +from pyplusplus.module_builder import call_policies + LICENSE = """// Copyright 2004 Roman Yakovenko. // Distributed under the Boost Software License, Version 1.0. (See // accompanying file LICENSE_1_0.txt or copy at @@ -23,61 +25,114 @@ class code_generator_t(object): def __init__(self): - self.__file = os.path.join( random_settings.boost.include - , 'libs', 'random', 'random_test.cpp' ) + module_builder.set_logger_level( logging.INFO ) + self.__file = os.path.join( random_settings.working_dir, 'random_export.hpp' ) self.__mb = module_builder.module_builder_t( [ parser.create_cached_source_fc( self.__file - , os.path.join( random_settings.generated_files_dir, 'random_test.xml' ) ) ] + , os.path.join( random_settings.generated_files_dir, 'random.xml' ) ) ] , gccxml_path=random_settings.gccxml.executable , include_paths=[random_settings.boost.include] , define_symbols=random_settings.defined_symbols , undefine_symbols=random_settings.undefined_symbols) + self.generators = [ "ecuyer1988" + , "hellekalek1995" + , "kreutzer1986" + , "lagged_fibonacci1279" + , "lagged_fibonacci19937" + , "lagged_fibonacci2281" + , "lagged_fibonacci23209" + , "lagged_fibonacci3217" + , "lagged_fibonacci4423" + , "lagged_fibonacci44497" + , "lagged_fibonacci607" + , "lagged_fibonacci9689" + , "minstd_rand" + , "minstd_rand0" + , "mt11213b" + , "mt19937" + , "ranlux3" + , "ranlux3_01" + , "ranlux4" + , "ranlux4_01" + , "ranlux64_3_01" + , "ranlux64_4_01" + , "taus88" ] + + self.no_min_max = [ 'py_cauchy_distribution' + , 'py_bernoulli_distribution' + , 'py_binomial_distribution' + , 'py_poisson_distribution' + , 'py_normal_distribution' + , 'py_gamma_distribution' + , 'py_triangle_distribution' + , 'py_uniform_on_sphere' + , 'py_exponential_distribution' + , 'py_geometric_distribution' + , 'py_lognormal_distribution' + ] + def typedef2class( self, scope, name ): + typedef = scope.typedef( name ) + return typedef.type.declaration + def filter_declarations(self ): self.__mb.global_ns.exclude() - boost_ns = self.__mb.global_ns.namespace( 'boost', recursive=False ) - boost_ns.namespace( 'random' ).include() - boost_ns.namespaces( 'detail' ).exclude() - for cls in boost_ns.namespace( 'random' ).classes(): - if cls.ignore: - continue - if cls.name.startswith( 'const_mod' ): - cls.exclude() - continue - aliases = set([ t.name for t in cls.typedefs ]) - for alias in [ 'engine_value_type', 'value_type', 'base_type', 'engine_type' ]: - if alias in aliases: - aliases.remove( alias ) - if len( aliases ) == 1: - cls.alias = list( aliases )[0] - else: - print cls.name - for t in aliases: - print ' ', t - if cls.alias == 'ecuyer1988': - seed = cls.member_function( 'seed', arg_types=[None, None] ) - seed.exclude() + boost_ns = self.__mb.global_ns.namespace( 'boost', recursive=False ) + for name in self.generators: + gen_cls = self.typedef2class( boost_ns, name ) + gen_cls.include() + #TODO: find out why compiler complains + gen_cls.member_functions( 'seed' ).create_with_signature = True + + pyimpl_ns = boost_ns.namespace( 'pyimpl' ) + helpers = pyimpl_ns.classes( lambda decl: decl.name.startswith( 'py_') ) + helpers.include() + for helper in helpers: + distrib_cls = self.typedef2class( helper, "distribution" ) + distrib_cls.include() + var_gen_typedefs = helper.typedefs( lambda decl: decl.name.startswith( 'variate_generator_' ) ) + for var_gen_typedef in var_gen_typedefs: + var_gen_cls = var_gen_typedef.type.declaration + var_gen_cls.include() + var_gen_cls.member_operators( symbol='()' ).create_with_signature = True + if helper.name in self.no_min_max: + var_gen_cls.member_function( 'max' ).exclude() + var_gen_cls.member_function( 'min' ).exclude() - boost_ns.free_functions( "lessthan_signed_unsigned" ).exclude() - boost_ns.free_functions( "equal_signed_unsigned" ).exclude() + ecuyer1988 = self.typedef2class( boost_ns, 'ecuyer1988' ) + ecuyer1988.member_function( 'seed', arg_types=[None, None] ).exclude() - def beautify_code( self ): - extmodule = self.__mb.code_creator - position = extmodule.last_include_index() + 1 - extmodule.adopt_creator( code_creators.namespace_using_t( 'boost' ) - , position ) - self.__mb.calldefs().create_with_signature = True + def prepare_declarations( self ): + boost_ns = self.__mb.namespace( 'boost' ) + for name in self.generators: + gen_cls = self.typedef2class( boost_ns, name ) + gen_cls.alias = name + + pyimpl_ns = boost_ns.namespace( 'pyimpl' ) + helpers = pyimpl_ns.classes( lambda decl: decl.name.startswith( 'py_') ) + for helper in helpers: + distrib_cls = self.typedef2class( helper, "distribution" ) + distrib_cls.alias = helper.name[3:] #py_ + var_gen_typedefs = helper.typedefs( lambda decl: decl.name.startswith( 'variate_generator_' ) ) + for var_gen_typedef in var_gen_typedefs: + var_gen_cls = var_gen_typedef.type.declaration + var_gen_cls.alias = var_gen_typedef.name + '__' + distrib_cls.alias + + self.set_call_policies() + + def set_call_policies( self ): + boost_ns = self.__mb.namespace( 'boost' ) + engine_funcs = boost_ns.member_functions( name="engine" + , function=lambda decl: not decl.has_const ) + engine_funcs.call_policies = call_policies.return_internal_reference() + + distribution_funcs = boost_ns.member_functions( name="distribution" + , function=lambda decl: not decl.has_const ) + distribution_funcs.call_policies = call_policies.return_internal_reference() + + - def replace_include_directives( self ): - extmodule = self.__mb.code_creator - includes = filter( lambda creator: isinstance( creator, code_creators.include_t ) - , extmodule.creators ) - includes = includes[1:] #all includes except boost\python.hpp - map( lambda creator: extmodule.remove_creator( creator ), includes ) - for include_header in ['boost/random.hpp', 'boost/nondet_random.hpp' ]: - extmodule.adopt_include( code_creators.include_t( header=include_header ) ) - def customize_extmodule( self ): global LICENSE extmodule = self.__mb.code_creator @@ -87,21 +142,16 @@ extmodule.user_defined_directories.append( random_settings.working_dir ) extmodule.user_defined_directories.append( random_settings.generated_files_dir ) extmodule.precompiled_header = 'boost/python.hpp' - self.replace_include_directives() - self.beautify_code( ) - -#include "boost/random.hpp" -#include "boost/nondet_random.hpp" - + extmodule.replace_included_headers( ['boost/random.hpp', 'boost/nondet_random.hpp', 'random_export.hpp' ] ) - def write_files( self ): - self.__mb.write_module( os.path.join( random_settings.generated_files_dir, 'random.pypp.cpp' ) ) + #self.__mb.write_module( os.path.join( random_settings.generated_files_dir, 'random.pypp.cpp' ) ) + self.__mb.split_module( random_settings.generated_files_dir ) def create(self): start_time = time.clock() self.filter_declarations() - + self.prepare_declarations() self.__mb.build_code_creator( random_settings.module_name ) self.customize_extmodule() Modified: pyplusplus_dev/examples/pyboost_dev/pyboost/random/sconscript =================================================================== --- pyplusplus_dev/examples/pyboost_dev/pyboost/random/sconscript 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyboost_dev/pyboost/random/sconscript 2006-05-17 05:54:23 UTC (rev 106) @@ -26,7 +26,7 @@ , random_settings.module_name + random_settings.scons.suffix ) local_env = env.Copy() -local_env.Append( CPPPATH=[ random_settings.generated_files_dir ] ) +local_env.Append( CPPPATH=[ random_settings.working_dir, random_settings.generated_files_dir ] ) local_env.Append( CCFLAGS=get_ccflags() ) _random_ = local_env.SharedLibrary( target=random_settings.module_name Modified: pyplusplus_dev/examples/pyboost_dev/pyboost/rational/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/pyboost/rational/generate_code.py 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyboost_dev/pyboost/rational/generate_code.py 2006-05-17 05:54:23 UTC (rev 106) @@ -59,6 +59,11 @@ self.__mb.free_function( 'lcm<long>' ).include() self.__mb.free_function( 'gcd<long>' ).include() + self.__mb.free_function( 'rational_cast<double, long>' ).include() + self.__mb.free_function( 'rational_cast<double, long>' ).alias = 'to_double' + self.__mb.free_function( 'rational_cast<long, long>' ).include() + self.__mb.free_function( 'rational_cast<long, long>' ).alias = 'to_long' + self.__mb.free_function( 'abs<long>' ).include() def prepare_decls( self ): self.__mb.class_('rational<long>').alias = 'rational' Modified: pyplusplus_dev/examples/pyboost_dev/pyboost/rational/rational_export.hpp =================================================================== --- pyplusplus_dev/examples/pyboost_dev/pyboost/rational/rational_export.hpp 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyboost_dev/pyboost/rational/rational_export.hpp 2006-05-17 05:54:23 UTC (rev 106) @@ -16,6 +16,9 @@ sizeof( pyrational ); boost::gcd<long int>( 1, 1); boost::lcm<long int>( 1, 1); + boost::abs( pyrational(1) ); + boost::rational_cast<double>( pyrational(1) ); + boost::rational_cast<long int>( pyrational(1) ); } } } Modified: pyplusplus_dev/examples/pyboost_dev/unittests/rational/__init__.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/unittests/rational/__init__.py 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyboost_dev/unittests/rational/__init__.py 2006-05-17 05:54:23 UTC (rev 106) @@ -10,3 +10,7 @@ from _rational_ import lcm from _rational_ import gcd +rational.__abs__ = _rational_.abs +rational.__float__ = _rational_.to_double +rational.__long__ = _rational_.to_long +rational.__int__ = _rational_.to_long \ No newline at end of file Modified: pyplusplus_dev/examples/pyboost_dev/unittests/rational/unittests/test_all.py =================================================================== --- pyplusplus_dev/examples/pyboost_dev/unittests/rational/unittests/test_all.py 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyboost_dev/unittests/rational/unittests/test_all.py 2006-05-17 05:54:23 UTC (rev 106) @@ -9,7 +9,6 @@ import rational import unittest - class tester_t( unittest.TestCase ): def __init__( self, *args ): unittest.TestCase.__init__( self, *args ) @@ -72,6 +71,20 @@ self.failUnless( lcm(-10, -10) ==10 ) self.failUnless( lcm( 25, -10) ==50 ) + def test_abs( self ): + pyrational = rational.rational + + self.failUnless( abs( pyrational( 28, 7) ) == pyrational( 28, 7) ) + self.failUnless( abs( pyrational( -28, 7) ) == pyrational( 28, 7) ) + self.failUnless( abs( pyrational( 28, -7) ) == pyrational( 28, 7) ) + + def test_conversion( self ): + pyrational = rational.rational + + half = pyrational( 1, 2 ) + self.failUnless( float(half) == 0.5 ) + self.failUnless( int(half) == 0 ) + def create_suite(): suite = unittest.TestSuite() suite.addTest( unittest.makeSuite(tester_t) ) Modified: pyplusplus_dev/examples/pyeasybmp_dev/pyeasybmp/generate_code.py =================================================================== --- pyplusplus_dev/examples/pyeasybmp_dev/pyeasybmp/generate_code.py 2006-05-17 05:45:42 UTC (rev 105) +++ pyplusplus_dev/examples/pyeasybmp_dev/pyeasybmp/generate_code.py 2006-05-17 05:54:23 UTC (rev 106) @@ -6,7 +6,6 @@ import os from environment import settings -from pyplusplus import code_creators from pyplusplus import module_builder @@ -36,7 +35,7 @@ mb.code_creator.license = license mb.code_creator.user_defined_directories.append( settings.easybmp_path ) mb.code_creator.precompiled_header = 'boost/python.hpp' - mb.code_creator.adopt_creator( code_creators.include_t( header=header_file ), 2 ) + mb.code_creator.replace_included_headers( [header_file] ) mb.write_module( os.path.join( settings.generated_files_dir, settings.module_name + '.cpp') ) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |