`f(x)`

MDDatasets.jl: Multi-Dimensional Datasets for Parametric Analysis +Continuous
⚠️ Base library

`MDDatasets.jl`

is a base library to make parametric analysis simple by broadcasting over its multi-dimensional data structures. For a more useful analysis solution, it is highly recommended to install one of the following "suites":

- CMDimData.jl: Facilitates parametric analysis with continous
`f(x)`interpolation & multi-dimensional plots. Built using MDDatasets.jl module. - CMDimCircuits.jl: Extends CMDimData.jl with circuit-specific functionnality (ex: signal processing, network analysis, ...).

## Table of contents

## Description

The `MDDatasets.jl`

package provides tools to simplify manipulation of multi-dimensional datasets, and represent `{x,y}`

vectors as a continuous function of 1 argument: `y=f(x)`

.

### Features/Highlights

Stores both**Single variable for (x,y) values:**`(x,y)`

values representing`y=f(x)`

in a single, coherent structure. This signficantly improves the simplicity & readability of your calculations.Calculations will automatically be interpolated over**Automatic Interpolation:**`x`

as if`y=f(x)`

data represented afunction of x.**continuous**Operations on multi-dimensional datasets will automatically be broadcasted (vectorized) over all subsets. This significantly improves the readability of programs.**Automatic Broadcasting:**

## Sample usage

Examples of how to use `MDDatasets`

are provided in the sample/ subdirectory.

Hilights:

Other examples of its capabilities can be found under the test directory.

More advanced usage examples can be found in the sample directories of `CMDimData.jl`

and `CMDimCircuits.jl`

modules.

## Usage: Constructing a recursive-sweep dataset

Assuming input data can be generated using the following:

```
t = DataF1((0:.01:10)*1e-9) #Time vector stored as a function of 1 argument
#NOTE: get_ydata returns type "DataF1" (stores data as a function of 1 argument):
get_ydata(t::DataF1, tbit, vdd, trise) = sin(2pi*t/tbit)*(trise/tbit)+vdd
```

One can create a relatively complex Recursive-Sweep (DataRS) dataset using the following pattern:

```
datars = fill(DataRS, PSweep("tbit", [1, 3, 9] * 1e-9)) do tbit
fill(DataRS, PSweep("VDD", 0.9 * [0.9, 1, 1.1])) do vdd
#Inner-most sweep: need to specify element type (DataF1):
#(Other (scalar) element types: DataInt/DataFloat/DataComplex)
fill(DataRS{DataF1}, PSweep("trise", [0.1, 0.15, 0.2] * tbit)) do trise
return get_ydata(t, tbit, vdd, trise)
end
end
end
```

## Known limitations

### TODO

- Support for broadcasting functions over
`DataHR`

&`DataRS`

types is fairly extensive.- Nonetheless, the system is incomplete/imperfect, and unexpected failures will occur.

### Compatibility

Extensive compatibility testing of `MDDatasets.jl`

has not been performed. The module has been tested using the following environment(s):

- Windows 10 / Linux / Julia-1.5.3

## Disclaimer

The `MDDatasets.jl`

module is not yet mature. Expect significant changes.