$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r58220 - in sandbox/numeric_bindings/libs/numeric/bindings/tools: . templates templates/level1 templates/test
From: rutger_at_[hidden]
Date: 2009-12-07 09:45:41
Author: rutger
Date: 2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
New Revision: 58220
URL: http://svn.boost.org/trac/boost/changeset/58220
Log:
Included test program generation, some bugfixes
Text files modified: 
   sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py             |    26 +++++++++++++------                     
   sandbox/numeric_bindings/libs/numeric/bindings/tools/documentation.py              |    52 ++++++++++++++++++++++++++++++++++++++- 
   sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py           |    11 ++++---                                 
   sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py                     |    52 +++++++++++++++++++++++++++++---------- 
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp            |    14 ++++++---                               
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.qbk            |     6 ++++                                    
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp          |    16 ++++++------                            
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.qbk          |     3 +                                       
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/copy.hpp     |     2                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/scal.hpp     |     2                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/swap.hpp     |     4 +-                                      
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/CMakeLists.txt |     5 ---                                     
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/test_case.cpp  |     2                                         
   13 files changed, 142 insertions(+), 53 deletions(-)
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -51,8 +51,12 @@
     includes = [
       '#include <boost/numeric/bindings/traits/traits.hpp>',
       '#include <boost/numeric/bindings/traits/type_traits.hpp>', 
+      '#include <boost/numeric/bindings/remove_imaginary.hpp>', 
+      '#include <boost/numeric/bindings/is_mutable.hpp>', 
+      '#include <boost/numeric/bindings/value.hpp>', 
       '#include <boost/mpl/bool.hpp>',
       '#include <boost/type_traits/is_same.hpp>',
+      '#include <boost/type_traits/remove_const.hpp>',
       '#include <boost/static_assert.hpp>' ]
       
     if template_map.has_key( group_name.lower() + '.includes' ):
@@ -171,9 +175,9 @@
           arg_A = static_asserts[0]
           for arg_B in static_asserts[1:]:
             print "Adding static assert for argA", arg_A, " argb", arg_B
-            assert_line = 'BOOST_STATIC_ASSERT( (boost::is_same< ' + \
-                info_map[ subroutine ][ 'argument_map' ][ arg_A ][ 'code' ][ 'level_1_static_assert' ] + ', ' + \
-                info_map[ subroutine ][ 'argument_map' ][ arg_B ][ 'code' ][ 'level_1_static_assert' ] + \
+            assert_line = 'BOOST_STATIC_ASSERT( (is_same< ' + \
+                'typename remove_const< typename value< ' + info_map[ subroutine ][ 'argument_map' ][ arg_A ][ 'code' ][ 'level_1_static_assert' ] + ' >::type >::type, ' + \
+                'typename remove_const< typename value< ' + info_map[ subroutine ][ 'argument_map' ][ arg_B ][ 'code' ][ 'level_1_static_assert' ] + ' >::type >::type' \
                 ' >::value) );'
             level1_static_assert_list += [ assert_line ]
 
@@ -218,7 +222,7 @@
                 ", ".join( level2_arg_lists[ level2_idx ] ) )
         if len( level2_static_asserts ) > 0:
           level2_function = level2_function.replace( "$STATIC_ASSERTS", \
-                "\n".join( level2_static_asserts[ level2_idx ] ) )
+                "\n    ".join( level2_static_asserts[ level2_idx ] ) )
         level2_functions.append( level2_function )
 
       level2_template = "\n".join( level2_functions )
@@ -302,15 +306,15 @@
     result = template_map[ 'test_case.cpp' ]
     result = result.replace( '$groupname', group_name.lower() )
     result = result.replace( '$levelname', level_name.lower() )
+    result = result.replace( '$library', 'blas' )
 
     open( os.path.join( base_dir, filename ), 'wb' ).write( result )
 
 def write_cmakefile( level_properties, template_map, base_dir ):
   
   entries = '' 
-  for problem_type, problem_properties in level_properties.iteritems():
-    if problem_properties.has_key( 'routines_by_value_type' ):
-      group = problem_properties[ 'routines_by_value_type' ]
+  if level_properties.has_key( 'routines_by_value_type' ):
+      group = level_properties[ 'routines_by_value_type' ]
       for group_name, subroutines in group.iteritems():
         sub_result = template_map[ 'CMakeLists.entry' ]
         sub_result = sub_result.replace( '$groupname', group_name.lower() )
@@ -338,7 +342,7 @@
 cublas_h_path = './cublas.h'
 template_src_path = './templates'
 bindings_impl_target_path = '../../../../boost/numeric/bindings/blas/'
-test_target_path = '../test/lapack/'
+test_target_path = '../test/blas/'
 bindings_doc_target_path = '../doc/blas/'
 
 # Unable to find zdrot in cblas.h and cublas.h
@@ -413,11 +417,17 @@
     print "Creating directory " + doc_target_path
     os.mkdir( doc_target_path )
 
+  if not os.path.exists( test_target_path + level ):
+    print "Creating directory " + doc_target_path
+    os.mkdir( test_target_path + level )
+
   print level_properties
 
   if level_properties.has_key( 'routines_by_value_type' ):
     print "has key..." 
     write_functions( function_info_map, level_properties[ 'routines_by_value_type' ], templates, impl_target_path )
     documentation.write_documentation( function_info_map, level_properties[ 'routines_by_value_type' ], templates, doc_target_path )
+    write_test_case( function_info_map, level_properties[ 'routines_by_value_type' ], templates, test_target_path + level, level )
 
+  write_cmakefile( level_properties, templates, test_target_path + level )
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/documentation.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/documentation.py	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/documentation.py	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -41,9 +41,36 @@
     }
 
 number_to_text = \
-    { 2 :    'two',
+    { 1 :    'one',
+      2 :    'two',
       3 :    'three',
-      4 :    'four'
+      4 :    'four',
+      5 :    'five',
+      6 :    'six',
+      7 :    'seven',
+      8 :    'eight',
+      9 :    'nine',
+      10:    'ten',
+      11:    'eleven',
+      12:    'twelve',
+      13:    'thirteen',
+      14:    'fourteen',
+      15:    'fifteen',
+      16:    'sixteen',
+      17:    'seventeen',
+      18:    'eighteen',
+      19:    'nineteen',
+      20:    'twenty',
+      21:    'twenty-one',
+      22:    'twenty-two',
+      23:    'twenty-three',
+      24:    'twenty-four',
+      25:    'twenty-five',
+      26:    'twenty-six',
+      27:    'twenty-seven',
+      28:    'twenty-eight',
+      29:    'twenty-nine',
+      30:    'thirty',
     }
 
 def readable_join( some_tuple, last_word = "and" ):
@@ -163,6 +190,9 @@
         prototypes = []
         first_typename = None
         originating_sources = []
+        no_arguments_level0 = []
+        no_arguments_level2 = []
+
         for subroutine in subroutines:
             if parsermode == 'blas':
                 originating_sources.append( "[@http://www.netlib.org/blas/" +
@@ -176,6 +206,13 @@
                 if info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'level_2' ] != None:
                     level2_arg_list_pre += [ info_map[ subroutine ][ 'argument_map' ][ arg ][ 'code' ][ 'level_2' ] ]
 
+            # Keep track of the numbers of arguments
+            if len( info_map[ subroutine ][ 'arguments' ] ) not in no_arguments_level0:
+                no_arguments_level0.append( len( info_map[ subroutine ][ 'arguments' ] ) )
+
+            if len( level2_arg_list_pre ) not in no_arguments_level2:
+                no_arguments_level2.append( len( level2_arg_list_pre ) )
+
             level2_arg_list = []
             for arg in level2_arg_list_pre:
                 readable_arg = ''
@@ -221,6 +258,17 @@
         result = result.replace( '$SUBROUTINES', readable_join( subroutines ) )
         result = result.replace( '$header', 'boost/numeric/bindings/' + parsermode + '/' + group_name.lower() + '.hpp' )
 
+
+        if len( no_arguments_level0 ) == 1:
+            result = result.replace( '$NO_ARGUMENTS_LEVEL0', number_to_text[ no_arguments_level0[0] ] )
+        else:
+            result = result.replace( '$NO_ARGUMENTS_LEVEL0', "TODO" )
+
+        if len( no_arguments_level2 ) == 1:
+            result = result.replace( '$NO_ARGUMENTS_LEVEL2', number_to_text[ no_arguments_level2[0] ] )
+        else:
+            result = result.replace( '$NO_ARGUMENTS_LEVEL2', "TODO" )
+
         if parsermode == 'blas':
             result = result.replace( '$DISPATCH_TABLE', write_blas_dispatch_table( subroutines, info_map ) )
             result = result.replace( '$FRIENDLY_NAME', blas_friendly_name( group_name, info_map, template_map ) )
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -425,6 +425,7 @@
     result = template_map[ 'test_case.cpp' ]
     result = result.replace( '$groupname', group_name.lower() )
     result = result.replace( '$levelname', level_name.lower() )
+    result = result.replace( '$library', 'lapack' )
 
     open( os.path.join( base_dir, filename ), 'wb' ).write( result )
 
@@ -580,16 +581,16 @@
     print "Creating directory " + doc_target_path
     os.mkdir( doc_target_path )
 
-  #if not os.path.exists( test_target_path + level ):
-  #  os.mkdir( test_target_path + level )
+  if not os.path.exists( test_target_path + level ):
+    print "Creating directory " + doc_target_path
+    os.mkdir( test_target_path + level )
 
   for problem_type, problem_properties in level_properties.iteritems():
     if problem_properties.has_key( 'routines_by_value_type' ):
       write_functions( function_info_map, problem_properties[ 'routines_by_value_type' ], templates, impl_target_path )
       documentation.write_documentation( function_info_map, problem_properties[ 'routines_by_value_type' ], templates, doc_target_path )
+      write_test_case( function_info_map, problem_properties[ 'routines_by_value_type' ], templates, test_target_path + level, level )
 
-      #write_test_case( function_info_map, problem_properties[ 'routines_by_value_type' ], templates, test_target_path + level, level )
-
-  #write_cmakefile( level_properties, templates, test_target_path + level )
+  write_cmakefile( level_properties, templates, test_target_path + level )
 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -87,13 +87,13 @@
   if properties[ 'type' ] == 'vector' or properties[ 'type' ] == 'matrix':
     if properties[ 'value_type' ][ 0:7] == 'COMPLEX' or \
        properties[ 'value_type' ] == 'DOUBLE COMPLEX':
-      result = 'traits::complex_ptr(' + name.lower() + ')'
+      result = 'detail::complex_ptr(' + name.lower() + ')'
     else:
       result = name.lower()
   elif properties[ 'type' ] == 'scalar':
     if properties[ 'value_type' ][ 0:7] == 'COMPLEX' or \
        properties[ 'value_type' ] == 'DOUBLE COMPLEX':
-      result = 'traits::complex_ptr(&' + name.lower() + ')'
+      result = 'detail::complex_ptr(&' + name.lower() + ')'
     else:
       result = '&' + name.lower()
   
@@ -111,26 +111,31 @@
     result = "begin_value(" + my_name + ")"
   elif properties.has_key( 'trait_type' ):
     if properties[ 'trait_type' ] == 'lda':
-      result = "traits::leading_dimension(" + properties[ 'trait_of' ].lower() + ")"
+      result = "stride_major(" + properties[ 'trait_of' ].lower() + ")"
+      #result = "traits::leading_dimension(" + properties[ 'trait_of' ].lower() + ")"
     if properties[ 'trait_type' ] == 'num_columns':
       result = "num_columns(" + properties[ 'trait_of' ].lower() + ")"
     if properties[ 'trait_type' ] == 'num_rows':
       result = "num_rows(" + properties[ 'trait_of' ].lower() + ")"
     if properties[ 'trait_type' ] == 'trans_num_columns':
-      result = "(" + properties[ 'trait_of' ][0].lower() + "=='N' ? " + \
-               "num_columns(" + properties[ 'trait_of' ][1].lower() + ") : " + \
-               "num_rows(" + properties[ 'trait_of' ][1].lower() + "))"
+      result = "size_major(" + properties[ 'trait_of' ][1].lower() + ")"
+      #result = "(" + properties[ 'trait_of' ][0].lower() + "=='N' ? " + \
+               #"num_columns(" + properties[ 'trait_of' ][1].lower() + ") : " + \
+               #"num_rows(" + properties[ 'trait_of' ][1].lower() + "))"
     if properties[ 'trait_type' ] == 'size':
       my_name = properties[ 'trait_of' ].lower()
       referring_to_properties = arg_map[ properties[ 'trait_of' ] ]
       if 'workspace' in referring_to_properties[ 'io' ]:
         my_name = 'work.select(' + workspace_type( properties[ 'trait_of' ].lower(), referring_to_properties ) + \
                   '())'
-      result = "traits::vector_size(" + my_name + ")"
+      result = "size(" + my_name + ")"
     if properties[ 'trait_type' ] == 'uplo':
       result = "traits::matrix_uplo_tag(" + properties[ 'trait_of' ].lower() + ")"
     if properties[ 'trait_type' ] == 'stride':
-      result = "traits::vector_stride(" + properties[ 'trait_of' ].lower() + ")"
+      result = "stride(" + properties[ 'trait_of' ].lower() + ")"
+
+    if properties[ 'trait_type' ] == 'trans':
+      result = "trans_tag()"
 
   else:
     result = name.lower()
@@ -170,8 +175,8 @@
   if result != None:
     if properties[ 'value_type' ] == 'REAL' or properties[ 'value_type' ] == 'DOUBLE PRECISION':
       result = result.replace( "real_type", \
-        "typename traits::type_traits< typename value" + \
-        "< $FIRST_TYPENAME >::type >::real_type" )
+        "typename remove_imaginary< typename value" + \
+        "< $FIRST_TYPENAME >::type >::type" )
     if properties[ 'value_type' ][ 0:7] == 'COMPLEX' or \
       properties[ 'value_type' ] == 'DOUBLE COMPLEX':
       result = result.replace( "value_type", "typename value" + \
@@ -220,8 +225,8 @@
   result = None
   if 'workspace' not in properties[ 'io' ]:
     if properties[ 'type' ] == 'matrix' or properties[ 'type' ] == 'vector':
-      #result = level1_typename( name, properties ).replace( "typename ", "" )
-      result = "typename value< " + level1_typename( name, properties ).replace( "typename ", "" ) + " >::type"
+      result = level1_typename( name, properties ).replace( "typename ", "" )
+      #result = "typename value< " + level1_typename( name, properties ).replace( "typename ", "" ) + " >::type"
     elif properties[ 'type' ] == 'scalar':
       result = "TODO HOOK"
       #result = "typename value< " + level1_type( name, properties ) + " >::type"
@@ -339,12 +344,12 @@
     min_workspace_call = min_workspace_call_type( name, properties, arg_map )
     if min_workspace_call == None:
       min_workspace_call = '$CALL_MIN_SIZE'
-    result = 'BOOST_ASSERT( traits::vector_size(work.select(' + workspace_type( name, properties ) + '())) >= ' + \
+    result = 'BOOST_ASSERT( size(work.select(' + workspace_type( name, properties ) + '())) >= ' + \
              'min_size_' + name.lower() + '( ' + min_workspace_call + ' ));'
 
   # assert_size is vector-type specific
   elif properties.has_key( 'assert_size' ):
-    result = "BOOST_ASSERT( traits::vector_size(" + call_level1_type( name, properties ) + ") >= " + \
+    result = "BOOST_ASSERT( size(" + call_level1_type( name, properties ) + ") >= " + \
       expand_nested_list( properties[ 'assert_size' ], arg_map ) + ' );'
 
   return result
@@ -1108,6 +1113,7 @@
     # Try to get which variables are valid, to put this in asserts.
     #
     elif argument_properties[ 'value_type' ] == 'CHARACTER':
+      print "Trying to find assert chars..."
       match_statements = re.compile( '=(\s|or|\'[0-9A-Z]\')+[:,]', re.M ).finditer( comment_block )
       for statement in match_statements:
         print "Statement:",statement.group(0)
@@ -1119,6 +1125,19 @@
           if not letter in argument_properties[ 'assert_char' ]:
             argument_properties[ 'assert_char' ] += [ letter ]
 
+      # Try alternative regex, works for e.g. TRANS in some BLAS routines
+      match_statements = re.compile( argument_name + '\s+=(\s|or|\'[0-9A-Z]\')+', re.M ).finditer( comment_block )
+      for statement in match_statements:
+        print "Statement:",statement.group(0)
+        match_letters = re.compile( '\'([0-9A-Z])\'' ).findall( statement.group(0) )
+        for letter in match_letters:
+          print "Letter",letter
+          if not argument_properties.has_key( 'assert_char' ):
+            argument_properties[ 'assert_char' ] = []
+          if not letter in argument_properties[ 'assert_char' ]:
+            argument_properties[ 'assert_char' ] += [ letter ]
+
+      # Uplo character detection
       if argument_name == 'UPLO':
         # see if the traits are overruled through the template system
         traits_key = subroutine_group_name.lower() + '.' + subroutine_value_type + '.' + argument_name + '.trait_of'
@@ -1140,6 +1159,11 @@
             argument_properties[ 'trait_type' ] = 'uplo'
             argument_properties[ 'trait_of' ] = uplo_trait_of
 
+      # Transpose character detection
+      if argument_name[0:5] == 'TRANS':
+        argument_properties[ 'trait_type' ] = 'trans'
+        argument_properties[ 'trait_of' ] = 'A'
+
     #
     # Minimal workspace dimension recognition
     #
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.hpp	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -59,12 +59,14 @@
 }
 
 $TEMPLATE[blas_level1]
