Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.1
octave-forge-communications
communications-octave-4.2.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File communications-octave-4.2.patch of Package octave-forge-communications
diff --git a/src/base-lu.cc b/src/base-lu.cc new file mode 100644 --- /dev/null +++ b/src/base-lu.cc @@ -0,0 +1,191 @@ +/* + +Copyright (C) 1996-2015 John W. Eaton +Copyright (C) 2009 VZLU Prague + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +<http://www.gnu.org/licenses/>. + +*/ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include "base-lu.h" + +template <class lu_type> +base_lu<lu_type>::base_lu (const lu_type& l, const lu_type& u, + const PermMatrix& p) + : a_fact (u), l_fact (l), ipvt (p.transpose ().col_perm_vec ()) +{ + if (l.columns () != u.rows ()) + (*current_liboctave_error_handler) ("lu: dimension mismatch"); +} + +template <class lu_type> +bool +base_lu <lu_type> :: packed (void) const +{ + return l_fact.dims () == dim_vector (); +} + +template <class lu_type> +void +base_lu <lu_type> :: unpack (void) +{ + if (packed ()) + { + l_fact = L (); + a_fact = U (); // FIXME: sub-optimal + ipvt = getp (); + } +} + +template <class lu_type> +lu_type +base_lu <lu_type> :: L (void) const +{ + if (packed ()) + { + octave_idx_type a_nr = a_fact.rows (); + octave_idx_type a_nc = a_fact.cols (); + octave_idx_type mn = (a_nr < a_nc ? a_nr : a_nc); + + lu_type l (a_nr, mn, lu_elt_type (0.0)); + + for (octave_idx_type i = 0; i < a_nr; i++) + { + if (i < a_nc) + l.xelem (i, i) = 1.0; + + for (octave_idx_type j = 0; j < (i < a_nc ? i : a_nc); j++) + l.xelem (i, j) = a_fact.xelem (i, j); + } + + return l; + } + else + return l_fact; +} + +template <class lu_type> +lu_type +base_lu <lu_type> :: U (void) const +{ + if (packed ()) + { + octave_idx_type a_nr = a_fact.rows (); + octave_idx_type a_nc = a_fact.cols (); + octave_idx_type mn = (a_nr < a_nc ? a_nr : a_nc); + + lu_type u (mn, a_nc, lu_elt_type (0.0)); + + for (octave_idx_type i = 0; i < mn; i++) + { + for (octave_idx_type j = i; j < a_nc; j++) + u.xelem (i, j) = a_fact.xelem (i, j); + } + + return u; + } + else + return a_fact; +} + +template <class lu_type> +lu_type +base_lu <lu_type> :: Y (void) const +{ + if (! packed ()) + (*current_liboctave_error_handler) + ("lu: Y () not implemented for unpacked form"); + return a_fact; +} + +template <class lu_type> +Array<octave_idx_type> +base_lu <lu_type> :: getp (void) const +{ + if (packed ()) + { + octave_idx_type a_nr = a_fact.rows (); + + Array<octave_idx_type> pvt (dim_vector (a_nr, 1)); + + for (octave_idx_type i = 0; i < a_nr; i++) + pvt.xelem (i) = i; + + for (octave_idx_type i = 0; i < ipvt.length (); i++) + { + octave_idx_type k = ipvt.xelem (i); + + if (k != i) + { + octave_idx_type tmp = pvt.xelem (k); + pvt.xelem (k) = pvt.xelem (i); + pvt.xelem (i) = tmp; + } + } + + return pvt; + } + else + return ipvt; +} + +template <class lu_type> +PermMatrix +base_lu <lu_type> :: P (void) const +{ + return PermMatrix (getp (), false); +} + +template <class lu_type> +ColumnVector +base_lu <lu_type> :: P_vec (void) const +{ + octave_idx_type a_nr = a_fact.rows (); + + ColumnVector p (a_nr); + + Array<octave_idx_type> pvt = getp (); + + for (octave_idx_type i = 0; i < a_nr; i++) + p.xelem (i) = static_cast<double> (pvt.xelem (i) + 1); + + return p; +} + +template <class lu_type> +bool +base_lu<lu_type>::regular (void) const +{ + bool retval = true; + + octave_idx_type k = std::min (a_fact.rows (), a_fact.columns ()); + + for (octave_idx_type i = 0; i < k; i++) + { + if (a_fact(i, i) == lu_elt_type ()) + { + retval = false; + break; + } + } + + return retval; +} diff --git a/src/base-lu.h b/src/base-lu.h new file mode 100644 --- /dev/null +++ b/src/base-lu.h @@ -0,0 +1,87 @@ +/* + +Copyright (C) 1996-2015 John W. Eaton +Copyright (C) 2009 VZLU Prague + +This file is part of Octave. + +Octave is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 3 of the License, or (at your +option) any later version. + +Octave is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with Octave; see the file COPYING. If not, see +<http://www.gnu.org/licenses/>. + +*/ + +#if !defined (octave_base_lu_h) +#define octave_base_lu_h 1 + +#include "MArray.h" +#include "dColVector.h" +#include "PermMatrix.h" + +template <class lu_type> +class +base_lu +{ +public: + + typedef typename lu_type::element_type lu_elt_type; + + base_lu (void) + : a_fact (), l_fact (), ipvt () { } + + base_lu (const base_lu& a) + : a_fact (a.a_fact), l_fact (a.l_fact), ipvt (a.ipvt) { } + + base_lu (const lu_type& l, const lu_type& u, + const PermMatrix& p); + + base_lu& operator = (const base_lu& a) + { + if (this != &a) + { + a_fact = a.a_fact; + l_fact = a.l_fact; + ipvt = a.ipvt; + } + return *this; + } + + virtual ~base_lu (void) { } + + bool packed (void) const; + + void unpack (void); + + lu_type L (void) const; + + lu_type U (void) const; + + lu_type Y (void) const; + + PermMatrix P (void) const; + + ColumnVector P_vec (void) const; + + bool regular (void) const; + +protected: + + Array<octave_idx_type> getp (void) const; + + lu_type a_fact; + lu_type l_fact; + + Array<octave_idx_type> ipvt; +}; + +#endif diff --git a/src/galois-ops.h b/src/galois-ops.h --- a/src/galois-ops.h +++ b/src/galois-ops.h @@ -21,6 +21,32 @@ #if !defined (galois_octave_ops_h) #define galois_octave_ops_h 1 +#if ! defined (CAST_BINOP_ARGS) +# define CAST_BINOP_ARGS(t1, t2) \ + t1 v1 = dynamic_cast<t1> (a1); \ + t2 v2 = dynamic_cast<t2> (a2) +#endif + +#if ! defined (CAST_UNOP_ARG) +# define CAST_UNOP_ARG(t) \ + t v = dynamic_cast<t> (a) +#endif + +#if ! defined (BINOPDECL) +# define BINOPDECL(name, a1, a2) \ + static octave_value \ + CONCAT2(oct_binop_, name) (const octave_base_value& a1, \ + const octave_base_value& a2) +#endif + +#if ! defined (CATOPDECL) +# define CATOPDECL(name, a1, a2) \ + static octave_value \ + CONCAT2(oct_catop_, name) (octave_base_value& a1, \ + const octave_base_value& a2, \ + const Array<octave_idx_type>& ra_idx) +#endif + // Override the operator and function definition defines from Octave #define DEFBINOP_OP_G(name, t1, t2, op) \ diff --git a/src/galois.cc b/src/galois.cc --- a/src/galois.cc +++ b/src/galois.cc @@ -27,7 +27,7 @@ #include "galoisfield.h" #include "galois-def.h" -#include <octave/base-lu.cc> +#include "base-lu.cc" galois_field_list stored_galois_fields; diff --git a/src/galois.h b/src/galois.h --- a/src/galois.h +++ b/src/galois.h @@ -22,10 +22,10 @@ #define octave_galois_int_h 1 #include <octave/config.h> -#include <octave/base-lu.h> #include <octave/mx-base.h> #include "galoisfield.h" +#include "base-lu.h" typedef void (*solve_singularity_handler) (double rcond); diff --git a/src/ov-galois.cc b/src/ov-galois.cc --- a/src/ov-galois.cc +++ b/src/ov-galois.cc @@ -24,7 +24,6 @@ #include <octave/byte-swap.h> #include <octave/gripes.h> #include <octave/lo-ieee.h> -#include <octave/oct-hdf5.h> #include <octave/oct-locbuf.h> #include <octave/oct-obj.h> #include <octave/ov.h> @@ -35,6 +34,22 @@ #include "galois.h" #include "ov-galois.h" +#if defined (HAVE_HDF5) +# if defined (HAVE_HDF5_H) +# include <hdf5.h> +# endif +# include "oct-hdf5-types.h" +# if defined (OCTAVE_ENABLE_64) +# define H5T_NATIVE_IDX H5T_NATIVE_INT64 +# else +# define H5T_NATIVE_IDX H5T_NATIVE_INT +# endif +#endif + +#if ! defined (X_CAST) +# define X_CAST(T, E) (T) (E) +#endif + #if defined (DEFINE_OCTAVE_ALLOCATOR) DEFINE_OCTAVE_ALLOCATOR (octave_galois); #endif diff --git a/src/syndtable.cc b/src/syndtable.cc --- a/src/syndtable.cc +++ b/src/syndtable.cc @@ -20,8 +20,8 @@ #include <octave/oct.h> -#define COL_MAJ(N) (N / (SIZEOF_INT << 3)) -#define COL_MIN(N) (N % (SIZEOF_INT << 3)) +#define COL_MAJ(N) (N / (sizeof (int) << 3)) +#define COL_MIN(N) (N % (sizeof (int) << 3)) Array<int> get_errs (const int& nmin, const int& nmax, const int &nerrs)
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor