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.
|