-// value-type based template
-template< typename ValueType >
+//
+// Value-type based template class
+//
+template< typename Value >
 struct $groupname_impl {
 
-    typedef ValueType value_type;
-    typedef typename remove_imaginary<ValueType>::type real_type;
+    typedef Value value_type;
+    typedef typename remove_imaginary< Value >::type real_type;
     typedef $RETURN_TYPE return_type;
 
 $INCLUDE_TEMPLATES
@@ -77,7 +79,9 @@
     }
 };
 $TEMPLATE[blas_level2]
-// generic template function to call $groupname
+//
+// Generic template function to call $groupname
+//
 template< $TYPES >
 inline typename $groupname_impl< typename value< $FIRST_TYPENAME >::type >::return_type
 $groupname( $LEVEL2 ) {
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/blas.qbk	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -22,6 +22,12 @@
 $DISPATCH_TABLE
 ]
 
+The original routines $SUBROUTINES have $NO_ARGUMENTS_LEVEL0 arguments,
+whereas `$groupname` requires $NO_ARGUMENTS_LEVEL2 arguments.
+
+[table Deduction of arguments of $groupname.
+]
+
 [heading Definition]
 Defined in header [headerref $header].
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -62,22 +62,22 @@
 #endif
 $TEMPLATE[level1_pre_header]
 // value-type based template
-template< typename ValueType, typename Enable = void >
+template< typename Value, typename Enable = void >
 struct $groupname_impl{};
 
 $TEMPLATE[level1_header1]
 // value-type based template
-template< typename ValueType >
+template< typename Value >
 struct $groupname_impl {
 
 $TEMPLATE[level1_header2]
 // $SPECIALIZATION specialization
-template< typename ValueType >
-struct $groupname_impl< ValueType, typename boost::enable_if< traits::is_$SPECIALIZATION<ValueType> >::type > {
+template< typename Value >
+struct $groupname_impl< Value, typename boost::enable_if< traits::is_$SPECIALIZATION<Value> >::type > {
 
 $TEMPLATE[level1_workspace]
-    typedef ValueType value_type;
-    typedef typename traits::type_traits<ValueType>::real_type real_type;
+    typedef Value value_type;
+    typedef typename traits::type_traits<Value>::real_type real_type;
 
 $INCLUDE_TEMPLATES
     // user-defined workspace specialization
@@ -142,8 +142,8 @@
     }
 
 $TEMPLATE[level1_noworkspace]
-    typedef ValueType value_type;
-    typedef typename traits::type_traits<ValueType>::real_type real_type;
+    typedef Value value_type;
+    typedef typename traits::type_traits<Value>::real_type real_type;
 
 $INCLUDE_TEMPLATES
     // templated specialization
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.qbk	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.qbk	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -16,7 +16,8 @@
 and is determined by the type of values contained in type `$FIRST_TYPENAME`.
 The type of values is obtained through the `value` meta-function
  `typename value<$FIRST_TYPENAME>::type`.
-Table X below illustrates to which specific routine this dispatching will take place. 
+The dispatching table below illustrates to which specific routine 
+the code path will be generated. 
 
 [table Dispatching of $groupname
 $DISPATCH_TABLE
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/copy.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/copy.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/copy.hpp	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -8,5 +8,5 @@
  INCY      (input) INTEGER
            The increment of Y
  X         (input) DATATYPE array of length (N)
- Y         (input) DATATYPE array of length (N)
+ Y         (output) DATATYPE array of length (N)
 $TEMPLATE[end]
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/scal.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/scal.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/scal.hpp	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -5,7 +5,7 @@
            The length of array X
  INCX      (input) INTEGER
            The increment of X
- X         (input) DATATYPE array of length (N)
+ X         (input/output) DATATYPE array of length (N)
  A         (input) DATATYPE
 $TEMPLATE[scal.all.cblas_alias]
 A,ALPHA
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/swap.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/swap.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/level1/swap.hpp	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -7,6 +7,6 @@
            The increment of X
  INCY      (input) INTEGER
            The increment of Y
- X        (output) DATATYPE
- Y        (output) DATATYPE
+ X        (input/output) DATATYPE
+ Y        (input/output) DATATYPE
 $TEMPLATE[end]
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/CMakeLists.txt
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/CMakeLists.txt	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/CMakeLists.txt	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -10,11 +10,6 @@
 # PLEASE DO NOT EDIT!
 #
 
-enable_language( Fortran )
-find_package( LAPACK REQUIRED )
-
-#include_directories( . )
-
 $ENTRIES
 
 $TEMPLATE[CMakeLists.entry]
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/test_case.cpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/test_case.cpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/test/test_case.cpp	2009-12-07 09:45:39 EST (Mon, 07 Dec 2009)
@@ -13,7 +13,7 @@
 //
 
 #include <cstdlib>
-#include <boost/numeric/bindings/lapack/$levelname/$groupname.hpp>
+#include <boost/numeric/bindings/$library/$levelname/$groupname.hpp>
 
 int main(int argc, char *argv[]) {