コード例 #1
0
ファイル: nseig.hpp プロジェクト: JanVogelgesang/nt2
 /// INTERNAL ONLY: 3o 3i
 BOOST_FORCEINLINE
 void eval3_3( A0& a0, A1& a1
              ,  nt2::policy<ext::vector_>  const &
              ,  nt2::policy<ext::balance_> const &
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(desired_semantic,  a, boost::proto::child_c<0>(a0), work);
   NT2_AS_TERMINAL_OUT  (desired_semantic, vr, boost::proto::child_c<0>(a1));
   NT2_AS_TERMINAL_OUT  (desired_semantic, vl, boost::proto::child_c<2>(a1));
   NT2_AS_TERMINAL_OUT  (desired_semantic,  w, boost::proto::child_c<1>(a1));
   nt2_la_int ilo, ihi;
   nt2_la_int n = height(a);
   nt2::container::table<rtype_t> scale(of_size(n, 1));
   NT2_LAPACK_VERIFY(gebal(boost::proto::value(a)
                          , boost::proto::value(scale)
                          , ilo, ihi, 'B'));
   tie(vr, w, vl) = nseig(a, nt2::policy<ext::vector_>(), nt2::policy<ext::no_balance_>());
   NT2_LAPACK_VERIFY(gebak(boost::proto::value(vr),
                           boost::proto::value(scale)
                          , ilo, ihi, 'B', 'R'));
   NT2_LAPACK_VERIFY(gebak(boost::proto::value(vl)
                          , boost::proto::value(scale)
                          , ilo, ihi, 'B', 'L'));
   boost::proto::child_c<1>(a1) = w;
   boost::proto::child_c<0>(a1) = vr;
   boost::proto::child_c<2>(a1) = vl;
 }
コード例 #2
0
ファイル: nseig.hpp プロジェクト: JanVogelgesang/nt2
  /// INTERNAL ONLY: 3o 3i
 BOOST_FORCEINLINE
 void eval3_3( A0& a0, A1& a1
              ,  nt2::policy<ext::vector_>  const &
              ,  nt2::policy<ext::no_balance_> const &
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(desired_semantic,  a, boost::proto::child_c<0>(a0), work);
   tie( boost::proto::child_c<0>(a1)
      , boost::proto::child_c<1>(a1)
      , boost::proto::child_c<2>(a1)) = nseig(a, nt2::policy<ext::vector_>());
 }
コード例 #3
0
ファイル: qr.hpp プロジェクト: JanVogelgesang/nt2
 ///////////////////////////////////////////////////////////////////////////////
 /// INTERNAL ONLY: 1i 1o: x  = qr(a)
 BOOST_FORCEINLINE
 void eval1_1 ( A0& a0, A1& a1
                , const nt2::policy<ext::raw_>&
                ) const
 {
   NT2_AS_TERMINAL_INOUT(o_semantic, r
                        , boost::proto::child_c<0>(a0), boost::proto::child_c<0>(a1));
   o_semantic tau(of_size(height(r), 1));
   NT2_LAPACK_VERIFY(nt2::geqrf( boost::proto::value(r)
                               , tau));
   assign_swap(boost::proto::child_c<0>(a1), r);
 }
コード例 #4
0
ファイル: nseig.hpp プロジェクト: JanVogelgesang/nt2
 /// INTERNAL ONLY: 1o 2i
 BOOST_FORCEINLINE
 void eval1_2 ( A0& a0, A1& a1
              , nt2::policy<ext::matrix_> const &
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(desired_semantic, a, boost::proto::child_c<0>(a0), work);
   nt2::container::table <ctype_t, _2D > w(of_size(height(a), 1));
   NT2_LAPACK_VERIFY(nt2::geev_w( boost::proto::value(a)
                               , boost::proto::value(w)
                               ));
   boost::proto::child_c<0>(a1) = from_diag(w); //from_diag doesnt support aliasing currently
 }
