octave-maintainers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[RFC PATCH 2/2] Add Octave:unexpected-densifying warning.


From: Jason Riedy
Subject: [RFC PATCH 2/2] Add Octave:unexpected-densifying warning.
Date: Thu, 06 Dec 2007 16:32:08 -0800
User-agent: Gnus/5.110007 (No Gnus v0.7) Emacs/23.0.50 (gnu/linux)

Warn whenever a sparse matrix is converted to a dense matrix
in an unexpected context.  The context is made "expected" by
disabling the warning.  Possibly not the best idea, but the
warning is disabled by default.

The only expected context included here is full().
---
 scripts/ChangeLog                   |    5 +++++
 scripts/miscellaneous/warning_ids.m |    6 ++++++
 src/ChangeLog                       |   25 +++++++++++++++++++++++++
 src/DLD-FUNCTIONS/sparse.cc         |    1 +
 src/error.cc                        |    1 +
 src/gripes.cc                       |    7 +++++++
 src/gripes.h                        |    3 +++
 src/ov-bool-sparse.cc               |    6 ++++++
 src/ov-cx-sparse.cc                 |    3 +++
 src/ov-re-sparse.cc                 |    5 +++++
 10 files changed, 62 insertions(+), 0 deletions(-)

diff --git a/scripts/ChangeLog b/scripts/ChangeLog
index 6b72c5c..7a8be38 100644
--- a/scripts/ChangeLog
+++ b/scripts/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-06  Jason Riedy  <address@hidden>
+
+       * miscellaneous/warning_ids.m: Add Octave:unexpectedly-densifying
+       description.
+
 2007-12-06  John W. Eaton  <address@hidden>
 
        * general/issymmetric.m: Move tests here from test/test_number.m
diff --git a/scripts/miscellaneous/warning_ids.m 
b/scripts/miscellaneous/warning_ids.m
index 3bbfae4..41a4e13 100644
--- a/scripts/miscellaneous/warning_ids.m
+++ b/scripts/miscellaneous/warning_ids.m
@@ -234,4 +234,10 @@
 ## will print a warning if a switch label is not a constant or constant
 ## expression.  By default, the @code{Octave:variable-switch-label}
 ## warning is disabled.
+##
+## @item Octave:unexpectedly-densifying
+## If the @code{Octave:unexpectedly-densifying} warning is enabled, Octave
+## will print a warning if a sparse matrix is converted to a dense
+## matrix in an unexpected context.By default, the
+## @code{Octave:unexpectedly-densifying} warning is disabled.
 ## @end table
diff --git a/src/ChangeLog b/src/ChangeLog
index 5278a66..2166ec2 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,30 @@
 2007-12-06  Jason Riedy  <address@hidden>
 
+       * gripes.h (unexpectedly_densifying): Declare a warning for
+       when a sparse matrix is converted to a dense matrix in an
+       unexpected conext.
+       * gripes.cc (unexpectedly_densifying): Define.
+       * error.cc (initialize_default_warning_state): Disable warning by
+       default.
+       * ov-bool-sparse.cc (octave_sparse_bool_matrix::matrix_value,
+       octave_sparse_bool_matrix::complex_matrix_value,
+       octave_sparse_bool_matrix::complex_array_value,
+       octave_sparse_bool_matrix::array_value,
+       octave_sparse_bool_matrix::bool_matrix_value,
+       octave_sparse_bool_matrix::bool_array_value): Warn.
+       * ov-re-sparse.cc (octave_sparse_matrix::matrix_value,
+       octave_sparse_matrix::complex_matrix_value,
+       octave_sparse_matrix::complex_array_value,
+       octave_sparse_matrix::array_value,
+       octave_sparse_matrix::bool_array_value): Warn.
+       * ov-cx-sparse.cc (octave_sparse_complex_matrix::matrix_value,
+       octave_sparse_complex_matrix::complex_matrix_value,
+       octave_sparse_complex_matrix::complex_array_value): Warn.
+       * DLD-FUNCTIONS/sparse.cc (Ffull): Expect to densify here, so
+       disable the warning.
+
+2007-12-06  Jason Riedy  <address@hidden>
+
        * error.h (struct octave_warning_suspend): New class for disabling
        a warning within a scope.
        * error.cc (octave_warning_suspend_init): Common init and
