[pythran] Pythran 0.7 regression?

  • From: Valerio De Carolis <v.decarolis@xxxxxxxx>
  • To: pythran@xxxxxxxxxxxxx
  • Date: Fri, 17 Apr 2015 13:54:45 +0100

Hello Pythraners,

I've just spotted a possible regression after installing the new release. This code was compiling fine on 0.6 while it is failing to compiling with the 0.7.

After a quick look at the generated code I can see the approach taken by the pythran runtime is slightly different thus generating a different code compared to 0.6. I know the test function is a little bit naive but in tight loops the use of Pythran is still giving some benefits (ie. reducing the total CPU load). :)

import numpy as np


#pythran export compute_jacobian(float, float, float)
def compute_jacobian(phi, theta, psi):
"""This functions computes the jacobian matrix used for converting
body-frame to earth-frame coordinates.

:param phi: pitch angle (k)
:param theta: roll angle (m)
:param psi: yaw angle (n)
:return: J matrix (6x6)
"""
J = np.zeros((6,6))

# jacobian one
J[0, 0] = np.cos(theta) * np.cos(psi)
J[0, 1] = np.cos(psi) * np.sin(theta) * np.sin(phi) - np.sin(psi) *
np.cos(phi)
J[0, 2] = np.sin(psi) * np.sin(phi) + np.cos(psi) * np.cos(phi) *
np.sin(theta)

J[1, 0] = np.cos(theta) * np.sin(psi)
J[1, 1] = np.cos(psi) * np.cos(phi) + np.sin(phi) * np.sin(theta) *
np.sin(psi)
J[1, 2] = np.sin(psi) * np.sin(theta) * np.cos(phi) - np.cos(psi) *
np.sin(phi)

J[2, 0] = -np.sin(theta)
J[2, 1] = np.cos(theta) * np.sin(phi)
J[2, 2] = np.cos(theta) * np.cos(phi)

# jacobian two
J[3, 3] = 1.0
J[3, 4] = np.sin(phi) * np.tan(theta)
J[3, 5] = np.cos(phi) * np.tan(theta)

J[4, 3] = 0.0
J[4, 4] = np.cos(phi)
J[4, 5] = -np.sin(phi)

J[5, 3] = 0.0
J[5, 4] = np.sin(phi) / np.cos(theta)
J[5, 5] = np.cos(phi) / np.cos(theta)

return J

Error attached:

CRITICAL Leave the vessel! Women and children first!
C++ compiler failed to compile translated code.
E: Compile error!

******** Command line was: ********
'c++' '/tmp/tmpMtMHzs.cpp' '-I/usr/include/python2.7'
'-I/usr/local/lib/python2.7/dist-packages/numpy/core/include/numpy'
'-I/usr/local/lib/python2.7/dist-packages/.'
'-I/usr/local/lib/python2.7/dist-packages/pythran'
'-I/usr/local/lib/python2.7/dist-packages/pythran/pythonic/patch'
'-DENABLE_PYTHON_MODULE' '-DUSE_GMP' '-DNDEBUG' '-O2' '-g' '-fno-math-errno'
'-std=c++11' '-O2' '-shared' '-o' 'dynamic_model.so'
'-L/usr/lib/python2.7/config-x86_64-linux-gnu' '-lpthread' '-ldl' '-lutil'
'-lpython2.7' '-lboost_python' '-lgmp' '-lgmpxx' '-fPIC' '-ltcmalloc_minimal'

******** Output : ********

In file included from /usr/include/c++/4.8/algorithm:61:0,
from /usr/include/boost/function/detail/prologue.hpp:13,
from /usr/include/boost/function/function_template.hpp:13,
from /usr/include/boost/function/detail/maybe_include.hpp:13,
from /usr/include/boost/function/function0.hpp:11,
from /usr/include/boost/python/errors.hpp:13,
from /usr/include/boost/python/handle.hpp:11,
from /usr/include/boost/python/to_python_value.hpp:12,
from /usr/include/boost/python/default_call_policies.hpp:10,
from /usr/include/boost/python/make_function.hpp:10,
from /usr/include/boost/python/def.hpp:11,
from
/usr/local/lib/python2.7/dist-packages/pythran/pythonic/python/core.hpp:6,
from /tmp/tmpMtMHzs.cpp:4:
/usr/include/c++/4.8/bits/stl_algobase.h: In instantiation of ‘static _OI
std::__copy_move<false, false, std::random_access_iterator_tag>::__copy_m(_II, _II,
_OI) [with _II = const pythonic::types::list<double>*; _OI = double*]’:
/usr/include/c++/4.8/bits/stl_algobase.h:390:70: required from ‘_OI
std::__copy_move_a(_II, _II, _OI) [with bool _IsMove = false; _II = const
pythonic::types::list<double>*; _OI = double*]’
/usr/include/c++/4.8/bits/stl_algobase.h:428:38: required from ‘_OI std::__copy_move_a2(_II, _II, _OI) [with bool _IsMove =
false; _II = __gnu_cxx::__normal_iterator<const pythonic::types::list<double>*,
std::vector<pythonic::types::list<double>, std::allocator<pythonic::types::list<double> > > >; _OI =
__gnu_cxx::__normal_iterator<double*, std::vector<double> >]’
/usr/include/c++/4.8/bits/stl_algobase.h:460:17: required from ‘_OI std::copy(_II, _II, _OI) [with _II =
__gnu_cxx::__normal_iterator<const pythonic::types::list<double>*, std::vector<pythonic::types::list<double>,
std::allocator<pythonic::types::list<double> > > >; _OI = __gnu_cxx::__normal_iterator<double*,
std::vector<double> >]’
/usr/local/lib/python2.7/dist-packages/pythran/pythonic/types/list.hpp:185:70: required from
‘pythonic::types::list<T>::list(const pythonic::types::list<K>&) [with F =
pythonic::types::list<double>; T = double]’
/usr/local/lib/python2.7/dist-packages/pythran/pythonic/types/list.hpp:153:72: required from
‘pythonic::types::list<T>::fake_shape::fake_shape(const pythonic::types::list<T>&)
[with T = pythonic::types::list<double>]’
/usr/local/lib/python2.7/dist-packages/pythran/pythonic/types/list.hpp:180:83: required from
‘pythonic::types::list<T>::list(std::initializer_list<_Tp>) [with T =
pythonic::types::list<double>]’
/tmp/tmpMtMHzs.cpp:944:844: required from ‘typename
__pythran_dynamic_model::compute_jacobian::type<argument_type0, argument_type1,
argument_type2>::result_type __pythran_dynamic_model::compute_jacobian::operator()(const
argument_type0&, const argument_type1&, const argument_type2&) const [with argument_type0 =
double; argument_type1 = double; argument_type2 = double; typename
__pythran_dynamic_model::compute_jacobian::type<argument_type0, argument_type1,
argument_type2>::result_type = pythonic::types::ndarray<double, 2ul>]’
/tmp/tmpMtMHzs.cpp:1059:64: required from here
/usr/include/c++/4.8/bits/stl_algobase.h:335:18: error: cannot convert ‘const
pythonic::types::list<double>’ to ‘double’ in assignment
*__result = *__first;

Any idea why this is failing to compile?

Platform: Ubuntu 14.04.2 LTS x86-64

Cheers,
V

