Update to 3.6.4-rc0

Drop sparse patch applied upstream
This commit is contained in:
Orion Poplawski 2012-10-17 22:17:12 -06:00
parent a33f0eddc8
commit 71fb6f0e2d
4 changed files with 9 additions and 178 deletions

1
.gitignore vendored
View File

@ -9,3 +9,4 @@ octave-3.2.4.tar.bz2
/octave-3.6.2-rc2.tar.bz2
/octave-3.6.2.tar.bz2
/octave-3.6.3.tar.bz2
/octave-3.6.4-rc0.tar.bz2

View File

@ -1,171 +0,0 @@
# HG changeset patch
# User David Bateman <dbateman@free.fr>
# Date 1337385561 -7200
# Node ID f2e72944847b9ec7cec586faa4c72ea91eb53881
# Parent 997e05334f71269f16017ceb06a52cf33feced18
Ensure sparse constructors have valid ridx and data indices even if they are zero matrices (bug #36104)
diff --git a/liboctave/Sparse.cc b/liboctave/Sparse.cc
--- a/liboctave/Sparse.cc
+++ b/liboctave/Sparse.cc
@@ -235,7 +235,7 @@
(*current_liboctave_error_handler)
("Sparse::Sparse (const dim_vector&): dimension mismatch");
else
- rep = new typename Sparse<T>::SparseRep (dv(0), dv(1));
+ rep = new typename Sparse<T>::SparseRep (dv(0), dv(1), 0);
}
template <class T>
@@ -301,11 +301,10 @@
(*current_liboctave_error_handler)
("sparse: column index %d out of bound %d", r.extent (nc), nc);
- rep = new SparseRep (nr, nc);
+ rep = new typename Sparse<T>::SparseRep (nr, nc, (nzm > 0 ? nzm : 0));
dimensions = dim_vector (nr, nc);
-
octave_idx_type n = a.numel (), rl = r.length (nr), cl = c.length (nc);
bool a_scalar = n == 1;
if (a_scalar)
@@ -324,6 +323,7 @@
if (n == 1 && a(0) != T ())
{
change_capacity (nzm > 1 ? nzm : 1);
+ xcidx(0) = 0;
xridx(0) = r(0);
xdata(0) = a(0);
for (octave_idx_type j = 0; j < nc; j++)
@@ -352,6 +352,7 @@
new_nz += rd[i-1] != rd[i];
// Allocate result.
change_capacity (nzm > new_nz ? nzm : new_nz);
+ xcidx (0) = 0;
xcidx (1) = new_nz;
octave_idx_type *rri = ridx ();
T *rrd = data ();
@@ -494,6 +495,7 @@
new_nz += rd[i-1] != rd[i];
// Allocate result.
change_capacity (nzm > new_nz ? nzm : new_nz);
+ xcidx(0) = 0;
xcidx(1) = new_nz;
octave_idx_type *rri = ridx ();
T *rrd = data ();
# HG changeset patch
# User John W. Eaton <jwe@octave.org>
# Date 1340304125 14400
# Node ID 4663cc835c65873fe12b599bcab11ba4a8f5fb87
# Parent f2e72944847b9ec7cec586faa4c72ea91eb53881
Special-case removing rows or columns from empty sparse matrices
* Sparse.cc (Sparse<T>::delete_elements): Don't attempt to preserve
elements if nnz = 0; simply reshape if number of rows or columns is zero.
diff --git a/liboctave/Sparse.cc b/liboctave/Sparse.cc
--- a/liboctave/Sparse.cc
+++ b/liboctave/Sparse.cc
@@ -1240,16 +1240,31 @@
gripe_del_index_out_of_range (false, idx_j.extent (nc), nc);
else if (idx_j.is_cont_range (nc, lb, ub))
{
- const Sparse<T> tmp = *this;
- octave_idx_type lbi = tmp.cidx(lb), ubi = tmp.cidx(ub), new_nz = nz - (ubi - lbi);
- *this = Sparse<T> (nr, nc - (ub - lb), new_nz);
- copy_or_memcpy (lbi, tmp.data (), data ());
- copy_or_memcpy (lbi, tmp.ridx (), ridx ());
- copy_or_memcpy (nz - ubi, tmp.data () + ubi, xdata () + lbi);
- copy_or_memcpy (nz - ubi, tmp.ridx () + ubi, xridx () + lbi);
- copy_or_memcpy (lb, tmp.cidx () + 1, cidx () + 1);
- mx_inline_sub (nc - ub, xcidx () + lb + 1,
- tmp.cidx () + ub + 1, ubi - lbi);
+ if (lb == 0 && ub == nc)
+ {
+ // Delete all rows and columns.
+ *this = Sparse<T> (nr, 0);
+ }
+ else if (nz == 0)
+ {
+ // No elements to preserve; adjust dimensions.
+ *this = Sparse<T> (nr, nc - (ub - lb));
+ }
+ else
+ {
+ const Sparse<T> tmp = *this;
+ octave_idx_type lbi = tmp.cidx(lb), ubi = tmp.cidx(ub),
+ new_nz = nz - (ubi - lbi);
+
+ *this = Sparse<T> (nr, nc - (ub - lb), new_nz);
+ copy_or_memcpy (lbi, tmp.data (), data ());
+ copy_or_memcpy (lbi, tmp.ridx (), ridx ());
+ copy_or_memcpy (nz - ubi, tmp.data () + ubi, xdata () + lbi);
+ copy_or_memcpy (nz - ubi, tmp.ridx () + ubi, xridx () + lbi);
+ copy_or_memcpy (lb, tmp.cidx () + 1, cidx () + 1);
+ mx_inline_sub (nc - ub, xcidx () + lb + 1,
+ tmp.cidx () + ub + 1, ubi - lbi);
+ }
}
else
*this = index (idx_i, idx_j.complement (nc));
@@ -1262,24 +1277,40 @@
gripe_del_index_out_of_range (false, idx_i.extent (nr), nr);
else if (idx_i.is_cont_range (nr, lb, ub))
{
- // This is more memory-efficient than the approach below.
- const Sparse<T> tmpl = index (idx_vector (0, lb), idx_j);
- const Sparse<T> tmpu = index (idx_vector (ub, nr), idx_j);
- *this = Sparse<T> (nr - (ub - lb), nc, tmpl.nnz () + tmpu.nnz ());
- for (octave_idx_type j = 0, k = 0; j < nc; j++)
+ if (lb == 0 && ub == nr)
{
- for (octave_idx_type i = tmpl.cidx(j); i < tmpl.cidx(j+1); i++)
+ // Delete all rows and columns.
+ *this = Sparse<T> (0, nc);
+ }
+ else if (nz == 0)
+ {
+ // No elements to preserve; adjust dimensions.
+ *this = Sparse<T> (nr - (ub - lb), nc);
+ }
+ else
+ {
+ // This is more memory-efficient than the approach below.
+ const Sparse<T> tmpl = index (idx_vector (0, lb), idx_j);
+ const Sparse<T> tmpu = index (idx_vector (ub, nr), idx_j);
+ *this = Sparse<T> (nr - (ub - lb), nc,
+ tmpl.nnz () + tmpu.nnz ());
+ for (octave_idx_type j = 0, k = 0; j < nc; j++)
{
- xdata(k) = tmpl.data(i);
- xridx(k++) = tmpl.ridx(i);
+ for (octave_idx_type i = tmpl.cidx(j); i < tmpl.cidx(j+1);
+ i++)
+ {
+ xdata(k) = tmpl.data(i);
+ xridx(k++) = tmpl.ridx(i);
+ }
+ for (octave_idx_type i = tmpu.cidx(j); i < tmpu.cidx(j+1);
+ i++)
+ {
+ xdata(k) = tmpu.data(i);
+ xridx(k++) = tmpu.ridx(i) + lb;
+ }
+
+ xcidx(j+1) = k;
}
- for (octave_idx_type i = tmpu.cidx(j); i < tmpu.cidx(j+1); i++)
- {
- xdata(k) = tmpu.data(i);
- xridx(k++) = tmpu.ridx(i) + lb;
- }
-
- xcidx(j+1) = k;
}
}
else

View File

@ -2,14 +2,14 @@
%global octave_api api-v48+
# For rc versions, change release manually
#global rcver 2
%global rcver 0
%if 0%{?rcver:1}
%global rctag -rc%{?rcver}
%endif
Name: octave
Version: 3.6.3
Release: 2%{?dist}
Version: 3.6.4
Release: 0.1.rc0%{?dist}
Summary: A high-level language for numerical computations
Epoch: 6
Group: Applications/Engineering
@ -24,8 +24,6 @@ Source1: macros.octave
# https://savannah.gnu.org/bugs/index.php?32839
# Fix building packages from directories
Patch2: octave-3.4.0-pkgbuilddir.patch
# Upstream patches to fix spase matrix handling
Patch3: octave-sparse.patch
URL: http://www.octave.org
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@ -86,7 +84,6 @@ This package contains documentation for Octave.
%prep
%setup -q -n %{name}-%{version}%{?rctag}
%patch2 -p1 -b .pkgbuilddir
%patch3 -p1 -b .sparse
# Check permissions
find -name *.cc -exec chmod 644 {} \;
@ -258,6 +255,10 @@ fi
%changelog
* Wed Oct 17 2012 Orion Poplawski <orion[AT]cora.nwra com> - 6:3.6.4-0.1.rc0
- Update to 3.6.4-rc0
- Drop sparse patch applied upstream
* Thu Sep 6 2012 Orion Poplawski <orion[AT]cora.nwra com> - 6:3.6.3-2
- Add upstream patch to fix sparse matrix test crash

View File

@ -1 +1 @@
29ab7e502e5c963c058906f788670245 octave-3.6.3.tar.bz2
3c9026da372b71df665eef7d0020c10d octave-3.6.4-rc0.tar.bz2