Signal Processing

Binder Notebook

Summary: this tutorial demonstrates multiple ways of signal processing with FSharp.Stats.

Table of contents

Outliers

Tukey's fences

A common approach for outlier detection is Tukey's fences-method. It determines the interquartile range (IQR) of the data and adds a fraction of it to the third quartile (Q3) or subtracts it from the first quartile (Q1) respectively. An often-used fraction of the IQR is k=1.5 for outliers and k=3 for points 'far out'.

In the generation of box plots the same method determines the whiskers and outliers of a sample.

Reference:

  • Tukey, JW. Exploratory data analysis. Addison-Wesely, 1977
open FSharp.Stats
open FSharp.Collections

let sampleO1 = [|45.;42.;45.5;43.;47.;51.;34.;45.;44.;46.;48.;37.;46.;|]

let outlierBordersO1 = Signal.Outliers.tukey 1.5 sampleO1

let lowerBorderO1 = Interval.getStart outlierBordersO1
// result: 37.16667

let upperBorderO1 = Interval.getEnd outlierBordersO1
// result: 51.83333

let (inside,outside) =
    sampleO1 
    |> Array.partition (fun x -> outlierBordersO1.liesInInterval x)

let tukeyOutlierChart =
    [
        Chart.Point(inside |> Seq.map (fun x -> 1,x),"sample")
        Chart.Point(outside |> Seq.map (fun x -> 1,x),"outliers")
    ]
    |> Chart.combine
    |> Chart.withShapes(
        [
            Shape.init(ShapeType=StyleParam.ShapeType.Line,X0=0.5,X1=1.5,Y0=lowerBorderO1,Y1=lowerBorderO1,Line=Line.init(Dash=StyleParam.DrawingStyle.Dash,Color=Color.fromString "grey"))
            Shape.init(ShapeType=StyleParam.ShapeType.Line,X0=0.5,X1=1.5,Y0=upperBorderO1,Y1=upperBorderO1,Line=Line.init(Dash=StyleParam.DrawingStyle.Dash,Color=Color.fromString "grey"))
        ]
        )
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withTitle "Tukey's fences outlier borders"
   

Filtering

Savitzgy-Golay description is coming soon.

open FSharp.Stats

// Savitzky-Golay low-pass filtering
let t  = [|-4. ..(8.0/500.).. 4.|]
let dy  = t |> Array.map (fun t -> (-t**2.) + (Distributions.Continuous.Normal.Sample 0. 0.5) )
let dy' = t |> Array.map (fun t -> (-t**2.))

let dysg = Signal.Filtering.savitzkyGolay  31 4 0 1 dy

