← Back to team overview

yade-dev team mailing list archive

[Branch ~yade-dev/yade/trunk] Rev 2029: 1. Fix compilation for per-class builds

 

------------------------------------------------------------
revno: 2029
committer: Václav Šmilauer <eudoxos@xxxxxxxx>
branch nick: trunk
timestamp: Mon 2010-02-15 20:27:34 +0100
message:
  1. Fix compilation for per-class builds
  2. Add manual wrapper for wm3 classes instead of the auto-generated one, to ease transition to eigen. Let me know if it broke something.
added:
  py/miniWm3Wrap/manualWrap.cpp
modified:
  pkg/common/Engine/PartialEngine/GravityEngines.hpp
  py/SConscript
  py/miniWm3Wrap/miniWm3Wrap-generate.py
  py/miniWm3Wrap/miniWm3Wrap.cpp


--
lp:yade
https://code.launchpad.net/~yade-dev/yade/trunk

Your team Yade developers is subscribed to branch lp:yade.
To unsubscribe from this branch go to https://code.launchpad.net/~yade-dev/yade/trunk/+edit-subscription.
=== modified file 'pkg/common/Engine/PartialEngine/GravityEngines.hpp'
--- pkg/common/Engine/PartialEngine/GravityEngines.hpp	2010-02-09 16:50:30 +0000
+++ pkg/common/Engine/PartialEngine/GravityEngines.hpp	2010-02-15 19:27:34 +0000
@@ -3,6 +3,7 @@
 #pragma once
 #include<yade/core/GlobalEngine.hpp>
 #include<yade/core/Interaction.hpp>