コード例 #5
0
ファイル: nseig.hpp プロジェクト: JanVogelgesang/nt2
 /// INTERNAL ONLY: 1o 2i
 BOOST_FORCEINLINE
 void eval1_2 ( A0& a0, A1& a1
              , nt2::policy<ext::vector_> const &
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(desired_semantic, a, boost::proto::child_c<0>(a0), work);
   NT2_AS_TERMINAL_OUT  (desired_semantic, w, boost::proto::child_c<0>(a1));
   w.resize(of_size(height(a), 1));
   NT2_LAPACK_VERIFY(nt2::geev_w( boost::proto::value(a)
                                , boost::proto::value(w)));
   boost::proto::child_c<0>(a1) = w;
 }
コード例 #6
0
ファイル: lu.hpp プロジェクト: LuisBL/pythran
 ///////////////////////////////////////////////////////////////////////////////
 /// INTERNAL ONLY: 1i 1o raw_
 BOOST_FORCEINLINE
 void eval1_1 ( A0& a0, A1& a1
                , const nt2::policy<ext::raw_>&
                ) const
 {
   NT2_AS_TERMINAL_INOUT(o_semantic
                        , lu, boost::proto::child_c<0>(a0)
                        , boost::proto::child_c<0>(a1));
   nt2::container::table<nt2_la_int> ls(of_size(dim(lu), 1));
   CHECK_LAPACK_LU_SUCCESS((nt2::getrf( boost::proto::value(lu)
                                      , boost::proto::value(ls))));
   assign_swap(boost::proto::child_c<0>(a1), lu);
 }
コード例 #7
0
ファイル: qr.hpp プロジェクト: JanVogelgesang/nt2
 /// INTERNAL ONLY: 2i 1o upper_: x  = qr(a, upper_)
 BOOST_FORCEINLINE
 void eval2_1 ( A0& a0, A1& a1
                , const nt2::policy<ext::upper_>&
                ) const
 {
    nt2::container::table<type_t> work;
    NT2_AS_TERMINAL_INOUT(o_semantic
                         , r, boost::proto::child_c<0>(a0), work);
    o_semantic tau(of_size(height(r), 1));
    NT2_LAPACK_VERIFY(nt2::geqrf( boost::proto::value(r)
                                ,tau));
    boost::proto::child_c<0>(a1) = triu(r);
 }
コード例 #8
0
ファイル: qr.hpp プロジェクト: JanVogelgesang/nt2
 ///////////////////////////////////////////////////////////////////////////////
 /// INTERNAL ONLY: 2i 2o raw_: tie(x, tau) = qr(a, raw_)
 BOOST_FORCEINLINE
 void eval2_2 ( A0& a0, A1& a1
                , const nt2::policy<ext::raw_>&
                ) const
 {
   NT2_AS_TERMINAL_INOUT(o_semantic, x
                        , boost::proto::child_c<0>(a0), boost::proto::child_c<0>(a1));
   NT2_AS_TERMINAL_OUT(o_semantic, tau
                      , boost::proto::child_c<1>(a1));
   tau.resize(of_size(dim(x), 1));
   NT2_LAPACK_VERIFY(nt2::geqrf( boost::proto::value(x)
                               , boost::proto::value(tau)));
   assign_swap(boost::proto::child_c<0>(a1), x);
   assign_swap(boost::proto::child_c<1>(a1), tau);
 }
コード例 #9
0
ファイル: qr.hpp プロジェクト: JanVogelgesang/nt2
 BOOST_FORCEINLINE
 void eval2_2 ( A0& a0, A1& a1
              , const T&
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(o_semantic
                        , r, boost::proto::child_c<0>(a0), work);
   NT2_AS_TERMINAL_OUT  (o_semantic
                        , x, boost::proto::child_c<0>(a1));
   nt2::container::table<type_t>     tau;
   tie(x, tau) = qr(r, nt2::raw_);
   extract_qr(x, tau, r, T()); // extract raw or econ
   assign_swap(boost::proto::child_c<0>(a1), x);
   assign_swap(boost::proto::child_c<1>(a1), r);
 }
