changeset 276:12bb9bb7602f

Octave 7.1.0 release 2022-04-06
author Kai T. Ohlhus <k.ohlhus@gmail.com>
date Fri, 08 Apr 2022 22:23:16 +0900
parents 2657bda7f035
children 150c60c45289
files _includes/release_news_select.md _posts/2022-04-06-octave-7.1.0-released.markdown pages/NEWS.7.md pages/community-news.html pages/menu/download.md
diffstat 5 files changed, 470 insertions(+), 33 deletions(-) [+]
line wrap: on
line diff
--- a/_includes/release_news_select.md	Fri Apr 08 21:54:44 2022 +0900
+++ b/_includes/release_news_select.md	Fri Apr 08 22:23:16 2022 +0900
@@ -1,4 +1,5 @@
 News for version&nbsp;
+[7  ]({{ 'NEWS-7.html'   | relative_url }}) &nbsp;
 [6  ]({{ 'NEWS-6.1.html' | relative_url }}) &nbsp;
 [5  ]({{ 'NEWS-5.1.html' | relative_url }}) &nbsp;
 [4.4]({{ 'NEWS-4.4.html' | relative_url }}) &nbsp;
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/_posts/2022-04-06-octave-7.1.0-released.markdown	Fri Apr 08 22:23:16 2022 +0900
@@ -0,0 +1,22 @@
+---
+layout: post
+title:  "GNU Octave 7.1.0 Released"
+date:   2022-04-06
+categories: news release
+---
+
+GNU Octave version 7.1.0 has been released and is now available for
+[download][1].  An official [Windows binary installer][2] is available.
+For [macOS][3] see the installation instructions in the wiki.
+
+This major release improves the graphics backend, compatibility with
+Matlab and contains many new and improved functions.  A list of important
+user-visible changes is available by selecting the [Release Notes][4] item
+in the News menu of the GUI or by typing `news` at the Octave command prompt.
+
+Thanks to the many people who contributed to this release!
+
+[1]: {{ "download.html" | absolute_url }}
+[2]: https://ftp.gnu.org/gnu/octave/windows/
+[3]: {{ site.wiki_url }}/Octave_for_macOS
+[4]: {{ "NEWS-7.html" | absolute_url }}
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pages/NEWS.7.md	Fri Apr 08 22:23:16 2022 +0900
@@ -0,0 +1,417 @@
+---
+layout: page
+title: GNU Octave Version 7
+permalink: NEWS-7.html
+---
+
+## Summary of important user-visible changes
+
+April 06, 2022
+
+{% include release_news_select.md %}
+
+{::options parse_block_html="true" /}
+<div class="panel callout">
+* TOC
+{:toc}
+</div>
+{::options parse_block_html="false" /}
+
+
+### General improvements
+
+- Many functions in Octave can be called in a command form---no
+parentheses for invocation and no return argument assignment---or in a
+functional form---parentheses and '=' for assignment of return values.
+
+    **Command Form Example**
+
+    `mkdir new_directory`
+
+    **Function Form Example**
+
+    `status = mkdir ("new_directory")`
+
+    Octave now handles errors that occur in a consistent manner.  If
+    called in command form and there is a failure, an error is thrown
+    and a message printed.  If called in functional form, no error or
+    message is printed and the failure is communicated to the programmer
+    via the output status variable.
+
+    The following list of functions have been modified.
+
+    * `copyfile`
+    * `fcntl`
+    * `fileattrib`
+    * `kill`
+    * `link`
+    * `mkfifo`
+    * `movefile`
+    * `rename`
+    * `rmdir`
+    * `symlink`
+    * `unlink`
+
+- Calling a user-defined function with too many inputs or outputs is now
+an error.  The interpreter makes this check automatically.  If a
+function uses `varargin` then the check is skipped for function inputs,
+and if a function uses `varargout` then the check is skipped for function
+outputs.  Input validation for functions typically begins with checking
+that the number of inputs and outputs match expectations.  Existing code
+can be simplified by removing these checks which are now done by the
+interpreter.  Typically, code blocks like the following can simply be
+deleted.
+
+      ## Checking number of inputs
+      if (nargin > 2)
+        print_usage ();
+      endif
+
+      ## Checking number of outputs
+      if (nargout > 1)
+        print_usage ();
+      endif
+
+- Binary and hexadecimal constants like `0b101` and `0xDEADBEEF` now
+create integers (unsigned by default) with sizes determined from the
+number of digits present.  For example, `0xff` creates a `uint8` value
+and `0xDEADBEEF` creates a `uint64` value.  You may also use a suffix of
+the form `u8`, `u16`, `u32`, `u64`, `s8`, `s16`, `s32`, or `s64` to
+explicitly specify the data type to use (`u` or `s` to indicate unsigned
+or signed and the number to indicate the integer size).
+
+    Binary constants are limited to 64 binary digits and hexadecimal
+constants are limited to 16 hexadecimal digits with no automatic
+rounding or conversion to floating point values.  Note that this may
+cause problems in existing code.  For example, an expression like
+`[0x1; 0x100; 0x10000]` will be uint8 (because of the rules of
+concatenating integers of different sizes) with the larger values
+truncated (because of the saturation semantics of integer values).  To
+avoid these kinds of problems either: 1) declare the first integer to be
+of the desired size such as `[0x1u32; 0x100; 0x10000]`, or 2) pad
+constants in array expressions with leading zeros so that they use the
+same number of digits for each value such as
+`[0x00_00_01; 0x00_01_00; 0x01_00_00]`.
+
+- The colon operator now works for integer (int8, int16, ..., uint64)
+and single data types.  However, only double ranges use a
+memory-efficient storage scheme internally.  Other data types are
+stored as ordinary arrays.
+
+- The increment and decrement operators `++` and `--` must "hug" their
+corresponding variables.  In previous versions of Octave, whitespaces
+between these operators and the variable they affect were allowed.  That
+is no longer the case.
+
+- The `mldivide` function (i.e., the `\` operator) now uses an LU
+decomposition to solve nearly singular full square matrices.  This is
+Matlab-compatible and yields results which more nearly minimize `norm
+(A*x - b)`.  Previously, Octave computed a minimum-norm solution.
+
+- The `factor` function has been overhauled for speed.  For large
+inputs > 1e14, it can be up to 10,000 times faster.
+
+- The `isprime` function uses a new primality testing algorithm
+that is up to 50,000 times faster for inputs > 1e14.
+
+- The `betainc` function now calculates an exact output for the
+important special cases where a or b are 1.
+
+- The `whos` function now displays an additional attribute 's' when
+the variable is a sparse type.
+
+- As part of GSoC 2020, Abdallah K. Elshamy implemented the
+`jsondecode` and `jsonencode` functions to read and write JSON data.
+
+- As part of GSoC 2021, Abdallah K. Elshamy implemented the
+`jupyter_notebook` classdef class.  This class supports running and
+filling Jupyter Notebooks using the Octave language kernel from Octave
+itself.  Making the evaluation of long-running Jupyter Notebooks on a
+computing server without permanent browser connection possible.
+
+- By default, the history file is now located at `$DATA/octave/history`,
+where `$DATA` is a platform dependent location for (roaming) user data
+files (e.g., `${XDG_DATA_HOME}` or, if that is not set, `~/.local/share` on
+Unix-like operating systems or `%APPDATA%` on Windows).
+
+- For Octave on Windows OS, the minimum required version of the Windows
+API is now 6.1 (Windows 7 or newer).
+
+- The non-re-entrant version of the QHull library "libqhull" was
+deprecated upstream.  Octave now (optionally) requires the re-entrant
+version of that library "libqhull_r" instead.
+
+- Octave's build system no longer appends "++" to the end of the
+"magick++" library name (set with the `--with-magick=` configure flag).
+The real name of the "magick++" library (including any potentially
+trailing "++") needs to be set in that option now.
+
+- The `pkg update` command now accepts options that are passed to `pkg install` for each updated package.  Specifying `-local` or
+`-global` will restrict update checks to local or global
+installed packages, respectively.
+
+### Graphical User Interface
+
+- The graphical user interface is now available in Hungarian and
+Turkish.
+
+- In debug mode, symbol values are now shown in tooltips when hovering
+variables in the editor panel.
+
+- The "Disable global shortcuts when Command Window has focus" GUI
+preference under the Shortcuts tab is now disabled by default.  This
+option disables keyboard shortcuts to avoid interference with readline
+key strokes in the Command Window.  Unlike versions prior to Octave 7,
+this preference now also affects the Ctrl-C/V shortcuts for copy/paste.
+
+- In command line mode, i.e. when Octave is started without the `--gui` option,
+the doc command now opens the GUI documentation browser as a standalone widget,
+provided that Octave was compiled with GUI support.
+
+### Graphics backend
+
+- Support for Qt4 for both graphics and the GUI has been removed.
+
+- If a working LaTeX tool chain is found on the path, including `latex`,
+`dvipng`, and `dvisvgm` binaries, then text strings can now be rendered
+properly when using the `"latex"` value for the text objects'
+`"interpreter"` property and axes objects' `"ticklabelinterpreter"`.
+Type `doc "latex interpreter"` for further info.
+
+- The `"Marker"` property for plot objects now accepts `|` which draws
+a vertical line or `_` which draws a horizontal line.
+
+- The `FMT` format argument for plot commands now accepts long forms for
+color names which may be more understandable than the existing
+one-letter codes.  For example, the RGB value `[0 0 0]` can now be
+specified by `"black"` in addition to `"k"`.
+
+- The color graphics properties, for example `"EdgeColor"` or
+`"FaceColor"`, now accept HTML specifications.  An HTML specification is
+a string that begins with the character '#' and is followed by either 3
+or 6 hexadecimal digits.  For example, magenta which is 100% red and
+blue values can specified by `"#FF00FF"` or `"#F0F"`.
+
+- The additional property `"contextmenu"` has been added to all graphics
+objects.  It is equivalent to the previously used `"uicontextmenu"`
+property which is hidden now.
+
+- `uicontrol` objects now fully implement the `"Off"` and `"Inactive"`
+values of the `"Enable"` property.  When the value is `"Off"`, no
+interaction with the object occurs and the `uicontrol` changes color
+(typically to gray) to indicate it is disabled.  When the value is
+`"Inactive"`, the object appears normally (no change in color), but it
+is not possible to change the value of the object (such as modifying
+text in an `Edit` box or clicking on a `RadioButton`).
+
+- The `"ListBoxTop"` property for `uicontrol` objects has been
+implemented for `set` commands.
+
+- The `Title` property for print formats such as PDF or SVG is now set
+to the title displayed on the figure window which contains the plot.
+
+- Additional properties have been added to the `axes` graphics object:
+    * `"alphamap"` (not yet implemented)
+    * `"alphascale"` (not yet implemented)
+    * `"colorscale"` (not yet implemented)
+    * `"fontsizemode"` (not yet implemented)
+    * `"innerposition"` (equivalent to `"position"`)
+    * `"interactions"` (not yet implemented)
+    * `"layout"` (not yet implemented)
+    * `"legend"` (not yet implemented)
+    * `"nextseriesindex"` (read-only, used by `scatter`
+      graphics objects)
+    * `"positionconstraint"` (replacement for `"activepositionproperty"`
+      which is now a hidden property.  No plans for removal.)
+    * `"toolbar"` (not yet implemented)
+    * `"xaxis"` (not yet implemented)
+    * `"yaxis"` (not yet implemented)
+    * `"zaxis"` (not yet implemented)
+
+### Matlab compatibility
+
+- The function `griddata` now implements the `"v4"` Biharmonic Spline
+Interpolation method.  In adddition, the function now accepts 3-D inputs
+by passing the data to `griddata3`.
+
+- Coordinate transformation functions `cart2sph`, `sph2cart`,
+`cart2pol`, and `pol2cart` now accept either row or column vectors for
+coordinate inputs.  A single coordinate matrix with one variable per
+column can still be used as function input, but a single output variable
+will now contain just the first output coordinate, and will no longer
+return the full output coordinate matrix.  Output size matches the size
+of input vectors, or in the case of an input matrix will be column
+vectors with rows corresponding to the input coordinate matrix.
+
+- The function `dec2bin` and `dec2hex` now support negative numbers.
+
+- The function `factor` now supports uint64 inputs larger than
+`flintmax`.
+
+- The function `primes` now supports char inputs.
+
+- The functions `quantile` and `prctile` now permit operating on
+dimensions greater than `ndims (x)`.
+
+- The function `iqr` now uses Matlab compatible interpolation for
+quantile values.  The dimension input now allows a vector, "all", and
+dimensions greater than `ndims (x)`.  The function also handles
+`Inf` and `NaN` input values in a Matlab-compatible manner.
+
+- The function `importdata` now produces more compatible results when
+the file contains a 2-D text matrix.
+
+- The file functions `copyfile`, `mkdir`, `movefile`, `rmdir` now return
+a logical value (true/false) rather than a numeric value (1/0).
+
+- `uimenu` now accepts property `"Text"` which is identical to
+`"Label"`.  Matlab recommends using `"Text"` in new code, although there
+is no announced date for deprecating `"Label"`.
+
+- The functions `scatter` and `scatter3` now return a handle to a
+scatter graphics object.  For compatibility, they return an `hggroup` of
+patch graphics objects when the `"gnuplot"` graphics toolkit is used.  In
+previous versions of Octave, these functions returned an `hggroup` of
+patch graphics objects for all graphics toolkits.
+
+- The functions `bar` and `barh` now handle stacked negative bar values
+in a Matlab-compatible manner.  Negative values now stack below the zero
+axis independently of a positive value bars in the same stack.
+Previously the negative bars could overlap positive bars depending on
+drawing order.
+
+- The functions `bar` and `barh` now use colors from the `"ColorOrder"`
+axes property rather than the `"Colormap"` figure property unless one
+of the histogram options (@qcode{"hist"}, @qcode{"histc"} was specified.
+
+- The function `saveas` now defaults to saving in Octave figure format
+(.ofig) rather than PDF (.pdf).
+
+- A new warning ID (`"Octave:unimplemented-matlab-functionality"`) has
+been added which prints a warning when Octave's parser recognizes valid
+Matlab code, but for which Octave does not yet implement the
+functionality.  By default, this warning is enabled.
+
+- When Octave is started with the `--traditional` option for maximum
+compatibility the `print_struct_array_contents` internal variable is set
+to true.
+
+- The function `repelem` now produces a row vector output when the input is
+a scalar.
+
+- The functions `var` and `std` now accept a weight vector as input and
+compute the weigthed variance.  Dimension input now allows a vector and
+the keyword "all".
+
+
+### Deprecated functions and operators
+
+The following functions and operators have been deprecated in Octave 7
+and will be removed from Octave 9 (or whatever version is the second
+major release after 7):
+
+- Functions
+
+  Function                     | Replacement
+  ---------------------------- |----------------------------
+  `disable_diagonal_matrix`    | `optimize_diagonal_matrix`
+  `disable_permutation_matrix` | `optimize_permutation_matrix`
+  `disable_range`              | `optimize_range`
+
+- Operators
+
+  Operator | Replacement | Description
+  ---------|-------------|------------
+  `**`     | `^`         | Matrix exponent
+  `.**`    | `.^`        | Element-by-element exponent
+  `.+`     | `+`         | Element-by-element addition
+  `.-`     | `-`         | Element-by-element subtraction
+
+- Interpreter
+
+    * The use of `'...'` for line continuations *inside* double-quoted
+    strings has been deprecated.  Use `'\'` for line continuations
+    inside strings instead.
+
+    * The use of `'\'` as a line continuation *outside* of double-quoted
+    strings has been deprecated.  Use `'...'` for line continuations
+    instead.
+
+    * Any trailing whitespace after a `'\'` line continuation has been
+    deprecated.  Delete unnecessary trailing whitespace.
+
+
+The following functions were deprecated in Octave 6 and will be removed
+from Octave 8 (or whatever version is the second major release after 6):
+
+- Functions
+
+  Function               | Replacement
+  -----------------------|------------------
+  `runtests`             | `oruntests`
+
+- The environment variable used by `mkoctfile` for linker flags is now
+  `LDFLAGS` rather than `LFLAGS`.  `LFLAGS` was deprecated in Octave 6,
+  and a warning is now emitted if it is used, but it will continue to
+  work.
+
+
+### Removed functions, properties, and features
+
+The following functions and properties were deprecated in Octave 5
+and have been removed from Octave 7.
+
+- Functions
+
+  Function                 | Replacement
+  -------------------------|------------------
+  `output_max_field_width` | `output_precision`
+  `is_keyword`             | `iskeyword`
+
+- Properties
+
+  Object           | Property      | Value
+  -----------------|---------------|------------
+  `text`           | `fontangle`   | `"oblique"`
+  `uibuttongroup`  | `fontangle`   | `"oblique"`
+  `uicontrol`      | `fontangle`   | `"oblique"`
+  `uipanel`        | `fontangle`   | `"oblique"`
+  `uitable`        | `fontangle`   | `"oblique"`
+
+- The prototype JIT compiler has been removed from Octave.  Since it was
+first added as part of a Google Summer of Code project in 2012, no one
+has ever seriously taken on further development of it and it still does
+nothing significant.  It is out of date with the default interpreter
+that walks the parse tree.  Even though we have fixed the configure
+script to disable it by default, people still ask questions about how to
+build it, but it doesn’t seem that they are doing that to work on it but
+because they think it will make Octave code run faster (it never did,
+except for some extremely simple bits of code as examples for
+demonstration purposes only).  The following functions related to the
+JIT compiler have also been removed: `debug_jit`, `jit_enable`,
+`jit_failcnt`, and `jit_startcnt`.
+
+### Alphabetical list of new functions added in Octave 7
+
+* `cospi`
+* `getpixelposition`
+* `endsWith`
+* `fill3`
+* `jsondecode`
+* `jsonencode`
+* `jupyter_notebook`
+* `listfonts`
+* `matlab.net.base64decode`
+* `matlab.net.base64encode`
+* `memory`
+* `ordqz`
+* `rng`
+* `sinpi`
+* `startsWith`
+* `streamribbon`
+* `turbo`
+* `uniquetol`
+* `xtickangle`
+* `ytickangle`
+* `ztickangle`
+
--- a/pages/community-news.html	Fri Apr 08 21:54:44 2022 +0900
+++ b/pages/community-news.html	Fri Apr 08 22:23:16 2022 +0900
@@ -14,7 +14,7 @@
 entries in the GUI:
 
   this-is-the-gnu-octave-community-news-page
-  community-news-page-serial=17
+  community-news-page-serial=18
 
 -->
 
--- a/pages/menu/download.md	Fri Apr 08 21:54:44 2022 +0900
+++ b/pages/menu/download.md	Fri Apr 08 22:23:16 2022 +0900
@@ -8,13 +8,10 @@
 
 <div class="primary callout">
   <i class="fas fa-info-circle" style="color:#1779ba;"></i>
-  <strong>GNU Octave 6.4.0</strong> is the latest stable release.
+  <strong>GNU Octave 7.1.0</strong> is the latest stable release.
   &nbsp;
   (Release Notes:
-  <a href="{{ "/NEWS-6.1.html" | relative_url }}">6.1.0</a>,
-  <a href="{{ site.baseurl }}{% post_url 2021-02-20-octave-6.2.0-released %}">6.2.0</a>,
-  <a href="{{ site.baseurl }}{% post_url 2021-07-11-octave-6.3.0-released %}">6.3.0</a>,
-  <a href="{{ site.baseurl }}{% post_url 2021-10-30-octave-6.4.0-released %}">6.4.0</a>)
+  <a href="{{ "/NEWS-7.html" | relative_url }}">7.1.0</a>)
 </div>
 
 <div class="button-group large expanded stacked-for-small">