#define BOOST_PYTHON_MAX_ARITY 3
#define BOOST_SIMD_NO_STRICT_ALIASING 1
#include <pythonic/core.hpp>
#include <pythonic/python/core.hpp>
#ifdef _OPENMP
#include <omp.h>
#endif
#include <pythonic/types/float.hpp>
#include <pythonic/types/ndarray.hpp>
#include <pythonic/types/numpy_texpr.hpp>
#include <pythonic/__builtin__/None.hpp>
#include <pythonic/__builtin__/getattr.hpp>
#include <pythonic/__builtin__/list.hpp>
#include <pythonic/__builtin__/str.hpp>
#include <pythonic/__builtin__/tuple.hpp>
#include <pythonic/__builtin__/xrange.hpp>
#include <pythonic/numpy/abs.hpp>
#include <pythonic/numpy/array.hpp>
#include <pythonic/numpy/cos.hpp>
#include <pythonic/numpy/diag.hpp>
#include <pythonic/numpy/ndarray/flatten.hpp>
#include <pythonic/numpy/sin.hpp>
#include <pythonic/numpy/tan.hpp>
#include <pythonic/numpy/zeros_like.hpp>
namespace __pythran_dynamic_model
{
;
;
;
;
;
;
;
;
;
;
;
;
struct calc_mass_term
{
typedef void callable;
typedef void pure;
template <typename argument_type0 , typename argument_type1 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type1;
typedef long __type2;
typedef pythonic::types::list<__type2> __type3;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type __type4;
typedef decltype(pythonic::types::make_tuple(std::declval<__type2>(),
std::declval<__type2>())) __type7;
typedef decltype(std::declval<__type4>()[std::declval<__type7>()])
__type8;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type __type9;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type9>::type>::type>::type __type10;
typedef decltype((std::declval<__type8>() * std::declval<__type10>()))
__type11;
typedef typename pythonic::assignable<typename
std::tuple_element<4,typename
std::remove_reference<__type9>::type>::type>::type __type12;
typedef decltype((std::declval<__type11>() * std::declval<__type12>()))
__type13;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type9>::type>::type>::type __type18;
typedef decltype((std::declval<__type8>() * std::declval<__type18>()))
__type19;
typedef typename pythonic::assignable<typename
std::tuple_element<5,typename
std::remove_reference<__type9>::type>::type>::type __type20;
typedef decltype((std::declval<__type19>() * std::declval<__type20>()))
__type21;
typedef decltype((std::declval<__type13>() - std::declval<__type21>()))
__type22;
typedef pythonic::types::list<__type22> __type23;
typedef typename pythonic::assignable<typename
std::tuple_element<3,typename
std::remove_reference<__type9>::type>::type>::type __type29;
typedef decltype((std::declval<__type19>() * std::declval<__type29>()))
__type30;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type9>::type>::type>::type __type35;
typedef decltype((std::declval<__type8>() * std::declval<__type35>()))
__type36;
typedef decltype((std::declval<__type36>() * std::declval<__type12>()))
__type37;
typedef decltype((std::declval<__type30>() - std::declval<__type37>()))
__type38;
typedef pythonic::types::list<__type38> __type39;
typedef decltype((-std::declval<__type8>())) __type44;
typedef decltype((std::declval<__type44>() * std::declval<__type10>()))
__type45;
typedef decltype((std::declval<__type45>() * std::declval<__type35>()))
__type46;
typedef decltype((std::declval<__type36>() * std::declval<__type10>()))
__type52;
typedef decltype((std::declval<__type46>() + std::declval<__type52>()))
__type53;
typedef decltype((std::declval<__type8>() * std::declval<__type20>()))
__type58;
typedef decltype((std::declval<__type58>() * std::declval<__type29>()))
__type59;
typedef decltype((std::declval<__type53>() - std::declval<__type59>()))
__type60;
typedef decltype((std::declval<__type8>() * std::declval<__type29>()))
__type65;
typedef decltype((std::declval<__type65>() * std::declval<__type20>()))
__type66;
typedef decltype((std::declval<__type60>() + std::declval<__type66>()))
__type67;
typedef pythonic::types::list<__type67> __type68;
typedef decltype((std::declval<__type45>() * std::declval<__type29>()))
__type75;
typedef decltype((std::declval<__type36>() * std::declval<__type20>()))
__type81;
typedef decltype((std::declval<__type75>() + std::declval<__type81>()))
__type82;
typedef pythonic::types::list<__type82> __type83;
typedef decltype((std::declval<__type19>() * std::declval<__type35>()))
__type89;
typedef decltype((std::declval<__type36>() * std::declval<__type18>()))
__type95;
typedef decltype((std::declval<__type89>() - std::declval<__type95>()))
__type96;
typedef decltype((std::declval<__type8>() * std::declval<__type12>()))
__type101;
typedef decltype((std::declval<__type101>() * std::declval<__type29>()))
__type102;
typedef decltype((std::declval<__type96>() + std::declval<__type102>()))
__type103;
typedef decltype((std::declval<__type65>() * std::declval<__type12>()))
__type109;
typedef decltype((std::declval<__type103>() - std::declval<__type109>()))
__type110;
typedef pythonic::types::list<__type110> __type111;
typedef typename
__combined<__type111,__type23,__type3,__type39,__type68,__type83>::type
__type112;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type112>()))
__type113;
typedef __type0 __ptype0;
typedef __type1 __ptype1;
typedef typename
pythonic::returnable<decltype((-std::declval<__type113>()))>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 >
typename type<argument_type0, argument_type1>::result_type
operator()(argument_type0 const & vel, argument_type1 const & mass_matrix) const
;
} ;
struct __init__
{
typedef void callable;
typedef void pure;
struct type
{
typedef typename pythonic::returnable<pythonic::types::none_type>::type
result_type;
} ;
typename type::result_type operator()() const;
;
} ;
struct calc_coriolis
{
typedef void callable;
typedef void pure;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type1;
typedef double __type2;
typedef pythonic::types::list<__type2> __type3;
typedef pythonic::types::list<__type3> __type4;
typedef typename pythonic::assignable<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type4>()))>::type
__type5;
typedef long __type6;
typedef decltype(pythonic::types::make_tuple(std::declval<__type6>(),
std::declval<__type6>())) __type8;
typedef indexable<__type8> __type9;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type66;
typedef decltype((-std::declval<__type66>())) __type67;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type __type68;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type68>::type>::type>::type __type69;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type __type70;
typedef typename pythonic::assignable<typename
std::tuple_element<4,typename
std::remove_reference<__type70>::type>::type>::type __type71;
typedef decltype((std::declval<__type69>() * std::declval<__type71>()))
__type72;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type70>::type>::type>::type __type73;
typedef decltype((std::declval<__type72>() + std::declval<__type73>()))
__type74;
typedef decltype((std::declval<__type67>() * std::declval<__type74>()))
__type75;
typedef container<typename std::remove_reference<__type75>::type>
__type76;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>::type __type77;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type77>::type>::type>::type __type78;
typedef decltype((-std::declval<__type78>())) __type79;
typedef typename pythonic::assignable<typename
std::tuple_element<5,typename
std::remove_reference<__type70>::type>::type>::type __type80;
typedef decltype((std::declval<__type79>() * std::declval<__type80>()))
__type81;
typedef container<typename std::remove_reference<__type81>::type>
__type82;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type68>::type>::type>::type __type84;
typedef typename pythonic::assignable<typename
std::tuple_element<3,typename
std::remove_reference<__type70>::type>::type>::type __type85;
typedef decltype((std::declval<__type84>() * std::declval<__type85>()))
__type86;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type68>::type>::type>::type __type87;
typedef decltype((std::declval<__type87>() * std::declval<__type71>()))
__type88;
typedef decltype((std::declval<__type86>() + std::declval<__type88>()))
__type89;
typedef decltype((std::declval<__type67>() * std::declval<__type89>()))
__type90;
typedef container<typename std::remove_reference<__type90>::type>
__type91;
typedef decltype((std::declval<__type87>() * std::declval<__type85>()))
__type92;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type70>::type>::type>::type __type93;
typedef decltype((std::declval<__type92>() + std::declval<__type93>()))
__type94;
typedef decltype((std::declval<__type66>() * std::declval<__type94>()))
__type95;
typedef container<typename std::remove_reference<__type95>::type>
__type96;
typedef decltype((std::declval<__type69>() * std::declval<__type85>()))
__type98;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type70>::type>::type>::type __type99;
typedef decltype((std::declval<__type98>() - std::declval<__type99>()))
__type100;
typedef decltype((std::declval<__type67>() * std::declval<__type100>()))
__type101;
typedef container<typename std::remove_reference<__type101>::type>
__type102;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type77>::type>::type>::type __type103;
typedef decltype((-std::declval<__type103>())) __type104;
typedef decltype((std::declval<__type104>() * std::declval<__type71>()))
__type105;
typedef container<typename std::remove_reference<__type105>::type>
__type106;
typedef decltype((std::declval<__type66>() * std::declval<__type74>()))
__type109;
typedef container<typename std::remove_reference<__type109>::type>
__type110;
typedef decltype((std::declval<__type84>() * std::declval<__type80>()))
__type112;
typedef decltype((std::declval<__type112>() + std::declval<__type99>()))
__type113;
typedef decltype((std::declval<__type67>() * std::declval<__type113>()))
__type114;
typedef container<typename std::remove_reference<__type114>::type>
__type115;
typedef decltype((std::declval<__type66>() * std::declval<__type89>()))
__type119;
typedef container<typename std::remove_reference<__type119>::type>
__type120;
typedef decltype((std::declval<__type103>() * std::declval<__type71>()))
__type121;
typedef container<typename std::remove_reference<__type121>::type>
__type122;
typedef decltype((std::declval<__type66>() * std::declval<__type113>()))
__type125;
typedef container<typename std::remove_reference<__type125>::type>
__type126;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type77>::type>::type>::type __type127;
typedef decltype((-std::declval<__type127>())) __type128;
typedef decltype((std::declval<__type128>() * std::declval<__type85>()))
__type129;
typedef container<typename std::remove_reference<__type129>::type>
__type130;
typedef decltype((std::declval<__type66>() * std::declval<__type100>()))
__type133;
typedef container<typename std::remove_reference<__type133>::type>
__type134;
typedef decltype((std::declval<__type84>() * std::declval<__type71>()))
__type135;
typedef decltype((std::declval<__type135>() - std::declval<__type93>()))
__type136;
typedef decltype((std::declval<__type66>() * std::declval<__type136>()))
__type137;
typedef container<typename std::remove_reference<__type137>::type>
__type138;
typedef decltype((std::declval<__type69>() * std::declval<__type80>()))
__type141;
typedef decltype((std::declval<__type88>() + std::declval<__type141>()))
__type142;
typedef decltype((std::declval<__type67>() * std::declval<__type142>()))
__type143;
typedef container<typename std::remove_reference<__type143>::type>
__type144;
typedef decltype((std::declval<__type66>() * std::declval<__type142>()))
__type148;
typedef container<typename std::remove_reference<__type148>::type>
__type149;
typedef decltype((std::declval<__type67>() * std::declval<__type94>()))
__type153;
typedef container<typename std::remove_reference<__type153>::type>
__type154;
typedef decltype((std::declval<__type87>() * std::declval<__type80>()))
__type155;
typedef decltype((std::declval<__type155>() - std::declval<__type73>()))
__type156;
typedef decltype((std::declval<__type66>() * std::declval<__type156>()))
__type157;
typedef container<typename std::remove_reference<__type157>::type>
__type158;
typedef container<typename std::remove_reference<__type6>::type>
__type160;
typedef decltype((std::declval<__type141>() + std::declval<__type86>()))
__type169;
typedef decltype((std::declval<__type67>() * std::declval<__type169>()))
__type170;
typedef container<typename std::remove_reference<__type170>::type>
__type171;
typedef decltype((std::declval<__type67>() * std::declval<__type156>()))
__type175;
typedef container<typename std::remove_reference<__type175>::type>
__type176;
typedef decltype((std::declval<__type78>() * std::declval<__type80>()))
__type177;
typedef container<typename std::remove_reference<__type177>::type>
__type178;
typedef decltype((std::declval<__type67>() * std::declval<__type136>()))
__type182;
typedef container<typename std::remove_reference<__type182>::type>
__type183;
typedef decltype((std::declval<__type66>() * std::declval<__type169>()))
__type187;
typedef container<typename std::remove_reference<__type187>::type>
__type188;
typedef typename __combined<__type5,__type9,__type91,__type96>::type
__type191;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type __type192;
typedef typename std::tuple_element<5,typename
std::remove_reference<__type192>::type>::type __type193;
typedef typename pythonic::assignable<decltype((std::declval<__type193>()
* std::declval<__type80>()))>::type __type194;
typedef decltype((-std::declval<__type194>())) __type195;
typedef pythonic::types::list<__type195> __type196;
typedef pythonic::types::list<__type6> __type198;
typedef typename std::tuple_element<2,typename
std::remove_reference<__type192>::type>::type __type201;
typedef typename pythonic::assignable<decltype((std::declval<__type201>()
* std::declval<__type93>()))>::type __type202;
typedef decltype((-std::declval<__type202>())) __type203;
typedef pythonic::types::list<__type203> __type204;
typedef typename std::tuple_element<1,typename
std::remove_reference<__type192>::type>::type __type205;
typedef typename pythonic::assignable<decltype((std::declval<__type205>()
* std::declval<__type99>()))>::type __type206;
typedef pythonic::types::list<__type206> __type207;
typedef typename std::tuple_element<4,typename
std::remove_reference<__type192>::type>::type __type208;
typedef typename pythonic::assignable<decltype((std::declval<__type208>()
* std::declval<__type71>()))>::type __type209;
typedef pythonic::types::list<__type209> __type210;
typedef typename
__combined<__type196,__type198,__type204,__type207,__type210>::type __type211;
typedef pythonic::types::list<__type211> __type212;
typedef typename __combined<__type198,__type204,__type207>::type
__type218;
typedef pythonic::types::list<__type218> __type219;
typedef typename std::tuple_element<0,typename
std::remove_reference<__type192>::type>::type __type224;
typedef typename pythonic::assignable<decltype((std::declval<__type224>()
* std::declval<__type73>()))>::type __type225;
typedef pythonic::types::list<__type225> __type226;
typedef decltype((-std::declval<__type206>())) __type227;
typedef pythonic::types::list<__type227> __type228;
typedef typename __combined<__type198,__type226,__type228>::type
__type229;
typedef pythonic::types::list<__type229> __type230;
typedef decltype((-std::declval<__type209>())) __type231;
typedef pythonic::types::list<__type231> __type232;
typedef typename std::tuple_element<3,typename
std::remove_reference<__type192>::type>::type __type238;
typedef typename pythonic::assignable<decltype((std::declval<__type238>()
* std::declval<__type85>()))>::type __type239;
typedef pythonic::types::list<__type239> __type240;
typedef typename
__combined<__type198,__type226,__type228,__type232,__type240>::type __type243;
typedef pythonic::types::list<__type243> __type244;
typedef decltype((-std::declval<__type225>())) __type247;
typedef pythonic::types::list<__type247> __type248;
typedef pythonic::types::list<__type202> __type249;
typedef typename __combined<__type198,__type248,__type249>::type
__type250;
typedef pythonic::types::list<__type250> __type251;
typedef pythonic::types::list<__type194> __type253;
typedef decltype((-std::declval<__type239>())) __type256;
typedef pythonic::types::list<__type256> __type257;
typedef typename
__combined<__type198,__type248,__type249,__type253,__type257>::type __type262;
typedef pythonic::types::list<__type262> __type263;
typedef typename
__combined<__type212,__type219,__type230,__type244,__type251,__type263>::type
__type264;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type264>()))
__type265;
typedef __type0 __ptype2;
typedef __type1 __ptype3;
typedef typename pythonic::returnable<decltype((std::declval<__type191>()
+ std::declval<__type265>()))>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 >
typename type<argument_type0, argument_type1, argument_type2,
argument_type3, argument_type4>::result_type operator()(argument_type0 const &
vel, argument_type1 const & mass, argument_type2 const & cog, argument_type3
const & inertia, argument_type4 const & added_terms) const
;
} ;
struct mat_vec_mult
{
typedef void callable;
typedef void pure;
template <typename argument_type0 , typename argument_type1 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type0;
typedef typename pythonic::assignable<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::zeros_like())>::type>::type>()(std::declval<__type0>()))>::type
__type1;
typedef
decltype(pythonic::__builtin__::getattr<pythonic::types::attr::SHAPE>(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>())) __type2;
typedef typename std::tuple_element<0,typename
std::remove_reference<__type2>::type>::type __type3;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::__builtin__::proxy::xrange())>::type>::type>()(std::declval<__type3>()))
__type4;
typedef typename std::remove_cv<typename std::iterator_traits<typename
std::remove_reference<__type4>::type::iterator>::value_type>::type __type5;
typedef indexable<__type5> __type6;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type7;
typedef typename std::tuple_element<1,typename
std::remove_reference<__type2>::type>::type __type9;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::__builtin__::proxy::xrange())>::type>::type>()(std::declval<__type9>()))
__type10;
typedef typename std::remove_cv<typename std::iterator_traits<typename
std::remove_reference<__type10>::type::iterator>::value_type>::type __type11;
typedef decltype(pythonic::types::make_tuple(std::declval<__type5>(),
std::declval<__type11>())) __type12;
typedef decltype(std::declval<__type7>()[std::declval<__type12>()])
__type13;
typedef decltype(std::declval<__type0>()[std::declval<__type11>()])
__type14;
typedef decltype((std::declval<__type13>() * std::declval<__type14>()))
__type15;
typedef container<typename std::remove_reference<__type15>::type>
__type16;
typedef typename pythonic::returnable<typename
__combined<__type1,__type6,__type16>::type>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 >
typename type<argument_type0, argument_type1>::result_type
operator()(argument_type0 const & A, argument_type1 const & b) const
;
} ;
struct update_jacobian
{
typedef void callable;
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type0;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type0>()))
__type1;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type2;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type2>()))
__type3;
typedef decltype((std::declval<__type1>() * std::declval<__type3>()))
__type4;
typedef pythonic::types::list<__type4> __type5;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type0>()))
__type6;
typedef decltype((-std::declval<__type6>())) __type7;
typedef pythonic::types::list<__type7> __type8;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type2>()))
__type10;
typedef decltype((std::declval<__type1>() * std::declval<__type10>()))
__type11;
typedef pythonic::types::list<__type11> __type12;
typedef typename __combined<__type12,__type5,__type8>::type __type13;
typedef pythonic::types::list<__type13> __type14;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type __type16;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type16>()))
__type17;
typedef decltype((std::declval<__type1>() * std::declval<__type17>()))
__type18;
typedef pythonic::types::list<__type18> __type19;
typedef decltype((std::declval<__type17>() * std::declval<__type6>()))
__type22;
typedef decltype((std::declval<__type22>() * std::declval<__type3>()))
__type24;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type16>()))
__type25;
typedef decltype((std::declval<__type25>() * std::declval<__type10>()))
__type27;
typedef decltype((std::declval<__type24>() - std::declval<__type27>()))
__type28;
typedef pythonic::types::list<__type28> __type29;
typedef decltype((std::declval<__type25>() * std::declval<__type3>()))
__type32;
typedef decltype((std::declval<__type17>() * std::declval<__type10>()))
__type35;
typedef decltype((std::declval<__type35>() * std::declval<__type6>()))
__type37;
typedef decltype((std::declval<__type32>() + std::declval<__type37>()))
__type38;
typedef pythonic::types::list<__type38> __type39;
typedef typename __combined<__type19,__type29,__type39>::type __type40;
typedef pythonic::types::list<__type40> __type41;
typedef decltype((std::declval<__type1>() * std::declval<__type25>()))
__type44;
typedef pythonic::types::list<__type44> __type45;
typedef decltype((std::declval<__type3>() * std::declval<__type6>()))
__type51;
typedef decltype((std::declval<__type51>() * std::declval<__type25>()))
__type53;
typedef decltype((std::declval<__type35>() + std::declval<__type53>()))
__type54;
typedef pythonic::types::list<__type54> __type55;
typedef decltype((std::declval<__type25>() * std::declval<__type6>()))
__type58;
typedef decltype((std::declval<__type58>() * std::declval<__type10>()))
__type60;
typedef decltype((std::declval<__type17>() * std::declval<__type3>()))
__type63;
typedef decltype((std::declval<__type60>() - std::declval<__type63>()))
__type64;
typedef pythonic::types::list<__type64> __type65;
typedef typename __combined<__type45,__type55,__type65>::type __type66;
typedef pythonic::types::list<__type66> __type67;
typedef typename __combined<__type14,__type41,__type67>::type __type68;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type68>()))
__type69;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::tan())>::type>::type>()(std::declval<__type0>()))
__type71;
typedef decltype((std::declval<__type10>() * std::declval<__type71>()))
__type72;
typedef pythonic::types::list<__type72> __type73;
typedef double __type74;
typedef pythonic::types::list<__type74> __type75;
typedef decltype((std::declval<__type3>() * std::declval<__type71>()))
__type78;
typedef pythonic::types::list<__type78> __type79;
typedef typename __combined<__type73,__type75,__type79>::type __type80;
typedef pythonic::types::list<__type80> __type81;
typedef pythonic::types::list<__type10> __type85;
typedef decltype((-std::declval<__type3>())) __type87;
typedef pythonic::types::list<__type87> __type88;
typedef typename __combined<__type75,__type85,__type88>::type __type89;
typedef pythonic::types::list<__type89> __type90;
typedef decltype((std::declval<__type10>() / std::declval<__type1>()))
__type93;
typedef pythonic::types::list<__type93> __type94;
typedef decltype((std::declval<__type3>() / std::declval<__type1>()))
__type99;
typedef pythonic::types::list<__type99> __type100;
typedef typename __combined<__type100,__type75,__type94>::type __type101;
typedef pythonic::types::list<__type101> __type102;
typedef typename __combined<__type102,__type81,__type90>::type __type103;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type103>()))
__type104;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type105;
typedef container<typename std::remove_reference<__type69>::type>
__type106;
typedef container<typename std::remove_reference<__type104>::type>
__type107;
typedef __type69 __ptype6;
typedef __type104 __ptype7;
typedef typename pythonic::returnable<typename
__combined<__type105,__type106,__type107>::type>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 >
typename type<argument_type0, argument_type1, argument_type2,
argument_type3>::result_type operator()(argument_type0&& J, argument_type1
const & phi, argument_type2 const & theta, argument_type3 const & psi) const
;
} ;
struct compute_jacobian
{
typedef void callable;
typedef void pure;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 >
struct type
{
typedef double __type0;
typedef pythonic::types::list<__type0> __type1;
typedef pythonic::types::list<__type1> __type2;
typedef typename pythonic::assignable<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type2>()))>::type
__type3;
typedef long __type4;
typedef decltype(pythonic::types::make_tuple(std::declval<__type4>(),
std::declval<__type4>())) __type6;
typedef indexable<__type6> __type7;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type24;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type24>()))
__type25;
typedef decltype((-std::declval<__type25>())) __type26;
typedef container<typename std::remove_reference<__type26>::type>
__type27;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type28;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type28>()))
__type29;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type24>()))
__type30;
typedef decltype((std::declval<__type29>() / std::declval<__type30>()))
__type31;
typedef container<typename std::remove_reference<__type31>::type>
__type32;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type34;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type34>()))
__type35;
typedef decltype((std::declval<__type30>() * std::declval<__type35>()))
__type36;
typedef container<typename std::remove_reference<__type36>::type>
__type37;
typedef decltype((-std::declval<__type29>())) __type39;
typedef container<typename std::remove_reference<__type39>::type>
__type40;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::tan())>::type>::type>()(std::declval<__type24>()))
__type42;
typedef decltype((std::declval<__type29>() * std::declval<__type42>()))
__type43;
typedef container<typename std::remove_reference<__type43>::type>
__type44;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type34>()))
__type45;
typedef decltype((std::declval<__type45>() * std::declval<__type25>()))
__type47;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type28>()))
__type48;
typedef decltype((std::declval<__type47>() * std::declval<__type48>()))
__type49;
typedef decltype((std::declval<__type35>() * std::declval<__type29>()))
__type52;
typedef decltype((std::declval<__type49>() - std::declval<__type52>()))
__type53;
typedef container<typename std::remove_reference<__type53>::type>
__type54;
typedef decltype((std::declval<__type35>() * std::declval<__type48>()))
__type57;
typedef decltype((std::declval<__type29>() * std::declval<__type25>()))
__type60;
typedef decltype((std::declval<__type60>() * std::declval<__type45>()))
__type62;
typedef decltype((std::declval<__type57>() + std::declval<__type62>()))
__type63;
typedef container<typename std::remove_reference<__type63>::type>
__type64;
typedef container<typename std::remove_reference<__type0>::type> __type66;
typedef decltype((std::declval<__type30>() * std::declval<__type48>()))
__type69;
typedef container<typename std::remove_reference<__type69>::type>
__type70;
typedef decltype((std::declval<__type35>() * std::declval<__type25>()))
__type73;
typedef decltype((std::declval<__type73>() * std::declval<__type29>()))
__type75;
typedef decltype((std::declval<__type45>() * std::declval<__type48>()))
__type78;
typedef decltype((std::declval<__type75>() - std::declval<__type78>()))
__type79;
typedef container<typename std::remove_reference<__type79>::type>
__type80;
typedef decltype((std::declval<__type30>() * std::declval<__type45>()))
__type85;
typedef container<typename std::remove_reference<__type85>::type>
__type86;
typedef container<typename std::remove_reference<__type48>::type>
__type88;
typedef decltype((std::declval<__type30>() * std::declval<__type29>()))
__type91;
typedef container<typename std::remove_reference<__type91>::type>
__type92;
typedef decltype((std::declval<__type45>() * std::declval<__type29>()))
__type95;
typedef decltype((std::declval<__type57>() * std::declval<__type25>()))
__type100;
typedef decltype((std::declval<__type95>() + std::declval<__type100>()))
__type101;
typedef container<typename std::remove_reference<__type101>::type>
__type102;
typedef decltype((std::declval<__type48>() / std::declval<__type30>()))
__type105;
typedef container<typename std::remove_reference<__type105>::type>
__type106;
typedef decltype((std::declval<__type48>() * std::declval<__type42>()))
__type109;
typedef container<typename std::remove_reference<__type109>::type>
__type110;
typedef typename pythonic::returnable<typename
__combined<__type3,__type7,__type88,__type92>::type>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 >
typename type<argument_type0, argument_type1, argument_type2>::result_type
operator()(argument_type0 const & phi, argument_type1 const & theta,
argument_type2 const & psi) const
;
} ;
struct calc_restoring
{
typedef void callable;
typedef void pure;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type1;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type __type2;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type2>::type>::type>::type __type3;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type __type4;
typedef decltype((std::declval<__type3>() * std::declval<__type4>()))
__type5;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type __type6;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type6>::type>::type>::type __type7;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type __type8;
typedef decltype((std::declval<__type7>() * std::declval<__type8>()))
__type9;
typedef decltype((std::declval<__type5>() - std::declval<__type9>()))
__type10;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type __type11;
typedef typename pythonic::assignable<typename
std::tuple_element<4,typename
std::remove_reference<__type11>::type>::type>::type __type12;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type12>()))
__type13;
typedef decltype((std::declval<__type10>() * std::declval<__type13>()))
__type14;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type2>::type>::type>::type __type15;
typedef decltype((std::declval<__type15>() * std::declval<__type4>()))
__type16;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type6>::type>::type>::type __type17;
typedef decltype((std::declval<__type17>() * std::declval<__type8>()))
__type18;
typedef decltype((std::declval<__type16>() - std::declval<__type18>()))
__type19;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type12>()))
__type20;
typedef decltype((std::declval<__type19>() * std::declval<__type20>()))
__type21;
typedef typename pythonic::assignable<typename
std::tuple_element<3,typename
std::remove_reference<__type11>::type>::type>::type __type22;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type22>()))
__type23;
typedef decltype((std::declval<__type21>() * std::declval<__type23>()))
__type24;
typedef decltype((std::declval<__type14>() + std::declval<__type24>()))
__type25;
typedef pythonic::types::list<__type25> __type26;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type2>::type>::type>::type __type27;
typedef decltype((std::declval<__type27>() * std::declval<__type4>()))
__type28;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type6>::type>::type>::type __type29;
typedef decltype((std::declval<__type29>() * std::declval<__type8>()))
__type30;
typedef decltype((std::declval<__type28>() - std::declval<__type30>()))
__type31;
typedef decltype((-std::declval<__type31>())) __type32;
typedef decltype((std::declval<__type32>() * std::declval<__type20>()))
__type34;
typedef decltype((std::declval<__type34>() * std::declval<__type23>()))
__type36;
typedef decltype((std::declval<__type10>() * std::declval<__type20>()))
__type41;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type22>()))
__type42;
typedef decltype((std::declval<__type41>() * std::declval<__type42>()))
__type43;
typedef decltype((std::declval<__type36>() + std::declval<__type43>()))
__type44;
typedef pythonic::types::list<__type44> __type45;
typedef decltype((std::declval<__type4>() - std::declval<__type8>()))
__type46;
typedef decltype((std::declval<__type46>() * std::declval<__type13>()))
__type48;
typedef pythonic::types::list<__type48> __type49;
typedef decltype((-std::declval<__type19>())) __type53;
typedef decltype((std::declval<__type53>() * std::declval<__type20>()))
__type55;
typedef decltype((std::declval<__type55>() * std::declval<__type42>()))
__type57;
typedef decltype((std::declval<__type31>() * std::declval<__type42>()))
__type62;
typedef decltype((std::declval<__type57>() - std::declval<__type62>()))
__type63;
typedef pythonic::types::list<__type63> __type64;
typedef decltype((-std::declval<__type46>())) __type66;
typedef decltype((std::declval<__type66>() * std::declval<__type20>()))
__type68;
typedef decltype((std::declval<__type68>() * std::declval<__type42>()))
__type70;
typedef pythonic::types::list<__type70> __type71;
typedef decltype((std::declval<__type68>() * std::declval<__type23>()))
__type77;
typedef pythonic::types::list<__type77> __type78;
typedef typename
__combined<__type26,__type45,__type49,__type64,__type71,__type78>::type
__type79;
typedef __type0 __ptype8;
typedef __type1 __ptype9;
typedef typename pythonic::returnable<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type79>()))>::type
result_type;
}
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 >
typename type<argument_type0, argument_type1, argument_type2,
argument_type3, argument_type4>::result_type operator()(argument_type0 const &
pos, argument_type1 const & cog, argument_type2 const & cob, argument_type3
const & W, argument_type4 const & B) const
;
} ;
struct calc_damping
{
typedef void callable;
typedef void pure;
template <typename argument_type0 , typename argument_type1 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type1;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type __type2;
typedef typename std::tuple_element<3,typename
std::remove_reference<__type2>::type>::type __type3;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type __type4;
typedef typename std::tuple_element<3,typename
std::remove_reference<__type4>::type>::type __type5;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<__type5>()))
__type6;
typedef decltype((std::declval<__type3>() * std::declval<__type6>()))
__type7;
typedef pythonic::types::list<__type7> __type8;
typedef typename std::tuple_element<1,typename
std::remove_reference<__type2>::type>::type __type9;
typedef typename std::tuple_element<1,typename
std::remove_reference<__type4>::type>::type __type10;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<__type10>()))
__type11;
typedef decltype((std::declval<__type9>() * std::declval<__type11>()))
__type12;
typedef pythonic::types::list<__type12> __type13;
typedef typename std::tuple_element<2,typename
std::remove_reference<__type2>::type>::type __type14;
typedef typename std::tuple_element<2,typename
std::remove_reference<__type4>::type>::type __type15;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<__type15>()))
__type16;
typedef decltype((std::declval<__type14>() * std::declval<__type16>()))
__type17;
typedef pythonic::types::list<__type17> __type18;
typedef typename std::tuple_element<5,typename
std::remove_reference<__type2>::type>::type __type19;
typedef typename std::tuple_element<5,typename
std::remove_reference<__type4>::type>::type __type20;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<__type20>()))
__type21;
typedef decltype((std::declval<__type19>() * std::declval<__type21>()))
__type22;
typedef pythonic::types::list<__type22> __type23;
typedef typename std::tuple_element<0,typename
std::remove_reference<__type2>::type>::type __type24;
typedef typename std::tuple_element<0,typename
std::remove_reference<__type4>::type>::type __type25;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<__type25>()))
__type26;
typedef decltype((std::declval<__type24>() * std::declval<__type26>()))
__type27;
typedef pythonic::types::list<__type27> __type28;
typedef typename std::tuple_element<4,typename
std::remove_reference<__type2>::type>::type __type29;
typedef typename std::tuple_element<4,typename
std::remove_reference<__type4>::type>::type __type30;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<__type30>()))
__type31;
typedef decltype((std::declval<__type29>() * std::declval<__type31>()))
__type32;
typedef pythonic::types::list<__type32> __type33;
typedef typename
__combined<__type13,__type18,__type23,__type28,__type33,__type8>::type __type34;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::diag())>::type>::type>()(std::declval<__type34>()))
__type35;
typedef __type0 __ptype11;
typedef __type1 __ptype12;
typedef typename
pythonic::returnable<decltype((-std::declval<__type35>()))>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 >
typename type<argument_type0, argument_type1>::result_type
operator()(argument_type0 const & vel, argument_type1 const & quadratic_coeff)
const
;
} ;
struct calc_other_forces
{
typedef void callable;
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 , typename
argument_type5 , typename argument_type6 , typename argument_type7 , typename
argument_type8 , typename argument_type9 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type __type1;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type2;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type5>::type>::type __type3;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type8>::type>::type __type4;
typedef typename calc_coriolis::type<__type0, __type1, __type2, __type3,
__type4>::__ptype2 __type5;
typedef typename
pythonic::assignable<decltype(std::declval<calc_coriolis>()(std::declval<__type0>(),
std::declval<__type1>(), std::declval<__type2>(), std::declval<__type3>(),
std::declval<__type4>()))>::type __type6;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::ndarray::proxy::flatten())>::type>::type>()(std::declval<__type0>()))
__type7;
typedef typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type6>(),
std::declval<__type7>()))>::type __type8;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type9>::type>::type __type9;
typedef typename
pythonic::assignable<decltype(std::declval<calc_damping>()(std::declval<__type0>(),
std::declval<__type9>()))>::type __type10;
typedef typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type10>(),
std::declval<__type7>()))>::type __type12;
typedef decltype((std::declval<__type8>() + std::declval<__type12>()))
__type13;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type14;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type __type15;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type6>::type>::type __type16;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type7>::type>::type __type17;
typedef typename
pythonic::assignable<decltype(std::declval<calc_restoring>()(std::declval<__type14>(),
std::declval<__type2>(), std::declval<__type15>(), std::declval<__type16>(),
std::declval<__type17>()))>::type __type18;
typedef __type5 __ptype13;
typedef __type5 __ptype14;
typedef typename pythonic::returnable<decltype((std::declval<__type13>()
+ std::declval<__type18>()))>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 , typename
argument_type5 , typename argument_type6 , typename argument_type7 , typename
argument_type8 , typename argument_type9 >
typename type<argument_type0, argument_type1, argument_type2,
argument_type3, argument_type4, argument_type5, argument_type6, argument_type7,
argument_type8, argument_type9>::result_type operator()(argument_type0 const &
pos, argument_type1&& vel, argument_type2 const & cog, argument_type3 const &
cob, argument_type4 const & mass, argument_type5 const & inertia,
argument_type6 const & W, argument_type7 const & B, argument_type8 const &
added_terms, argument_type9 const & quadratic_coeff) const
;
} ;
struct calc_model_forward
{
typedef void callable;
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 , typename
argument_type5 , typename argument_type6 , typename argument_type7 , typename
argument_type8 , typename argument_type9 , typename argument_type10 >
struct type
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type8>::type>::type __type1;
typedef typename calc_mass_term::type<__type0, __type1>::__ptype0 __type2;
typedef typename
pythonic::assignable<decltype(std::declval<calc_mass_term>()(std::declval<__type0>(),
std::declval<__type1>()))>::type __type3;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type __type4;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type5;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type5>::type>::type __type6;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type9>::type>::type __type7;
typedef typename
pythonic::assignable<decltype(std::declval<calc_coriolis>()(std::declval<__type0>(),
std::declval<__type4>(), std::declval<__type5>(), std::declval<__type6>(),
std::declval<__type7>()))>::type __type8;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::ndarray::proxy::flatten())>::type>::type>()(std::declval<__type0>()))
__type9;
typedef typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type8>(),
std::declval<__type9>()))>::type __type10;
typedef decltype((std::declval<__type3>() + std::declval<__type10>()))
__type11;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type10>::type>::type __type12;
typedef typename
pythonic::assignable<decltype(std::declval<calc_damping>()(std::declval<__type0>(),
std::declval<__type12>()))>::type __type13;
typedef typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type13>(),
std::declval<__type9>()))>::type __type15;
typedef decltype((std::declval<__type11>() + std::declval<__type15>()))
__type16;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type17;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type __type18;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type6>::type>::type __type19;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type7>::type>::type __type20;
typedef typename
pythonic::assignable<decltype(std::declval<calc_restoring>()(std::declval<__type17>(),
std::declval<__type5>(), std::declval<__type18>(), std::declval<__type19>(),
std::declval<__type20>()))>::type __type21;
typedef __type2 __ptype25;
typedef __type2 __ptype26;
typedef typename pythonic::returnable<decltype((std::declval<__type16>()
+ std::declval<__type21>()))>::type result_type;
}
;
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 , typename
argument_type5 , typename argument_type6 , typename argument_type7 , typename
argument_type8 , typename argument_type9 , typename argument_type10 >
typename type<argument_type0, argument_type1, argument_type2,
argument_type3, argument_type4, argument_type5, argument_type6, argument_type7,
argument_type8, argument_type9, argument_type10>::result_type
operator()(argument_type0 const & pos, argument_type1&& vel, argument_type2
const & cog, argument_type3 const & cob, argument_type4 const & mass,
argument_type5 const & inertia, argument_type6 const & W, argument_type7 const
& B, argument_type8 const & mass_matrix, argument_type9 const & added_terms,
argument_type10 const & quadratic_coeff) const
;
} ;
template <typename argument_type0 , typename argument_type1 >
typename calc_mass_term::type<argument_type0, argument_type1>::result_type
calc_mass_term::operator()(argument_type0 const & vel, argument_type1 const &
mass_matrix) const
{
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type __type0;
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type __tuple0 = vel;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<3,typename
std::remove_reference<__type0>::type>::type>::type>::type p =
std::get<3>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<4,typename
std::remove_reference<__type0>::type>::type>::type>::type q =
std::get<4>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<5,typename
std::remove_reference<__type0>::type>::type>::type>::type r =
std::get<5>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type0>::type>::type>::type>::type u =
std::get<0>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type0>::type>::type>::type>::type v =
std::get<1>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type0>::type>::type>::type>::type w =
std::get<2>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type M =
mass_matrix;
return (-pythonic::numpy::proxy::array{}(typename
pythonic::assignable<typename
__combined<pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((-std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>()))>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<2,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
+
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<0,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((-std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>()))>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<2,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
+
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<0,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
-
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<5,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
+
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<1,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
-
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<0,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
+
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
-
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<1,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
-
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<0,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<2,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
-
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>()[std::declval<decltype(pythonic::types::make_tuple(std::declval<long>(),
std::declval<long>()))>()])>() * std::declval<typename
pythonic::assignable<typename std::tuple_element<1,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()
* std::declval<typename pythonic::assignable<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<long>>::type>::type({
(((M[pythonic::types::make_tuple(2L, 2L)] * w) * q) -
((M[pythonic::types::make_tuple(1L, 1L)] * v) * r)),
((((-M[pythonic::types::make_tuple(2L, 2L)]) * w) * p) +
((M[pythonic::types::make_tuple(0L, 0L)] * u) * r)),
(((M[pythonic::types::make_tuple(1L, 1L)] * v) * p) -
((M[pythonic::types::make_tuple(0L, 0L)] * u) * q)), 0L,
((((((-M[pythonic::types::make_tuple(2L, 2L)]) * w) * u) +
((M[pythonic::types::make_tuple(0L, 0L)] * u) * w)) -
((M[pythonic::types::make_tuple(5L, 5L)] * r) * p)) +
((M[pythonic::types::make_tuple(3L, 3L)] * p) * r)),
(((((M[pythonic::types::make_tuple(1L, 1L)] * v) * u) -
((M[pythonic::types::make_tuple(0L, 0L)] * u) * v)) +
((M[pythonic::types::make_tuple(4L, 4L)] * q) * p)) -
((M[pythonic::types::make_tuple(3L, 3L)] * p) * q)) })));
}
typename __init__::type::result_type __init__::operator()() const
{
return pythonic::__builtin__::None;
}
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 >
typename calc_coriolis::type<argument_type0, argument_type1, argument_type2,
argument_type3, argument_type4>::result_type
calc_coriolis::operator()(argument_type0 const & vel, argument_type1 const &
mass, argument_type2 const & cog, argument_type3 const & inertia,
argument_type4 const & added_terms) const
{
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type __type0;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type __type1;
typedef typename std::tuple_element<4,typename
std::remove_reference<__type1>::type>::type __type2;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type __type3;
typedef typename pythonic::assignable<typename
std::tuple_element<4,typename
std::remove_reference<__type3>::type>::type>::type __type4;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>::type __type5;
typedef typename std::tuple_element<2,typename
std::remove_reference<__type1>::type>::type __type6;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type3>::type>::type>::type __type7;
typedef typename std::tuple_element<5,typename
std::remove_reference<__type1>::type>::type __type8;
typedef typename pythonic::assignable<typename
std::tuple_element<5,typename
std::remove_reference<__type3>::type>::type>::type __type9;
typedef typename std::tuple_element<1,typename
std::remove_reference<__type1>::type>::type __type10;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type3>::type>::type>::type __type11;
typedef typename std::tuple_element<3,typename
std::remove_reference<__type1>::type>::type __type12;
typedef typename pythonic::assignable<typename
std::tuple_element<3,typename
std::remove_reference<__type3>::type>::type>::type __type13;
typedef typename std::tuple_element<0,typename
std::remove_reference<__type1>::type>::type __type14;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type3>::type>::type>::type __type15;
typedef double __type16;
typedef pythonic::types::list<__type16> __type17;
typedef pythonic::types::list<__type17> __type18;
typedef typename pythonic::assignable<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type18>()))>::type
__type19;
typedef long __type20;
typedef decltype(pythonic::types::make_tuple(std::declval<__type20>(),
std::declval<__type20>())) __type22;
typedef indexable<__type22> __type23;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type80;
typedef decltype((-std::declval<__type80>())) __type81;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type0>::type>::type>::type __type82;
typedef decltype((std::declval<__type82>() * std::declval<__type4>()))
__type83;
typedef decltype((std::declval<__type83>() + std::declval<__type15>()))
__type84;
typedef decltype((std::declval<__type81>() * std::declval<__type84>()))
__type85;
typedef container<typename std::remove_reference<__type85>::type> __type86;
typedef typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type5>::type>::type>::type __type87;
typedef decltype((-std::declval<__type87>())) __type88;
typedef decltype((std::declval<__type88>() * std::declval<__type9>()))
__type89;
typedef container<typename std::remove_reference<__type89>::type> __type90;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type0>::type>::type>::type __type92;
typedef decltype((std::declval<__type92>() * std::declval<__type13>()))
__type93;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type0>::type>::type>::type __type94;
typedef decltype((std::declval<__type94>() * std::declval<__type4>()))
__type95;
typedef decltype((std::declval<__type93>() + std::declval<__type95>()))
__type96;
typedef decltype((std::declval<__type81>() * std::declval<__type96>()))
__type97;
typedef container<typename std::remove_reference<__type97>::type> __type98;
typedef decltype((std::declval<__type94>() * std::declval<__type13>()))
__type99;
typedef decltype((std::declval<__type99>() + std::declval<__type7>()))
__type100;
typedef decltype((std::declval<__type80>() * std::declval<__type100>()))
__type101;
typedef container<typename std::remove_reference<__type101>::type>
__type102;
typedef decltype((std::declval<__type82>() * std::declval<__type13>()))
__type104;
typedef decltype((std::declval<__type104>() - std::declval<__type11>()))
__type105;
typedef decltype((std::declval<__type81>() * std::declval<__type105>()))
__type106;
typedef container<typename std::remove_reference<__type106>::type>
__type107;
typedef typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type5>::type>::type>::type __type108;
typedef decltype((-std::declval<__type108>())) __type109;
typedef decltype((std::declval<__type109>() * std::declval<__type4>()))
__type110;
typedef container<typename std::remove_reference<__type110>::type>
__type111;
typedef decltype((std::declval<__type80>() * std::declval<__type84>()))
__type114;
typedef container<typename std::remove_reference<__type114>::type>
__type115;
typedef decltype((std::declval<__type92>() * std::declval<__type9>()))
__type117;
typedef decltype((std::declval<__type117>() + std::declval<__type11>()))
__type118;
typedef decltype((std::declval<__type81>() * std::declval<__type118>()))
__type119;
typedef container<typename std::remove_reference<__type119>::type>
__type120;
typedef decltype((std::declval<__type80>() * std::declval<__type96>()))
__type124;
typedef container<typename std::remove_reference<__type124>::type>
__type125;
typedef decltype((std::declval<__type108>() * std::declval<__type4>()))
__type126;
typedef container<typename std::remove_reference<__type126>::type>
__type127;
typedef decltype((std::declval<__type80>() * std::declval<__type118>()))
__type130;
typedef container<typename std::remove_reference<__type130>::type>
__type131;
typedef typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type5>::type>::type>::type __type132;
typedef decltype((-std::declval<__type132>())) __type133;
typedef decltype((std::declval<__type133>() * std::declval<__type13>()))
__type134;
typedef container<typename std::remove_reference<__type134>::type>
__type135;
typedef decltype((std::declval<__type80>() * std::declval<__type105>()))
__type138;
typedef container<typename std::remove_reference<__type138>::type>
__type139;
typedef decltype((std::declval<__type92>() * std::declval<__type4>()))
__type140;
typedef decltype((std::declval<__type140>() - std::declval<__type7>()))
__type141;
typedef decltype((std::declval<__type80>() * std::declval<__type141>()))
__type142;
typedef container<typename std::remove_reference<__type142>::type>
__type143;
typedef decltype((std::declval<__type82>() * std::declval<__type9>()))
__type146;
typedef decltype((std::declval<__type95>() + std::declval<__type146>()))
__type147;
typedef decltype((std::declval<__type81>() * std::declval<__type147>()))
__type148;
typedef container<typename std::remove_reference<__type148>::type>
__type149;
typedef decltype((std::declval<__type80>() * std::declval<__type147>()))
__type153;
typedef container<typename std::remove_reference<__type153>::type>
__type154;
typedef decltype((std::declval<__type81>() * std::declval<__type100>()))
__type158;
typedef container<typename std::remove_reference<__type158>::type>
__type159;
typedef decltype((std::declval<__type94>() * std::declval<__type9>()))
__type160;
typedef decltype((std::declval<__type160>() - std::declval<__type15>()))
__type161;
typedef decltype((std::declval<__type80>() * std::declval<__type161>()))
__type162;
typedef container<typename std::remove_reference<__type162>::type>
__type163;
typedef container<typename std::remove_reference<__type20>::type> __type165;
typedef decltype((std::declval<__type146>() + std::declval<__type93>()))
__type174;
typedef decltype((std::declval<__type81>() * std::declval<__type174>()))
__type175;
typedef container<typename std::remove_reference<__type175>::type>
__type176;
typedef decltype((std::declval<__type81>() * std::declval<__type161>()))
__type180;
typedef container<typename std::remove_reference<__type180>::type>
__type181;
typedef decltype((std::declval<__type87>() * std::declval<__type9>()))
__type182;
typedef container<typename std::remove_reference<__type182>::type>
__type183;
typedef decltype((std::declval<__type81>() * std::declval<__type141>()))
__type187;
typedef container<typename std::remove_reference<__type187>::type>
__type188;
typedef decltype((std::declval<__type80>() * std::declval<__type174>()))
__type192;
typedef container<typename std::remove_reference<__type192>::type>
__type193;
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type __tuple0 = vel;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<3,typename
std::remove_reference<__type3>::type>::type>::type>::type p =
std::get<3>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<4,typename
std::remove_reference<__type3>::type>::type>::type>::type q =
std::get<4>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<5,typename
std::remove_reference<__type3>::type>::type>::type>::type r =
std::get<5>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type3>::type>::type>::type>::type u =
std::get<0>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type3>::type>::type>::type>::type v =
std::get<1>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type3>::type>::type>::type>::type w =
std::get<2>(__tuple0);
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type __tuple1 = cog;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type0>::type>::type>::type>::type xg =
std::get<0>(__tuple1);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type0>::type>::type>::type>::type yg =
std::get<1>(__tuple1);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type0>::type>::type>::type>::type zg =
std::get<2>(__tuple1);
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>::type>::type __tuple2 =
inertia;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type5>::type>::type>::type>::type ix =
std::get<0>(__tuple2);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type5>::type>::type>::type>::type iy =
std::get<1>(__tuple2);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type5>::type>::type>::type>::type iz =
std::get<2>(__tuple2);
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type __tuple3 =
added_terms;
;
;
;
;
;
;
typename pythonic::assignable<typename
__combined<__type19,__type23,__type90,__type98>::type>::type CRB =
pythonic::numpy::proxy::array{}(typename
pythonic::assignable<pythonic::types::list<pythonic::types::list<double>>>::type({
typename pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0,
0.0, 0.0, 0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }) }));
CRB[pythonic::types::make_tuple(0L, 3L)] = (mass * ((yg * q) + (zg * r)));
CRB[pythonic::types::make_tuple(0L, 4L)] = ((-mass) * ((xg * q) - w));
CRB[pythonic::types::make_tuple(0L, 5L)] = ((-mass) * ((xg * r) + v));
CRB[pythonic::types::make_tuple(1L, 3L)] = ((-mass) * ((yg * p) + w));
CRB[pythonic::types::make_tuple(1L, 4L)] = (mass * ((zg * r) + (xg * p)));
CRB[pythonic::types::make_tuple(1L, 5L)] = ((-mass) * ((yg * r) - u));
CRB[pythonic::types::make_tuple(2L, 3L)] = ((-mass) * ((zg * p) - v));
CRB[pythonic::types::make_tuple(2L, 4L)] = ((-mass) * ((zg * q) + u));
CRB[pythonic::types::make_tuple(2L, 5L)] = (mass * ((xg * p) + (yg * q)));
CRB[pythonic::types::make_tuple(3L, 0L)] = ((-mass) * ((yg * q) + (zg *
r)));
CRB[pythonic::types::make_tuple(3L, 1L)] = (mass * ((yg * p) + w));
CRB[pythonic::types::make_tuple(3L, 2L)] = (mass * ((zg * p) - v));
CRB[pythonic::types::make_tuple(3L, 3L)] = 0L;
CRB[pythonic::types::make_tuple(3L, 4L)] = (iz * r);
CRB[pythonic::types::make_tuple(3L, 5L)] = ((-iy) * q);
CRB[pythonic::types::make_tuple(4L, 0L)] = (mass * ((xg * q) - w));
CRB[pythonic::types::make_tuple(4L, 1L)] = ((-mass) * ((zg * r) + (xg *
p)));
CRB[pythonic::types::make_tuple(4L, 2L)] = (mass * ((zg * q) + u));
CRB[pythonic::types::make_tuple(4L, 3L)] = ((-iz) * r);
CRB[pythonic::types::make_tuple(4L, 4L)] = 0L;
CRB[pythonic::types::make_tuple(4L, 5L)] = ((-ix) * p);
CRB[pythonic::types::make_tuple(5L, 0L)] = (mass * ((xg * r) + v));
CRB[pythonic::types::make_tuple(5L, 1L)] = (mass * ((yg * r) - u));
CRB[pythonic::types::make_tuple(5L, 2L)] = ((-mass) * ((xg * p) + (yg *
q)));
CRB[pythonic::types::make_tuple(5L, 3L)] = (iy * q);
CRB[pythonic::types::make_tuple(5L, 4L)] = ((-ix) * p);
CRB[pythonic::types::make_tuple(5L, 5L)] = 0L;
typename pythonic::assignable<typename
pythonic::assignable<decltype((std::declval<__type14>() *
std::declval<__type15>()))>::type>::type a1 = (std::get<0>(__tuple3) * u);
typename pythonic::assignable<typename
pythonic::assignable<decltype((std::declval<__type10>() *
std::declval<__type11>()))>::type>::type a2 = (std::get<1>(__tuple3) * v);
typename pythonic::assignable<typename
pythonic::assignable<decltype((std::declval<__type6>() *
std::declval<__type7>()))>::type>::type a3 = (std::get<2>(__tuple3) * w);
typename pythonic::assignable<typename
pythonic::assignable<decltype((std::declval<__type12>() *
std::declval<__type13>()))>::type>::type b1 = (std::get<3>(__tuple3) * p);
typename pythonic::assignable<typename
pythonic::assignable<decltype((std::declval<__type2>() *
std::declval<__type4>()))>::type>::type b2 = (std::get<4>(__tuple3) * q);
typename pythonic::assignable<typename
pythonic::assignable<decltype((std::declval<__type8>() *
std::declval<__type9>()))>::type>::type b3 = (std::get<5>(__tuple3) * r);
;
return (CRB + pythonic::numpy::proxy::array{}(typename
pythonic::assignable<typename __combined<pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>,pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>,pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>,pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>,pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>,pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>>::type>::type({
typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>::type({
0L, 0L, 0L, 0L, (-a3), a2 }), typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>::type({
0L, 0L, 0L, a3, 0L, (-a1) }), typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>::type({
0L, 0L, 0L, (-a2), a1, 0L }), typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>::type({
0L, (-a3), a2, 0L, (-b3), b2 }), typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>::type({
a3, 0L, (-a1), b3, 0L, (-b1) }), typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<decltype((-std::declval<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>()))>,pythonic::types::list<long>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>,pythonic::types::list<typename
pythonic::assignable<decltype((std::declval<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>::type>::type>::type>() *
std::declval<typename pythonic::assignable<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>::type>>::type>::type({
(-a2), a1, 0L, (-b2), b1, 0L }) })));
}
template <typename argument_type0 , typename argument_type1 >
typename mat_vec_mult::type<argument_type0, argument_type1>::result_type
mat_vec_mult::operator()(argument_type0 const & A, argument_type1 const & b)
const
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type0;
typedef typename pythonic::assignable<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::zeros_like())>::type>::type>()(std::declval<__type0>()))>::type
__type1;
typedef
decltype(pythonic::__builtin__::getattr<pythonic::types::attr::SHAPE>(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>())) __type2;
typedef typename std::tuple_element<0,typename
std::remove_reference<__type2>::type>::type __type3;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::__builtin__::proxy::xrange())>::type>::type>()(std::declval<__type3>()))
__type4;
typedef typename std::remove_cv<typename std::iterator_traits<typename
std::remove_reference<__type4>::type::iterator>::value_type>::type __type5;
typedef indexable<__type5> __type6;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type7;
typedef typename std::tuple_element<1,typename
std::remove_reference<__type2>::type>::type __type9;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::__builtin__::proxy::xrange())>::type>::type>()(std::declval<__type9>()))
__type10;
typedef typename std::remove_cv<typename std::iterator_traits<typename
std::remove_reference<__type10>::type::iterator>::value_type>::type __type11;
typedef decltype(pythonic::types::make_tuple(std::declval<__type5>(),
std::declval<__type11>())) __type12;
typedef decltype(std::declval<__type7>()[std::declval<__type12>()])
__type13;
typedef decltype(std::declval<__type0>()[std::declval<__type11>()])
__type14;
typedef decltype((std::declval<__type13>() * std::declval<__type14>()))
__type15;
typedef container<typename std::remove_reference<__type15>::type> __type16;
;
typename pythonic::assignable<typename
__combined<__type1,__type6,__type16>::type>::type c =
pythonic::numpy::proxy::zeros_like{}(b);
{
long __target1 =
std::get<0>(pythonic::__builtin__::getattr<pythonic::types::attr::SHAPE>(A));
for (long i = 0L; i < __target1; i += 1L)
{
{
long __target2 =
std::get<1>(pythonic::__builtin__::getattr<pythonic::types::attr::SHAPE>(A));
for (long j = 0L; j < __target2; j += 1L)
{
c[i] += (A[pythonic::types::make_tuple(i, j)] * b[j]);
}
}
}
}
return c;
}
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 >
typename update_jacobian::type<argument_type0, argument_type1,
argument_type2, argument_type3>::result_type
update_jacobian::operator()(argument_type0&& J, argument_type1 const & phi,
argument_type2 const & theta, argument_type3 const & psi) const
{
;

J(pythonic::types::contiguous_slice(0L,3L),pythonic::types::contiguous_slice(0L,3L))
= pythonic::numpy::proxy::array{}(typename pythonic::assignable<typename
__combined<pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>>::type>,pythonic::types::list<typename

__combined<pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() -
std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() +
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>()))>>::type>,pythonic::types::list<typename