コード例 #10
0
ファイル: lu.hpp プロジェクト: LuisBL/pythran
 ///////////////////////////////////////////////////////////////////////////////
 /// INTERNAL ONLY: 2i 3o
 BOOST_FORCEINLINE
 void eval2_3 ( A0& a0, A1& a1
                , const nt2::policy<ext::matrix_>&
                ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(o_semantic, lu
                        , boost::proto::child_c<0>(a0), work);
   std::size_t d  = dim(lu);
   nt2::container::table<nt2_la_int> ls(of_size(d, 1)), ip;
   CHECK_LAPACK_LU_SUCCESS(nt2::getrf( boost::proto::value(lu)
                                     , boost::proto::value(ls)));
   construct_ip(ls, ip, height(lu));
   boost::proto::child_c<1>(a1) = nt2::triu(lu( nt2::_(1, d), nt2::_) );
   boost::proto::child_c<0>(a1) = nt2::tri1l(lu(nt2::_, nt2::_(1, d) ) );
   boost::proto::child_c<2>(a1) = eye(height(lu), nt2::meta::as_<rtype_t>())(nt2::_, ip);
 }
コード例 #11
0
ファイル: nseig.hpp プロジェクト: JanVogelgesang/nt2
  /// INTERNAL ONLY: 3o 3i
 BOOST_FORCEINLINE
 void eval3_3( A0& a0, A1& a1
              ,  nt2::policy<ext::matrix_>  const &
              ,  nt2::policy<ext::no_balance_> const &
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(desired_semantic,  a, boost::proto::child_c<0>(a0), work);
   NT2_AS_TERMINAL_OUT  (desired_semantic, vr, boost::proto::child_c<0>(a1));
   NT2_AS_TERMINAL_OUT  (desired_semantic, vl, boost::proto::child_c<2>(a1));
   nt2_la_int n = height(a);
   nt2::container::table<ctype_t> w(of_size(n, 1));
   tie( vr, w, vl) = nseig(a, nt2::policy<ext::vector_>());
   boost::proto::child_c<1>(a1) =  from_diag(w);
   boost::proto::child_c<0>(a1) = vr;
   boost::proto::child_c<2>(a1) = vl;
 }
コード例 #12
0
ファイル: lu.hpp プロジェクト: LuisBL/pythran
 BOOST_FORCEINLINE
 void eval1_2 ( A0& a0, A1& a1
                , const T &
                ) const
 {
   NT2_AS_TERMINAL_INOUT(o_semantic, lu
                        , boost::proto::child_c<0>(a0)
                        , boost::proto::child_c<1>(a1));
   std::size_t d  = dim(lu);
   nt2::container::table<nt2_la_int> ls(of_size(d, 1));
   CHECK_LAPACK_LU_SUCCESS(nt2::getrf( boost::proto::value(lu)
                                     , boost::proto::value(ls)));
   nt2::container::table<nt2_la_int> ip;
   construct_ip(ls, ip, height(lu));
   boost::proto::child_c<0>(a1) = nt2::tri1l(lu(nt2::_, nt2::_(1, d) ) )(ip, nt2::_);
   boost::proto::child_c<1>(a1) = nt2::triu(lu( nt2::_(1, d), nt2::_) );
 }
コード例 #13
0
ファイル: nseig.hpp プロジェクト: JanVogelgesang/nt2
 /// INTERNAL ONLY: 2o 2i
 BOOST_FORCEINLINE
 void eval2_2 ( A0& a0, A1& a1
              , nt2::policy<ext::matrix_> const &
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(desired_semantic,  a, boost::proto::child_c<0>(a0), work);
   NT2_AS_TERMINAL_OUT  (desired_semantic, vr, boost::proto::child_c<0>(a1));
   size_t n = height(a);
   nt2::container::table<ctype_t> w(of_size(n, 1));
   vr.resize(of_size(n, n));
   NT2_LAPACK_VERIFY(nt2::geev_wvr( boost::proto::value(a)
                                  , boost::proto::value(w)
                                  , boost::proto::value(vr)
                                  ));
   boost::proto::child_c<1>(a1) = from_diag(w);
   boost::proto::child_c<0>(a1) = vr;
 }
