Skip to content

Update to origin #3

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 82 commits into from
Jul 29, 2018
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
82 commits
Select commit Hold shift + click to select a range
1fc3069
fix namespace issue in CSharpGenerator and some refactoring (#339)
Ivanidzo4ka Jun 12, 2018
81d40a9
Using named-tuple in OneToOneTransforms' constructor to make API more…
zeahmed Jun 12, 2018
f6c6f5b
Minor formatting in CollectionDataSourceTests.cs (#348)
justinormont Jun 12, 2018
f2888be
Create CalibratedPredictor instead of SchemaBindableCalibratedPredict…
yaeldMS Jun 13, 2018
d91392f
Remove reference and dependency on System.ValueTuple (#351)
Ivanidzo4ka Jun 13, 2018
9cf7460
Add link to samples (#355)
danmoseley Jun 13, 2018
8435ce9
Use HideEnumValueAttribute for both manifest and C# API generation. (…
TomFinley Jun 18, 2018
84cb59e
Move the NuGet package build files into a TFM specific directory. (#370)
eerhardt Jun 18, 2018
fc7286c
`Stream` subclasses now have `Close` call `base.Close` to ensure disp…
TomFinley Jun 18, 2018
7f8caf7
Return distinct array of ParameterSet when ProposeSweep is called (#368)
ross-p-smith Jun 19, 2018
09f7c66
Update fast tree argument help text (#372)
jwood803 Jun 19, 2018
8b01fc5
Combine multiple tree ensemble models into a single tree ensemble (#364)
yaeldMS Jun 19, 2018
e5de547
add pipelineitem for Ova (#363)
Ivanidzo4ka Jun 20, 2018
ead943e
Fix CV macro to output the warnings data view properly. (#385)
yaeldMS Jun 20, 2018
496d3b9
Link to an example on using converting ML.NET model to ONNX. (#386)
codemzs Jun 21, 2018
ecc6857
Adding documentation about entry points, and entry points graphs: Ent…
sfilipi Jun 21, 2018
0d5e317
Adding LDA Transform (#377)
ganik Jun 26, 2018
93ecbb7
Revert to using the native code (#413)
TomFinley Jun 26, 2018
0a349f8
LightGBM (#392)
codemzs Jun 26, 2018
31ae678
Adding Factorization Machines (#383)
sfilipi Jun 26, 2018
17f944c
ONNX API documentation. (#419)
codemzs Jun 26, 2018
dbbc69e
Bring ensembles into codebase (#379)
Ivanidzo4ka Jun 27, 2018
f94203e
enable macOS tests for LightGBM. (#422)
codemzs Jun 27, 2018
211c043
Create a shorter temp file name for model loading. (#397)
yaeldMS Jun 27, 2018
6c4470f
removing extraneous character that broke the linux build, and with it…
sfilipi Jun 27, 2018
bca008b
EvaluatorUtils to handle label column of type key without text key va…
yaeldMS Jun 27, 2018
36b5bb1
Removing non source files from solution (#362)
Nepomuceno Jun 27, 2018
98aaeb5
Bump master to v0.4 (#427)
shauheen Jun 27, 2018
2501049
Build fix - removing the BOM from the CMakeLists.txt file (#430)
sfilipi Jun 27, 2018
fb8cf0b
Remove MML.DLL from Microsoft.ML nuget. (#439)
codemzs Jun 27, 2018
9e0a4ba
Fix bug #435. (#437)
yaeldMS Jun 27, 2018
dda8778
Adding xml style documentation for trainers (#393)
sfilipi Jun 29, 2018
62095cb
Added convenience constructor for set of transforms. (#405)
zeahmed Jul 2, 2018
2d427bd
Update documentation for LightGBM and add missing binary references t…
codemzs Jul 2, 2018
f3e8136
Light LDA doc (#464)
ganik Jul 2, 2018
7c536ae
Set culture to culture invariant in LightGBM (#454)
codemzs Jul 2, 2018
b604ac1
Add more documentation for ova (#447)
Ivanidzo4ka Jul 2, 2018
b9086b6
Xml docs for trainers and a minor infrastructure changes (#455)
sfilipi Jul 2, 2018
91d2747
small fixes in ensembles (#442)
Ivanidzo4ka Jul 2, 2018
769c9c5
Added tests for new API where components(Loaders/Transforms/Learners)…
zeahmed Jul 2, 2018
f7d89f9
Add release notes for ML.NET 0.3 (#476)
GalOshri Jul 2, 2018
12e6298
Fixed all typos in word `Transform`. (#463)
joshua-light Jul 3, 2018
53c2a15
Normalization API helpers (#446)
TomFinley Jul 3, 2018
f3d57a1
Fix a bug with group Id column in CV macro and add NameColumn argumen…
yaeldMS Jul 3, 2018
dec0d9e
Update readme for the release v0.3
shauheen Jul 3, 2018
5bbf7cf
Remove all spaces in the end of lines (#478)
Ivanidzo4ka Jul 3, 2018
17a3813
Reverted 'new' modifier to be first in statement. (#486)
zeahmed Jul 3, 2018
1c6f5c5
Removed `data` solution-folder from solution files. (#490)
joshua-light Jul 3, 2018
a17f095
Hide argument object in ensemble multivoting (#488)
Ivanidzo4ka Jul 3, 2018
4d574d6
Add clarity to documentation on ColumnConcatenator (#448)
dan-drews Jul 3, 2018
52cc874
Isolate ONNX implementations in separate DLL and NuGet (#462)
TomFinley Jul 5, 2018
f85e722
Role mapped improvements (#496)
TomFinley Jul 5, 2018
1679be3
Update Onnx Convert documentation, limited to ONNX-ML target platforms
CESARDELATORRE Jul 9, 2018
828dc22
Revert
CESARDELATORRE Jul 9, 2018
f7a5526
Fix failure to validate XML comments in test sources during builds (#…
sharwell Jul 9, 2018
fbc00db
Fix quotes on json (#516)
jwood803 Jul 10, 2018
268ebbc
[Part 2] Added convenience constructors for set of transforms. (#491)
zeahmed Jul 11, 2018
9d9d74e
Update error messages after another reset (#359)
jwood803 Jul 11, 2018
d3004e6
XML strings for the documentation should live outside of the src code…
sfilipi Jul 11, 2018
6503167
Update Onnx Convert documentation, limited to ONNX-ML target platform…
CESARDELATORRE Jul 12, 2018
54596ac
Fix iris.txt dataset and modify Iris Classification tests accordingly…
bojanmisic Jul 12, 2018
ceac01f
Fix TrainAndPredictIrisModelUsingDirectInstantiationTest (#527)
TomFinley Jul 13, 2018
669f4fa
Remove Extra Code Comments and unused InternalStreams project (#514)
dan-drews Jul 13, 2018
3053f3d
Fix column purpose for PipelineSweeperMacro (#461)
abgoswam Jul 13, 2018
c491651
[Part 3] Added convenience constructors for set of transforms. (#520)
zeahmed Jul 16, 2018
ef169b2
Issue 434: Fixed imprecise `cref`s in XML Docs (#485)
Jul 16, 2018
5e0a40e
ParquetLoader - Save Schema to context to support loading the model w…
tyclintw Jul 18, 2018
0e37508
Conversion of ITrainer.Train returns predictor, accepts +TrainContext…
TomFinley Jul 18, 2018
839bd6d
Adding documentation about the rest of the classes involved on genera…
sfilipi Jul 18, 2018
a307c6a
Allow CpuMath to reference C# Hardware Intrinsics APIs. (#542)
eerhardt Jul 19, 2018
8ce2a23
PipelineSweeperMacro for Multi-Class Classification (#539)
abgoswam Jul 19, 2018
8c11759
Ensure ONNX export is compatible with Windows RS5 (#550)
codemzs Jul 23, 2018
a862ccc
Move Windows and Linux CI to VSTS (#566)
safern Jul 23, 2018
e885b73
Fix Linux CI to actually run inside a docker container (#574)
safern Jul 23, 2018
015a15e
Don't fail in case of const field in Collection source and extended s…
Ivanidzo4ka Jul 23, 2018
8cfa2ed
Schema comprehension doc (#572)
Zruty0 Jul 24, 2018
5e08fa1
Initial code analyzer for Microsoft.ML, use limited StyleCop (#557)
TomFinley Jul 25, 2018
7fea0af
Sweep Range of L2RegularizerWeight in AveragedPerceptron (#579)
SolyarA Jul 25, 2018
0e0f702
Fixed the TextTransform bug where chargrams where being computed diff…
zeahmed Jul 26, 2018
0f94a3b
Pass fold index to cross validation metrics. (#575)
Ivanidzo4ka Jul 26, 2018
502e422
Fixes #591: typos, adding the type attribute to lists, and moving the…
sfilipi Jul 28, 2018
2107b82
Fix creation of dataviews inferred with .NET types with sparse vector…
xadupre Jul 28, 2018
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .vsts-dotnet-ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
phases:
- template: /build/ci/phase-template.yml
parameters:
name: Linux
buildScript: ./build.sh
dockerImage: microsoft/dotnet-buildtools-prereqs:centos-7-b46d863-20180719033416

- template: /build/ci/phase-template.yml
parameters:
name: Windows_NT
buildScript: build.cmd
queue:
name: Hosted VS2017
demands:
- agent.os -equals Windows_NT
2 changes: 2 additions & 0 deletions Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,15 @@
<PropertyGroup>
<RestoreSources>
https://api.nuget.org/v3/index.json;
https://dotnet.myget.org/F/dotnet-core/api/v3/index.json;
</RestoreSources>
</PropertyGroup>

<!-- Common repo directories -->
<PropertyGroup>
<RepoRoot>$(MSBuildThisFileDirectory)</RepoRoot>
<SourceDir>$(RepoRoot)src/</SourceDir>
<PkgDir>$(RepoRoot)pkg/</PkgDir>

<!-- Output directories -->
<BinDir Condition="'$(BinDir)'==''">$(RepoRoot)bin/</BinDir>
Expand Down
28 changes: 28 additions & 0 deletions Directory.Build.targets
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,33 @@
Text="The tools directory [$(ToolsDir)] does not exist. Please run build in the root of the repo to ensure the tools are installed before attempting to build an individual project." />
</Target>

<Target Name="CopyNativeAssemblies"
BeforeTargets="PrepareForRun">

<PropertyGroup>
<LibPrefix Condition="'$(OS)' != 'Windows_NT'">lib</LibPrefix>
<LibExtension Condition="'$(OS)' == 'Windows_NT'">.dll</LibExtension>
<LibExtension Condition="'$(OS)' != 'Windows_NT'">.so</LibExtension>
<LibExtension Condition="$([MSBuild]::IsOSPlatform('osx'))">.dylib</LibExtension>
</PropertyGroup>

<ItemGroup>
<NativeAssemblyReference>
<FullAssemblyPath>$(NativeOutputPath)$(LibPrefix)%(NativeAssemblyReference.Identity)$(LibExtension)</FullAssemblyPath>
</NativeAssemblyReference>
</ItemGroup>

<Copy SourceFiles = "@(NativeAssemblyReference->'%(FullAssemblyPath)')"
DestinationFolder="$(OutputPath)"
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
Retries="$(CopyRetryCount)"
RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
UseHardlinksIfPossible="$(CreateHardLinksForPublishFilesIfPossible)"
UseSymboliclinksIfPossible="$(CreateSymbolicLinksForPublishFilesIfPossible)">
<Output TaskParameter="DestinationFiles" ItemName="FileWrites"/>
</Copy>

</Target>

<Import Project="$(ToolsDir)/versioning.targets" Condition="Exists('$(ToolsDir)/versioning.targets')" />
</Project>
220 changes: 172 additions & 48 deletions Microsoft.ML.sln

Large diffs are not rendered by default.

9 changes: 6 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ Along with these ML capabilities this first release of ML.NET also brings the fi

ML.NET runs on Windows, Linux, and macOS - any platform where 64 bit [.NET Core](https://github.com/dotnet/core) or later is available.

The current release is 0.2. Check out the [release notes](docs/release-notes/0.2/release-0.2.md).
The current release is 0.3. Check out the [release notes](docs/release-notes/0.3/release-0.3.md).

First ensure you have installed [.NET Core 2.0](https://www.microsoft.com/net/learn/get-started) or later. ML.NET also works on the .NET Framework. Note that ML.NET currently must run in a 64 bit process.

Expand All @@ -44,9 +44,9 @@ To build ML.NET from source please visit our [developers guide](docs/project-doc

| | x64 Debug | x64 Release |
|:---|----------------:|------------------:|
|**Linux**|[![x64-debug](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/linux_debug/badge/icon)](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/linux_debug/lastCompletedBuild)|[![x64-release](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/linux_release/badge/icon)](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/linux_release/lastCompletedBuild)|
|**Linux**|[![x64-debug](https://dotnet.visualstudio.com/public/_apis/build/status/104?branch=master)](https://dotnet.visualstudio.com/DotNet-Public/_build/latest?definitionId=104&branch=master)|[![x64-release](https://dotnet.visualstudio.com/public/_apis/build/status/104?branch=master)](https://dotnet.visualstudio.com/DotNet-Public/_build/latest?definitionId=104&branch=master)|
|**macOS**|[![x64-debug](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/osx10.13_debug/badge/icon)](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/osx10.13_debug/lastCompletedBuild)|[![x64-release](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/osx10.13_release/badge/icon)](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/osx10.13_release/lastCompletedBuild)|
|**Windows**|[![x64-debug](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/windows_nt_debug/badge/icon)](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/windows_nt_debug/lastCompletedBuild)|[![x64-release](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/windows_nt_release/badge/icon)](https://ci2.dot.net/job/dotnet_machinelearning/job/master/job/windows_nt_release/lastCompletedBuild)|
|**Windows**|[![x64-debug](https://dotnet.visualstudio.com/public/_apis/build/status/104?branch=master)](https://dotnet.visualstudio.com/DotNet-Public/_build/latest?definitionId=104&branch=master)|[![x64-release](https://dotnet.visualstudio.com/public/_apis/build/status/104?branch=master)](https://dotnet.visualstudio.com/DotNet-Public/_build/latest?definitionId=104&branch=master)|

## Contributing

Expand Down Expand Up @@ -84,6 +84,9 @@ SentimentPrediction prediction = model.Predict(data);

Console.WriteLine("prediction: " + prediction.Sentiment);
```
## Samples

We have a [repo of samples](https://github.com/dotnet/machinelearning-samples) that you can look at.

## License

Expand Down
2 changes: 1 addition & 1 deletion build/BranchInfo.props
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<Project>
<PropertyGroup>
<MajorVersion>0</MajorVersion>
<MinorVersion>3</MinorVersion>
<MinorVersion>4</MinorVersion>
<PatchVersion>0</PatchVersion>
<PreReleaseLabel>preview</PreReleaseLabel>
</PropertyGroup>
Expand Down
2 changes: 1 addition & 1 deletion build/Dependencies.props
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
<SystemThreadingTasksDataflowPackageVersion>4.8.0</SystemThreadingTasksDataflowPackageVersion>
<SystemCodeDomPackageVersion>4.4.0</SystemCodeDomPackageVersion>
<SystemReflectionEmitLightweightPackageVersion>4.3.0</SystemReflectionEmitLightweightPackageVersion>
<SystemValueTupleVersion>4.4.0</SystemValueTupleVersion>
<PublishSymbolsPackageVersion>1.0.0-beta-62824-02</PublishSymbolsPackageVersion>
<LightGBMPackageVersion>2.1.2.2</LightGBMPackageVersion>
</PropertyGroup>
</Project>
37 changes: 37 additions & 0 deletions build/ci/phase-template.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
parameters:
name: ''
buildScript: ''
dockerImage: ''
queue: {}

phases:
- phase: ${{ parameters.name }}
variables:
_buildScript: ${{ parameters.buildScript }}
_phaseName: ${{ parameters.name }}
# if dockerImage is not equal to '' then run under docker container
${{ if ne(parameters.dockerImage, '') }}:
_PREVIEW_VSTS_DOCKER_IMAGE: ${{ parameters.dockerImage }}
queue:
parallel: 2
matrix:
Build_Debug:
_configuration: Debug
Build_Release:
_configuration: Release
${{ insert }}: ${{ parameters.queue }}
steps:
- script: $(_buildScript) -$(_configuration) -runtests
displayName: Build and Test
- task: PublishTestResults@2
displayName: Publish Test Results
condition: succeededOrFailed()
inputs:
testRunner: 'vSTest'
searchFolder: '$(System.DefaultWorkingDirectory)/bin'
testResultsFiles: '**/*.trx'
testRunTitle: Machinelearning_Tests_$(_phaseName)_$(_configuration)_$(Build.BuildNumber)
configuration: $(_configuration)
mergeTestResults: true
- script: $(_buildScript) -buildPackages
displayName: Build Packages
4 changes: 3 additions & 1 deletion docs/building/unix-instructions.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,9 +42,11 @@ macOS 10.12 or higher is needed to build dotnet/machinelearning.

On macOS a few components are needed which are not provided by a default developer setup:
* cmake 3.10.3
* gcc
* All the requirements necessary to run .NET Core 2.0 applications. To view macOS prerequisites click [here](https://docs.microsoft.com/en-us/dotnet/core/macos-prerequisites?tabs=netcore2x).

One way of obtaining CMake is via [Homebrew](http://brew.sh):
One way of obtaining CMake and gcc is via [Homebrew](http://brew.sh):
```sh
$ brew install cmake
$ brew install gcc
```
231 changes: 231 additions & 0 deletions docs/code/EntryPoints.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,231 @@
# Entry Points And Helper Classes

## Overview

Entry points are a way to interface with ML.NET components, by specifying an execution graph of connected inputs and outputs of those components.
Both the manifest describing available components and their inputs/outputs, and an "experiment" graph description, are expressed in JSON.
The recommended way of interacting with ML.NET through other, non-.NET programming languages, is by composing, and exchanging pipelines or experiment graphs.

Through the documentation, we also refer to entry points as 'entry points nodes', and that is because they are the nodes of the graph representing the experiment.
The graph 'variables', the various values of the experiment graph JSON properties, serve to describe the relationship between the entry point nodes.
The 'variables' are therefore the edges of the DAG (Directed Acyclic Graph).

All of ML.NET entry points are described by their manifest. The manifest is another JSON object that documents and describes the structure of an entry points.
Manifests are referenced to understand what an entry point does, and how it should be constructed, in a graph.

This document briefly describes the structure of the entry points, the structure of an entry point manifest, and mentions the ML.NET classes that help construct an entry point graph.

## EntryPoint manifest - the definition of an entry point

The components manifest is build by scanning the ML.NET assemblies through reflection and searching for types having the: `SignatureEntryPointModule` signature in their `LoadableClass` assembly attribute definition.
An example of an entry point manifest object, specifically for the `ColumnTypeConverter` transform, is:

```javascript
{
"Name": "Transforms.ColumnTypeConverter",
"Desc": "Converts a column to a different type, using standard conversions.",
"FriendlyName": "Convert Transform",
"ShortName": "Convert",
"Inputs": [
{ "Name": "Column",
"Type": {
"Kind": "Array",
"ItemType": {
"Kind": "Struct",
"Fields": [
{
"Name": "ResultType",
"Type": {
"Kind": "Enum",
"Values": [ "I1","I2","U2","I4","U4","I8","U8","R4","Num","R8","TX","Text","TXT","BL","Bool","TimeSpan","TS","DT","DateTime","DZ","DateTimeZone","UG","U16" ]
},
"Desc": "The result type",
"Aliases": [ "type" ],
"Required": false,
"SortOrder": 150,
"IsNullable": true,
"Default": null
},
{ "Name": "Range",
"Type": "String",
"Desc": "For a key column, this defines the range of values",
"Aliases": [ "key" ],
"Required": false,
"SortOrder": 150,
"IsNullable": false,
"Default": null
},
{ "Name": "Name",
"Type": "String",
"Desc": "Name of the new column",
"Aliases": [ "name" ],
"Required": false,
"SortOrder": 150,
"IsNullable": false,
"Default": null
},
{ "Name": "Source",
"Type": "String",
"Desc": "Name of the source column",
"Aliases": [ "src" ],
"Required": false,
"SortOrder": 150,
"IsNullable": false,
"Default": null
}
]
}
},
"Desc": "New column definition(s) (optional form: name:type:src)",
"Aliases": [ "col" ],
"Required": true,
"SortOrder": 1,
"IsNullable": false
},
{ "Name": "Data",
"Type": "DataView",
"Desc": "Input dataset",
"Required": true,
"SortOrder": 2,
"IsNullable": false
},
{ "Name": "ResultType",
"Type": {
"Kind": "Enum",
"Values": [ "I1","I2","U2","I4","U4","I8","U8","R4","Num","R8","TX","Text","TXT","BL","Bool","TimeSpan","TS","DT","DateTime","DZ","DateTimeZone","UG","U16" ]
},
"Desc": "The result type",
"Aliases": [ "type" ],
"Required": false,
"SortOrder": 2,
"IsNullable": true,
"Default": null
},
{ "Name": "Range",
"Type": "String",
"Desc": "For a key column, this defines the range of values",
"Aliases": [ "key" ],
"Required": false,
"SortOrder": 150,
"IsNullable": false,
"Default": null
}
],
"Outputs": [
{
"Name": "OutputData",
"Type": "DataView",
"Desc": "Transformed dataset"
},
{
"Name": "Model",
"Type": "TransformModel",
"Desc": "Transform model"
}
],
"InputKind": ["ITransformInput" ],
"OutputKind": [ "ITransformOutput" ]
}
```

The respective entry point, constructed based on this manifest would be:

```javascript
{
"Name": "Transforms.ColumnTypeConverter",
"Inputs": {
"Column": [{
"Name": "Features",
"Source": "Features"
}],
"Data": "$data0",
"ResultType": "R4"
},
"Outputs": {
"OutputData": "$Convert_Output",
"Model": "$Convert_TransformModel"
}
}
```

## `EntryPointGraph`

This class encapsulates the list of nodes (`EntryPointNode`) and edges
(`EntryPointVariable` inside a `RunContext`) of the graph.

## `EntryPointNode`

This class represents a node in the graph, and wraps an entry point call. It
has methods for creating and running entry points. It also has a reference to
the `RunContext` to allow it to get and set values from `EntryPointVariable`s.

To express the inputs that are set through variables, a set of dictionaries
are used. The `InputBindingMap` maps an input parameter name to a list of
`ParameterBinding`s. The `InputMap` maps a `ParameterBinding` to a
`VariableBinding`. For example, if the JSON looks like this:

```javascript
'foo': '$bar'
```

the `InputBindingMap` will have one entry that maps the string "foo" to a list
that has only one element, a `SimpleParameterBinding` with the name "foo" and
the `InputMap` will map the `SimpleParameterBinding` to a
`SimpleVariableBinding` with the name "bar". For a more complicated example,
let's say we have this JSON:

```javascript
'foo': [ '$bar[3]', '$baz']
```

the `InputBindingMap` will have one entry that maps the string "foo" to a list
that has two elements, an `ArrayIndexParameterBinding` with the name "foo" and
index 0 and another one with index 1. The `InputMap` will map the first
`ArrayIndexParameterBinding` to an `ArrayIndexVariableBinding` with name "bar"
and index 3 and the second `ArrayIndexParameterBinding` to a
`SimpleVariableBinding` with the name "baz".

For outputs, a node assumes that an output is mapped to a variable, so the
`OutputMap` is a simple dictionary from string to string.

## `EntryPointVariable`

This class represents an edge in the entry point graph. It has a name, a type
and a value. Variables can be simple, arrays and/or dictionaries. Currently,
only data views, file handles, predictor models and transform models are
allowed as element types for a variable.

## `RunContext`

This class is just a container for all the variables in a graph.

## `VariableBinding` and Derived Classes

The abstract base class represents a "pointer to a (part of a) variable". It
is used in conjunction with `ParameterBinding`s to specify inputs to an entry
point node. The `SimpleVariableBinding` is a pointer to an entire variable,
the `ArrayIndexVariableBinding` is a pointer to a specific index in an array
variable, and the `DictionaryKeyVariableBinding` is a pointer to a specific
key in a dictionary variable.

## `ParameterBinding` and Derived Classes

The abstract base class represents a "pointer to a (part of a) parameter". It
parallels the `VariableBinding` hierarchy and it is used to specify the inputs
to an entry point node. The `SimpleParameterBinding` is a pointer to a
non-array, non-dictionary parameter, the `ArrayIndexParameterBinding` is a
pointer to a specific index of an array parameter and the
`DictionaryKeyParameterBinding` is a pointer to a specific key of a dictionary
parameter.

## How to create an entry point for an existing ML.NET component

The steps to take, to create an entry point for an existing ML.NET component, are:
1. Add the `SignatureEntryPointModule` signature to the `LoadableClass` assembly attribute.
2. Create a public static method, that:
a. Takes as input, among others, an object representing the arguments of the component you want to expose.
b. Initializes and run the components, returning one of the nested classes of `Microsoft.ML.Runtime.EntryPoints.CommonOutputs`
c. Is annotated with the `TlcModule.EntryPoint` attribute

Based on the type of entry point being created, there are further conventions on the name of the method, for example, the Trainers entry points are typically called: 'TrainMultiClass', 'TrainBinary' etc, based on the task.
Look at [OnlineGradientDescent](../../src/Microsoft.ML.StandardLearners/Standard/Online/OnlineGradientDescent.cs) for an example of a component and its entry point.
Loading