@@ -95,28 +92,28 @@
 </div>
 
 - Windows-64 (recommended)
-  - [octave-6.4.0-w64-installer.exe](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-installer.exe)
-    (~ 325 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-installer.exe.sig)
-  - [octave-6.4.0-w64.7z](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64.7z)
-    (~ 319 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64.7z.sig)
-  - [octave-6.4.0-w64.zip](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64.zip)
-    (~ 568 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64.zip.sig)
+  - [octave-7.1.0-w64-installer.exe](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-installer.exe)
+    (~ 380 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-installer.exe.sig)
+  - [octave-7.1.0-w64.7z](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64.7z)
+    (~ 375 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64.7z.sig)
+  - [octave-7.1.0-w64.zip](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64.zip)
+    (~ 660 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64.zip.sig)
 
 <p></p>
 
 - Windows-32 (old computers)
-  - [octave-6.4.0-w32-installer.exe](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w32-installer.exe)
-    (~ 319 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w32-installer.exe.sig)
-  - [octave-6.4.0-w32.7z](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w32.7z)
-    (~ 311 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w32.7z.sig)
-  - [octave-6.4.0-w32.zip](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w32.zip)
-    (~ 531 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w32.zip.sig)
+  - [octave-7.1.0-w32-installer.exe](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w32-installer.exe)
+    (~ 380 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w32-installer.exe.sig)
+  - [octave-7.1.0-w32.7z](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w32.7z)
+    (~ 375 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w32.7z.sig)
+  - [octave-7.1.0-w32.zip](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w32.zip)
+    (~ 650 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w32.zip.sig)
 
 <p></p>
 
@@ -129,15 +126,15 @@
   version above.
   </small>
 
-  - [octave-6.4.0-w64-64-installer.exe](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-64-installer.exe)
-    (~ 326 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-64-installer.exe.sig)
-  - [octave-6.4.0-w64-64.7z](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-64.7z)
-    (~ 319 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-64.7z.sig)
-  - [octave-6.4.0-w64-64.zip](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-64.zip)
-    (~ 568 MB)
-    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-6.4.0-w64-64.zip.sig)
+  - [octave-7.1.0-w64-64-installer.exe](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-64-installer.exe)
+    (~ 380 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-64-installer.exe.sig)
+  - [octave-7.1.0-w64-64.7z](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-64.7z)
+    (~ 375 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-64.7z.sig)
+  - [octave-7.1.0-w64-64.zip](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-64.zip)
+    (~ 660 MB)
+    [[signature]](https://ftpmirror.gnu.org/octave/windows/octave-7.1.0-w64-64.zip.sig)
 
 All Windows binaries with corresponding source code can be downloaded from
 [https://ftpmirror.gnu.org/octave/windows/](https://ftpmirror.gnu.org/octave/windows/).