+#include<yade/core/Body.hpp>
 
 /*! Homogeneous gravity field; applies gravity×mass force on all bodies. */
 class GravityEngine: public GlobalEngine{

=== modified file 'py/SConscript'
--- py/SConscript	2010-01-21 13:50:32 +0000
+++ py/SConscript	2010-02-15 19:27:34 +0000
@@ -46,7 +46,8 @@
 # 3rd party modules:
 # ==================
 env.Install('$PREFIX/lib/yade$SUFFIX/py',[
-	env.SharedLibrary('miniWm3Wrap',['miniWm3Wrap/miniWm3Wrap.cpp'],SHLIBPREFIX='',CPPPATH=env['CPPPATH']+['../lib/'],LIBS=env['LIBS']+['core']),
+	#env.SharedLibrary('miniWm3Wrap',['miniWm3Wrap/miniWm3Wrap.cpp'],SHLIBPREFIX='',CPPPATH=env['CPPPATH']+['../lib/'],LIBS=env['LIBS']+['core']),
+	env.SharedLibrary('miniWm3Wrap',['miniWm3Wrap/manualWrap.cpp'],SHLIBPREFIX='',CPPPATH=env['CPPPATH']+['../lib/'],LIBS=env['LIBS']+['core']),
 ])
 
 if 'YADE_GTS' in env['CPPDEFINES']:

=== added file 'py/miniWm3Wrap/manualWrap.cpp'
--- py/miniWm3Wrap/manualWrap.cpp	1970-01-01 00:00:00 +0000
+++ py/miniWm3Wrap/manualWrap.cpp	2010-02-15 19:27:34 +0000
@@ -0,0 +1,209 @@
+// 2009 © Václav Šmilauer <eudoxos@xxxxxxxx>
+#include<boost/python.hpp>
+#include<boost/lexical_cast.hpp>
+#include<string>
+#include<stdexcept>
+#include<sstream>
+
+#include<yade/lib-base/Math.hpp>
+
+namespace bp=boost::python;
+
+#define IDX_CHECK(i,MAX){ if(i<0 || i>=MAX) { PyErr_SetString(PyExc_IndexError, ("Index out of range 0.." + boost::lexical_cast<std::string>(MAX-1)).c_str()); bp::throw_error_already_set(); } }
+#define IDX2_CHECKED_TUPLE_INTS(tuple,max2,arr2) {int l=bp::len(tuple); if(l!=2) { PyErr_SetString(PyExc_IndexError,"Index must be integer or a 2-tuple"); bp::throw_error_already_set(); } for(int _i=0; _i<2; _i++) { bp::extract<int> val(tuple[_i]); if(!val.check()) throw std::runtime_error("Unable to convert "+boost::lexical_cast<std::string>(_i)+"-th index to int."); int v=val(); IDX_CHECK(v,max2[_i]); arr2[_i]=v; }  }
+
+void Vector2_set_item(Vector2r & self, int idx, Real value){ IDX_CHECK(idx,2); self[idx]=value; }
+void Vector3_set_item(Vector3r & self, int idx, Real value){ IDX_CHECK(idx,3); self[idx]=value; }
+void Quaternion_set_item(Quaternionr & self, int idx, Real value){ IDX_CHECK(idx,4); self[idx]=value; }
+void Matrix3_set_item(Matrix3r & self, bp::tuple _idx, Real value){ int idx[2]; int mx[2]={3,3}; IDX2_CHECKED_TUPLE_INTS(_idx,mx,idx); self(idx[0],idx[1])=value; }
+void Matrix3_set_item_linear(Matrix3r & self, int idx, Real value){ IDX_CHECK(idx,9); self(idx/3,idx%3)=value; }
+
+Real Vector2_get_item(const Vector2r & self, int idx){ IDX_CHECK(idx,2); return self[idx]; }
+Real Vector3_get_item(const Vector3r & self, int idx){ IDX_CHECK(idx,3); return self[idx]; }
+Real Quaternion_get_item(const Quaternionr & self, int idx){ IDX_CHECK(idx,4); return self[idx]; }
+Real Matrix3_get_item(Matrix3r & self, bp::tuple _idx){ int idx[2]; int mx[2]={3,3}; IDX2_CHECKED_TUPLE_INTS(_idx,mx,idx); return self(idx[0],idx[1]); }
+Real Matrix3_get_item_linear(Matrix3r & self, int idx){ IDX_CHECK(idx,9); return self(idx/3,idx%3); }
+
+std::string Vector2_str(const Vector2r & self){ return std::string("Vector2(")+boost::lexical_cast<std::string>(self[0])+","+boost::lexical_cast<std::string>(self[1])+")";}
+std::string Vector3_str(const Vector3r & self){ return std::string("Vector3(")+boost::lexical_cast<std::string>(self[0])+","+boost::lexical_cast<std::string>(self[1])+","+boost::lexical_cast<std::string>(self[2])+")";}
+std::string Quaternion_str(const Quaternionr & self){ Vector3r axis; Real angle; self.ToAxisAngle(axis,angle); return std::string("Quaternion((")+boost::lexical_cast<std::string>(axis[0])+","+boost::lexical_cast<std::string>(axis[1])+","+boost::lexical_cast<std::string>(axis[2])+"),"+boost::lexical_cast<std::string>(angle)+")";}
+std::string Matrix3_str(const Matrix3r & self){ std::ostringstream oss; oss<<"Matrix3("; for(int i=0; i<3; i++) for(int j=0; j<3; j++) oss<<self(i,j)<<((i==2 && j==2)?")":",")<<((i<2 && j==2)?" ":""); return oss.str(); }
+
+int Vector2_len(){return 2;}
+int Vector3_len(){return 3;}
+int Quaternion_len(){return 4;}
+int Matrix3_len(){return 9;}
+#undef IDX_CHECK
+
+#if 1
+	// workarounds for static methods; disabled for now, see comment in miniWm3Wrap-generate.py
+	#define _WORKAROUND(clss,member) clss clss##_##member(const clss& self){return clss::member;}
+	_WORKAROUND(Vector2r,ONE); _WORKAROUND(Vector2r,UNIT_X); _WORKAROUND(Vector2r,UNIT_Y); _WORKAROUND(Vector2r,ZERO);
+	_WORKAROUND(Vector3r,ONE); _WORKAROUND(Vector3r,UNIT_X); _WORKAROUND(Vector3r,UNIT_Y); _WORKAROUND(Vector3r,UNIT_Z); _WORKAROUND(Vector3r,ZERO);
+	_WORKAROUND(Quaternionr,IDENTITY); _WORKAROUND(Quaternionr,ZERO);
+	_WORKAROUND(Matrix3r,IDENTITY); _WORKAROUND(Matrix3r,ZERO);
+	#undef _WORKAROUND
+#endif
+
+// automagic converter from tuple to Vector3r
+struct custom_Vector3r_from_tuple{
+	custom_Vector3r_from_tuple(){
+		bp::converter::registry::push_back(&convertible,&construct,bp::type_id<Vector3r>());
+	}
+	static void* convertible(PyObject* obj_ptr){
+		if(!PySequence_Check(obj_ptr) || PySequence_Size(obj_ptr)!=3) return 0;
+		return obj_ptr;
+	}
+	static void construct(PyObject* obj_ptr, bp::converter::rvalue_from_python_stage1_data* data){
+		void* storage=((bp::converter::rvalue_from_python_storage<Vector3r>*)(data))->storage.bytes;
+		new (storage) Vector3r(bp::extract<Real>(PySequence_GetItem(obj_ptr,0)),bp::extract<Real>(PySequence_GetItem(obj_ptr,1)),bp::extract<Real>(PySequence_GetItem(obj_ptr,2)));
+		data->convertible=storage;
+	}
+};
+
+
+static bp::tuple Quaternion_ToAxisAngle(const Quaternionr& q){
+    Vector3r axis; Real angle;
+    q.ToAxisAngle(axis,angle);
+    return bp::make_tuple(axis,angle);
+}
+
+BOOST_PYTHON_MODULE(miniWm3Wrap){
+	bp::class_<Matrix3r >("Matrix3",bp::init<bp::optional<bool> >((bp::arg("zero")=true)))
+		.def(bp::init<Matrix3r const &>((bp::arg("m"))))
+		.def(bp::init<Real,Real,Real,Real,Real,Real,Real,Real,Real>((bp::arg("n00"),bp::arg("n01"),bp::arg("n02"),bp::arg("n10"),bp::arg("n11"),bp::arg("n12"),bp::arg("n20"),bp::arg("n21"),bp::arg("n22"))))
+		// .def(bp::init<const Vector3r&, const Vector3r&, const Vector3r&, bool>((bp::arg("v0"),bp::arg("v1"),bp::arg("v2"),bp::arg("columns"))))
+		.def(bp::init<Real,Real,Real>((bp::arg("n00"),bp::arg("n11"),bp::arg("n22"))))
+		//.def(bp::init<Vector3r>((bp::arg("diag"))))
+		.def("Determinant",&Matrix3r::Determinant)
+		.def("Inverse",&Matrix3r::Inverse)
+		.def("Transpose",&Matrix3r::Transpose)
+		.def(bp::self * bp::self)
+		//.def(bp::self *= bp::self)
+		.def(bp::self + bp::self)
+		.def(bp::self += bp::self)
+		.def(bp::self - bp::self)
+		.def(bp::self -= bp::self)
+		.def(bp::self * bp::other<Real>())
+		.def(bp::other<Real>() * bp::self)
+		.def(bp::self *= bp::other<Real>())
+		.def(bp::self / bp::other<Real>())
+		.def(bp::self /= bp::other<Real>())
+		.def(bp::self == bp::self)
+		.def(bp::self != bp::self)
+		.def(-bp::self)
+ 		.def("__len__",&::Matrix3_len).staticmethod("__len__")
+		.def("__setitem__",&::Matrix3_set_item)
+		.def("__getitem__",&::Matrix3_get_item)
+		.def("__str__",&::Matrix3_str)
+		.def("__repr__",&::Matrix3_str)
+		/* extras for matrices */
+		.def("__setitem__",&::Matrix3_set_item_linear)
+		.def("__getitem__",&::Matrix3_get_item_linear)
+		.def_readonly("IDENTITY",Matrix3r::IDENTITY)
+		.def_readonly("ZERO",Matrix3r::ZERO)
+	;
+	bp::class_<Quaternionr>("Quaternion",bp::init<>())
+		.def(bp::init<Vector3r,Real>((bp::arg("axis"),bp::arg("angle"))))
+		//.def(bp::init<Matrix3r>((bp::arg("rotMatrix"))))
+		.def(bp::init<Quaternionr>((bp::arg("other"))))
+		.def("Align",&Quaternionr::Align,((bp::arg("v1"),bp::arg("v2"))))
+		.def("Conjugate",&Quaternionr::Conjugate)
+		.def("FromAxisAngle",&Quaternionr::FromAxisAngle,((bp::arg("axis"),bp::arg("angle"))))
+		.def("Inverse",&Quaternionr::Inverse)
+		.def("Length",&Quaternionr::Length)
+		.def("Normalize",&Quaternionr::Normalize)
+		.def("ToRotationMatrix",&Quaternionr::ToRotationMatrix)
+		.def("ToAxisAngle",Quaternion_ToAxisAngle)
+		.def(bp::self != bp::self)
+		.def(bp::self == bp::self)
+		.def(bp::self * bp::self)
+		.def(bp::self * bp::other<Real>())
+		.def(bp::other<Real>() * bp::self)
+		.def(bp::self * bp::other<Vector3r>())
+		//.def(bp::self *= bp::other<Real>())
+		.def(bp::self + bp::self)
+		.def(bp::self += bp::self)
+		//.def(bp::self - bp::self)
+		//.def(-bp::self)
+		//.def(bp::self -= bp::self)
+		//.def(bp::self / bp::other<Real>())
+		//.def(bp::self /= bp::other<Real>())
+		.def("__len__",&::Quaternion_len).staticmethod("__len__")
+		.def("__setitem__",&::Quaternion_set_item)
+		.def("__getitem__",&::Quaternion_get_item)
+		.def("__str__",&::Quaternion_str)
+		.def("__repr__",&::Quaternion_str)
+		.def_readonly("IDENTITY",Matrix3r::IDENTITY)
+		.def_readonly("ZERO",Matrix3r::ZERO)
+	;
+	bp::class_<Vector2r>("Vector2",bp::init<>())
+		.def(bp::init<Vector2r>((bp::arg("other"))))
+		.def(bp::init<Real,Real>((bp::arg("x"),bp::arg("y"))))
+		.def("Dot",&Vector2r::Dot)
+		.def("Length",&Vector2r::Length)
+		.def("SquaredLength",&Vector2r::SquaredLength)
+		.def("Normalize",&Vector2r::Normalize)
+		.def(bp::self != bp::self)
+		.def(bp::self == bp::self)
+		.def(bp::self * bp::other<Real>())
+		.def(bp::other<Real>() * bp::self)
+		.def(bp::self *= bp::other<Real>())
+		.def(bp::self + bp::self)
+		.def(bp::self += bp::self)
+		.def(bp::self - bp::self)
+		.def(bp::self -= bp::self)
+		.def(-bp::self)
+		.def(bp::self / bp::other<Real>())
+		.def(bp::self /= bp::other<Real>())
+		.def("__len__",&::Vector2_len).staticmethod("__len__")
+		.def("__setitem__",&::Vector2_set_item)
+		.def("__getitem__",&::Vector2_get_item)
+		.def("__str__",&::Vector2_str)
+		.def("__repr__",&::Vector2_str)
+		.def_readonly("ONE",Vector2r::ONE)
+		.def_readonly("UNIT_X",Vector2r::UNIT_X)
+		.def_readonly("UNIT_Y",Vector2r::UNIT_Y)
+		.def_readonly("ZERO",Vector2r::ZERO)
+	;
+	bp::class_<Vector3r>("Vector3",bp::init<>())
+		.def(bp::init<Vector3r>((bp::arg("other"))))
+		.def(bp::init<Real,Real,Real>((bp::arg("x"),bp::arg("y"),bp::arg("z"))))
+		.def("Dot",&Vector3r::Dot)
+		.def("Cross",&Vector3r::Cross)
+		.def("Length",&Vector3r::Length)
+		.def("SquaredLength",&Vector3r::SquaredLength)
+		.def("Normalize",&Vector3r::Normalize)
+		.def(bp::self != bp::self)
+		.def(bp::self == bp::self)
+		.def(bp::self * bp::other<Real>())
+		.def(bp::other<Real>() * bp::self)
+		.def(bp::self *= bp::other<Real>())
+		.def(bp::self + bp::self)
+		.def(bp::self += bp::self)
+		.def(bp::self - bp::self)
+		.def(bp::self -= bp::self)
+		.def(-bp::self)
+		.def(bp::self / bp::other<Real>())
+		.def(bp::self /= bp::other<Real>())
+		.def("__len__",&::Vector3_len).staticmethod("__len__")
+		.def("__setitem__",&::Vector3_set_item)
+		.def("__getitem__",&::Vector3_get_item)
+		.def("__str__",&::Vector3_str)
+		.def("__repr__",&::Vector3_str)
+		.def_readonly("ONE",Vector3r::ONE)
+		.def_readonly("UNIT_X",Vector3r::UNIT_X)
+		.def_readonly("UNIT_Y",Vector3r::UNIT_Y)
+		.def_readonly("UNIT_Z",Vector3r::UNIT_Z)
+		.def_readonly("ZERO",Vector3r::ZERO)
+	;	
+	
+};
+
+
+
+
+
+
+
+

=== modified file 'py/miniWm3Wrap/miniWm3Wrap-generate.py'
--- py/miniWm3Wrap/miniWm3Wrap-generate.py	2010-01-22 21:07:37 +0000
+++ py/miniWm3Wrap/miniWm3Wrap-generate.py	2010-02-15 19:27:34 +0000
@@ -12,8 +12,8 @@
 #Creating an instance of class that will help you to expose your declarations
 mb = module_builder.module_builder_t( [os.path.abspath("miniWm3Wrap-toExpose.hpp")]
                                       , working_directory=r"."
-                                      , include_paths=['../../lib','../../lib/miniWm3','/usr/include']
-                                      , define_symbols=['USE_MINIWM3'] )
+                                      , include_paths=['../../lib','../../lib/miniWm3','../../../build-trunk-dbg/include/yade-trunk','/usr/include']
+                                      , define_symbols=['USE_MINIWM3','YADE_EIGEN'] )
 # exclude exerything first
 mb.decls().exclude()
 # include what is in Wm3