__combined<pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() -
std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() +
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>()))>>::type>>::type>::type({
typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() -
std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() +
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>()))>>::type>::type({
(pythonic::numpy::proxy::cos{}(theta) * pythonic::numpy::proxy::cos{}(psi)),
(((pythonic::numpy::proxy::cos{}(psi) * pythonic::numpy::proxy::sin{}(theta)) *
pythonic::numpy::proxy::sin{}(phi)) - (pythonic::numpy::proxy::sin{}(psi) *
pythonic::numpy::proxy::cos{}(phi))), ((pythonic::numpy::proxy::sin{}(psi) *
pythonic::numpy::proxy::sin{}(phi)) + ((pythonic::numpy::proxy::cos{}(psi) *
pythonic::numpy::proxy::cos{}(phi)) * pythonic::numpy::proxy::sin{}(theta)))
}), typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() -
std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>() +
std::declval<decltype((std::declval<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>()))>>::type>::type({
(pythonic::numpy::proxy::cos{}(theta) * pythonic::numpy::proxy::sin{}(psi)),
((pythonic::numpy::proxy::cos{}(psi) * pythonic::numpy::proxy::cos{}(phi)) +
((pythonic::numpy::proxy::sin{}(phi) * pythonic::numpy::proxy::sin{}(theta)) *
pythonic::numpy::proxy::sin{}(psi))), (((pythonic::numpy::proxy::sin{}(psi) *
pythonic::numpy::proxy::sin{}(theta)) * pythonic::numpy::proxy::cos{}(phi)) -
(pythonic::numpy::proxy::cos{}(psi) * pythonic::numpy::proxy::sin{}(phi))) }),
typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>>::type>::type({
(-pythonic::numpy::proxy::sin{}(theta)), (pythonic::numpy::proxy::cos{}(theta)
* pythonic::numpy::proxy::sin{}(phi)), (pythonic::numpy::proxy::cos{}(theta) *
pythonic::numpy::proxy::cos{}(phi)) }) }));