let savitzgyChart =
    [
        Chart.Point(t, dy, Name="data with noise");
        Chart.Point(t, dy', Name="data without noise");
        Chart.Point(t, dysg, Name="data sg");
    ]
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored

Padding

If convolution operations should be performed on a signal trace, it often is necessary to extend (pad) the data with artificial data points. There are several padding methods:

  • Zero: Data points with y-value=zero are introduced. This often is useful when analyzing spectra with sparse data because areas without any data measured are assumed to have zero intensity.

  • Random: When the baseline of the measured signal is nonzero like in chromatograms, it is necessary to insert data points with random y-values taken from the original data set.

  • Delete: No datapoints are inserted.

  • Linear interpolation: When a linear relationship is assumed in the range between two adjacent data points, the padding points should lie on the straight line between those points.

Three regions can be defined where padding points could be introduced:

  1. In the beginning and end of the data set artificial data points have to be added to analyse the start- and end-regions of the data. Therefore, random data points are chosen from the original data set.
  2. If the data is not measured in discrete intervals, the region between two adjacent values have to be padded to ensure sufficient coverage for convolution.
  3. If the gap between two adjacent points is too large, another padding method than in case 2. may be chosen.
open FSharp.Stats.Signal

// get raw data
// data originates from temperature measurements conducted in https://github.com/bvenn/AlgaeWatch
let data = 
    System.IO.File.ReadAllLines(__SOURCE_DIRECTORY__ + "/data/waveletData.txt")
    |> Array.map (fun x -> 
        let tmp = x.Split([|'\t'|])
        float tmp.[0],float tmp.[1])

///interpolate data point y-values when small gaps are present
let innerPadMethod = Padding.InternalPaddingMethod.LinearInterpolation

///take random data point y-values when huge gaps are between data points
let hugeGapPadMethod = Padding.HugeGapPaddingMethod.Random

///padd the start and end of the signal with random data points
let borderPadMethod = Padding.BorderPaddingMethod.Random

///the maximal distance that is allowed between data points is the minimum spacing divided by 2
let minDistance = 
    (Padding.HelperFunctions.getMinimumSpacing data (-)) / 2.

//maximal allowed gap between datapoints where internalPaddingMethod can be applied.
//if internalPaddingMethod = hugeGapPaddingMethod, then it does not matter which value is chosen
let maxSpacing = 10.

//since were dealing with floats the functions are (-) and (+)
let getDiffFu = Padding.HelperFunctions.Float.getDiffFloat      //(-)
let addXValue = Padding.HelperFunctions.Float.addToXValueFloat  //(+)

//number of datapoints the dataset gets expanded to the left and to the rigth
let borderpadding = 1000

//get the paddedDataSet
let paddedData =
    //if a gap is greater than 10. the HugeGapPaddingMethod is applied
    Padding.pad data minDistance maxSpacing getDiffFu addXValue borderpadding borderPadMethod innerPadMethod hugeGapPadMethod

let paddedDataChart=
    [
    Chart.Line (paddedData,Name="paddedData")
    Chart.Area (data,Name = "rawData")
    ]
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withXAxisStyle "Time"
    |> Chart.withYAxisStyle "Temperature"
    |> Chart.withSize(900.,450.)

Example for a linear interpolation as huge gap padding method

//get the padded data
let paddedDataLinear =
    //if a gap is greater than 10. the LinearInterpolation padding method is applied
    Padding.pad data minDistance maxSpacing getDiffFu addXValue borderpadding borderPadMethod innerPadMethod Padding.HugeGapPaddingMethod.LinearInterpolation

let paddedDataLinearChart=
    [
    Chart.Line (paddedDataLinear,Name="paddedData")
    Chart.Area (data,Name = "rawData")
    ]
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withXAxisStyle "Time"
    |> Chart.withYAxisStyle "Temperature"
    |> Chart.withSize(900.,450.)

Wavelet

Continuous Wavelet

The Continuous Wavelet Transform (CWT) is a multiresolution analysis method to gain insights into frequency components of a signal with simultaneous temporal classification. Wavelet in this context stands for small wave and describes a window function which is convoluted with the original signal at every position in time. Many wavelets exist, every one of them is useful for a certain application, thereby 'searching' for specific patterns in the data. By increasing the dimensions (scale) of the wavelet function, different frequency patterns are studied.

In contrast to the Fourier transform, that gives a perfect frequency resolution but no time resolution, the CWT is capable of mediating between the two opposing properties of time resolution and frequency resolution (Heisenberg's uncertainty principle).

For further information please visit The Wavelet Tutorial or the following publications:

  • A Practical Guide to Wavelet Analysis, Torrence & Compo, American Meteorological Society, 1998
  • Climate Signal Detection Using Wavelet Transform: How to Make a Time Series Sing, Lau & Weng, American Meteorological Society, 1995
open FSharp.Stats
open StyleParam

///Array containing wavelets of all scales that should be investigated. The propagated frequency corresponds to 4 * Ricker.Scale
let rickerArray = 
    [|2. .. 10.|] |> Array.map (fun x -> Wavelet.createRicker (x**1.8))

///the data already was padded with 1000 additional datapoints in the beginning and end of the data set (see above). 
///Not it is transformed with the previous defined wavelets.
let transformedData = 
    rickerArray
    |> Array.map (fun wavelet -> ContinuousWavelet.transform paddedData (-) 1000 wavelet)

///combining the raw and transformed data in one chart
let combinedSignalChart =
    //CWT-chart
    let heatmap =
        let rowNames,colNames = 
            transformedData.[0] |> Array.mapi (fun i (x,_) -> string i, string x) |> Array.unzip
        transformedData
        |> JaggedArray.map snd
        |> fun x -> Chart.Heatmap(x,colNames=colNames,rowNames=rowNames,ShowScale=false)
        |> Chart.withAxisAnchor(X=1)
        |> Chart.withAxisAnchor(Y=1)

    //Rawchart
    let rawChart = 
        Chart.Area (data,LineColor = Color.fromHex "#1f77b4",Name = "rawData")
        |> Chart.withAxisAnchor(X=2)
        |> Chart.withAxisAnchor(Y=2) 

    //combine the charts and add additional styling
    Chart.combine([heatmap;rawChart])
    |> Chart.withXAxisStyle("Time",Side=Side.Bottom,Id=SubPlotId.XAxis 2,ShowGrid=false)
    |> Chart.withXAxisStyle("", Side=Side.Top,ShowGrid=false, Id=SubPlotId.XAxis 1,Overlaying=LinearAxisId.X 2)
    |> Chart.withYAxisStyle("Temperature", MinMax=(-25.,30.), Side=Side.Left,Id=SubPlotId.YAxis 2)
    |> Chart.withYAxisStyle(
        "Correlation", MinMax=(0.,19.),ShowGrid=false, Side=Side.Right,
        Id=SubPlotId.YAxis 1,Overlaying=LinearAxisId.Y 2)
    |> Chart.withLegend true
    //|> Chart.withSize(900.,700.)
    

Because in most cases default parameters are sufficient to transform the data, there are two additional functions to process the raw data with automated padding:

  1. ContinuousWavelet.transformDefault

    • padding is chosen in an automated manner based on the used wavelet
    • minDistance: median spacing / 2
    • maxDistance: median spacing * 10
    • internalPadding: LinearInterpolation
    • hugeGapPadding: Random
  2. ContinuousWavelet.transformDefaultZero

    • padding is chosen in an automated manner based on the used wavelet
    • minDistance: smallest occurring spacing
    • maxDistance: Infinity
    • internalPadding: Zero
    • hugeGapPadding: Zero (redundant)
//used wavelets
let rickerArrayDefault = 
    [|2. .. 2. .. 10.|] |> Array.map (fun x -> Wavelet.createRicker (x**1.8))

//transforms the data with default parameters (InternalPadding=LinearInterpol;HugeGapPadd=Random)
let defaultTransform =
    rickerArrayDefault
    |> Array.map (ContinuousWavelet.transformDefault data)

//alternative presentation of the wavelet correlation coefficients as line charts
let defaultChart =
    let rawDataChart =
        [|Chart.Area(data,Name= "rawData")|]
    let cwtCharts =
        let scale i = rickerArrayDefault.[i].Scale
        defaultTransform 
        |> Array.mapi (fun i x -> Chart.Line(x,Name=(sprintf "s: %.1f" (scale i))))

    Array.append rawDataChart cwtCharts
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withXAxisStyle "Time"
    |> Chart.withYAxisStyle "Temperature and Correlation"
    |> Chart.withTitle "default transform"
  • Because random y-values are introduced, small wavelets are going to receive a high correlation in big gaps!
  • s = scale
  • f = frequency [days]
MultiChart
  ([Plotly.NET.Trace2D; Plotly.NET.Trace2D; Plotly.NET.Trace2D;
    Plotly.NET.Trace2D; Plotly.NET.Trace2D; Plotly.NET.Trace2D],
   Plotly.NET.Layout, Plotly.NET.Config, Plotly.NET.DisplayOptions)
//transforms the data with default parameters (InternalPadding=Zero;HugeGapPadd=Zero)
let defaultZeroTransform =
    rickerArrayDefault
    |> Array.map (ContinuousWavelet.transformDefaultZero data)

let defaultZeroChart =
    let rawDataChart =
        [|Chart.Area(data,Name= "rawData")|]
    let cwtCharts =
        let scale i = rickerArrayDefault.[i].Scale
        defaultZeroTransform 
        |> Array.mapi (fun i x -> Chart.Line(x,Name=(sprintf "s: %.1f" (scale i) )))

    Array.append rawDataChart cwtCharts
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
    |> Chart.withXAxisStyle "Time"
    |> Chart.withYAxisStyle "Temperature and Correlation"
    |> Chart.withTitle "default Zero transform"
  • Because zeros are introduced, the adjacent signals are going to receive a high correlation!
  • In this example the correlation coefficients in general drop to a reduced intensity because a zero values are introduced between every data point (minDistance = minimal spacing / 2.). So here a zero padding makes no sense. The Temperature wont drop to zero between two measurements.
  • s = scale
  • f = frequency [days]

Continuous Wavelet 3D

When dealing with three dimensional data a three dimensional wavelet has to be used for signal convolution. Here the Marr wavelet (3D mexican hat wavelet) is used for analysis. Common cases are:

  • (microscopic) images
  • micro arrays
open FSharp.Stats.Signal

let data2D =
    let rnd = System.Random()
    Array2D.init 50 50 (fun i j -> 
        if (i,j) = (15,15) then 5.
        elif (i,j) = (35,35) then -5.
        else rnd.NextDouble())

let data2DChart = 
    data2D
    |> JaggedArray.ofArray2D
    |> fun data -> Chart.Heatmap(data,ShowScale=false)
    |> Chart.withXAxisStyle "raw data"

//has to be greater than the padding area of the used wavelet
let padding = 11

let paddedData2D =
    //padding the data points with 11 artificial random points on each side
    Padding.Discrete.ThreeDimensional.pad data2D padding Padding.Discrete.ThreeDimensional.Random

let marrWavelet = 
    Wavelet.createMarr 3.

let transformedData2D =
    ContinuousWavelet.Discrete.ThreeDimensional.transform paddedData2D padding marrWavelet

let chartHeatmap =
    transformedData2D
    |> JaggedArray.ofArray2D
    |> fun data -> Chart.Heatmap(data,ShowScale=false)
    |> Chart.withXAxisStyle "wavelet transformed"

let combined2DChart =
    [data2DChart;chartHeatmap]
    |> Chart.Grid(1,2)

Fast Fourier transform

The FFT analysis converts a signal from its original domain (often time or space) to a representation in the frequency domain and vice versa.

open FSharp.Stats 
open System.Numerics

// Fast fourier transform

// Sampling frequency   
let fs = 1000  
// Sampling period      
let tp = 1. / float fs
// Length of signal
let l = 1500;            

// Time vector
let time = Array.init (l-1) (fun x -> float x * tp)       

let pi = System.Math.PI

let signal t = 0.7 * sin (2.*pi*50.*t) + sin (2.*pi*120.*t)
let timeSignal = time |> Array.map signal

let fft = 
    Signal.FFT.inverseInPlace (
        timeSignal 
        |> Array.map (fun v ->  Complex(v, 0.) )) 
    |> Array.map (fun c -> c.Real)

let fftChart = 
    [
        Chart.Line(time,timeSignal) |> Chart.withTraceInfo "signal"
        Chart.Line(time,fft) |> Chart.withTraceInfo "fft"
    ]
    |> Chart.combine
    |> Chart.withTemplate ChartTemplates.lightMirrored
namespace Plotly
namespace Plotly.NET
module Defaults from Plotly.NET
<summary> Contains mutable global default values. Changing these values will apply the default values to all consecutive Chart generations. </summary>
val mutable DefaultDisplayOptions: DisplayOptions
Multiple items
type DisplayOptions = inherit DynamicObj new: unit -> DisplayOptions static member addAdditionalHeadTags: additionalHeadTags: XmlNode list -> (DisplayOptions -> DisplayOptions) static member addDescription: description: XmlNode list -> (DisplayOptions -> DisplayOptions) static member combine: first: DisplayOptions -> second: DisplayOptions -> DisplayOptions static member getAdditionalHeadTags: displayOpts: DisplayOptions -> XmlNode list static member getDescription: displayOpts: DisplayOptions -> XmlNode list static member getPlotlyReference: displayOpts: DisplayOptions -> PlotlyJSReference static member init: ?AdditionalHeadTags: XmlNode list * ?Description: XmlNode list * ?PlotlyJSReference: PlotlyJSReference -> DisplayOptions static member initCDNOnly: unit -> DisplayOptions ...

--------------------
new: unit -> DisplayOptions
static member DisplayOptions.init: ?AdditionalHeadTags: Giraffe.ViewEngine.HtmlElements.XmlNode list * ?Description: Giraffe.ViewEngine.HtmlElements.XmlNode list * ?PlotlyJSReference: PlotlyJSReference -> DisplayOptions
type PlotlyJSReference = | CDN of string | Full | Require of string | NoReference
<summary> Sets how plotly is referenced in the head of html docs. </summary>
union case PlotlyJSReference.NoReference: PlotlyJSReference
module StyleParam from Plotly.NET
namespace Plotly.NET.LayoutObjects
Multiple items
namespace FSharp

--------------------
namespace Microsoft.FSharp
namespace FSharp.Stats
namespace Microsoft.FSharp.Collections
val sampleO1: float[]
val outlierBordersO1: Interval<float>
namespace FSharp.Stats.Signal
module Outliers from FSharp.Stats.Signal
val tukey: k: float -> d: float[] -> Interval<float>
<summary>Tukey's fences based on interquartile range. c defines the magnitude of interquartile range that is added/subtracted to Q3 and Q1 respectively.<br />Commonly c is 1.5 for outliers and 3 for points 'far out' (Tukey 1977).</summary>
<remarks></remarks>
<param name="k"></param>
<param name="d"></param>
<returns></returns>
<example><code></code></example>
val lowerBorderO1: float
Multiple items
module Interval from FSharp.Stats

--------------------
type Interval<'a (requires comparison)> = | Closed of 'a * 'a | LeftOpen of 'a * 'a | RightOpen of 'a * 'a | Open of 'a * 'a | Empty member GetEnd: unit -> 'a member GetStart: unit -> 'a override ToString: unit -> string member ToTuple: unit -> 'a * 'a member liesInInterval: value: 'a -> bool static member CreateClosed: min: 'b * max: 'b -> Interval<'b> (requires comparison) static member CreateLeftOpen: min: 'a1 * max: 'a1 -> Interval<'a1> (requires comparison) static member CreateOpen: min: 'c * max: 'c -> Interval<'c> (requires comparison) static member CreateRightOpen: min: 'a0 * max: 'a0 -> Interval<'a0> (requires comparison) static member ofSeq: source: seq<'a> -> Interval<'a> ...
<summary> Closed interval [Start,End] </summary>
val getStart: interval: Interval<'a> -> 'a (requires comparison)
val upperBorderO1: float
val getEnd: interval: Interval<'a> -> 'a (requires comparison)
val inside: float[]
val outside: float[]
Multiple items
module Array from Microsoft.FSharp.Collections
<summary>Contains operations for working with arrays.</summary>
<remarks> See also <a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/arrays">F# Language Guide - Arrays</a>. </remarks>


--------------------
module Array from FSharp.Stats
<summary> Module to compute common statistical measure on array </summary>

--------------------
type Array = new: unit -> Array static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float array static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float[]

--------------------
new: unit -> Array
val partition: predicate: ('T -> bool) -> array: 'T[] -> 'T[] * 'T[]
<summary>Splits the collection into two collections, containing the elements for which the given predicate returns "true" and "false" respectively.</summary>
<param name="predicate">The function to test the input elements.</param>
<param name="array">The input array.</param>
<returns>A pair of arrays. The first containing the elements the predicate evaluated to true, and the second containing those evaluated to false.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<example id="partition-1"><code lang="fsharp"> let inputs = [| 1; 2; 3; 4 |] inputs |&gt; Array.partition (fun x -&gt; x % 2 = 0) </code> Evaluates to <c>([|2; 4|], [|1; 3|])</c>. </example>
val x: float
member Interval.liesInInterval: value: 'a -> bool
val tukeyOutlierChart: GenericChart.GenericChart
type Chart = static member AnnotatedHeatmap: zData: seq<#seq<'a1>> * annotationText: seq<#seq<string>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?X: seq<'a3> * ?MultiX: seq<seq<'a3>> * ?XGap: int * ?Y: seq<'a4> * ?MultiY: seq<seq<'a4>> * ?YGap: int * ?Text: 'a5 * ?MultiText: seq<'a5> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?ZSmooth: SmoothAlg * ?Transpose: bool * ?UseWebGL: bool * ?ReverseYAxis: bool * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a3 :> IConvertible and 'a4 :> IConvertible and 'a5 :> IConvertible) + 1 overload static member Area: x: seq<#IConvertible> * y: seq<#IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?FillColor: Color * ?FillPatternShape: PatternShape * ?FillPattern: Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload static member Bar: values: seq<#IConvertible> * ?Keys: seq<'a1> * ?MultiKeys: seq<seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerPatternShape: PatternShape * ?MultiMarkerPatternShape: seq<PatternShape> * ?MarkerPattern: Pattern * ?Marker: Marker * ?Base: #IConvertible * ?Width: 'a4 * ?MultiWidth: seq<'a4> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload static member BoxPlot: ?X: seq<'a0> * ?MultiX: seq<seq<'a0>> * ?Y: seq<'a1> * ?MultiY: seq<seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Text: 'a2 * ?MultiText: seq<'a2> * ?FillColor: Color * ?MarkerColor: Color * ?Marker: Marker * ?Opacity: float * ?WhiskerWidth: float * ?BoxPoints: BoxPoints * ?BoxMean: BoxMean * ?Jitter: float * ?PointPos: float * ?Orientation: Orientation * ?OutlineColor: Color * ?OutlineWidth: float * ?Outline: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?Notched: bool * ?NotchWidth: float * ?QuartileMethod: QuartileMethod * ?UseDefaults: bool -> GenericChart (requires 'a0 :> IConvertible and 'a1 :> IConvertible and 'a2 :> IConvertible) + 2 overloads static member Bubble: x: seq<#IConvertible> * y: seq<#IConvertible> * sizes: seq<int> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) + 1 overload static member Candlestick: ``open`` : seq<#IConvertible> * high: seq<#IConvertible> * low: seq<#IConvertible> * close: seq<#IConvertible> * ?X: seq<'a4> * ?MultiX: seq<seq<'a4>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?Text: 'a5 * ?MultiText: seq<'a5> * ?Line: Line * ?IncreasingColor: Color * ?Increasing: FinanceMarker * ?DecreasingColor: Color * ?Decreasing: FinanceMarker * ?WhiskerWidth: float * ?ShowXAxisRangeSlider: bool * ?UseDefaults: bool -> GenericChart (requires 'a4 :> IConvertible and 'a5 :> IConvertible) + 2 overloads static member Column: values: seq<#IConvertible> * ?Keys: seq<'a1> * ?MultiKeys: seq<seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerPatternShape: PatternShape * ?MultiMarkerPatternShape: seq<PatternShape> * ?MarkerPattern: Pattern * ?Marker: Marker * ?Base: #IConvertible * ?Width: 'a4 * ?MultiWidth: seq<'a4> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a2 :> IConvertible and 'a4 :> IConvertible) + 1 overload static member Contour: zData: seq<#seq<'a1>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?X: seq<'a2> * ?MultiX: seq<seq<'a2>> * ?Y: seq<'a3> * ?MultiY: seq<seq<'a3>> * ?Text: 'a4 * ?MultiText: seq<'a4> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?Transpose: bool * ?ContourLineColor: Color * ?ContourLineDash: DrawingStyle * ?ContourLineSmoothing: float * ?ContourLine: Line * ?ContoursColoring: ContourColoring * ?ContoursOperation: ConstraintOperation * ?ContoursType: ContourType * ?ShowContourLabels: bool * ?ContourLabelFont: Font * ?Contours: Contours * ?FillColor: Color * ?NContours: int * ?UseDefaults: bool -> GenericChart (requires 'a1 :> IConvertible and 'a2 :> IConvertible and 'a3 :> IConvertible and 'a4 :> IConvertible) static member Funnel: x: seq<#IConvertible> * y: seq<#IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?Width: float * ?Offset: float * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?Orientation: Orientation * ?AlignmentGroup: string * ?OffsetGroup: string * ?MarkerColor: Color * ?MarkerOutline: Line * ?Marker: Marker * ?TextInfo: TextInfo * ?ConnectorLineColor: Color * ?ConnectorLineStyle: DrawingStyle * ?ConnectorFillColor: Color * ?ConnectorLine: Line * ?Connector: FunnelConnector * ?InsideTextFont: Font * ?OutsideTextFont: Font * ?UseDefaults: bool -> GenericChart (requires 'a2 :> IConvertible) static member Heatmap: zData: seq<#seq<'b>> * ?X: seq<'c> * ?MultiX: seq<seq<'c>> * ?Y: seq<'d> * ?MultiY: seq<seq<'d>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?XGap: int * ?YGap: int * ?Text: 'e * ?MultiText: seq<'e> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?ZSmooth: SmoothAlg * ?Transpose: bool * ?UseWebGL: bool * ?ReverseYAxis: bool * ?UseDefaults: bool -> GenericChart (requires 'b :> IConvertible and 'c :> IConvertible and 'd :> IConvertible and 'e :> IConvertible) + 1 overload ...
static member Chart.Point: xy: seq<#System.IConvertible * #System.IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: TraceObjects.Marker * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Point: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: TraceObjects.Marker * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
Multiple items
module Seq from Microsoft.FSharp.Collections
<summary>Contains operations for working with values of type <see cref="T:Microsoft.FSharp.Collections.seq`1" />.</summary>

--------------------
module Seq from FSharp.Stats
<summary> Module to compute common statistical measure </summary>

--------------------
type Seq = new: unit -> Seq static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> seq<float> static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> seq<float>

--------------------
new: unit -> Seq
val map: mapping: ('T -> 'U) -> source: seq<'T> -> seq<'U>
<summary>Builds a new collection whose elements are the results of applying the given function to each of the elements of the collection. The given function will be applied as elements are demanded using the <c>MoveNext</c> method on enumerators retrieved from the object.</summary>
<remarks>The returned sequence may be passed between threads safely. However, individual IEnumerator values generated from the returned sequence should not be accessed concurrently.</remarks>
<param name="mapping">A function to transform items from the input sequence.</param>
<param name="source">The input sequence.</param>
<returns>The result sequence.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input sequence is null.</exception>
<example id="item-1"><code lang="fsharp"> let inputs = ["a"; "bbb"; "cc"] inputs |&gt; Seq.map (fun x -&gt; x.Length) </code> Evaluates to a sequence yielding the same results as <c>seq { 1; 3; 2 }</c></example>
static member Chart.combine: gCharts: seq<GenericChart.GenericChart> -> GenericChart.GenericChart
static member Chart.withShapes: shapes: seq<Shape> * ?Append: bool -> (GenericChart.GenericChart -> GenericChart.GenericChart)
Multiple items
type Shape = inherit DynamicObj new: unit -> Shape static member init: ?Editable: bool * ?FillColor: Color * ?FillRule: FillRule * ?Layer: Layer * ?Line: Line * ?Name: string * ?Opacity: float * ?Path: string * ?TemplateItemName: string * ?ShapeType: ShapeType * ?Visible: bool * ?X0: #IConvertible * ?X1: #IConvertible * ?XAnchor: LinearAxisId * ?Xref: string * ?XSizeMode: ShapeSizeMode * ?Y0: #IConvertible * ?Y1: #IConvertible * ?YAnchor: LinearAxisId * ?Yref: string * ?YSizeMode: ShapeSizeMode -> Shape static member style: ?Editable: bool * ?FillColor: Color * ?FillRule: FillRule * ?Layer: Layer * ?Line: Line * ?Name: string * ?Opacity: float * ?Path: string * ?TemplateItemName: string * ?ShapeType: ShapeType * ?Visible: bool * ?X0: #IConvertible * ?X1: #IConvertible * ?XAnchor: LinearAxisId * ?Xref: string * ?XSizeMode: ShapeSizeMode * ?Y0: #IConvertible * ?Y1: #IConvertible * ?YAnchor: LinearAxisId * ?Yref: string * ?YSizeMode: ShapeSizeMode -> (Shape -> Shape)
<summary> Shapes are layers that can be drawn onto a chart layout. </summary>

--------------------
new: unit -> Shape
static member Shape.init: ?Editable: bool * ?FillColor: Color * ?FillRule: FillRule * ?Layer: Layer * ?Line: Line * ?Name: string * ?Opacity: float * ?Path: string * ?TemplateItemName: string * ?ShapeType: ShapeType * ?Visible: bool * ?X0: #System.IConvertible * ?X1: #System.IConvertible * ?XAnchor: LinearAxisId * ?Xref: string * ?XSizeMode: ShapeSizeMode * ?Y0: #System.IConvertible * ?Y1: #System.IConvertible * ?YAnchor: LinearAxisId * ?Yref: string * ?YSizeMode: ShapeSizeMode -> Shape
type ShapeType = | Circle | Rectangle | SvgPath | Line member Convert: unit -> obj override ToString: unit -> string static member convert: (ShapeType -> obj) static member toString: (ShapeType -> string)
<summary> Specifies the shape type to be drawn. If "line", a line is drawn from (`x0`,`y0`) to (`x1`,`y1`) If "circle", a circle is drawn from ((`x0`+`x1`)/2, (`y0`+`y1`)/2)) with radius (|(`x0`+`x1`)/2 - `x0`|, |(`y0`+`y1`)/2 -`y0`)|) If "rect", a rectangle is drawn linking (`x0`,`y0`), (`x1`,`y0`), (`x1`,`y1`), (`x0`,`y1`), (`x0`,`y0`) If "path", draw a custom SVG path using `path`. </summary>
union case ShapeType.Line: ShapeType
Multiple items
type Line = inherit DynamicObj new: unit -> Line static member init: ?BackOff: BackOff * ?AutoColorScale: bool * ?CAuto: bool * ?CMax: float * ?CMid: float * ?CMin: float * ?Color: Color * ?ColorAxis: SubPlotId * ?Colorscale: Colorscale * ?ReverseScale: bool * ?ShowScale: bool * ?ColorBar: ColorBar * ?Dash: DrawingStyle * ?Shape: Shape * ?Simplify: bool * ?Smoothing: float * ?Width: float * ?MultiWidth: seq<float> * ?OutlierColor: Color * ?OutlierWidth: float -> Line static member style: ?BackOff: BackOff * ?AutoColorScale: bool * ?CAuto: bool * ?CMax: float * ?CMid: float * ?CMin: float * ?Color: Color * ?ColorAxis: SubPlotId * ?Colorscale: Colorscale * ?ReverseScale: bool * ?ShowScale: bool * ?ColorBar: ColorBar * ?Dash: DrawingStyle * ?Shape: Shape * ?Simplify: bool * ?Smoothing: float * ?Width: float * ?MultiWidth: seq<float> * ?OutlierColor: Color * ?OutlierWidth: float -> (Line -> Line)
<summary> The line object determines the style of the line in various aspect of plots such as a line connecting datums, outline of layout objects, etc.. </summary>

--------------------
new: unit -> Line
static member Line.init: ?BackOff: BackOff * ?AutoColorScale: bool * ?CAuto: bool * ?CMax: float * ?CMid: float * ?CMin: float * ?Color: Color * ?ColorAxis: SubPlotId * ?Colorscale: Colorscale * ?ReverseScale: bool * ?ShowScale: bool * ?ColorBar: ColorBar * ?Dash: DrawingStyle * ?Shape: Shape * ?Simplify: bool * ?Smoothing: float * ?Width: float * ?MultiWidth: seq<float> * ?OutlierColor: Color * ?OutlierWidth: float -> Line
type DrawingStyle = | Solid | Dash | Dot | DashDot | LongDash | LongDashDot | User of seq<int> member Convert: unit -> obj override ToString: unit -> string static member convert: (DrawingStyle -> obj) static member toString: (DrawingStyle -> string)
<summary> Dash: Sets the drawing style of the lines segments in this trace. Sets the style of the lines. Set to a dash string type or a dash length in px. </summary>
union case DrawingStyle.Dash: DrawingStyle
type Color = override Equals: other: obj -> bool override GetHashCode: unit -> int static member fromARGB: a: int -> r: int -> g: int -> b: int -> Color static member fromColorScaleValues: c: seq<#IConvertible> -> Color static member fromColors: c: seq<Color> -> Color static member fromHex: s: string -> Color static member fromKeyword: c: ColorKeyword -> Color static member fromRGB: r: int -> g: int -> b: int -> Color static member fromString: c: string -> Color member Value: obj
<summary> Plotly color can be a single color, a sequence of colors, or a sequence of numeric values referencing the color of the colorscale obj </summary>
static member Color.fromString: c: string -> Color
static member Chart.withTemplate: template: Template -> (GenericChart.GenericChart -> GenericChart.GenericChart)
module ChartTemplates from Plotly.NET
val lightMirrored: Template
static member Chart.withTitle: title: Title -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withTitle: title: string * ?TitleFont: Font -> (GenericChart.GenericChart -> GenericChart.GenericChart)
module GenericChart from Plotly.NET
<summary> Module to represent a GenericChart </summary>
val toChartHTML: gChart: GenericChart.GenericChart -> string
val t: float[]
val dy: float[]
Multiple items
module Array from FSharp.Stats
<summary> Module to compute common statistical measure on array </summary>

--------------------
module Array from Microsoft.FSharp.Collections
<summary>Contains operations for working with arrays.</summary>
<remarks> See also <a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/arrays">F# Language Guide - Arrays</a>. </remarks>


--------------------
type Array = new: unit -> Array static member geomspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float array static member linspace: start: float * stop: float * num: int * ?IncludeEndpoint: bool -> float[]

--------------------
new: unit -> Array
val map: mapping: ('T -> 'U) -> array: 'T[] -> 'U[]
<summary>Builds a new array whose elements are the results of applying the given function to each of the elements of the array.</summary>
<param name="mapping">The function to transform elements of the array.</param>
<param name="array">The input array.</param>
<returns>The array of transformed elements.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<example id="map-1"><code lang="fsharp"> let inputs = [| "a"; "bbb"; "cc" |] inputs |&gt; Array.map (fun x -&gt; x.Length) </code> Evaluates to <c>[| 1; 3; 2 |]</c></example>
val t: float
namespace FSharp.Stats.Distributions
namespace FSharp.Stats.Distributions.Continuous
type Normal = static member CDF: mu: float -> sigma: float -> x: float -> float static member CheckParam: mu: float -> sigma: float -> unit static member Estimate: samples: seq<float> -> ContinuousDistribution<float,float> static member Init: mu: float -> sigma: float -> ContinuousDistribution<float,float> static member InvCDF: mu: float -> sigma: float -> p: float -> float static member Mean: mu: float -> sigma: float -> float static member Mode: mu: float -> sigma: float -> float static member PDF: mu: float -> sigma: float -> x: float -> float static member Sample: mu: float -> sigma: float -> float static member SampleUnchecked: mu: float -> sigma: float -> float ...
<summary> Normal distribution. </summary>
static member Distributions.Continuous.Normal.Sample: mu: float -> sigma: float -> float
val dy': float[]
val dysg: float[]
module Filtering from FSharp.Stats.Signal
val savitzkyGolay: windowSize: int -> order: int -> deriv: int -> rate: int -> data: float[] -> float[]
<summary> Smooth (and optionally differentiate) data with a Savitzky-Golay filter.&lt;br /&gt;The Savitzky-Golay filter is a type of low-pass filter and removes high frequency noise from data. </summary>
val savitzgyChart: GenericChart.GenericChart
union case HoverInfo.Name: HoverInfo
val data: (float * float)[]
namespace System
namespace System.IO
type File = static member AppendAllLines: path: string * contents: IEnumerable<string> -> unit + 1 overload static member AppendAllLinesAsync: path: string * contents: IEnumerable<string> * encoding: Encoding * ?cancellationToken: CancellationToken -> Task + 1 overload static member AppendAllText: path: string * contents: string -> unit + 1 overload static member AppendAllTextAsync: path: string * contents: string * encoding: Encoding * ?cancellationToken: CancellationToken -> Task + 1 overload static member AppendText: path: string -> StreamWriter static member Copy: sourceFileName: string * destFileName: string -> unit + 1 overload static member Create: path: string -> FileStream + 2 overloads static member CreateSymbolicLink: path: string * pathToTarget: string -> FileSystemInfo static member CreateText: path: string -> StreamWriter static member Decrypt: path: string -> unit ...
<summary>Provides static methods for the creation, copying, deletion, moving, and opening of a single file, and aids in the creation of <see cref="T:System.IO.FileStream" /> objects.</summary>
System.IO.File.ReadAllLines(path: string) : string[]
System.IO.File.ReadAllLines(path: string, encoding: System.Text.Encoding) : string[]
val x: string
val tmp: string[]
System.String.Split([<System.ParamArray>] separator: char[]) : string[]
System.String.Split(separator: string[], options: System.StringSplitOptions) : string[]
System.String.Split(separator: string, ?options: System.StringSplitOptions) : string[]
System.String.Split(separator: char[], options: System.StringSplitOptions) : string[]
System.String.Split(separator: char[], count: int) : string[]
System.String.Split(separator: char, ?options: System.StringSplitOptions) : string[]
System.String.Split(separator: string[], count: int, options: System.StringSplitOptions) : string[]
System.String.Split(separator: string, count: int, ?options: System.StringSplitOptions) : string[]
System.String.Split(separator: char[], count: int, options: System.StringSplitOptions) : string[]
System.String.Split(separator: char, count: int, ?options: System.StringSplitOptions) : string[]
Multiple items
val float: value: 'T -> float (requires member op_Explicit)
<summary>Converts the argument to 64-bit float. This is a direct conversion for all primitive numeric types. For strings, the input is converted using <c>Double.Parse()</c> with InvariantCulture settings. Otherwise the operation requires an appropriate static conversion method on the input type.</summary>
<param name="value">The input value.</param>
<returns>The converted float</returns>
<example id="float-example"><code lang="fsharp"></code></example>


--------------------
[<Struct>] type float = System.Double
<summary>An abbreviation for the CLI type <see cref="T:System.Double" />.</summary>
<category>Basic Types</category>


--------------------
type float<'Measure> = float
<summary>The type of double-precision floating point numbers, annotated with a unit of measure. The unit of measure is erased in compiled code and when values of this type are analyzed using reflection. The type is representationally equivalent to <see cref="T:System.Double" />.</summary>
<category index="6">Basic Types with Units of Measure</category>
val innerPadMethod: Padding.InternalPaddingMethod
interpolate data point y-values when small gaps are present
Multiple items
module Padding from FSharp.Stats.Signal
<summary> padds data points to the beginning, the end and on internal intervals of the data </summary>

--------------------
type Padding = inherit DynamicObj new: unit -> Padding static member init: ?B: int * ?L: int * ?R: int * ?T: int -> Padding static member style: ?B: int * ?L: int * ?R: int * ?T: int -> (Padding -> Padding)

--------------------
new: unit -> Padding
type InternalPaddingMethod = | Random | NaN | Delete | Zero | LinearInterpolation
<summary> padds data point in small gaps (e.g. a missing data point or small ranges with no data) </summary>
union case Padding.InternalPaddingMethod.LinearInterpolation: Padding.InternalPaddingMethod
<summary> inserts points lying on the linear interpolation of the two adjacent knots </summary>
val hugeGapPadMethod: Padding.HugeGapPaddingMethod
take random data point y-values when huge gaps are between data points
type HugeGapPaddingMethod = | Random | NaN | Delete | Zero | LinearInterpolation
<summary> padds data point in huge gaps (e.g. big ranges with no data) </summary>
union case Padding.HugeGapPaddingMethod.Random: Padding.HugeGapPaddingMethod
<summary> inserts random data points taken from the original data set in a huge data gap </summary>
val borderPadMethod: Padding.BorderPaddingMethod
padd the start and end of the signal with random data points
type BorderPaddingMethod = | Random | Zero
<summary> padds data point at signals start and end </summary>
union case Padding.BorderPaddingMethod.Random: Padding.BorderPaddingMethod
<summary> inserts random data points taken from the original data set </summary>
val minDistance: float
the maximal distance that is allowed between data points is the minimum spacing divided by 2
module HelperFunctions from FSharp.Stats.Signal.Padding
val getMinimumSpacing: data: ('a * float)[] -> getDiff: ('a -> 'a -> float) -> float
<summary>minimum spacing of the data points</summary>
<remarks></remarks>
<param name="data"></param>
<param name="getDiff"></param>
<returns></returns>
<example><code></code></example>
val maxSpacing: float
val getDiffFu: (float -> float -> float)
module Float from FSharp.Stats.Signal.Padding.HelperFunctions
val getDiffFloat: a: float -> b: float -> float
<summary>getDiff: calculates the difference of the two events (-)</summary>
<remarks></remarks>
<param name="a"></param>
<param name="b"></param>
<returns></returns>
<example><code></code></example>
val addXValue: (float -> float -> float)
val addToXValueFloat: a: float -> toAdd: float -> float
<summary>addToXValue: adds toAdd to a (+)</summary>
<remarks></remarks>
<param name="a"></param>
<param name="toAdd"></param>
<returns></returns>
<example><code></code></example>
val borderpadding: int
val paddedData: (float * float)[]
val pad: data: ('a * float)[] -> minDistance: float -> maxDistance: float -> getDiff: ('a -> 'a -> float) -> addToXValue: ('a -> float -> 'a) -> borderpadding: int -> borderPaddingMethod: Padding.BorderPaddingMethod -> internalPaddingMethod: Padding.InternalPaddingMethod -> hugeGapPaddingMethod: Padding.HugeGapPaddingMethod -> ('a * float)[]
<summary>Adds additional data points to the beginning and end of data set (number: borderpadding; x_Value distance: minDistance; y_Value: random).<br />Between every pair of data point where the difference in x_Values is greater than minDistance, additional datapoints are generated as defined in internalPaddingMethod.<br />If huge data chunks are missing (missing gap &lt; maxDistance), data points are added as defined in hugeGapPaddingMethod.</summary>
<remarks>default: internalPaddingMethod=LinearInterpolation; hugeGapPaddingMethod=Random (like in border cases)</remarks>
<param name="data"></param>
<param name="minDistance"></param>
<param name="maxDistance"></param>
<param name="getDiff">get the difference in x_Values as float representation (if 'a is float then (-))</param>
<param name="addToXValue">function that adds a float to the x_Value (if 'a is float then (+))</param>
<param name="borderpadding"></param>
<param name="borderPaddingMethod"></param>
<param name="internalPaddingMethod"></param>
<param name="hugeGapPaddingMethod"></param>
<returns></returns>
<example><code></code></example>
val paddedDataChart: GenericChart.GenericChart
static member Chart.Line: xy: seq<#System.IConvertible * #System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?Fill: Fill * ?FillColor: Color * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Line: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?Fill: Fill * ?FillColor: Color * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Area: xy: seq<#System.IConvertible * #System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'c * ?MultiText: seq<'c> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?FillColor: Color * ?FillPatternShape: PatternShape * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'c :> System.IConvertible)
static member Chart.Area: x: seq<#System.IConvertible> * y: seq<#System.IConvertible> * ?ShowMarkers: bool * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?MultiOpacity: seq<float> * ?Text: 'a2 * ?MultiText: seq<'a2> * ?TextPosition: TextPosition * ?MultiTextPosition: seq<TextPosition> * ?MarkerColor: Color * ?MarkerColorScale: Colorscale * ?MarkerOutline: Line * ?MarkerSymbol: MarkerSymbol * ?MultiMarkerSymbol: seq<MarkerSymbol> * ?Marker: TraceObjects.Marker * ?LineColor: Color * ?LineColorScale: Colorscale * ?LineWidth: float * ?LineDash: DrawingStyle * ?Line: Line * ?AlignmentGroup: string * ?OffsetGroup: string * ?StackGroup: string * ?Orientation: Orientation * ?GroupNorm: GroupNorm * ?FillColor: Color * ?FillPatternShape: PatternShape * ?FillPattern: TraceObjects.Pattern * ?UseWebGL: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'a2 :> System.IConvertible)
static member Chart.withXAxisStyle: ?TitleText: string * ?TitleFont: Font * ?TitleStandoff: int * ?Title: Title * ?Color: Color * ?AxisType: AxisType * ?MinMax: (#System.IConvertible * #System.IConvertible) * ?Mirror: Mirror * ?ShowSpikes: bool * ?SpikeColor: Color * ?SpikeThickness: int * ?ShowLine: bool * ?LineColor: Color * ?ShowGrid: bool * ?GridColor: Color * ?GridDash: DrawingStyle * ?ZeroLine: bool * ?ZeroLineColor: Color * ?Anchor: LinearAxisId * ?Side: Side * ?Overlaying: LinearAxisId * ?Domain: (float * float) * ?Position: float * ?CategoryOrder: CategoryOrder * ?CategoryArray: seq<#System.IConvertible> * ?RangeSlider: RangeSlider * ?RangeSelector: RangeSelector * ?BackgroundColor: Color * ?ShowBackground: bool * ?Id: SubPlotId -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withYAxisStyle: ?TitleText: string * ?TitleFont: Font * ?TitleStandoff: int * ?Title: Title * ?Color: Color * ?AxisType: AxisType * ?MinMax: (#System.IConvertible * #System.IConvertible) * ?Mirror: Mirror * ?ShowSpikes: bool * ?SpikeColor: Color * ?SpikeThickness: int * ?ShowLine: bool * ?LineColor: Color * ?ShowGrid: bool * ?GridColor: Color * ?GridDash: DrawingStyle * ?ZeroLine: bool * ?ZeroLineColor: Color * ?Anchor: LinearAxisId * ?Side: Side * ?Overlaying: LinearAxisId * ?AutoShift: bool * ?Shift: int * ?Domain: (float * float) * ?Position: float * ?CategoryOrder: CategoryOrder * ?CategoryArray: seq<#System.IConvertible> * ?RangeSlider: RangeSlider * ?RangeSelector: RangeSelector * ?BackgroundColor: Color * ?ShowBackground: bool * ?Id: SubPlotId -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withSize: width: float * height: float -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withSize: ?Width: int * ?Height: int -> (GenericChart.GenericChart -> GenericChart.GenericChart)
val paddedDataLinear: (float * float)[]
union case Padding.HugeGapPaddingMethod.LinearInterpolation: Padding.HugeGapPaddingMethod
<summary> inserts points lying on the linear interpolation of the two adjacent knots </summary>
val paddedDataLinearChart: GenericChart.GenericChart
val rickerArray: Wavelet.Ricker[]
Array containing wavelets of all scales that should be investigated. The propagated frequency corresponds to 4 * Ricker.Scale
module Wavelet from FSharp.Stats.Signal
val createRicker: scale: float -> Wavelet.Ricker
<summary>creation function for Ricker</summary>
<remarks></remarks>
<param name="scale"></param>
<returns></returns>
<example><code></code></example>
val transformedData: (float * float)[][]
the data already was padded with 1000 additional datapoints in the beginning and end of the data set (see above).
Not it is transformed with the previous defined wavelets.
val wavelet: Wavelet.Ricker
module ContinuousWavelet from FSharp.Stats.Signal
<summary> Continuous wavelet transform on non discrete data </summary>
val transform: paddedData: ('a * float)[] -> getDiff: ('a -> 'a -> float) -> borderpadding: int -> wavelet: Wavelet.Ricker -> ('a * float)[]
<summary>calculates the continuous wavelet transform</summary>
<remarks></remarks>
<param name="paddedData">data to transform (x_Value,y_Value) []</param>
<param name="getDiff">get the difference in x_Values as float representation (if 'a is float then (-))</param>
<param name="borderpadding">define the number of points padded to the beginning and end of the data (has to be the same as used in padding)</param>
<param name="wavelet">used wavelet</param>
<returns></returns>
<example><code></code></example>
val combinedSignalChart: GenericChart.GenericChart
combining the raw and transformed data in one chart
val heatmap: GenericChart.GenericChart
val rowNames: string[]
val colNames: string[]
val mapi: mapping: (int -> 'T -> 'U) -> array: 'T[] -> 'U[]
<summary>Builds a new array whose elements are the results of applying the given function to each of the elements of the array. The integer index passed to the function indicates the index of element being transformed, starting at zero.</summary>
<param name="mapping">The function to transform elements and their indices.</param>
<param name="array">The input array.</param>
<returns>The array of transformed elements.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<example id="mapi-1"><code lang="fsharp"> let inputs = [| 10; 10; 10 |] inputs |&gt; Array.mapi (fun i x -&gt; i + x) </code> Evaluates to <c>[| 10; 11; 12 |]</c></example>
val i: int
Multiple items
val string: value: 'T -> string
<summary>Converts the argument to a string using <c>ToString</c>.</summary>
<remarks>For standard integer and floating point values the and any type that implements <c>IFormattable</c><c>ToString</c> conversion uses <c>CultureInfo.InvariantCulture</c>. </remarks>
<param name="value">The input value.</param>
<returns>The converted string.</returns>
<example id="string-example"><code lang="fsharp"></code></example>


--------------------
type string = System.String
<summary>An abbreviation for the CLI type <see cref="T:System.String" />.</summary>
<category>Basic Types</category>
val unzip: array: ('T1 * 'T2)[] -> 'T1[] * 'T2[]
<summary>Splits an array of pairs into two arrays.</summary>
<param name="array">The input array.</param>
<returns>The two arrays.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when the input array is null.</exception>
<example id="unzip-1"><code lang="fsharp"> let inputs = [| (1, "one"); (2, "two") |] let numbers, names = inputs |&gt; Array.unzip </code> Evaluates <c>numbers</c> to <c>[|1; 2|]</c> and <c>names</c> to <c>[|"one"; "two"|]</c>. </example>
module JaggedArray from FSharp.Stats
val map: mapping: ('T -> 'U) -> jArray: 'T[][] -> 'U[][]
<summary>Builds a new jagged array whose inner arrays are the results of applying the given function to each of their elements.</summary>
<remarks></remarks>
<param name="mapping"></param>
<param name="jArray"></param>
<returns></returns>
<example><code></code></example>
val snd: tuple: ('T1 * 'T2) -> 'T2
<summary>Return the second element of a tuple, <c>snd (a,b) = b</c>.</summary>
<param name="tuple">The input tuple.</param>
<returns>The second value.</returns>
<example id="snd-example"><code lang="fsharp"> snd ("first", 2) // Evaluates to 2 </code></example>
val x: float[][]
static member Chart.Heatmap: zData: seq<#seq<'b>> * colNames: seq<string> * rowNames: seq<string> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?XGap: int * ?YGap: int * ?Text: 'c * ?MultiText: seq<'c> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?ZSmooth: SmoothAlg * ?Transpose: bool * ?UseWebGL: bool * ?ReverseYAxis: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'b :> System.IConvertible and 'c :> System.IConvertible)
static member Chart.Heatmap: zData: seq<#seq<'b>> * ?X: seq<'c> * ?MultiX: seq<seq<'c>> * ?Y: seq<'d> * ?MultiY: seq<seq<'d>> * ?Name: string * ?ShowLegend: bool * ?Opacity: float * ?XGap: int * ?YGap: int * ?Text: 'e * ?MultiText: seq<'e> * ?ColorBar: ColorBar * ?ColorScale: Colorscale * ?ShowScale: bool * ?ReverseScale: bool * ?ZSmooth: SmoothAlg * ?Transpose: bool * ?UseWebGL: bool * ?ReverseYAxis: bool * ?UseDefaults: bool -> GenericChart.GenericChart (requires 'b :> System.IConvertible and 'c :> System.IConvertible and 'd :> System.IConvertible and 'e :> System.IConvertible)
static member Chart.withAxisAnchor: ?X: int * ?Y: int -> (GenericChart.GenericChart -> GenericChart.GenericChart)
argument X: int option
<summary> Sets the axis anchor ids for the chart's cartesian and/or carpet trace(s). If the traces are not of these types, nothing will be set and a warning message will be displayed. </summary>
<param name="X">The new x axis anchor id for the chart's cartesian and/or carpet trace(s)</param>
<param name="Y">The new x axis anchor id for the chart's cartesian and/or carpet trace(s)</param>
argument Y: int option
<summary> Sets the axis anchor ids for the chart's cartesian and/or carpet trace(s). If the traces are not of these types, nothing will be set and a warning message will be displayed. </summary>
<param name="X">The new x axis anchor id for the chart's cartesian and/or carpet trace(s)</param>
<param name="Y">The new x axis anchor id for the chart's cartesian and/or carpet trace(s)</param>
val rawChart: GenericChart.GenericChart
static member Color.fromHex: s: string -> Color
type Side = | Top | TopLeft | Bottom | Left | Right member Convert: unit -> obj override ToString: unit -> string static member convert: (Side -> obj) static member toString: (Side -> string)
union case Side.Bottom: Side
type SubPlotId = | XAxis of int | YAxis of int | ZAxis | ColorAxis of int | Geo of int | Mapbox of int | Polar of int | Ternary of int | Scene of int | Carpet of string ... member Convert: unit -> obj override ToString: unit -> string static member convert: (SubPlotId -> obj) static member toString: (SubPlotId -> string)
union case SubPlotId.XAxis: int -> SubPlotId
union case Side.Top: Side
type LinearAxisId = | Free | X of int | Y of int member Convert: unit -> obj override ToString: unit -> string static member convert: (LinearAxisId -> obj) static member toString: (LinearAxisId -> string)
union case LinearAxisId.X: int -> LinearAxisId
union case Side.Left: Side
union case SubPlotId.YAxis: int -> SubPlotId
union case Side.Right: Side
union case LinearAxisId.Y: int -> LinearAxisId
static member Chart.withLegend: showlegend: bool -> (GenericChart.GenericChart -> GenericChart.GenericChart)
static member Chart.withLegend: legend: Legend -> (GenericChart.GenericChart -> GenericChart.GenericChart)
val rickerArrayDefault: Wavelet.Ricker[]
val defaultTransform: (float * float)[][]
val transformDefault: rawData: (float * float)[] -> wavelet: Wavelet.Ricker -> (float * float)[]
<summary>minDistance is half the median spacing; maxDistance is 10 times the median spacing; internal padding=linear interpolation; hugeGap padding=random</summary>
<remarks></remarks>
<param name="rawData"></param>
<param name="wavelet"></param>
<returns></returns>
<example><code></code></example>
val defaultChart: GenericChart.GenericChart
val rawDataChart: GenericChart.GenericChart[]
val cwtCharts: GenericChart.GenericChart[]
val scale: (int -> float)
val x: (float * float)[]
val sprintf: format: Printf.StringFormat<'T> -> 'T
<summary>Print to a string using the given format.</summary>
<param name="format">The formatter.</param>
<returns>The formatted result.</returns>
<example>See <c>Printf.sprintf</c> (link: <see cref="M:Microsoft.FSharp.Core.PrintfModule.PrintFormatToStringThen``1" />) for examples.</example>
val append: array1: 'T[] -> array2: 'T[] -> 'T[]
<summary>Builds a new array that contains the elements of the first array followed by the elements of the second array.</summary>
<param name="array1">The first input array.</param>
<param name="array2">The second input array.</param>
<returns>The resulting array.</returns>
<exception cref="T:System.ArgumentNullException">Thrown when either of the input arrays is null.</exception>
<example id="append-1"><code lang="fsharp"> Array.append [| 1; 2 |] [| 3; 4 |] </code> Evaluates to <c>[| 1; 2; 3; 4 |]</c>. </example>
val defaultZeroTransform: (float * float)[][]
val transformDefaultZero: rawData: (float * float)[] -> wavelet: Wavelet.Ricker -> (float * float)[]
<summary>minDistance is half the overall minimum spacing; maxDistance is infinity; internal padding=zero; hugeGap padding=zero (but redundant)</summary>
<remarks></remarks>
<param name="rawData"></param>
<param name="wavelet"></param>
<returns></returns>
<example><code></code></example>
val defaultZeroChart: GenericChart.GenericChart
val data2D: float[,]
val rnd: System.Random
Multiple items
type Random = new: unit -> unit + 1 overload member Next: unit -> int + 2 overloads member NextBytes: buffer: byte[] -> unit + 1 overload member NextDouble: unit -> float member NextInt64: unit -> int64 + 2 overloads member NextSingle: unit -> float32 static member Shared: Random
<summary>Represents a pseudo-random number generator, which is an algorithm that produces a sequence of numbers that meet certain statistical requirements for randomness.</summary>

--------------------
System.Random() : System.Random
System.Random(Seed: int) : System.Random
module Array2D from Microsoft.FSharp.Collections
<summary>Contains operations for working with 2-dimensional arrays.</summary>
<remarks><para>See also <a href="https://docs.microsoft.com/dotnet/fsharp/language-reference/arrays">F# Language Guide - Arrays</a>.</para><para>F# and CLI multi-dimensional arrays are typically zero-based. However, CLI multi-dimensional arrays used in conjunction with external libraries (e.g. libraries associated with Visual Basic) be non-zero based, using a potentially different base for each dimension. The operations in this module will accept such arrays, and the basing on an input array will be propagated to a matching output array on the <c>Array2D.map</c> and <c>Array2D.mapi</c> operations. Non-zero-based arrays can also be created using <c>Array2D.zeroCreateBased</c>, <c>Array2D.createBased</c> and <c>Array2D.initBased</c>.</para></remarks>
val init: length1: int -> length2: int -> initializer: (int -> int -> 'T) -> 'T[,]
<summary>Creates an array given the dimensions and a generator function to compute the elements.</summary>
<param name="length1">The length of the first dimension of the array.</param>
<param name="length2">The length of the second dimension of the array.</param>
<param name="initializer">A function to produce elements of the array given the two indices.</param>
<returns>The generated array.</returns>
<exception cref="T:System.ArgumentException">Thrown when either of the lengths is negative.</exception>
<example id="init-1"><code lang="fsharp"> Array2D.init 2 3 (fun i j -&gt; i + j) </code> Evaluates to a 2x3 array with contents <c>[[0; 1; 2]; [1; 2; 3]]</c></example>
val j: int
System.Random.NextDouble() : float
val data2DChart: GenericChart.GenericChart
val ofArray2D: arr: 'T[,] -> 'T[][]
<summary>Converts a jagged array into an Array2D</summary>
<remarks></remarks>
<param name="arr"></param>
<returns></returns>
<example><code></code></example>
val data: float[][]
val padding: int
val paddedData2D: float[,]
module Discrete from FSharp.Stats.Signal.Padding
module ThreeDimensional from FSharp.Stats.Signal.Padding.Discrete
val pad: data: 'a[,] -> borderpadding: int -> paddingMethod: Padding.Discrete.ThreeDimensional.Padding3DMethod -> float[,] (requires member op_Explicit)
<summary> Pads artificial data points to the borders of the given two dimensional array. </summary>
<param name="data">A two dimensional array</param>
<param name="borderpadding">The number of points to add to each side</param>
<param name="paddingMethod">The padding method to use</param>
<returns>A two dimensional array, containing the data of the original array padded with artificial data points on each side.</returns>
<example><code> let data2D = let rnd = System.Random() Array2D.init 50 50 (fun i j -&gt; if (i,j) = (15,15) then 5. elif (i,j) = (35,35) then -5. else rnd.NextDouble()) let padding = 11 // padding the data points with 11 artificial random points on each side let paddedData2D = Padding.Discrete.ThreeDimensional.pad data2D padding Padding.Discrete.ThreeDimensional.Random </code></example>
union case Padding.Discrete.ThreeDimensional.Padding3DMethod.Random: Padding.Discrete.ThreeDimensional.Padding3DMethod
<summary> Adds random data points taken from the original data to the Array2D borders </summary>
val marrWavelet: Wavelet.Marr
val createMarr: radius: float -> Wavelet.Marr
<summary>creation function for Marr</summary>
<remarks></remarks>
<param name="radius"></param>
<returns></returns>
<example><code></code></example>
val transformedData2D: float[,]
module Discrete from FSharp.Stats.Signal.ContinuousWavelet
module ThreeDimensional from FSharp.Stats.Signal.ContinuousWavelet.Discrete
val transform: paddedData: 'a[,] -> borderpadding: int -> wavelet: Wavelet.Marr -> float[,] (requires member op_Explicit)
<summary>performs a continuous wavelet transform on discrete data. (paddingNumber = borderpadding)</summary>
<remarks></remarks>
<param name="paddedData"></param>
<param name="borderpadding"></param>
<param name="wavelet"></param>
<returns></returns>
<example><code></code></example>
val chartHeatmap: GenericChart.GenericChart
val combined2DChart: GenericChart.GenericChart
static member Chart.Grid: ?SubPlots: (LinearAxisId * LinearAxisId)[][] * ?XAxes: LinearAxisId[] * ?YAxes: LinearAxisId[] * ?RowOrder: LayoutGridRowOrder * ?Pattern: LayoutGridPattern * ?XGap: float * ?YGap: float * ?Domain: Domain * ?XSide: LayoutGridXSide * ?YSide: LayoutGridYSide -> (#seq<'a1> -> GenericChart.GenericChart) (requires 'a1 :> seq<GenericChart.GenericChart>)
static member Chart.Grid: nRows: int * nCols: int * ?SubPlots: (LinearAxisId * LinearAxisId)[][] * ?XAxes: LinearAxisId[] * ?YAxes: LinearAxisId[] * ?RowOrder: LayoutGridRowOrder * ?Pattern: LayoutGridPattern * ?XGap: float * ?YGap: float * ?Domain: Domain * ?XSide: LayoutGridXSide * ?YSide: LayoutGridYSide -> (#seq<GenericChart.GenericChart> -> GenericChart.GenericChart)
namespace System.Numerics
val fs: int
val tp: float
val l: int
val time: float[]
val init: count: int -> initializer: (int -> 'T) -> 'T[]
<summary>Creates an array given the dimension and a generator function to compute the elements.</summary>
<param name="count">The number of elements to initialize.</param>
<param name="initializer">The function to generate the initial values for each index.</param>
<returns>The created array.</returns>
<exception cref="T:System.ArgumentException">Thrown when count is negative.</exception>
<example id="init-1"><code lang="fsharp"> Array.init 4 (fun v -&gt; v + 5) </code> Evaluates to <c>[| 5; 6; 7; 8 |]</c></example>
<example id="init-2"><code lang="fsharp"> Array.init -5 (fun v -&gt; v + 5) </code> Throws <c>ArgumentException</c></example>
val x: int
val pi: float
type Math = static member Abs: value: decimal -> decimal + 7 overloads static member Acos: d: float -> float static member Acosh: d: float -> float static member Asin: d: float -> float static member Asinh: d: float -> float static member Atan: d: float -> float static member Atan2: y: float * x: float -> float static member Atanh: d: float -> float static member BigMul: a: int * b: int -> int64 + 2 overloads static member BitDecrement: x: float -> float ...
<summary>Provides constants and static methods for trigonometric, logarithmic, and other common mathematical functions.</summary>
field System.Math.PI: float = 3.14159265359
val signal: t: float -> float
val sin: value: 'T -> 'T (requires member Sin)
<summary>Sine of the given number</summary>
<param name="value">The input value.</param>
<returns>The sine of the input.</returns>
<example id="sin-example"><code lang="fsharp"></code></example>
val timeSignal: float[]
val fft: float[]
module FFT from FSharp.Stats.Signal
<summary> FFT analysis converts a signal from its original domain (often time or space) to a representation in the frequency domain and vice versa. </summary>
val inverseInPlace: a: Complex[] -> Complex[]
val v: float
Multiple items
[<Struct>] type Complex = new: real: float * imaginary: float -> unit member Equals: value: Complex -> bool + 1 overload member GetHashCode: unit -> int member ToString: unit -> string + 3 overloads static member ( * ) : left: float * right: Complex -> Complex + 2 overloads static member (+) : left: float * right: Complex -> Complex + 2 overloads static member (-) : left: float * right: Complex -> Complex + 2 overloads static member (/) : left: float * right: Complex -> Complex + 2 overloads static member (<>) : left: Complex * right: Complex -> bool static member (=) : left: Complex * right: Complex -> bool ...
<summary>Represents a complex number.</summary>

--------------------
Complex ()
Complex(real: float, imaginary: float) : Complex
val c: Complex
property Complex.Real: float with get
val fftChart: GenericChart.GenericChart
static member Chart.withTraceInfo: ?Name: string * ?Visible: Visible * ?ShowLegend: bool * ?LegendRank: int * ?LegendGroup: string * ?LegendGroupTitle: Title -> (GenericChart.GenericChart -> GenericChart.GenericChart)