コード例 #14
0
ファイル: lu.hpp プロジェクト: LuisBL/pythran
    ///////////////////////////////////////////////////////////////////////////////
    /// INTERNAL ONLY: 1i 2o raw_
    BOOST_FORCEINLINE
    void eval1_2 ( A0& a0, A1& a1
                   , const nt2::policy<ext::raw_>&
                   ) const
    {
      typedef nt2::memory::container<tag::table_, nt2_la_int, nt2::_2D> i_semantic;
      NT2_AS_TERMINAL_INOUT(o_semantic
                           , lu, boost::proto::child_c<0>(a0)
                           , boost::proto::child_c<0>(a1));
      NT2_AS_TERMINAL_OUT(i_semantic, ls
                         , boost::proto::child_c<1>(a1));

      ls.resize(of_size(dim(lu), 1));
      CHECK_LAPACK_LU_SUCCESS(nt2::getrf( boost::proto::value(lu)
                                        , boost::proto::value(ls)));
      assign_swap(boost::proto::child_c<0>(a1), lu);
      assign_swap(boost::proto::child_c<1>(a1), ls);
    }
コード例 #15
0
ファイル: qr.hpp プロジェクト: JanVogelgesang/nt2
     ///////////////////////////////////////////////////////////////////////////////
    /// INTERNAL ONLY: 2i 3o matrix_: tie(q, r, p) = qr(a, matrix_)
    BOOST_FORCEINLINE
    void eval2_3 ( A0& a0, A1& a1
                   , const nt2::policy<ext::matrix_>&
                   ) const
    {
      nt2::container::table<type_t> work;
      NT2_AS_TERMINAL_INOUT(o_semantic, r
                           , boost::proto::child_c<0>(a0), work);
      NT2_AS_TERMINAL_OUT  (o_semantic, x
                           , boost::proto::child_c<0>(a1));
      nt2::container::table<type_t>     tau;
      nt2::container::table<nt2_la_int>  ip;
      tie(x, tau, ip) = qr(r, nt2::raw_);

      extract_qr(x, tau, r, nt2::policy<ext::raw_>());
      assign_swap(boost::proto::child_c<0>(a1), x);
      assign_swap(boost::proto::child_c<1>(a1), r);
      boost::proto::child_c<2>(a1) = eye(numel(ip), nt2::meta::as_<type_t>())(nt2::_, ip);
    }
コード例 #16
0
ファイル: qr.hpp プロジェクト: JanVogelgesang/nt2
    ///////////////////////////////////////////////////////////////////////////////
    /// INTERNAL ONLY: 2i 3o vector_: tie(q, r, ip) = qr(a, vector_)
    BOOST_FORCEINLINE
    void eval2_3 ( A0& a0, A1& a1
                   , const nt2::policy<ext::vector_>&
                   ) const
    {
      nt2::container::table<type_t> work;
      NT2_AS_TERMINAL_INOUT(o_semantic, r
                           , boost::proto::child_c<0>(a0), work);
      NT2_AS_TERMINAL_OUT  (o_semantic, x
                           , boost::proto::child_c<0>(a1));
      NT2_AS_TERMINAL_OUT  (i_semantic, ip
                           , boost::proto::child_c<2>(a1));
      nt2::container::table<type_t>     tau;
      tie(x, tau, ip) = qr(r, nt2::raw_);

      extract_qr(x, tau, r, nt2::policy<ext::raw_>());
      assign_swap(boost::proto::child_c<0>(a1), x);
      assign_swap(boost::proto::child_c<1>(a1), r);
      assign_swap(boost::proto::child_c<2>(a1), ip);
    }