@@ -30,8 +30,8 @@
 # exclude functions&operators returning double& (not representable)
 mb.member_functions(return_type='double &').exclude()
 mb.global_ns.operators(return_type='double &').exclude() # global_ns is a bug workaround: http://www.mail-archive.com/cplusplus-sig@xxxxxxxxxx/msg00730.html
-# exclude everything (member functions, operators, ...) taking or returning types we do not wrap
-mb.decls(lambda d: 'Matrix2' in str(d) or 'Vector4' in str(d)).exclude()
+## exclude everything (member functions, operators, ...) taking or returning types we do not wrap
+## mb.decls(lambda d: 'Matrix2' in str(d) or 'Vector4' in str(d)).exclude()
 # exclude operator[] since we implement __getitem__/__setitem__ by ourselves
 mb.member_operators(lambda o: o.symbol=='[]').exclude()
 # exclude From/To Euler angles, since we don't need it
@@ -40,6 +40,17 @@
 mb.decls(lambda d: d.name in ('componentMaxVector','componentMinVector','componentSum','diagDiv','diagMult','quaternionFromAxes','quaternionToAxes','quaternionToEulerAngles','quaterniontoGLMatrix','unitVectorsAngle')).exclude()
 
 
+## exclude what is not in the wm3-eigen glue
+if 1:
+	undef="""
+Adjoint DiagonalTimes GetColumnMajor Orthonormalize QDUDecomposition QForm SingularValueComposition SingularValueDecomposition Slerp TimesDiagonal TimesTranspose TransposeTimes MakeTensorProduct
+DecomposeSwingTimesTwist DecomposeTwistTimesSwing Exp FromRotationMatrix Intermediate Log SlerpExtraSpins Squad
+ComputeExtremes DotPerp GenerateOrthonormalBasis GetBarycentrics Orthonormalize Perp UnitPerp
+ComputeExtremes GenerateOrthonormalBasis GetBarycentrics Orthonormalize
+MakeDiagonal MakeZero MakeIdentity""".split()
+	mb.member_functions(lambda d: d.name in undef).exclude()
+
+
 # register manual wraps
 v2,v3,q4,m3=mb.class_(lambda d: d.name=='Vector2<double>'),mb.class_(lambda d: d.name=='Vector3<double>'),mb.class_(lambda d: d.name=='Quaternion<double>'),mb.class_(lambda d: d.name=='Matrix3<double>')
 v2.add_registration_code('def("__len__",&::Vector2_len)   .staticmethod("__len__").def("__setitem__",&::Vector2_set_item)   .def("__getitem__",&::Vector2_get_item)   .def("__str__",&::Vector2_str)   .def("__repr__",&::Vector2_str)')