J(pythonic::types::contiguous_slice(3L,6L),pythonic::types::contiguous_slice(3L,6L))
= pythonic::numpy::proxy::array{}(typename pythonic::assignable<typename
__combined<pythonic::types::list<typename
__combined<pythonic::types::list<decltype((-std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>,pythonic::types::list<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>,pythonic::types::list<double>>::type>,pythonic::types::list<typename

__combined<pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::tan())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::tan())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<double>>::type>,pythonic::types::list<typename

__combined<pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() /
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() /
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<double>>::type>>::type>::type({
typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::tan())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::tan())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<double>>::type>::type({
1.0, (pythonic::numpy::proxy::sin{}(phi) *
pythonic::numpy::proxy::tan{}(theta)), (pythonic::numpy::proxy::cos{}(phi) *
pythonic::numpy::proxy::tan{}(theta)) }), typename
pythonic::assignable<typename
__combined<pythonic::types::list<decltype((-std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>()))>,pythonic::types::list<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>,pythonic::types::list<double>>::type>::type({
0.0, pythonic::numpy::proxy::cos{}(phi), (-pythonic::numpy::proxy::sin{}(phi))
}), typename pythonic::assignable<typename
__combined<pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() /
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>()))>() /
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>()))>()))>,pythonic::types::list<double>>::type>::type({
0.0, (pythonic::numpy::proxy::sin{}(phi) /
pythonic::numpy::proxy::cos{}(theta)), (pythonic::numpy::proxy::cos{}(phi) /
pythonic::numpy::proxy::cos{}(theta)) }) }));
return J;
}
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 >
typename compute_jacobian::type<argument_type0, argument_type1,
argument_type2>::result_type compute_jacobian::operator()(argument_type0 const
& phi, argument_type1 const & theta, argument_type2 const & psi) const
{
typedef double __type0;
typedef pythonic::types::list<__type0> __type1;
typedef pythonic::types::list<__type1> __type2;
typedef typename pythonic::assignable<decltype(std::declval<typename
std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::array())>::type>::type>()(std::declval<__type2>()))>::type
__type3;
typedef long __type4;
typedef decltype(pythonic::types::make_tuple(std::declval<__type4>(),
std::declval<__type4>())) __type6;
typedef indexable<__type6> __type7;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type24;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type24>()))
__type25;
typedef decltype((-std::declval<__type25>())) __type26;
typedef container<typename std::remove_reference<__type26>::type> __type27;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type28;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type28>()))
__type29;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type24>()))
__type30;
typedef decltype((std::declval<__type29>() / std::declval<__type30>()))
__type31;
typedef container<typename std::remove_reference<__type31>::type> __type32;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type34;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type34>()))
__type35;
typedef decltype((std::declval<__type30>() * std::declval<__type35>()))
__type36;
typedef container<typename std::remove_reference<__type36>::type> __type37;
typedef decltype((-std::declval<__type29>())) __type39;
typedef container<typename std::remove_reference<__type39>::type> __type40;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::tan())>::type>::type>()(std::declval<__type24>()))
__type42;
typedef decltype((std::declval<__type29>() * std::declval<__type42>()))
__type43;
typedef container<typename std::remove_reference<__type43>::type> __type44;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<__type34>()))
__type45;
typedef decltype((std::declval<__type45>() * std::declval<__type25>()))
__type47;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<__type28>()))
__type48;
typedef decltype((std::declval<__type47>() * std::declval<__type48>()))
__type49;
typedef decltype((std::declval<__type35>() * std::declval<__type29>()))
__type52;
typedef decltype((std::declval<__type49>() - std::declval<__type52>()))
__type53;
typedef container<typename std::remove_reference<__type53>::type> __type54;
typedef decltype((std::declval<__type35>() * std::declval<__type48>()))
__type57;
typedef decltype((std::declval<__type29>() * std::declval<__type25>()))
__type60;
typedef decltype((std::declval<__type60>() * std::declval<__type45>()))
__type62;
typedef decltype((std::declval<__type57>() + std::declval<__type62>()))
__type63;
typedef container<typename std::remove_reference<__type63>::type> __type64;
typedef container<typename std::remove_reference<__type0>::type> __type66;
typedef decltype((std::declval<__type30>() * std::declval<__type48>()))
__type69;
typedef container<typename std::remove_reference<__type69>::type> __type70;
typedef decltype((std::declval<__type35>() * std::declval<__type25>()))
__type73;
typedef decltype((std::declval<__type73>() * std::declval<__type29>()))
__type75;
typedef decltype((std::declval<__type45>() * std::declval<__type48>()))
__type78;
typedef decltype((std::declval<__type75>() - std::declval<__type78>()))
__type79;
typedef container<typename std::remove_reference<__type79>::type> __type80;
typedef decltype((std::declval<__type30>() * std::declval<__type45>()))
__type85;
typedef container<typename std::remove_reference<__type85>::type> __type86;
typedef container<typename std::remove_reference<__type48>::type> __type88;
typedef decltype((std::declval<__type30>() * std::declval<__type29>()))
__type91;
typedef container<typename std::remove_reference<__type91>::type> __type92;
typedef decltype((std::declval<__type45>() * std::declval<__type29>()))
__type95;
typedef decltype((std::declval<__type57>() * std::declval<__type25>()))
__type100;
typedef decltype((std::declval<__type95>() + std::declval<__type100>()))
__type101;
typedef container<typename std::remove_reference<__type101>::type>
__type102;
typedef decltype((std::declval<__type48>() / std::declval<__type30>()))
__type105;
typedef container<typename std::remove_reference<__type105>::type>
__type106;
typedef decltype((std::declval<__type48>() * std::declval<__type42>()))
__type109;
typedef container<typename std::remove_reference<__type109>::type>
__type110;
;
typename pythonic::assignable<typename
__combined<__type3,__type7,__type88,__type92>::type>::type J =
pythonic::numpy::proxy::array{}(typename
pythonic::assignable<pythonic::types::list<pythonic::types::list<double>>>::type({
typename pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0,
0.0, 0.0, 0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }), typename
pythonic::assignable<pythonic::types::list<double>>::type({ 0.0, 0.0, 0.0, 0.0,
0.0, 0.0 }) }));
J[pythonic::types::make_tuple(0L, 0L)] =
(pythonic::numpy::proxy::cos{}(theta) * pythonic::numpy::proxy::cos{}(psi));
J[pythonic::types::make_tuple(0L, 1L)] =
(((pythonic::numpy::proxy::cos{}(psi) * pythonic::numpy::proxy::sin{}(theta)) *
pythonic::numpy::proxy::sin{}(phi)) - (pythonic::numpy::proxy::sin{}(psi) *
pythonic::numpy::proxy::cos{}(phi)));
J[pythonic::types::make_tuple(0L, 2L)] =
((pythonic::numpy::proxy::sin{}(psi) * pythonic::numpy::proxy::sin{}(phi)) +
((pythonic::numpy::proxy::cos{}(psi) * pythonic::numpy::proxy::cos{}(phi)) *
pythonic::numpy::proxy::sin{}(theta)));
J[pythonic::types::make_tuple(1L, 0L)] =
(pythonic::numpy::proxy::cos{}(theta) * pythonic::numpy::proxy::sin{}(psi));
J[pythonic::types::make_tuple(1L, 1L)] =
((pythonic::numpy::proxy::cos{}(psi) * pythonic::numpy::proxy::cos{}(phi)) +
((pythonic::numpy::proxy::sin{}(phi) * pythonic::numpy::proxy::sin{}(theta)) *
pythonic::numpy::proxy::sin{}(psi)));
J[pythonic::types::make_tuple(1L, 2L)] =
(((pythonic::numpy::proxy::sin{}(psi) * pythonic::numpy::proxy::sin{}(theta)) *
pythonic::numpy::proxy::cos{}(phi)) - (pythonic::numpy::proxy::cos{}(psi) *
pythonic::numpy::proxy::sin{}(phi)));
J[pythonic::types::make_tuple(2L, 0L)] =
(-pythonic::numpy::proxy::sin{}(theta));
J[pythonic::types::make_tuple(2L, 1L)] =
(pythonic::numpy::proxy::cos{}(theta) * pythonic::numpy::proxy::sin{}(phi));
J[pythonic::types::make_tuple(2L, 2L)] =
(pythonic::numpy::proxy::cos{}(theta) * pythonic::numpy::proxy::cos{}(phi));
J[pythonic::types::make_tuple(3L, 3L)] = 1.0;
J[pythonic::types::make_tuple(3L, 4L)] =
(pythonic::numpy::proxy::sin{}(phi) * pythonic::numpy::proxy::tan{}(theta));
J[pythonic::types::make_tuple(3L, 5L)] =
(pythonic::numpy::proxy::cos{}(phi) * pythonic::numpy::proxy::tan{}(theta));
J[pythonic::types::make_tuple(4L, 3L)] = 0.0;
J[pythonic::types::make_tuple(4L, 4L)] = pythonic::numpy::proxy::cos{}(phi);
J[pythonic::types::make_tuple(4L, 5L)] =
(-pythonic::numpy::proxy::sin{}(phi));
J[pythonic::types::make_tuple(5L, 3L)] = 0.0;
J[pythonic::types::make_tuple(5L, 4L)] =
(pythonic::numpy::proxy::sin{}(phi) / pythonic::numpy::proxy::cos{}(theta));
J[pythonic::types::make_tuple(5L, 5L)] =
(pythonic::numpy::proxy::cos{}(phi) / pythonic::numpy::proxy::cos{}(theta));
return J;
}
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 >
typename calc_restoring::type<argument_type0, argument_type1, argument_type2,
argument_type3, argument_type4>::result_type
calc_restoring::operator()(argument_type0 const & pos, argument_type1 const &
cog, argument_type2 const & cob, argument_type3 const & W, argument_type4 const
& B) const
{
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type __type0;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type __type1;
typedef typename pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type __type2;
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type __tuple0 = pos;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<3,typename
std::remove_reference<__type0>::type>::type>::type>::type phi =
std::get<3>(__tuple0);
;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<4,typename
std::remove_reference<__type0>::type>::type>::type>::type theta =
std::get<4>(__tuple0);
;
;
;
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type __tuple1 = cog;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type1>::type>::type>::type>::type xg =
std::get<0>(__tuple1);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type1>::type>::type>::type>::type yg =
std::get<1>(__tuple1);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type1>::type>::type>::type>::type zg =
std::get<2>(__tuple1);
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type __tuple2 = cob;
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<0,typename
std::remove_reference<__type2>::type>::type>::type>::type xb =
std::get<0>(__tuple2);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<1,typename
std::remove_reference<__type2>::type>::type>::type>::type yb =
std::get<1>(__tuple2);
typename pythonic::assignable<typename pythonic::assignable<typename
std::tuple_element<2,typename
std::remove_reference<__type2>::type>::type>::type>::type zb =
std::get<2>(__tuple2);
return pythonic::numpy::proxy::array{}(typename
pythonic::assignable<typename
__combined<pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((-std::declval<decltype((std::declval<typename
std::remove_cv<typename std::remove_reference<argument_type3>::type>::type>()
- std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
* std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((-std::declval<decltype((std::declval<typename
std::remove_cv<typename std::remove_reference<argument_type3>::type>::type>()
- std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
* std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((-std::declval<decltype((std::declval<decltype((std::declval<typename
pythonic::assignable<typename std::tuple_element<0,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() -
std::declval<decltype((std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
* std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
-
std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<typename
pythonic::assignable<typename std::tuple_element<1,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() -
std::declval<decltype((std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((-std::declval<decltype((std::declval<decltype((std::declval<typename
pythonic::assignable<typename std::tuple_element<1,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() -
std::declval<decltype((std::declval<typename pythonic::assignable<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
* std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
+
std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<typename
pythonic::assignable<typename std::tuple_element<2,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() -
std::declval<decltype((std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
* std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<typename
pythonic::assignable<typename std::tuple_element<2,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() -
std::declval<decltype((std::declval<typename pythonic::assignable<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
+
std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<decltype((std::declval<typename
pythonic::assignable<typename std::tuple_element<0,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type>()))>() -
std::declval<decltype((std::declval<typename pythonic::assignable<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type>::type>::type>::type>::type>()
* std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()
* std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::cos())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<3,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>()))>,pythonic::types::list<decltype((std::declval<decltype((std::declval<typename
std::remove_cv<typename std::remove_reference<argument_type3>::type>::type>()
- std::declval<typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type>()))>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::sin())>::type>::type>()(std::declval<typename
pythonic::assignable<typename std::tuple_element<4,typename
std::remove_reference<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>::type>()))>()))>>::type>::type({
((W - B) * pythonic::numpy::proxy::sin{}(theta)), (((-(W - B)) *
pythonic::numpy::proxy::cos{}(theta)) * pythonic::numpy::proxy::sin{}(phi)),
(((-(W - B)) * pythonic::numpy::proxy::cos{}(theta)) *
pythonic::numpy::proxy::cos{}(phi)), ((((-((yg * W) - (yb * B))) *
pythonic::numpy::proxy::cos{}(theta)) * pythonic::numpy::proxy::cos{}(phi)) +
((((zg * W) - (zb * B)) * pythonic::numpy::proxy::cos{}(theta)) *
pythonic::numpy::proxy::sin{}(phi))), ((((zg * W) - (zb * B)) *
pythonic::numpy::proxy::sin{}(theta)) + ((((xg * W) - (xb * B)) *
pythonic::numpy::proxy::cos{}(theta)) * pythonic::numpy::proxy::cos{}(phi))),
((((-((xg * W) - (xb * B))) * pythonic::numpy::proxy::cos{}(theta)) *
pythonic::numpy::proxy::sin{}(phi)) - (((yg * W) - (yb * B)) *
pythonic::numpy::proxy::sin{}(phi))) }));
}
template <typename argument_type0 , typename argument_type1 >
typename calc_damping::type<argument_type0, argument_type1>::result_type
calc_damping::operator()(argument_type0 const & vel, argument_type1 const &
quadratic_coeff) const
{
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type __tuple0 = vel;
;
;
;
;
;
;
typename pythonic::assignable<typename pythonic::assignable<typename
std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type __tuple1 =
quadratic_coeff;
;
;
;
;
;
;
return (-pythonic::numpy::proxy::diag{}(typename
pythonic::assignable<typename
__combined<pythonic::types::list<decltype((std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<typename
std::tuple_element<0,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<typename
std::tuple_element<1,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<typename
std::tuple_element<2,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<typename
std::tuple_element<3,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<typename
std::tuple_element<4,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>()))>()))>,pythonic::types::list<decltype((std::declval<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type>::type>::type>::type>() *
std::declval<decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::proxy::abs())>::type>::type>()(std::declval<typename
std::tuple_element<5,typename std::remove_reference<typename
pythonic::assignable<typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type>::type>::type>::type>()))>()))>>::type>::type({
(std::get<0>(__tuple1) *
pythonic::numpy::proxy::abs{}(std::get<0>(__tuple0))), (std::get<1>(__tuple1) *
pythonic::numpy::proxy::abs{}(std::get<1>(__tuple0))), (std::get<2>(__tuple1) *
pythonic::numpy::proxy::abs{}(std::get<2>(__tuple0))), (std::get<3>(__tuple1) *
pythonic::numpy::proxy::abs{}(std::get<3>(__tuple0))), (std::get<4>(__tuple1) *
pythonic::numpy::proxy::abs{}(std::get<4>(__tuple0))), (std::get<5>(__tuple1) *
pythonic::numpy::proxy::abs{}(std::get<5>(__tuple0))) })));
}
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 , typename
argument_type5 , typename argument_type6 , typename argument_type7 , typename
argument_type8 , typename argument_type9 >
typename calc_other_forces::type<argument_type0, argument_type1,
argument_type2, argument_type3, argument_type4, argument_type5, argument_type6,
argument_type7, argument_type8, argument_type9>::result_type
calc_other_forces::operator()(argument_type0 const & pos, argument_type1&& vel,
argument_type2 const & cog, argument_type3 const & cob, argument_type4 const &
mass, argument_type5 const & inertia, argument_type6 const & W, argument_type7
const & B, argument_type8 const & added_terms, argument_type9 const &
quadratic_coeff) const
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type __type1;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type2;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type5>::type>::type __type3;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type8>::type>::type __type4;
typedef typename
pythonic::assignable<decltype(std::declval<calc_coriolis>()(std::declval<__type0>(),
std::declval<__type1>(), std::declval<__type2>(), std::declval<__type3>(),
std::declval<__type4>()))>::type __type5;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::ndarray::proxy::flatten())>::type>::type>()(std::declval<__type0>()))
__type6;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type7;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type __type8;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type6>::type>::type __type9;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type7>::type>::type __type10;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type9>::type>::type __type11;
typedef typename
pythonic::assignable<decltype(std::declval<calc_damping>()(std::declval<__type0>(),
std::declval<__type11>()))>::type __type12;
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<calc_coriolis>()(std::declval<__type0>(),
std::declval<__type1>(), std::declval<__type2>(), std::declval<__type3>(),
std::declval<__type4>()))>::type>::type C = calc_coriolis()(vel, mass, cog,
inertia, added_terms);
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<calc_damping>()(std::declval<__type0>(),
std::declval<__type11>()))>::type>::type D = calc_damping()(vel,
quadratic_coeff);
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<calc_restoring>()(std::declval<__type7>(),
std::declval<__type2>(), std::declval<__type8>(), std::declval<__type9>(),
std::declval<__type10>()))>::type>::type G = calc_restoring()(pos, cog, cob, W,
B);
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type5>(),
std::declval<__type6>()))>::type>::type F_c = mat_vec_mult()(C,
pythonic::numpy::ndarray::proxy::flatten{}(vel));
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type12>(),
std::declval<__type6>()))>::type>::type F_d = mat_vec_mult()(D,
pythonic::numpy::ndarray::proxy::flatten{}(vel));
return ((F_c + F_d) + G);
}
template <typename argument_type0 , typename argument_type1 , typename
argument_type2 , typename argument_type3 , typename argument_type4 , typename
argument_type5 , typename argument_type6 , typename argument_type7 , typename
argument_type8 , typename argument_type9 , typename argument_type10 >
typename calc_model_forward::type<argument_type0, argument_type1,
argument_type2, argument_type3, argument_type4, argument_type5, argument_type6,
argument_type7, argument_type8, argument_type9, argument_type10>::result_type
calc_model_forward::operator()(argument_type0 const & pos, argument_type1&&
vel, argument_type2 const & cog, argument_type3 const & cob, argument_type4
const & mass, argument_type5 const & inertia, argument_type6 const & W,
argument_type7 const & B, argument_type8 const & mass_matrix, argument_type9
const & added_terms, argument_type10 const & quadratic_coeff) const
{
typedef typename std::remove_cv<typename
std::remove_reference<argument_type1>::type>::type __type0;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type8>::type>::type __type1;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type4>::type>::type __type2;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type2>::type>::type __type3;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type5>::type>::type __type4;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type9>::type>::type __type5;
typedef typename
pythonic::assignable<decltype(std::declval<calc_coriolis>()(std::declval<__type0>(),
std::declval<__type2>(), std::declval<__type3>(), std::declval<__type4>(),
std::declval<__type5>()))>::type __type6;
typedef decltype(std::declval<typename std::remove_cv<typename
std::remove_reference<decltype(pythonic::numpy::ndarray::proxy::flatten())>::type>::type>()(std::declval<__type0>()))
__type7;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type0>::type>::type __type8;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type3>::type>::type __type9;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type6>::type>::type __type10;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type7>::type>::type __type11;
typedef typename std::remove_cv<typename
std::remove_reference<argument_type10>::type>::type __type12;
typedef typename
pythonic::assignable<decltype(std::declval<calc_damping>()(std::declval<__type0>(),
std::declval<__type12>()))>::type __type13;
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<calc_mass_term>()(std::declval<__type0>(),
std::declval<__type1>()))>::type>::type M = calc_mass_term()(vel, mass_matrix);
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<calc_coriolis>()(std::declval<__type0>(),
std::declval<__type2>(), std::declval<__type3>(), std::declval<__type4>(),
std::declval<__type5>()))>::type>::type C = calc_coriolis()(vel, mass, cog,
inertia, added_terms);
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<calc_damping>()(std::declval<__type0>(),
std::declval<__type12>()))>::type>::type D = calc_damping()(vel,
quadratic_coeff);
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<calc_restoring>()(std::declval<__type8>(),
std::declval<__type3>(), std::declval<__type9>(), std::declval<__type10>(),
std::declval<__type11>()))>::type>::type G = calc_restoring()(pos, cog, cob, W,
B);
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type6>(),
std::declval<__type7>()))>::type>::type F_c = mat_vec_mult()(C,
pythonic::numpy::ndarray::proxy::flatten{}(vel));
typename pythonic::assignable<typename
pythonic::assignable<decltype(std::declval<mat_vec_mult>()(std::declval<__type13>(),
std::declval<__type7>()))>::type>::type F_d = mat_vec_mult()(D,
pythonic::numpy::ndarray::proxy::flatten{}(vel));
return (((M + F_c) + F_d) + G);
}
}

typename std::remove_cv<typename std::remove_reference<typename
__pythran_dynamic_model::compute_jacobian::type<double, double,
double>::result_type>::type>::type compute_jacobian0(double a0, double a1,
double a2)
{
return __pythran_dynamic_model::compute_jacobian()(a0, a1, a2);
}
typename std::remove_cv<typename std::remove_reference<typename
__pythran_dynamic_model::mat_vec_mult::type<pythonic::types::ndarray<double,2>,
pythonic::types::ndarray<double,1>>::result_type>::type>::type
mat_vec_mult0(pythonic::types::ndarray<double,2> a0,
pythonic::types::ndarray<double,1> a1)
{
return __pythran_dynamic_model::mat_vec_mult()(a0, a1);
}
typename std::remove_cv<typename std::remove_reference<typename
__pythran_dynamic_model::mat_vec_mult::type<pythonic::types::numpy_texpr<pythonic::types::ndarray<double,2>>,
pythonic::types::ndarray<double,1>>::result_type>::type>::type
mat_vec_mult1(pythonic::types::numpy_texpr<pythonic::types::ndarray<double,2>>
a0, pythonic::types::ndarray<double,1> a1)
{
return __pythran_dynamic_model::mat_vec_mult()(a0, a1);
}

BOOST_PYTHON_MODULE(dynamic_model)
{
#ifdef PYTHONIC_TYPES_NDARRAY_HPP
import_array()
#endif
#ifdef PYTHONIC_BUILTIN_BASEEXCEPTION_HPP
boost::python::register_exception_translator<pythonic::types::BaseException>(&pythonic::translate_BaseException);
#endif
#ifdef PYTHONIC_BUILTIN_SYSTEMEXIT_HPP
boost::python::register_exception_translator<pythonic::types::SystemExit>(&pythonic::translate_SystemExit);
#endif
#ifdef PYTHONIC_BUILTIN_KEYBOARDINTERRUPT_HPP
boost::python::register_exception_translator<pythonic::types::KeyboardInterrupt>(&pythonic::translate_KeyboardInterrupt);
#endif
#ifdef PYTHONIC_BUILTIN_EXCEPTION_HPP
boost::python::register_exception_translator<pythonic::types::Exception>(&pythonic::translate_Exception);
#endif
#ifdef PYTHONIC_BUILTIN_STANDARDERROR_HPP
boost::python::register_exception_translator<pythonic::types::StandardError>(&pythonic::translate_StandardError);
#endif
#ifdef PYTHONIC_BUILTIN_TYPEERROR_HPP
boost::python::register_exception_translator<pythonic::types::TypeError>(&pythonic::translate_TypeError);
#endif
#ifdef PYTHONIC_BUILTIN_IMPORTERROR_HPP
boost::python::register_exception_translator<pythonic::types::ImportError>(&pythonic::translate_ImportError);
#endif
#ifdef PYTHONIC_BUILTIN_RUNTIMEERROR_HPP
boost::python::register_exception_translator<pythonic::types::RuntimeError>(&pythonic::translate_RuntimeError);
#endif
#ifdef PYTHONIC_BUILTIN_NOTIMPLEMENTEDERROR_HPP
boost::python::register_exception_translator<pythonic::types::NotImplementedError>(&pythonic::translate_NotImplementedError);
#endif
#ifdef PYTHONIC_BUILTIN_NAMEERROR_HPP
boost::python::register_exception_translator<pythonic::types::NameError>(&pythonic::translate_NameError);
#endif
#ifdef PYTHONIC_BUILTIN_UNBOUNDLOCALERROR_HPP
boost::python::register_exception_translator<pythonic::types::UnboundLocalError>(&pythonic::translate_UnboundLocalError);
#endif
#ifdef PYTHONIC_BUILTIN_MEMORYERROR_HPP
boost::python::register_exception_translator<pythonic::types::MemoryError>(&pythonic::translate_MemoryError);
#endif
#ifdef PYTHONIC_BUILTIN_ASSERTIONERROR_HPP
boost::python::register_exception_translator<pythonic::types::AssertionError>(&pythonic::translate_AssertionError);
#endif
#ifdef PYTHONIC_BUILTIN_ARITHMETICERROR_HPP
boost::python::register_exception_translator<pythonic::types::ArithmeticError>(&pythonic::translate_ArithmeticError);
#endif
#ifdef PYTHONIC_BUILTIN_OVERFLOWERROR_HPP
boost::python::register_exception_translator<pythonic::types::OverflowError>(&pythonic::translate_OverflowError);
#endif
#ifdef PYTHONIC_BUILTIN_FLOATINGPOINTERROR_HPP
boost::python::register_exception_translator<pythonic::types::FloatingPointError>(&pythonic::translate_FloatingPointError);
#endif
#ifdef PYTHONIC_BUILTIN_BUFFERERROR_HPP
boost::python::register_exception_translator<pythonic::types::BufferError>(&pythonic::translate_BufferError);
#endif
#ifdef PYTHONIC_BUILTIN_ATTRIBUTEERROR_HPP
boost::python::register_exception_translator<pythonic::types::AttributeError>(&pythonic::translate_AttributeError);
#endif
#ifdef PYTHONIC_BUILTIN_VALUEERROR_HPP
boost::python::register_exception_translator<pythonic::types::ValueError>(&pythonic::translate_ValueError);
#endif
#ifdef PYTHONIC_BUILTIN_SYNTAXERROR_HPP
boost::python::register_exception_translator<pythonic::types::SyntaxError>(&pythonic::translate_SyntaxError);
#endif
#ifdef PYTHONIC_BUILTIN_STOPITERATION_HPP
boost::python::register_exception_translator<pythonic::types::StopIteration>(&pythonic::translate_StopIteration);
#endif
#ifdef PYTHONIC_BUILTIN_ENVIRONMENTERROR_HPP
boost::python::register_exception_translator<pythonic::types::EnvironmentError>(&pythonic::translate_EnvironmentError);
#endif
#ifdef PYTHONIC_BUILTIN_OSERROR_HPP
boost::python::register_exception_translator<pythonic::types::OSError>(&pythonic::translate_OSError);
#endif
#ifdef PYTHONIC_BUILTIN_LOOKUPERROR_HPP
boost::python::register_exception_translator<pythonic::types::LookupError>(&pythonic::translate_LookupError);
#endif
#ifdef PYTHONIC_BUILTIN_KEYERROR_HPP
boost::python::register_exception_translator<pythonic::types::KeyError>(&pythonic::translate_KeyError);
#endif
#ifdef PYTHONIC_BUILTIN_WARNING_HPP
boost::python::register_exception_translator<pythonic::types::Warning>(&pythonic::translate_Warning);
#endif
#ifdef PYTHONIC_BUILTIN_BYTESWARNING_HPP
boost::python::register_exception_translator<pythonic::types::BytesWarning>(&pythonic::translate_BytesWarning);
#endif
#ifdef PYTHONIC_BUILTIN_SYNTAXWARNING_HPP
boost::python::register_exception_translator<pythonic::types::SyntaxWarning>(&pythonic::translate_SyntaxWarning);
#endif
#ifdef PYTHONIC_BUILTIN_RUNTIMEWARNING_HPP
boost::python::register_exception_translator<pythonic::types::RuntimeWarning>(&pythonic::translate_RuntimeWarning);
#endif
#ifdef PYTHONIC_BUILTIN_FUTUREWARNING_HPP
boost::python::register_exception_translator<pythonic::types::FutureWarning>(&pythonic::translate_FutureWarning);
#endif
#ifdef PYTHONIC_BUILTIN_USERWARNING_HPP
boost::python::register_exception_translator<pythonic::types::UserWarning>(&pythonic::translate_UserWarning);
#endif
#ifdef PYTHONIC_BUILTIN_INDENTATIONERROR_HPP
boost::python::register_exception_translator<pythonic::types::IndentationError>(&pythonic::translate_IndentationError);
#endif
#ifdef PYTHONIC_BUILTIN_TABERROR_HPP
boost::python::register_exception_translator<pythonic::types::TabError>(&pythonic::translate_TabError);
#endif
#ifdef PYTHONIC_BUILTIN_ZERODIVISIONERROR_HPP
boost::python::register_exception_translator<pythonic::types::ZeroDivisionError>(&pythonic::translate_ZeroDivisionError);
#endif
#ifdef PYTHONIC_BUILTIN_SYSTEMERROR_HPP
boost::python::register_exception_translator<pythonic::types::SystemError>(&pythonic::translate_SystemError);
#endif
#ifdef PYTHONIC_BUILTIN_DEPRECATIONWARNING_HPP
boost::python::register_exception_translator<pythonic::types::DeprecationWarning>(&pythonic::translate_DeprecationWarning);
#endif
#ifdef PYTHONIC_BUILTIN_IMPORTWARNING_HPP
boost::python::register_exception_translator<pythonic::types::ImportWarning>(&pythonic::translate_ImportWarning);
#endif
#ifdef PYTHONIC_BUILTIN_UNICODEERROR_HPP
boost::python::register_exception_translator<pythonic::types::UnicodeError>(&pythonic::translate_UnicodeError);
#endif
#ifdef PYTHONIC_BUILTIN_IOERROR_HPP
boost::python::register_exception_translator<pythonic::types::IOError>(&pythonic::translate_IOError);
#endif
#ifdef PYTHONIC_BUILTIN_INDEXERROR_HPP
boost::python::register_exception_translator<pythonic::types::IndexError>(&pythonic::translate_IndexError);
#endif
#ifdef PYTHONIC_BUILTIN_GENERATOREXIT_HPP
boost::python::register_exception_translator<pythonic::types::GeneratorExit>(&pythonic::translate_GeneratorExit);
#endif
#ifdef PYTHONIC_BUILTIN_REFERENCEERROR_HPP
boost::python::register_exception_translator<pythonic::types::ReferenceError>(&pythonic::translate_ReferenceError);
#endif
#ifdef PYTHONIC_BUILTIN_EOFERROR_HPP
boost::python::register_exception_translator<pythonic::types::EOFError>(&pythonic::translate_EOFError);
#endif
#ifdef PYTHONIC_BUILTIN_PENDINGDEPRECATIONWARNING_HPP
boost::python::register_exception_translator<pythonic::types::PendingDeprecationWarning>(&pythonic::translate_PendingDeprecationWarning);
#endif
#ifdef PYTHONIC_BUILTIN_UNICODEWARNING_HPP
boost::python::register_exception_translator<pythonic::types::UnicodeWarning>(&pythonic::translate_UnicodeWarning);
#endif
#ifdef _OPENMP
omp_set_max_active_levels(1);
#endif
pythonic::pythran_to_python<typename std::remove_cv<typename
std::remove_reference<typename
__pythran_dynamic_model::compute_jacobian::type<double, double,
double>::result_type>::type>::type>();
boost::python::def("compute_jacobian", &compute_jacobian0);
pythonic::python_to_pythran<pythonic::types::ndarray<double,1>>();
pythonic::python_to_pythran<pythonic::types::ndarray<double,2>>();
pythonic::pythran_to_python<typename std::remove_cv<typename
std::remove_reference<typename
__pythran_dynamic_model::mat_vec_mult::type<pythonic::types::ndarray<double,2>,
pythonic::types::ndarray<double,1>>::result_type>::type>::type>();
boost::python::def("mat_vec_mult", &mat_vec_mult0);
pythonic::python_to_pythran<pythonic::types::ndarray<double,1>>();

pythonic::python_to_pythran<pythonic::types::numpy_texpr<pythonic::types::ndarray<double,2>>>();
pythonic::pythran_to_python<typename std::remove_cv<typename
std::remove_reference<typename
__pythran_dynamic_model::mat_vec_mult::type<pythonic::types::numpy_texpr<pythonic::types::ndarray<double,2>>,
pythonic::types::ndarray<double,1>>::result_type>::type>::type>();
boost::python::def("mat_vec_mult", &mat_vec_mult1);
__pythran_dynamic_model::__init__()();
}

Other related posts: