Page 1 of 1

OCTA8.4.1

Posted: 2022年Jul月26日(Tue) 12:50
by nishimoto.masahiro
GOURMETの以下の不具合を修正したOCTA8.4.1 をアップロードします。
以下の条件を全て満たす時に、GOURMETおよびPythonスクリプトを使ったデータ編集がエラーになる、またはデータが不正になります。
・バイナリUDFファイルを使っている。
・GOURMETで配列の部分読み込みを有効にしている。または環境変数BDF_LIMIT_READに数字を設定している。
・GOURMETでは、配列の部分読み込みの初期読み込み数(Number of initial read)の2.2倍以上の配列サイズを扱う。
 コマンドターミナルでPythonスクリプトを使うときは、環境変数BDF_LIMIT_READの設定数の2.2倍以上の配列サイズを扱う。
・部分読み込みの初期読み込み数(Number of initial read)または環境変数BDF_LIMIT_READの設定数よりも大きな数の配列位置を編集する。
・レコード削除後に削除レコードより後ろのレコードを編集する。

OCTA8.4.1は上記の不具合のみを修正したものです。
デフォルトでは「配列部分読み込み」(Partial Array Reading)はOFFです。
また、Windowdsでは環境変数BDF_LIMIT_READは設定されていません。
したがって、Windowdsでは不具合が起こるケースは稀であると思います。
Linuxでは、環境変数BDF_LIMIT_READが設定されていますので、不具合が起こる可能性が高くなります。
(OCTA84/GOURMET/gourmetterm の3行目に 下記のように環境変数が設定されています。)
export BDF_LIMIT_READ=10000
もし、上記不具合に遭遇された方は、OCTA8.4.1 にアップデートしてください。
または上記環境変数をコメントにすれば不具合を回避できます。

OCTA8.4.1はOCTA8.4とデフォルトでは同じディレクトリにインストールされます。
上書きインストールはしないでください。
Windowsの場合は、なるべくOCTA8.4をアンインストールしてからOCTA8.4.1をインストールしてください。

下にエラーが起こる例を示します。
OCTA 8.4では(1)に示すUDFファイル(バイナリUDFへの変換が必要)を使って、(2)に示すPythonを実行するとエラーになります。
((1)の AA[] は22個以上の成分をもつ実数配列です。)

----------------------------------------------------------------------------------------------

I upload OCTA 8.4.1. The new version fixes the following bug.
When all of the following conditions are met, data editing by Python script or in GOURMET causes an error or incorrect data.
* Binary data file is used as the file format.
* "Partial Array Reading" is enabled in GOURMET. Or, a number enclosed in quotes is set in the environment variable BDF_LIMIT_READ.
* In GOURMET, you handle data arrays that are at least 2.2 times the initial number of partial reads ("Number of initial read").
When you use Python script in your command terminal, you handle data arrays that are at least 2.2 times the size set in the environment variable BDF_LIMIT_READ.
* You edit the array data at a position greater than the initial number of partial read or the number set in the environment variable BDF_LIMIT_READ.
* After deleting some records, you edit the array data of the records after the deleted records.

OCTA 8.4.1 fixes only the above bug.
By default, "Partial Array Reading" is OFF.
On Windows, the environment variable BDF_LIMIT_READ is not set.
Therefore, I think it is rare that the above problem occurs on Windows.
But on Linux, the environment variable BDF_LIMIT_READ is set, so it is more possibility that the problem will occur.
If you get the above problem, please update to version 8.4.1.
Or you can work around the problem by commenting on the above environment variables.
(The environment variable BDF_LIMIT_READ is set on the third line of the configuration file OCTA84/GOURMET/gourmetterm.)

OCTA 8.4.1 is installed in the same directory as OCTA 8.4 by default.
Do not overwrite an earlier version OCTA with OCTA 8.4.1.
On Windows, uninstall version 8.4 and then install version 8.4.1.

Below is an example of the error.
In OCTA 8.4, using the sample UDF file (converted to binary UDF) shown in (1) and executing Python shown in (2) will cause the problem.

----------------------------------------------------------------------------------------------
(1) UDF example. Convert the following to a binary UDF file to make "atest.bdf".

\begin{def}
AA[]:double
\end{def}

\begin{record}{"Step 0"}
\begin{data}
AA[]:[100.0,101.0,102.0,103.0,104.0,105.0, ...] // Real number array with 22 or more components.
\end{data}
\end{record}

\begin{record}{"Step 1"}
\begin{data}
AA[]:[200.0,201.0,202.0,203.0,204.0,205.0, ...] // Real number array with 22 or more components.
\end{data}
\end{record}

---------------------------------------------
(2) Python script example.

import os
from UDFManager import *

# SET BDF_LIMIT_READ
os.environ["BDF_LIMIT_READ"]="10"

udfobj = UDFManager("atest.bdf")
udfobj.jump(0)
udfobj.eraseRecord(0, 1)
udfobj.newRecord()
udfobj.put(900, "AA[]", [19]) <----- Error will occur.

udfobj.write()
udfobj = 0