diff --git a/src/DLD-FUNCTIONS/sparse.cc b/src/DLD-FUNCTIONS/sparse.cc
index f69ae8b..e004e31 100644
--- a/src/DLD-FUNCTIONS/sparse.cc
+++ b/src/DLD-FUNCTIONS/sparse.cc
@@ -370,6 +370,7 @@ DEFUN_DLD (full, args, ,
 @end deftypefn")
 {
   octave_value retval;
+  octave_warning_suspend("Octave:unexpectedly-densifying");
 
   if (args.length() < 1)
     {
diff --git a/src/error.cc b/src/error.cc
index 2638a0c..7bd6fe3 100644
--- a/src/error.cc
+++ b/src/error.cc
@@ -1413,6 +1413,7 @@ initialize_default_warning_state (void)
   disable_warning ("Octave:str-to-num");
   disable_warning ("Octave:string-concat");
   disable_warning ("Octave:variable-switch-label");
+  disable_warning ("Octave:unexpectedly-densifying");
 }
 
 DEFUN (lasterror, args, ,
diff --git a/src/gripes.cc b/src/gripes.cc
index 74942df..3aaae53 100644
--- a/src/gripes.cc
+++ b/src/gripes.cc
@@ -197,6 +197,13 @@ gripe_logical_conversion (void)
                   "value not equal to 1 or 0 converted to logical 1");
 }
 
+extern void
+gripe_unexpectedly_densifying (void)
+{
+  warning_with_id ("Octave:unexpectedly-densifying",
+                  "sparse matrix unexpectedly converted to dense");
+}
+
 /*
 ;;; Local Variables: ***
 ;;; mode: C++ ***
diff --git a/src/gripes.h b/src/gripes.h
index 0c0a12a..2cd5e45 100644
--- a/src/gripes.h
+++ b/src/gripes.h
@@ -109,6 +109,9 @@ gripe_divide_by_zero (void);
 extern OCTINTERP_API void
 gripe_logical_conversion (void);
 
+extern OCTINTERP_API void
+gripe_unexpectedly_densifying (void);
+
 #endif
 
 /*
diff --git a/src/ov-bool-sparse.cc b/src/ov-bool-sparse.cc
index f5cf3ca..78a3653 100644
--- a/src/ov-bool-sparse.cc
+++ b/src/ov-bool-sparse.cc
@@ -150,36 +150,42 @@ octave_sparse_bool_matrix::convert_to_str_internal (bool 
pad, bool force,
 Matrix
 octave_sparse_bool_matrix::matrix_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return Matrix (matrix.matrix_value ());
 }
 
 ComplexMatrix
 octave_sparse_bool_matrix::complex_matrix_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return ComplexMatrix (matrix.matrix_value ());
 }
 
 ComplexNDArray
 octave_sparse_bool_matrix::complex_array_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return ComplexNDArray (ComplexMatrix (matrix.matrix_value ()));
 }
 
 NDArray 
 octave_sparse_bool_matrix::array_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return NDArray (Matrix(matrix.matrix_value ()));
 }
 
 boolMatrix 
 octave_sparse_bool_matrix::bool_matrix_value (bool) const
 { 
+  gripe_unexpectedly_densifying ();
   return matrix.matrix_value (); 
 }
 
 boolNDArray 
 octave_sparse_bool_matrix::bool_array_value (bool) const
 { 
+  gripe_unexpectedly_densifying ();
   return boolNDArray (matrix.matrix_value ()); 
 }
 
diff --git a/src/ov-cx-sparse.cc b/src/ov-cx-sparse.cc
index cc241c6..3d5cc4e 100644
--- a/src/ov-cx-sparse.cc
+++ b/src/ov-cx-sparse.cc
@@ -155,6 +155,7 @@ octave_sparse_complex_matrix::matrix_value (bool 
force_conversion) const
   if (! force_conversion)
     gripe_implicit_conversion ("Octave:imag-to-real",
                               "complex sparse matrix", "real matrix");
+  gripe_unexpectedly_densifying ();
 
   retval = ::real (matrix.matrix_value ());
 
@@ -186,12 +187,14 @@ octave_sparse_complex_matrix::complex_value (bool) const
 ComplexMatrix
 octave_sparse_complex_matrix::complex_matrix_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return matrix.matrix_value ();
 }
 
 ComplexNDArray 
 octave_sparse_complex_matrix::complex_array_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return ComplexNDArray (matrix.matrix_value ());
 }
 
diff --git a/src/ov-re-sparse.cc b/src/ov-re-sparse.cc
index c4757bc..10b72e8 100644
--- a/src/ov-re-sparse.cc
+++ b/src/ov-re-sparse.cc
@@ -139,6 +139,7 @@ octave_sparse_matrix::complex_value (bool) const
 Matrix
 octave_sparse_matrix::matrix_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return matrix.matrix_value ();
 }
 
@@ -149,6 +150,7 @@ octave_sparse_matrix::bool_array_value (bool warn) const
 
   if (warn && m.any_element_not_one_or_zero ())
     gripe_logical_conversion ();
+  gripe_unexpectedly_densifying ();
 
   return boolNDArray (m);
 }
@@ -156,18 +158,21 @@ octave_sparse_matrix::bool_array_value (bool warn) const
 ComplexMatrix
 octave_sparse_matrix::complex_matrix_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return ComplexMatrix (matrix.matrix_value ());
 }
 
 ComplexNDArray
 octave_sparse_matrix::complex_array_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return ComplexNDArray (ComplexMatrix (matrix.matrix_value ()));
 }
 
 NDArray 
 octave_sparse_matrix::array_value (bool) const
 {
+  gripe_unexpectedly_densifying ();
   return NDArray (matrix.matrix_value ());
 }
 
-- 
debian.1.5.3.7.1-dirty



reply via email to

[Prev in Thread] Current Thread [Next in Thread]