Mercurial > octave
changeset 32553:5dea9272ad7f
maint: merge stable to default
author | John W. Eaton <jwe@octave.org> |
---|---|
date | Fri, 08 Dec 2023 09:14:35 -0500 |
parents | 3d9e866f9ae2 (diff) 5ce810c981ae (current diff) |
children | 54be25f38029 d1b5f4055c83 |
files | |
diffstat | 17 files changed, 190 insertions(+), 264 deletions(-) [+] |
line wrap: on
line diff
--- a/.github/workflows/make.yaml Thu Dec 07 18:38:46 2023 -0800 +++ b/.github/workflows/make.yaml Fri Dec 08 09:14:35 2023 -0500 @@ -643,7 +643,7 @@ matrix: # For available GitHub-hosted runners, see: https://docs.github.com/en/actions/using-github-hosted-runners/about-github-hosted-runners os: [windows-latest] - msystem: [MINGW64, UCRT64] + msystem: [MINGW64, CLANG64] include: - msystem: MINGW64 mingw-prefix: mingw64 @@ -653,14 +653,21 @@ f77: gfortran extra-config-flags: "" ccache-max: 0.9G - - msystem: UCRT64 - mingw-prefix: ucrt64 - target-prefix: mingw-w64-ucrt-x86_64 - cc: gcc - cxx: g++ - f77: gfortran - extra-config-flags: "" - ccache-max: 0.9G + - msystem: CLANG64 + mingw-prefix: clang64 + target-prefix: mingw-w64-clang-x86_64 + cc: clang + # It looks like we and graphicsmagick++ aren't ready for C++17 yet. + cxx: "clang++ -std=gnu++14" + f77: flang + # Clang seems to require a different set of dllexport attributes than GCC. + # autoconf and libtool still need help to correctly invoke flang. + extra-config-flags: + --disable-lib-visibility-flags + --enable-fortran-calling-convention=gfortran + ac_cv_f77_compiler_gnu=yes + lt_cv_prog_gnu_ld=yes + ccache-max: 400M env: CHERE_INVOKING: 1 @@ -882,6 +889,28 @@ echo "history_file (make_absolute_filename ('./a/b/c/history')); disp ('test')" | ./.build/run-octave -i [ -f ./a/b/c/history ] || echo "::warning::Creating history file failed" + - name: install and compress + if: matrix.msystem == 'MINGW64' + continue-on-error: true + run: | + echo "::group::Installing Octave" + mkdir -p /c/octave/pkg + make -C ./.build DESTDIR=/c/octave/pkg install + echo "::endgroup::" + echo "::group::Compressing Octave package" + cd /c/octave/pkg + tar -cvzf octave.tar.gz * + echo "::endgroup::" + + - name: upload build artifact + if: matrix.msystem == 'MINGW64' + continue-on-error: true + uses: actions/upload-artifact@v3 + with: + name: ${{ matrix.target-prefix }}-octave-${{ steps.ccache-prepare.outputs.timestamp }} + path: C:\octave\pkg\octave.tar.gz + retention-days: 7 + cygwin: runs-on: ${{ matrix.os }}
--- a/configure.ac Thu Dec 07 18:38:46 2023 -0800 +++ b/configure.ac Fri Dec 08 09:14:35 2023 -0500 @@ -27,7 +27,7 @@ ### Initialize Autoconf AC_PREREQ([2.65]) -AC_INIT([GNU Octave], [9.0.1], [https://octave.org/bugs.html], [octave], +AC_INIT([GNU Octave], [10.0.0], [https://octave.org/bugs.html], [octave], [https://www.gnu.org/software/octave/]) ### Declare version numbers @@ -39,9 +39,9 @@ ## explains how to update these numbers for release and development ## versions. -OCTAVE_MAJOR_VERSION=9 +OCTAVE_MAJOR_VERSION=10 OCTAVE_MINOR_VERSION=0 -OCTAVE_PATCH_VERSION=1 +OCTAVE_PATCH_VERSION=0 dnl PACKAGE_VERSION is set by the AC_INIT VERSION argument. OCTAVE_VERSION="$PACKAGE_VERSION"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/etc/NEWS.10.md Fri Dec 08 09:14:35 2023 -0500 @@ -0,0 +1,49 @@ +Summary of important user-visible changes for version 10 (yyyy-mm-dd): +--------------------------------------------------------------------- + +### General improvements + +### Graphical User Interface + +### Graphics backend + +### Matlab compatibility + +### Alphabetical list of new functions added in Octave 10 + +### Deprecated functions, properties, and operators + +The following functions and properties have been deprecated in Octave 10 +and will be removed from Octave 12 (or whatever version is the second +major release after 10): + +- Functions + + Function | Replacement + -----------------------|------------------ + +The following features were deprecated in Octave 8 and have been removed +from Octave 10. + +- Functions + + Function | Replacement + -----------------------|------------------ + shift | circshift + sparse_auto_mutate | none (see below) + + +Summary of bugs fixed for version 10.1.0 (yyyy-mm-dd): +---------------------------------------------------- + +### Old release news + +- [Octave 9.x](etc/NEWS.9.md) +- [Octave 8.x](etc/NEWS.8.md) +- [Octave 7.x](etc/NEWS.7.md) +- [Octave 6.x](etc/NEWS.6.md) +- [Octave 5.x](etc/NEWS.5.md) +- [Octave 4.x](etc/NEWS.4) +- [Octave 3.x](etc/NEWS.3) +- [Octave 2.x](etc/NEWS.2) +- [Octave 1.x](etc/NEWS.1)
--- a/etc/RELEASE_CHECKLIST.md Thu Dec 07 18:38:46 2023 -0800 +++ b/etc/RELEASE_CHECKLIST.md Fri Dec 08 09:14:35 2023 -0500 @@ -24,6 +24,9 @@ `etc/HACKING.md`). * Bump version numbers in `configure.ac` on default branch (see `etc/HACKING.md`). +* Create new `etc/NEWS.VERSION+1.md` file on default branch by copying + `etc/NEWS.VERSION.md` and then removing text so that it is a template file + with headings only. ### ⚙️ Update gnulib to latest version ### @@ -37,10 +40,13 @@ Completion Date: -* Put out a general call for reports on [Octave Discourse](https://octave.discourse.group/) for all outstanding unreported known bugs. -* Create Savannah tag `VERSION.0.90` on bug tracker for 1st release candidate. +* Put out a general call for reports on [Octave Discourse](https://octave.discourse.group/) for all outstanding, but unreported, known bugs. +* Create Savannah `Release` tag `VERSION.0.90` on bug tracker for 1st release + candidate. * Mark items that should be fixed for the release with this tag. -* Bug overview at <https://octave.space/savannah/>. +* Update Savannah `Planned Release` and `Fixed Release` tags by adding + `VERSION.1.0 (current stable)` and `VERSION+1.1.0 (current default)`. +* Review bug overview at <https://octave.space/savannah/>. ### 📢 Update GUI translation files ### @@ -50,7 +56,7 @@ might change GUI strings. * String freeze date: * Update language translation files (`*.ts`). See instructions in - `libgui/languages/build_ts/README.md`). + `libgui/languages/build_ts/README.md`. * Create bug report on Savannah as a centralized location for uploading files and tracking status of translations. * Call for translations of GUI strings on [Octave Discourse Maintainers](https://octave.discourse.group/c/maintainers/7), CC-ing the translators (see [list of translators](https://hg.savannah.gnu.org/hgweb/octave/file/tip/libgui/languages/translators)). @@ -61,7 +67,16 @@ Completion Date: * Update copyright statements for all source controlled files. -* Update dates in any other locations (launch message, citation, MXE files, + + Command to update copyright notifications + + `hg locate | xargs sed -i 's/Copyright (C) \([0-9][0-9][0-9][0-9]\)-2023 The Octave Project Developers/Copyright (C) \1-2024 The Octave Project Developers/; s/Copyright (C) 2023 The Octave Project Developers/Copyright (C) 2023-2024 The Octave Project Developers/'` + + Command to check results before checking in + + `hg diff | grep ^[-+][^-+] | sed 's/[0-9][0-9][0-9][0-9]-/YYYY-/' | sort -u` + +* Update dates in any other locations (`CITATION`, launch message, MXE files, etc.). * Add any new contributors to `doc/interpreter/contributors.in` who wish to be mentioned (don't add them without permission). @@ -157,10 +172,10 @@ * Update web site files: `NEWS-VERSION.html`, `index.in`, `news.in`, and `download.in`. * Update <https://wiki.octave.org/Release_History> page. -* Update Savannah bug tracker version info to have new release number. +* Update Savannah bug tracker `Release` field to have new release number. * Update Savannah bug tracker: **OPEN** bugs marked as **WON'T FIX** should be marked as **CONFIRMED** (or more appropriate) for the final release. -* Hide release candidate versions in Savannah. +* Hide release candidate versions for `Release` field on Savannah. ### 📢 Announce final release ### @@ -181,9 +196,8 @@ Completion Date: -* Remove all deprecated functions (either tagged with `OCTAVE_DEPRECATED` in - C++ or in the directory `scripts/deprecated` for m-files) scheduled for - deletion on default branch. Check file `etc/NEWS.VERSION-2.md` for list of - features that have been deprecated. -* Create new `etc/NEWS.VERSION+1.md` file by copying `etc/NEWS.VERSION.md` and - then removing text so that it is a template file with headings only. +* Remove all deprecated functions scheduled for deletion on default + branch. These functions are tagged with `OCTAVE_DEPRECATED` in C++ or are + m-files located in the directory `scripts/deprecated`. Check file + `etc/NEWS.VERSION-2.md` for list of features that have been deprecated. +
--- a/etc/module.mk Thu Dec 07 18:38:46 2023 -0800 +++ b/etc/module.mk Fri Dec 08 09:14:35 2023 -0500 @@ -14,6 +14,7 @@ %reldir%/NEWS.7.md \ %reldir%/NEWS.8.md \ %reldir%/NEWS.9.md \ + %reldir%/NEWS.10.md \ %reldir%/gdbinit %canon_reldir%_EXTRA_DIST += \
--- a/libinterp/corefcn/chol.cc Thu Dec 07 18:38:46 2023 -0800 +++ b/libinterp/corefcn/chol.cc Fri Dec 08 09:14:35 2023 -0500 @@ -1187,9 +1187,9 @@ positive definite matrix @w{@var{A} = @var{R}'*@var{R}}, @var{R}@tie{}upper triangular, return the Cholesky@tie{}factorization of @w{@var{A}(p,p)}, where @w{p} is the permutation @* -@code{p = [1:i-1, shift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @* +@code{p = [1:i-1, circshift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @* or @* -@code{p = [1:j-1, shift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}. @* +@code{p = [1:j-1, circshift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}. @* @seealso{chol, cholupdate, cholinsert, choldelete} @end deftypefn */) @@ -1276,13 +1276,13 @@ %!test %! R = chol (A); %! -%! i = 1; j = 3; p = [1:i-1, shift(i:j,-1), j+1:4]; +%! i = 1; j = 3; p = [1:i-1, circshift(i:j,-1), j+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1)-R1, Inf), 0); %! assert (norm (R1'*R1 - A(p,p), Inf), 0, 1e1*eps); %! -%! j = 1; i = 3; p = [1:j-1, shift(j:i,+1), i+1:4]; +%! j = 1; i = 3; p = [1:j-1, circshift(j:i,+1), i+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1) - R1, Inf), 0); @@ -1291,13 +1291,13 @@ %!test %! R = chol (Ac); %! -%! i = 1; j = 3; p = [1:i-1, shift(i:j,-1), j+1:4]; +%! i = 1; j = 3; p = [1:i-1, circshift(i:j,-1), j+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1)-R1, Inf), 0); %! assert (norm (R1'*R1 - Ac(p,p), Inf), 0, 1e1*eps); %! -%! j = 1; i = 3; p = [1:j-1, shift(j:i,+1), i+1:4]; +%! j = 1; i = 3; p = [1:j-1, circshift(j:i,+1), i+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1)-R1, Inf), 0); @@ -1306,13 +1306,13 @@ %!test %! R = chol (single (A)); %! -%! i = 1; j = 3; p = [1:i-1, shift(i:j,-1), j+1:4]; +%! i = 1; j = 3; p = [1:i-1, circshift(i:j,-1), j+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1)-R1, Inf), 0); %! assert (norm (R1'*R1 - single (A(p,p)), Inf), 0, 1e1* eps ("single")); %! -%! j = 1; i = 3; p = [1:j-1, shift(j:i,+1), i+1:4]; +%! j = 1; i = 3; p = [1:j-1, circshift(j:i,+1), i+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1)-R1, Inf), 0); @@ -1321,13 +1321,13 @@ %!test %! R = chol (single (Ac)); %! -%! i = 1; j = 3; p = [1:i-1, shift(i:j,-1), j+1:4]; +%! i = 1; j = 3; p = [1:i-1, circshift(i:j,-1), j+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1)-R1, Inf), 0); %! assert (norm (R1'*R1 - single (Ac(p,p)), Inf), 0, 1e1* eps ("single")); %! -%! j = 1; i = 3; p = [1:j-1, shift(j:i,+1), i+1:4]; +%! j = 1; i = 3; p = [1:j-1, circshift(j:i,+1), i+1:4]; %! R1 = cholshift (R, i, j); %! %! assert (norm (triu (R1)-R1, Inf), 0);
--- a/libinterp/corefcn/data.cc Thu Dec 07 18:38:46 2023 -0800 +++ b/libinterp/corefcn/data.cc Fri Dec 08 09:14:35 2023 -0500 @@ -3008,6 +3008,8 @@ return ovl ((octave_value (args(0)).size ())(0)); } +DEFALIAS (height, rows); + /* %!assert (rows (ones (2,5)), 2) %!assert (rows (ones (5,2)), 5) @@ -3053,6 +3055,8 @@ return ovl ((octave_value (args(0)).size ())(1)); } +DEFALIAS (width, columns); + DEFUN (sum, args, , doc: /* -*- texinfo -*- @deftypefn {} {@var{y} =} sum (@var{x})
--- a/libinterp/corefcn/jsonencode.cc Thu Dec 07 18:38:46 2023 -0800 +++ b/libinterp/corefcn/jsonencode.cc Fri Dec 08 09:14:35 2023 -0500 @@ -61,22 +61,26 @@ encode_numeric (T& writer, const octave_value& obj, const bool& ConvertInfAndNaN) { - double value = obj.scalar_value (); + if (obj.isfloat ()) + { + double value = obj.scalar_value (); - if (obj.is_bool_scalar ()) + // Any numeric input from the interpreter will be in double type so in + // order to detect ints, we will check if the floor of the input and the + // input are equal using fabs (A - B) < epsilon method as it is more + // accurate. If value > 999999, MATLAB will encode it in scientific + // notation (double). + if (fabs (floor (value) - value) < std::numeric_limits<double>::epsilon () + && fabs (value) <= 999999) + writer.Int64 (value); + // Possibly write NULL for non-finite values (-Inf, Inf, NaN, NA) + else if (ConvertInfAndNaN && ! octave::math::isfinite (value)) + writer.Null (); + else + writer.Double (value); + } + else if (obj.is_bool_scalar ()) writer.Bool (obj.bool_value ()); - // Any numeric input from the interpreter will be in double type so in order - // to detect ints, we will check if the floor of the input and the input are - // equal using fabs (A - B) < epsilon method as it is more accurate. - // If value > 999999, MATLAB will encode it in scientific notation (double) - else if (fabs (floor (value) - value) < std::numeric_limits<double>::epsilon () - && value <= 999999 && value >= -999999) - writer.Int64 (value); - // Possibly write NULL for non-finite values (-Inf, Inf, NaN, NA) - else if (ConvertInfAndNaN && ! octave::math::isfinite (value)) - writer.Null (); - else if (obj.is_double_type ()) - writer.Double (value); else error ("jsonencode: unsupported type"); }
--- a/libinterp/corefcn/qr.cc Thu Dec 07 18:38:46 2023 -0800 +++ b/libinterp/corefcn/qr.cc Fri Dec 08 09:14:35 2023 -0500 @@ -1923,9 +1923,9 @@ @w{@var{A} = @var{Q}*@var{R}}, @var{Q}@tie{}unitary and @var{R}@tie{}upper trapezoidal, return the QR@tie{}factorization of @w{@var{A}(:,p)}, where @w{p} is the permutation @* -@code{p = [1:i-1, shift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @* +@code{p = [1:i-1, circshift(i:j, 1), j+1:n]} if @w{@var{i} < @var{j}} @* or @* -@code{p = [1:j-1, shift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}. @* +@code{p = [1:j-1, circshift(j:i,-1), i+1:n]} if @w{@var{j} < @var{i}}. @* @seealso{qr, qrupdate, qrinsert, qrdelete} @end deftypefn */) @@ -2009,7 +2009,7 @@ /* %!test %! AA = A.'; -%! i = 2; j = 4; p = [1:i-1, shift(i:j,-1), j+1:5]; +%! i = 2; j = 4; p = [1:i-1, circshift(i:j,-1), j+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); @@ -2017,7 +2017,7 @@ %! assert (norm (vec (triu (R) - R), Inf), 0); %! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps); %! -%! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; +%! j = 2; i = 4; p = [1:j-1, circshift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); @@ -2027,7 +2027,7 @@ %! %!test %! AA = Ac.'; -%! i = 2; j = 4; p = [1:i-1, shift(i:j,-1), j+1:5]; +%! i = 2; j = 4; p = [1:i-1, circshift(i:j,-1), j+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); @@ -2035,7 +2035,7 @@ %! assert (norm (vec (triu (R) - R), Inf), 0); %! assert (norm (vec (Q*R - AA(:,p)), Inf), 0, norm (AA)*1e1*eps); %! -%! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; +%! j = 2; i = 4; p = [1:j-1, circshift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); @@ -2045,7 +2045,7 @@ %!test %! AA = single (A).'; -%! i = 2; j = 4; p = [1:i-1, shift(i:j,-1), j+1:5]; +%! i = 2; j = 4; p = [1:i-1, circshift(i:j,-1), j+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); @@ -2055,7 +2055,7 @@ %! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ... %! norm (AA)*1e1 * eps ("single")); %! -%! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; +%! j = 2; i = 4; p = [1:j-1, circshift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); @@ -2067,7 +2067,7 @@ %! %!test %! AA = single (Ac).'; -%! i = 2; j = 4; p = [1:i-1, shift(i:j,-1), j+1:5]; +%! i = 2; j = 4; p = [1:i-1, circshift(i:j,-1), j+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j); @@ -2077,7 +2077,7 @@ %! assert (norm (vec (Q*R - AA(:,p)), Inf), single (0), ... %! norm (AA)*1e1 * eps ("single")); %! -%! j = 2; i = 4; p = [1:j-1, shift(j:i,+1), i+1:5]; +%! j = 2; i = 4; p = [1:j-1, circshift(j:i,+1), i+1:5]; %! %! [Q,R] = qr (AA); %! [Q,R] = qrshift (Q, R, i, j);
--- a/libinterp/octave-value/ov-base-mat.cc Thu Dec 07 18:38:46 2023 -0800 +++ b/libinterp/octave-value/ov-base-mat.cc Fri Dec 08 09:14:35 2023 -0500 @@ -324,8 +324,6 @@ int nd = m_matrix.ndims (); - MT mrhs (dim_vector (1, 1), rhs); - // If we catch an indexing error in index_vector, we flag an error in // index k. Ensure it is the right value before each idx_vector call. // Same variable as used in the for loop in the default case. @@ -348,7 +346,10 @@ if (i.is_scalar () && i(0) < m_matrix.numel ()) m_matrix(i(0)) = rhs; else - m_matrix.assign (i, mrhs); + { + MT mrhs (dim_vector (1, 1), rhs); + m_matrix.assign (i, mrhs); + } } break; @@ -364,7 +365,10 @@ && i(0) < m_matrix.rows () && j(0) < m_matrix.columns ()) m_matrix(i(0), j(0)) = rhs; else - m_matrix.assign (i, j, mrhs); + { + MT mrhs (dim_vector (1, 1), rhs); + m_matrix.assign (i, j, mrhs); + } } break; @@ -396,7 +400,10 @@ m_matrix(j) = rhs; } else - m_matrix.assign (idx_vec, mrhs); + { + MT mrhs (dim_vector (1, 1), rhs); + m_matrix.assign (idx_vec, mrhs); + } } break; }
--- a/libinterp/octave-value/ov-base.cc Thu Dec 07 18:38:46 2023 -0800 +++ b/libinterp/octave-value/ov-base.cc Fri Dec 08 09:14:35 2023 -0500 @@ -99,9 +99,6 @@ DEFINE_OV_TYPEID_FUNCTIONS_AND_DATA (octave_base_value, "<unknown type>", "unknown"); -// DEPRECATED in Octave 8. -bool Vsparse_auto_mutate = false; - #if defined (HAVE_PRAGMA_GCC_DIAGNOSTIC) // Disable this warning for the use of the "count" member variable in // the default constructor. Push the current state so we can restore
--- a/libinterp/octave-value/ov-base.h Thu Dec 07 18:38:46 2023 -0800 +++ b/libinterp/octave-value/ov-base.h Fri Dec 08 09:14:35 2023 -0500 @@ -968,9 +968,6 @@ octave::auto_shlib m_containing_dynamic_library; }; -OCTAVE_DEPRECATED (8, "Vsparse_auto_mutate is obsolete and is now always false") -extern OCTINTERP_API bool Vsparse_auto_mutate; - // Utility function to convert C++ arguments used in subsref/subsasgn into an // octave_value_list object that can be used to call a function/method in the // interpreter.
--- a/scripts/deprecated/module.mk Thu Dec 07 18:38:46 2023 -0800 +++ b/scripts/deprecated/module.mk Fri Dec 08 09:14:35 2023 -0500 @@ -1,9 +1,7 @@ FCN_FILE_DIRS += %reldir% %canon_reldir%_FCN_FILES = \ - %reldir%/.oct-config \ - %reldir%/shift.m \ - %reldir%/sparse_auto_mutate.m + %reldir%/.oct-config %canon_reldir%dir = $(fcnfiledir)/deprecated
--- a/scripts/deprecated/shift.m Thu Dec 07 18:38:46 2023 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,115 +0,0 @@ -######################################################################## -## -## Copyright (C) 1995-2023 The Octave Project Developers -## -## See the file COPYRIGHT.md in the top-level directory of this -## distribution or <https://octave.org/copyright/>. -## -## 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 -## <https://www.gnu.org/licenses/>. -## -######################################################################## - -## -*- texinfo -*- -## @deftypefn {} {@var{y} =} shift (@var{x}, @var{b}) -## @deftypefnx {} {@var{y} =} shift (@var{x}, @var{b}, @var{dim}) -## -## @code{shift} is deprecated and will be removed in Octave version 10. Use -## @code{circshift} instead. -## -## If @var{x} is a vector, perform a circular shift of length @var{b} of -## the elements of @var{x}. -## -## If @var{x} is a matrix, do the same for each column of @var{x}. -## -## If the optional @var{dim} argument is given, operate along this dimension. -## @seealso{circshift} -## @end deftypefn - -## FIXME: DEPRECATED: Remove in version 10. - -function y = shift (x, b, dim) - - persistent warned = false; - if (! warned) - warned = true; - warning ("Octave:deprecated-function", - "shift is deprecated and will be removed from a future version of Octave, please use circshift instead\n"); - endif - - if (nargin < 2) - print_usage (); - endif - - if (numel (x) < 1) - error ("shift: X must not be empty"); - elseif (! (isscalar (b) && b == fix (b))) - error ("shift: B must be an integer"); - endif - - nd = ndims (x); - sz = size (x); - - if (nargin == 3) - if (!(isscalar (dim) && dim == fix (dim)) - || !(1 <= dim && dim <= nd)) - error ("shift: DIM must be an integer and a valid dimension"); - endif - else - ## Find the first non-singleton dimension. - (dim = find (sz > 1, 1)) || (dim = 1); - endif - - d = sz(dim); - - idx = repmat ({':'}, nd, 1); - if (b > 0) - b = rem (b, d); - idx{dim} = [d-b+1:d, 1:d-b]; - elseif (b < 0) - b = rem (abs (b), d); - idx{dim} = [b+1:d, 1:b]; - endif - - y = x(idx{:}); - -endfunction - - -%!test -%! a = [1, 2, 3]; -%! b = [4, 5, 6]; -%! c = [7, 8, 9]; -%! -%! r = [a, b, c]; -%! m = [a; b; c]; -%! -%! assert (shift (r, 0), r); -%! assert (shift (r, 3), [c, a, b]); -%! assert (shift (r, -6), [c, a, b]); -%! assert (shift (r, -3), [b, c, a]); -%! assert (shift (m, 1), [c; a; b]); -%! assert (shift (m, -2), [c; a; b]); - -## Test input validation -%!error <Invalid call> shift () -%!error <Invalid call> shift (1) -%!error <X must not be empty> shift ([], 1) -%!error <B must be an integer> shift (ones (2), ones (2)) -%!error <B must be an integer> shift (ones (2), 1.5) -%!error <DIM must be an integer> shift (1, 1, 1.5) -%!error <DIM must be .* a valid dimension> shift (1, 1, 0) -%!error <DIM must be .* a valid dimension> shift (1, 1, 3)
--- a/scripts/deprecated/sparse_auto_mutate.m Thu Dec 07 18:38:46 2023 -0800 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,75 +0,0 @@ -######################################################################## -## -## Copyright (C) 2022-2023 The Octave Project Developers -## -## See the file COPYRIGHT.md in the top-level directory of this -## distribution or <https://octave.org/copyright/>. -## -## 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 -## <https://www.gnu.org/licenses/>. -## -######################################################################## - -## -*- texinfo -*- -## @deftypefn {} {@var{val} =} sparse_auto_mutate () -## @deftypefnx {} {@var{old_val} =} sparse_auto_mutate (@var{new_val}) -## @deftypefnx {} {@var{old_val} =} sparse_auto_mutate (@var{new_val}, "local") -## -## @code{sparse_auto_mutate} is deprecated and will be removed in Octave -## version 10. -## -## The @code{sparse_auto_mutate} function no longer has any effect on Octave's -## behavior. Previously, after calling @code{sparse_auto_mutate (true)}, -## Octave would automatically convert sparse matrices to full when a sparse -## matrix required more memory than simply using full matrix storage. This -## setting was false by default for compatibility with @sc{matlab}. Now you -## must manually convert to full storage when desired (use @code{full}). -## @seealso{full} -## @end deftypefn - -## FIXME: DEPRECATED: Remove in version 10. - -function retval = sparse_auto_mutate (val, opt) - - persistent warned = false; - if (! warned) - warned = true; - warning ("Octave:deprecated-function", - "sparse_auto_mutate is obsolete, has no effect, and will be removed from a future version of Octave\n"); - endif - - if (nargin == 0 || nargout > 0) - retval = false; # Always false now. - return; - endif - - if (nargin == 2) - if (! (ischar (opt) && strcmp (opt, "local"))) - error ('sparse_auto_mutate: second argument must be "local"'); - endif - nargin = 1; - endif - - ## Don't bother warning that "local" is invalid outside of a function. - if (nargin > 1) - print_usage (); - endif - - if (! islogical (val)) - error ("sparse_auto_mutate: argument must be a logical value"); - endif - -endfunction
--- a/scripts/optimization/fminbnd.m Thu Dec 07 18:38:46 2023 -0800 +++ b/scripts/optimization/fminbnd.m Fri Dec 08 09:14:35 2023 -0500 @@ -102,7 +102,13 @@ print_usage (); endif - if (a > b) + if (! (isscalar (a) && isfloat (a) && isfinite (a))) + error ("Octave:invalid-input-arg", + "fminbnd: endpoint A must be a finite floating point scalar"); + elseif (! (isscalar (b) && isfloat (b) && isfinite (b))) + error ("Octave:invalid-input-arg", + "fminbnd: endpoint B must be a finite floating point scalar"); + elseif (a > b) error ("Octave:invalid-input-arg", "fminbnd: the lower bound cannot be greater than the upper one"); endif @@ -331,4 +337,12 @@ %!assert (fminbnd (@(x) x > 0.3, 0, 1) < 0.3) %!assert (fminbnd (@(x) sin (x), 0, 0), 0, eps) +## Test input validation +%!error <Invalid call> fminbnd (1) +%!error <A must be a finite floating point scalar> fminbnd (1, [2, 3], 4) +%!error <A must be a finite floating point scalar> fminbnd (1, int8 (2), 3) +%!error <A must be a finite floating point scalar> fminbnd (1, Inf, 3) +%!error <B must be a finite floating point scalar> fminbnd (1, 2, [3, 4]) +%!error <B must be a finite floating point scalar> fminbnd (1, 2, int8 (3)) +%!error <B must be a finite floating point scalar> fminbnd (1, 2, Inf) %!error <lower bound cannot be greater> fminbnd (@(x) sin (x), 0, -pi)
--- a/test/json/jsonencode_BIST.tst Thu Dec 07 18:38:46 2023 -0800 +++ b/test/json/jsonencode_BIST.tst Fri Dec 08 09:14:35 2023 -0500 @@ -15,6 +15,8 @@ %! assert (isequal (jsonencode (logical (1)), 'true')); %! assert (isequal (jsonencode (logical (0)), 'false')); %! assert (isequal (jsonencode (50.025), '50.025')); +%! %% FIXME: Uncomment when bug #64960 is fixed +%! %% assert (isequal (jsonencode (single (50.025)), '50.025')); %! assert (isequal (jsonencode (NaN), 'null')); %! assert (isequal (jsonencode (NA), 'null')); % Octave-only test %! assert (isequal (jsonencode (Inf), 'null'));