コード例 #17
0
ファイル: lu.hpp プロジェクト: LuisBL/pythran
 ///////////////////////////////////////////////////////////////////////////////
 /// INTERNAL ONLY: 2i 3o
 BOOST_FORCEINLINE
 void eval2_3 ( A0& a0, A1& a1
                , const nt2::policy<ext::vector_>&
                ) const
 {
   typedef typename boost::proto::result_of::child_c<A1&,2>::value_type     child;
   typedef typename child::value_type                                     itype_t;
   NT2_AS_TERMINAL_INOUT(o_semantic, lu
                        , boost::proto::child_c<0>(a0)
                        , boost::proto::child_c<1>(a1));
   std::size_t d  = dim(lu);
   nt2::container::table<nt2_la_int> ls(of_size(d, 1));
   CHECK_LAPACK_LU_SUCCESS(nt2::getrf( boost::proto::value(lu)
                                     , boost::proto::value(ls)));
   nt2::container::table<itype_t> ip;
   construct_ip(ls, ip, height(lu));
   boost::proto::child_c<0>(a1) = nt2::tri1l(lu(nt2::_, nt2::_(1, d) ) );
   boost::proto::child_c<1>(a1) = nt2::triu(lu( nt2::_(1, d), nt2::_) );
   inverse(ip);
   assign_swap(boost::proto::child_c<2>(a1), ip);
 }
コード例 #18
0
ファイル: qr.hpp プロジェクト: JanVogelgesang/nt2
 ///////////////////////////////////////////////////////////////////////////////
 /// INTERNAL ONLY: 2i 3o raw_: tie(x, tau, ip) = qr(a, nt2::raw_)
 BOOST_FORCEINLINE
 void eval2_3 ( A0& a0, A1& a1
                , const nt2::policy<ext::raw_>&
                ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(o_semantic, x
                        , boost::proto::child_c<0>(a0), boost::proto::child_c<0>(a1));
   NT2_AS_TERMINAL_OUT(o_semantic, tau
                      , boost::proto::child_c<1>(a1));
   NT2_AS_TERMINAL_OUT(i_semantic,  ip
                      , boost::proto::child_c<2>(a1));
   tau.resize(of_size(dim(x), 1));
   ip = nt2::zeros(nt2::width(x),1,nt2::meta::as_<nt2_la_int>());
   NT2_LAPACK_VERIFY(nt2::geqp3( boost::proto::value(x)
                               , boost::proto::value(ip)
                               , boost::proto::value(tau)));
   assign_swap(boost::proto::child_c<0>(a1), x);
   assign_swap(boost::proto::child_c<1>(a1), tau);
   assign_swap(boost::proto::child_c<2>(a1), ip);
 }
コード例 #19
0
ファイル: nseig.hpp プロジェクト: JanVogelgesang/nt2
 /// INTERNAL ONLY: 3o 2i
 BOOST_FORCEINLINE
 void eval3_2 ( A0& a0, A1& a1
              , nt2::policy<ext::vector_> const &
              ) const
 {
   nt2::container::table<type_t> work;
   NT2_AS_TERMINAL_INOUT(desired_semantic,  a, boost::proto::child_c<0>(a0), work);
   NT2_AS_TERMINAL_OUT  (desired_semantic, vr, boost::proto::child_c<0>(a1));
   NT2_AS_TERMINAL_OUT  (desired_semantic,  w, boost::proto::child_c<1>(a1));
   NT2_AS_TERMINAL_OUT  (desired_semantic, vl, boost::proto::child_c<2>(a1));
   size_t n = height(a);
   vr.resize(of_size(n, n));
   vl.resize(of_size(n, n));
   w.resize(of_size(n, 1));
   NT2_LAPACK_VERIFY(nt2::geev_wvrvl( boost::proto::value(a)
                                    , boost::proto::value(w)
                                    , boost::proto::value(vr)
                                    , boost::proto::value(vl)
                                    ));
   boost::proto::child_c<1>(a1) = w;
   boost::proto::child_c<0>(a1) = vr;
   boost::proto::child_c<2>(a1) = vl;
 }