@@ -50,7 +61,7 @@
 
 ## workarounds for def_readonly on static members
 # disabled, doesn't work on types (e.g. Vector3.ZERO), must pass instance (e.g. Vector3().ZERO)
-if 1:
+if 0:
 	mb.decls(lambda d: 'UNIT_' in str(d) or 'ZERO' in str(d) or 'IDENTITY' in str(d) or 'ONE' in str(d)).exclude()
 	v2.add_registration_code('.'.join('add_property("%s",::Vector2r_%s)'%(prop,prop) for prop in ('ZERO','UNIT_X','UNIT_Y','ONE')))
 	v3.add_registration_code('.'.join('add_property("%s",::Vector3r_%s)'%(prop,prop) for prop in ('ZERO','UNIT_X','UNIT_Y','UNIT_Z','ONE')))
@@ -83,4 +94,7 @@
 		except IOError: pass
 ## remove absolute path from the generated file (ugly, oh well)
 os.system(r"perl -pi -e 's@^#include\s*\"/.*/(.*)\"\s*$@#include \"\1\"\n@' miniWm3Wrap.cpp")
+os.system(r"perl -pi -e 's@(::)?Wm3::@@g' miniWm3Wrap.cpp")
+os.system(r"perl -pi -e 's@^.*double const \*.*$@@' miniWm3Wrap.cpp")
+os.system(r"perl -pi -e 's@^.*implicitly_convertible.*$@@' miniWm3Wrap.cpp")
 

=== modified file 'py/miniWm3Wrap/miniWm3Wrap.cpp'
--- py/miniWm3Wrap/miniWm3Wrap.cpp	2010-02-14 21:23:14 +0000
+++ py/miniWm3Wrap/miniWm3Wrap.cpp	2010-02-15 19:27:34 +0000
@@ -31,25 +31,15 @@
         typedef bp::class_< Matrix3< double > > Matrix3_exposer_t;
         Matrix3_exposer_t Matrix3_exposer = Matrix3_exposer_t( "Matrix3", bp::init< bp::optional< bool > >(( bp::arg("bZero")=(bool)(true) )) );
         bp::scope Matrix3_scope( Matrix3_exposer );
-        bp::implicitly_convertible< bool, Matrix3< double > >();
+
         Matrix3_exposer.def( bp::init< Matrix3< double > const & >(( bp::arg("rkM") )) );
         Matrix3_exposer.def( bp::init< double, double, double, double, double, double, double, double, double >(( bp::arg("fM00"), bp::arg("fM01"), bp::arg("fM02"), bp::arg("fM10"), bp::arg("fM11"), bp::arg("fM12"), bp::arg("fM20"), bp::arg("fM21"), bp::arg("fM22") )) );
-        Matrix3_exposer.def( bp::init< double const *, bool >(( bp::arg("afEntry"), bp::arg("bRowMajor") )) );
+
         Matrix3_exposer.def( bp::init< Vector3< double > const &, Vector3< double > const &, Vector3< double > const &, bool >(( bp::arg("rkU"), bp::arg("rkV"), bp::arg("rkW"), bp::arg("bColumns") )) );
         Matrix3_exposer.def( bp::init< Vector3< double > const *, bool >(( bp::arg("akV"), bp::arg("bColumns") )) );
         Matrix3_exposer.def( bp::init< double, double, double >(( bp::arg("fM00"), bp::arg("fM11"), bp::arg("fM22") )) );
         Matrix3_exposer.def( bp::init< Vector3< double > const &, double >(( bp::arg("rkAxis"), bp::arg("fAngle") )) );
         Matrix3_exposer.def( bp::init< Vector3< double > const &, Vector3< double > const & >(( bp::arg("rkU"), bp::arg("rkV") )) );
-        { //Matrix3< double >::Adjoint
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > ( exported_class_t::*Adjoint_function_type )(  ) const;
-            
-            Matrix3_exposer.def( 
-                "Adjoint"
-                , Adjoint_function_type( &Matrix3< double >::Adjoint ) );
-        
-        }
         { //Matrix3< double >::Determinant
         
             typedef Matrix3< double > exported_class_t;
@@ -60,17 +50,6 @@
                 , Determinant_function_type( &Matrix3< double >::Determinant ) );
         
         }
-        { //Matrix3< double >::DiagonalTimes
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > ( exported_class_t::*DiagonalTimes_function_type )( Vector3< double > const & ) const;
-            
-            Matrix3_exposer.def( 
-                "DiagonalTimes"
-                , DiagonalTimes_function_type( &Matrix3< double >::DiagonalTimes )
-                , ( bp::arg("rkDiag") ) );
-        
-        }
         { //Matrix3< double >::EigenDecomposition
         
             typedef Matrix3< double > exported_class_t;
@@ -105,17 +84,6 @@
                 , ( bp::arg("iCol") ) );
         
         }
-        { //Matrix3< double >::GetColumnMajor
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef void ( exported_class_t::*GetColumnMajor_function_type )( double * ) const;
-            
-            Matrix3_exposer.def( 
-                "GetColumnMajor"
-                , GetColumnMajor_function_type( &Matrix3< double >::GetColumnMajor )
-                , ( bp::arg("afCMajor") ) );
-        
-        }
         { //Matrix3< double >::GetRow
         
             typedef Matrix3< double > exported_class_t;
@@ -137,84 +105,6 @@
                 , Inverse_function_type( &Matrix3< double >::Inverse ) );
         
         }
-        { //Matrix3< double >::MakeDiagonal
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > & ( exported_class_t::*MakeDiagonal_function_type )( double,double,double ) ;
-            
-            Matrix3_exposer.def( 
-                "MakeDiagonal"
-                , MakeDiagonal_function_type( &Matrix3< double >::MakeDiagonal )
-                , ( bp::arg("fM00"), bp::arg("fM11"), bp::arg("fM22") )
-                , bp::return_self< >() );
-        
-        }
-        { //Matrix3< double >::MakeIdentity
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > & ( exported_class_t::*MakeIdentity_function_type )(  ) ;
-            
-            Matrix3_exposer.def( 
-                "MakeIdentity"
-                , MakeIdentity_function_type( &Matrix3< double >::MakeIdentity )
-                , bp::return_self< >() );
-        
-        }
-        { //Matrix3< double >::MakeTensorProduct
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > & ( exported_class_t::*MakeTensorProduct_function_type )( Vector3< double > const &,Vector3< double > const & ) ;
-            
-            Matrix3_exposer.def( 
-                "MakeTensorProduct"
-                , MakeTensorProduct_function_type( &Matrix3< double >::MakeTensorProduct )
-                , ( bp::arg("rkU"), bp::arg("rkV") )
-                , bp::return_self< >() );
-        
-        }
-        { //Matrix3< double >::MakeZero
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > & ( exported_class_t::*MakeZero_function_type )(  ) ;
-            
-            Matrix3_exposer.def( 
-                "MakeZero"
-                , MakeZero_function_type( &Matrix3< double >::MakeZero )
-                , bp::return_self< >() );
-        
-        }
-        { //Matrix3< double >::Orthonormalize
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef void ( exported_class_t::*Orthonormalize_function_type )(  ) ;
-            
-            Matrix3_exposer.def( 
-                "Orthonormalize"
-                , Orthonormalize_function_type( &Matrix3< double >::Orthonormalize ) );
-        
-        }
-        { //Matrix3< double >::QDUDecomposition
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef void ( exported_class_t::*QDUDecomposition_function_type )( Matrix3< double > &,Matrix3< double > &,Matrix3< double > & ) const;
-            
-            Matrix3_exposer.def( 
-                "QDUDecomposition"
-                , QDUDecomposition_function_type( &Matrix3< double >::QDUDecomposition )
-                , ( bp::arg("rkQ"), bp::arg("rkD"), bp::arg("rkU") ) );
-        
-        }
-        { //Matrix3< double >::QForm
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef double ( exported_class_t::*QForm_function_type )( Vector3< double > const &,Vector3< double > const & ) const;
-            
-            Matrix3_exposer.def( 
-                "QForm"
-                , QForm_function_type( &Matrix3< double >::QForm )
-                , ( bp::arg("rkU"), bp::arg("rkV") ) );
-        
-        }
         { //Matrix3< double >::SetColumn
         
             typedef Matrix3< double > exported_class_t;
@@ -237,61 +127,6 @@
                 , ( bp::arg("iRow"), bp::arg("rkV") ) );
         
         }
-        { //Matrix3< double >::SingularValueComposition
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef void ( exported_class_t::*SingularValueComposition_function_type )( Matrix3< double > const &,Matrix3< double > const &,Matrix3< double > const & ) ;
-            
-            Matrix3_exposer.def( 
-                "SingularValueComposition"
-                , SingularValueComposition_function_type( &Matrix3< double >::SingularValueComposition )
-                , ( bp::arg("rkL"), bp::arg("rkS"), bp::arg("rkR") ) );
-        
-        }
-        { //Matrix3< double >::SingularValueDecomposition
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef void ( exported_class_t::*SingularValueDecomposition_function_type )( Matrix3< double > &,Matrix3< double > &,Matrix3< double > & ) const;
-            
-            Matrix3_exposer.def( 
-                "SingularValueDecomposition"
-                , SingularValueDecomposition_function_type( &Matrix3< double >::SingularValueDecomposition )
-                , ( bp::arg("rkL"), bp::arg("rkS"), bp::arg("rkR") ) );
-        
-        }
-        { //Matrix3< double >::Slerp
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > ( *Slerp_function_type )( double,Matrix3< double > const &,Matrix3< double > const & );
-            
-            Matrix3_exposer.def( 
-                "Slerp"
-                , Slerp_function_type( &Matrix3< double >::Slerp )
-                , ( bp::arg("fT"), bp::arg("rkR0"), bp::arg("rkR1") ) );
-        
-        }
-        { //Matrix3< double >::TimesDiagonal
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > ( exported_class_t::*TimesDiagonal_function_type )( Vector3< double > const & ) const;
-            
-            Matrix3_exposer.def( 
-                "TimesDiagonal"
-                , TimesDiagonal_function_type( &Matrix3< double >::TimesDiagonal )
-                , ( bp::arg("rkDiag") ) );
-        
-        }
-        { //Matrix3< double >::TimesTranspose
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > ( exported_class_t::*TimesTranspose_function_type )( Matrix3< double > const & ) const;
-            
-            Matrix3_exposer.def( 
-                "TimesTranspose"
-                , TimesTranspose_function_type( &Matrix3< double >::TimesTranspose )
-                , ( bp::arg("rkM") ) );
-        
-        }
         { //Matrix3< double >::ToAxisAngle
         
             typedef Matrix3< double > exported_class_t;
@@ -313,17 +148,6 @@
                 , Transpose_function_type( &Matrix3< double >::Transpose ) );
         
         }
-        { //Matrix3< double >::TransposeTimes
-        
-            typedef Matrix3< double > exported_class_t;
-            typedef Matrix3< double > ( exported_class_t::*TransposeTimes_function_type )( Matrix3< double > const & ) const;
-            
-            Matrix3_exposer.def( 
-                "TransposeTimes"
-                , TransposeTimes_function_type( &Matrix3< double >::TransposeTimes )
-                , ( bp::arg("rkM") ) );
-        
-        }
         Matrix3_exposer.def( bp::self != bp::self );
         { //Matrix3< double >::operator()
         
@@ -364,10 +188,10 @@
         Matrix3_exposer.def( bp::self == bp::self );
         Matrix3_exposer.def( bp::self > bp::self );
         Matrix3_exposer.def( bp::self >= bp::self );
-        Matrix3_exposer.staticmethod( "Slerp" );
+        Matrix3_exposer.def_readonly( "IDENTITY", Matrix3< double >::IDENTITY );
+        Matrix3_exposer.def_readonly( "ZERO", Matrix3< double >::ZERO );
         Matrix3_exposer.def( bp::other< Real >() * bp::self );
         Matrix3_exposer.def("__len__",&::Matrix3_len).staticmethod("__len__")   .def("__setitem__",&::Matrix3_set_item)   .def("__getitem__",&::Matrix3_get_item)   .def("__str__",&::Matrix3_str)   .def("__repr__",&::Matrix3_str)  /* extras for matrices */ .def("__setitem__",&::Matrix3_set_item_linear).def("__getitem__",&::Matrix3_get_item_linear);
-        Matrix3_exposer.add_property("ZERO",::Matrix3r_ZERO).add_property("IDENTITY",::Matrix3r_IDENTITY);
     }
 
     { //Quaternion< double >
@@ -377,10 +201,10 @@
         Quaternion_exposer.def( bp::init< double, double, double, double >(( bp::arg("fW"), bp::arg("fX"), bp::arg("fY"), bp::arg("fZ") )) );
         Quaternion_exposer.def( bp::init< Quaternion< double > const & >(( bp::arg("rkQ") )) );
         Quaternion_exposer.def( bp::init< Matrix3< double > const & >(( bp::arg("rkRot") )) );
-        bp::implicitly_convertible< Matrix3< double > const &, Quaternion< double > >();
+
         Quaternion_exposer.def( bp::init< Vector3< double > const &, double >(( bp::arg("rkAxis"), bp::arg("fAngle") )) );
         Quaternion_exposer.def( bp::init< Vector3< double > const * >(( bp::arg("akRotColumn") )) );
-        bp::implicitly_convertible< Vector3< double > const *, Quaternion< double > >();
+
         { //Quaternion< double >::Align
         
             typedef Quaternion< double > exported_class_t;
@@ -403,28 +227,6 @@
                 , Conjugate_function_type( &Quaternion< double >::Conjugate ) );
         
         }
