<Next version of Ox> <Previous version of Ox>

# Ox 5: new features and fixes

Fixed problems in version 5.1
New features and enhancements in version 5.0
Fixed problems in version 5.0

## Fixed problems in version 5.1

- OxPack cannot run modelling package that depends on files outside the implied package folder: need option to specify additional run options. Redesigned the Add/Remove Package dialog.
- Ability to read csv file written by Excel on Mac. Save csv file: no more warning about maximum rows/columns. The `loadmat`/`savemat` documentation now mentions csv (the wks/wk1 formats are now deprecated).

  Warning: Excel may write csv files with only single precision (9 significant digits, rather than the 17 that are needed for loss-less saving).

- `DrawTMatrix` and daily data: sub sample plotting picked an upper bound for the x-axis that was too low when using annual major ticks. Now also extending axis one day further, to include the next major tick mark on the axis.
- Fixed memory leak in `choleski` of large matrices
- `DrawBoxPlot`: third argument was not interpreted as variable name but as line index.
- `Modelbase::Grow` creates wrong Seasonal/CSeasonal for weekly data.
- Couldn't use `GetModelStatus()` in PcFiml derived classes.
- Examples (html): title had link back, but now also added definition at end of example to jump to definition.
- `Companion()` (in `lib/longrun.ox`) would give run-time error for static model.
- Found solution for annoying Internet Explorer ActiveX warning with Ox html files
- bin64/oxl.exe was not statically linked
- Fixed crash in `loadmat` of non-existent .xls file
- Increased precision of today function (Windows,Linux); timer under Linux now returns wallclock instead of CPU time (as in Windows).

## New features and enhancements in version 5.0

- Multithreaded version (Ox Professional only) New command line option `-rp` to specify number of parallel threads. The default is to use the same as the number of cores/processors. Use `-rp1` to force running on just one (serial instead of parallel).
- Can now have `enum` inside class declaration (behaving as `static const decl` member variables).
- Can now declare the same class twice (e.g. by accidentally including a header file twice, provided the declarations are identical)
- `Modelbase::ForceYlag` changed all types to `Y_VAR` for lagged Y variables. Now argument can be array of two values to specify which type to change (first is value to change to, second to change from). `Modelbase::ReceiveModel()` now only changes `X_VAR` to `Y_VAR` for lagged dep.vars using `ForceYlag( {Y_VAR, X_VAR} );`
- `ismember` and `classname` functions.
- improved `invertgen` documentation.
- `Database::Grow` and `Modelbase::Grow` now accept a negative argument to add observations at the beginning. Improved the created dates when extending a dated (weekly or 5 days per week) database.
- `Database::Remove` and `Database::Rename` now accept arrays of strings as arguments.
- `dropr` and `insertr` now also work on arrays.
- `getfiles` function
- OxPack:
  - Added `"OxPackGetData"("DbFullPath")`
  - Can now specify multiple extensions in OP_FILE_OPEN, e.g. `"OxPackSpecialDialog"("OP_FILE_OPEN", 0, "*.in7;*.xls"`
  - Added `OP_VARIABLE` (OxPackSpecialDialog) and `CTL_VARIABLE` (dialog control). This allows editing any Ox variable, including arrays and objects of classes. The type of components cannot be changed.
- Now can take the reference (address) of const variables (previously this would be a compile-time error). This allows using `fscan("%v", &this)` to read an object from disk. Also allowed is &this in `OP_VARIABLE` or `CTL_VARIABLE`.
- Faster sorting functions
- `exclusion` function with 3 arguments now sets idx to <> if the input is empty
- improvements for `quanbeta` and `quanf`, `probf`, `tailf` now allows n,m>0 instead of n,m>1.

## Fixed problems in version 5.0:

- `"%v"` format: don't read/write static const members.
- `public static` data members were not directly accessible.
- In Ox 4 `ranseed` returns the 256 seeds. However, the generator has an additional state and carry integer, so this is not enough to get the exact state of the generator. Now `ranseed` will return 258 numbers: the 256 seeds followed by state and carry. This allows for the exact state to be replicated (defaults are used for seeds, state or carry that are missing).
- `raninvgaussian` could generate negative draws for very large mu, e.g. raninvgaussian(1,1,1e10,0.53). This was a problem with the original algorithm (Michael et al. 1976).
- Parser recognizes << and >>, however they could cause stack overflow (and subsequent crash). Now solved stack problem. Currently, it is a no-op: doesn't do anything.
- The following code

      		Get() {	return {"AA"}; 			}
      		main(){	println(Get()[<0,0>]);	}

  prints

      		[0] = AA
      		[1] = 0

  instead of

      		[0] = AA
      		[1] = AA

- `modelforc` crashed after error message: Some lagged variables are not given at lag 0. Now better at taking zero coefficients in account.
- `gammafact(.NaN)` results in crash (infinite recursion) on Linux.
- The `spline` function with specified X and missing value(s) would crash. To fix this, the return value of the spline function when an X variable is specified is different: previously it was the sorted smooth values. Now the values are in the original position (i.e. corresponding to the input Y data).
  Spline against time was unaffected and is unchanged.
- OxPack:
  - `SaveOptions` did not get called when closing OxMetrics.
  - `CTL_LABEL` should not affect the column partitioning.
- `DrawTMatrix` with dates for X axis did not work in Ox Console (but worked with OxMetrics).

Ox version 5.00. © JA Doornik

This file last changed
.