Mercurial > hg > octave-terminal
changeset 14208:67a0ab9f8283
maint: Merge stable to default branch.
author | Rik <octave@nomad.inbox5.com> |
---|---|
date | Thu, 12 Jan 2012 12:54:24 -0800 |
parents | 969532305835 (current diff) f50e5fa121cf (diff) |
children | 238e499c5fea |
files | doc/interpreter/contributors.in scripts/deprecated/sphcat.m scripts/deprecated/spvcat.m |
diffstat | 40 files changed, 403 insertions(+), 254 deletions(-) [+] |
line wrap: on
line diff
--- a/.hgsubstate +++ b/.hgsubstate @@ -1,1 +1,1 @@ -3559997a03e82d650aaa708447362fe20a6eaf15 gnulib +f9813bce2c06a6130a68db4478d1b16ddadaf276 gnulib
--- a/.hgtags +++ b/.hgtags @@ -55,3 +55,6 @@ b0e70a71647b671ebcfa7a79af1ae6d3c0f52065 release-3-4-3 3781981be535e80d44c85373b8fdaa60ca5cd097 ss-3-5-90 ff5588774680d4f54567311fc109c8e351950f1c ss-3-5-91 +a737b3fb9c4d89d3694da6b4e623aeee64b212e1 ss-3-5-92 +72aebe6196414e38ef802469ff6e238f914f04c9 rc-3-6-0-0 +64d9f33313cc8c691974bcd123357e24bccbabdc rc-3-6-0-1
--- a/NEWS +++ b/NEWS @@ -1,7 +1,16 @@ Summary of important user-visible changes for version 3.6: --------------------------------------------------------- - ** The PCRE library is now required to build Octave. + ** The PCRE library is now required to build Octave. If a pre-compiled + package does not exist for your system, you can find PCRE sources + at http://www.pcre.org + + ** The ARPACK library is no longer distributed with Octave. + If you need the eigs or svds functions you must provide an + external ARPACK through a package manager or by compiling it + yourself. If a pre-compiled package does not exist for your system, + you can find the current ARPACK sources at + http://forge.scilab.org/index.php/p/arpack-ng ** Many of Octave's binary operators (.*, .^, +, -, ...) now perform automatic broadcasting for array operations that allows you to use @@ -48,7 +57,7 @@ ** Octave now features a profiler, thanks to the work of Daniel Kraft under the Google Summer of Code mentorship program. The manual has been updated to reflect this addition. The new user-visible - functions are profexplore, profile, and profshow. + functions are profile, profshow, and profexplore. ** Overhaul of statistical distribution functions @@ -56,7 +65,7 @@ 75% reduction in memory usage through use of logical indexing. - Random sample functions now use the same syntax as rand() and accept + Random sample functions now use the same syntax as rand and accept a comma separated list of dimensions or a dimension vector. Functions have been made Matlab-compatible with regard to special @@ -64,9 +73,10 @@ distribution, etc.). This may cause subtle changes to existing scripts. - negative binomial function has been extended to real, non-integer inputs. - discrete_inv() now returns v(1) for 0 instead of NaN. - nbincdf() recoded to use closed form solution with betainc(). + negative binomial function has been extended to real, non-integer + inputs. The discrete_inv fucntion now returns v(1) for 0 instead of + NaN. The nbincdf fucntion has bbeen recoded to use a closed form + solution with betainc. ** strread, textscan, and textread have been completely revamped. @@ -167,10 +177,12 @@ ** Other new functions added in 3.6.0: - is_dq_string nthargout usejava - is_sq_string python waitbar - narginchk recycle zscore - + bicg nthargout usejava + is_dq_string narginchk waitbar + is_sq_string python zscore + is_function_handle register_graphics_toolkit + loaded_graphics_toolkits recycle + ** Deprecated functions. The following functions were deprecated in Octave 3.2 and have been @@ -397,8 +409,8 @@ ordering defined by the `max', `min', and `sort' functions. More specifically, complex numbers are compared by lexicographical comparison of the pairs `[abs(z), arg(z)]'. Previously, only real - parts were compared; this can be trivially achieved by wrapping the - operands in real(). + parts were compared; this can be trivially achieved by converting + the operands to real values with the `real' function. ** The automatic simplification of complex computation results has changed. Octave will now simplify any complex number with a zero @@ -527,7 +539,7 @@ cat/vertcat/horzcat functions. ** It is now possible to optionally employ the xGESDD LAPACK drivers - for computing the singular value decomposition using svd(), instead + for computing the singular value decomposition using svd, instead of the default xGESVD, using the configuration pseudo-variable svd_driver. The xGESDD driver can be up to 6x times faster when singular vectors are requested, but is reported to be somewhat less @@ -712,7 +724,7 @@ for i = 1 : 100 pause(0.1) y = sin (x + 0.1 * i); - refreshdata(); + refreshdata (); endfor works as expected. This capability has be used to introduce
--- a/autogen.sh +++ b/autogen.sh @@ -37,3 +37,17 @@ echo "bootstrapping..." build-aux/bootstrap "$@" + +## G77 is obsolete, but it is still the first option in the autoconf Fortran +## macros. We should avoid it, because mixing old versions of g77 with modern +## gcc and g++ causes trouble. The following will make it harder (but not +## impossible) for users to make this mistake. +## +## FIXME -- we should really work to fix autoconf so that it prefers gfortran +## over g77 even when searching for a Fortran 77 compiler. + +echo "replacing all occurrences of g77 with gfortran in configure script..." + +sed 's/g77/gfortran/g' configure > configure.t +mv configure.t configure +chmod 755 configure
--- a/configure.ac +++ b/configure.ac @@ -27,13 +27,13 @@ EXTERN_CFLAGS="$CFLAGS" EXTERN_CXXFLAGS="$CXXFLAGS" -AC_INIT([GNU Octave], [3.5.91+], [http://octave.org/bugs.html], [octave]) +AC_INIT([GNU Octave], [3.6.0-rc1], [http://octave.org/bugs.html], [octave]) dnl PACKAGE_VERSION is set by the AC_INIT VERSION arg OCTAVE_VERSION="$PACKAGE_VERSION" -OCTAVE_API_VERSION_NUMBER="46" +OCTAVE_API_VERSION_NUMBER="47" OCTAVE_API_VERSION="api-v$OCTAVE_API_VERSION_NUMBER+" -OCTAVE_RELEASE_DATE="2011-12-23" +OCTAVE_RELEASE_DATE="2012-01-12" OCTAVE_COPYRIGHT="Copyright (C) 2012 John W. Eaton and others." AC_SUBST(OCTAVE_VERSION) AC_SUBST(OCTAVE_API_VERSION_NUMBER)
--- a/doc/interpreter/contributors.in +++ b/doc/interpreter/contributors.in @@ -25,6 +25,7 @@ Marco Caliari Daniel Calvelo John C. Campbell +Juan Pablo Carbajal Jean-Francois Cardoso Joao Cardoso Larrie Carr
--- a/doc/interpreter/doccheck/aspell-octave.en.pws +++ b/doc/interpreter/doccheck/aspell-octave.en.pws @@ -38,6 +38,7 @@ autoloaded autoloading Autoloading +Automake autoregression autoregressions autoscaled @@ -82,6 +83,7 @@ brackety breakpoint Brenan +broadcastable Brockwell BSX builtin @@ -305,6 +307,7 @@ fprintf FreeBSD freespacing +FreeType freetype frnd frob @@ -339,6 +342,7 @@ globbing glpk GLS +gnulib gnuplot Gnuplot gnuplot's @@ -348,6 +352,7 @@ Goto gotos GPL +GPLK gplot grabdemo GradObj @@ -485,6 +490,7 @@ libcurl liblapack liboctave +Libtool licensors lineanchors linefeeds @@ -551,6 +557,7 @@ mex Michelsen Microsystems +MinGW minima Minimizers Minitab @@ -572,6 +579,7 @@ mpoles mpower mrdivide +MSYS mtimes Multi multi @@ -745,6 +753,7 @@ Reindent relicensing ren +renderer repelems repmat resampled @@ -781,6 +790,7 @@ SCO screenful se +sed seealso semidefinite Sep @@ -909,6 +919,7 @@ tinv Tisseur Tisseur's +tmp Toeplitz tokenExtents TolF @@ -1046,6 +1057,7 @@ ydata yerrorbar yerrorbars +ylim yy YY yyyy @@ -1056,3 +1068,4 @@ zer Ziggurat zlib +zlim
--- a/doc/interpreter/doccheck/mk_undocumented_list +++ b/doc/interpreter/doccheck/mk_undocumented_list @@ -9,7 +9,7 @@ where = cellfun (\@which, funclist, \"UniformOutput\", 0)' _END_OCT_SCRIPT_ -die "Unable to invoke 'run-octave'. Exiting\n" unless (@octave_output); +unless (@octave_output) { die "Unable to invoke 'run-octave'. Exiting\n" ;} ################################################################################ # Winnow list of functions that require a DOCSTRING @@ -86,9 +86,9 @@ F_DUPFD F_GETFD F_GETFL +fact finite fmod -fntests F_SETFD F_SETFL gammaln
--- a/doc/interpreter/expr.txi +++ b/doc/interpreter/expr.txi @@ -523,7 +523,7 @@ @item @var{x} .+ @var{y} @opindex .+ -Element by element addition. This operator is equivalent to @code{+}. +Element-by-element addition. This operator is equivalent to @code{+}. @item @var{x} - @var{y} @opindex - @@ -532,17 +532,17 @@ shape. @item @var{x} .- @var{y} -Element by element subtraction. This operator is equivalent to @code{-}. +Element-by-element subtraction. This operator is equivalent to @code{-}. @item @var{x} * @var{y} @opindex * -Matrix multiplication. The number of columns of @var{x} must agree with +Matrix multiplication. The number of columns of @var{x} must agree with the number of rows of @var{y}, or they must be broadcastable to the same shape. @item @var{x} .* @var{y} @opindex .* -Element by element multiplication. If both operands are matrices, the +Element-by-element multiplication. If both operands are matrices, the number of rows and columns must both agree, or they must be broadcastable to the same shape. @@ -562,7 +562,7 @@ @item @var{x} ./ @var{y} @opindex ./ -Element by element right division. +Element-by-element right division. @item @var{x} \ @var{y} @opindex \ @@ -580,7 +580,7 @@ @item @var{x} .\ @var{y} @opindex .\ -Element by element left division. Each element of @var{y} is divided +Element-by-element left division. Each element of @var{y} is divided by each corresponding element of @var{x}. @item @var{x} ^ @var{y} @@ -601,9 +601,13 @@ @itemx @var{x} .** @var{y} @opindex .** @opindex .^ -Element by element power operator. If both operands are matrices, the +Element-by-element power operator. If both operands are matrices, the number of rows and columns must both agree, or they must be -broadcastable to the same shape. +broadcastable to the same shape. If several complex results are +possible, the one with smallest non-negative argument (angle) is taken. +This rule may return a complex root even when a real root is also possible. +Use @code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a +real result is preferred. @item -@var{x} @opindex - @@ -628,7 +632,7 @@ Transpose. @end table -Note that because Octave's element by element operators begin with a +Note that because Octave's element-by-element operators begin with a @samp{.}, there is a possible ambiguity for statements like @example
--- a/doc/interpreter/func.txi +++ b/doc/interpreter/func.txi @@ -1145,6 +1145,8 @@ @end group @end example +@DOCSTRING(is_function_handle) + @DOCSTRING(functions) @DOCSTRING(func2str)
--- a/doc/interpreter/install.txi +++ b/doc/interpreter/install.txi @@ -64,6 +64,56 @@ part of your system, or you may have to build some or all of them yourself. +@menu +* Tips for Specific Systems:: +* Build Tools:: +* External Packages:: +@end menu + +@node Tips for Specific Systems +@subsection Tips for Specific Systems + +The names of pre-compiled packages vary by system and do not always +match exactly the names listed above. + +You will usually need the development version of an external dependency +so that you get the libraries and header files for building software, +not just for running already compiled programs. These packages +typically have names that end with the suffix @code{-dev} or @code{-devel}. + +On systems with @code{apt-get} (Debian, Ubuntu, etc.), you may be able +to install most of the tools and external packages using a command +similar to + +@example +apt-get build-dep octave +@end example + +@noindent +The specific package name may be @code{octave3.2} or @code{octave3.4}. +The set of required tools and external dependencies does not change +frequently, so it is not important that the version match exactly, but +you should use the most recent one available. + +On systems with @code{yum} (Fedora, Red Hat, etc.), you may be able to +install most of the tools and external packages using a command similar to + +@example +yum-builddep octave +@end example + +@noindent +The @code{yum-builddep} utility is part of the @code{yum-utils} package. + +For either type of system, the package name may include a version +number. The set of required tools and external dependencies does not +change frequently, so it is not important that the version exactly match +the version you are installing, but you should use the most recent one +available. + +@node Build Tools +@subsection Build Tools + The following tools are required: @table @asis @@ -118,11 +168,12 @@ Automake. @end table +@node External Packages +@subsection External Packages + The following external packages are required: @table @asis -@item PCRE -The Perl Compatible Reular Expression library (http://www.pcre.org). @item BLAS Basic Linear Algebra Subroutine library (@url{http://www.netlib.org/blas}). Accelerated BLAS libraries such as @@ -130,6 +181,8 @@ better performance. @item LAPACK Linear Algebra Package (@url{http://www.netlib.org/lapack}). +@item PCRE +The Perl Compatible Regular Expression library (http://www.pcre.org). @end table The following external package is optional but strongly recommended: @@ -152,7 +205,7 @@ @item cURL Library for transferring data with URL syntax -(@url{http://curl.haxx.se}). cURL is required to provide the +(@url{http://curl.haxx.se}). cURL is required to provide the @code{urlread} and @code{urlwrite} functions and the @code{ftp} class. @item FFTW3 @@ -172,7 +225,7 @@ @item FreeType Portable font engine (@url{http://www.freetype.org}). FreeType is used -to peform font rendering Octave's OpenGL-based graphics functions. +to perform font rendering for Octave's OpenGL-based graphics functions. @item GLPK GNU Linear Programming Kit (@url{http://www.gnu.org/software/glpk}). @@ -190,7 +243,7 @@ @item HDF5 Library for manipulating portable data files (@url{http://www.hdfgroup.org/HDF5}). HDF5 is required for Octave's -@code{save} and @code{load} commands to write and read HDF data files. +@code{load} and @code{save} commands to read and write HDF data files. @item OpenGL API for portable 2D and 3D graphics (@url{http://www.opengl.org}). An
--- a/doc/interpreter/octave.texi +++ b/doc/interpreter/octave.texi @@ -386,7 +386,7 @@ Index Expressions -* Advanced Indexing:: +* Advanced Indexing:: Calling Functions @@ -477,6 +477,8 @@ * Breakpoints:: * Debug Mode:: * Call Stack:: +* Profiling:: +* Profiler Example:: Input and Output @@ -488,7 +490,6 @@ * Terminal Output:: * Terminal Input:: * Simple File I/O:: -* Rational Approximations:: Terminal Output @@ -546,7 +547,7 @@ Three-Dimensional Plots -* Aspect Ratio:: +* Aspect Ratio:: * Three-dimensional Function Plotting:: * Three-dimensional Geometric Shapes:: @@ -575,7 +576,7 @@ * Line Styles:: * Marker Styles:: * Callbacks:: -* Application-defined Data +* Application-defined Data:: * Object Groups:: * Graphics Toolkits:: @@ -595,7 +596,7 @@ Graphics Toolkits -* Customizing Toolkit Behavior:: +* Customizing Toolkit Behavior:: Matrix Manipulation @@ -626,17 +627,17 @@ Vectorization and Faster Code Execution -* Basic Vectorization:: -* Broadcasting:: -* Function Application:: -* Accumulation:: -* Miscellaneous Techniques:: +* Basic Vectorization:: Basic techniques for code optimization +* Broadcasting:: Broadcasting operations +* Function Application:: Applying functions to arrays, cells, and structs +* Accumulation:: Accumulation functions +* Miscellaneous Techniques:: Other techniques for speeding up code * Examples:: Nonlinear Equations * Solvers:: -* Minimizers:: +* Minimizers:: Diagonal and Permutation Matrices @@ -705,7 +706,7 @@ * Descriptive Statistics:: * Basic Statistical Functions:: * Statistical Plots:: -* Correlation and Regression Analysis:: +* Correlation and Regression Analysis:: * Distributions:: * Tests:: * Random Number Generation:: @@ -772,7 +773,7 @@ * I/O Dialogs:: * Progress Bar:: * GUI Utility Functions:: -* User-Defined Preferences:: +* User-Defined Preferences:: System Utilities @@ -876,16 +877,22 @@ Reporting Bugs * Bug Criteria:: -* Bug Tracker:: Where to submit your bug report. -* Bug Reporting:: How to report a bug effectively. -* Sending Patches:: How to send a patch for Octave. +* Bug Tracker:: Where to submit your bug report. +* Bug Reporting:: How to report a bug effectively. +* Sending Patches:: How to send a patch for Octave. Installation * Build Dependencies:: * Running Configure and Make:: -* Compiling Octave with 64-bit Indexing:: -* Installation Problems:: +* Compiling Octave with 64-bit Indexing:: +* Installation Problems:: + +Build Dependencies + +* Tips for Specific Systems:: +* Build Tools:: +* External Packages:: Emacs Octave Support
--- a/doc/interpreter/preface.txi +++ b/doc/interpreter/preface.txi @@ -32,29 +32,29 @@ were somewhat vague, we knew that we wanted to create something that would enable students to solve realistic problems, and that they could use for many things other than chemical reactor design problems. - -There are those who would say that we should be teaching the students -Fortran instead, because that is the computer language of engineering, -but every time we have tried that, the students have spent far too much -time trying to figure out why their Fortran code crashes and not enough -time learning about chemical engineering. With Octave, most students -pick up the basics quickly, and are using it confidently in just a few -hours. +We find that most students pick up the basics of Octave quickly, and are +using it confidently in just a few hours. Although it was originally intended to be used to teach reactor design, it has been used in several other undergraduate and graduate courses in the Chemical Engineering Department at the University of Texas, and the math department at the University of Texas has been using -it for teaching differential equations and linear algebra as well. If -you find it useful, please let us know. We are always interested to -find out how Octave is being used in other places. +it for teaching differential equations and linear algebra as well. +More recently, Octave has been used as the primary computational tool +for teaching Stanford's online Machine Learning class +(@url{ml-class.org}) taught by Andrew Ng. Tens of thousands of students +participated in the course. + +If you find Octave useful, please let us know. We are always interested +to find out how Octave is being used. Virtually everyone thinks that the name Octave has something to do with -music, but it is actually the name of a former professor of mine who -wrote a famous textbook on chemical reaction engineering, and who was -also well known for his ability to do quick `back of the envelope' -calculations. We hope that this software will make it possible for many -people to do more ambitious computations just as easily. +music, but it is actually the name of one of John W. Eaton's former +professors who wrote a famous textbook on chemical reaction engineering, +and who was also well known for his ability to do quick `back of the +envelope' calculations. We hope that this software will make it +possible for many people to do more ambitious computations just as +easily. Everyone is encouraged to share this software with others under the terms of the GNU General Public License (@pxref{Copying}). You are @@ -162,6 +162,24 @@ could make a significant difference in the amount of time that is available for development and support. +Donations supporting Octave development may be made on the web at +@url{https://my.fsf.org/donate/working-together/octave}. These +donations also help to support the Free Software Foundation + +If you'd prefer to pay by check or money order, you can do so by sending +a check to the FSF at the following address: + +@quotation +Free Software Foundation@* +51 Franklin Street, Suite 500@* +Boston, MA 02110-1335@* +USA +@end quotation + +@noindent +If you pay by check, please be sure to write ``GNU Octave'' in the memo +field of your check. + If you cannot provide funding or contribute code, you can still help make Octave better and more reliable by reporting any bugs you find and by offering suggestions for ways to improve Octave. @xref{Trouble}, for @@ -180,18 +198,7 @@ GNU General Public License that comes with Octave and that also appears in @ref{Copying}. -Octave is available on CD-ROM, with various collections of other free -software, from the Free Software Foundation. Ordering a copy of -Octave from the Free Software Foundation helps to fund the development -of more free software. For more information, write to +To download a copy of Octave, please visit +@url{http://www.octave.org/download.html}. -@quotation -Free Software Foundation@* -51 Franklin Street, Fifth Floor@* -Boston, MA 02110-1301--1307@* -USA -@end quotation - -Octave can also be downloaded from @url{http://www.octave.org}, where -additional information is available. @end ifclear
--- a/libcruft/Makefile.am +++ b/libcruft/Makefile.am @@ -43,7 +43,7 @@ # Increment these as needed and according to the rules in the libtool # manual: -libcruft_current = 0 +libcruft_current = 1 libcruft_revision = 0 libcruft_age = 0
--- a/liboctave/Makefile.am +++ b/liboctave/Makefile.am @@ -520,7 +520,7 @@ # Increment these as needed and according to the rules in the libtool # manual: -liboctave_current = 0 +liboctave_current = 1 liboctave_revision = 0 liboctave_age = 0
--- a/liboctave/lo-specfun.cc +++ b/liboctave/lo-specfun.cc @@ -852,6 +852,13 @@ retval = bessel_return_value (Complex (yr, yi), ierr); } + else if (is_integer_value (alpha)) + { + // zbesi can overflow as z->0, and cause troubles for generic case below + alpha = -alpha; + Complex tmp = zbesi (z, alpha, kode, ierr); + retval = bessel_return_value (tmp, ierr); + } else { alpha = -alpha;
--- a/liboctave/oct-inttypes.h +++ b/liboctave/oct-inttypes.h @@ -366,8 +366,8 @@ { // Promotion type for multiplication (if exists). typedef typename query_integer_type<2*sizeof (T), false>::type mptype; - return truncate_int (static_cast<mptype> (x) - * static_cast<mptype> (y)); + return octave_int_base<T>::truncate_int (static_cast<mptype> (x) + * static_cast<mptype> (y)); } // Division with rounding to nearest. Note that / and % are probably @@ -621,8 +621,8 @@ { // Promotion type for multiplication (if exists). typedef typename query_integer_type<2*sizeof (T), true>::type mptype; - return truncate_int (static_cast<mptype> (x) - * static_cast<mptype> (y)); + return octave_int_base<T>::truncate_int (static_cast<mptype> (x) + * static_cast<mptype> (y)); } // Division.
--- a/scripts/deprecated/module.mk +++ b/scripts/deprecated/module.mk @@ -27,8 +27,6 @@ deprecated/saveimage.m \ deprecated/setstr.m \ deprecated/shell_cmd.m \ - deprecated/sphcat.m \ - deprecated/spvcat.m \ deprecated/strerror.m \ deprecated/studentize.m \ deprecated/sylvester_matrix.m \
deleted file mode 100644 --- a/scripts/deprecated/sphcat.m +++ /dev/null @@ -1,35 +0,0 @@ -## Copyright (C) 2004-2012 David Bateman and Andy Adler -## -## 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/>. - -## -*- texinfo -*- -## @deftypefn {Function File} {@var{y} =} sphcat (@var{a1}, @var{a2}, @dots{}, @var{aN}) -## Return the horizontal concatenation of sparse matrices. This function -## is obselete and @code{horzcat} should be used instead. -## @seealso {horzcat, spvcat, vertcat, cat} -## @end deftypefn - -function y = sphcat (varargin) - persistent warned = false; - if (! warned) - warned = true; - warning ("Octave:deprecated-function", - "sphcat is obsolete and will be removed from a future version of Octave; please use horzcat instead"); - endif - - y = horzcat (varargin{:}); -endfunction
deleted file mode 100644 --- a/scripts/deprecated/spvcat.m +++ /dev/null @@ -1,35 +0,0 @@ -## Copyright (C) 2004-2012 David Bateman and Andy Adler -## -## 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/>. - -## -*- texinfo -*- -## @deftypefn {Function File} {@var{y} =} spvcat (@var{a1}, @var{a2}, @dots{}, @var{aN}) -## Return the vertical concatenation of sparse matrices. This function -## is obselete and @code{vertcat} should be used instead. -## @seealso{vertcat, sphcat, horzcat, cat} -## @end deftypefn - -function y = spvcat (varargin) - persistent warned = false; - if (! warned) - warned = true; - warning ("Octave:deprecated-function", - "spvcat is obsolete and will be removed from a future version of Octave; please use vertcat instead"); - endif - - y = vertcat (varargin{:}); -endfunction
--- a/scripts/plot/figure.m +++ b/scripts/plot/figure.m @@ -63,7 +63,16 @@ if (rem (nargs, 2) == 0) if (isnan (f) || init_new_figure) - f = __go_figure__ (f, varargin{:}); + if (ismac () && strcmp (graphics_toolkit (), "fltk")) + ## FIXME - Hack for fltk-aqua to work around bug # 31931 + f = __go_figure__ (f); + drawnow (); + if (! isempty (varargin)) + set (f, varargin{:}); + endif + else + f = __go_figure__ (f, varargin{:}); + endif elseif (nargs > 0) set (f, varargin{:}); endif
--- a/scripts/plot/plot3.m +++ b/scripts/plot/plot3.m @@ -170,6 +170,8 @@ if (! size_equal (x, y, z)) error ("plot3: x, y, and z must have the same shape"); + elseif (ndims (x) > 2) + error ("plot3: x, y, and z must not have more than two dimensions"); endif for i = 1 : columns (x) @@ -222,6 +224,8 @@ if (! size_equal (x, y, z)) error ("plot3: x, y, and z must have the same shape"); + elseif (ndims (x) > 2) + error ("plot3: x, y, and z must not have more than two dimensions"); endif options = __default_plot_options__ (); @@ -294,6 +298,8 @@ if (! size_equal (x, y, z)) error ("plot3: x, y, and z must have the same shape"); + elseif (ndims (x) > 2) + error ("plot3: x, y, and z must not have more than two dimensions"); endif options = __default_plot_options__ ();
--- a/scripts/plot/private/__fltk_print__.m +++ b/scripts/plot/private/__fltk_print__.m @@ -52,15 +52,17 @@ dot = find (opts.name == ".", 1, "last"); if ((! isempty (dot)) && any (strcmpi (opts.name(dot:end), ... - {".eps", ".ps", ".pdf", ".tex", "."}))) + {strcat(".", suffix), ".tex", "."}))) name = opts.name(1:dot-1); if (dot < numel (opts.name) && any (strcmpi (opts.name(dot+1:end), {"eps", "ps", "pdf"}))) ## If user provides eps/ps/pdf suffix, use it. suffix = opts.name(dot+1:end); endif - elseif (dot == numel (opts.name)) - name = opts.name; + else + error ("print:invalid-suffix", + "invalid suffix `%s' for device `%s'.", + opts.name(dot:end), lower (opts.devopt)); endif gl2ps_device = {sprintf("%snotxt", lower (suffix))}; gl2ps_device{2} = "tex";
--- a/scripts/plot/private/__gnuplot_print__.m +++ b/scripts/plot/private/__gnuplot_print__.m @@ -69,10 +69,16 @@ endif case {"epslatex", "pslatex", "pstex", "epslatexstandalone"} dot = find (opts.name == ".", 1, "last"); - if ((! isempty (dot)) - && any (strcmpi (opts.name(dot:end), - {".eps", ".ps", ".pdf", ".tex", "."}))) - name = opts.name(1:dot-1); + n = find (opts.devopt == "l", 1); + suffix = opts.devopt(1:n-1); + if (! isempty (dot)) + if (any (strcmpi (opts.name(dot:end), {strcat(".", suffix), ".tex", "."}))) + name = opts.name(1:dot-1); + else + error ("print:invalid-suffix", + "invalid suffix `%s' for device `%s'.", + opts.name(dot:end), lower (opts.devopt)); + endif endif if (strfind (opts.devopt, "standalone")) term = sprintf ("%s ",
--- a/scripts/plot/xlim.m +++ b/scripts/plot/xlim.m @@ -17,6 +17,10 @@ ## <http://www.gnu.org/licenses/>. ## -*- texinfo -*- +## @c List other forms of function in documentation index +## @findex ylim +## @findex zlim +## ## @deftypefn {Function File} {@var{xl} =} xlim () ## @deftypefnx {Function File} {} xlim (@var{xl}) ## @deftypefnx {Function File} {@var{m} =} xlim ('mode')
--- a/scripts/sparse/svds.m +++ b/scripts/sparse/svds.m @@ -264,13 +264,13 @@ %! assert (flag, !1); %! assert (s2, s(end:-1:end-k+1), 1e-10); %! -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! [u2,s2,v2,flag] = svds (A,k,0,opts); %! s2 = diag (s2); %! assert (flag, !1); %! assert (s2, s(k:-1:1), 1e-10); %! -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! idx = floor(n/2); %! % Don't put sigma right on a singular value or there are convergence issues %! sigma = 0.99*s(idx) + 0.01*s(idx+1);
--- a/scripts/testfun/test.m +++ b/scripts/testfun/test.m @@ -456,8 +456,12 @@ ### TESTIF elseif (strcmp (__type, "testif")) - [__e, __feat] = regexp (__code, '^\s*(\S+)', 'end', 'tokens'); - if (isempty (findstr (octave_config_info ("DEFS"), __feat{1}{1}))) + __e = regexp (__code, '.$', 'lineanchors', 'once'); + ## Strip comment any comment from testif line before looking for features + __feat_line = strtok (__code(1:__e), '#%'); + __feat = regexp (__feat_line, '\w+', 'match'); + __have_feat = strfind (octave_config_info ("DEFS"), __feat); + if (any (cellfun ("isempty", __have_feat))) __xskip++; __istest = 0; __code = ""; # Skip the code.
--- a/src/DLD-FUNCTIONS/__magick_read__.cc +++ b/src/DLD-FUNCTIONS/__magick_read__.cc @@ -212,7 +212,8 @@ idim(3) = nframes; Magick::ImageType type = imvec[0].type (); - const int divisor = (((1 << QuantumDepth) - 1) / ((1 << depth) - 1)); + const int divisor = ((uint64_t (1) << QuantumDepth) - 1) / + ((uint64_t (1) << depth) - 1); switch (type) {
--- a/src/DLD-FUNCTIONS/eigs.cc +++ b/src/DLD-FUNCTIONS/eigs.cc @@ -789,7 +789,7 @@ %!testif HAVE_ARPACK %! d1 = eigs (A, k, 'lm'); %! assert (d1, d0(end:-1:(end-k+1)), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! d1 = eigs (A, k, 'sm'); %! assert (d1, d0(k:-1:1), 1e-11); %!testif HAVE_ARPACK @@ -804,15 +804,15 @@ %!testif HAVE_ARPACK %! d1 = eigs (A, k+1, 'be'); %! assert (d1, d2([1:floor((k+1)/2), (end - ceil((k+1)/2) + 1):end]), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! d1 = eigs (A, k, 4.1); %! [~,idx0] = sort (abs(d0 - 4.1)); %! [~,idx1] = sort (abs(d1 - 4.1)); %! assert (d1(idx1), d0(idx0(1:k)), 1e-11); -%!testif HAVE_CHOLMOD +%!testif HAVE_ARPACK, HAVE_CHOLMOD %! d1 = eigs(A, speye(n), k, 'lm'); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! assert (eigs(A,k,4.1), eigs(A,speye(n),k,4.1), 1e-11); %!testif HAVE_ARPACK %! opts.cholB=true; @@ -824,17 +824,17 @@ %! opts.permB=q; %! d1 = eigs(A, speye(n)(q,q), k, 'lm', opts); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! opts.cholB=true; %! d1 = eigs(A, speye(n), k, 4.1, opts); %! assert (abs(d1), eigs(A,k,4.1), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! opts.cholB=true; %! q = [2:n,1]; %! opts.permB=q; %! d1 = eigs(A, speye(n)(q,q), k, 4.1, opts); %! assert (abs(d1), eigs(A,k,4.1), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! assert (eigs(A,k,4.1), eigs(A,speye(n),k,4.1), 1e-11); %!testif HAVE_ARPACK %! fn = @(x) A * x; @@ -846,7 +846,7 @@ %! opts.issym = 1; opts.isreal = 1; %! d1 = eigs (fn, n, k, 'sm', opts); %! assert (d1, d0(k:-1:1), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! fn = @(x) (A - 4.1 * eye(n)) \ x; %! opts.issym = 1; opts.isreal = 1; %! d1 = eigs (fn, n, k, 4.1, opts); @@ -862,7 +862,7 @@ %! for i=1:k %! assert(max(abs((A - d1(i)*speye(n))*v1(:,i))),0.,1e-11) %! endfor -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! [v1,d1] = eigs(A, k, 'sm'); %! d1 = diag(d1); %! for i=1:k @@ -909,7 +909,7 @@ %!testif HAVE_ARPACK %! d1 = eigs (A, k, 'lm'); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! d1 = eigs (A, k, 'sm'); %! assert (abs(d1), abs(d0(1:k)), 1e-11); %!testif HAVE_ARPACK @@ -932,13 +932,13 @@ %! [~, idx] = sort (imag(abs(d0))); %! d2 = d0(idx); %! assert (sort(imag(d1)), sort(imag(d2(1:k))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! d1 = eigs (A, k, 4.1); %! [~,idx0] = sort (abs(d0 - 4.1)); %! [~,idx1] = sort (abs(d1 - 4.1)); %! assert (abs(d1(idx1)), abs(d0(idx0(1:k))), 1e-11); %! assert (sort(imag(d1(idx1))), sort(imag(d0(idx0(1:k)))), 1e-11); -%!testif HAVE_CHOLMOD +%!testif HAVE_ARPACK, HAVE_CHOLMOD %! d1 = eigs(A, speye(n), k, 'lm'); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); %!testif HAVE_ARPACK @@ -951,19 +951,19 @@ %! opts.permB=q; %! d1 = eigs(A, speye(n)(q,q), k, 'lm', opts); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! opts.cholB=true; %! d1 = eigs(A, speye(n), k, 4.1, opts); %! assert (abs(d1), eigs(A,k,4.1), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! opts.cholB=true; %! q = [2:n,1]; %! opts.permB=q; %! d1 = eigs(A, speye(n)(q,q), k, 4.1, opts); %! assert (abs(d1), eigs(A,k,4.1), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! assert (abs(eigs(A,k,4.1)), abs(eigs(A,speye(n),k,4.1)), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! assert (sort(imag(eigs(A,k,4.1))), sort(imag(eigs(A,speye(n),k,4.1))), 1e-11); %!testif HAVE_ARPACK %! fn = @(x) A * x; @@ -975,7 +975,7 @@ %! opts.issym = 0; opts.isreal = 1; %! d1 = eigs (fn, n, k, 'sm', opts); %! assert (abs(d1), d0(1:k), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! fn = @(x) (A - 4.1 * eye(n)) \ x; %! opts.issym = 0; opts.isreal = 1; %! d1 = eigs (fn, n, k, 4.1, opts); @@ -986,7 +986,7 @@ %! for i=1:k %! assert(max(abs((A - d1(i)*speye(n))*v1(:,i))),0.,1e-11) %! endfor -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! [v1,d1] = eigs(A, k, 'sm'); %! d1 = diag(d1); %! for i=1:k @@ -1039,7 +1039,7 @@ %!testif HAVE_ARPACK %! d1 = eigs (A, k, 'lm'); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! d1 = eigs (A, k, 'sm'); %! assert (abs(d1), abs(d0(1:k)), 1e-11); %!testif HAVE_ARPACK @@ -1062,13 +1062,13 @@ %! [~, idx] = sort (imag(abs(d0))); %! d2 = d0(idx); %! assert (sort(imag(d1)), sort(imag(d2(1:k))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! d1 = eigs (A, k, 4.1); %! [~,idx0] = sort (abs(d0 - 4.1)); %! [~,idx1] = sort (abs(d1 - 4.1)); %! assert (abs(d1(idx1)), abs(d0(idx0(1:k))), 1e-11); %! assert (sort(imag(d1(idx1))), sort(imag(d0(idx0(1:k)))), 1e-11); -%!testif HAVE_CHOLMOD +%!testif HAVE_ARPACK, HAVE_CHOLMOD %! d1 = eigs(A, speye(n), k, 'lm'); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); %!testif HAVE_ARPACK @@ -1081,21 +1081,21 @@ %! opts.permB=q; %! d1 = eigs(A, speye(n)(q,q), k, 'lm', opts); %! assert (abs(d1), abs(d0(end:-1:(end-k+1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! opts.cholB=true; %! d1 = eigs(A, speye(n), k, 4.1, opts); %! assert (abs(abs(d1)), abs(eigs(A,k,4.1)), 1e-11); %! assert (sort(imag(abs(d1))), sort(imag(eigs(A,k,4.1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! opts.cholB=true; %! q = [2:n,1]; %! opts.permB=q; %! d1 = eigs(A, speye(n)(q,q), k, 4.1, opts); %! assert (abs(abs(d1)), abs(eigs(A,k,4.1)), 1e-11); %! assert (sort(imag(abs(d1))), sort(imag(eigs(A,k,4.1))), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! assert (abs(eigs(A,k,4.1)), abs(eigs(A,speye(n),k,4.1)), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! assert (sort(imag(eigs(A,k,4.1))), sort(imag(eigs(A,speye(n),k,4.1))), 1e-11); %!testif HAVE_ARPACK %! fn = @(x) A * x; @@ -1107,7 +1107,7 @@ %! opts.issym = 0; opts.isreal = 0; %! d1 = eigs (fn, n, k, 'sm', opts); %! assert (abs(d1), d0(1:k), 1e-11); -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! fn = @(x) (A - 4.1 * eye(n)) \ x; %! opts.issym = 0; opts.isreal = 0; %! d1 = eigs (fn, n, k, 4.1, opts); @@ -1118,7 +1118,7 @@ %! for i=1:k %! assert(max(abs((A - d1(i)*speye(n))*v1(:,i))),0.,1e-11) %! endfor -%!testif HAVE_UMFPACK +%!testif HAVE_ARPACK, HAVE_UMFPACK %! [v1,d1] = eigs(A, k, 'sm'); %! d1 = diag(d1); %! for i=1:k
--- a/src/DLD-FUNCTIONS/module-files +++ b/src/DLD-FUNCTIONS/module-files @@ -32,7 +32,7 @@ dmperm.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS) dot.cc eig.cc -eigs.cc|$(SPARSE_XCPPFLAGS)|$(SPARSE_XLDFLAGS)|$(SPARSE_XLIBS) $(LAPACK_LIBS) $(BLAS_LIBS) +eigs.cc|$(ARPACK_CPPFLAGS) $(SPARSE_XCPPFLAGS)|$(ARPACK_LDFLAGS) $(SPARSE_XLDFLAGS)|$(ARPACK_LIBS) $(SPARSE_XLIBS) $(LAPACK_LIBS) $(BLAS_LIBS) fft.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS) fft2.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS) fftn.cc|$(FFTW_XCPPFLAGS)|$(FFTW_XLDFLAGS)|$(FFTW_XLIBS)
--- a/src/DLD-FUNCTIONS/pinv.cc +++ b/src/DLD-FUNCTIONS/pinv.cc @@ -174,18 +174,19 @@ %!shared a, b, tol, hitol, d, u, x, y %! a = reshape (rand*[1:16], 4, 4); ## Rank 2 matrix %! b = pinv (a); -%! tol = 1e-14; -%! hitol = 15*sqrt(eps); +%! tol = 4e-14; +%! hitol = 40*sqrt (eps); %! d = diag ([rand, rand, hitol, hitol]); %! u = rand (4); ## Could be singular by freak accident %! x = inv (u)*d*u; -%! y = pinv (x, sqrt(eps)); -%!assert(a*b*a, a, tol); -%!assert(b*a*b, b, tol); -%!assert((b*a)', b*a, tol); -%!assert((a*b)', a*b, tol); -%!assert(x*y*x, x, -hitol); -%!assert(y*x*y, y, -hitol); -%!assert((x*y)', x*y, hitol); -%!assert((y*x)', y*x, hitol); +%! y = pinv (x, sqrt (eps)); +%! +%!assert (a*b*a, a, tol) +%!assert (b*a*b, b, tol) +%!assert ((b*a)', b*a, tol) +%!assert ((a*b)', a*b, tol) +%!assert (x*y*x, x, -hitol) +%!assert (y*x*y, y, -hitol) +%!assert ((x*y)', x*y, hitol) +%!assert ((y*x)', y*x, hitol) */
--- a/src/Makefile.am +++ b/src/Makefile.am @@ -515,7 +515,7 @@ $(LIBOCTINTERP_LINK_DEPS) # Increment these as needed and according to the rules in the libtool manual: -liboctinterp_current = 0 +liboctinterp_current = 1 liboctinterp_revision = 0 liboctinterp_age = 0
--- a/src/data.cc +++ b/src/data.cc @@ -3927,6 +3927,9 @@ DEFUN (Inf, args, , "-*- texinfo -*-\n\ +@c List other form of function in documentation index\n\ +@findex inf\n\ +\n\ @deftypefn {Built-in Function} {} Inf\n\ @deftypefnx {Built-in Function} {} Inf (@var{n})\n\ @deftypefnx {Built-in Function} {} Inf (@var{n}, @var{m})\n\ @@ -3984,6 +3987,9 @@ DEFUN (NaN, args, , "-*- texinfo -*-\n\ +@c List other form of function in documentation index\n\ +@findex nan\n\ +\n\ @deftypefn {Built-in Function} {} NaN\n\ @deftypefnx {Built-in Function} {} NaN (@var{n})\n\ @deftypefnx {Built-in Function} {} NaN (@var{n}, @var{m})\n\ @@ -5599,9 +5605,13 @@ "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} power (@var{x}, @var{y})\n\ Return the element-by-element operation of @var{x} raised to the\n\ -@var{y} power.\n\ +@var{y} power. If several complex results are possible,\n\ +returns the one with smallest non-negative argument (angle). Use\n\ +@code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a\n\ +real result is preferred.\n\ +\n\ This function and @w{@xcode{x .^ y}} are equivalent.\n\ -@seealso{mpower}\n\ +@seealso{mpower, realpow, realsqrt, cbrt, nthroot}\n\ @end deftypefn") { return binary_op_defun_body (octave_value::op_el_pow, args);
--- a/src/file-io.cc +++ b/src/file-io.cc @@ -1879,6 +1879,9 @@ DEFUNX ("tmpnam", Ftmpnam, args, , "-*- texinfo -*-\n\ +@c List other forms of function in documentation index\n\ +@findex octave_tmp_file_name\n\ +\n\ @deftypefn {Built-in Function} {} tmpnam ()\n\ @deftypefnx {Built-in Function} {} tmpnam (@var{dir})\n\ @deftypefnx {Built-in Function} {} tmpnam (@var{dir}, @var{prefix})\n\ @@ -2178,7 +2181,7 @@ @deftypefn {Built-in Function} {} SEEK_SET ()\n\ @deftypefnx {Built-in Function} {} SEEK_CUR ()\n\ @deftypefnx {Built-in Function} {} SEEK_END ()\n\ -Return the value required to request that @code{fseek} perform\n\ +Return the numerical value to pass to @code{fseek} to perform\n\ one of the following actions:\n\ @table @code\n\ @item SEEK_SET\n\ @@ -2190,6 +2193,7 @@ @item SEEK_END\n\ Position file relative to the end.\n\ @end table\n\ +@seealso{fseek}\n\ @end deftypefn") { return const_value ("SEEK_SET", args, -1); @@ -2198,7 +2202,9 @@ DEFUNX ("SEEK_CUR", FSEEK_CUR, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} SEEK_CUR ()\n\ -See SEEK_SET.\n\ +Return the numerical value to pass to @code{fseek} to\n\ +position the file pointer relative to the current position.\n\ +@seealso{SEEK_SET, SEEK_END}.\n\ @end deftypefn") { return const_value ("SEEK_CUR", args, 0); @@ -2207,7 +2213,9 @@ DEFUNX ("SEEK_END", FSEEK_END, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} SEEK_END ()\n\ -See SEEK_SET.\n\ +Return the numerical value to pass to @code{fseek} to\n\ +position the file pointer relative to the end of the file.\n\ +@seealso{SEEK_SET, SEEK_CUR}.\n\ @end deftypefn") { return const_value ("SEEK_END", args, 1);
--- a/src/help.cc +++ b/src/help.cc @@ -239,15 +239,19 @@ pair_type ("**", "-*- texinfo -*-\n\ @deftypefn {Operator} {} **\n\ -Power operator.\n\ -@seealso{power, ^, .**, .^}\n\ +Power operator. This may return complex results for real inputs. Use\n\ +@code{realsqrt}, @code{cbrt}, @code{nthroot}, or @code{realroot} to obtain\n\ +real results when possible.\n\ +@seealso{power, ^, .**, .^, realpow, realsqrt, cbrt, nthroot}\n\ @end deftypefn"), pair_type ("^", "-*- texinfo -*-\n\ @deftypefn {Operator} {} ^\n\ -Power operator.\n\ -@seealso{power, **, .^, .**}\n\ +Power operator. This may return complex results for real inputs. Use\n\ +@code{realsqrt}, @code{cbrt}, @code{nthroot}, or @code{realroot} to obtain\n\ +real results when possible.\n\ +@seealso{power, **, .^, .**, realpow, realsqrt, cbrt, nthroot}\n\ @end deftypefn"), pair_type ("+", @@ -304,15 +308,21 @@ pair_type (".**", "-*- texinfo -*-\n\ @deftypefn {Operator} {} .*\n\ -Element by element power operator.\n\ -@seealso{**, ^, .^, power}\n\ +Element by element power operator. If several complex results are possible,\n\ +returns the one with smallest non-negative argument (angle). Use\n\ +@code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a\n\ +real result is preferred.\n\ +@seealso{**, ^, .^, power, realpow, realsqrt, cbrt, nthroot}\n\ @end deftypefn"), pair_type (".^", "-*- texinfo -*-\n\ @deftypefn {Operator} {} .^\n\ -Element by element power operator.\n\ -@seealso{.**, ^, **, power}\n\ +Element by element power operator. If several complex results are possible,\n\ +returns the one with smallest non-negative argument (angle). Use\n\ +@code{realpow}, @code{realsqrt}, @code{cbrt}, or @code{nthroot} if a\n\ +real result is preferred.\n\ +@seealso{.**, ^, **, power, realpow, realsqrt, cbrt, nthroot}\n\ @end deftypefn"), pair_type ("./",
--- a/src/oct-parse.yy +++ b/src/oct-parse.yy @@ -1899,8 +1899,6 @@ tree_expression *op1 = e->lhs (); tree_expression *op2 = e->rhs (); - octave_value::binary_op op_type = e->op_type (); - if (op1->is_constant () && op2->is_constant ()) { octave_value tmp = e->rvalue1 (); @@ -3266,7 +3264,7 @@ { size_t offset = s.find_first_not_of (" \t"); - retval = (s.substr (offset, 9) == "Copyright"); + retval = (s.substr (offset, 9) == "Copyright" || s.substr (offset, 6) == "Author"); } return retval; @@ -4448,7 +4446,8 @@ DEFUN (eval, args, nargout, "-*- texinfo -*-\n\ -@deftypefn {Built-in Function} {} eval (@var{try}, @var{catch})\n\ +@deftypefn {Built-in Function} {} eval (@var{try})\n\ +@deftypefnx {Built-in Function} {} eval (@var{try}, @var{catch})\n\ Parse the string @var{try} and evaluate it as if it were an Octave\n\ program. If that fails, evaluate the optional string @var{catch}.\n\ The string @var{try} is evaluated in the current context,\n\ @@ -4472,6 +4471,11 @@ This is a bad example\n\ @end group\n\ @end example\n\ +\n\ +Consider using try/catch blocks instead if you are only using @code{eval}\n\ +as an error-capturing mechanism rather than for the execution of arbitrary\n\ +code strings.\n\ +@seealso{evalin}\n\ @end deftypefn") { octave_value_list retval; @@ -4554,6 +4558,7 @@ @deftypefn {Built-in Function} {} assignin (@var{context}, @var{varname}, @var{value})\n\ Assign @var{value} to @var{varname} in context @var{context}, which\n\ may be either @code{\"base\"} or @code{\"caller\"}.\n\ +@seealso{evalin}\n\ @end deftypefn") { octave_value_list retval; @@ -4603,10 +4608,12 @@ DEFUN (evalin, args, nargout, "-*- texinfo -*-\n\ -@deftypefn {Built-in Function} {} evalin (@var{context}, @var{try}, @var{catch})\n\ +@deftypefn {Built-in Function} {} evalin (@var{context}, @var{try})\n\ +@deftypefnx {Built-in Function} {} evalin (@var{context}, @var{try}, @var{catch})\n\ Like @code{eval}, except that the expressions are evaluated in the\n\ context @var{context}, which may be either @code{\"caller\"} or\n\ @code{\"base\"}.\n\ +@seealso{eval, assignin}\n\ @end deftypefn") { octave_value_list retval;
--- a/src/ov-fcn-handle.cc +++ b/src/ov-fcn-handle.cc @@ -1776,6 +1776,38 @@ */ +DEFUN (is_function_handle, args, , + "-*- texinfo -*-\n\ +@deftypefn {Built-in Function} {} is_function_handle (@var{x})\n\ +Return true if @var{x} is a function handle.\n\ +@seealso{isa, typeinfo, class}\n\ +@end deftypefn") +{ + octave_value retval; + + int nargin = args.length (); + + if (nargin == 1) + retval = args(0).is_function_handle (); + else + print_usage (); + + return retval; +} + +/* +%!shared fh +%! fh = @(x) x; + +%!assert (is_function_handle (fh)) +%!assert (! is_function_handle ({fh})) +%!assert (! is_function_handle (1)) +%!error is_function_handle (); +%!error is_function_handle (1, 2); + +*/ + + octave_fcn_binder::octave_fcn_binder (const octave_value& f, const octave_value& root, const octave_value_list& templ,
--- a/src/syscalls.cc +++ b/src/syscalls.cc @@ -1646,7 +1646,7 @@ DEFUNX ("F_DUPFD", FF_DUPFD, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} F_DUPFD ()\n\ -Return the value required to request that @code{fcntl} return a\n\ +Return the numerical value to pass to @code{fcntl} to return a\n\ duplicate file descriptor.\n\ @seealso{fcntl, F_GETFD, F_GETFL, F_SETFD, F_SETFL}\n\ @end deftypefn") @@ -1662,7 +1662,7 @@ DEFUNX ("F_GETFD", FF_GETFD, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} F_GETFD ()\n\ -Return the value required to request that @code{fcntl} to return the\n\ +Return the numerical value to pass to @code{fcntl} to return the\n\ file descriptor flags.\n\ @seealso{fcntl, F_DUPFD, F_GETFL, F_SETFD, F_SETFL}\n\ @end deftypefn") @@ -1678,7 +1678,7 @@ DEFUNX ("F_GETFL", FF_GETFL, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} F_GETFL ()\n\ -Return the value required to request that @code{fcntl} to return the\n\ +Return the numerical value to pass to @code{fcntl} to return the\n\ file status flags.\n\ @seealso{fcntl, F_DUPFD, F_GETFD, F_SETFD, F_SETFL}\n\ @end deftypefn") @@ -1694,7 +1694,7 @@ DEFUNX ("F_SETFD", FF_SETFD, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} F_SETFD ()\n\ -Return the value required to request that @code{fcntl} to set the file\n\ +Return the numerical value to pass to @code{fcntl} to set the file\n\ descriptor flags.\n\ @seealso{fcntl, F_DUPFD, F_GETFD, F_GETFL, F_SETFL}\n\ @end deftypefn") @@ -1710,7 +1710,7 @@ DEFUNX ("F_SETFL", FF_SETFL, args, , "-*- texinfo -*-\n\ @deftypefn {Built-in Function} {} F_SETFL ()\n\ -Return the value required to request that @code{fcntl} to set the file\n\ +Return the numerical value to pass to @code{fcntl} to set the file\n\ status flags.\n\ @seealso{fcntl, F_DUPFD, F_GETFD, F_GETFL, F_SETFD}\n\ @end deftypefn")
--- a/test/Makefile.am +++ b/test/Makefile.am @@ -23,7 +23,6 @@ FCN_FILES = \ fntests.m \ test_args.m \ - test_contin.m \ test_diag_perm.m \ test_error.m \ test_eval-catch.m \ @@ -31,11 +30,10 @@ test_func.m \ test_global.m \ test_if.m \ - test_index-wfi-f.m \ - test_index-wfi-t.m \ + test_index.m \ test_io.m \ - test_logical-wfi-f.m \ - test_logical-wfi-t.m \ + test_line_continue.m \ + test_logical_index.m \ test_null_assign.m \ test_parser.m \ test_prefer.m \
--- a/test/build_sparse_tests.sh +++ b/test/build_sparse_tests.sh @@ -646,11 +646,11 @@ %! assert (l, sparse ([1,2,2],[1,1,2],1), 10*eps); %! assert (u, sparse ([1,1,2],[1,2,2],[1,1,1i]), 10*eps); -%!testif HAVE_UMFPACK ;# permuted LU +%!testif HAVE_UMFPACK # permuted LU %! [L,U] = lu (bs); %! assert (L*U, bs, 1e-10); -%!testif HAVE_UMFPACK ;# simple LU + row permutations +%!testif HAVE_UMFPACK # simple LU + row permutations %! [L,U,P] = lu (bs); %! assert (P'*L*U, bs, 1e-10); %! # triangularity @@ -659,7 +659,7 @@ %! [i,j,v] = find (U); %! assert (j-i>=0); -%!testif HAVE_UMFPACK ;# simple LU + row/col permutations +%!testif HAVE_UMFPACK # simple LU + row/col permutations %! [L,U,P,Q] = lu (bs); %! assert (P'*L*U*Q', bs, 1e-10); %! # triangularity @@ -668,7 +668,7 @@ %! [i,j,v] = find (U); %! assert (j-i>=0); -%!testif HAVE_UMFPACK ;# LU with vector permutations +%!testif HAVE_UMFPACK # LU with vector permutations %! [L,U,P,Q] = lu (bs,'vector'); %! assert (L(P,:)*U(:,Q), bs, 1e-10); %! # triangularity @@ -677,7 +677,7 @@ %! [i,j,v] = find (U); %! assert (j-i>=0); -%!testif HAVE_UMFPACK ;# LU with scaling +%!testif HAVE_UMFPACK # LU with scaling %! [L,U,P,Q,R] = lu (bs); %! assert (R*P'*L*U*Q', bs, 1e-10); %! # triangularity @@ -686,7 +686,7 @@ %! [i,j,v] = find (U); %! assert (j-i>=0); -%!testif HAVE_UMFPACK ;# inverse +%!testif HAVE_UMFPACK # inverse %! assert (inv (bs)*bs, sparse (eye (rows (bs))), 1e-10); %!assert (bf\as', bf\af', 100*eps); @@ -706,7 +706,7 @@ %!testif HAVE_CHOLMOD %! assert (chol (bs,'lower'), chol (bs)', 1e-10); -%!testif HAVE_CHOLMOD ;# Return Partial Cholesky factorization +%!testif HAVE_CHOLMOD # Return Partial Cholesky factorization %! [RS,PS] = chol (bs); %! assert (RS'*RS, bs, 1e-10); %! assert (PS, 0); @@ -714,7 +714,7 @@ %! assert (LS*LS', bs, 1e-10); %! assert (PS, 0); -%!testif HAVE_CHOLMOD ;# Permuted Cholesky factorization +%!testif HAVE_CHOLMOD # Permuted Cholesky factorization %! [RS,PS,QS] = chol (bs); %! assert (RS'*RS, QS*bs*QS', 1e-10); %! assert (PS, 0); @@ -750,11 +750,11 @@ gen_matrixdiag_tests gen_matrixreshape_tests cat >>$TESTS <<EOF -%!testif HAVE_UMFPACK ;# permuted LU +%!testif HAVE_UMFPACK # permuted LU %! [L,U] = lu (bs); %! assert (L*U, bs, 1e-10); -%!testif HAVE_UMFPACK ;# simple LU + row permutations +%!testif HAVE_UMFPACK # simple LU + row permutations %! [L,U,P] = lu (bs); %! assert (P'*L*U, bs, 1e-10); %! # triangularity @@ -763,7 +763,7 @@ %! [i,j,v] = find (U); %! assert (j-i>=0); -%!testif HAVE_UMFPACK ;# simple LU + row/col permutations +%!testif HAVE_UMFPACK # simple LU + row/col permutations %! [L,U,P,Q] = lu (bs); %! assert (P'*L*U*Q', bs, 1e-10); %! # triangularity @@ -772,7 +772,7 @@ %! [i,j,v] = find (U); %! assert (j-i>=0); -%!testif HAVE_UMFPACK ;# LU with vector permutations +%!testif HAVE_UMFPACK # LU with vector permutations %! [L,U,P,Q] = lu (bs,'vector'); %! assert (L (P,:)*U (:,Q), bs, 1e-10); %! # triangularity @@ -781,7 +781,7 @@ %! [i,j,v] = find (U); %! assert (j-i>=0); -%!testif HAVE_UMFPACK ;# LU with scaling +%!testif HAVE_UMFPACK # LU with scaling %! [L,U,P,Q,R] = lu (bs); %! assert (R*P'*L*U*Q', bs, 1e-10); %! # triangularity @@ -930,7 +930,7 @@ %! load (savefile, "as_save"); %! unlink (savefile); %! assert (as_save, sparse(af)); -%!testif HAVE_HDF5 # save hdf5 +%!testif HAVE_HDF5 # save hdf5 %! savefile = tmpnam (); %! as_save = as; %! save ("-hdf5", savefile, "bf", "as_save", "af");