-        { //Quaternion< double >::DecomposeSwingTimesTwist
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef void ( exported_class_t::*DecomposeSwingTimesTwist_function_type )( Vector3< double > const &,Quaternion< double > &,Quaternion< double > & ) ;
-            
-            Quaternion_exposer.def( 
-                "DecomposeSwingTimesTwist"
-                , DecomposeSwingTimesTwist_function_type( &Quaternion< double >::DecomposeSwingTimesTwist )
-                , ( bp::arg("rkV1"), bp::arg("rkSwing"), bp::arg("rkTwist") ) );
-        
-        }
-        { //Quaternion< double >::DecomposeTwistTimesSwing
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef void ( exported_class_t::*DecomposeTwistTimesSwing_function_type )( Vector3< double > const &,Quaternion< double > &,Quaternion< double > & ) ;
-            
-            Quaternion_exposer.def( 
-                "DecomposeTwistTimesSwing"
-                , DecomposeTwistTimesSwing_function_type( &Quaternion< double >::DecomposeTwistTimesSwing )
-                , ( bp::arg("rkV1"), bp::arg("rkTwist"), bp::arg("rkSwing") ) );
-        
-        }
         { //Quaternion< double >::Dot
         
             typedef Quaternion< double > exported_class_t;
@@ -436,16 +238,6 @@
                 , ( bp::arg("rkQ") ) );
         
         }
-        { //Quaternion< double >::Exp
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > ( exported_class_t::*Exp_function_type )(  ) const;
-            
-            Quaternion_exposer.def( 
-                "Exp"
-                , Exp_function_type( &Quaternion< double >::Exp ) );
-        
-        }
         { //Quaternion< double >::FromAxisAngle
         
             typedef Quaternion< double > exported_class_t;
@@ -458,42 +250,6 @@
                 , bp::return_self< >() );
         
         }
-        { //Quaternion< double >::FromRotationMatrix
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > & ( exported_class_t::*FromRotationMatrix_function_type )( Matrix3< double > const & ) ;
-            
-            Quaternion_exposer.def( 
-                "FromRotationMatrix"
-                , FromRotationMatrix_function_type( &Quaternion< double >::FromRotationMatrix )
-                , ( bp::arg("rkRot") )
-                , bp::return_self< >() );
-        
-        }
-        { //Quaternion< double >::FromRotationMatrix
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > & ( exported_class_t::*FromRotationMatrix_function_type )( Vector3< double > const * ) ;
-            
-            Quaternion_exposer.def( 
-                "FromRotationMatrix"
-                , FromRotationMatrix_function_type( &Quaternion< double >::FromRotationMatrix )
-                , ( bp::arg("akRotColumn") )
-                , bp::return_self< >() );
-        
-        }
-        { //Quaternion< double >::Intermediate
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > & ( exported_class_t::*Intermediate_function_type )( Quaternion< double > const &,Quaternion< double > const &,Quaternion< double > const & ) ;
-            
-            Quaternion_exposer.def( 
-                "Intermediate"
-                , Intermediate_function_type( &Quaternion< double >::Intermediate )
-                , ( bp::arg("rkQ0"), bp::arg("rkQ1"), bp::arg("rkQ2") )
-                , bp::return_self< >() );
-        
-        }
         { //Quaternion< double >::Inverse
         
             typedef Quaternion< double > exported_class_t;
@@ -514,16 +270,6 @@
                 , Length_function_type( &Quaternion< double >::Length ) );
         
         }
-        { //Quaternion< double >::Log
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > ( exported_class_t::*Log_function_type )(  ) const;
-            
-            Quaternion_exposer.def( 
-                "Log"
-                , Log_function_type( &Quaternion< double >::Log ) );
-        
-        }
         { //Quaternion< double >::Normalize
         
             typedef Quaternion< double > exported_class_t;
@@ -545,42 +291,6 @@
                 , ( bp::arg("rkVector") ) );
         
         }
-        { //Quaternion< double >::Slerp
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > & ( exported_class_t::*Slerp_function_type )( double,Quaternion< double > const &,Quaternion< double > const & ) ;
-            
-            Quaternion_exposer.def( 
-                "Slerp"
-                , Slerp_function_type( &Quaternion< double >::Slerp )
-                , ( bp::arg("fT"), bp::arg("rkP"), bp::arg("rkQ") )
-                , bp::return_self< >() );
-        
-        }
-        { //Quaternion< double >::SlerpExtraSpins
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > & ( exported_class_t::*SlerpExtraSpins_function_type )( double,Quaternion< double > const &,Quaternion< double > const &,int ) ;
-            
-            Quaternion_exposer.def( 
-                "SlerpExtraSpins"
-                , SlerpExtraSpins_function_type( &Quaternion< double >::SlerpExtraSpins )
-                , ( bp::arg("fT"), bp::arg("rkP"), bp::arg("rkQ"), bp::arg("iExtraSpins") )
-                , bp::return_self< >() );
-        
-        }
-        { //Quaternion< double >::Squad
-        
-            typedef Quaternion< double > exported_class_t;
-            typedef Quaternion< double > & ( exported_class_t::*Squad_function_type )( double,Quaternion< double > const &,Quaternion< double > const &,Quaternion< double > const &,Quaternion< double > const & ) ;
-            
-            Quaternion_exposer.def( 
-                "Squad"
-                , Squad_function_type( &Quaternion< double >::Squad )
-                , ( bp::arg("fT"), bp::arg("rkQ0"), bp::arg("rkA0"), bp::arg("rkA1"), bp::arg("rkQ1") )
-                , bp::return_self< >() );
-        
-        }
         { //Quaternion< double >::SquaredLength
         
             typedef Quaternion< double > exported_class_t;
@@ -692,10 +402,11 @@
         Quaternion_exposer.def( bp::self == bp::self );
         Quaternion_exposer.def( bp::self > bp::self );
         Quaternion_exposer.def( bp::self >= bp::self );
+        Quaternion_exposer.def_readonly( "IDENTITY", Quaternion< double >::IDENTITY );
+        Quaternion_exposer.def_readonly( "ZERO", Quaternion< double >::ZERO );
         Quaternion_exposer.def( bp::self * bp::other< Vector3< double > >() );
         Quaternion_exposer.def( bp::self_ns::str( bp::self ) );
         Quaternion_exposer.def("__len__",&::Quaternion_len).staticmethod("__len__").def("__setitem__",&::Quaternion_set_item).def("__getitem__",&::Quaternion_get_item).def("__str__",&::Quaternion_str).def("__repr__",&::Quaternion_str);
-        Quaternion_exposer.add_property("ZERO",::Quaternionr_ZERO).add_property("IDENTITY",::Quaternionr_IDENTITY);
     }
 
     { //Vector2< double >
@@ -703,20 +414,9 @@
         Vector2_exposer_t Vector2_exposer = Vector2_exposer_t( "Vector2", bp::init< >() );
         bp::scope Vector2_scope( Vector2_exposer );
         Vector2_exposer.def( bp::init< double, double >(( bp::arg("fX"), bp::arg("fY") )) );
-        Vector2_exposer.def( bp::init< double const * >(( bp::arg("afTuple") )) );
-        bp::implicitly_convertible< double const *, Vector2< double > >();
+
+
         Vector2_exposer.def( bp::init< Vector2< double > const & >(( bp::arg("rkV") )) );
-        { //Vector2< double >::ComputeExtremes
-        
-            typedef Vector2< double > exported_class_t;
-            typedef void ( *ComputeExtremes_function_type )( int,Vector2< double > const *,Vector2< double > &,Vector2< double > & );
-            
-            Vector2_exposer.def( 
-                "ComputeExtremes"
-                , ComputeExtremes_function_type( &Vector2< double >::ComputeExtremes )
-                , ( bp::arg("iVQuantity"), bp::arg("akPoint"), bp::arg("rkMin"), bp::arg("rkMax") ) );
-        
-        }
         { //Vector2< double >::Dot
         
             typedef Vector2< double > exported_class_t;
@@ -728,39 +428,6 @@
                 , ( bp::arg("rkV") ) );
         
         }
-        { //Vector2< double >::DotPerp
-        
-            typedef Vector2< double > exported_class_t;
-            typedef double ( exported_class_t::*DotPerp_function_type )( Vector2< double > const & ) const;
-            
-            Vector2_exposer.def( 
-                "DotPerp"
-                , DotPerp_function_type( &Vector2< double >::DotPerp )
-                , ( bp::arg("rkV") ) );
-        
-        }
-        { //Vector2< double >::GenerateOrthonormalBasis
-        
-            typedef Vector2< double > exported_class_t;
-            typedef void ( *GenerateOrthonormalBasis_function_type )( Vector2< double > &,Vector2< double > &,bool );
-            
-            Vector2_exposer.def( 
-                "GenerateOrthonormalBasis"
-                , GenerateOrthonormalBasis_function_type( &Vector2< double >::GenerateOrthonormalBasis )
-                , ( bp::arg("rkU"), bp::arg("rkV"), bp::arg("bUnitLengthV") ) );
-        
-        }
-        { //Vector2< double >::GetBarycentrics
-        
-            typedef Vector2< double > exported_class_t;
-            typedef void ( exported_class_t::*GetBarycentrics_function_type )( Vector2< double > const &,Vector2< double > const &,Vector2< double > const &,double * ) const;
-            
-            Vector2_exposer.def( 
-                "GetBarycentrics"
-                , GetBarycentrics_function_type( &Vector2< double >::GetBarycentrics )
-                , ( bp::arg("rkV0"), bp::arg("rkV1"), bp::arg("rkV2"), bp::arg("afBary") ) );
-        
-        }
         { //Vector2< double >::Length
         
             typedef Vector2< double > exported_class_t;
@@ -781,27 +448,6 @@
                 , Normalize_function_type( &Vector2< double >::Normalize ) );
         
         }
-        { //Vector2< double >::Orthonormalize
-        
-            typedef Vector2< double > exported_class_t;
-            typedef void ( *Orthonormalize_function_type )( Vector2< double > &,Vector2< double > & );
-            
-            Vector2_exposer.def( 
-                "Orthonormalize"
-                , Orthonormalize_function_type( &Vector2< double >::Orthonormalize )
-                , ( bp::arg("rkU"), bp::arg("rkV") ) );
-        
-        }
-        { //Vector2< double >::Perp
-        
-            typedef Vector2< double > exported_class_t;
-            typedef Vector2< double > ( exported_class_t::*Perp_function_type )(  ) const;
-            
-            Vector2_exposer.def( 
-                "Perp"
-                , Perp_function_type( &Vector2< double >::Perp ) );
-        
-        }
         { //Vector2< double >::SquaredLength
         
             typedef Vector2< double > exported_class_t;
@@ -812,16 +458,6 @@
                 , SquaredLength_function_type( &Vector2< double >::SquaredLength ) );
         
         }
-        { //Vector2< double >::UnitPerp
-        
-            typedef Vector2< double > exported_class_t;
-            typedef Vector2< double > ( exported_class_t::*UnitPerp_function_type )(  ) const;
-            
-            Vector2_exposer.def( 
-                "UnitPerp"
-                , UnitPerp_function_type( &Vector2< double >::UnitPerp ) );
-        
-        }
         { //Vector2< double >::X
         
             typedef Vector2< double > exported_class_t;
@@ -869,35 +505,22 @@
         Vector2_exposer.def( bp::self == bp::self );
         Vector2_exposer.def( bp::self > bp::self );
         Vector2_exposer.def( bp::self >= bp::self );
-        Vector2_exposer.staticmethod( "ComputeExtremes" );
-        Vector2_exposer.staticmethod( "GenerateOrthonormalBasis" );
-        Vector2_exposer.staticmethod( "Orthonormalize" );
+        Vector2_exposer.def_readonly( "ONE", Vector2< double >::ONE );
+        Vector2_exposer.def_readonly( "UNIT_X", Vector2< double >::UNIT_X );
+        Vector2_exposer.def_readonly( "UNIT_Y", Vector2< double >::UNIT_Y );
+        Vector2_exposer.def_readonly( "ZERO", Vector2< double >::ZERO );
         Vector2_exposer.def( bp::other< Real >() * bp::self );
         Vector2_exposer.def("__len__",&::Vector2_len)   .staticmethod("__len__").def("__setitem__",&::Vector2_set_item)   .def("__getitem__",&::Vector2_get_item)   .def("__str__",&::Vector2_str)   .def("__repr__",&::Vector2_str);
-        Vector2_exposer.add_property("ZERO",::Vector2r_ZERO).add_property("UNIT_X",::Vector2r_UNIT_X).add_property("UNIT_Y",::Vector2r_UNIT_Y).add_property("ONE",::Vector2r_ONE);
     }
 
-    custom_Vector3r_from_tuple();
-
     { //Vector3< double >
         typedef bp::class_< Vector3< double > > Vector3_exposer_t;
         Vector3_exposer_t Vector3_exposer = Vector3_exposer_t( "Vector3", bp::init< >() );
         bp::scope Vector3_scope( Vector3_exposer );
         Vector3_exposer.def( bp::init< double, double, double >(( bp::arg("fX"), bp::arg("fY"), bp::arg("fZ") )) );
-        Vector3_exposer.def( bp::init< double const * >(( bp::arg("afTuple") )) );
-        bp::implicitly_convertible< double const *, Vector3< double > >();
+
+
         Vector3_exposer.def( bp::init< Vector3< double > const & >(( bp::arg("rkV") )) );
-        { //Vector3< double >::ComputeExtremes
-        
-            typedef Vector3< double > exported_class_t;
-            typedef void ( *ComputeExtremes_function_type )( int,Vector3< double > const *,Vector3< double > &,Vector3< double > & );
-            
-            Vector3_exposer.def( 
-                "ComputeExtremes"
-                , ComputeExtremes_function_type( &Vector3< double >::ComputeExtremes )
-                , ( bp::arg("iVQuantity"), bp::arg("akPoint"), bp::arg("rkMin"), bp::arg("rkMax") ) );
-        
-        }
         { //Vector3< double >::Cross
         
             typedef Vector3< double > exported_class_t;
@@ -920,28 +543,6 @@
                 , ( bp::arg("rkV") ) );
         
         }
-        { //Vector3< double >::GenerateOrthonormalBasis
-        
-            typedef Vector3< double > exported_class_t;
-            typedef void ( *GenerateOrthonormalBasis_function_type )( Vector3< double > &,Vector3< double > &,Vector3< double > &,bool );
-            
-            Vector3_exposer.def( 
-                "GenerateOrthonormalBasis"
-                , GenerateOrthonormalBasis_function_type( &Vector3< double >::GenerateOrthonormalBasis )
-                , ( bp::arg("rkU"), bp::arg("rkV"), bp::arg("rkW"), bp::arg("bUnitLengthW") ) );
-        
-        }
-        { //Vector3< double >::GetBarycentrics
-        
-            typedef Vector3< double > exported_class_t;
-            typedef void ( exported_class_t::*GetBarycentrics_function_type )( Vector3< double > const &,Vector3< double > const &,Vector3< double > const &,Vector3< double > const &,double * ) const;
-            
-            Vector3_exposer.def( 
-                "GetBarycentrics"
-                , GetBarycentrics_function_type( &Vector3< double >::GetBarycentrics )
-                , ( bp::arg("rkV0"), bp::arg("rkV1"), bp::arg("rkV2"), bp::arg("rkV3"), bp::arg("afBary") ) );
-        
-        }
         { //Vector3< double >::Length
         
             typedef Vector3< double > exported_class_t;
@@ -962,28 +563,6 @@
                 , Normalize_function_type( &Vector3< double >::Normalize ) );
         
         }
-        { //Vector3< double >::Orthonormalize
-        
-            typedef Vector3< double > exported_class_t;
-            typedef void ( *Orthonormalize_function_type )( Vector3< double > &,Vector3< double > &,Vector3< double > & );
-            
-            Vector3_exposer.def( 
-                "Orthonormalize"
-                , Orthonormalize_function_type( &Vector3< double >::Orthonormalize )
-                , ( bp::arg("rkU"), bp::arg("rkV"), bp::arg("rkW") ) );
-        
-        }
-        { //Vector3< double >::Orthonormalize
-        
-            typedef Vector3< double > exported_class_t;
-            typedef void ( *Orthonormalize_function_type )( Vector3< double > * );
-            
-            Vector3_exposer.def( 
-                "Orthonormalize"
-                , Orthonormalize_function_type( &Vector3< double >::Orthonormalize )
-                , ( bp::arg("akV") ) );
-        
-        }
         { //Vector3< double >::SquaredLength
         
             typedef Vector3< double > exported_class_t;
@@ -1062,12 +641,17 @@
         Vector3_exposer.def( bp::self == bp::self );
         Vector3_exposer.def( bp::self > bp::self );
         Vector3_exposer.def( bp::self >= bp::self );
-        Vector3_exposer.staticmethod( "ComputeExtremes" );
-        Vector3_exposer.staticmethod( "GenerateOrthonormalBasis" );
-        Vector3_exposer.staticmethod( "Orthonormalize" );
+        Vector3_exposer.def_readonly( "ONE", Vector3< double >::ONE );
+        Vector3_exposer.def_readonly( "UNIT_X", Vector3< double >::UNIT_X );
+        Vector3_exposer.def_readonly( "UNIT_Y", Vector3< double >::UNIT_Y );
+        Vector3_exposer.def_readonly( "UNIT_Z", Vector3< double >::UNIT_Z );
+        Vector3_exposer.def_readonly( "ZERO", Vector3< double >::ZERO );
         Vector3_exposer.def( bp::self * bp::other< Matrix3< double > >() );
         Vector3_exposer.def( bp::self_ns::str( bp::self ) );
         Vector3_exposer.def("__len__",&::Vector3_len)   .staticmethod("__len__").def("__setitem__",&::Vector3_set_item)   .def("__getitem__",&::Vector3_get_item)   .def("__str__",&::Vector3_str)   .def("__repr__",&::Vector3_str);
-        Vector3_exposer.add_property("ZERO",::Vector3r_ZERO).add_property("UNIT_X",::Vector3r_UNIT_X).add_property("UNIT_Y",::Vector3r_UNIT_Y).add_property("UNIT_Z",::Vector3r_UNIT_Z).add_property("ONE",::Vector3r_ONE);
     }
+
+    custom_Vector3r_from_tuple();
+
+    bp::scope().attr("NaN") = NaN;
 }