From 4a78f8941669129869096b5a7ff5924503e9ea05 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Mon, 21 Jan 2019 11:11:51 +0100 Subject: [PATCH 01/74] Init BioFSharp.BioTools --- .paket/Paket.Restore.targets | 10 +- BioFSharp.sln | 8 + paket.dependencies | 2 +- paket.lock | 909 +++++++++++++----- paket.references | 3 +- src/BioFSharp.BioTools/AssemblyInfo.fs | 19 + .../BioFSharp.BioTools.fsproj | 24 + src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 103 ++ src/BioFSharp.BioTools/Docker.fs | 6 + 9 files changed, 841 insertions(+), 243 deletions(-) create mode 100644 src/BioFSharp.BioTools/AssemblyInfo.fs create mode 100644 src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj create mode 100644 src/BioFSharp.BioTools/BioFSharp.BioTools.fsx create mode 100644 src/BioFSharp.BioTools/Docker.fs diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets index b4f593eb..52f41c60 100644 --- a/.paket/Paket.Restore.targets +++ b/.paket/Paket.Restore.targets @@ -62,6 +62,9 @@ true true + + + True @@ -102,7 +105,11 @@ true - + + true @@ -183,6 +190,7 @@ runtime runtime true + true diff --git a/BioFSharp.sln b/BioFSharp.sln index 4826aaab..19daf818 100644 --- a/BioFSharp.sln +++ b/BioFSharp.sln @@ -94,6 +94,8 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "BioFSharp.Vis", "src\BioFSh EndProject Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "BioFSharp.ImgP", "src\BioFSharp.ImgP\BioFSharp.ImgP.fsproj", "{1EB6FB44-6B1E-4939-BF49-267D163959FF}" EndProject +Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "BioFSharp.BioTools", "src\BioFSharp.BioTools\BioFSharp.BioTools.fsproj", "{9E8A5AED-DD3C-4250-A9B2-164B08238F8E}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -148,6 +150,12 @@ Global {1EB6FB44-6B1E-4939-BF49-267D163959FF}.Mono|Any CPU.Build.0 = Mono|Any CPU {1EB6FB44-6B1E-4939-BF49-267D163959FF}.Release|Any CPU.ActiveCfg = Release|Any CPU {1EB6FB44-6B1E-4939-BF49-267D163959FF}.Release|Any CPU.Build.0 = Release|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Mono|Any CPU.ActiveCfg = Debug|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Mono|Any CPU.Build.0 = Debug|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/paket.dependencies b/paket.dependencies index 8874ee40..b51c5e72 100644 --- a/paket.dependencies +++ b/paket.dependencies @@ -1,4 +1,3 @@ - framework: auto-detect source https://nuget.org/api/v2 @@ -27,6 +26,7 @@ nuget FSharp.Stats.MSF clitool dotnet-fake +nuget docker.dotnet group BioDB framework:net45 diff --git a/paket.lock b/paket.lock index 70afd277..a31b0be9 100644 --- a/paket.lock +++ b/paket.lock @@ -1,270 +1,699 @@ -RESTRICTION: || (== net45) (== net47) (== netstandard2.0) +RESTRICTION: || (== net45) (== net47) (== netcoreapp2.1) (== netstandard2.0) NUGET remote: https://www.nuget.org/api/v2 Alea (3.0.4) - Argu (5.1) - FSharp.Core (>= 4.0.0.1) - restriction: || (== net45) (== net47) (&& (== netstandard2.0) (>= net45)) - FSharp.Core (>= 4.3.2) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) - System.Configuration.ConfigurationManager (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) - BenchmarkDotNet (0.11.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - CommandLineParser (>= 2.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.CodeAnalysis.CSharp (>= 2.9) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.DotNet.PlatformAbstractions (>= 2.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.Win32.Registry (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Management (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Threading.Tasks.Extensions (>= 4.5.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.ValueTuple (>= 4.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Xml.XmlSerializer (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - CommandLineParser (2.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.0.11-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Console (>= 4.0.0-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.0.11-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Globalization (>= 4.0.11-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.IO (>= 4.1.0-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Linq (>= 4.1.0-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Linq.Expressions (>= 4.0.11-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Reflection (>= 4.1.0-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Reflection.Extensions (>= 4.0.1-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Reflection.TypeExtensions (>= 4.1.0-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.0.1-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Runtime (>= 4.1.0-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Runtime.Extensions (>= 4.1.0-rc2-24027) - restriction: || (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - dotnet-fake (5.10.1) - clitool: true - Expecto (8.6) - Argu (>= 5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Mono.Cecil (>= 0.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netstandard2.0) - Expecto.BenchmarkDotNet (8.6) - BenchmarkDotNet (>= 0.10.14) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Expecto.FsCheck (8.6) - Expecto (>= 8.6) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - FsCheck (>= 2.10.4) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Expecto.VisualStudio.TestAdapter (10.0.0) - version_in_path: true - Expecto (>= 8.0 < 9.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) - FSharp.Core (>= 4.0 < 5.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) - Microsoft.TestPlatform.ObjectModel (>= 15.0 < 16.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) - Mono.Cecil (>= 0.10 < 0.11) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) - Newtonsoft.Json (>= 10.0 < 11.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) - FsCheck (2.13) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - FSharp.Core (>= 4.2.3) - restriction: || (&& (== net45) (>= net452)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netstandard2.0) + Argu (5.2) + FSharp.Core (>= 4.0.0.1) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= net45)) (&& (== netstandard2.0) (>= net45)) + FSharp.Core (>= 4.3.2) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Configuration.ConfigurationManager (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + BenchmarkDotNet (0.11.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + CommandLineParser (>= 2.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.CodeAnalysis.CSharp (>= 2.9) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.DotNet.PlatformAbstractions (>= 2.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.Win32.Registry (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Management (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks.Extensions (>= 4.5.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.ValueTuple (>= 4.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XmlSerializer (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Chessie (0.6) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.0.1.7-alpha) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + NETStandard.Library (>= 1.6) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + CommandLineParser (2.4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Docker.DotNet (3.125.2) + Newtonsoft.Json (>= 9.0.1) + System.Buffers (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (== net47) (&& (== netcoreapp2.1) (>= net46)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netstandard2.0) (>= net46)) + System.Buffers (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (== net47) (&& (== netcoreapp2.1) (>= net46)) (&& (== netstandard2.0) (>= net46)) + System.ValueTuple (>= 4.4) + dotnet-fake (5.12) - clitool: true + Fake.Core.CommandLineParsing (>= 5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Fake.Runtime (>= 5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.5.4) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.App (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Mono.Cecil (>= 0.10.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Paket.Core (>= 5.193) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Expecto (8.7) + Argu (>= 5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Mono.Cecil (>= 0.10.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Expecto.BenchmarkDotNet (8.7) + BenchmarkDotNet (>= 0.10.14) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Expecto.FsCheck (8.7) + Expecto (>= 8.7) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + FsCheck (>= 2.13) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Expecto.VisualStudio.TestAdapter (10.0.1) - version_in_path: true + Expecto (>= 8.0 < 9.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) + FSharp.Core (>= 4.0 < 5.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) + Microsoft.TestPlatform.ObjectModel (>= 15.0 < 16.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) + Mono.Cecil (>= 0.10 < 0.11) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) + Newtonsoft.Json (>= 10.0 < 11.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) + Fake.Core.CommandLineParsing (5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FParsec (>= 1.0.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Fake.Core.Context (5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Fake.Runtime (5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Fake.Core.Context (>= 5.12) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + FSharp.Compiler.Service (>= 25.0.1) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.DotNet.PlatformAbstractions (>= 2.1) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Mono.Cecil (>= 0.10.1) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Paket.Core (>= 5.193) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Loader (>= 4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + FParsec (1.0.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.2.3) - restriction: || (&& (== net45) (< net40) (>= netstandard1.6)) (&& (== net47) (< net40) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net45) (< net40) (>= netstandard1.6)) (&& (== net47) (< net40) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + FsCheck (2.13) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + FSharp.Core (>= 4.2.3) - restriction: || (&& (== net45) (>= net452)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + FSharp.Compiler.Service (25.0.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.1.18) + System.Collections.Immutable (>= 1.5) + System.Diagnostics.Process (>= 4.1) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.TraceSource (>= 4.0) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Metadata (>= 1.6) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Loader (>= 4.0) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) FSharp.Core (4.5.4) FSharp.Data.TypeProviders (5.0.0.6) FSharp.Core (>= 3.1.2.5) FSharp.Plotly (1.1.21) - Microsoft.CodeAnalysis.Analyzers (2.6.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.CodeAnalysis.Common (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.CodeAnalysis.Analyzers (>= 2.6.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.AppContext (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Console (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Diagnostics.StackTrace (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Dynamic.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.IO.Compression (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Linq.Expressions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Runtime.Numerics (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Text.Encoding.CodePages (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Threading.Tasks.Parallel (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Threading.Thread (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.ValueTuple (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Xml.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Xml.XPath.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - Microsoft.CodeAnalysis.CSharp (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.CodeAnalysis.Analyzers (2.6.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.CodeAnalysis.Common (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.CodeAnalysis.Analyzers (>= 2.6.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.AppContext (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Console (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.StackTrace (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Dynamic.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.IO.Compression (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Linq.Expressions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Numerics (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding.CodePages (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks.Parallel (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Thread (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.ValueTuple (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XPath.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.CodeAnalysis.CSharp (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) Microsoft.CodeAnalysis.Common (2.10) - Microsoft.DotNet.PlatformAbstractions (2.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.DotNet.PlatformAbstractions (2.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.AppContext (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.0.11) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem (>= 4.0.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.TypeExtensions (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - Microsoft.NETCore.Platforms (2.1.2) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netstandard2.0) - Microsoft.NETCore.Targets (2.1) - restriction: || (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.TestPlatform.ObjectModel (15.9.0) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) - System.Reflection.Metadata (>= 1.3) - restriction: || (&& (== net45) (>= net451)) (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) - System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net451)) (== net47) (&& (== netstandard2.0) (>= net451)) - Microsoft.Win32.Registry (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netstandard2.0) - System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netstandard2.0) + Microsoft.NETCore.App (2.2.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (2.2) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (2.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.TestPlatform.ObjectModel (15.9.0) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) + System.Reflection.Metadata (>= 1.3) - restriction: || (&& (== net45) (>= net451)) (&& (== net45) (>= netstandard1.5)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net451)) (== net47) (&& (== netcoreapp2.1) (>= net451)) (&& (== netstandard2.0) (>= net451)) + Microsoft.Win32.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.Win32.Registry (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netcoreapp2.1) (== netstandard2.0) Microsoft.Xaml (4.0.0.1) - Mono.Cecil (0.10.1) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Mono.Cecil (0.10.1) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + NETStandard.Library (2.0.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) Newtonsoft.Json (10.0.3) - version_in_path: true + Paket.Core (5.195.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Chessie (>= 0.6) + Mono.Cecil (>= 0.10.0-beta6) + Newtonsoft.Json (>= 10.0.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Net.Http.WinHttpHandler (>= 4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.ProtectedData (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.native.System (4.3.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + runtime.native.System.IO.Compression (4.3.2) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + runtime.native.System.Net.Http (4.3.1) - restriction: || (&& (== net45) (== net47) (>= netstandard1.6)) (&& (== net45) (>= net461) (>= netstandard1.6)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1.1) + Microsoft.NETCore.Targets (>= 1.1.3) + runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) + runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) + runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) SwaggerProvider (0.8.2) FSharp.Core (>= 4.0) Newtonsoft.Json (>= 10.0) - System.AppContext (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Buffers (4.5) - restriction: || (&& (== net47) (>= monoandroid) (>= netstandard2.0)) (&& (== net47) (>= monotouch) (>= netstandard2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (< netstandard1.1) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (>= wpa81)) (&& (== net47) (>= netstandard2.0) (>= xamarinmac)) (&& (== net47) (>= netstandard2.0) (>= xamarintvos)) (&& (== net47) (>= netstandard2.0) (>= xamarinwatchos)) (&& (== net47) (>= xamarinios)) (== netstandard2.0) - System.Collections (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections.Concurrent (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections.Immutable (1.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Configuration.ConfigurationManager (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) - System.Security.Cryptography.ProtectedData (>= 4.5) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netstandard2.0) - System.Security.Permissions (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netstandard2.0) - System.Console (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Diagnostics.Debug (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Diagnostics.FileVersionInfo (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) - System.IO.FileSystem (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) - System.Reflection.Metadata (>= 1.4.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.Diagnostics.StackTrace (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Diagnostics.Tools (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Dynamic.Runtime (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Globalization (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.IO (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= net463)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.IO.Compression (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.IO.FileSystem (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.Linq (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Linq.Expressions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Management (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Memory (4.5.1) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) - System.Buffers (>= 4.4) - System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net45) (>= net461)) (== net47) (== netstandard2.0) - System.Runtime.CompilerServices.Unsafe (>= 4.5) - System.Numerics.Vectors (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) - System.Reflection (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Reflection.Emit.Lightweight (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Reflection.Extensions (4.3) - restriction: || (&& (== net45) (>= net461) (>= netstandard1.5)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Reflection.Metadata (1.6) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Collections.Immutable (>= 1.5) - System.Reflection.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Reflection.TypeExtensions (4.5.1) - restriction: || (&& (== net45) (>= net461) (>= netstandard1.5)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Resources.ResourceManager (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netstandard2.0) - System.Runtime.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime.Handles (4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) - System.Runtime.InteropServices (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= net462)) (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (== net47) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) - System.Runtime.InteropServices.RuntimeInformation (4.3.0) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) - System.Runtime.Numerics (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.AccessControl (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netstandard2.0) - System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Security.Cryptography.Algorithms (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.AppContext (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Buffers (4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= net461) (< portable-net45+win8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.CodeDom (4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections.Concurrent (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections.Immutable (1.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Configuration.ConfigurationManager (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.ProtectedData (>= 4.5) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Permissions (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Console (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1.2) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.FileVersionInfo (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Metadata (>= 1.4.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Process (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.Win32.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.Win32.Registry (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Thread (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.ThreadPool (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.StackTrace (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Metadata (>= 1.4.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Tools (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.TraceSource (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Tracing (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Dynamic.Runtime (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq.Expressions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.ObjectModel (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization.Calendars (4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wp8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.Compression (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System.IO.Compression (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Buffers (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq.Expressions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.ObjectModel (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Management (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.Win32.Registry (>= 4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.CodeDom (>= 4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Memory (4.5.2) - restriction: || (&& (== net47) (== netcoreapp2.1)) (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.Buffers (>= 4.4) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= monotouch)) (&& (== netcoreapp2.1) (>= net461)) (&& (== netcoreapp2.1) (< netcoreapp2.0)) (&& (== netcoreapp2.1) (< netstandard1.1)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netcoreapp2.1) (>= xamarinios)) (&& (== netcoreapp2.1) (>= xamarinmac)) (&& (== netcoreapp2.1) (>= xamarintvos)) (&& (== netcoreapp2.1) (>= xamarinwatchos)) (== netstandard2.0) + System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netcoreapp2.1) (< netcoreapp2.0)) (== netstandard2.0) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= monotouch)) (&& (== netcoreapp2.1) (>= net461)) (&& (== netcoreapp2.1) (< netcoreapp2.0)) (&& (== netcoreapp2.1) (< netstandard1.1)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netcoreapp2.1) (>= uap10.1)) (&& (== netcoreapp2.1) (>= xamarinios)) (&& (== netcoreapp2.1) (>= xamarinmac)) (&& (== netcoreapp2.1) (>= xamarintvos)) (&& (== netcoreapp2.1) (>= xamarinwatchos)) (== netstandard2.0) + System.Net.Http.WinHttpHandler (4.5.2) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Numerics.Vectors (4.5) - restriction: || (&& (== net47) (== netcoreapp2.1)) (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.ObjectModel (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wp8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.IO (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.Lightweight (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Extensions (4.3) - restriction: || (&& (== net45) (>= net461) (< netstandard1.1)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Metadata (1.6) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Collections.Immutable (>= 1.5) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= net45)) (&& (== netcoreapp2.1) (< netstandard1.1)) (&& (== netcoreapp2.1) (< netstandard2.0)) (== netstandard2.0) + System.Reflection.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.TypeExtensions (4.5.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Resources.ResourceManager (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= net462)) (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices.RuntimeInformation (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + runtime.native.System (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Loader (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.5)) (&& (== net47) (< net462)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.5)) (&& (== net47) (< net462)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.5)) (&& (== net47) (< net462)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Numerics (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.AccessControl (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Algorithms (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) System.IO (>= 4.3) + System.Resources.ResourceManager (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) System.Runtime (>= 4.3) + System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Numerics (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) System.Security.Cryptography.Encoding (>= 4.3) System.Security.Cryptography.Primitives (>= 4.3) - System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= net463)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= net463)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.Cryptography.ProtectedData (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Cng (4.5) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.Cryptography.Csp (4.3) - restriction: || (&& (== net45) (== net47) (>= netstandard1.6)) (&& (== net45) (>= net461) (>= netstandard1.6)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.OpenSsl (4.5) - restriction: || (&& (== net45) (== net47) (>= netstandard1.6)) (&& (== net45) (>= net461) (>= netstandard1.6)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.ProtectedData (4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (== netstandard2.0) System.Memory (>= 4.5) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (== netstandard2.0) - System.Security.Cryptography.X509Certificates (4.3.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.Cryptography.X509Certificates (4.3.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System.Net.Http (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization.Calendars (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Numerics (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) System.Security.Cryptography.Algorithms (>= 4.3) + System.Security.Cryptography.Cng (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Csp (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) System.Security.Cryptography.Encoding (>= 4.3) - System.Security.Permissions (4.5) - restriction: || (&& (== net47) (>= monoandroid) (>= netstandard2.0)) (&& (== net47) (>= monotouch) (>= netstandard2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (>= xamarinmac)) (&& (== net47) (>= netstandard2.0) (>= xamarintvos)) (&& (== net47) (>= netstandard2.0) (>= xamarinwatchos)) (== netstandard2.0) - System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Security.Principal.Windows (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Text.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Text.Encoding.CodePages (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime.CompilerServices.Unsafe (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) - System.Text.Encoding.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Threading (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Threading.Tasks (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) - System.Threading.Tasks.Extensions (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime.CompilerServices.Unsafe (>= 4.5) - System.Threading.Tasks.Parallel (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Threading.Thread (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.ValueTuple (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.XmlSerializer (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.XPath (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.XPath.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Xml.XPath.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) - YamlDotNet (5.2.1) + System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Permissions (4.5) - restriction: || (&& (== net47) (>= monoandroid) (>= netstandard2.0)) (&& (== net47) (>= monotouch) (>= netstandard2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (>= xamarinmac)) (&& (== net47) (>= netstandard2.0) (>= xamarintvos)) (&& (== net47) (>= netstandard2.0) (>= xamarinwatchos)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Principal.Windows (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Text.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding.CodePages (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 2.1.2) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.RegularExpressions (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wp8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks.Extensions (4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= net45)) (&& (== netcoreapp2.1) (< netstandard1.0)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netcoreapp2.1) (>= wp8)) (== netstandard2.0) + System.Threading.Tasks.Parallel (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Thread (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.ThreadPool (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.ValueTuple (4.5) + System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XmlSerializer (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XPath (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XPath.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XPath.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + YamlDotNet (5.3) remote: paket-files/github.com/CSBiology/FSharp.Stats - FSharp.Stats (0.0.1) - FSharp.Stats.MSF (0.0.1) + FSharp.Stats (0.0.13) + FSharp.Stats.MSF (0.0.13) remote: paket-files/github.com/CSBiology/FSharpAux - FSharpAux (0.0.12) - FSharpAux.IO (0.0.12) + FSharpAux (0.0.13) + FSharpAux.IO (0.0.13) GIT remote: https://github.com/CSBiology/FSharpAux.git - (8b77b4f32aaa1f09c5cf436a61f6c446c27ba28e) + (9b35d33d818bdea8da54b75a060c309b3ed509bf) path: / remote: https://github.com/CSBiology/FSharp.Stats.git - (4bf70fc0ddfb288cb7f166382b4c3d41b14bf415) + (e2ab6cf7746aadf50e01aa98a6666fdac5aefbc1) path: / GROUP BioDB RESTRICTION: == net45 diff --git a/paket.references b/paket.references index 999041f6..2492401e 100644 --- a/paket.references +++ b/paket.references @@ -1 +1,2 @@ -dotnet-fake \ No newline at end of file +dotnet-fake +docker.dotnet \ No newline at end of file diff --git a/src/BioFSharp.BioTools/AssemblyInfo.fs b/src/BioFSharp.BioTools/AssemblyInfo.fs new file mode 100644 index 00000000..a25b1bb8 --- /dev/null +++ b/src/BioFSharp.BioTools/AssemblyInfo.fs @@ -0,0 +1,19 @@ +// Auto-Generated by FAKE; do not edit +namespace System +open System.Reflection + +[] +[] +[")>] +[] +[] +[] +do () + +module internal AssemblyVersionInformation = + let [] AssemblyTitle = "BioFSharp.BioTools" + let [] AssemblyProduct = "BioFSharp" + let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " + let [] AssemblyVersion = "0.0.12" + let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj new file mode 100644 index 00000000..cc40fdd8 --- /dev/null +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj @@ -0,0 +1,24 @@ + + + + net45;net47;netstandard2.0 + BioFSharp.BioTools + BioFSharp.BioTools + BioFSharp.BioTools + Library + true + + true + + true + + $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb + Debug;Release;Mono + + + + + + + + diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx new file mode 100644 index 00000000..95d7523e --- /dev/null +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -0,0 +1,103 @@ +#r "netstandard" +#r "../../packages/Newtonsoft.Json.10.0.3/lib/netstandard1.3/Newtonsoft.Json.dll" +#r "../../packages/System.Buffers/lib/netstandard2.0/System.Buffers.dll" +#r "../../packages/Docker.DotNet/lib/netstandard2.0/Docker.DotNet.dll" + + +open System.Threading +open System.Threading +// Include CsbScaffold +// If you want to use the wrappers for unmanaged LAPACK functions from of FSharp.Stats +// include the path to the .lib folder manually to your PATH environment variable and make sure you set FSI to 64 bit + +// use the following lines of code to ensure that LAPACK functionalities are enabled if you want to use them +// fails with "MKL service either not available, or not started" if lib folder is not included in PATH. +//open FSharp.Stats +//FSharp.Stats.Algebra.LinearAlgebra.Service() + +open Docker.DotNet +open System.Threading +open System.Buffers +open System.Threading.Tasks + +let pipe = System.Uri("npipe://./pipe/docker_engine") + +let config = new DockerClientConfiguration(pipe) +let client = config.CreateClient() + +let createByImage (client:DockerClient) imageName = + async { + let param = Models.CreateContainerParameters() + param.Image <- imageName + param.Cmd <- System.Collections.Generic.List(["echo"; "hello world"]) + let! container = + client.Containers.CreateContainerAsync (param,CancellationToken.None) + |> Async.AwaitTask + return container.ID + } + + +let result = + async { + let paramLog = Models.ContainerLogsParameters() // (Stdout = System.Nullable(true),Stdin = System.Nullable(true)) + paramLog.ShowStdout <- System.Nullable(true) + let paramRun = Models.ContainerStartParameters () + + //let id = + // "4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb" + + let! id = createByImage client "ubuntu" + + let! isRunnig = + client.Containers.StartContainerAsync(id,paramRun,CancellationToken.None) + |> Async.AwaitTask + + let! wait = + client.Containers.WaitContainerAsync(id,CancellationToken.None) + |> Async.AwaitTask + + let! logs = + client.Containers.GetContainerLogsAsync (id,paramLog,CancellationToken.None) + |> Async.AwaitTask + + return logs + } + |> Async.RunSynchronously + + +let tmp : array = Array.zeroCreate 1024 +result.Read(tmp,0,1024) + +System.Text.Encoding.UTF8.GetString(tmp,0,1024) + +//let stream = +// async { +// let paramAttach = Models.ContainerAttachParameters(Stdout = System.Nullable(true),Stdin = System.Nullable(true)) +// let paramRun = Models.ContainerStartParameters () + +// let msg = System.Text.Encoding.UTF8.GetBytes("sh -c echo hello world\n") + +// let! isRunnig = +// client.Containers.StartContainerAsync("4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb",paramRun,CancellationToken.None) +// |> Async.AwaitTask +// if isRunnig then +// let! stream = +// client.Containers.AttachContainerAsync("4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb",true,paramAttach,CancellationToken.None) +// |> Async.AwaitTask +// //do! stream.WriteAsync(msg,0,msg.Length,CancellationToken.None) |> Async.AwaitTask +// //let! tmp = stream. ReadOutputToEndAsync(CancellationToken.None)|> Async.AwaitTask +// //let! tmp = stream. CopyOutputToAsync()|> Async.AwaitTask + +// return ("","")//(tmp.Item1,tmp.Item2) +// else +// return ("och nöö","och nöö") +// } +// |> Async.RunSynchronously + + +// async { +// let msg = System.Text.Encoding.UTF8.GetBytes("echo 'hello world'") +// do! stream.WriteAsync(msg,0,msg.Length,CancellationToken.None) |> Async.AwaitTask +// let! tmp = stream.ReadOutputToEndAsync(CancellationToken.None)|> Async.AwaitTask +// return tmp +// }|> Async.RunSynchronously \ No newline at end of file diff --git a/src/BioFSharp.BioTools/Docker.fs b/src/BioFSharp.BioTools/Docker.fs new file mode 100644 index 00000000..8ba320ea --- /dev/null +++ b/src/BioFSharp.BioTools/Docker.fs @@ -0,0 +1,6 @@ +namespace BioFSharp.BioTools + +/// Docker helper +module Docker = + + let a = 42 From fac971f528f39345a5d428029c87592ef3c792bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Mon, 21 Jan 2019 12:31:47 +0100 Subject: [PATCH 02/74] Changing Mono config for Travis CI --- BioFSharp.sln | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/BioFSharp.sln b/BioFSharp.sln index 19daf818..df66195c 100644 --- a/BioFSharp.sln +++ b/BioFSharp.sln @@ -152,8 +152,8 @@ Global {1EB6FB44-6B1E-4939-BF49-267D163959FF}.Release|Any CPU.Build.0 = Release|Any CPU {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Mono|Any CPU.ActiveCfg = Debug|Any CPU - {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Mono|Any CPU.Build.0 = Debug|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Mono|Any CPU.ActiveCfg = Mono|Any CPU + {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Mono|Any CPU.Build.0 = Mono|Any CPU {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Release|Any CPU.ActiveCfg = Release|Any CPU {9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection From 5d324a2bd818a08660f83bf3a8eee32361762334 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Mon, 21 Jan 2019 17:55:06 +0100 Subject: [PATCH 03/74] Add low-level support for docker API using docker.dotnet --- src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 2 + src/BioFSharp.BioTools/Docker.fs | 334 +++++++++++++++++- 2 files changed, 335 insertions(+), 1 deletion(-) diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index 95d7523e..aaab55c1 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -59,6 +59,8 @@ let result = let! logs = client.Containers.GetContainerLogsAsync (id,paramLog,CancellationToken.None) |> Async.AwaitTask + + return logs } diff --git a/src/BioFSharp.BioTools/Docker.fs b/src/BioFSharp.BioTools/Docker.fs index 8ba320ea..934512d8 100644 --- a/src/BioFSharp.BioTools/Docker.fs +++ b/src/BioFSharp.BioTools/Docker.fs @@ -1,6 +1,338 @@ namespace BioFSharp.BioTools +open System +open System.Threading +open Docker.DotNet +open Docker.DotNet.Models + /// Docker helper module Docker = - let a = 42 + /// Connect to docker engine (docker deamon) + let connect str = + (new DockerClientConfiguration(new Uri(str)) ).CreateClient() + + module Image = + + + /// Provides a set of static methods for creating Image parameter. + type ImagesParams = + + /// Creates ImagesListParameters for pre-filtering list function + static member InitImagesListParameters + ( + ?All, + ?Filters, + ?MatchName + ) = + + let param = new ImagesListParameters() + All |> Option.iter (fun nv -> param.set_All (Nullable(nv))) + Filters |> Option.iter param.set_Filters + MatchName |> Option.iter param.set_MatchName + + param + + /// Creates ImagesCreateParameters + static member InitImagesCreateParameters + ( + ?FromImage, + ?FromSrc, + ?Repo, + ?Tag + ) = + + let param = new ImagesCreateParameters() + FromImage |> Option.iter param.set_FromImage + FromSrc |> Option.iter param.set_FromSrc + Repo |> Option.iter param.set_Repo + Tag |> Option.iter param.set_Tag + + param + + + /// Lists available images with ImagesListParameters for filtering (async) + let listImagesWithAsync (connection:DockerClient) (param:ImagesListParameters) = + // ImagesListParameters are only for filtering + async { + let! tmp = + connection.Images. ListImagesAsync(param) + |> Async.AwaitTask + return (tmp |> Seq.map id) + } + + + /// Lists all available images (async) + let listImagesAsync (connection:DockerClient) = + listImagesWithAsync connection (ImagesParams.InitImagesListParameters()) + + + /// Lists all available images + let listImages (connection:DockerClient) = + listImagesAsync connection + |> Async.RunSynchronously + + + + + module Container = + + + /// Provides a set of static methods for creating Image parameter. + type ContainerParams = + + /// Creates CreateContainerParameters + static member InitCreateContainerParameters + ( + ?Hostname, + ?Domainname, + ?User, + ?AttachStdin, + ?AttachStdout, + ?AttachStderr, + ?ExposedPorts, + ?Tty, + ?OpenStdin, + ?StdinOnce, + ?Env : seq, + ?Cmd : seq, + ?Healthcheck, + ?ArgsEscaped, + ?Image, + ?Volumes, + ?WorkingDir, + ?Entrypoint : seq, + ?NetworkDisabled, + ?MacAddress, + ?OnBuild : seq, + ?Labels, + ?StopSignal, + ?StopTimeout, + ?Shell : seq + ) = + + let param = new CreateContainerParameters() + + Hostname |> Option.iter param.set_Hostname + Domainname |> Option.iter param.set_Domainname + User |> Option.iter param.set_User + AttachStdin |> Option.iter param.set_AttachStdin + AttachStdout |> Option.iter param.set_AttachStdout + AttachStderr |> Option.iter param.set_AttachStderr + ExposedPorts |> Option.iter param.set_ExposedPorts + Tty |> Option.iter param.set_Tty + OpenStdin |> Option.iter param.set_OpenStdin + StdinOnce |> Option.iter param.set_StdinOnce + Env |> Option.iter (fun v -> param.set_Env (Collections.Generic.List(v)) ) + Cmd |> Option.iter (fun v -> param.set_Cmd (Collections.Generic.List(v)) ) + Healthcheck |> Option.iter param.set_Healthcheck + ArgsEscaped |> Option.iter param.set_ArgsEscaped + Image |> Option.iter param.set_Image + Volumes |> Option.iter param.set_Volumes + WorkingDir |> Option.iter param.set_WorkingDir + Entrypoint |> Option.iter (fun v -> param.set_Entrypoint (Collections.Generic.List(v)) ) + NetworkDisabled |> Option.iter param.set_NetworkDisabled + MacAddress |> Option.iter param.set_MacAddress + OnBuild |> Option.iter (fun v -> param.set_OnBuild (Collections.Generic.List(v)) ) + Labels |> Option.iter param.set_Labels + StopSignal |> Option.iter param.set_StopSignal + StopTimeout |> Option.iter (fun v -> param.set_StopTimeout (Nullable(v) ) ) + Shell |> Option.iter (fun v -> param.set_Shell (Collections.Generic.List(v)) ) + + param + + + /// Creates ContainerStartParameters + static member InitContainerStartParameters + ( + ?DetachKeys + ) = + + let param = new ContainerStartParameters() + DetachKeys |> Option.iter param.set_DetachKeys + + param + + + /// Creates ContainerLogsParameters + static member InitContainerLogsParameters + ( + ?Follow, + ?ShowStderr, + ?ShowStdout, + ?Since, + ?Tail, + ?Timestamps + ) = + + let param = new ContainerLogsParameters() + Follow |> Option.iter (fun v -> param.set_Follow (Nullable(v) ) ) + ShowStderr |> Option.iter (fun v -> param.set_ShowStderr (Nullable(v) ) ) + ShowStdout |> Option.iter (fun v -> param.set_ShowStdout (Nullable(v) ) ) + Since |> Option.iter param.set_Since + Tail |> Option.iter param.set_Tail + Timestamps |> Option.iter (fun v -> param.set_Timestamps (Nullable(v) ) ) + + param + + + /// Creates docker container with CreateContainerParameters for config (async) + let createContainerWithAsync (connection:DockerClient) (param:CreateContainerParameters) = + async { + let! tmp = + connection.Containers.CreateContainerAsync(param) + |> Async.AwaitTask + + return tmp + } + + + /// Creates docker container of an image given by image name (async) + let createContainerByImageAsync (connection:DockerClient) imageName = + async { + let param = ContainerParams.InitCreateContainerParameters(Image=imageName) + //param.Cmd <- Collections.Generic.List(["/bin/bash";"c";"echo 'Hello'"]) + let! tmp = + connection.Containers.CreateContainerAsync(param) + |> Async.AwaitTask + + return tmp + } + + + /// Creates docker container of an image given by image name (async) + let createContainerByImage (connection:DockerClient) imageName = + createContainerByImageAsync connection imageName + |> Async.RunSynchronously + + + /// Start container with CreateContainerParameters for config (async) + let startContainerWithAsync (connection:DockerClient) (param:ContainerStartParameters) id = + async { + let! isRunnig = + connection.Containers.StartContainerAsync(id,param,CancellationToken.None) + |> Async.AwaitTask + + return isRunnig + } + + + /// Start container by a given ID (async) + let startContainerAsync (connection:DockerClient) id = + startContainerWithAsync connection (ContainerParams.InitContainerStartParameters()) id + + + /// Start container by a given ID + let startContainer (connection:DockerClient) id = + startContainerWithAsync connection (ContainerParams.InitContainerStartParameters()) id + |> Async.RunSynchronously + + + /// Wait for container (async) + let waitContainerAsync (connection:DockerClient) id = + async { + let! tmp = + connection.Containers.WaitContainerAsync(id,CancellationToken.None) + |> Async.AwaitTask + + return tmp + } + + /// Wait for container + let waitContainer (connection:DockerClient) id = + waitContainerAsync connection id + |> Async.RunSynchronously + + + /// Get logs from container (async) + let getContainerLogsAsync (connection:DockerClient) param id = + async { + let! tmp = + connection.Containers.GetContainerLogsAsync(id,param,CancellationToken.None) + |> Async.AwaitTask + + return tmp + } + + /// Get logs from container and show StdOut + let getContainerLogs (connection:DockerClient) id = + getContainerLogsAsync connection (ContainerParams.InitContainerLogsParameters(ShowStdout=true)) id + |> Async.RunSynchronously + + + module Volumes = + /// Provides a set of static methods for creating Image parameter. + type VolumesParams = + + /// Creates ContainerStartParameters + static member InitVolumesCreateParameters + ( + ?Driver, + ?DriverOpts, + ?Labels, + ?Name + + ) = + + let param = new VolumesCreateParameters() + Driver |> Option.iter param.set_Driver + DriverOpts |> Option.iter param.set_DriverOpts + Labels |> Option.iter param.set_Labels + Name |> Option.iter param.set_Name + + param + + /// Create volume with VolumesCreateParameters (async) + let createAsync (connection:DockerClient) param = + async { + let! tmp = + connection.Volumes.CreateAsync(param,CancellationToken.None) + |> Async.AwaitTask + + return tmp + } + + + /// Create volume with VolumesCreateParameters + let create (connection:DockerClient) param = + createAsync connection param + |> Async.RunSynchronously + + + /// Inspect volume (async) + let inspectAsync (connection:DockerClient) name = + async { + let! tmp = + connection.Volumes.InspectAsync(name,CancellationToken.None) + |> Async.AwaitTask + + return tmp + } + + + /// Inspect volume + let inspect (connection:DockerClient) name = + inspectAsync connection name + |> Async.RunSynchronously + + + /// List volume (async) + let listVolumesAsync (connection:DockerClient) = + async { + let! tmp = + connection.Volumes.ListAsync(CancellationToken.None) + |> Async.AwaitTask + + return tmp + } + + + /// List volume + let listVolumes (connection:DockerClient) = + listVolumesAsync connection + |> Async.RunSynchronously + + + + + From b050d9fe8e846c61f28573de2ac15c09b622d14c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Wed, 30 Jan 2019 19:20:18 +0100 Subject: [PATCH 04/74] Add BioContainer support --- src/BioFSharp.BioTools/BioContainer.fs | 84 +++++ .../BioFSharp.BioTools.fsproj | 1 + src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 346 ++++++++++++++---- src/BioFSharp.BioTools/Docker.fs | 313 +++++++++++++++- 4 files changed, 678 insertions(+), 66 deletions(-) create mode 100644 src/BioFSharp.BioTools/BioContainer.fs diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs new file mode 100644 index 00000000..e17ede76 --- /dev/null +++ b/src/BioFSharp.BioTools/BioContainer.fs @@ -0,0 +1,84 @@ +namespace BioFSharp.BioTools + +open System +open System.Threading +open Docker.DotNet +open Docker.DotNet.Models + +/// BioContainer helper +module BioContainer = + + open Docker + + + //let parseSgdId = Regex.tryEitherParse SgdId @"SGDID:\w\d+" + + + /// Connect to docker engine (docker deamon) + let connect str = + (new DockerClientConfiguration(new Uri(str)) ).CreateClient() + + + + + let runCmdAsync (connection:DockerClient) (dockerid: DockerId) cmd = + // Function creates and deletes new container all the time + // !maybe use Containers.StartWithConfigContainerExecAsync (Docker.DotNet.Models.ContainerExecStartParameters()) in the future + + if not (Docker.Image.exists connection dockerid) then failwithf "Image %s does not exists!" (dockerid.ToString()) + async { + let! container = + let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=dockerid.ToString(),Cmd=cmd) + Docker.Container.createContainerWithAsync connection param + + let! isRunning = + let param = Docker.Container.ContainerParams.InitContainerStartParameters() + Docker.Container.startContainerWithAsync connection param container.ID + + let! wait = + Docker.Container.waitContainerAsync connection container.ID + + let! logs = + let param = Docker.Container.ContainerParams.InitContainerLogsParameters(ShowStdout=true) + Docker.Container.getContainerLogsAsync connection param container.ID + + do! Docker.Container.removeContainerAsync connection (DockerId.ContainerId container.ID) + + return logs + } + + + + + ///// Run = create + start (or only start if available) + //let tryRunCmd (connection:DockerClient) (dockerid: DockerId) cmd = + // if Docker.Image.exists connection dockerid then + // let res = Docker.Container.createContainerByImage connection (dockerid.ToString()) + // if Docker.Container.startContainer connection res.ID then + // Some + // else + // None + + // else + // None + + ///// Run = create + start (or only start if available) + //let tryRun (connection:DockerClient) (dockerid: DockerId) = + // if Docker.Image.exists connection dockerid then + + // if Docker.Container.existsByImage connection dockerid then + + // else + // if Docker.Container.startContainer connection (dockerid.ToString()) then + // Some DockerId + // else + // None + // else + // None + + + + + + + diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj index cc40fdd8..2a4fb6cf 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj @@ -17,6 +17,7 @@ + diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index aaab55c1..e84f9135 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -3,103 +3,319 @@ #r "../../packages/System.Buffers/lib/netstandard2.0/System.Buffers.dll" #r "../../packages/Docker.DotNet/lib/netstandard2.0/Docker.DotNet.dll" +#load "Docker.fs" +#load "BioContainer.fs" + open System.Threading open System.Threading -// Include CsbScaffold -// If you want to use the wrappers for unmanaged LAPACK functions from of FSharp.Stats -// include the path to the .lib folder manually to your PATH environment variable and make sure you set FSI to 64 bit - -// use the following lines of code to ensure that LAPACK functionalities are enabled if you want to use them -// fails with "MKL service either not available, or not started" if lib folder is not included in PATH. -//open FSharp.Stats -//FSharp.Stats.Algebra.LinearAlgebra.Service() - open Docker.DotNet open System.Threading open System.Buffers open System.Threading.Tasks -let pipe = System.Uri("npipe://./pipe/docker_engine") +open BioFSharp.BioTools +open System.Collections.Generic +open Docker.DotNet.Models -let config = new DockerClientConfiguration(pipe) -let client = config.CreateClient() -let createByImage (client:DockerClient) imageName = - async { - let param = Models.CreateContainerParameters() - param.Image <- imageName - param.Cmd <- System.Collections.Generic.List(["echo"; "hello world"]) - let! container = - client.Containers.CreateContainerAsync (param,CancellationToken.None) - |> Async.AwaitTask - return container.ID - } +let client = Docker.connect "npipe://./pipe/docker_engine" + + + +let cmd = ["bash"] //;"echo"; "hello world";] +let cmd' = ["echo"; "hello you";] +let dockerid = (Docker.DockerId.ImageName "ubuntu") +let connection = client +let cont = "1940820e0486" -let result = +let readFrom (stream:System.IO.Stream) = + let length = (stream.Length-1L) |> int + let tmp : array = Array.zeroCreate length + stream.Read(tmp,0,length) |> ignore + + System.Text.Encoding.UTF8.GetString(tmp,0,length) + + +// https://github.com/Microsoft/Docker.DotNet/issues/223 -> write +// https://github.com/Microsoft/Docker.DotNet/issues/212 -> read + +//-i, --interactive=false Keep STDIN open even if not attached +//-t, --tty=false Allocate a pseudo-TTY + +let container,exe = async { - let paramLog = Models.ContainerLogsParameters() // (Stdout = System.Nullable(true),Stdin = System.Nullable(true)) - paramLog.ShowStdout <- System.Nullable(true) - let paramRun = Models.ContainerStartParameters () - - //let id = - // "4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb" + let! container = + let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=dockerid.ToString(),Cmd=cmd,OpenStdin=true) + Docker.Container.createContainerWithAsync connection param - let! id = createByImage client "ubuntu" + let! isRunning = + let param = + Docker.Container.ContainerParams.InitContainerStartParameters() - let! isRunnig = - client.Containers.StartContainerAsync(id,paramRun,CancellationToken.None) - |> Async.AwaitTask - - let! wait = - client.Containers.WaitContainerAsync(id,CancellationToken.None) - |> Async.AwaitTask + Docker.Container.startContainerWithAsync connection param container.ID + + let! tmp = + let param = + Docker.Container.ContainerParams.InitContainerExecCreateParameters( + AttachStderr=true, + AttachStdout=true, + AttachStdin=false, + Cmd=cmd', + Detach=false, + Tty=true + ) + + Docker.Container.execCreateContainerAsync connection param (container.ID) + return container,tmp + } + + |> Async.RunSynchronously + + +////docker stop $(docker ps -a -q) + +//Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId (container.ID)) +//|> Async.RunSynchronously + + +let ms = + async { + + // Docker.Container.startContainerWithAsync connection param container.ID + + + + let! isRunning1 = + let param1 = + Docker.Container.ContainerParams.InitContainerStartParameters() + + Docker.Container.startContainerWithAsync connection param1 container.ID - let! logs = - client.Containers.GetContainerLogsAsync (id,paramLog,CancellationToken.None) + let! isRunning = + let param = + Docker.Container.ContainerParams.InitContainerExecStartParameters( + AttachStderr=true, + AttachStdout=true, + AttachStdin=false, + Cmd=cmd' // cmd + ) + Docker.Container. startContainerExecAsync connection exe.ID // startContainerWithExecConfigAsync connection param container.ID + + let! stream = + let param = Docker.Container.ContainerParams.InitContainerAttachParameters (Stdout=true,Stderr=true,Stdin=false,Stream=true) + connection.Containers.AttachContainerAsync(exe.ID,true,param) |> Async.AwaitTask + + let stdOutputStream = new System.IO.MemoryStream() + let streamTask = + stream.CopyOutputToAsync(null,stdOutputStream,null,CancellationToken.None) - - - return logs + + do! streamTask |> Async.AwaitTask + + let! wait = + Docker.Container.waitContainerAsync connection container.ID + + let result = + stdOutputStream.Position <- 0L + readFrom stdOutputStream + + //do! Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId container.ID) + + return result + } |> Async.RunSynchronously -let tmp : array = Array.zeroCreate 1024 -result.Read(tmp,0,1024) -System.Text.Encoding.UTF8.GetString(tmp,0,1024) +//let ms = +// async { +// let! container = +// let param = +// Docker.Container.ContainerParams.InitCreateContainerParameters( +// ArgsEscaped=false, +// AttachStderr=true, +// AttachStdout=true, +// AttachStdin=false, +// Image=string dockerid, +// Cmd=cmd +// ) + +// Docker.Container.createContainerWithAsync connection param + +// //let! isRunning = +// // let param = Docker.Container.ContainerParams.InitContainerStartParameters() +// // Docker.Container.startContainerWithAsync connection param container.ID + +// let! stream = +// let param = Docker.Container.ContainerParams.InitContainerAttachParameters (Stdout=true,Stderr=true,Stdin=false,Stream=true) +// connection.Containers.AttachContainerAsync(container.ID,false,param) +// |> Async.AwaitTask + +// let stdOutputStream = new System.IO.MemoryStream() +// let streamTask = +// stream.CopyOutputToAsync(null,stdOutputStream,null,CancellationToken.None) + +// let! isRunning = +// let param = +// Docker.Container.ContainerParams.InitContainerExecStartParameters( +// AttachStderr=true, +// AttachStdout=true, +// AttachStdin=false, +// Cmd=cmd +// ) +// Docker.Container.startContainerWithExecConfigAsync connection param container.ID + +// do! streamTask |> Async.AwaitTask + +// let! wait = +// Docker.Container.waitContainerAsync connection container.ID + +// let result = +// stdOutputStream.Position <- 0L +// readFrom stdOutputStream + +// do! Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId container.ID) + +// return result + +// } +// |> Async.RunSynchronously + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +let tmp = + BioContainer.runCmdAsync client (Docker.DockerId.ImageName "ubuntu") ["echo"; "hello world"] + |> Async.RunSynchronously + |> readFrom + + + +Docker.Image.exists client (Docker.DockerId.ImageName "targetp_image") + + +Docker.Image.listImages client +|> Seq.map (fun i -> i.ID ) +|> Seq.toArray -//let stream = + +Docker.Container.existsByImage client (Docker.DockerId.ImageName "targetp_image") + + +//ancestor=([:], or ) + +let filters = + Docker.Container.ContainerParams.InitContainerListParameters(All=true,Filters=Docker.Filters.InitContainerFilters(Ancestor=Docker.DockerId.ImageName "ubuntu")) + + +Docker.Container.listContainersWithAsync client filters +|> Async.RunSynchronously +|> Seq.map (fun x -> x.Command,x.Image,x.Labels) +|> Seq.toArray + +//client.Containers.StartWithConfigContainerExecAsync +let p = Docker.DotNet.Models.ContainerExecStartParameters() + + +let ap = Docker.DotNet.Models.ContainerAttachParameters() + + + + +Docker.Container.existsByImage client (Docker.DockerId.ImageName "targetp_image") + + +let idtp = "61fbfbc30382e83dd585c99583c036ef8c5ced4eb10e1b274f199da6b6969588" + +//let pipe = System.Uri("npipe://./pipe/docker_engine") + +//let config = new DockerClientConfiguration(pipe) +//let client = config.CreateClient() + +//let createByImage (client:DockerClient) imageName = +// async { +// let param = Models.CreateContainerParameters() +// param.Image <- imageName +// param.Cmd <- System.Collections.Generic.List(["echo"; "hello world"]) +// let! container = +// client.Containers.CreateContainerAsync (param,CancellationToken.None) +// |> Async.AwaitTask +// return container.ID +// } + + +//let result = // async { -// let paramAttach = Models.ContainerAttachParameters(Stdout = System.Nullable(true),Stdin = System.Nullable(true)) +// let paramLog = Models.ContainerLogsParameters() // (Stdout = System.Nullable(true),Stdin = System.Nullable(true)) +// paramLog.ShowStdout <- System.Nullable(true) // let paramRun = Models.ContainerStartParameters () -// let msg = System.Text.Encoding.UTF8.GetBytes("sh -c echo hello world\n") +// //let id = +// // "4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb" +// let! id = createByImage client "ubuntu" + // let! isRunnig = -// client.Containers.StartContainerAsync("4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb",paramRun,CancellationToken.None) +// client.Containers.StartContainerAsync(id,paramRun,CancellationToken.None) // |> Async.AwaitTask -// if isRunnig then -// let! stream = -// client.Containers.AttachContainerAsync("4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb",true,paramAttach,CancellationToken.None) -// |> Async.AwaitTask -// //do! stream.WriteAsync(msg,0,msg.Length,CancellationToken.None) |> Async.AwaitTask -// //let! tmp = stream. ReadOutputToEndAsync(CancellationToken.None)|> Async.AwaitTask -// //let! tmp = stream. CopyOutputToAsync()|> Async.AwaitTask + +// let! wait = +// client.Containers.WaitContainerAsync(id,CancellationToken.None) +// |> Async.AwaitTask + +// let! logs = +// client.Containers.GetContainerLogsAsync (id,paramLog,CancellationToken.None) +// |> Async.AwaitTask + -// return ("","")//(tmp.Item1,tmp.Item2) -// else -// return ("och nöö","och nöö") + +// return logs // } // |> Async.RunSynchronously -// async { -// let msg = System.Text.Encoding.UTF8.GetBytes("echo 'hello world'") -// do! stream.WriteAsync(msg,0,msg.Length,CancellationToken.None) |> Async.AwaitTask -// let! tmp = stream.ReadOutputToEndAsync(CancellationToken.None)|> Async.AwaitTask -// return tmp -// }|> Async.RunSynchronously \ No newline at end of file +//let tmp : array = Array.zeroCreate 1024 +//result.Read(tmp,0,1024) + +//System.Text.Encoding.UTF8.GetString(tmp,0,1024) + diff --git a/src/BioFSharp.BioTools/Docker.fs b/src/BioFSharp.BioTools/Docker.fs index 934512d8..98e18068 100644 --- a/src/BioFSharp.BioTools/Docker.fs +++ b/src/BioFSharp.BioTools/Docker.fs @@ -2,11 +2,86 @@ namespace BioFSharp.BioTools open System open System.Threading +open System.Collections.Generic open Docker.DotNet open Docker.DotNet.Models + +// https://docs.docker.com/engine/api/v1.24/ + /// Docker helper module Docker = + + + /// Dockerfile > (Build) > Image > (Create/Run) > Container <- start/stop + type DockerId = + | ImageId of string + | ImageName of string + | ContainerId of string + | ContainerName of string + | Tag of string*string + + override this.ToString() = + match this with + | ImageId s -> s + | ImageName s -> s + | ContainerId s -> s + | ContainerName s -> s + | Tag (s,t) -> sprintf "%s:%s" s t + + /// Dockerfile > (Build) > Image > (Create/Run) > Container <- start/stop + type ContainerStatus = + | Created + | Restarting + | Running + | Paused + | Exited + | Dead + + + override this.ToString() = + match this with + | Created -> "created" + | Restarting -> "restarting" + | Running -> "running" + | Paused -> "paused" + | Exited -> "exited" + | Dead -> "dead" + + + /// Provides a set of static methods for creating Image parameter. + type Filters = + + static member private DicOfSeq (s:('k * 'v) seq) = new Dictionary<'k,'v>(s |> Map.ofSeq) :> IDictionary<'k,'v> + + /// Creates ImagesListParameters for pre-filtering list function + static member InitContainerFilters + ( + ?Ancestor:DockerId, + ?Status:ContainerStatus, + // Containers that exited with status code + ?Exited:int, + ?Label, + ?Isolation, + ?Before:DockerId, + ?Since:DockerId, + ?Volume, + ?Network + ) = + + let filter = System.Collections.Generic.Dictionary() + Ancestor |> Option.iter (fun nv -> filter.Add( "ancestor", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Status |> Option.iter (fun nv -> filter.Add( "status", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Exited |> Option.iter (fun nv -> filter.Add( "exited", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Label |> Option.iter (fun nv -> filter.Add( "label", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Isolation |> Option.iter (fun nv -> filter.Add( "isolation", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Before |> Option.iter (fun nv -> filter.Add( "before", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Since |> Option.iter (fun nv -> filter.Add( "since", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Volume |> Option.iter (fun nv -> filter.Add( "volume", [nv.ToString(),true] |> Filters.DicOfSeq) ) + Network |> Option.iter (fun nv -> filter.Add( "network", [nv.ToString(),true] |> Filters.DicOfSeq) ) + + filter + /// Connect to docker engine (docker deamon) let connect str = @@ -73,14 +148,138 @@ module Docker = |> Async.RunSynchronously + /// Returns true if an image matches the dockerid (async) + let existsAsync (connection:DockerClient) (dockerid:DockerId) = + let param = ImagesParams.InitImagesListParameters(MatchName=dockerid.ToString()) + async { + let! tmp = listImagesWithAsync connection param + + return (Seq.length tmp > 0) + } + + + /// Returns true if an image matches the name + let exists (connection:DockerClient) (dockerid:DockerId) = + existsAsync connection dockerid + |> Async.RunSynchronously + + //##################################################### + //##################################################### + //##################################################### + + module Container = /// Provides a set of static methods for creating Image parameter. type ContainerParams = + /// Creates ContainersListParameters for pre-filtering list function + static member InitContainerListParameters + ( + ?All, + ?Before, + ?Filters, + ?Limit, + ?Since, + ?Size + ) = + + let param = new ContainersListParameters() + All |> Option.iter (fun nv -> param.set_All (Nullable(nv))) + Before |> Option.iter param.set_Before + Filters |> Option.iter param.set_Filters + Limit |> Option.iter (fun nv -> param.set_Limit (Nullable(nv))) + Since |> Option.iter param.set_Since + Size |> Option.iter (fun nv -> param.set_Size (Nullable(nv))) + + param + + /// Creates ContainerAttachParameters + static member InitContainerAttachParameters + ( + ?DetachKeys, + ?Logs, + ?Stderr, + ?Stdin, + ?Stdout, + ?Stream + ) = + + let param = new ContainerAttachParameters() + DetachKeys |> Option.iter param.set_DetachKeys + Logs |> Option.iter param.set_Logs + Stderr |> Option.iter (fun v -> param.set_Stderr (Nullable(v) ) ) + Stdin |> Option.iter (fun v -> param.set_Stdin (Nullable(v) ) ) + Stdout |> Option.iter (fun v -> param.set_Stdout (Nullable(v) ) ) + Stream |> Option.iter (fun v -> param.set_Stream (Nullable(v) ) ) + + param + + /// Creates ContainerExecStartParameters + static member InitContainerExecStartParameters + ( + + ?AttachStderr, + ?AttachStdin, + ?AttachStdout, + ?Cmd:seq, + ?Detach, + ?DetachKeys, + ?Env:seq, + ?Privileged, + ?Tty, + ?User + ) = + + let param = new ContainerExecStartParameters() + + AttachStderr |> Option.iter param.set_AttachStderr + AttachStdin |> Option.iter param.set_AttachStdin + AttachStdout |> Option.iter param.set_AttachStdout + Cmd |> Option.iter (fun v -> param.set_Cmd (Collections.Generic.List(v)) ) + Detach |> Option.iter param.set_Detach + DetachKeys |> Option.iter param.set_DetachKeys + Env |> Option.iter (fun v -> param.set_Env (Collections.Generic.List(v)) ) + Privileged |> Option.iter param.set_Privileged + Tty |> Option.iter param.set_Tty + User |> Option.iter param.set_User + + param + + /// Creates ContainerExecStartParameters + static member InitContainerExecCreateParameters + ( + + ?AttachStderr, + ?AttachStdin, + ?AttachStdout, + ?Cmd:seq, + ?Detach, + ?DetachKeys, + ?Env:seq, + ?Privileged, + ?Tty, + ?User + ) = + + let param = new ContainerExecCreateParameters() + + AttachStderr |> Option.iter param.set_AttachStderr + AttachStdin |> Option.iter param.set_AttachStdin + AttachStdout |> Option.iter param.set_AttachStdout + Cmd |> Option.iter (fun v -> param.set_Cmd (Collections.Generic.List(v)) ) + Detach |> Option.iter param.set_Detach + DetachKeys |> Option.iter param.set_DetachKeys + Env |> Option.iter (fun v -> param.set_Env (Collections.Generic.List(v)) ) + Privileged |> Option.iter param.set_Privileged + Tty |> Option.iter param.set_Tty + User |> Option.iter param.set_User + + param + /// Creates CreateContainerParameters static member InitCreateContainerParameters ( @@ -176,6 +375,21 @@ module Docker = param + /// Creates ContainerRemoveParameters + static member InitContainerRemoveParameters + ( + ?Force, + ?RemoveLinks, + ?RemoveVolumes + ) = + + let param = new ContainerRemoveParameters () + Force |> Option.iter (fun v -> param.set_Force (Nullable(v) ) ) + RemoveLinks |> Option.iter (fun v -> param.set_RemoveLinks (Nullable(v) ) ) + RemoveVolumes |> Option.iter (fun v -> param.set_RemoveVolumes (Nullable(v) ) ) + + param + /// Creates docker container with CreateContainerParameters for config (async) let createContainerWithAsync (connection:DockerClient) (param:CreateContainerParameters) = async { @@ -206,6 +420,17 @@ module Docker = |> Async.RunSynchronously + /// Creates docker container with ContainerExecStartParameters for config (async) + let createContainerWithExecConfigAsync (connection:DockerClient) (param:ContainerExecCreateParameters) id = + async { + let! tmp = + connection.Containers.ExecCreateContainerAsync(id,param,CancellationToken.None) + |> Async.AwaitTask + + return tmp + } + + /// Start container with CreateContainerParameters for config (async) let startContainerWithAsync (connection:DockerClient) (param:ContainerStartParameters) id = async { @@ -228,6 +453,18 @@ module Docker = |> Async.RunSynchronously + /// Start container with ContainerExecStartParameters for config (async) + let startContainerWithExecConfigAsync (connection:DockerClient) (param:ContainerExecStartParameters) id = + async { + let! isRunnig = + connection.Containers.StartWithConfigContainerExecAsync(id,param,CancellationToken.None) + |> Async.AwaitTask + + return isRunnig + } + + + /// Wait for container (async) let waitContainerAsync (connection:DockerClient) id = async { @@ -254,11 +491,85 @@ module Docker = return tmp } + /// Get logs from container and show StdOut let getContainerLogs (connection:DockerClient) id = getContainerLogsAsync connection (ContainerParams.InitContainerLogsParameters(ShowStdout=true)) id |> Async.RunSynchronously - + + + /// Lists available containers with ContainersListParameters for filtering (async) + let listContainersWithAsync (connection:DockerClient) (param:ContainersListParameters) = + // ImagesListParameters are only for filtering + async { + let! tmp = + connection.Containers.ListContainersAsync(param,CancellationToken.None) + |> Async.AwaitTask + return (tmp |> Seq.map id) + } + + + /// Lists all available containers (async) + let listAllContainersAsync (connection:DockerClient) = + listContainersWithAsync connection (ContainerParams.InitContainerListParameters(All=true)) + + + /// Returns true if acontainer matches the dockerid (async) + let existsByAsync (connection:DockerClient) (dockerid:DockerId) = + let filter = Filters.InitContainerFilters(Ancestor=dockerid) + let param = ContainerParams.InitContainerListParameters(All=true,Filters=filter) + async { + let! tmp = listContainersWithAsync connection param + + return (Seq.length tmp > 0) + } + + + /// Returns true if acontainer matches the dockerid + let existsByImage (connection:DockerClient) (dockerid:DockerId) = + existsByAsync connection dockerid + |> Async.RunSynchronously + + + /// Removes container + let removeContainerWithAsync (connection:DockerClient) (param) (dockerid:DockerId) = + async { + do! + connection.Containers.RemoveContainerAsync(dockerid.ToString(),param,CancellationToken.None) + |> Async.AwaitTask + } + + + /// Removes container + let removeContainerAsync (connection:DockerClient) (dockerid:DockerId) = + let param = ContainerParams.InitContainerRemoveParameters() + async { + do! + connection.Containers.RemoveContainerAsync(dockerid.ToString(),param,CancellationToken.None) + |> Async.AwaitTask + } + + /// Creates an container that will perform the execution (async). IMPORTANT: Start exec-container using StartContainerExecAsync + let execCreateContainerAsync (connection:DockerClient) param id = + async { + let! tmp = + connection.Containers.ExecCreateContainerAsync (id,param,CancellationToken.None) + |> Async.AwaitTask + + return tmp + } + + /// Starts + let startContainerExecAsync (connection:DockerClient) id = + async { + do! + connection.Containers.StartContainerExecAsync (id,CancellationToken.None) + |> Async.AwaitTask + } + + //##################################################### + //##################################################### + //##################################################### module Volumes = /// Provides a set of static methods for creating Image parameter. From 9e9a4f939547ea26d2f4a8430d4a03fa68a127cc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Thu, 31 Jan 2019 19:11:13 +0100 Subject: [PATCH 05/74] Add BcContext pattern --- src/BioFSharp.BioTools/BioContainer.fs | 119 ++++++++--- src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 185 +++++++++++------- src/BioFSharp.BioTools/Docker.fs | 59 +++++- 3 files changed, 260 insertions(+), 103 deletions(-) diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs index e17ede76..702ecff6 100644 --- a/src/BioFSharp.BioTools/BioContainer.fs +++ b/src/BioFSharp.BioTools/BioContainer.fs @@ -10,42 +10,117 @@ module BioContainer = open Docker - - //let parseSgdId = Regex.tryEitherParse SgdId @"SGDID:\w\d+" - - + type BcContext = { + Id : Guid + Connection : DockerClient + ImageName : string + ContainerId : string + } + + /// Connect to docker engine (docker deamon) let connect str = (new DockerClientConfiguration(new Uri(str)) ).CreateClient() + + let private readFrom (stream:System.IO.Stream) = + let length = (stream.Length) |> int + let tmp : array = Array.zeroCreate length + stream.Read(tmp,0,length) |> ignore + System.Text.Encoding.UTF8.GetString(tmp,0,length) - - let runCmdAsync (connection:DockerClient) (dockerid: DockerId) cmd = - // Function creates and deletes new container all the time - // !maybe use Containers.StartWithConfigContainerExecAsync (Docker.DotNet.Models.ContainerExecStartParameters()) in the future - - if not (Docker.Image.exists connection dockerid) then failwithf "Image %s does not exists!" (dockerid.ToString()) + /// Runs a container of a specified image and keeps it running + let initBcContextAsync (connection:DockerClient) (image: DockerId) = + if not (Docker.Image.exists connection image) then failwithf "Image %s does not exists! Please pull the image first." (string image ) async { let! container = - let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=dockerid.ToString(),Cmd=cmd) - Docker.Container.createContainerWithAsync connection param - + let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=string image,OpenStdin=true) + Docker.Container.createContainerWithAsync connection param + let! isRunning = - let param = Docker.Container.ContainerParams.InitContainerStartParameters() + let param = + Docker.Container.ContainerParams.InitContainerStartParameters() + Docker.Container.startContainerWithAsync connection param container.ID - let! wait = - Docker.Container.waitContainerAsync connection container.ID + return {Id=Guid.NewGuid();Connection=connection;ImageName=string image;ContainerId=container.ID} + } + + + let execAsync (bc:BcContext) cmd = + async { - let! logs = - let param = Docker.Container.ContainerParams.InitContainerLogsParameters(ShowStdout=true) - Docker.Container.getContainerLogsAsync connection param container.ID - - do! Docker.Container.removeContainerAsync connection (DockerId.ContainerId container.ID) + let! execContainer = + let param = + Docker.Container.ContainerParams.InitContainerExecCreateParameters( + AttachStderr=true, + AttachStdout=true, + AttachStdin=false, + Cmd=cmd, + Detach=false + ) + + Docker.Container.execCreateContainerAsync bc.Connection param (bc.ContainerId) + + let! stream = + let param = + Docker.Container.ContainerParams.InitContainerExecStartParameters( + AttachStderr=true, + AttachStdout=true, + AttachStdin=false, + Cmd=cmd + ) + Docker.Container.startContainerWithExecConfigAsync bc.Connection param execContainer.ID + + + let stdOutputStream = new System.IO.MemoryStream() + let streamTask = + stream.CopyOutputToAsync(null,stdOutputStream,null,CancellationToken.None) - return logs + do! streamTask |> Async.AwaitTask + + + let result = + stdOutputStream.Position <- 0L + readFrom stdOutputStream + + return result + } + + + + let disposeAsync (bc:BcContext) = + let param = Docker.Container.ContainerParams.InitContainerRemoveParameters(Force=true) + Docker.Container.removeContainerWithAsync bc.Connection param (Docker.DockerId.ContainerId bc.ContainerId) + + + //let runCmdAsync (connection:DockerClient) (dockerid: DockerId) cmd = + // // Function creates and deletes new container all the time + // // !maybe use Containers.StartWithConfigContainerExecAsync (Docker.DotNet.Models.ContainerExecStartParameters()) in the future + + // if not (Docker.Image.exists connection dockerid) then failwithf "Image %s does not exists! Please pull the image first." (dockerid.ToString()) + // async { + // let! container = + // let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=dockerid.ToString(),Cmd=cmd) + // Docker.Container.createContainerWithAsync connection param + + // let! isRunning = + // let param = Docker.Container.ContainerParams.InitContainerStartParameters() + // Docker.Container.startContainerWithAsync connection param container.ID + + // let! wait = + // Docker.Container.waitContainerAsync connection container.ID + + // let! logs = + // let param = Docker.Container.ContainerParams.InitContainerLogsParameters(ShowStdout=true) + // Docker.Container.getContainerLogsAsync connection param container.ID + + // do! Docker.Container.removeContainerAsync connection (DockerId.ContainerId container.ID) + + // return logs + // } diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index e84f9135..01b8aa06 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -21,113 +21,150 @@ open Docker.DotNet.Models let client = Docker.connect "npipe://./pipe/docker_engine" +let targetPimage = Docker.DockerId.ImageId "49639db2e20c" + +let bcContext = + BioContainer.initBcContextAsync client targetPimage + |> Async.RunSynchronously + + + +BioContainer.execAsync bcContext ["echo"; "hello you4";] +|> Async.RunSynchronously + + +// targetp -N /opt/targetP/test/one.fsa + + + + + + + + + + + + + + let cmd = ["bash"] //;"echo"; "hello world";] -let cmd' = ["echo"; "hello you";] +let cmd' = ["echo"; "hello you2";] let dockerid = (Docker.DockerId.ImageName "ubuntu") let connection = client let cont = "1940820e0486" let readFrom (stream:System.IO.Stream) = - let length = (stream.Length-1L) |> int + let length = (stream.Length) |> int let tmp : array = Array.zeroCreate length stream.Read(tmp,0,length) |> ignore System.Text.Encoding.UTF8.GetString(tmp,0,length) -// https://github.com/Microsoft/Docker.DotNet/issues/223 -> write -// https://github.com/Microsoft/Docker.DotNet/issues/212 -> read +Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId cont) +|> Async.RunSynchronously -//-i, --interactive=false Keep STDIN open even if not attached -//-t, --tty=false Allocate a pseudo-TTY -let container,exe = - async { - let! container = - let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=dockerid.ToString(),Cmd=cmd,OpenStdin=true) - Docker.Container.createContainerWithAsync connection param - - let! isRunning = - let param = - Docker.Container.ContainerParams.InitContainerStartParameters() - - Docker.Container.startContainerWithAsync connection param container.ID - - let! tmp = - let param = - Docker.Container.ContainerParams.InitContainerExecCreateParameters( - AttachStderr=true, - AttachStdout=true, - AttachStdin=false, - Cmd=cmd', - Detach=false, - Tty=true - ) - - Docker.Container.execCreateContainerAsync connection param (container.ID) - return container,tmp - } +//// https://github.com/Microsoft/Docker.DotNet/issues/223 -> write +//// https://github.com/Microsoft/Docker.DotNet/issues/212 -> read - |> Async.RunSynchronously +////-i, --interactive=false Keep STDIN open even if not attached +////-t, --tty=false Allocate a pseudo-TTY +//let exe = +// async { +// //let! container = +// // let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=dockerid.ToString(),Cmd=cmd,OpenStdin=true) +// // Docker.Container.createContainerWithAsync connection param + +// //let! isRunning = +// // let param = +// // Docker.Container.ContainerParams.InitContainerStartParameters() -////docker stop $(docker ps -a -q) +// // Docker.Container.startContainerWithAsync connection param container.ID -//Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId (container.ID)) -//|> Async.RunSynchronously +// let! execContainer = +// let param = +// Docker.Container.ContainerParams.InitContainerExecCreateParameters( +// AttachStderr=true, +// AttachStdout=true, +// AttachStdin=false, +// Cmd=cmd', +// Detach=false +// //Tty=false +// ) +// Docker.Container.execCreateContainerAsync connection param (cont) +// return tmp +// } -let ms = - async { +// |> Async.RunSynchronously - // Docker.Container.startContainerWithAsync connection param container.ID +//////docker stop $(docker ps -a -q) +////Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId (container.ID)) +////|> Async.RunSynchronously - let! isRunning1 = - let param1 = - Docker.Container.ContainerParams.InitContainerStartParameters() - Docker.Container.startContainerWithAsync connection param1 container.ID +//let ms = +// async { - let! isRunning = - let param = - Docker.Container.ContainerParams.InitContainerExecStartParameters( - AttachStderr=true, - AttachStdout=true, - AttachStdin=false, - Cmd=cmd' // cmd - ) - Docker.Container. startContainerExecAsync connection exe.ID // startContainerWithExecConfigAsync connection param container.ID +// let! execContainer = +// let param = +// Docker.Container.ContainerParams.InitContainerExecCreateParameters( +// AttachStderr=true, +// AttachStdout=true, +// AttachStdin=false, +// Cmd=cmd, +// Detach=false +// ) + +// Docker.Container.execCreateContainerAsync connection param (cont) + +// let! stream = +// let param = +// Docker.Container.ContainerParams.InitContainerExecStartParameters( +// AttachStderr=true, +// AttachStdout=true, +// AttachStdin=false, +// Cmd=cmd +// ) +// Docker.Container.startContainerWithExecConfigAsync connection param cont // startContainerExecAsync connection exe.ID // - let! stream = - let param = Docker.Container.ContainerParams.InitContainerAttachParameters (Stdout=true,Stderr=true,Stdin=false,Stream=true) - connection.Containers.AttachContainerAsync(exe.ID,true,param) - |> Async.AwaitTask - - let stdOutputStream = new System.IO.MemoryStream() - let streamTask = - stream.CopyOutputToAsync(null,stdOutputStream,null,CancellationToken.None) +// printfn "Start Exec" + +// //let stopParam = new ContainerStopParameters() +// //let! st = connection.Containers.StopContainerAsync(cont,stopParam) |> Async.AwaitTask + +// //printfn "Stop: %b" st + +// let stdOutputStream = new System.IO.MemoryStream() +// let streamTask = +// stream.CopyOutputToAsync(null,stdOutputStream,null,CancellationToken.None) - do! streamTask |> Async.AwaitTask +// do! streamTask |> Async.AwaitTask - let! wait = - Docker.Container.waitContainerAsync connection container.ID +// printfn "Streamed" - let result = - stdOutputStream.Position <- 0L - readFrom stdOutputStream +// //let! wait = +// // Docker.Container.waitContainerAsync connection container.ID + +// let result = +// stdOutputStream.Position <- 0L +// readFrom stdOutputStream - //do! Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId container.ID) +// //do! Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId container.ID) - return result +// return result - } - |> Async.RunSynchronously +// } +// |> Async.RunSynchronously @@ -224,10 +261,10 @@ let ms = -let tmp = - BioContainer.runCmdAsync client (Docker.DockerId.ImageName "ubuntu") ["echo"; "hello world"] - |> Async.RunSynchronously - |> readFrom +//let tmp = +// BioContainer.runCmdAsync client (Docker.DockerId.ImageName "ubuntu") ["echo"; "hello world"] +// |> Async.RunSynchronously +// |> readFrom diff --git a/src/BioFSharp.BioTools/Docker.fs b/src/BioFSharp.BioTools/Docker.fs index 98e18068..97141eef 100644 --- a/src/BioFSharp.BioTools/Docker.fs +++ b/src/BioFSharp.BioTools/Docker.fs @@ -124,7 +124,24 @@ module Docker = Tag |> Option.iter param.set_Tag param - + + ///// Creates ImageBuildParameters + //static member InitImageBuildParameters + // ( + // ?FromImage, + // ?FromSrc, + // ?Repo, + // ?Tag + // ) = + + // let param = new ImageBuildParameters() + + // FromImage |> Option.iter param.set_FromImage + // FromSrc |> Option.iter param.set_FromSrc + // Repo |> Option.iter param.set_Repo + // Tag |> Option.iter param.set_Tag + + // param /// Lists available images with ImagesListParameters for filtering (async) let listImagesWithAsync (connection:DockerClient) (param:ImagesListParameters) = @@ -163,7 +180,15 @@ module Docker = existsAsync connection dockerid |> Async.RunSynchronously - + /// Lists available images with ImagesListParameters for filtering (async) + let buildImageFromDockerfileAsync (connection:DockerClient) (param) (stream) = + // ImagesListParameters are only for filtering + async { + let! stream = + connection.Images.BuildImageFromDockerfileAsync(stream,param) + |> Async.AwaitTask + return stream + } //##################################################### //##################################################### @@ -197,6 +222,18 @@ module Docker = param + /// Creates ContainersListParameters for pre-filtering list function + static member InitContainerListParameters + ( + ?WaitBeforeKillSeconds + ) = + + let param = new ContainerStopParameters() + + WaitBeforeKillSeconds |> Option.iter (fun nv -> param.set_WaitBeforeKillSeconds (Nullable(nv))) + + param + /// Creates ContainerAttachParameters static member InitContainerAttachParameters ( @@ -543,11 +580,8 @@ module Docker = /// Removes container let removeContainerAsync (connection:DockerClient) (dockerid:DockerId) = let param = ContainerParams.InitContainerRemoveParameters() - async { - do! - connection.Containers.RemoveContainerAsync(dockerid.ToString(),param,CancellationToken.None) - |> Async.AwaitTask - } + removeContainerWithAsync connection param dockerid + /// Creates an container that will perform the execution (async). IMPORTANT: Start exec-container using StartContainerExecAsync let execCreateContainerAsync (connection:DockerClient) param id = @@ -567,6 +601,17 @@ module Docker = |> Async.AwaitTask } + /// Stops + let stopContainerAsync (connection:DockerClient) (param) id = + async { + let! isRunning = + connection.Containers.StopContainerAsync(id,param,CancellationToken.None) + |> Async.AwaitTask + return isRunning + } + + + //##################################################### //##################################################### //##################################################### From acdac185650aa0bd4189a5d651bc86a0a8bd0f6d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Fri, 1 Feb 2019 15:48:46 +0100 Subject: [PATCH 06/74] Add docker archive functions --- src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 35 ++++++++++++--- src/BioFSharp.BioTools/Docker.fs | 45 +++++++++++++++++++ 2 files changed, 75 insertions(+), 5 deletions(-) diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index 01b8aa06..8bf2704a 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -17,34 +17,53 @@ open System.Threading.Tasks open BioFSharp.BioTools open System.Collections.Generic open Docker.DotNet.Models +open System.IO let client = Docker.connect "npipe://./pipe/docker_engine" -let targetPimage = Docker.DockerId.ImageId "49639db2e20c" +let targetPimage = Docker.DockerId.ImageId "targetp" let bcContext = BioContainer.initBcContextAsync client targetPimage |> Async.RunSynchronously +let resp = + let param = Docker.Container.ContainerParams.InitGetArchiveFromContainerParameters(Path="/opt/targetP/test/one.fsa") + Docker.Container.getArchiveFromContainerAsync client param false bcContext.ContainerId //("81234502b363") + |> Async.RunSynchronously - -BioContainer.execAsync bcContext ["echo"; "hello you4";] -|> Async.RunSynchronously +//let stream = new MemoryStream() +let str = new StreamReader(resp.Stream) -// targetp -N /opt/targetP/test/one.fsa +str.ReadToEnd() +let input sourcePath targetPath = + //let inputStream = new FileStream(sourcePath,FileMode.Open) + let stream = new MemoryStream() + + //printfn "length: %i" stream.Length + let param = Docker.Container.ContainerParams.InitContainerPathStatParameters(Path=targetPath) + Docker.Container.extractArchiveToContainerAsync client param (bcContext.ContainerId ) resp.Stream + |> Async.Start +input "D:/myTest.fsa" "/tmp/myTest.fsa" +let result = + BioContainer.execAsync bcContext ["echo";"targetp"; "-N";"/tmp/myTest.fsa"] + |> Async.RunSynchronously +// targetp -N /opt/targetP/test/one.fsa +BioContainer.disposeAsync bcContext +|> Async.RunSynchronously @@ -69,6 +88,12 @@ Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId co |> Async.RunSynchronously + +//stream.Position <- 1L +//readFrom stream + + + //// https://github.com/Microsoft/Docker.DotNet/issues/223 -> write //// https://github.com/Microsoft/Docker.DotNet/issues/212 -> read diff --git a/src/BioFSharp.BioTools/Docker.fs b/src/BioFSharp.BioTools/Docker.fs index 97141eef..df16e632 100644 --- a/src/BioFSharp.BioTools/Docker.fs +++ b/src/BioFSharp.BioTools/Docker.fs @@ -427,6 +427,33 @@ module Docker = param + + /// Creates ContainerPathStatParameters + static member InitContainerPathStatParameters + ( + ?AllowOverwriteDirWithFile, + ?Path + ) = + + let param = new ContainerPathStatParameters() + AllowOverwriteDirWithFile |> Option.iter (fun v -> param.set_AllowOverwriteDirWithFile (Nullable(v) ) ) + Path |> Option.iter param.set_Path + + param + + + /// Creates ContainerPathStatParameters + static member InitGetArchiveFromContainerParameters + ( + ?Path + ) = + + let param = new GetArchiveFromContainerParameters() + Path |> Option.iter param.set_Path + + param + + /// Creates docker container with CreateContainerParameters for config (async) let createContainerWithAsync (connection:DockerClient) (param:CreateContainerParameters) = async { @@ -610,6 +637,24 @@ module Docker = return isRunning } + /// Writes stream into docker container + let extractArchiveToContainerAsync (connection:DockerClient) (param) id stream = + async { + let! isRunning = + connection.Containers.ExtractArchiveToContainerAsync(id,param,stream,CancellationToken.None) + |> Async.AwaitTask + return isRunning + } + + + /// + let getArchiveFromContainerAsync (connection:DockerClient) (param) statOnly id = + async { + let! isRunning = + connection.Containers.GetArchiveFromContainerAsync(id,param,statOnly,CancellationToken.None) + |> Async.AwaitTask + return isRunning + } //##################################################### From 41a7f51303379f4b75c22dbe6ce9545beaf5b7e0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Thu, 7 Feb 2019 15:44:48 +0100 Subject: [PATCH 07/74] Add targetP support --- .paket/paket.exe | Bin 64296 -> 64296 bytes paket.dependencies | 5 +- paket.lock | 873 +++++------------- src/BioFSharp.BioTools/BioContainer.fs | 45 +- src/BioFSharp.BioTools/BioContainerIO.fs | 76 ++ .../BioFSharp.BioTools.fsproj | 6 + src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 193 ++-- src/BioFSharp.BioTools/Docker.fs | 1 + src/BioFSharp.BioTools/TargetP.fs | 101 ++ src/BioFSharp.BioTools/paket.references | 5 + src/BioFSharp.BioTools/paket.template | 29 + src/BioFSharp.IO/FastA.fs | 14 +- 12 files changed, 571 insertions(+), 777 deletions(-) create mode 100644 src/BioFSharp.BioTools/BioContainerIO.fs create mode 100644 src/BioFSharp.BioTools/TargetP.fs create mode 100644 src/BioFSharp.BioTools/paket.references create mode 100644 src/BioFSharp.BioTools/paket.template diff --git a/.paket/paket.exe b/.paket/paket.exe index 2b166849ff7703ca2569b2279bd2b6309ab61065..e3da4d0b94b8039e6052e5b337e3436e524c4c25 100644 GIT binary patch delta 11144 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 J{ND4q{{xbZbZr0t delta 11111 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 s_3= 4.0.0.1) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= net45)) (&& (== netstandard2.0) (>= net45)) - FSharp.Core (>= 4.3.2) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Configuration.ConfigurationManager (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - BenchmarkDotNet (0.11.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - CommandLineParser (>= 2.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.CodeAnalysis.CSharp (>= 2.9) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.DotNet.PlatformAbstractions (>= 2.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.Win32.Registry (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Management (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks.Extensions (>= 4.5.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.ValueTuple (>= 4.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XmlSerializer (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Chessie (0.6) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FSharp.Core (>= 4.0.1.7-alpha) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - NETStandard.Library (>= 1.6) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - CommandLineParser (2.4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.0.0.1) - restriction: || (== net45) (== net47) (&& (== netstandard2.0) (>= net45)) + FSharp.Core (>= 4.3.2) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.Configuration.ConfigurationManager (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + BenchmarkDotNet (0.11.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + CommandLineParser (>= 2.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.CodeAnalysis.CSharp (>= 2.9) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.DotNet.PlatformAbstractions (>= 2.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.Win32.Registry (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Management (>= 4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Threading.Tasks.Extensions (>= 4.5.1) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.ValueTuple (>= 4.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Xml.XmlSerializer (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + CommandLineParser (2.4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) Docker.DotNet (3.125.2) Newtonsoft.Json (>= 9.0.1) - System.Buffers (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (== net47) (&& (== netcoreapp2.1) (>= net46)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netstandard2.0) (>= net46)) - System.Buffers (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (== net47) (&& (== netcoreapp2.1) (>= net46)) (&& (== netstandard2.0) (>= net46)) + System.Buffers (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (== net47) (&& (== netstandard2.0) (>= net46)) + System.Buffers (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (== net47) (&& (== netstandard2.0) (>= net46)) System.ValueTuple (>= 4.4) dotnet-fake (5.12) - clitool: true - Fake.Core.CommandLineParsing (>= 5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Fake.Runtime (>= 5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FSharp.Core (>= 4.5.4) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.App (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Mono.Cecil (>= 0.10.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Paket.Core (>= 5.193) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Expecto (8.7) - Argu (>= 5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Mono.Cecil (>= 0.10.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - Expecto.BenchmarkDotNet (8.7) - BenchmarkDotNet (>= 0.10.14) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Expecto.FsCheck (8.7) - Expecto (>= 8.7) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - FsCheck (>= 2.13) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Expecto (8.8) + Argu (>= 5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Mono.Cecil (>= 0.10.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netstandard2.0) + Expecto.BenchmarkDotNet (8.8) + BenchmarkDotNet (>= 0.10.14) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Expecto.FsCheck (8.8) + Expecto (>= 8.8) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + FsCheck (>= 2.13) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) Expecto.VisualStudio.TestAdapter (10.0.1) - version_in_path: true - Expecto (>= 8.0 < 9.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) - FSharp.Core (>= 4.0 < 5.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) - Microsoft.TestPlatform.ObjectModel (>= 15.0 < 16.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) - Mono.Cecil (>= 0.10 < 0.11) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) - Newtonsoft.Json (>= 10.0 < 11.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) - Fake.Core.CommandLineParsing (5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FParsec (>= 1.0.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Fake.Core.Context (5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Fake.Runtime (5.12) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Fake.Core.Context (>= 5.12) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - FSharp.Compiler.Service (>= 25.0.1) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - FSharp.Core (>= 4.3.4) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.DotNet.PlatformAbstractions (>= 2.1) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - Mono.Cecil (>= 0.10.1) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - Paket.Core (>= 5.193) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Loader (>= 4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - FParsec (1.0.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FSharp.Core (>= 4.2.3) - restriction: || (&& (== net45) (< net40) (>= netstandard1.6)) (&& (== net47) (< net40) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - NETStandard.Library (>= 1.6.1) - restriction: || (&& (== net45) (< net40) (>= netstandard1.6)) (&& (== net47) (< net40) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - FsCheck (2.13) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - FSharp.Core (>= 4.2.3) - restriction: || (&& (== net45) (>= net452)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - FSharp.Compiler.Service (25.0.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - FSharp.Core (>= 4.1.18) - System.Collections.Immutable (>= 1.5) - System.Diagnostics.Process (>= 4.1) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.TraceSource (>= 4.0) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Metadata (>= 1.6) - System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Loader (>= 4.0) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - FSharp.Core (4.5.4) + Expecto (>= 8.0 < 9.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) + FSharp.Core (>= 4.0 < 5.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) + Microsoft.TestPlatform.ObjectModel (>= 15.0 < 16.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) + Mono.Cecil (>= 0.10 < 0.11) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) + Newtonsoft.Json (>= 10.0 < 11.0) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) + FsCheck (2.13) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + FSharp.Core (>= 4.2.3) - restriction: || (&& (== net45) (>= net452)) (&& (== net45) (>= netstandard1.6)) (== net47) (== netstandard2.0) + FSharp.Core (4.6.1) FSharp.Data.TypeProviders (5.0.0.6) FSharp.Core (>= 3.1.2.5) FSharp.Plotly (1.1.21) - Microsoft.CodeAnalysis.Analyzers (2.6.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.CodeAnalysis.Common (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.CodeAnalysis.Analyzers (>= 2.6.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.AppContext (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Console (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.StackTrace (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Dynamic.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.IO.Compression (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Linq.Expressions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Numerics (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding.CodePages (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks.Parallel (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Thread (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.ValueTuple (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XPath.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.CodeAnalysis.CSharp (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.CodeAnalysis.Analyzers (2.6.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.CodeAnalysis.Common (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + Microsoft.CodeAnalysis.Analyzers (>= 2.6.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.AppContext (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Collections.Immutable (>= 1.5) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Console (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Diagnostics.FileVersionInfo (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Diagnostics.StackTrace (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Dynamic.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.IO.Compression (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Linq.Expressions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Reflection.Metadata (>= 1.6) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Runtime.Numerics (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Security.Cryptography.X509Certificates (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Text.Encoding.CodePages (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Threading.Tasks.Parallel (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Threading.Thread (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.ValueTuple (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Xml.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Xml.XPath.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + Microsoft.CodeAnalysis.CSharp (2.10) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) Microsoft.CodeAnalysis.Common (2.10) - Microsoft.DotNet.PlatformAbstractions (2.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.AppContext (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.0.11) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem (>= 4.0.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.TypeExtensions (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.DotNet.PlatformAbstractions (2.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) System.Runtime.InteropServices.RuntimeInformation (>= 4.0) - Microsoft.NETCore.App (2.2.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (2.2) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (2.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.TestPlatform.ObjectModel (15.9.0) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netstandard2.0) (>= net461)) - System.Reflection.Metadata (>= 1.3) - restriction: || (&& (== net45) (>= net451)) (&& (== net45) (>= netstandard1.5)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net451)) (== net47) (&& (== netcoreapp2.1) (>= net451)) (&& (== netstandard2.0) (>= net451)) - Microsoft.Win32.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.Win32.Registry (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + Microsoft.NETCore.Platforms (2.2) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netstandard2.0) + Microsoft.NETCore.Targets (2.1) - restriction: || (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.TestPlatform.ObjectModel (15.9.0) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) + System.Reflection.Metadata (>= 1.3) - restriction: || (&& (== net45) (>= net451)) (&& (== net45) (>= netstandard1.5)) (== net47) (== netstandard2.0) + System.Runtime.InteropServices.RuntimeInformation (>= 4.3) - restriction: || (&& (== net45) (>= net451)) (== net47) (&& (== netstandard2.0) (>= net451)) + Microsoft.Win32.Registry (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netstandard2.0) + System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinios)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netstandard2.0) Microsoft.Xaml (4.0.0.1) - Mono.Cecil (0.10.1) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - NETStandard.Library (2.0.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) + Mono.Cecil (0.10.3) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) Newtonsoft.Json (10.0.3) - version_in_path: true - Paket.Core (5.195.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Chessie (>= 0.6) - Mono.Cecil (>= 0.10.0-beta6) - Newtonsoft.Json (>= 10.0.3) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Net.Http.WinHttpHandler (>= 4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.ProtectedData (>= 4.4) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.native.System (4.3.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) - runtime.native.System.IO.Compression (4.3.2) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) - runtime.native.System.Net.Http (4.3.1) - restriction: || (&& (== net45) (== net47) (>= netstandard1.6)) (&& (== net45) (>= net461) (>= netstandard1.6)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1.1) - Microsoft.NETCore.Targets (>= 1.1.3) - runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) - runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.debian.8-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.debian.9-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.fedora.23-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.fedora.24-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.fedora.27-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.fedora.28-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.3) - runtime.opensuse.13.2-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.opensuse.42.1-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.opensuse.42.3-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.Apple (4.3.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.osx.10.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.rhel.7-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.ubuntu.14.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.ubuntu.16.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.ubuntu.16.10-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.ubuntu.18.04-x64.runtime.native.System.Security.Cryptography.OpenSsl (4.3.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) + SharpZipLib (1.1) SwaggerProvider (0.8.2) FSharp.Core (>= 4.0) Newtonsoft.Json (>= 10.0) - System.AppContext (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Buffers (4.5) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= net461) (< portable-net45+win8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.CodeDom (4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections.Concurrent (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections.Immutable (1.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Configuration.ConfigurationManager (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.ProtectedData (>= 4.5) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Permissions (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Console (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1.2) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.FileVersionInfo (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Metadata (>= 1.4.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Process (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.Win32.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.Win32.Registry (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Thread (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.ThreadPool (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.4)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.StackTrace (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Metadata (>= 1.4.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Tools (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.TraceSource (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Tracing (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Dynamic.Runtime (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq.Expressions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.ObjectModel (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization.Calendars (4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wp8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.Compression (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System.IO.Compression (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Buffers (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq.Expressions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.ObjectModel (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net47) (< net45) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.Lightweight (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45) (>= netstandard1.6)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Management (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.Win32.Registry (>= 4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.CodeDom (>= 4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (== netstandard2.0) - System.Memory (4.5.2) - restriction: || (&& (== net47) (== netcoreapp2.1)) (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) - System.Buffers (>= 4.4) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= monotouch)) (&& (== netcoreapp2.1) (>= net461)) (&& (== netcoreapp2.1) (< netcoreapp2.0)) (&& (== netcoreapp2.1) (< netstandard1.1)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netcoreapp2.1) (>= xamarinios)) (&& (== netcoreapp2.1) (>= xamarinmac)) (&& (== netcoreapp2.1) (>= xamarintvos)) (&& (== netcoreapp2.1) (>= xamarinwatchos)) (== netstandard2.0) - System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netcoreapp2.1) (>= net461)) (&& (== netcoreapp2.1) (< netcoreapp2.0)) (== netstandard2.0) - System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= monotouch)) (&& (== netcoreapp2.1) (>= net461)) (&& (== netcoreapp2.1) (< netcoreapp2.0)) (&& (== netcoreapp2.1) (< netstandard1.1)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netcoreapp2.1) (>= uap10.1)) (&& (== netcoreapp2.1) (>= xamarinios)) (&& (== netcoreapp2.1) (>= xamarinmac)) (&& (== netcoreapp2.1) (>= xamarintvos)) (&& (== netcoreapp2.1) (>= xamarinwatchos)) (== netstandard2.0) - System.Net.Http.WinHttpHandler (4.5.2) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Numerics.Vectors (4.5) - restriction: || (&& (== net47) (== netcoreapp2.1)) (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) - System.ObjectModel (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wp8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.IO (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.ILGeneration (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.Lightweight (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Reflection (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Extensions (4.3) - restriction: || (&& (== net45) (>= net461) (< netstandard1.1)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Metadata (1.6) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Collections.Immutable (>= 1.5) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= net45)) (&& (== netcoreapp2.1) (< netstandard1.1)) (&& (== netcoreapp2.1) (< netstandard2.0)) (== netstandard2.0) - System.Reflection.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.TypeExtensions (4.5.1) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Resources.ResourceManager (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= net462)) (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices.RuntimeInformation (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - runtime.native.System (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net47) (< net45)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< netstandard1.1)) (&& (== net47) (< net45)) (&& (== net47) (< netstandard1.1)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Loader (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.5)) (&& (== net47) (< net462)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.5)) (&& (== net47) (< net462)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.5)) (&& (== net47) (< net462)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Numerics (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.AccessControl (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Algorithms (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System.Security.Cryptography.Apple (>= 4.3.1) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) + System.AppContext (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Buffers (4.5) - restriction: || (&& (== net45) (>= net46)) (== net47) (== netstandard2.0) + System.Collections (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections.Concurrent (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Collections.Immutable (1.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Configuration.ConfigurationManager (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.Security.Cryptography.ProtectedData (>= 4.5) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net461) (>= netstandard2.0)) (== netstandard2.0) + System.Security.Permissions (>= 4.5) - restriction: || (&& (== net45) (>= monoandroid)) (&& (== net45) (>= monotouch)) (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (&& (== net45) (>= xamarinmac)) (&& (== net45) (>= xamarintvos)) (&& (== net45) (>= xamarinwatchos)) (== net47) (== netstandard2.0) + System.Console (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Diagnostics.Debug (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Diagnostics.FileVersionInfo (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) + System.Globalization (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) + System.IO.FileSystem (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) + System.Reflection.Metadata (>= 1.4.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) + System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0) + System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.Diagnostics.StackTrace (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Diagnostics.Tools (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Dynamic.Runtime (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Globalization (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.IO (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= net463)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.IO.Compression (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.IO.FileSystem (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.Linq (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Linq.Expressions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Management (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Memory (4.5.2) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.Buffers (>= 4.4) + System.Numerics.Vectors (>= 4.4) - restriction: || (&& (== net45) (>= net461)) (== net47) (== netstandard2.0) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) + System.Numerics.Vectors (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) + System.Reflection (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Reflection.Emit.Lightweight (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Reflection.Metadata (1.6) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Collections.Immutable (>= 1.5) + System.Reflection.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp1.1) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (< portable-net45+win8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Resources.ResourceManager (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime (4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Runtime.CompilerServices.Unsafe (4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netstandard2.0) + System.Runtime.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime.Handles (4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0) + System.Runtime.InteropServices (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) + System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) + System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= net462)) (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (== net47) (== netstandard2.0) + System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0) + System.Runtime.InteropServices.RuntimeInformation (4.3.0) - version_in_path: true, restriction: || (&& (== net45) (>= net461)) (== net47) (&& (== netstandard2.0) (>= net461)) + System.Runtime.Numerics (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.AccessControl (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netstandard2.0) + System.Security.Principal.Windows (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Security.Cryptography.Algorithms (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) System.IO (>= 4.3) - System.Resources.ResourceManager (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) System.Runtime (>= 4.3) - System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Numerics (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) System.Security.Cryptography.Encoding (>= 4.3) System.Security.Cryptography.Primitives (>= 4.3) - System.Text.Encoding (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Cng (4.5) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.Cryptography.Csp (4.3) - restriction: || (&& (== net45) (== net47) (>= netstandard1.6)) (&& (== net45) (>= net461) (>= netstandard1.6)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Algorithms (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.OpenSsl (4.5) - restriction: || (&& (== net45) (== net47) (>= netstandard1.6)) (&& (== net45) (>= net461) (>= netstandard1.6)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.ProtectedData (4.5) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.Cryptography.Primitives (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= net463)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= net463)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Security.Cryptography.ProtectedData (4.5) - restriction: || (&& (== net47) (< net45) (>= netstandard2.0)) (== netstandard2.0) System.Memory (>= 4.5) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (== netstandard2.0) - System.Security.Cryptography.X509Certificates (4.3.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System.Net.Http (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - runtime.native.System.Security.Cryptography.OpenSsl (>= 4.3.2) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - System.Collections (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization.Calendars (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Numerics (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Cryptography.X509Certificates (4.3.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) System.Security.Cryptography.Algorithms (>= 4.3) - System.Security.Cryptography.Cng (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Csp (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) System.Security.Cryptography.Encoding (>= 4.3) - System.Security.Cryptography.OpenSsl (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.6)) (&& (== net47) (< net46) (>= netstandard1.6)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Cryptography.Primitives (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46) (>= netstandard1.6)) (&& (== net47) (< netstandard1.3)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Permissions (4.5) - restriction: || (&& (== net47) (>= monoandroid) (>= netstandard2.0)) (&& (== net47) (>= monotouch) (>= netstandard2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (>= xamarinmac)) (&& (== net47) (>= netstandard2.0) (>= xamarintvos)) (&& (== net47) (>= netstandard2.0) (>= xamarinwatchos)) (== netcoreapp2.1) (== netstandard2.0) - System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Security.Principal.Windows (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 2.0) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Text.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding.CodePages (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 2.1.2) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.RegularExpressions (4.3) - restriction: || (&& (== net45) (>= net461) (< portable-net45+win8+wp8+wpa81)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (== netstandard2.0)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks.Extensions (4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (== net45) (== net47) (&& (== netcoreapp2.1) (>= net45)) (&& (== netcoreapp2.1) (< netstandard1.0)) (&& (== netcoreapp2.1) (< netstandard2.0)) (&& (== netcoreapp2.1) (>= wp8)) (== netstandard2.0) - System.Threading.Tasks.Parallel (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections.Concurrent (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Tracing (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Thread (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.ThreadPool (4.3) - restriction: || (&& (== net45) (>= netcoreapp2.0)) (&& (== net47) (>= netcoreapp2.0)) (== netcoreapp2.1) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) + System.Security.Permissions (4.5) - restriction: || (&& (== net47) (>= monoandroid) (>= netstandard2.0)) (&& (== net47) (>= monotouch) (>= netstandard2.0)) (&& (== net47) (< net45) (>= netstandard2.0)) (&& (== net47) (>= netstandard2.0) (>= xamarinmac)) (&& (== net47) (>= netstandard2.0) (>= xamarintvos)) (&& (== net47) (>= netstandard2.0) (>= xamarinwatchos)) (== netstandard2.0) + System.Security.AccessControl (>= 4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Security.Principal.Windows (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Text.Encoding (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Text.Encoding.CodePages (4.5.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0) + System.Text.Encoding.Extensions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Threading (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Threading.Tasks (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0) (< portable-net45+win8+wp8+wpa81)) (== net47) (== netstandard2.0) + Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0) + System.Threading.Tasks.Extensions (4.5.2) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Runtime.CompilerServices.Unsafe (>= 4.5.2) + System.Threading.Tasks.Parallel (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Threading.Thread (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) System.ValueTuple (4.5) - System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading.Tasks.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Tools (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XmlSerializer (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Emit.ILGeneration (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.Primitives (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Reflection.TypeExtensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Text.RegularExpressions (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XPath (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XPath.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Diagnostics.Debug (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Linq (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XDocument (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XPath.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (== netcoreapp2.1) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) - System.Collections (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Resources.ResourceManager (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Runtime.Extensions (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Threading (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.ReaderWriter (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) - System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netcoreapp2.1) (== netstandard2.0) + System.Xml.ReaderWriter (4.3.1) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Xml.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Xml.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Xml.XmlSerializer (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Xml.XPath (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Xml.XPath.XDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Xml.XPath.XmlDocument (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0)) + System.Xml.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) + System.Xml.XPath (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0) YamlDotNet (5.3) remote: paket-files/github.com/CSBiology/FSharp.Stats FSharp.Stats (0.0.13) diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs index 702ecff6..ee2f81c1 100644 --- a/src/BioFSharp.BioTools/BioContainer.fs +++ b/src/BioFSharp.BioTools/BioContainer.fs @@ -22,13 +22,6 @@ module BioContainer = let connect str = (new DockerClientConfiguration(new Uri(str)) ).CreateClient() - - let private readFrom (stream:System.IO.Stream) = - let length = (stream.Length) |> int - let tmp : array = Array.zeroCreate length - stream.Read(tmp,0,length) |> ignore - - System.Text.Encoding.UTF8.GetString(tmp,0,length) /// Runs a container of a specified image and keeps it running let initBcContextAsync (connection:DockerClient) (image: DockerId) = @@ -48,6 +41,7 @@ module BioContainer = } + /// Executes a command in the biocontainer context let execAsync (bc:BcContext) cmd = async { @@ -83,19 +77,52 @@ module BioContainer = let result = stdOutputStream.Position <- 0L - readFrom stdOutputStream + BioContainerIO.readFrom stdOutputStream return result } - + /// Disposes the biocontainer context (stops and removes the underlying container) let disposeAsync (bc:BcContext) = let param = Docker.Container.ContainerParams.InitContainerRemoveParameters(Force=true) Docker.Container.removeContainerWithAsync bc.Connection param (Docker.DockerId.ContainerId bc.ContainerId) + /// Copies file from a container (only single file is supported) + let getFileAsync (bc:BcContext) (filePath) = + async { + let param = Docker.Container.ContainerParams.InitGetArchiveFromContainerParameters(Path=filePath) + let! res = Docker.Container.getArchiveFromContainerAsync bc.Connection param false bc.ContainerId + return BioContainerIO.tarToStream res.Stream + } + + /// Puts a stream in a container (only single file is supported) + let putStreamAsync (bc:BcContext) (sourceStream:System.IO.Stream) targetFileName = + async { + let targetPath = BioContainerIO.directoryName targetFileName + let targetName = BioContainerIO.fileName targetFileName + + // ! Set the target filename as tar-entry name to make renameing possible + let stream = BioContainerIO.tarOfStream targetName sourceStream + + let param = Docker.Container.ContainerParams.InitContainerPathStatParameters(AllowOverwriteDirWithFile=true, Path=targetPath) + do! + Docker.Container.extractArchiveToContainerAsync bc.Connection param (bc.ContainerId ) stream + + sourceStream.Close() + } + + /// Copies file into a container (only single file is supported) + let putFileAsync (bc:BcContext) (sourceFileName:string) targetFileName = + async { + let fileStream = new System.IO.FileStream(sourceFileName,System.IO.FileMode.Open) + do! + putStreamAsync bc fileStream targetFileName + } + + //let runCmdAsync (connection:DockerClient) (dockerid: DockerId) cmd = // // Function creates and deletes new container all the time // // !maybe use Containers.StartWithConfigContainerExecAsync (Docker.DotNet.Models.ContainerExecStartParameters()) in the future diff --git a/src/BioFSharp.BioTools/BioContainerIO.fs b/src/BioFSharp.BioTools/BioContainerIO.fs new file mode 100644 index 00000000..e50f9d5d --- /dev/null +++ b/src/BioFSharp.BioTools/BioContainerIO.fs @@ -0,0 +1,76 @@ +namespace BioFSharp.BioTools + +open System +open System.Threading +open Docker.DotNet +open Docker.DotNet.Models + +/// BioContainer helper +module BioContainerIO = + + open ICSharpCode.SharpZipLib.GZip + open ICSharpCode.SharpZipLib.Tar + open System.IO + + let toUnixDirectorySeparator (filename:string) = + let dirSep = "/" + filename.Replace("\\", dirSep) + .TrimEnd(Path.DirectorySeparatorChar) + + + let directoryName (filename:string) = + let dirSep = Path.DirectorySeparatorChar + let tmp = filename.Split([|dirSep;'/'|]) + tmp + |> Seq.take (tmp.Length-1) + |> String.concat ("/") + |> fun s -> s + "/" + + let fileName (filename:string) = + let dirSep = Path.DirectorySeparatorChar + let tmp = filename.Split([|dirSep;'/'|]) + let last = tmp.Length-1 + if last > 0 then tmp.[last] else "" + + let readFrom (stream:System.IO.Stream) = + let length = (stream.Length) |> int + let tmp : array = Array.zeroCreate length + stream.Read(tmp,0,length) |> ignore + + System.Text.Encoding.UTF8.GetString(tmp,0,length) + + // Returns the first file as stream + let tarToStream inStream = + let tarIn = new TarInputStream(inStream) + if tarIn.GetNextEntry().IsDirectory then + tarIn.GetNextEntry() |> ignore + tarIn :> Stream + else + tarIn :> Stream + + + /// Returns a tar-archive MemoryStream (only one entry supported) + let tarOfStream (tarEntryName:string) (inputStream:Stream) = + let outStream = new MemoryStream() + let tarOutputStream = new TarOutputStream(outStream) + + let fileSize = inputStream.Length + let entry = TarEntry.CreateTarEntry(tarEntryName) + // Must set size, otherwise TarOutputStream will fail when output exceeds. + entry.Size <- fileSize + // Add the entry to the tar stream, before writing the data. + tarOutputStream.PutNextEntry(entry) + // this is copied from TarArchive.WriteEntryCore + let localBuffer : byte [] = Array.zeroCreate (32 * 1024) + let rec loop () = + let numRead = inputStream.Read(localBuffer, 0, localBuffer.Length) + if (numRead <= 0) then + tarOutputStream.CloseEntry() + else + tarOutputStream.Write(localBuffer, 0, numRead) + + loop () + tarOutputStream.IsStreamOwner <- false + tarOutputStream.Close() + outStream.Position <- 0L + outStream diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj index 2a4fb6cf..c28239d6 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj @@ -17,9 +17,15 @@ + + + + + + diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index 8bf2704a..ba3531ac 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -3,9 +3,16 @@ #r "../../packages/System.Buffers/lib/netstandard2.0/System.Buffers.dll" #r "../../packages/Docker.DotNet/lib/netstandard2.0/Docker.DotNet.dll" +#r "../../packages/SharpZipLib/lib/netstandard2.0/ICSharpCode.SharpZipLib.dll" + +#r "../../packages/SharpZipLib/lib/netstandard2.0/ICSharpCode.SharpZipLib.dll" +#r "../../packages/FSharpAux.IO/lib/netstandard2.0/FSharpAux.dll" +#r "../../packages/FSharpAux.IO/lib/netstandard2.0/FSharpAux.IO.dll" + #load "Docker.fs" +#load "BioContainerIO.fs" #load "BioContainer.fs" - +#load "TargetP.fs" open System.Threading open System.Threading @@ -20,79 +27,51 @@ open Docker.DotNet.Models open System.IO -let client = Docker.connect "npipe://./pipe/docker_engine" +open ICSharpCode.SharpZipLib.GZip +open ICSharpCode.SharpZipLib.Tar +open Newtonsoft.Json.Serialization +open System -let targetPimage = Docker.DockerId.ImageId "targetp" - -let bcContext = - BioContainer.initBcContextAsync client targetPimage - |> Async.RunSynchronously -let resp = - let param = Docker.Container.ContainerParams.InitGetArchiveFromContainerParameters(Path="/opt/targetP/test/one.fsa") - Docker.Container.getArchiveFromContainerAsync client param false bcContext.ContainerId //("81234502b363") - |> Async.RunSynchronously -//let stream = new MemoryStream() -let str = new StreamReader(resp.Stream) -str.ReadToEnd() - - -let input sourcePath targetPath = - //let inputStream = new FileStream(sourcePath,FileMode.Open) - let stream = new MemoryStream() - - //printfn "length: %i" stream.Length - let param = Docker.Container.ContainerParams.InitContainerPathStatParameters(Path=targetPath) - Docker.Container.extractArchiveToContainerAsync client param (bcContext.ContainerId ) resp.Stream - |> Async.Start - +let client = Docker.connect "npipe://./pipe/docker_engine" +let targetPimage = Docker.DockerId.ImageId "targetp" -input "D:/myTest.fsa" "/tmp/myTest.fsa" -let result = - BioContainer.execAsync bcContext ["echo";"targetp"; "-N";"/tmp/myTest.fsa"] - |> Async.RunSynchronously +let bcContext = + BioContainer.initBcContextAsync client targetPimage + |> Async.RunSynchronously -// targetp -N /opt/targetP/test/one.fsa +let stream = new FileStream("C:/tmp/myTest.fsa",FileMode.Open) +let res = TargetP.run bcContext (TargetP.NonPlant) stream BioContainer.disposeAsync bcContext -|> Async.RunSynchronously - - - +|> Async.Start -let cmd = ["bash"] //;"echo"; "hello world";] -let cmd' = ["echo"; "hello you2";] -let dockerid = (Docker.DockerId.ImageName "ubuntu") -let connection = client -let cont = "1940820e0486" +// " +//### targetp v1.1 prediction results ################################## +//Number of query sequences: 1 +//Cleavage site predictions not included. +//Using NON-PLANT networks. -let readFrom (stream:System.IO.Stream) = - let length = (stream.Length) |> int - let tmp : array = Array.zeroCreate length - stream.Read(tmp,0,length) |> ignore +//Name Len mTP SP other Loc RC +//---------------------------------------------------------------------- +//P11111; 1088 0.054 0.068 0.943 _ 1 +//" - System.Text.Encoding.UTF8.GetString(tmp,0,length) -Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId cont) -|> Async.RunSynchronously -//stream.Position <- 1L -//readFrom stream - - //// https://github.com/Microsoft/Docker.DotNet/issues/223 -> write //// https://github.com/Microsoft/Docker.DotNet/issues/212 -> read @@ -286,98 +265,98 @@ Docker.Container.removeContainerAsync connection (Docker.DockerId.ContainerId co -//let tmp = -// BioContainer.runCmdAsync client (Docker.DockerId.ImageName "ubuntu") ["echo"; "hello world"] -// |> Async.RunSynchronously -// |> readFrom +////let tmp = +//// BioContainer.runCmdAsync client (Docker.DockerId.ImageName "ubuntu") ["echo"; "hello world"] +//// |> Async.RunSynchronously +//// |> readFrom -Docker.Image.exists client (Docker.DockerId.ImageName "targetp_image") +//Docker.Image.exists client (Docker.DockerId.ImageName "targetp_image") -Docker.Image.listImages client -|> Seq.map (fun i -> i.ID ) -|> Seq.toArray +//Docker.Image.listImages client +//|> Seq.map (fun i -> i.ID ) +//|> Seq.toArray -Docker.Container.existsByImage client (Docker.DockerId.ImageName "targetp_image") +//Docker.Container.existsByImage client (Docker.DockerId.ImageName "targetp_image") -//ancestor=([:], or ) +////ancestor=([:], or ) -let filters = - Docker.Container.ContainerParams.InitContainerListParameters(All=true,Filters=Docker.Filters.InitContainerFilters(Ancestor=Docker.DockerId.ImageName "ubuntu")) +//let filters = +// Docker.Container.ContainerParams.InitContainerListParameters(All=true,Filters=Docker.Filters.InitContainerFilters(Ancestor=Docker.DockerId.ImageName "ubuntu")) -Docker.Container.listContainersWithAsync client filters -|> Async.RunSynchronously -|> Seq.map (fun x -> x.Command,x.Image,x.Labels) -|> Seq.toArray +//Docker.Container.listContainersWithAsync client filters +//|> Async.RunSynchronously +//|> Seq.map (fun x -> x.Command,x.Image,x.Labels) +//|> Seq.toArray -//client.Containers.StartWithConfigContainerExecAsync -let p = Docker.DotNet.Models.ContainerExecStartParameters() +////client.Containers.StartWithConfigContainerExecAsync +//let p = Docker.DotNet.Models.ContainerExecStartParameters() -let ap = Docker.DotNet.Models.ContainerAttachParameters() +//let ap = Docker.DotNet.Models.ContainerAttachParameters() -Docker.Container.existsByImage client (Docker.DockerId.ImageName "targetp_image") +//Docker.Container.existsByImage client (Docker.DockerId.ImageName "targetp_image") -let idtp = "61fbfbc30382e83dd585c99583c036ef8c5ced4eb10e1b274f199da6b6969588" +//let idtp = "61fbfbc30382e83dd585c99583c036ef8c5ced4eb10e1b274f199da6b6969588" -//let pipe = System.Uri("npipe://./pipe/docker_engine") +////let pipe = System.Uri("npipe://./pipe/docker_engine") -//let config = new DockerClientConfiguration(pipe) -//let client = config.CreateClient() +////let config = new DockerClientConfiguration(pipe) +////let client = config.CreateClient() -//let createByImage (client:DockerClient) imageName = -// async { -// let param = Models.CreateContainerParameters() -// param.Image <- imageName -// param.Cmd <- System.Collections.Generic.List(["echo"; "hello world"]) -// let! container = -// client.Containers.CreateContainerAsync (param,CancellationToken.None) -// |> Async.AwaitTask -// return container.ID -// } +////let createByImage (client:DockerClient) imageName = +//// async { +//// let param = Models.CreateContainerParameters() +//// param.Image <- imageName +//// param.Cmd <- System.Collections.Generic.List(["echo"; "hello world"]) +//// let! container = +//// client.Containers.CreateContainerAsync (param,CancellationToken.None) +//// |> Async.AwaitTask +//// return container.ID +//// } -//let result = -// async { -// let paramLog = Models.ContainerLogsParameters() // (Stdout = System.Nullable(true),Stdin = System.Nullable(true)) -// paramLog.ShowStdout <- System.Nullable(true) -// let paramRun = Models.ContainerStartParameters () +////let result = +//// async { +//// let paramLog = Models.ContainerLogsParameters() // (Stdout = System.Nullable(true),Stdin = System.Nullable(true)) +//// paramLog.ShowStdout <- System.Nullable(true) +//// let paramRun = Models.ContainerStartParameters () -// //let id = -// // "4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb" +//// //let id = +//// // "4243adc7f3832ea35bdaad79aabe86f8e1c54f5c3a799cc72e060a8402bc24cb" -// let! id = createByImage client "ubuntu" +//// let! id = createByImage client "ubuntu" -// let! isRunnig = -// client.Containers.StartContainerAsync(id,paramRun,CancellationToken.None) -// |> Async.AwaitTask +//// let! isRunnig = +//// client.Containers.StartContainerAsync(id,paramRun,CancellationToken.None) +//// |> Async.AwaitTask -// let! wait = -// client.Containers.WaitContainerAsync(id,CancellationToken.None) -// |> Async.AwaitTask +//// let! wait = +//// client.Containers.WaitContainerAsync(id,CancellationToken.None) +//// |> Async.AwaitTask -// let! logs = -// client.Containers.GetContainerLogsAsync (id,paramLog,CancellationToken.None) -// |> Async.AwaitTask +//// let! logs = +//// client.Containers.GetContainerLogsAsync (id,paramLog,CancellationToken.None) +//// |> Async.AwaitTask -// return logs -// } -// |> Async.RunSynchronously +//// return logs +//// } +//// |> Async.RunSynchronously -//let tmp : array = Array.zeroCreate 1024 -//result.Read(tmp,0,1024) +////let tmp : array = Array.zeroCreate 1024 +////result.Read(tmp,0,1024) -//System.Text.Encoding.UTF8.GetString(tmp,0,1024) +////System.Text.Encoding.UTF8.GetString(tmp,0,1024) diff --git a/src/BioFSharp.BioTools/Docker.fs b/src/BioFSharp.BioTools/Docker.fs index df16e632..9fb6fa8d 100644 --- a/src/BioFSharp.BioTools/Docker.fs +++ b/src/BioFSharp.BioTools/Docker.fs @@ -432,6 +432,7 @@ module Docker = static member InitContainerPathStatParameters ( ?AllowOverwriteDirWithFile, + // Target path (example: /tmp/) ?Path ) = diff --git a/src/BioFSharp.BioTools/TargetP.fs b/src/BioFSharp.BioTools/TargetP.fs new file mode 100644 index 00000000..98fba3dd --- /dev/null +++ b/src/BioFSharp.BioTools/TargetP.fs @@ -0,0 +1,101 @@ +namespace BioFSharp.BioTools + +open System +open System.IO +open System.Threading + + +// targetp -N /opt/targetP/test/one.fsa + + +module TargetP = + + open FSharpAux + open FSharpAux.IO + open FSharpAux.IO.SchemaReader.Attribute + + type TargetpCustomParams = + | CleavagePredictions + | CutOffChloroplast of float + | CutOffSecretory of float + | CutOffMitochondrial of float + | CutOffLocation of float + + static member make = function + | CleavagePredictions -> "-c" + | CutOffChloroplast v -> sprintf "-p %.2f" v + | CutOffSecretory v -> sprintf "-s %.2f" v + | CutOffMitochondrial v -> sprintf "-t %.2f" v + | CutOffLocation v -> sprintf "-o %.2f" v + + + type TargetpParams = + | NonPlant + | Plant + | NonPlantCustom of seq + | PlantCustom of seq + + static member makeCmd = function + | NonPlant -> ["-N"] + | Plant -> ["-P"] + | NonPlantCustom v -> + let tmp = + v |> Seq.map (fun p -> TargetpCustomParams.make p) |> Seq.toList + "-N"::tmp + | PlantCustom v -> + let tmp = + v |> Seq.map (fun p -> TargetpCustomParams.make p) |> Seq.toList + "-P"::tmp + + static member make = function + | NonPlant -> "-N" + | Plant -> "-P" + | NonPlantCustom v -> + let tmp = + v |> Seq.map (fun p -> TargetpCustomParams.make p) |> String.concat " " + sprintf "-N %s" tmp + | PlantCustom v -> + let tmp = + v |> Seq.map (fun p -> TargetpCustomParams.make p) |> String.concat " " + sprintf "-P %s" tmp + + + + type TargetpItem = + { + [] Name : string + [] Len : int + [] Mtp : float + [] SP : float + [] Other : float + [] Loc : string + [] RC : int + [] TPlen : string + } + + + let runAsync bcContext (opt:TargetpParams) (fsaStream:Stream) = + let tp = "targetp"::TargetpParams.makeCmd opt + let tmpFile = sprintf "/tmp/%A.fsa" (System.Guid.NewGuid()) + async { + do! + BioContainer.putStreamAsync bcContext fsaStream tmpFile + let! targepResult = + BioContainer.execAsync bcContext (tp@[tmpFile]) + //do! + // BioContainer.disposeAsync bcContext + + // CsV Reader + let skipLines = 1 + let skipLinesBeforeHeader = 6 //6 + let schemaMode = SchemaReader.Csv.Fill + let csvReader = SchemaReader.Csv.CsvReader(SchemaMode=schemaMode) + + return csvReader.ReadFromString(targepResult,'\t',true,skipLines, skipLinesBeforeHeader) + + } + + + let run bcContext (opt:TargetpParams) (fsaStream:Stream) = + runAsync bcContext opt fsaStream + |> Async.RunSynchronously diff --git a/src/BioFSharp.BioTools/paket.references b/src/BioFSharp.BioTools/paket.references new file mode 100644 index 00000000..a405df35 --- /dev/null +++ b/src/BioFSharp.BioTools/paket.references @@ -0,0 +1,5 @@ +FSharp.Core +FSharpAux +FSharpAux.IO +SharpZipLib +Docker.dotnet \ No newline at end of file diff --git a/src/BioFSharp.BioTools/paket.template b/src/BioFSharp.BioTools/paket.template new file mode 100644 index 00000000..71169896 --- /dev/null +++ b/src/BioFSharp.BioTools/paket.template @@ -0,0 +1,29 @@ +type file +id BioFSharp.BioTools +title + BioFSharp.BioTools +owners + Timo Mühlhaus +authors + Timo Mühlhaus +projectUrl + https://github.com/CSBiology/BioFSharp +iconUrl + https://raw.githubusercontent.com/CSBiology/BioFSharp/master/docs/files/img/logo.png +licenseUrl + https://github.com/CSBiology/BioFSharp/blob/master/LICENSE.txt +requireLicenseAcceptance + false +language + F# +copyright + Copyright 2017 +tags + bioinformatics F# fsharp +summary + BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio. +description + BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio. + +files + ../../bin/BioFSharp ==> lib diff --git a/src/BioFSharp.IO/FastA.fs b/src/BioFSharp.IO/FastA.fs index 448e64ff..c5621e37 100644 --- a/src/BioFSharp.IO/FastA.fs +++ b/src/BioFSharp.IO/FastA.fs @@ -5,6 +5,7 @@ open FSharpAux open FSharpAux.IO module FastA = + open System.IO /// Fasta item contains header and sequence type FastaItem<'a> = { @@ -56,8 +57,8 @@ module FastA = |> fromFileEnumerator converter - /// Writes FastaItem to file. Converter determines type of sequence by converting type -> char - let write (toString:'T -> char) (filePath:string) (data:seq>>) = + /// Writes FastaItem to stream. Converter determines type of sequence by converting type -> char + let writeToStreaam (toString:'T -> char) (stream:Stream) (data:seq>>) = let toChunks (w:System.IO.StreamWriter) (length:int) (source: seq<'T>) = use ie = source.GetEnumerator() let sourceIsEmpty = ref false @@ -80,11 +81,16 @@ module FastA = () loop () - use sWriter = new System.IO.StreamWriter(filePath,true) + use sWriter = new System.IO.StreamWriter(stream) data |> Seq.iter (fun (i:FastaItem<_>) -> sWriter.WriteLine(">" + i.Header) - toChunks sWriter 80 i.Sequence) + toChunks sWriter 80 i.Sequence) + + /// Writes FastaItem to file. Converter determines type of sequence by converting type -> char + let write (toString:'T -> char) (filePath:string) (data:seq>>) = + let file = new FileStream(filePath,FileMode.Append) + writeToStreaam toString file data /// Converts FastaItem to string. Converter determines type of sequence by converting type -> char From 7e9c1401539f10a30919abb3e588a327ffb7fb50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Thu, 7 Feb 2019 16:03:30 +0100 Subject: [PATCH 08/74] Small refactoring of BioContainer --- src/BioFSharp.BioTools/BioContainer.fs | 6 +++++- src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 16 ++-------------- src/BioFSharp.BioTools/TargetP.fs | 2 ++ 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs index ee2f81c1..d718513e 100644 --- a/src/BioFSharp.BioTools/BioContainer.fs +++ b/src/BioFSharp.BioTools/BioContainer.fs @@ -16,13 +16,17 @@ module BioContainer = ImageName : string ContainerId : string } - + /// Connect to docker engine (docker deamon) let connect str = (new DockerClientConfiguration(new Uri(str)) ).CreateClient() + /// Connect to default local docker engine (docker deamon: "npipe://./pipe/docker_engine") + //let connectLocalDefault () = + + /// Runs a container of a specified image and keeps it running let initBcContextAsync (connection:DockerClient) (image: DockerId) = if not (Docker.Image.exists connection image) then failwithf "Image %s does not exists! Please pull the image first." (string image ) diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index ba3531ac..475af065 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -37,15 +37,14 @@ open System let client = Docker.connect "npipe://./pipe/docker_engine" -let targetPimage = Docker.DockerId.ImageId "targetp" let bcContext = - BioContainer.initBcContextAsync client targetPimage + BioContainer.initBcContextAsync client TargetP.ImageTagetP |> Async.RunSynchronously -let stream = new FileStream("C:/tmp/myTest.fsa",FileMode.Open) +let stream = new FileStream("C:/tmp/twelve.fsa",FileMode.Open) let res = TargetP.run bcContext (TargetP.NonPlant) stream @@ -56,17 +55,6 @@ BioContainer.disposeAsync bcContext -// " -//### targetp v1.1 prediction results ################################## -//Number of query sequences: 1 -//Cleavage site predictions not included. -//Using NON-PLANT networks. - -//Name Len mTP SP other Loc RC -//---------------------------------------------------------------------- -//P11111; 1088 0.054 0.068 0.943 _ 1 -//" - diff --git a/src/BioFSharp.BioTools/TargetP.fs b/src/BioFSharp.BioTools/TargetP.fs index 98fba3dd..35093ef5 100644 --- a/src/BioFSharp.BioTools/TargetP.fs +++ b/src/BioFSharp.BioTools/TargetP.fs @@ -14,6 +14,8 @@ module TargetP = open FSharpAux.IO open FSharpAux.IO.SchemaReader.Attribute + let ImageTagetP = Docker.DockerId.ImageId "targetp" + type TargetpCustomParams = | CleavagePredictions | CutOffChloroplast of float From c93a93e5e487652ba7c2a2b6db1c1363f33d3253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Fri, 8 Feb 2019 00:32:18 +0100 Subject: [PATCH 09/74] Add docker host directory mount --- src/BioFSharp.BioTools/BioContainer.fs | 21 ++ src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 32 ++- src/BioFSharp.BioTools/Docker.fs | 211 +++++++++++++++++- 3 files changed, 260 insertions(+), 4 deletions(-) diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs index d718513e..d1458523 100644 --- a/src/BioFSharp.BioTools/BioContainer.fs +++ b/src/BioFSharp.BioTools/BioContainer.fs @@ -45,6 +45,27 @@ module BioContainer = } + /// Runs a container of a specified image and keeps it running. Bind mounts the host directory under /mnt/ (without ':' and lower letter). + let initBcContextWithMountAsync (connection:DockerClient) (image: DockerId) (hostdirectory:string) = + if not (Docker.Image.exists connection image) then failwithf "Image %s does not exists! Please pull the image first." (string image ) + async { + let! container = // volume bind + let hostdirectory' = hostdirectory |> BioContainerIO.toUnixDirectorySeparator + let target = sprintf "/mnt/%s" (hostdirectory'.ToLower().Replace(":","")) + let mount = Docker.Container.ContainerParams.InitMount(Type="bind",Source=hostdirectory',Target=target,ReadOnly=false) + let hc = Docker.Container.ContainerParams.InitHostConfig(Mounts=[mount]) + let param = Docker.Container.ContainerParams.InitCreateContainerParameters(HostConfig=hc,Image=string image,OpenStdin=true) + Docker.Container.createContainerWithAsync connection param + + let! isRunning = + let param = + Docker.Container.ContainerParams.InitContainerStartParameters() + + Docker.Container.startContainerWithAsync connection param container.ID + + return {Id=Guid.NewGuid();Connection=connection;ImageName=string image;ContainerId=container.ID} + } + /// Executes a command in the biocontainer context let execAsync (bc:BcContext) cmd = async { diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index 475af065..40b5f22c 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -33,12 +33,42 @@ open Newtonsoft.Json.Serialization open System +let param = Docker.DotNet.Models.HostConfig() let client = Docker.connect "npipe://./pipe/docker_engine" + +let ubuntu = Docker.ImageName "ubuntu" + +let bcContextUbuntu = + BioContainer.initBcContextWithMountAsync client ubuntu "C:/tmp" + |> Async.RunSynchronously + + + +BioContainer.disposeAsync bcContextUbuntu +|> Async.Start + + + + + + + + + + + + + + + + + + let bcContext = BioContainer.initBcContextAsync client TargetP.ImageTagetP |> Async.RunSynchronously @@ -55,7 +85,7 @@ BioContainer.disposeAsync bcContext - +res |> Seq.head |> fun tp -> tp.Mtp diff --git a/src/BioFSharp.BioTools/Docker.fs b/src/BioFSharp.BioTools/Docker.fs index 9fb6fa8d..818341ac 100644 --- a/src/BioFSharp.BioTools/Docker.fs +++ b/src/BioFSharp.BioTools/Docker.fs @@ -317,10 +317,214 @@ module Docker = param + /// Creates BindOptions + static member InitBindOptions + ( + ?Propagation + ) = + + let param = new BindOptions() + Propagation |> Option.iter param.set_Propagation + + param + + /// Creates VolumeOptions + static member InitVolumeOptions + ( + ?DriverConfig, + ?Labels, + ?NoCopy + ) = + + let param = new VolumeOptions() + DriverConfig |> Option.iter param.set_DriverConfig + Labels |> Option.iter param.set_Labels + NoCopy |> Option.iter param.set_NoCopy + + param + + /// Creates TmpfsOptions + static member InitTmpfsOptions + ( + ?Mode, + ?SizeBytes + ) = + + let param = new TmpfsOptions() + Mode |> Option.iter param.set_Mode + SizeBytes |> Option.iter param.set_SizeBytes + + param + + /// Creates Mount + static member InitMount + ( + ?Type , + ?Source , + ?Target , + ?ReadOnly , + ?BindOptions , + ?VolumeOptions , + ?TmpfsOptions + ) = + + let param = new Mount() + + Type |> Option.iter param.set_Type + Source |> Option.iter param.set_Source + Target |> Option.iter param.set_Target + ReadOnly |> Option.iter param.set_ReadOnly + BindOptions |> Option.iter param.set_BindOptions + VolumeOptions |> Option.iter param.set_VolumeOptions + TmpfsOptions |> Option.iter param.set_TmpfsOptions + + param + + /// Creates HostConfig + static member InitHostConfig + ( + ?ContainerIDFile , + ?LogConfig , + ?NetworkMode , + ?PortBindings , + ?RestartPolicy , + ?AutoRemove , + ?VolumeDriver , + ?VolumesFrom : seq, + ?CapAdd , + ?CapDrop : seq, + ?DNS : seq, + ?DNSOptions : seq, + ?DNSSearch : seq, + ?ExtraHosts : seq, + ?GroupAdd : seq, + ?IpcMode , + ?Cgroup , + ?Links : seq, + ?OomScoreAdj , + ?PidMode , + ?Privileged , + ?PublishAllPorts , + ?ReadonlyRootfs , + ?SecurityOpt : seq, + ?StorageOpt , + ?Tmpfs , + ?UTSMode , + ?UsernsMode , + ?ShmSize , + ?Sysctls , + ?Runtime , + ?ConsoleSize , + ?Isolation , + ?CPUShares , + ?Memory , + ?NanoCPUs , + ?CgroupParent , + ?BlkioWeight , + ?BlkioWeightDevice : seq<_>, + ?BlkioDeviceReadBps : seq<_>, + ?BlkioDeviceWriteBps : seq<_>, + ?BlkioDeviceReadIOps : seq<_>, + ?BlkioDeviceWriteIOps: seq<_>, + ?CPUPeriod , + ?CPUQuota , + ?CPURealtimePeriod , + ?CPURealtimeRuntime , + ?CpusetCpus , + ?CpusetMems , + ?Devices : seq<_>, + ?DiskQuota , + ?KernelMemory , + ?MemoryReservation , + ?MemorySwap , + ?MemorySwappiness , + ?OomKillDisable , + ?PidsLimit , + ?Ulimits : seq, + ?CPUCount , + ?CPUPercent , + ?IOMaximumIOps , + ?IOMaximumBandwidth , + ?Mounts : seq, + ?Init , + ?InitPath + ) = + + let param = new HostConfig() + + ContainerIDFile |> Option.iter param.set_ContainerIDFile + LogConfig |> Option.iter param.set_LogConfig + NetworkMode |> Option.iter param.set_NetworkMode + PortBindings |> Option.iter param.set_PortBindings + RestartPolicy |> Option.iter param.set_RestartPolicy + AutoRemove |> Option.iter param.set_AutoRemove + VolumeDriver |> Option.iter param.set_VolumeDriver + VolumesFrom |> Option.iter (fun v -> param.set_VolumesFrom (Collections.Generic.List(v)) ) + CapAdd |> Option.iter param.set_CapAdd + CapDrop |> Option.iter (fun v -> param.set_CapDrop (Collections.Generic.List(v)) ) + DNS |> Option.iter (fun v -> param.set_DNS (Collections.Generic.List(v)) ) + DNSOptions |> Option.iter (fun v -> param.set_DNSOptions (Collections.Generic.List(v)) ) + DNSSearch |> Option.iter (fun v -> param.set_DNSSearch (Collections.Generic.List(v)) ) + ExtraHosts |> Option.iter (fun v -> param.set_ExtraHosts (Collections.Generic.List(v)) ) + GroupAdd |> Option.iter (fun v -> param.set_GroupAdd (Collections.Generic.List(v)) ) + IpcMode |> Option.iter param.set_IpcMode + Cgroup |> Option.iter param.set_Cgroup + Links |> Option.iter (fun v -> param.set_Links (Collections.Generic.List(v)) ) + OomScoreAdj |> Option.iter param.set_OomScoreAdj + PidMode |> Option.iter param.set_PidMode + Privileged |> Option.iter param.set_Privileged + PublishAllPorts |> Option.iter param.set_PublishAllPorts + ReadonlyRootfs |> Option.iter param.set_ReadonlyRootfs + SecurityOpt |> Option.iter (fun v -> param.set_SecurityOpt (Collections.Generic.List(v)) ) + StorageOpt |> Option.iter param.set_StorageOpt + Tmpfs |> Option.iter param.set_Tmpfs + UTSMode |> Option.iter param.set_UTSMode + UsernsMode |> Option.iter param.set_UsernsMode + ShmSize |> Option.iter param.set_ShmSize + Sysctls |> Option.iter param.set_Sysctls + Runtime |> Option.iter param.set_Runtime + ConsoleSize |> Option.iter param.set_ConsoleSize + Isolation |> Option.iter param.set_Isolation + CPUShares |> Option.iter param.set_CPUShares + Memory |> Option.iter param.set_Memory + NanoCPUs |> Option.iter param.set_NanoCPUs + CgroupParent |> Option.iter param.set_CgroupParent + BlkioWeight |> Option.iter param.set_BlkioWeight + BlkioWeightDevice |> Option.iter (fun v -> param.set_BlkioWeightDevice (Collections.Generic.List(v)) ) + BlkioDeviceReadBps |> Option.iter (fun v -> param.set_BlkioDeviceReadBps (Collections.Generic.List(v)) ) + BlkioDeviceWriteBps |> Option.iter (fun v -> param.set_BlkioDeviceWriteBps (Collections.Generic.List(v)) ) + BlkioDeviceReadIOps |> Option.iter (fun v -> param.set_BlkioDeviceReadIOps (Collections.Generic.List(v)) ) + BlkioDeviceWriteIOps |> Option.iter (fun v -> param.set_BlkioDeviceWriteIOps (Collections.Generic.List(v)) ) + CPUPeriod |> Option.iter param.set_CPUPeriod + CPUQuota |> Option.iter param.set_CPUQuota + CPURealtimePeriod |> Option.iter param.set_CPURealtimePeriod + CPURealtimeRuntime |> Option.iter param.set_CPURealtimeRuntime + CpusetCpus |> Option.iter param.set_CpusetCpus + CpusetMems |> Option.iter param.set_CpusetMems + Devices |> Option.iter (fun v -> param.set_Devices (Collections.Generic.List(v)) ) + DiskQuota |> Option.iter param.set_DiskQuota + KernelMemory |> Option.iter param.set_KernelMemory + MemoryReservation |> Option.iter param.set_MemoryReservation + MemorySwap |> Option.iter param.set_MemorySwap + MemorySwappiness |> Option.iter (fun v -> param.set_MemorySwappiness (Nullable(v) ) ) + OomKillDisable |> Option.iter (fun v -> param.set_OomKillDisable (Nullable(v) ) ) + PidsLimit |> Option.iter param.set_PidsLimit + Ulimits |> Option.iter (fun v -> param.set_Ulimits (Collections.Generic.List(v)) ) + CPUCount |> Option.iter param.set_CPUCount + CPUPercent |> Option.iter param.set_CPUPercent + IOMaximumIOps |> Option.iter param.set_IOMaximumIOps + IOMaximumBandwidth |> Option.iter param.set_IOMaximumBandwidth + Mounts |> Option.iter (fun v -> param.set_Mounts (Collections.Generic.List(v)) ) + Init |> Option.iter (fun v -> param.set_Init (Nullable(v) ) ) + InitPath |> Option.iter param.set_InitPath + + param + /// Creates CreateContainerParameters static member InitCreateContainerParameters ( ?Hostname, + ?HostConfig, ?Domainname, ?User, ?AttachStdin, @@ -350,6 +554,7 @@ module Docker = let param = new CreateContainerParameters() Hostname |> Option.iter param.set_Hostname + HostConfig |> Option.iter param.set_HostConfig Domainname |> Option.iter param.set_Domainname User |> Option.iter param.set_User AttachStdin |> Option.iter param.set_AttachStdin @@ -374,7 +579,7 @@ module Docker = StopSignal |> Option.iter param.set_StopSignal StopTimeout |> Option.iter (fun v -> param.set_StopTimeout (Nullable(v) ) ) Shell |> Option.iter (fun v -> param.set_Shell (Collections.Generic.List(v)) ) - + param @@ -681,14 +886,14 @@ module Docker = DriverOpts |> Option.iter param.set_DriverOpts Labels |> Option.iter param.set_Labels Name |> Option.iter param.set_Name - + param /// Create volume with VolumesCreateParameters (async) let createAsync (connection:DockerClient) param = async { let! tmp = - connection.Volumes.CreateAsync(param,CancellationToken.None) + connection.Volumes. CreateAsync(param,CancellationToken.None) |> Async.AwaitTask return tmp From 6ba55166336bd2da332ef70e2b15ece2bf5be914 Mon Sep 17 00:00:00 2001 From: Kevin Schneider Date: Fri, 8 Feb 2019 13:10:39 +0100 Subject: [PATCH 10/74] Bump version to 0.013 - introduction of BioTools --- RELEASE_NOTES.md | 5 +++++ docsrc/content/release-notes.md | 5 +++++ src/BioFSharp.BioDB/AssemblyInfo.fs | 8 ++++---- src/BioFSharp.BioTools/AssemblyInfo.fs | 8 ++++---- src/BioFSharp.IO/AssemblyInfo.fs | 8 ++++---- src/BioFSharp.ImgP/AssemblyInfo.fs | 8 ++++---- src/BioFSharp.Parallel/AssemblyInfo.fs | 8 ++++---- src/BioFSharp.Stats/AssemblyInfo.fs | 8 ++++---- src/BioFSharp.Vis/AssemblyInfo.fs | 8 ++++---- src/BioFSharp/AssemblyInfo.fs | 8 ++++---- 10 files changed, 42 insertions(+), 32 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ead8fd79..2947fb79 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,3 +1,8 @@ +#### 0.0.13 - Friday, February 8, 2019 +* Addition of the BioTools project, which uses docker.dotnet to use docker images and stream their output to fsi +* Low level wrapping of multiple docker.dotnet functions for F# +* Basic functionality for using docker images from fsi + #### 0.0.12 - Friday, December 28, 2018 * Addition of Pretty Printers, SOFT Parser, GEOFTP functions * Improvement and refactoring of Modification functionality diff --git a/docsrc/content/release-notes.md b/docsrc/content/release-notes.md index ead8fd79..2947fb79 100644 --- a/docsrc/content/release-notes.md +++ b/docsrc/content/release-notes.md @@ -1,3 +1,8 @@ +#### 0.0.13 - Friday, February 8, 2019 +* Addition of the BioTools project, which uses docker.dotnet to use docker images and stream their output to fsi +* Low level wrapping of multiple docker.dotnet functions for F# +* Basic functionality for using docker images from fsi + #### 0.0.12 - Friday, December 28, 2018 * Addition of Pretty Printers, SOFT Parser, GEOFTP functions * Improvement and refactoring of Modification functionality diff --git a/src/BioFSharp.BioDB/AssemblyInfo.fs b/src/BioFSharp.BioDB/AssemblyInfo.fs index 4d0a8f68..541bf44c 100644 --- a/src/BioFSharp.BioDB/AssemblyInfo.fs +++ b/src/BioFSharp.BioDB/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp.BioDB" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp.BioTools/AssemblyInfo.fs b/src/BioFSharp.BioTools/AssemblyInfo.fs index a25b1bb8..ec6d8a04 100644 --- a/src/BioFSharp.BioTools/AssemblyInfo.fs +++ b/src/BioFSharp.BioTools/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp.BioTools" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp.IO/AssemblyInfo.fs b/src/BioFSharp.IO/AssemblyInfo.fs index 80e4f0e0..f037e3bf 100644 --- a/src/BioFSharp.IO/AssemblyInfo.fs +++ b/src/BioFSharp.IO/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp.IO" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp.ImgP/AssemblyInfo.fs b/src/BioFSharp.ImgP/AssemblyInfo.fs index 1552d967..aeedc13c 100644 --- a/src/BioFSharp.ImgP/AssemblyInfo.fs +++ b/src/BioFSharp.ImgP/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp.ImgP" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp.Parallel/AssemblyInfo.fs b/src/BioFSharp.Parallel/AssemblyInfo.fs index 3696cfe1..b56a4d7d 100644 --- a/src/BioFSharp.Parallel/AssemblyInfo.fs +++ b/src/BioFSharp.Parallel/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp.Parallel" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp.Stats/AssemblyInfo.fs b/src/BioFSharp.Stats/AssemblyInfo.fs index f9b5b50b..50c6e22c 100644 --- a/src/BioFSharp.Stats/AssemblyInfo.fs +++ b/src/BioFSharp.Stats/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp.Stats" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp.Vis/AssemblyInfo.fs b/src/BioFSharp.Vis/AssemblyInfo.fs index da9e47d5..f4a69a8b 100644 --- a/src/BioFSharp.Vis/AssemblyInfo.fs +++ b/src/BioFSharp.Vis/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp.Vis" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" diff --git a/src/BioFSharp/AssemblyInfo.fs b/src/BioFSharp/AssemblyInfo.fs index 360f9928..c77f16c1 100644 --- a/src/BioFSharp/AssemblyInfo.fs +++ b/src/BioFSharp/AssemblyInfo.fs @@ -5,8 +5,8 @@ open System.Reflection [] [] [")>] -[] -[] +[] +[] [] do () @@ -14,6 +14,6 @@ module internal AssemblyVersionInformation = let [] AssemblyTitle = "BioFSharp" let [] AssemblyProduct = "BioFSharp" let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. " - let [] AssemblyVersion = "0.0.12" - let [] AssemblyFileVersion = "0.0.12" + let [] AssemblyVersion = "0.0.13" + let [] AssemblyFileVersion = "0.0.13" let [] AssemblyConfiguration = "Release" From 807a64755ef47b5fb85717cc27014b1b8c8bb6f6 Mon Sep 17 00:00:00 2001 From: HLWeil Date: Fri, 8 Feb 2019 15:57:00 +0100 Subject: [PATCH 11/74] add comments to PeptideClassification --- src/BioFSharp/PeptideClassification.fs | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) diff --git a/src/BioFSharp/PeptideClassification.fs b/src/BioFSharp/PeptideClassification.fs index ea30635d..a02b3624 100644 --- a/src/BioFSharp/PeptideClassification.fs +++ b/src/BioFSharp/PeptideClassification.fs @@ -1,16 +1,17 @@ namespace BioFSharp -///Contains functions to classify peptides by their +///Contains functions to classify peptides based on their specificity when mapped to proteins module PeptideClassification = open FSharpAux open System.Collections.Generic + ///Direction of strand type StrandDirection = | Forward = 0 | Reverse = 1 - + /// Contains information about protein used to deduce its relation to other proteins type ProteinModelInfo<'id,'chromosomeId,'geneLocus when 'id: comparison and 'chromosomeId: comparison and 'geneLocus: comparison> = { Id : 'id ChromosomeId : 'chromosomeId @@ -21,7 +22,8 @@ module PeptideClassification = Orthologs : Set< ProteinModelInfo<'id,'chromosomeId,'geneLocus> > } - let createProteinModelInfo id chromosomeId strand geneLocus spliceVariantId seqEquivalents orthologs = { + /// Helper function to create ProteinModelInfo + let private createProteinModelInfo id chromosomeId strand geneLocus spliceVariantId seqEquivalents orthologs = { Id = id ChromosomeId = chromosomeId Strand = strand @@ -31,26 +33,29 @@ module PeptideClassification = Orthologs = Set.ofSeq orthologs } + /// Contains protein sequence and information about protein used to deduce its relation to other proteins type ProteinModel<'id,'chromosomeId,'geneLocus,'sequence when 'id: comparison and 'chromosomeId: comparison and 'geneLocus: comparison and 'sequence: comparison> = { ProteinModelInfo : ProteinModelInfo<'id,'chromosomeId,'geneLocus> Sequence : 'sequence } - - let createProteinModel proteinModelInfo sequence = + /// Helper function + let private createProteinModel proteinModelInfo sequence = {ProteinModelInfo=proteinModelInfo;Sequence=sequence} - + /// A marker for unambiguity of a peptide in protein inference type PeptideEvidenceClass = | Unknown = 0 + //Maps to exactly one isoform of one protein | C1a = 1 + //Maps to different isoforms of one protein | C1b = 2 | C2a = 3 | C2b = 4 | C3a = 5 | C3b = 6 - + /// Creates a lookup data base to assign peptides to the proteins they are contained in let createPeptideProteinRelation digest (protModels:seq option>) = let ppRelation = BidirectionalDictionary<'sequence,ProteinModelInfo<'id,'chromosomeId,'geneLocus>>() protModels @@ -80,7 +85,7 @@ module PeptideClassification = ) gLocusToSplVarNr - + ///Assigns a PeptideEvidenceClass to the peptide by using the information given through lookup and proteinInfos let classify (lookUp:Dictionary<'geneLocus,int>) (peptide,proteinInfos:seq>) = let isGeneUnambiguous (pmi:seq< ProteinModelInfo<'id,'chromosomeId,'geneLocus> >) = From 884e5f33a8e75c4dbfb257016334896a5e972c3e Mon Sep 17 00:00:00 2001 From: HLWeil Date: Fri, 8 Feb 2019 15:58:17 +0100 Subject: [PATCH 12/74] move localsDocs destination to temp/localDocs --- build.fsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.fsx b/build.fsx index ceb9d8ad..d8513991 100644 --- a/build.fsx +++ b/build.fsx @@ -440,7 +440,7 @@ Target.create "ReleaseDocs" (fun _ -> ) Target.create "ReleaseLocal" (fun _ -> - let tempDocsDir = "temp/gh-pages" + let tempDocsDir = "temp/localDocs" Shell.cleanDir tempDocsDir |> ignore Shell.copyRecursive "docs" tempDocsDir true |> printfn "%A" Shell.replaceInFiles From eb7aa2c26d4d03b981d97239fbd0d433e9bdc65c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Fri, 8 Feb 2019 16:11:37 +0100 Subject: [PATCH 13/74] Fix: Biocontainer mount convention --- src/BioFSharp.BioTools/BioContainer.fs | 8 ++++---- src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 3 --- src/BioFSharp.BioTools/TargetP.fs | 2 +- 3 files changed, 5 insertions(+), 8 deletions(-) diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs index d1458523..d138c293 100644 --- a/src/BioFSharp.BioTools/BioContainer.fs +++ b/src/BioFSharp.BioTools/BioContainer.fs @@ -32,7 +32,7 @@ module BioContainer = if not (Docker.Image.exists connection image) then failwithf "Image %s does not exists! Please pull the image first." (string image ) async { let! container = - let param = Docker.Container.ContainerParams.InitCreateContainerParameters(Image=string image,OpenStdin=true) + let param = Docker.Container.ContainerParams.InitCreateContainerParameters(User="root",Image=string image,OpenStdin=true) Docker.Container.createContainerWithAsync connection param let! isRunning = @@ -45,16 +45,16 @@ module BioContainer = } - /// Runs a container of a specified image and keeps it running. Bind mounts the host directory under /mnt/ (without ':' and lower letter). + /// Runs a container of a specified image and keeps it running. Bind mounts the host directory under /data/ (without ':' and lower letter according to BioContainer standards). let initBcContextWithMountAsync (connection:DockerClient) (image: DockerId) (hostdirectory:string) = if not (Docker.Image.exists connection image) then failwithf "Image %s does not exists! Please pull the image first." (string image ) async { let! container = // volume bind let hostdirectory' = hostdirectory |> BioContainerIO.toUnixDirectorySeparator - let target = sprintf "/mnt/%s" (hostdirectory'.ToLower().Replace(":","")) + let target = sprintf "/data/%s" (hostdirectory'.ToLower().Replace(":","")) let mount = Docker.Container.ContainerParams.InitMount(Type="bind",Source=hostdirectory',Target=target,ReadOnly=false) let hc = Docker.Container.ContainerParams.InitHostConfig(Mounts=[mount]) - let param = Docker.Container.ContainerParams.InitCreateContainerParameters(HostConfig=hc,Image=string image,OpenStdin=true) + let param = Docker.Container.ContainerParams.InitCreateContainerParameters(User="root",HostConfig=hc,Image=string image,OpenStdin=true) Docker.Container.createContainerWithAsync connection param let! isRunning = diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index 40b5f22c..eee3b0fa 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -33,9 +33,6 @@ open Newtonsoft.Json.Serialization open System -let param = Docker.DotNet.Models.HostConfig() - - let client = Docker.connect "npipe://./pipe/docker_engine" diff --git a/src/BioFSharp.BioTools/TargetP.fs b/src/BioFSharp.BioTools/TargetP.fs index 35093ef5..90e6e253 100644 --- a/src/BioFSharp.BioTools/TargetP.fs +++ b/src/BioFSharp.BioTools/TargetP.fs @@ -78,7 +78,7 @@ module TargetP = let runAsync bcContext (opt:TargetpParams) (fsaStream:Stream) = let tp = "targetp"::TargetpParams.makeCmd opt - let tmpFile = sprintf "/tmp/%A.fsa" (System.Guid.NewGuid()) + let tmpFile = sprintf "/data/%A.fsa" (System.Guid.NewGuid()) async { do! BioContainer.putStreamAsync bcContext fsaStream tmpFile From 2a44c290d30ae800cda6a04ce3108984643cfb21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= Date: Fri, 8 Feb 2019 16:14:09 +0100 Subject: [PATCH 14/74] Add default connection --- src/BioFSharp.BioTools/BioContainer.fs | 11 ++++++++++- src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 5 +---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs index d718513e..0afb5fcd 100644 --- a/src/BioFSharp.BioTools/BioContainer.fs +++ b/src/BioFSharp.BioTools/BioContainer.fs @@ -24,7 +24,10 @@ module BioContainer = /// Connect to default local docker engine (docker deamon: "npipe://./pipe/docker_engine") - //let connectLocalDefault () = + let connectLocalDefault () = + // TODO: Use System.Runtime.InteropServices.RuntimeInformation.IsOSPlatform(OSPlatform.Linux) + connect "npipe://./pipe/docker_engine" + /// Runs a container of a specified image and keeps it running @@ -45,6 +48,12 @@ module BioContainer = } + /// Runs a container of a specified image and keeps it running on the local default docker engine + let initBcContextLocalDefaultAsync (image: DockerId) = + let client = connectLocalDefault () + initBcContextAsync client image + + /// Executes a command in the biocontainer context let execAsync (bc:BcContext) cmd = async { diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx index 475af065..9c1460bd 100644 --- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx +++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx @@ -36,11 +36,8 @@ open System -let client = Docker.connect "npipe://./pipe/docker_engine" - - let bcContext = - BioContainer.initBcContextAsync client TargetP.ImageTagetP + BioContainer.initBcContextLocalDefaultAsync TargetP.ImageTagetP |> Async.RunSynchronously From d6e1371f0fa05ee2c9632feece949d02ef8dd58b Mon Sep 17 00:00:00 2001 From: Kevin Schneider Date: Fri, 8 Feb 2019 17:37:44 +0100 Subject: [PATCH 15/74] fix typo in blast docs --- docsrc/content/BlastWrapper.fsx | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/docsrc/content/BlastWrapper.fsx b/docsrc/content/BlastWrapper.fsx index ab7937c4..ef72c731 100644 --- a/docsrc/content/BlastWrapper.fsx +++ b/docsrc/content/BlastWrapper.fsx @@ -202,11 +202,10 @@ let outputPath = (__SOURCE_DIRECTORY__ + "/data/Output.txt") (*** do-not-eval ***) BlastWrapper(ncbiPath).blastP inputFile queryFastaPath outputPath ([customOutputFormat;] |> seq) -(** - As you can see in the result file, the format is tab separated and contains the fields we specified in our our `customOutputFormat`. -*) (** +As you can see in the result file, the format is tab separated and contains the fields we specified in our our `customOutputFormat`. +
 |# BLASTP 2.2.31+
 |# Query: >gi|7525013|ref|NP_051039.1| photosystem II protein D1 (chloroplast) [Arabidopsis thaliana]

From dd2401e619aa6cc027b3f85b32ff3ad254ee32c6 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= 
Date: Mon, 11 Feb 2019 17:23:02 +0100
Subject: [PATCH 16/74] Add MountInfo in BcContext

---
 src/BioFSharp.BioTools/BioContainer.fs | 33 ++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs
index 81618b77..96ee1cdf 100644
--- a/src/BioFSharp.BioTools/BioContainer.fs
+++ b/src/BioFSharp.BioTools/BioContainer.fs
@@ -10,11 +10,34 @@ module BioContainer =
     
     open Docker
 
+    //[]
+    type MountInfo =        
+        | NoMount        
+        | HostDir of string
+        
+        override this.ToString() =
+            match this with
+            | NoMount              -> "NoMount"
+            | HostDir _ -> sprintf "%s:%s" (MountInfo.getHostDir this) (MountInfo.getContainerPath this)      
+         
+
+        static member getContainerPath (hd:MountInfo) =
+            match hd with
+            | NoMount              -> failwithf "No mount directory set."
+            | HostDir hostdirectory -> sprintf "/data/%s" (hostdirectory.ToLower().Replace(":",""))
+
+        static member getHostDir (hd:MountInfo) =
+            match hd with
+            | NoMount              -> failwithf "No mount directory set."
+            | HostDir hostdirectory -> hostdirectory |> BioContainerIO.toUnixDirectorySeparator 
+
+
     type BcContext = {
         Id          : Guid
         Connection  : DockerClient
         ImageName   : string
         ContainerId : string
+        Mount       : MountInfo
         }
         
    
@@ -44,7 +67,7 @@ module BioContainer =
 
                 Docker.Container.startContainerWithAsync connection param container.ID
                 
-            return {Id=Guid.NewGuid();Connection=connection;ImageName=string image;ContainerId=container.ID}
+            return {Id=Guid.NewGuid();Connection=connection;ImageName=string image;ContainerId=container.ID;Mount=MountInfo.NoMount}
             } 
 
 
@@ -57,10 +80,12 @@ module BioContainer =
     /// Runs a container of a specified image and keeps it running. Bind mounts the host directory under /data/ (without ':' and lower letter according to BioContainer standards).
     let initBcContextWithMountAsync (connection:DockerClient) (image: DockerId) (hostdirectory:string) =
         if not (Docker.Image.exists connection image) then failwithf "Image %s does not exists! Please pull the image first." (string image )    
+        let hd = MountInfo.HostDir hostdirectory
         async {
             let! container = // volume  bind
-                let hostdirectory' = hostdirectory |> BioContainerIO.toUnixDirectorySeparator 
-                let target = sprintf "/data/%s" (hostdirectory'.ToLower().Replace(":",""))
+                
+                let hostdirectory' = MountInfo.getHostDir hd 
+                let target = MountInfo.getContainerPath hd  //sprintf "/data/%s" (hostdirectory'.ToLower().Replace(":",""))
                 let mount = Docker.Container.ContainerParams.InitMount(Type="bind",Source=hostdirectory',Target=target,ReadOnly=false)
                 let hc    = Docker.Container.ContainerParams.InitHostConfig(Mounts=[mount])
                 let param = Docker.Container.ContainerParams.InitCreateContainerParameters(User="root",HostConfig=hc,Image=string image,OpenStdin=true)
@@ -72,7 +97,7 @@ module BioContainer =
 
                 Docker.Container.startContainerWithAsync connection param container.ID
                 
-            return {Id=Guid.NewGuid();Connection=connection;ImageName=string image;ContainerId=container.ID}
+            return {Id=Guid.NewGuid();Connection=connection;ImageName=string image;ContainerId=container.ID;Mount=hd}
             } 
 
     /// Executes a command in the biocontainer context

From bbdcab1849cfa8c23016bf155fe3ce8519c12ebf Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 12 Feb 2019 17:30:21 +0100
Subject: [PATCH 17/74] Add biocontainers/blast docker API acces: - Add
 windows/unix path conversions and subpath matching to MounInto in
 BioContainer.fs - Add execReturnAsync (returns stdout of docker container)
 and execAsync (redirects stdout/stderr of container) to BioContainer.fs - Add
 Blast parameter wrapping and command generation for blast container

---
 src/BioFSharp.BioTools/BioContainer.fs        | 134 +++++-
 src/BioFSharp.BioTools/BioContainerIO.fs      |   3 +-
 .../BioFSharp.BioTools.fsproj                 |   1 +
 src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 383 ++++++++++++++++--
 src/BioFSharp.BioTools/Blast.fs               | 232 +++++++++++
 src/BioFSharp.BioTools/TargetP.fs             |   2 +-
 6 files changed, 703 insertions(+), 52 deletions(-)
 create mode 100644 src/BioFSharp.BioTools/Blast.fs

diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs
index 96ee1cdf..e28a03a8 100644
--- a/src/BioFSharp.BioTools/BioContainer.fs
+++ b/src/BioFSharp.BioTools/BioContainer.fs
@@ -9,6 +9,7 @@ open Docker.DotNet.Models
 module BioContainer =
     
     open Docker
+    open System.IO
 
     //[]
     type MountInfo =        
@@ -20,16 +21,70 @@ module BioContainer =
             | NoMount              -> "NoMount"
             | HostDir _ -> sprintf "%s:%s" (MountInfo.getHostDir this) (MountInfo.getContainerPath this)      
          
-
+        ///get the full mounted unix path used in the container 
         static member getContainerPath (hd:MountInfo) =
             match hd with
-            | NoMount              -> failwithf "No mount directory set."
-            | HostDir hostdirectory -> sprintf "/data/%s" (hostdirectory.ToLower().Replace(":",""))
-
+            | NoMount               -> failwithf "No mount directory set."
+            | HostDir hostdirectory -> 
+                if hostdirectory.Contains(" ") then 
+                    failwithf "paths mounted to docker cannot contain spaces.\r\nThe path %s contains spaces." hostdirectory
+                else
+                    sprintf "/data/%s" ((Path.GetFullPath(hostdirectory).Replace(":","")) |> BioContainerIO.toUnixDirectorySeparator )
+
+        ///get the path of the windows host directory used to mount in the container
         static member getHostDir (hd:MountInfo) =
             match hd with
-            | NoMount              -> failwithf "No mount directory set."
-            | HostDir hostdirectory -> hostdirectory |> BioContainerIO.toUnixDirectorySeparator 
+            | NoMount               -> failwithf "No mount directory set."
+            | HostDir hostdirectory -> Path.GetFullPath (hostdirectory)
+
+        ///get the container full mounted unix path of a file in a subfolder of the mounted host directory
+        static member containerPathOf (m:MountInfo) (filePath:string) =
+            let winDir          = MountInfo.getHostDir m
+
+            let containerBase   = MountInfo.getContainerPath m
+
+            printfn "Input filePath: %s" filePath
+            //spaces not supported in unix paths
+            if filePath.Contains(" ") then
+                failwithf "paths mounted to docker cannot contain spaces.\r\nThe path %s contains spaces." filePath
+            else
+                //the given path is relative
+                if filePath.StartsWith(".") then
+                    printfn "Path is relative"
+                    let fullFilePath = 
+                        //get absolute combined path
+                        Path.Combine(containerBase,filePath)
+                        |> Path.GetFullPath
+                        |> BioContainerIO.toUnixDirectorySeparator
+
+                    //check that combined path does not go above base (eg base/../../)
+                    if (fullFilePath.StartsWith(containerBase)) then
+                        printfn "Relative Path is correct"
+                        fullFilePath |> BioContainerIO.toUnixDirectorySeparator
+                    else
+                        failwithf ("the relative path \r\n%s\r\n escapes the scope of the container base path \r\n%s\r\n. the combined path is:\r\n%s\r\n") filePath containerBase fullFilePath
+
+                else
+                    printfn "Path is absolute"
+                    //Path is not relative. Use Path functions to resolve ../ and check if absolute path is a subpath of the windows base path
+                    printfn "filePath: %s" filePath
+                    let fullFilePath = filePath |> Path.GetFullPath
+                    printfn "fullPath: %s" fullFilePath
+                    if fullFilePath.StartsWith(winDir) then
+                        printfn "Full file path is subpath"
+                        //if absolute windows path is correct, replace it with the containerbase
+                        fullFilePath.Replace(winDir,containerBase)
+                        |> fun x -> x.Replace(":","")
+                        |> BioContainerIO.toUnixDirectorySeparator
+                    else 
+                        failwithf "The given path \r\n%s\r\n is not a subpath of the mounted host directory \r\n%s\r\n. If you want to use relative paths start them with ./" fullFilePath winDir
+                        
+
+
+            
+
+
+            
 
 
     type BcContext = {
@@ -100,8 +155,8 @@ module BioContainer =
             return {Id=Guid.NewGuid();Connection=connection;ImageName=string image;ContainerId=container.ID;Mount=hd}
             } 
 
-    /// Executes a command in the biocontainer context
-    let execAsync (bc:BcContext) cmd =
+    /// Executes a command in the biocontainer context and returns the either the standard output of the container or the standard error of the container if stdout is empty
+    let execReturnAsync (bc:BcContext) cmd =
         async {
         
             let! execContainer =
@@ -128,19 +183,76 @@ module BioContainer =
 
 
             let stdOutputStream = new System.IO.MemoryStream()
+            let stdErrStream = new System.IO.MemoryStream()
             let streamTask =
-                stream.CopyOutputToAsync(null,stdOutputStream,null,CancellationToken.None)             
+                stream.CopyOutputToAsync(null,stdOutputStream,stdErrStream,CancellationToken.None)             
                 
             do! streamTask |> Async.AwaitTask
 
 
             let result =        
-                stdOutputStream.Position <- 0L
-                BioContainerIO.readFrom stdOutputStream
+                if stdOutputStream.Length < 1L then
+                    stdErrStream.Position <- 0L
+                    BioContainerIO.readFrom stdErrStream
+                else
+                    stdOutputStream.Position <- 0L
+                    BioContainerIO.readFrom stdOutputStream
                     
+            if stdErrStream.Length > 0L then
+                stdErrStream.Position <- 0L
+                System.Console.Error.Write(BioContainerIO.readFrom stdErrStream)
+
             return result
     
         } 
+  
+    ///Executes a command in the biocontainer context. Passes stdout and stderr of the container to stoud/stderr.
+    let execAsync (bc:BcContext) cmd =
+        async {
+        
+            let! execContainer =
+                let param = 
+                    Docker.Container.ContainerParams.InitContainerExecCreateParameters(                                        
+                        AttachStderr=true,
+                        AttachStdout=true,                
+                        AttachStdin=false,
+                        Cmd=cmd,
+                        Detach=false                    
+                        )
+
+                Docker.Container.execCreateContainerAsync bc.Connection param (bc.ContainerId)
+
+            let! stream =
+                let param = 
+                    Docker.Container.ContainerParams.InitContainerExecStartParameters(
+                        AttachStderr=true,
+                        AttachStdout=true,                
+                        AttachStdin=false,                   
+                        Cmd=cmd
+                        )                
+                Docker.Container.startContainerWithExecConfigAsync bc.Connection param execContainer.ID
+
+
+            let stdOutputStream = new System.IO.MemoryStream()
+            let stdErrStream = new System.IO.MemoryStream()
+            let streamTask =
+                stream.CopyOutputToAsync(null,stdOutputStream,stdErrStream,CancellationToken.None)             
+                
+            do! streamTask |> Async.AwaitTask
+
+
+
+            if stdErrStream.Length > 0L then
+                stdErrStream.Position <- 0L
+                System.Console.Error.Write(BioContainerIO.readFrom stdErrStream)
+
+            if stdOutputStream.Length > 0L then
+                stdOutputStream.Position <- 0L
+                System.Console.Write(BioContainerIO.readFrom stdOutputStream)
+                    
+            return ()
+    
+        } 
         
 
     /// Disposes the biocontainer context (stops and removes the underlying container)
diff --git a/src/BioFSharp.BioTools/BioContainerIO.fs b/src/BioFSharp.BioTools/BioContainerIO.fs
index e50f9d5d..773edec1 100644
--- a/src/BioFSharp.BioTools/BioContainerIO.fs
+++ b/src/BioFSharp.BioTools/BioContainerIO.fs
@@ -4,6 +4,7 @@ open System
 open System.Threading
 open Docker.DotNet
 open Docker.DotNet.Models
+open System.IO
 
 /// BioContainer helper
 module BioContainerIO =
@@ -17,7 +18,6 @@ module BioContainerIO =
         filename.Replace("\\", dirSep)
             .TrimEnd(Path.DirectorySeparatorChar)
 
-
     let directoryName (filename:string) = 
         let dirSep = Path.DirectorySeparatorChar
         let tmp    = filename.Split([|dirSep;'/'|])
@@ -74,3 +74,4 @@ module BioContainerIO =
         tarOutputStream.Close()
         outStream.Position <- 0L
         outStream
+
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
index c28239d6..14b03645 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
@@ -19,6 +19,7 @@
     
     
     
+    
     
     
   
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
index e20f65d7..fcc2c308 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
@@ -50,8 +50,6 @@ BioContainer.disposeAsync bcContextUbuntu
 |> Async.Start
 
 
-
-
 let bcContext =
     BioContainer.initBcContextLocalDefaultAsync TargetP.ImageTagetP
     |> Async.RunSynchronously
@@ -229,43 +227,6 @@ res |> Seq.head |> fun tp -> tp.Mtp
 
 
 
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
 ////let tmp =
 ////    BioContainer.runCmdAsync client (Docker.DockerId.ImageName "ubuntu") ["echo"; "hello world"]
 ////    |> Async.RunSynchronously
@@ -361,3 +322,347 @@ res |> Seq.head |> fun tp -> tp.Mtp
 
 ////System.Text.Encoding.UTF8.GetString(tmp,0,1024)
 
+// Include CsbScaffold
+//#load "../../.env/CsbScaffold.fsx"
+//#r @"C:\Users\Kevin\source\repos\CSBiology\BioFSharp\bin\BioFSharp.BioTools\net47\BioFSharp.BioTools.dll"
+
+//open BioFSharp.BioTools
+
+//open BioFSharp.IO
+//open BioFSharp.IO.BlastNCBI
+//open BioFSharp.IO.BlastNCBI.Parameters
+
+//let typeOfDatabase = Parameters.MakeDbParams.DbType Parameters.Protein
+
+
+//BlastWrapper(@"C:\Users\Kevin\source\repos\CSBiology\BioFSharp\lib\ncbi-blast\bin").makeblastdb @"C:\Users\Kevin\Source\Repos\CsbScaffold\Docker\data\Chlamy_Cp.fastA"  ([typeOfDatabase;] |> seq)
+
+//let outputFormat= 
+    
+//    [   
+//        OutputCustom.Query_SeqId; 
+//        OutputCustom.Subject_SeqId;
+//        OutputCustom.Query_Length;
+//        OutputCustom.Subject_Length;
+//        OutputCustom.AlignmentLength;
+//        OutputCustom.MismatchCount;
+//        OutputCustom.IdentityCount;
+//        OutputCustom.PositiveScoringMatchCount;
+//        OutputCustom.Evalue;
+//        OutputCustom.Bitscore;
+//    ] 
+//    |> List.toSeq
+
+//let outputType = OutputType.TabularWithComments
+
+//let customOutputFormat = OutputTypeCustom(outputType , outputFormat)
+
+
+
+//BlastNCBI.BlastWrapper(@"C:\Users\Kevin\source\repos\CSBiology\BioFSharp\lib\ncbi-blast\bin")
+//    .blastP 
+//        @"C:\Users\Kevin\Source\Repos\CsbScaffold\Docker\data\Chlamy_Cp.fastA" 
+//        @"C:\Users\Kevin\Source\Repos\CsbScaffold\Docker\data\testQuery.fastA"
+//        @"C:\Users\Kevin\Source\Repos\CsbScaffold\Docker\data/Output.txt"
+//        ([customOutputFormat;] |> seq)
+
+
+
+open FSharpAux
+open FSharpAux.IO
+open FSharpAux.IO.SchemaReader.Attribute
+open System.IO
+open BioFSharp.BioTools.BioContainer
+open BioFSharp.BioTools.BioContainerIO
+
+type DbType =
+    | Protein 
+    | Nucleotide
+
+    static member make = function
+        | Protein       -> "prot"
+        | Nucleotide    -> "nucl"
+
+
+type MakeDbParams =
+    | Input  of string
+    | Output of string
+    | DbType of DbType
+    | MaskData of string
+    | ParseSeqIds    
+
+    static member makeCmdWith (m: MountInfo) = function
+        | Input  (path)     -> ["-in"  ;(MountInfo.containerPathOf m path)]
+        | Output (path)     -> ["-out" ;(MountInfo.containerPathOf m path)]
+        | DbType (dbt)      -> ["-dbtype"; (DbType.make dbt)]
+        | MaskData (path)   -> ["-mask_data"; (sprintf "%s.asnb") (MountInfo.containerPathOf m path)]
+        | ParseSeqIds       -> ["-parse_seqids"] 
+
+
+type OutputType = 
+    | Pairwise                        
+    | Query_anchored                  
+    | Query_anchored_NoIdentities     
+    | Query_anchored_Flat             
+    | Query_anchored_Flat_NoIdentities
+    | XML                             
+    | Tabular                         
+    | TabularWithComments             
+    | TextASN1                        
+    | BinaryASN1                      
+    | CSV                             
+    | BLAST_ArchiveFormat             
+    | JSON_Seqalign                   
+    | JSON_Blast                      
+    | XML2_Blast                      
+
+        static member make = function 
+            | Pairwise                          ->  0
+            | Query_anchored                    ->  1
+            | Query_anchored_NoIdentities       ->  2
+            | Query_anchored_Flat               ->  3
+            | Query_anchored_Flat_NoIdentities  ->  4
+            | XML                               ->  5
+            | Tabular                           ->  6
+            | TabularWithComments               ->  7
+            | TextASN1                          ->  8
+            | BinaryASN1                        ->  9
+            | CSV                               -> 10
+            | BLAST_ArchiveFormat               -> 11
+            | JSON_Seqalign                     -> 12
+            | JSON_Blast                        -> 13
+            | XML2_Blast                        -> 14
+
+//When not provided, the default value is:
+//'qseqid sseqid pident length mismatch gapopen qstart qend sstart send
+//evalue bitscore', which is equivalent to the keyword 'std'
+type OutputCustom = 
+    | Query_SeqId               
+    | Query_GI                  
+    | Query_Accesion            
+    | Query_Accesion_Version    
+    | Query_Length              
+    | Subject_SeqId             
+    | Subject_All_SeqIds        
+    | Subject_GI                
+    | Subject_All_GIs           
+    | Subject_Accession         
+    | Subject_Accession_Version 
+    | Subject_All_Accession     
+    | Subject_Length            
+    | Query_StartOfAlignment    
+    | Query_EndOfAlignment      
+    | Subject_StartOfAlignment  
+    | Subject_EndOfAlignment    
+    | Query_AlignedPartOf       
+    | Subject_AlignedPartOf     
+    | Evalue                    
+    | Bitscore                  
+    | RawScore                  
+    | AlignmentLength           
+    | Identity                  
+    | IdentityCount             
+    | MismatchCount             
+    | PositiveScoringMatchCount 
+    | GapOpeningCount           
+    | GapCount                  
+    | PositiveScoringMatch      
+    //means Query and subject frames separated by a '/'
+    | Frames                   
+    | Query_Frames             
+    | Subject_Frames           
+    //means Blast traceback operations (BTOP)
+    | BTOP                      
+    | Subject_TaxonomyIDs       
+    | Subject_Scientific_Names  
+    | Subject_Common_Names      
+    | Subject_Blast_Names       
+    | Subject_Super_Kingdoms    
+    | Subject_Title             
+    | Subject_All_Titles        
+    | Subject_Strand            
+    | Query_CoveragePerSubject  
+    | Query_CoveragePerHSP    
+
+    static member make = function
+        | Query_SeqId               -> "qseqid"
+        | Query_GI                  -> "qgi"
+        | Query_Accesion            -> "qacc"
+        | Query_Accesion_Version    -> "qaccver"
+        | Query_Length              -> "qlen"
+        | Subject_SeqId             -> "sseqid"
+        | Subject_All_SeqIds        -> "sallseqid"
+        | Subject_GI                -> "sgi"
+        | Subject_All_GIs           -> "sallgi"
+        | Subject_Accession         -> "sacc"
+        | Subject_Accession_Version -> "saccver"
+        | Subject_All_Accession     -> "sallacc"
+        | Subject_Length            -> "slen"
+        | Query_StartOfAlignment    -> "qstart"
+        | Query_EndOfAlignment      -> "qend"
+        | Subject_StartOfAlignment  -> "sstart"
+        | Subject_EndOfAlignment    -> "send"
+        | Query_AlignedPartOf       -> "qseq"
+        | Subject_AlignedPartOf     -> "sseq" 
+        | Evalue                    -> "evalue"
+        | Bitscore                  -> "bitscore"
+        | RawScore                  -> "score"
+        | AlignmentLength           -> "length"
+        | Identity                  -> "pident" 
+        | IdentityCount             -> "nident"
+        | MismatchCount             -> "mismatch"
+        | PositiveScoringMatchCount -> "positive"
+        | GapOpeningCount           -> "gapopen"
+        | GapCount                  -> "gaps"
+        | PositiveScoringMatch      -> "ppos"
+        //means Query and subject frames separated by a '/'
+        | Frames                    -> "frames" 
+        | Query_Frames              -> "qframe"
+        | Subject_Frames            -> "sframe"
+        //means Blast traceback operations (BTOP)
+        | BTOP                      -> "btop" 
+        | Subject_TaxonomyIDs       -> "staxids" 
+        | Subject_Scientific_Names  -> "sscinames"
+        | Subject_Common_Names      -> "scomnames"
+        | Subject_Blast_Names       -> "sblastnames"
+        | Subject_Super_Kingdoms    -> "sskingdoms"
+        | Subject_Title             -> "stitle"
+        | Subject_All_Titles        -> "salltitles"
+        | Subject_Strand            -> "sstrand"
+        | Query_CoveragePerSubject  -> "qcovs"
+        | Query_CoveragePerHSP      -> "qcovhsp"
+
+
+type BlastParams =
+    | SearchDB of string
+    | Query    of string
+    | Output   of string
+    | OutputType of OutputType
+    | OutputTypeCustom of OutputType * seq
+    | Num_threads of int
+    | Max_Hits of int
+
+    static member makeCmdWith (m: MountInfo) = function
+        | SearchDB  (path)      -> ["-db"    ; (MountInfo.containerPathOf m path)]
+        | Query     (path)      -> ["-query" ; (MountInfo.containerPathOf m path)]
+        | Output    (path)      -> ["-out"   ; (MountInfo.containerPathOf m path)]
+        | OutputType(format)    -> ["-outfmt"; string (format |> OutputType.make)]
+        | OutputTypeCustom(t,p) ->  let tmp = 
+                                        p 
+                                        |> Seq.map OutputCustom.make 
+                                        |> String.concat " "
+                                    match t with
+                                    | OutputType.Tabular             -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
+                                    | OutputType.TabularWithComments -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
+                                    | OutputType.CSV                 -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
+                                    | _ -> failwithf "Output format %A does not support custom columns." t                                
+        | Num_threads(i)        -> ["-num_threads"; string i]
+        | Max_Hits (i)          -> ["-max_target_seqs"; string i]
+
+
+let isSubPathOf (sub:string) (source:string) =
+    let sub', source' = toUnixDirectorySeparator sub, toUnixDirectorySeparator source
+    sub'.StartsWith ("./") <> sub'.StartsWith(source')
+
+let client = Docker.connect "npipe://./pipe/docker_engine"
+
+let ImageBlast = Docker.DockerId.ImageId "blast"
+
+let blastContext = 
+    BioContainer.initBcContextWithMountAsync client ImageBlast @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data"
+    |> Async.RunSynchronously
+
+Path.GetFullPath(@"C:\Users\Kevin\Source\Repos\CsbScaffold\Docker\data")
+
+let runMakeBlastDBAsync (bcContext:BioContainer.BcContext) (opt:MakeDbParams list) = 
+
+    let tp = "makeblastdb"::((opt |> List.map (MakeDbParams.makeCmdWith bcContext.Mount) |> List.concat))
+    printfn "%A" tp
+    async {
+            let! res = BioContainer.execAsync bcContext tp           
+            return res
+ 
+    }
+
+let runBlastPAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
+    let tp = "blastp"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
+    printfn "%A" tp
+    async {
+            let! res = BioContainer.execAsync bcContext tp           
+            return res
+ 
+    }
+
+let runBlastNAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
+
+    let tp = "blastn"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
+    printfn "%A" tp
+    async {
+            let! res = BioContainer.execAsync bcContext tp           
+            return res
+ 
+    }
+
+
+
+let paramz =
+    [
+        MakeDbParams.DbType Protein
+        MakeDbParams.Input @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\Chlamy_Cp.fastA"
+        MakeDbParams.Output@"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\Chlamy_Cp.fastA"
+    ]
+
+let outputFormat= 
+    
+    [   
+        OutputCustom.Query_SeqId; 
+        OutputCustom.Subject_SeqId;
+        OutputCustom.Query_Length;
+        OutputCustom.Subject_Length;
+        OutputCustom.AlignmentLength;
+        OutputCustom.MismatchCount;
+        OutputCustom.IdentityCount;
+        OutputCustom.PositiveScoringMatchCount;
+        OutputCustom.Evalue;
+        OutputCustom.Bitscore;
+    ] 
+
+let outputType = OutputType.TabularWithComments
+
+let customOutputFormat = OutputTypeCustom(outputType , outputFormat)
+
+let blastPParamz = [
+    BlastParams.SearchDB @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\Chlamy_Cp.fastA"
+    BlastParams.Query @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\testQuery.fastA"
+    BlastParams.Output @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\Output.txt"
+    OutputTypeCustom
+        (
+             OutputType.TabularWithComments,
+             [   
+                OutputCustom.Query_SeqId; 
+                OutputCustom.Subject_SeqId;
+                OutputCustom.Query_Length;
+                OutputCustom.Subject_Length;
+                OutputCustom.AlignmentLength;
+                OutputCustom.MismatchCount;
+                OutputCustom.IdentityCount;
+                OutputCustom.PositiveScoringMatchCount;
+                OutputCustom.Evalue;
+                OutputCustom.Bitscore;
+             ] 
+        )
+]
+
+MountInfo.getContainerPath blastContext.Mount
+
+runBlastPAsync blastContext blastPParamz
+|> Async.RunSynchronously
+
+runMakeBlastDBAsync blastContext paramz
+|> Async.RunSynchronously
+
+BioContainer.execAsync blastContext ["makeblastdb"; "-dbtype"; "prot" ;"-in"; "/data/C/Users/Kevin/Source/Repos/CsbScaffold/Docker/data/Chlamy_Cp.fastA"; "-out"; "/data/C/Users/Kevin/Source/Repos/CsbScaffold/Docker/data/Chlamy_Cp.fastA"]
+|> Async.RunSynchronously
+
+BioContainer.disposeAsync blastContext
+|> Async.RunSynchronously
\ No newline at end of file
diff --git a/src/BioFSharp.BioTools/Blast.fs b/src/BioFSharp.BioTools/Blast.fs
new file mode 100644
index 00000000..056ab427
--- /dev/null
+++ b/src/BioFSharp.BioTools/Blast.fs
@@ -0,0 +1,232 @@
+namespace BioFSharp.BioTools
+
+module Blast =
+
+    open FSharpAux
+    open FSharpAux.IO
+    open FSharpAux.IO.SchemaReader.Attribute
+    open BioContainer
+    open BioContainerIO
+     
+    type DbType =
+        | Protein 
+        | Nucleotide
+
+        static member make = function
+            | Protein       -> "prot"
+            | Nucleotide    -> "nucl"
+
+
+    type MakeDbParams =
+        | Input  of string
+        | Output of string
+        | DbType of DbType
+        | MaskData of string
+        | ParseSeqIds    
+
+        static member makeCmdWith (m: MountInfo) = function
+            | Input  (path)     -> ["-in"  ;(MountInfo.containerPathOf m path)]
+            | Output (path)     -> ["-out" ;(MountInfo.containerPathOf m path)]
+            | DbType (dbt)      -> ["-dbtype"; (DbType.make dbt)]
+            | MaskData (path)   -> ["-mask_data"; (sprintf "%s.asnb") (MountInfo.containerPathOf m path)]
+            | ParseSeqIds       -> ["-parse_seqids"] 
+
+
+    type OutputType = 
+        | Pairwise                        
+        | Query_anchored                  
+        | Query_anchored_NoIdentities     
+        | Query_anchored_Flat             
+        | Query_anchored_Flat_NoIdentities
+        | XML                             
+        | Tabular                         
+        | TabularWithComments             
+        | TextASN1                        
+        | BinaryASN1                      
+        | CSV                             
+        | BLAST_ArchiveFormat             
+        | JSON_Seqalign                   
+        | JSON_Blast                      
+        | XML2_Blast                      
+
+            static member make = function 
+                | Pairwise                          ->  0
+                | Query_anchored                    ->  1
+                | Query_anchored_NoIdentities       ->  2
+                | Query_anchored_Flat               ->  3
+                | Query_anchored_Flat_NoIdentities  ->  4
+                | XML                               ->  5
+                | Tabular                           ->  6
+                | TabularWithComments               ->  7
+                | TextASN1                          ->  8
+                | BinaryASN1                        ->  9
+                | CSV                               -> 10
+                | BLAST_ArchiveFormat               -> 11
+                | JSON_Seqalign                     -> 12
+                | JSON_Blast                        -> 13
+                | XML2_Blast                        -> 14
+
+    //When not provided, the default value is:
+    //'qseqid sseqid pident length mismatch gapopen qstart qend sstart send
+    //evalue bitscore', which is equivalent to the keyword 'std'
+    type OutputCustom = 
+        | Query_SeqId               
+        | Query_GI                  
+        | Query_Accesion            
+        | Query_Accesion_Version    
+        | Query_Length              
+        | Subject_SeqId             
+        | Subject_All_SeqIds        
+        | Subject_GI                
+        | Subject_All_GIs           
+        | Subject_Accession         
+        | Subject_Accession_Version 
+        | Subject_All_Accession     
+        | Subject_Length            
+        | Query_StartOfAlignment    
+        | Query_EndOfAlignment      
+        | Subject_StartOfAlignment  
+        | Subject_EndOfAlignment    
+        | Query_AlignedPartOf       
+        | Subject_AlignedPartOf     
+        | Evalue                    
+        | Bitscore                  
+        | RawScore                  
+        | AlignmentLength           
+        | Identity                  
+        | IdentityCount             
+        | MismatchCount             
+        | PositiveScoringMatchCount 
+        | GapOpeningCount           
+        | GapCount                  
+        | PositiveScoringMatch      
+        //means Query and subject frames separated by a '/'
+        | Frames                   
+        | Query_Frames             
+        | Subject_Frames           
+        //means Blast traceback operations (BTOP)
+        | BTOP                      
+        | Subject_TaxonomyIDs       
+        | Subject_Scientific_Names  
+        | Subject_Common_Names      
+        | Subject_Blast_Names       
+        | Subject_Super_Kingdoms    
+        | Subject_Title             
+        | Subject_All_Titles        
+        | Subject_Strand            
+        | Query_CoveragePerSubject  
+        | Query_CoveragePerHSP    
+
+        static member make = function
+            | Query_SeqId               -> "qseqid"
+            | Query_GI                  -> "qgi"
+            | Query_Accesion            -> "qacc"
+            | Query_Accesion_Version    -> "qaccver"
+            | Query_Length              -> "qlen"
+            | Subject_SeqId             -> "sseqid"
+            | Subject_All_SeqIds        -> "sallseqid"
+            | Subject_GI                -> "sgi"
+            | Subject_All_GIs           -> "sallgi"
+            | Subject_Accession         -> "sacc"
+            | Subject_Accession_Version -> "saccver"
+            | Subject_All_Accession     -> "sallacc"
+            | Subject_Length            -> "slen"
+            | Query_StartOfAlignment    -> "qstart"
+            | Query_EndOfAlignment      -> "qend"
+            | Subject_StartOfAlignment  -> "sstart"
+            | Subject_EndOfAlignment    -> "send"
+            | Query_AlignedPartOf       -> "qseq"
+            | Subject_AlignedPartOf     -> "sseq" 
+            | Evalue                    -> "evalue"
+            | Bitscore                  -> "bitscore"
+            | RawScore                  -> "score"
+            | AlignmentLength           -> "length"
+            | Identity                  -> "pident" 
+            | IdentityCount             -> "nident"
+            | MismatchCount             -> "mismatch"
+            | PositiveScoringMatchCount -> "positive"
+            | GapOpeningCount           -> "gapopen"
+            | GapCount                  -> "gaps"
+            | PositiveScoringMatch      -> "ppos"
+            //means Query and subject frames separated by a '/'
+            | Frames                    -> "frames" 
+            | Query_Frames              -> "qframe"
+            | Subject_Frames            -> "sframe"
+            //means Blast traceback operations (BTOP)
+            | BTOP                      -> "btop" 
+            | Subject_TaxonomyIDs       -> "staxids" 
+            | Subject_Scientific_Names  -> "sscinames"
+            | Subject_Common_Names      -> "scomnames"
+            | Subject_Blast_Names       -> "sblastnames"
+            | Subject_Super_Kingdoms    -> "sskingdoms"
+            | Subject_Title             -> "stitle"
+            | Subject_All_Titles        -> "salltitles"
+            | Subject_Strand            -> "sstrand"
+            | Query_CoveragePerSubject  -> "qcovs"
+            | Query_CoveragePerHSP      -> "qcovhsp"
+
+
+    type BlastParams =
+        | SearchDB of string
+        | Query    of string
+        | Output   of string
+        | OutputType of OutputType
+        | OutputTypeCustom of OutputType * seq
+        | Num_threads of int
+        | Max_Hits of int
+
+        static member makeCmdWith (m: MountInfo) = function
+            | SearchDB  (path)      -> ["-db"    ; (MountInfo.containerPathOf m path)]
+            | Query     (path)      -> ["-query" ; (MountInfo.containerPathOf m path)]
+            | Output    (path)      -> ["-out"   ; (MountInfo.containerPathOf m path)]
+            | OutputType(format)    -> ["-outfmt"; string (format |> OutputType.make)]
+            | OutputTypeCustom(t,p) ->  let tmp = 
+                                            p 
+                                            |> Seq.map OutputCustom.make 
+                                            |> String.concat " "
+                                        match t with
+                                        | OutputType.Tabular             -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
+                                        | OutputType.TabularWithComments -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
+                                        | OutputType.CSV                 -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
+                                        | _ -> failwithf "Output format %A does not support custom columns." t                                
+            | Num_threads(i)        -> ["-num_threads"; string i]
+            | Max_Hits (i)          -> ["-max_target_seqs"; string i]
+
+
+    let runMakeBlastDBAsync (bcContext:BioContainer.BcContext) (opt:MakeDbParams list) = 
+
+        let tp = "makeblastdb"::((opt |> List.map (MakeDbParams.makeCmdWith bcContext.Mount) |> List.concat))
+        printfn "%A" tp
+        async {
+                let! res = BioContainer.execAsync bcContext tp           
+                return res
+        }
+
+    let runMakeBlastDB (bcContext:BioContainer.BcContext) (opt:MakeDbParams list) =
+        runMakeBlastDBAsync bcContext opt
+        |> Async.RunSynchronously
+
+    let runBlastPAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
+        let tp = "blastp"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
+        printfn "%A" tp
+        async {
+                let! res = BioContainer.execAsync bcContext tp           
+                return res
+        }
+
+    let runBlastP (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
+        runBlastPAsync bcContext opt
+        |> Async.RunSynchronously
+
+    let runBlastNAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
+        let tp = "blastn"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
+        printfn "%A" tp
+        async {
+                let! res = BioContainer.execAsync bcContext tp           
+                return res
+ 
+        }
+
+    let runBlastN (bcContext:BioContainer.BcContext) (opt:BlastParams list) =
+        runBlastNAsync bcContext opt
+        |> Async.RunSynchronously
\ No newline at end of file
diff --git a/src/BioFSharp.BioTools/TargetP.fs b/src/BioFSharp.BioTools/TargetP.fs
index 90e6e253..9b1972ba 100644
--- a/src/BioFSharp.BioTools/TargetP.fs
+++ b/src/BioFSharp.BioTools/TargetP.fs
@@ -83,7 +83,7 @@ module TargetP =
             do!
                 BioContainer.putStreamAsync bcContext fsaStream tmpFile
             let! targepResult =
-                BioContainer.execAsync bcContext (tp@[tmpFile])
+                BioContainer.execReturnAsync bcContext (tp@[tmpFile])
             //do!
             //    BioContainer.disposeAsync bcContext
  

From 1d4570ab2c9f39a46859ed8072cd217cf5a72055 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 12 Feb 2019 17:32:56 +0100
Subject: [PATCH 18/74] Add useful prints to blast execution functions in blast
 docker

---
 src/BioFSharp.BioTools/Blast.fs | 25 +++++++++++++++++++------
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/src/BioFSharp.BioTools/Blast.fs b/src/BioFSharp.BioTools/Blast.fs
index 056ab427..1cd46b23 100644
--- a/src/BioFSharp.BioTools/Blast.fs
+++ b/src/BioFSharp.BioTools/Blast.fs
@@ -195,20 +195,29 @@ module Blast =
 
     let runMakeBlastDBAsync (bcContext:BioContainer.BcContext) (opt:MakeDbParams list) = 
 
-        let tp = "makeblastdb"::((opt |> List.map (MakeDbParams.makeCmdWith bcContext.Mount) |> List.concat))
-        printfn "%A" tp
+        let cmds = (opt |> List.map (MakeDbParams.makeCmdWith bcContext.Mount))
+        let tp = "makeblastdb"::(cmds |> List.concat)
+
+        printfn "Starting process makeblastdb\r\nparameters:"
+        cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
         async {
                 let! res = BioContainer.execAsync bcContext tp           
                 return res
         }
 
     let runMakeBlastDB (bcContext:BioContainer.BcContext) (opt:MakeDbParams list) =
+
         runMakeBlastDBAsync bcContext opt
         |> Async.RunSynchronously
 
     let runBlastPAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
-        let tp = "blastp"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
-        printfn "%A" tp
+        let cmds = (opt |> List.map (BlastParams.makeCmdWith bcContext.Mount))
+        let tp = "blastp"::(cmds |> List.concat)
+
+        printfn "Starting process blastp\r\nparameters:"
+        cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
         async {
                 let! res = BioContainer.execAsync bcContext tp           
                 return res
@@ -219,8 +228,12 @@ module Blast =
         |> Async.RunSynchronously
 
     let runBlastNAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
-        let tp = "blastn"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
-        printfn "%A" tp
+        let cmds = (opt |> List.map (BlastParams.makeCmdWith bcContext.Mount))
+        let tp = "blastn"::(cmds |> List.concat)
+
+        printfn "Starting process blastn\r\nparameters:"
+        cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
         async {
                 let! res = BioContainer.execAsync bcContext tp           
                 return res

From 69e36cc54137ad3ebb1899311cf096de07dc1743 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 12 Feb 2019 17:38:40 +0100
Subject: [PATCH 19/74] Remove print debugging artifacts

---
 src/BioFSharp.BioTools/BioContainer.fs        |   9 +-
 src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 233 +-----------------
 2 files changed, 5 insertions(+), 237 deletions(-)

diff --git a/src/BioFSharp.BioTools/BioContainer.fs b/src/BioFSharp.BioTools/BioContainer.fs
index e28a03a8..78ad1c0f 100644
--- a/src/BioFSharp.BioTools/BioContainer.fs
+++ b/src/BioFSharp.BioTools/BioContainer.fs
@@ -40,17 +40,14 @@ module BioContainer =
         ///get the container full mounted unix path of a file in a subfolder of the mounted host directory
         static member containerPathOf (m:MountInfo) (filePath:string) =
             let winDir          = MountInfo.getHostDir m
-
             let containerBase   = MountInfo.getContainerPath m
 
-            printfn "Input filePath: %s" filePath
             //spaces not supported in unix paths
             if filePath.Contains(" ") then
                 failwithf "paths mounted to docker cannot contain spaces.\r\nThe path %s contains spaces." filePath
             else
                 //the given path is relative
                 if filePath.StartsWith(".") then
-                    printfn "Path is relative"
                     let fullFilePath = 
                         //get absolute combined path
                         Path.Combine(containerBase,filePath)
@@ -59,19 +56,15 @@ module BioContainer =
 
                     //check that combined path does not go above base (eg base/../../)
                     if (fullFilePath.StartsWith(containerBase)) then
-                        printfn "Relative Path is correct"
                         fullFilePath |> BioContainerIO.toUnixDirectorySeparator
                     else
                         failwithf ("the relative path \r\n%s\r\n escapes the scope of the container base path \r\n%s\r\n. the combined path is:\r\n%s\r\n") filePath containerBase fullFilePath
 
                 else
-                    printfn "Path is absolute"
                     //Path is not relative. Use Path functions to resolve ../ and check if absolute path is a subpath of the windows base path
-                    printfn "filePath: %s" filePath
+                    // TO-DO: make subpath matchin non-case-sensitive because that works on the windows side
                     let fullFilePath = filePath |> Path.GetFullPath
-                    printfn "fullPath: %s" fullFilePath
                     if fullFilePath.StartsWith(winDir) then
-                        printfn "Full file path is subpath"
                         //if absolute windows path is correct, replace it with the containerbase
                         fullFilePath.Replace(winDir,containerBase)
                         |> fun x -> x.Replace(":","")
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
index fcc2c308..f4492781 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
@@ -13,6 +13,7 @@
 #load "BioContainerIO.fs"
 #load "BioContainer.fs"
 #load "TargetP.fs"
+#load "Blast.fs"
 
 open System.Threading
 open System.Threading
@@ -374,195 +375,7 @@ open FSharpAux.IO.SchemaReader.Attribute
 open System.IO
 open BioFSharp.BioTools.BioContainer
 open BioFSharp.BioTools.BioContainerIO
-
-type DbType =
-    | Protein 
-    | Nucleotide
-
-    static member make = function
-        | Protein       -> "prot"
-        | Nucleotide    -> "nucl"
-
-
-type MakeDbParams =
-    | Input  of string
-    | Output of string
-    | DbType of DbType
-    | MaskData of string
-    | ParseSeqIds    
-
-    static member makeCmdWith (m: MountInfo) = function
-        | Input  (path)     -> ["-in"  ;(MountInfo.containerPathOf m path)]
-        | Output (path)     -> ["-out" ;(MountInfo.containerPathOf m path)]
-        | DbType (dbt)      -> ["-dbtype"; (DbType.make dbt)]
-        | MaskData (path)   -> ["-mask_data"; (sprintf "%s.asnb") (MountInfo.containerPathOf m path)]
-        | ParseSeqIds       -> ["-parse_seqids"] 
-
-
-type OutputType = 
-    | Pairwise                        
-    | Query_anchored                  
-    | Query_anchored_NoIdentities     
-    | Query_anchored_Flat             
-    | Query_anchored_Flat_NoIdentities
-    | XML                             
-    | Tabular                         
-    | TabularWithComments             
-    | TextASN1                        
-    | BinaryASN1                      
-    | CSV                             
-    | BLAST_ArchiveFormat             
-    | JSON_Seqalign                   
-    | JSON_Blast                      
-    | XML2_Blast                      
-
-        static member make = function 
-            | Pairwise                          ->  0
-            | Query_anchored                    ->  1
-            | Query_anchored_NoIdentities       ->  2
-            | Query_anchored_Flat               ->  3
-            | Query_anchored_Flat_NoIdentities  ->  4
-            | XML                               ->  5
-            | Tabular                           ->  6
-            | TabularWithComments               ->  7
-            | TextASN1                          ->  8
-            | BinaryASN1                        ->  9
-            | CSV                               -> 10
-            | BLAST_ArchiveFormat               -> 11
-            | JSON_Seqalign                     -> 12
-            | JSON_Blast                        -> 13
-            | XML2_Blast                        -> 14
-
-//When not provided, the default value is:
-//'qseqid sseqid pident length mismatch gapopen qstart qend sstart send
-//evalue bitscore', which is equivalent to the keyword 'std'
-type OutputCustom = 
-    | Query_SeqId               
-    | Query_GI                  
-    | Query_Accesion            
-    | Query_Accesion_Version    
-    | Query_Length              
-    | Subject_SeqId             
-    | Subject_All_SeqIds        
-    | Subject_GI                
-    | Subject_All_GIs           
-    | Subject_Accession         
-    | Subject_Accession_Version 
-    | Subject_All_Accession     
-    | Subject_Length            
-    | Query_StartOfAlignment    
-    | Query_EndOfAlignment      
-    | Subject_StartOfAlignment  
-    | Subject_EndOfAlignment    
-    | Query_AlignedPartOf       
-    | Subject_AlignedPartOf     
-    | Evalue                    
-    | Bitscore                  
-    | RawScore                  
-    | AlignmentLength           
-    | Identity                  
-    | IdentityCount             
-    | MismatchCount             
-    | PositiveScoringMatchCount 
-    | GapOpeningCount           
-    | GapCount                  
-    | PositiveScoringMatch      
-    //means Query and subject frames separated by a '/'
-    | Frames                   
-    | Query_Frames             
-    | Subject_Frames           
-    //means Blast traceback operations (BTOP)
-    | BTOP                      
-    | Subject_TaxonomyIDs       
-    | Subject_Scientific_Names  
-    | Subject_Common_Names      
-    | Subject_Blast_Names       
-    | Subject_Super_Kingdoms    
-    | Subject_Title             
-    | Subject_All_Titles        
-    | Subject_Strand            
-    | Query_CoveragePerSubject  
-    | Query_CoveragePerHSP    
-
-    static member make = function
-        | Query_SeqId               -> "qseqid"
-        | Query_GI                  -> "qgi"
-        | Query_Accesion            -> "qacc"
-        | Query_Accesion_Version    -> "qaccver"
-        | Query_Length              -> "qlen"
-        | Subject_SeqId             -> "sseqid"
-        | Subject_All_SeqIds        -> "sallseqid"
-        | Subject_GI                -> "sgi"
-        | Subject_All_GIs           -> "sallgi"
-        | Subject_Accession         -> "sacc"
-        | Subject_Accession_Version -> "saccver"
-        | Subject_All_Accession     -> "sallacc"
-        | Subject_Length            -> "slen"
-        | Query_StartOfAlignment    -> "qstart"
-        | Query_EndOfAlignment      -> "qend"
-        | Subject_StartOfAlignment  -> "sstart"
-        | Subject_EndOfAlignment    -> "send"
-        | Query_AlignedPartOf       -> "qseq"
-        | Subject_AlignedPartOf     -> "sseq" 
-        | Evalue                    -> "evalue"
-        | Bitscore                  -> "bitscore"
-        | RawScore                  -> "score"
-        | AlignmentLength           -> "length"
-        | Identity                  -> "pident" 
-        | IdentityCount             -> "nident"
-        | MismatchCount             -> "mismatch"
-        | PositiveScoringMatchCount -> "positive"
-        | GapOpeningCount           -> "gapopen"
-        | GapCount                  -> "gaps"
-        | PositiveScoringMatch      -> "ppos"
-        //means Query and subject frames separated by a '/'
-        | Frames                    -> "frames" 
-        | Query_Frames              -> "qframe"
-        | Subject_Frames            -> "sframe"
-        //means Blast traceback operations (BTOP)
-        | BTOP                      -> "btop" 
-        | Subject_TaxonomyIDs       -> "staxids" 
-        | Subject_Scientific_Names  -> "sscinames"
-        | Subject_Common_Names      -> "scomnames"
-        | Subject_Blast_Names       -> "sblastnames"
-        | Subject_Super_Kingdoms    -> "sskingdoms"
-        | Subject_Title             -> "stitle"
-        | Subject_All_Titles        -> "salltitles"
-        | Subject_Strand            -> "sstrand"
-        | Query_CoveragePerSubject  -> "qcovs"
-        | Query_CoveragePerHSP      -> "qcovhsp"
-
-
-type BlastParams =
-    | SearchDB of string
-    | Query    of string
-    | Output   of string
-    | OutputType of OutputType
-    | OutputTypeCustom of OutputType * seq
-    | Num_threads of int
-    | Max_Hits of int
-
-    static member makeCmdWith (m: MountInfo) = function
-        | SearchDB  (path)      -> ["-db"    ; (MountInfo.containerPathOf m path)]
-        | Query     (path)      -> ["-query" ; (MountInfo.containerPathOf m path)]
-        | Output    (path)      -> ["-out"   ; (MountInfo.containerPathOf m path)]
-        | OutputType(format)    -> ["-outfmt"; string (format |> OutputType.make)]
-        | OutputTypeCustom(t,p) ->  let tmp = 
-                                        p 
-                                        |> Seq.map OutputCustom.make 
-                                        |> String.concat " "
-                                    match t with
-                                    | OutputType.Tabular             -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
-                                    | OutputType.TabularWithComments -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
-                                    | OutputType.CSV                 -> ["-outfmt"; sprintf "%s %s" (string (t |> OutputType.make)) tmp]
-                                    | _ -> failwithf "Output format %A does not support custom columns." t                                
-        | Num_threads(i)        -> ["-num_threads"; string i]
-        | Max_Hits (i)          -> ["-max_target_seqs"; string i]
-
-
-let isSubPathOf (sub:string) (source:string) =
-    let sub', source' = toUnixDirectorySeparator sub, toUnixDirectorySeparator source
-    sub'.StartsWith ("./") <> sub'.StartsWith(source')
+open Blast
 
 let client = Docker.connect "npipe://./pipe/docker_engine"
 
@@ -572,39 +385,6 @@ let blastContext =
     BioContainer.initBcContextWithMountAsync client ImageBlast @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data"
     |> Async.RunSynchronously
 
-Path.GetFullPath(@"C:\Users\Kevin\Source\Repos\CsbScaffold\Docker\data")
-
-let runMakeBlastDBAsync (bcContext:BioContainer.BcContext) (opt:MakeDbParams list) = 
-
-    let tp = "makeblastdb"::((opt |> List.map (MakeDbParams.makeCmdWith bcContext.Mount) |> List.concat))
-    printfn "%A" tp
-    async {
-            let! res = BioContainer.execAsync bcContext tp           
-            return res
- 
-    }
-
-let runBlastPAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
-    let tp = "blastp"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
-    printfn "%A" tp
-    async {
-            let! res = BioContainer.execAsync bcContext tp           
-            return res
- 
-    }
-
-let runBlastNAsync (bcContext:BioContainer.BcContext) (opt:BlastParams list) = 
-
-    let tp = "blastn"::((opt |> List.map (BlastParams.makeCmdWith bcContext.Mount) |> List.concat))
-    printfn "%A" tp
-    async {
-            let! res = BioContainer.execAsync bcContext tp           
-            return res
- 
-    }
-
-
-
 let paramz =
     [
         MakeDbParams.DbType Protein
@@ -627,10 +407,6 @@ let outputFormat=
         OutputCustom.Bitscore;
     ] 
 
-let outputType = OutputType.TabularWithComments
-
-let customOutputFormat = OutputTypeCustom(outputType , outputFormat)
-
 let blastPParamz = [
     BlastParams.SearchDB @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\Chlamy_Cp.fastA"
     BlastParams.Query @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\testQuery.fastA"
@@ -653,13 +429,12 @@ let blastPParamz = [
         )
 ]
 
-MountInfo.getContainerPath blastContext.Mount
+runMakeBlastDBAsync blastContext paramz
+|> Async.RunSynchronously
 
 runBlastPAsync blastContext blastPParamz
 |> Async.RunSynchronously
 
-runMakeBlastDBAsync blastContext paramz
-|> Async.RunSynchronously
 
 BioContainer.execAsync blastContext ["makeblastdb"; "-dbtype"; "prot" ;"-in"; "/data/C/Users/Kevin/Source/Repos/CsbScaffold/Docker/data/Chlamy_Cp.fastA"; "-out"; "/data/C/Users/Kevin/Source/Repos/CsbScaffold/Docker/data/Chlamy_Cp.fastA"]
 |> Async.RunSynchronously

From bbfff91103a1ba8fca177111dd663822224044fe Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 12 Feb 2019 17:41:35 +0100
Subject: [PATCH 20/74] Bump version to 0.014

---
 RELEASE_NOTES.md | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 2947fb79..9bbbab7c 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,3 +1,9 @@
+#### 0.0.14 - Tuesday, February 12, 2019
+ * Addition of blast biocontainer support for makeblastdb, blastp, blastn with full parameter wrapping
+ * Extension of BioContainer functionality:
+   * Add windows/unix path conversions and subpath matching to MounInfo
+   * Add execReturnAsync (returns stdout of docker container) and execAsync (redirects stdout/stderr of container)
+
 #### 0.0.13 - Friday, February 8, 2019
 * Addition of the BioTools project, which uses docker.dotnet to use docker images and stream their output to fsi
 * Low level wrapping of multiple docker.dotnet functions for F#

From ccd917732151c0e2eb111eb45326fb4685a7f39d Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 13 Feb 2019 14:23:54 +0100
Subject: [PATCH 21/74] Bump version to 0.0.14

---
 docsrc/content/release-notes.md               | 6 ++++++
 src/BioFSharp.BioDB/AssemblyInfo.fs           | 8 ++++----
 src/BioFSharp.BioTools/AssemblyInfo.fs        | 8 ++++----
 src/BioFSharp.BioTools/BioFSharp.BioTools.fsx | 2 ++
 src/BioFSharp.IO/AssemblyInfo.fs              | 8 ++++----
 src/BioFSharp.ImgP/AssemblyInfo.fs            | 8 ++++----
 src/BioFSharp.Parallel/AssemblyInfo.fs        | 8 ++++----
 src/BioFSharp.Stats/AssemblyInfo.fs           | 8 ++++----
 src/BioFSharp.Vis/AssemblyInfo.fs             | 8 ++++----
 src/BioFSharp/AssemblyInfo.fs                 | 8 ++++----
 10 files changed, 40 insertions(+), 32 deletions(-)

diff --git a/docsrc/content/release-notes.md b/docsrc/content/release-notes.md
index 2947fb79..9bbbab7c 100644
--- a/docsrc/content/release-notes.md
+++ b/docsrc/content/release-notes.md
@@ -1,3 +1,9 @@
+#### 0.0.14 - Tuesday, February 12, 2019
+ * Addition of blast biocontainer support for makeblastdb, blastp, blastn with full parameter wrapping
+ * Extension of BioContainer functionality:
+   * Add windows/unix path conversions and subpath matching to MounInfo
+   * Add execReturnAsync (returns stdout of docker container) and execAsync (redirects stdout/stderr of container)
+
 #### 0.0.13 - Friday, February 8, 2019
 * Addition of the BioTools project, which uses docker.dotnet to use docker images and stream their output to fsi
 * Low level wrapping of multiple docker.dotnet functions for F#
diff --git a/src/BioFSharp.BioDB/AssemblyInfo.fs b/src/BioFSharp.BioDB/AssemblyInfo.fs
index 541bf44c..6095c310 100644
--- a/src/BioFSharp.BioDB/AssemblyInfo.fs
+++ b/src/BioFSharp.BioDB/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.BioDB"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.BioTools/AssemblyInfo.fs b/src/BioFSharp.BioTools/AssemblyInfo.fs
index ec6d8a04..00acf830 100644
--- a/src/BioFSharp.BioTools/AssemblyInfo.fs
+++ b/src/BioFSharp.BioTools/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.BioTools"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
index f4492781..d95f6621 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
@@ -432,6 +432,8 @@ let blastPParamz = [
 runMakeBlastDBAsync blastContext paramz
 |> Async.RunSynchronously
 
+runMakeBlastDB blastContext paramz
+
 runBlastPAsync blastContext blastPParamz
 |> Async.RunSynchronously
 
diff --git a/src/BioFSharp.IO/AssemblyInfo.fs b/src/BioFSharp.IO/AssemblyInfo.fs
index f037e3bf..7d09c696 100644
--- a/src/BioFSharp.IO/AssemblyInfo.fs
+++ b/src/BioFSharp.IO/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.IO"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.ImgP/AssemblyInfo.fs b/src/BioFSharp.ImgP/AssemblyInfo.fs
index aeedc13c..d059fbc7 100644
--- a/src/BioFSharp.ImgP/AssemblyInfo.fs
+++ b/src/BioFSharp.ImgP/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.ImgP"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Parallel/AssemblyInfo.fs b/src/BioFSharp.Parallel/AssemblyInfo.fs
index b56a4d7d..d8ecb415 100644
--- a/src/BioFSharp.Parallel/AssemblyInfo.fs
+++ b/src/BioFSharp.Parallel/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Parallel"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Stats/AssemblyInfo.fs b/src/BioFSharp.Stats/AssemblyInfo.fs
index 50c6e22c..7e3bd4fb 100644
--- a/src/BioFSharp.Stats/AssemblyInfo.fs
+++ b/src/BioFSharp.Stats/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Stats"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Vis/AssemblyInfo.fs b/src/BioFSharp.Vis/AssemblyInfo.fs
index f4a69a8b..0b94ede8 100644
--- a/src/BioFSharp.Vis/AssemblyInfo.fs
+++ b/src/BioFSharp.Vis/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Vis"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp/AssemblyInfo.fs b/src/BioFSharp/AssemblyInfo.fs
index c77f16c1..b8e92c17 100644
--- a/src/BioFSharp/AssemblyInfo.fs
+++ b/src/BioFSharp/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.13"
-    let [] AssemblyFileVersion = "0.0.13"
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
     let [] AssemblyConfiguration = "Release"

From 37fa7a4c462b91ba150cc44f6875d1a1263f0948 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 13 Feb 2019 15:45:31 +0100
Subject: [PATCH 22/74] Add API for clustal-omega biocontainer

---
 .../BioFSharp.BioTools.fsproj                 |   1 +
 src/BioFSharp.BioTools/BioFSharp.BioTools.fsx |  34 +-
 src/BioFSharp.BioTools/ClustalO.fs            | 401 ++++++++++++++++++
 3 files changed, 435 insertions(+), 1 deletion(-)
 create mode 100644 src/BioFSharp.BioTools/ClustalO.fs

diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
index 14b03645..3c1c410c 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
@@ -20,6 +20,7 @@
     
     
     
+    
     
     
   
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
index d95f6621..1b7b03fc 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
@@ -14,6 +14,7 @@
 #load "BioContainer.fs"
 #load "TargetP.fs"
 #load "Blast.fs"
+#load "ClustalO.fs"
 
 open System.Threading
 open System.Threading
@@ -442,4 +443,35 @@ BioContainer.execAsync blastContext ["makeblastdb"; "-dbtype"; "prot" ;"-in"; "/
 |> Async.RunSynchronously
 
 BioContainer.disposeAsync blastContext
-|> Async.RunSynchronously
\ No newline at end of file
+|> Async.RunSynchronously
+
+
+open ClustalO
+
+let clustalImage = Docker.ImageName "clustal-omega"
+
+let clustalContext = 
+    BioContainer.initBcContextWithMountAsync client clustalImage @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data"
+    |> Async.RunSynchronously
+
+// ClustalO tests
+let clustalOParamz = [
+    ClustalOParams.Input 
+        (
+            FileInput.SequenceFile @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\Chlamy_Cp.fastA",
+            [
+                InputCustom.Format FileFormat.FastA
+            ]
+        )
+    ClustalOParams.Output 
+        (
+            @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\Chlamy_Cp.aln",
+            []
+        )
+    ClustalOParams.Miscellaneous 
+        [
+            MiscellaneousCustom.Force
+        ]
+]
+
+runClustalO clustalContext clustalOParamz
\ No newline at end of file
diff --git a/src/BioFSharp.BioTools/ClustalO.fs b/src/BioFSharp.BioTools/ClustalO.fs
new file mode 100644
index 00000000..423229d0
--- /dev/null
+++ b/src/BioFSharp.BioTools/ClustalO.fs
@@ -0,0 +1,401 @@
+namespace BioFSharp.BioTools
+
+module ClustalO =
+
+    open FSharpAux
+    open BioContainer
+
+//    SEQUENCE INPUT
+//        -i, --in, --infile={,-}
+//	        Multiple sequence input file (- for stdin)
+//
+//        --hmm-in=
+//	        HMM input files
+//
+//        --dealign
+//	        Dealign input sequences
+//
+//        --profile1, --p1=
+//	        Pre-aligned multiple sequence file (aligned columns will be kept fixed)
+//
+//        --profile2, --p2=
+//	        Pre-aligned multiple sequence file (aligned columns will be kept fixed)
+//
+//        --is-profile
+//	        disable check if profile, force profile (default no)
+//
+//        -t, --seqtype={Protein, RNA, DNA} 
+//	        Force a sequence type (default: auto)
+//
+//        --infmt={a2m=fa[sta],clu[stal],msf,phy[lip],selex,st[ockholm],vie[nna]} 
+//	        Forced sequence input file format (default: auto)
+
+
+    type FileFormat = 
+        ///FastA file format
+        | FastA
+        ///Clustal file format
+        | Clustal
+        ///MSF file format
+        | MSF
+        ///Phylip file format
+        | Phylip
+        ///Selex file format
+        | Selex
+        ///Stockholm file format
+        | Stockholm
+        ///Vienna file format
+        | Vienna
+        static member make = function
+            | FastA     -> "fa"
+            | Clustal   -> "clu"
+            | MSF       -> "msf"
+            | Phylip    -> "phy"
+            | Selex     -> "selex"
+            | Stockholm -> "st"
+            | Vienna    -> "vie"
+
+    ///Types of sequences
+    type SeqType = 
+        | Protein
+        | DNA
+        | RNA
+
+        static member make = function
+            | Protein   -> "--seqtype=Protein"
+            | RNA       -> "--seqtype=RNA"
+            | DNA       -> "--seqtype=DNA"
+
+    type InputCustom =
+        ///Forced sequence input file format (default: auto)
+        | Format of FileFormat
+        ///Dealign input sequences
+        | Dealign
+        ///Disable check if profile, force profile (default no)
+        | IsProfile
+        ///Force a sequence type (default: auto)
+        | SeqType of SeqType    
+    
+        static member make = function
+            | Format f  -> sprintf "--infmt=%s" (FileFormat.make f)
+            | Dealign   -> "--dealign "
+            | IsProfile -> "--is-profile "
+            | SeqType s -> SeqType.make s
+
+    ///Specify the type of input and assign file path
+    type FileInput = 
+        ///Use this option to make a multiple alignment from a set of sequences. A sequence file must contain more than one sequence (at least two sequences).
+        | SequenceFile of string 
+        ///Use this option to align two alignments (profiles) together.
+        | TwoProfiles of string * string 
+        /// Use this option to add new sequences to an existing alignment.
+        | SequenceFileAndProfile of string * string
+        /// Use this option to make a new multiple alignment of sequences from the input file and use the HMM as a guide (EPA).
+        | SequenceFileAndHMM of string * string
+    
+        static member make = function
+            | SequenceFile path                     -> ["-i"; path]
+            | TwoProfiles (path1,path2)             -> [sprintf "--p1=%s" path1 ; sprintf"--p2=%s" path2]
+            | SequenceFileAndProfile (path1,path2)  -> ["-i"; path1; sprintf "--p1=%s " path2]
+            | SequenceFileAndHMM (path1,path2)      -> ["-i"; path1; sprintf "--hmm-in=%s" path2]
+
+        static member makeWith (m: MountInfo) = 
+            let cPath p = (MountInfo.containerPathOf m p)
+            function
+            | SequenceFile path                     -> ["-i"; (MountInfo.containerPathOf m path)]
+            | TwoProfiles (path1,path2)             -> [sprintf "--p1=%s" (cPath path1) ; sprintf "--p2=%s" (cPath path2)]
+            | SequenceFileAndProfile (path1,path2)  -> ["-i"; (cPath path1); sprintf "--p1=%s " (cPath path2)]
+            | SequenceFileAndHMM (path1,path2)      -> ["-i"; (cPath path1); sprintf "--hmm-in=%s" (cPath path2)]
+
+//    ALIGNMENT OUTPUT
+//  -o, --out, --outfile={file,-} 
+//	    Multiple sequence alignment output file (default: stdout)
+//
+//  --outfmt={a2m=fa[sta],clu[stal],msf,phy[lip],selex,st[ockholm],vie[nna]} 
+//	    MSA output file format (default: fasta)
+//
+//  --residuenumber, --resno  
+//	    in Clustal format print residue numbers (default no)
+//
+//  --wrap=  
+//	    number of residues before line-wrap in output
+//
+//  --output-order={input-order,tree-order} 
+//	    MSA output order like in input/guide-tree
+
+    ///Optional modifiers for input
+    type OutputCustom =
+        ///	MSA output file format (default: fasta)
+        | Format of FileFormat
+        ///	in Clustal format print residue numbers (default no)
+        | ResidueNumber 
+        ///	number of residues before line-wrap in output
+        | Wrap of int
+        /// Aligned sequences are ordered according to guide tree instead of input order
+        | OutputOrderAsTree
+
+        static member make = function
+            | Format f -> sprintf "--outfmt=%s" (FileFormat.make f)
+            | ResidueNumber -> "--residuenumber"
+            | Wrap i -> sprintf "--wrap=%i" i
+            | OutputOrderAsTree -> "--output-order=tree-order"
+
+
+        
+
+    ///Collection of parameters for specifying clustalo alignment
+//    CLUSTERING
+//  --distmat-in=
+//	    Pairwise distance matrix input file (skips distance computation)
+//
+//  --distmat-out=
+//	    Pairwise distance matrix output file
+//
+//  --guidetree-in=
+//	    Guide tree input file
+//	    (skips distance computation and guide tree clustering step)
+//
+//  --guidetree-out=
+//	    Guide tree output file
+//
+//  --full
+//	    Use full distance matrix for guide-tree calculation (slow; mBed is default)
+//
+//  --full-iter
+//	    Use full distance matrix for guide-tree calculation during iteration (mBed is default)
+//
+//  --cluster-size=        
+//	    soft maximum of sequences in sub-clusters
+//
+//  --clustering-out=   
+//	    Clustering output file
+//
+//  --use-kimura
+//      use Kimura distance correction for aligned sequences (default no)
+//
+//  --percent-id
+//	    convert distances into percent identities (default no)
+//
+
+    ///Optional modifiers to specify clustering
+    type ClusteringCustom =
+        ///Pairwise distance matrix input file (skips distance computation)
+        | DistanceMatrixInput of string
+        ///Pairwise distance matrix output file
+        | DistanceMatrixOutput of string
+        ///Guide tree input file (skips distance computation and guide tree clustering step)
+        | GuideTreeInput of string
+        ///Guide tree output file
+        | GuideTreeOutput of string
+        ///Use full distance matrix for guide-tree calculation (slow; mBed is default)
+        | Full
+        ///Use full distance matrix for guide-tree calculation during iteration (mBed is default)
+        | FullIter
+        /// Soft maximum of sequences in sub-clusters
+        | ClusterSize of int
+        ///	Clustering output file
+        | ClusteringOut of string
+        /// Use Kimura distance correction for aligned sequences (default no)
+        | UseKimura
+        /// convert distances into percent identities (default no)
+        | PercentID
+    
+        static member make = function
+            | DistanceMatrixInput path  -> [sprintf "--distmat-in=%s" path      ]
+            | DistanceMatrixOutput path -> [sprintf "--distmat-out=%s" path     ]
+            | GuideTreeInput path       -> [sprintf "--guidetree-in=%s" path    ]
+            | GuideTreeOutput path      -> [sprintf "--guidetree-out=%s" path   ]
+            | Full                      -> ["--full"                            ]
+            | FullIter                  -> ["--full-iter"                       ]
+            | ClusterSize i             -> [sprintf "--cluster-size=%i" i       ]
+            | ClusteringOut path        -> [sprintf "--clustering-out=%s" path  ]
+            | UseKimura                 -> ["--use-kimura"                      ]
+            | PercentID                 -> ["--percent-id"                      ]
+
+        static member makeWith (m: MountInfo) = 
+            let cPath p = (MountInfo.containerPathOf m p)
+            function
+            | DistanceMatrixInput path  -> [sprintf "--distmat-in=%s" (cPath path)      ]
+            | DistanceMatrixOutput path -> [sprintf "--distmat-out=%s" (cPath path)     ]
+            | GuideTreeInput path       -> [sprintf "--guidetree-in=%s" (cPath path)    ]
+            | GuideTreeOutput path      -> [sprintf "--guidetree-out=%s" (cPath path)   ]
+            | Full                      -> ["--full"]
+            | FullIter                  -> ["--full-iter"]
+            | ClusterSize i             -> [sprintf "--cluster-size=%i" i]
+            | ClusteringOut path        -> [sprintf "--clustering-out=%s" (cPath path)  ]
+            | UseKimura                 -> ["--use-kimura"]
+            | PercentID                 -> ["--percent-id"]
+
+//ITERATION:
+//
+//  --iterations, --iter=  Number of (combined guide tree/HMM) iterations
+//
+//  --max-guidetree-iterations= Maximum guide tree iterations
+//
+//  --max-hmm-iterations=  Maximum number of HMM iterations
+
+    ///Specify maximum number of iterations for given step
+    type IterationCustom =
+        /// Number of (combined guide tree/HMM) iterations
+        | Iterations of int
+        /// Maximum guide tree iterations
+        | MaxGuideTreeIterations of int
+        ///  Maximum number of HMM iterations
+        | MaxHMMIterations of int
+    
+        static member make = function
+            | Iterations i              -> [sprintf "--iter=%i" i]
+            | MaxGuideTreeIterations i  -> [sprintf "--max-guidetree-iterations=%i" i]
+            | MaxHMMIterations i        -> [sprintf "--max-hmm-iterations=%i" i]
+
+
+//LIMITS (will exit early, if exceeded):
+//
+//  --maxnumseq=           Maximum allowed number of sequences
+//
+//  --maxseqlen=           Maximum allowed sequence length
+    /// Will exit early, if exceeded
+    type LimitsCustom =
+        /// Maximum allowed number of sequences
+        | MaxSeqNumber of int
+        /// Maximum allowed sequence length
+        | MaxSeqLength of int
+    
+        static member make = function
+            | MaxSeqNumber i -> [sprintf "--maxnumseq=%i" i]
+            | MaxSeqLength i -> [sprintf "--maxseqlen=%i" i]
+
+
+//MISCELLANEOUS:
+//
+//  --auto                    Set options automatically (might overwrite some of your options)
+//
+//  --threads=             Number of processors to use
+//
+//  -l, --log=          Log all non-essential output to this file
+//
+//  -h, --help                Print help and exit
+//
+//  -v, --verbose             Verbose output (increases if given multiple times)
+//
+//  --version                 Print version information and exit
+//
+//  --long-version            Print long version information and exit
+//
+//  --force                   Force file overwriting
+
+    ///Optional, miscallaneous modifiers 
+    type MiscellaneousCustom =
+        /// Set options automatically (might overwrite some of your options)
+        | Auto
+        /// Number of processors to use
+        | Threads of int
+        /// Log all non-essential output to this file
+        | Log of string
+        /// Print help and exit
+        //| Help
+        /// Verbose output (ranging from 0 [nonverbose,standard] to 3 [very verbose,everything above 3 is set to 3])
+        | VerboseLevel of int
+        /// Print version information and exit
+        | Version
+        /// Print long version information and exit
+        | LongVersion
+        /// Force file overwriting
+        | Force
+
+        static member make = function
+            | Auto          -> ["--auto"]
+            | Threads i     -> [sprintf "--threads=%i" i]
+            | Log s         -> [sprintf "--log=%s" s]
+            //| Help -> "--help "
+            | VerboseLevel i-> 
+                if i > 0 && i < 4 then
+                    [for n = 0 to i-1 do yield "-v"]
+                elif i > 3 then
+                    ["-v"; "-v"; "-v"]
+                else
+                    []
+            | Version       -> ["--version"]
+            | LongVersion   -> ["--long-version"]
+            | Force         -> ["--force"]
+
+        static member makeWith (m: MountInfo) = 
+            let cPath p = (MountInfo.containerPathOf m p)
+            function
+            | Auto          -> ["--auto"]
+            | Threads i     -> [sprintf "--threads=%i" i]
+            | Log path      -> [sprintf "--log=%s" (cPath path)]
+            //| Help -> "--help "
+            | VerboseLevel i-> 
+                if i > 0 then
+                    [for n = 0 to i-1 do yield "-v"]
+                else
+                    []
+            | Version       -> ["--version"]
+            | LongVersion   -> ["--long-version"]
+            | Force         -> ["--force"]
+
+    type ClustalOParams = 
+        /// Specify input parameters
+        | Input         of FileInput * InputCustom list
+        /// Specify output parameters
+        | Output        of string * OutputCustom list
+        /// Specify clustering parameters
+        | Clustering    of ClusteringCustom list
+        /// Specify iteration parameters
+        | Iteration     of IterationCustom list
+        /// Specify limits parameters
+        | Limits        of LimitsCustom list
+        /// Specify miscallaneous parameters
+        | Miscellaneous of MiscellaneousCustom list
+
+        static member makeCmd = function
+            | Input (i,p)       ->  let tmp = 
+                                        p 
+                                        |> List.map InputCustom.make
+                                    (FileInput.make i)@tmp
+            | Output (o,p)      ->  let tmp = 
+                                        p 
+                                        |> List.map OutputCustom.make
+                                    ["-o"; o]@tmp
+            | Clustering cl     -> cl   |> List.map ClusteringCustom.make   |> List.concat
+            | Iteration it      -> it   |> List.map IterationCustom.make    |> List.concat
+            | Limits l          -> l    |> List.map LimitsCustom.make       |> List.concat
+            | Miscellaneous misc-> misc |> List.map MiscellaneousCustom.make|> List.concat
+
+
+        static member makeCmdWith (m: MountInfo) = 
+            let cPath p = (MountInfo.containerPathOf m p)
+            function
+            | Input (i,p)       ->  let tmp = 
+                                        p 
+                                        |> List.map InputCustom.make
+                                    (FileInput.makeWith m i)@tmp
+            | Output (o,p)      ->  let tmp = 
+                                        p 
+                                        |> List.map OutputCustom.make
+                                    ["-o"; (cPath o)]@tmp
+            | Clustering cl     -> cl   |> List.map (ClusteringCustom.makeWith m)   |> List.concat
+            | Iteration it      -> it   |> List.map IterationCustom.make            |> List.concat
+            | Limits l          -> l    |> List.map LimitsCustom.make               |> List.concat
+            | Miscellaneous misc-> misc |> List.map (MiscellaneousCustom.makeWith m)|> List.concat
+
+
+    let runClustalOAsync (bcContext:BioContainer.BcContext) (opt:ClustalOParams list) = 
+
+        let cmds = (opt |> List.map (ClustalOParams.makeCmdWith bcContext.Mount))
+        let tp = "clustalo"::(cmds |> List.concat)
+
+        printfn "Starting process clustalo\r\nparameters:"
+        cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+        async {
+                let! res = BioContainer.execAsync bcContext tp           
+                return res
+        }
+
+    let runClustalO (bcContext:BioContainer.BcContext) (opt:ClustalOParams list) = 
+        runClustalOAsync bcContext opt
+        |> Async.RunSynchronously
+
+

From 371357a500af25238e6aaf3e073a63e794b4a47a Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 13 Feb 2019 19:18:49 +0100
Subject: [PATCH 23/74] Add HMMER API library for HMMER biocontainer. - Add
 hmmbuild API to HMMER biocontainer API

---
 .../BioFSharp.BioTools.fsproj                 |   1 +
 src/BioFSharp.BioTools/HMMER.fs               | 321 ++++++++++++++++++
 2 files changed, 322 insertions(+)
 create mode 100644 src/BioFSharp.BioTools/HMMER.fs

diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
index 3c1c410c..d2c86476 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
@@ -21,6 +21,7 @@
     
     
     
+    
     
     
   
diff --git a/src/BioFSharp.BioTools/HMMER.fs b/src/BioFSharp.BioTools/HMMER.fs
new file mode 100644
index 00000000..b971dda4
--- /dev/null
+++ b/src/BioFSharp.BioTools/HMMER.fs
@@ -0,0 +1,321 @@
+namespace BioFSharp.BioTools
+
+// adaped from the hmmer usage guide at http://eddylab.org/software/hmmer/Userguide.pdf
+// HMMER: biosequence analysis using profile hidden Markov models (http://hmmer.org/)
+
+module HMMER =
+
+    open BioContainer
+
+    module HMMbuild =
+        //Usage: hmmbuild [-options]  
+
+        ///Options for selecting alphabet rather than guessing it:
+        //  --amino : input alignment is protein sequence data
+        //  --dna   : input alignment is DNA sequence data
+        //  --rna   : input alignment is RNA sequence data
+
+        type AlphabetType =
+            ///input alignment is protein sequence data
+            | AminoAcids
+            ///input alignment is DNA sequence data
+            | DNA
+            ///input alignment is RNA sequence data
+            | RNA
+
+            static member make = function
+                | AminoAcids->  ["--amino"]
+                | DNA       ->  ["--dna"]
+                | RNA       ->  ["--rna"]
+
+        ///Alternative model construction strategies:
+        //  --fast           : assign cols w/ >= symfrac residues as consensus  [default]
+        //  --hand           : manual construction (requires reference annotation)
+        //  --symfrac     : sets sym fraction controlling --fast construction  [0.5]
+        //  --fragthresh  : if L <= x*alen, tag sequence as a fragment  [0.5]
+
+        type ModelConstructionCustom =
+            | Fast
+            | Manual
+            | SymFraction       of float
+            | FragmentThreshold of float
+
+            static member make = function
+                | Fast                  -> ["--fast"]
+                | Manual                -> ["--hand"]
+                | SymFraction sf        -> ["--symfrac"; string sf]
+                | FragmentThreshold ft  -> ["--fragthresh"; string ft]
+
+        ///Alternative relative sequence weighting strategies:
+        //  --wpb     : Henikoff position-based weights  [default]
+        //  --wgsc    : Gerstein/Sonnhammer/Chothia tree weights
+        //  --wblosum : Henikoff simple filter weights
+        //  --wnone   : don't do any relative weighting; set all to 1
+        //  --wgiven  : use weights as given in MSA file
+        //  --wid  : for --wblosum: set identity cutoff  [0.62]  (0<=x<=1)
+
+        type RelativeSequenceWeightingCustom =
+            ///Henikoff position-based weights
+            | PositionBased
+            ///Gerstein/Sonnhammer/Chothia tree weights
+            | GSC
+            ///Henikoff simple filter weights
+            | Blosum
+            ///for Blosum: set identity cutoff (0<=x<=1)
+            | BlosumIdentityCutoff of float
+            ///don't do any relative weighting; set all to 1
+            | NoRelativeWeighting
+            ///use weights as given in MSA file
+            | Given 
+            
+            static member make = function
+                | PositionBased         -> ["--wpb"]
+                | GSC                   -> ["--wgsc"]
+                | Blosum                -> ["--wblosum"]
+                | BlosumIdentityCutoff c-> ["--wid"; string c]
+                | NoRelativeWeighting   -> ["--wnone"]
+                | Given                 -> ["--wgiven"]
+
+        ///Alternative effective sequence weighting strategies:
+        //  --eent       : adjust eff seq # to achieve relative entropy target  [default]
+        //  --eclust     : eff seq # is # of single linkage clusters
+        //  --enone      : no effective seq # weighting: just use nseq
+        //  --eset    : set eff seq # for all models to 
+        //  --ere     : for --eent: set minimum rel entropy/position to 
+        //  --esigma  : for --eent: set sigma param to   [45.0]
+        //  --eid     : for --eclust: set fractional identity cutoff to   [0.62]
+
+        type EffectiveSequenceWeightingCustom =
+            ///adjust eff seq # to achieve relative entropy target
+            | EntropyTargeted
+            ///for EntropyTargeted: set minimum rel entropy/position to 
+            | MinimalEntropy        of float
+            ///for EntropyTargeted: set sigma param to   [45.0]
+            | EntropySigma          of float
+            ///eff seq # is # of single linkage clusters
+            | SingleLinkageClusters
+            ///for SingleLinkageClusters: set fractional identity cutoff to   [0.62]
+            | ClusterIdentityCutoff of float
+            ///no effective seq # weighting: just use nseq
+            | NoEffectiveWeighting
+            ///set eff seq # for all models to 
+            | Set                   of float
+
+            static member make = function 
+                | EntropyTargeted           -> ["--eent"]
+                | SingleLinkageClusters     -> ["--eclust"]
+                | NoEffectiveWeighting      -> ["--enone"]
+                | Set s                     -> ["--eset";   string s]
+                | MinimalEntropy me         -> ["--ere";    string me]
+                | EntropySigma es           -> ["--esigma"; string es]
+                | ClusterIdentityCutoff c   -> ["--eid";    string c]
+
+
+        ///Alternative prior strategies:
+        //  --pnone       : don't use any prior; parameters are frequencies
+        //  --plaplace    : use a Laplace +1 prior
+        //  --popen    : force gap open prob. (w/ --singlemx, aa default 0.02, nt 0.031)
+        //  --pextend  : force gap extend prob. (w/ --singlemx, aa default 0.4, nt 0.75)
+
+        type PriorCustom =
+            ///don't use any prior; parameters are frequencies
+            | NoPrior
+            ///use a Laplace +1 prio
+            | Laplace
+            ///force gap open prob.
+            | ForcePGapOpen     of float
+            ///force gap extend prob
+            | ForcePGapExtend   of float
+
+            static member make = function 
+                |NoPrior            -> ["--pnone"]
+                |Laplace            -> ["--plaplace"]
+                |ForcePGapOpen f    -> ["--popen"; string f]
+                |ForcePGapExtend f  -> ["--pextend"; string f]
+
+        type SubstitutionScoreMatrix =
+            |PAM30      
+            |PAM70 
+            |PAM120 
+            |PAM240 
+            |BLOSUM45 
+            |BLOSUM50 
+            |BLOSUM62 
+            |BLOSUM80 
+            |BLOSUM90
+            |DNA1
+
+            static member make = function
+                |PAM30   -> "PAM30"
+                |PAM70   -> "PAM70"
+                |PAM120  -> "PAM120"
+                |PAM240  -> "PAM240"
+                |BLOSUM45-> "BLOSUM45"
+                |BLOSUM50-> "BLOSUM50"
+                |BLOSUM62-> "BLOSUM62"
+                |BLOSUM80-> "BLOSUM80"
+                |BLOSUM90-> "BLOSUM90"
+                |DNA1    -> "DNA1"
+
+        ///Handling single sequence inputs:
+        //  --singlemx   : use substitution score matrix for single-sequence inputs
+        //  --mx      : substitution score matrix (built-in matrices, with --singlemx)
+        //  --mxfile  : read substitution score matrix from file  (with --singlemx)
+        type SingleSequenceHandlingCustom =
+            ///use substitution score matrix for single-sequence inputs
+            | UseSubstitutionMatrix
+            ///substitution score matrix (built-in matrices, use with UseSubstitutionMatrix)
+            | SMatrix       of SubstitutionScoreMatrix
+            ///read substitution score matrix from file (use with UseSubstitutionMatrix)
+            | SMatrixFile   of string
+
+            static member make = function
+                | UseSubstitutionMatrix -> ["--singlemx"]
+                | SMatrix s             -> ["--mx"; (SubstitutionScoreMatrix.make s)]
+                | SMatrixFile path      -> ["--mxfile"; path]
+
+            static member makeWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | UseSubstitutionMatrix -> ["--singlemx"]
+                | SMatrix s             -> ["--mx"; (SubstitutionScoreMatrix.make s)]
+                | SMatrixFile path      -> ["--mxfile"; cPath path]
+
+        //Control of E-value calibration:
+        //  --EmL  : length of sequences for MSV Gumbel mu fit  [200]  (n>0)
+        //  --EmN  : number of sequences for MSV Gumbel mu fit  [200]  (n>0)
+        //  --EvL  : length of sequences for Viterbi Gumbel mu fit  [200]  (n>0)
+        //  --EvN  : number of sequences for Viterbi Gumbel mu fit  [200]  (n>0)
+        //  --EfL  : length of sequences for Forward exp tail tau fit  [100]  (n>0)
+        //  --EfN  : number of sequences for Forward exp tail tau fit  [200]  (n>0)
+        //  --Eft  : tail mass for Forward exponential tail tau fit  [0.04]  (0 ["--EmL";string l]
+                | MSVNumber         n   -> ["--EmN";string n]
+                | ViterbiLength     l   -> ["--EvL";string l]
+                | ViterbiNumber     n   -> ["--EvN";string n]
+                | ForwardLength     l   -> ["--EfL";string l]
+                | ForwardNumber     n   -> ["--EfN";string n]
+                | ForwardTailMass   m   -> ["--Eft";string m]
+
+        ///Other options:
+        //  --cpu           : number of parallel CPU workers for multithreads
+        //  --stall            : arrest after start: for attaching debugger to process
+        //  --informat      : assert input alifile is in format  (no autodetect)
+        //  --seed          : set RNG seed to  (if 0: one-time arbitrary seed)  [42]
+        //  --w_beta        : tail mass at which window length is determined
+        //  --w_length      : window length
+        //  --maxinsertlen  : pretend all inserts are length <= 
+
+        type MiscellaneousCustom =
+            ///number of parallel CPU workers for multithreads
+            | Threads               of int
+            ///arrest after start: for attaching debugger to process
+            | Stall
+            ///assert input alifile is in format  (no autodetect)
+            | AssertInFormat        of string
+            ///set RNG seed to  (if 0: one-time arbitrary seed)
+            | Seed                  of int
+            ///tail mass at which window length is determined
+            | TailMass              of float
+            ///window length
+            | WindowLength          of int
+            ///pretend all inserts are length <= 
+            | MaxInsertionLength    of int
+
+            static member make = function
+                | Threads t             -> ["--cpu"; string t]
+                | Stall                 -> ["--stall"]
+                | AssertInFormat f      -> ["--informat"; f]
+                | Seed s                -> ["--seed"; string s]
+                | TailMass m            -> ["--w_beta"; string m]
+                | WindowLength wl       -> ["--w_length"; string wl]
+                | MaxInsertionLength l  -> ["--maxinsertlen"; string l]
+
+        //Basic options:
+        //  -h     : show brief help on version and usage
+        //  -n  : name the HMM 
+        //  -o  : direct summary output to file , not stdout
+        //  -O  : resave annotated, possibly modified MSA to file 
+
+        type HMMbuildParams =
+            ///Multiple sequence alignment input file
+            | InputMSAFile                   of string
+            ///HMM file to save the generated HMMs to
+            | OutputHMMFile                  of string
+            ///name the HMM
+            | Name                          of string
+            ///direct summary output to file , not stdout
+            | SummaryToFile                 of string
+            ///resave annotated, possibly modified MSA to file
+            | ResaveFile                    of string
+            ///Specify the alphabet used in the alignment file
+            | Alphabet                      of AlphabetType list
+            ///Alternative model construction strategies:
+            | ModelConstruction             of ModelConstructionCustom list
+            ///Alternative relative sequence weighting strategies
+            | RelativeSequenceWeighting     of RelativeSequenceWeightingCustom list
+            ///Alternative effective sequence weighting strategies
+            | EffectiveSequenceWeighting    of EffectiveSequenceWeightingCustom list
+            ///Alternative prior strategies
+            | Prior                         of PriorCustom list
+            ///Handling single sequence inputs
+            | SingleSequenceHandling        of SingleSequenceHandlingCustom list
+            ///Control of E-value calibration
+            |EValueControl                  of EValueControlCustom list
+            ///Other options
+            |Miscellaneous                  of MiscellaneousCustom list
+
+            static member makeCmd = ()
+
+            static member makeCmdWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function 
+                    | InputMSAFile path                     -> [cPath path]
+                    | OutputHMMFile path                    -> [cPath path]
+                    | Name n                                -> ["-n";n]
+                    | SummaryToFile path                    -> ["-o";cPath path]
+                    | ResaveFile path                       -> ["-O";cPath path]
+                    | Alphabet aList                        -> aList    |> List.map AlphabetType.make |> List.concat
+                    | ModelConstruction mcList              -> mcList   |> List.map ModelConstructionCustom.make                |> List.concat
+                    | RelativeSequenceWeighting rswList     -> rswList  |> List.map RelativeSequenceWeightingCustom.make        |> List.concat
+                    | EffectiveSequenceWeighting eswList    -> eswList  |> List.map EffectiveSequenceWeightingCustom.make       |> List.concat
+                    | Prior pList                           -> pList    |> List.map PriorCustom.make                            |> List.concat
+                    | SingleSequenceHandling sshList        -> sshList  |> List.map (SingleSequenceHandlingCustom.makeWith m)   |> List.concat
+                    | EValueControl evcList                 -> evcList  |> List.map EValueControlCustom.make                    |> List.concat
+                    | Miscellaneous mList                   -> mList    |> List.map MiscellaneousCustom.make                    |> List.concat
+
+        let runHMMbuildAsync (bcContext:BioContainer.BcContext) (opt:HMMbuildParams list) = 
+            let cmds = (opt |> List.map (HMMbuildParams.makeCmdWith bcContext.Mount))
+            let tp = "hmmbuild"::(cmds |> List.concat)
+
+            printfn "Starting process blastn\r\nparameters:"
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                    let! res = BioContainer.execAsync bcContext tp           
+                    return res
+ 
+            }
+        
+        let runHMMbuild (bcContext:BioContainer.BcContext) (opt:HMMbuildParams list) = 
+            runHMMbuildAsync bcContext opt
+            |> Async.RunSynchronously
+

From 60b8e5199682762c31e9a33cc03a3441d16c9854 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Thu, 14 Feb 2019 15:33:33 +0100
Subject: [PATCH 24/74] Add HMMsearch API to HMMER biocontainer API

---
 src/BioFSharp.BioTools/BioFSharp.BioTools.fsx |  20 +-
 src/BioFSharp.BioTools/HMMER.fs               | 475 ++++++++++++++++--
 2 files changed, 456 insertions(+), 39 deletions(-)

diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
index 1b7b03fc..ffea26d0 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsx
@@ -15,6 +15,7 @@
 #load "TargetP.fs"
 #load "Blast.fs"
 #load "ClustalO.fs"
+#load "HMMER.fs"
 
 open System.Threading
 open System.Threading
@@ -474,4 +475,21 @@ let clustalOParamz = [
         ]
 ]
 
-runClustalO clustalContext clustalOParamz
\ No newline at end of file
+runClustalO clustalContext clustalOParamz
+
+open HMMER
+open HMMER.HMMbuild
+
+let HMMERImage =  Docker.ImageName "hmmer"
+
+let hmmerContext = 
+    BioContainer.initBcContextWithMountAsync client HMMERImage @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data"
+    |> Async.RunSynchronously
+
+let hmmbuildParamz = 
+    [
+        InputMSAFile @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\hmmer_testfiles\globins4.sto"
+        OutputHMMFile @"C:\Users\Kevin\source\repos\CsbScaffold\Docker\data\hmmer_testfiles\testOutput.hmm"
+    ]
+
+runHMMbuild hmmerContext hmmbuildParamz
\ No newline at end of file
diff --git a/src/BioFSharp.BioTools/HMMER.fs b/src/BioFSharp.BioTools/HMMER.fs
index b971dda4..5b50045d 100644
--- a/src/BioFSharp.BioTools/HMMER.fs
+++ b/src/BioFSharp.BioTools/HMMER.fs
@@ -7,6 +7,21 @@ module HMMER =
 
     open BioContainer
 
+    //Common parameter types for multiple CLI tools
+    type AlphabetType =
+        ///input alignment is protein sequence data
+        | AminoAcids
+        ///input alignment is DNA sequence data
+        | DNA
+        ///input alignment is RNA sequence data
+        | RNA
+
+        static member make = function
+            | AminoAcids->  ["--amino"]
+            | DNA       ->  ["--dna"]
+            | RNA       ->  ["--rna"]
+
+    ///hmmbuild - construct profiles from multiple sequence alignments
     module HMMbuild =
         //Usage: hmmbuild [-options]  
 
@@ -15,18 +30,6 @@ module HMMER =
         //  --dna   : input alignment is DNA sequence data
         //  --rna   : input alignment is RNA sequence data
 
-        type AlphabetType =
-            ///input alignment is protein sequence data
-            | AminoAcids
-            ///input alignment is DNA sequence data
-            | DNA
-            ///input alignment is RNA sequence data
-            | RNA
-
-            static member make = function
-                | AminoAcids->  ["--amino"]
-                | DNA       ->  ["--dna"]
-                | RNA       ->  ["--rna"]
 
         ///Alternative model construction strategies:
         //  --fast           : assign cols w/ >= symfrac residues as consensus  [default]
@@ -34,7 +37,7 @@ module HMMER =
         //  --symfrac     : sets sym fraction controlling --fast construction  [0.5]
         //  --fragthresh  : if L <= x*alen, tag sequence as a fragment  [0.5]
 
-        type ModelConstructionCustom =
+        type ModelConstructionOptions =
             | Fast
             | Manual
             | SymFraction       of float
@@ -54,7 +57,7 @@ module HMMER =
         //  --wgiven  : use weights as given in MSA file
         //  --wid  : for --wblosum: set identity cutoff  [0.62]  (0<=x<=1)
 
-        type RelativeSequenceWeightingCustom =
+        type RelativeSequenceWeightingOptions =
             ///Henikoff position-based weights
             | PositionBased
             ///Gerstein/Sonnhammer/Chothia tree weights
@@ -85,7 +88,7 @@ module HMMER =
         //  --esigma  : for --eent: set sigma param to   [45.0]
         //  --eid     : for --eclust: set fractional identity cutoff to   [0.62]
 
-        type EffectiveSequenceWeightingCustom =
+        type EffectiveSequenceWeightingOptions =
             ///adjust eff seq # to achieve relative entropy target
             | EntropyTargeted
             ///for EntropyTargeted: set minimum rel entropy/position to 
@@ -117,7 +120,7 @@ module HMMER =
         //  --popen    : force gap open prob. (w/ --singlemx, aa default 0.02, nt 0.031)
         //  --pextend  : force gap extend prob. (w/ --singlemx, aa default 0.4, nt 0.75)
 
-        type PriorCustom =
+        type PriorOptions =
             ///don't use any prior; parameters are frequencies
             | NoPrior
             ///use a Laplace +1 prio
@@ -161,7 +164,7 @@ module HMMER =
         //  --singlemx   : use substitution score matrix for single-sequence inputs
         //  --mx      : substitution score matrix (built-in matrices, with --singlemx)
         //  --mxfile  : read substitution score matrix from file  (with --singlemx)
-        type SingleSequenceHandlingCustom =
+        type SingleSequenceHandlingOptions =
             ///use substitution score matrix for single-sequence inputs
             | UseSubstitutionMatrix
             ///substitution score matrix (built-in matrices, use with UseSubstitutionMatrix)
@@ -190,7 +193,7 @@ module HMMER =
         //  --EfN  : number of sequences for Forward exp tail tau fit  [200]  (n>0)
         //  --Eft  : tail mass for Forward exponential tail tau fit  [0.04]  (0     : window length
         //  --maxinsertlen  : pretend all inserts are length <= 
 
-        type MiscellaneousCustom =
+        type MiscellaneousOptions =
             ///number of parallel CPU workers for multithreads
             | Threads               of int
             ///arrest after start: for attaching debugger to process
@@ -269,21 +272,35 @@ module HMMER =
             ///Specify the alphabet used in the alignment file
             | Alphabet                      of AlphabetType list
             ///Alternative model construction strategies:
-            | ModelConstruction             of ModelConstructionCustom list
+            | ModelConstruction             of ModelConstructionOptions list
             ///Alternative relative sequence weighting strategies
-            | RelativeSequenceWeighting     of RelativeSequenceWeightingCustom list
+            | RelativeSequenceWeighting     of RelativeSequenceWeightingOptions list
             ///Alternative effective sequence weighting strategies
-            | EffectiveSequenceWeighting    of EffectiveSequenceWeightingCustom list
+            | EffectiveSequenceWeighting    of EffectiveSequenceWeightingOptions list
             ///Alternative prior strategies
-            | Prior                         of PriorCustom list
+            | Prior                         of PriorOptions list
             ///Handling single sequence inputs
-            | SingleSequenceHandling        of SingleSequenceHandlingCustom list
+            | SingleSequenceHandling        of SingleSequenceHandlingOptions list
             ///Control of E-value calibration
-            |EValueControl                  of EValueControlCustom list
+            | EValueControl                 of EValueControlOptions list
             ///Other options
-            |Miscellaneous                  of MiscellaneousCustom list
+            | Miscellaneous                 of MiscellaneousOptions list
 
-            static member makeCmd = ()
+            static member makeCmd =
+                function 
+                    | InputMSAFile path                     -> [path]
+                    | OutputHMMFile path                    -> [path]
+                    | Name n                                -> ["-n";n]
+                    | SummaryToFile path                    -> ["-o";path]
+                    | ResaveFile path                       -> ["-O";path]
+                    | Alphabet aList                        -> aList    |> List.map AlphabetType.make |> List.concat
+                    | ModelConstruction mcList              -> mcList   |> List.map ModelConstructionOptions.make            |> List.concat
+                    | RelativeSequenceWeighting rswList     -> rswList  |> List.map RelativeSequenceWeightingOptions.make    |> List.concat
+                    | EffectiveSequenceWeighting eswList    -> eswList  |> List.map EffectiveSequenceWeightingOptions.make   |> List.concat
+                    | Prior pList                           -> pList    |> List.map PriorOptions.make                        |> List.concat
+                    | SingleSequenceHandling sshList        -> sshList  |> List.map SingleSequenceHandlingOptions.make       |> List.concat
+                    | EValueControl evcList                 -> evcList  |> List.map EValueControlOptions.make                |> List.concat
+                    | Miscellaneous mList                   -> mList    |> List.map MiscellaneousOptions.make                |> List.concat
 
             static member makeCmdWith (m:MountInfo) =
                 let cPath p = (MountInfo.containerPathOf m p)
@@ -294,19 +311,39 @@ module HMMER =
                     | SummaryToFile path                    -> ["-o";cPath path]
                     | ResaveFile path                       -> ["-O";cPath path]
                     | Alphabet aList                        -> aList    |> List.map AlphabetType.make |> List.concat
-                    | ModelConstruction mcList              -> mcList   |> List.map ModelConstructionCustom.make                |> List.concat
-                    | RelativeSequenceWeighting rswList     -> rswList  |> List.map RelativeSequenceWeightingCustom.make        |> List.concat
-                    | EffectiveSequenceWeighting eswList    -> eswList  |> List.map EffectiveSequenceWeightingCustom.make       |> List.concat
-                    | Prior pList                           -> pList    |> List.map PriorCustom.make                            |> List.concat
-                    | SingleSequenceHandling sshList        -> sshList  |> List.map (SingleSequenceHandlingCustom.makeWith m)   |> List.concat
-                    | EValueControl evcList                 -> evcList  |> List.map EValueControlCustom.make                    |> List.concat
-                    | Miscellaneous mList                   -> mList    |> List.map MiscellaneousCustom.make                    |> List.concat
+                    | ModelConstruction mcList              -> mcList   |> List.map ModelConstructionOptions.make                |> List.concat
+                    | RelativeSequenceWeighting rswList     -> rswList  |> List.map RelativeSequenceWeightingOptions.make        |> List.concat
+                    | EffectiveSequenceWeighting eswList    -> eswList  |> List.map EffectiveSequenceWeightingOptions.make       |> List.concat
+                    | Prior pList                           -> pList    |> List.map PriorOptions.make                            |> List.concat
+                    | SingleSequenceHandling sshList        -> sshList  |> List.map (SingleSequenceHandlingOptions.makeWith m)   |> List.concat
+                    | EValueControl evcList                 -> evcList  |> List.map EValueControlOptions.make                    |> List.concat
+                    | Miscellaneous mList                   -> mList    |> List.map MiscellaneousOptions.make                    |> List.concat
 
         let runHMMbuildAsync (bcContext:BioContainer.BcContext) (opt:HMMbuildParams list) = 
-            let cmds = (opt |> List.map (HMMbuildParams.makeCmdWith bcContext.Mount))
-            let tp = "hmmbuild"::(cmds |> List.concat)
-
-            printfn "Starting process blastn\r\nparameters:"
+            //Usage: hmmbuild [-options]   -> filter for in/out and move them to the end
+            let msa     = 
+                opt 
+                |> List.filter (fun p -> match p with |InputMSAFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input sequence given"
+                            else 
+                                HMMbuildParams.makeCmdWith bcContext.Mount x.[0]
+
+            let hmm     = 
+                opt 
+                |> List.filter (fun p -> match p with |OutputHMMFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no output sequence given"
+                            else 
+                                HMMbuildParams.makeCmdWith bcContext.Mount x.[0]
+
+            let options = opt |> List.filter (fun p -> match p with |InputMSAFile _ |OutputHMMFile _ -> false |_ -> true)
+            let cmds = (options |> List.map (HMMbuildParams.makeCmdWith bcContext.Mount))
+            let tp = ("hmmbuild"::(cmds |> List.concat))@hmm@msa
+
+            printfn "Starting process hmmbuildn\r\nparameters:"
+            printfn "%s" msa.[0]
+            printfn "%s" hmm.[0]
             cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
 
             async {
@@ -319,3 +356,365 @@ module HMMER =
             runHMMbuildAsync bcContext opt
             |> Async.RunSynchronously
 
+    ///hmmalign - align sequences to a profile
+    module HMMalign =
+        //Usage: hmmalign [-options]  
+
+        //Basic options:
+        //  -h     : show brief help on version and usage
+        //  -o  : output alignment to file , not stdout
+
+        //Less common options:
+        //  --mapali     : include alignment in file  (same ali that HMM came from)
+        //  --trim          : trim terminal tails of nonaligned residues from alignment
+        //  --amino         : assert ,  both protein: no autodetection
+        //  --dna           : assert ,  both DNA: no autodetection
+        //  --rna           : assert ,  both RNA: no autodetection
+        //  --informat   : assert  is in format : no autodetection
+        //  --outformat  : output alignment in format   [Stockholm]
+
+        type HMMalignParams =
+            ///HMM input file
+            | InputHMMFile          of string
+            ///Input sequence file to align.
+            ///Sequence input formats include: FASTA, EMBL, GenBank, UniProt
+            | InputSequenceFile     of string
+            ///output alignment to file not stdout
+            ///Alignment output formats include: Stockholm, Pfam, A2M, PSIBLAST
+            | SummaryToFile         of string
+            ///assert alphabet to both input hmm and seqfile
+            | Alphabet              of AlphabetType list
+            ///assert  is in format : no autodetection
+            | SequenceFileFormat    of string
+            ///output alignment in format 
+            | OutFormat             of string
+            ///trim terminal tails of nonaligned residues from alignment
+            | Trim
+            ///include alignment in file  (same ali that HMM came from)
+            | MapAlignmentToFile    of string
+
+            static member makeCmd = function
+                | InputHMMFile path         -> [path]
+                | InputSequenceFile path    -> [path]
+                | SummaryToFile path        -> ["-o";path]
+                | Alphabet aList            -> aList |> List.map AlphabetType.make |> List.concat
+                | SequenceFileFormat f      -> ["--informat" ;f]
+                | OutFormat f               -> ["--outformat" ;f]
+                | Trim                      -> ["--trim"]
+                | MapAlignmentToFile path   -> ["--mapali"; path]
+
+            static member makeCmdWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | InputHMMFile path         -> [cPath path]
+                | InputSequenceFile path    -> [cPath path]
+                | SummaryToFile path        -> ["-o";cPath path]
+                | Alphabet aList            -> aList |> List.map AlphabetType.make |> List.concat
+                | SequenceFileFormat f      -> ["--informat" ;f]
+                | OutFormat f               -> ["--outformat" ;f]
+                | Trim                      -> ["--trim"]
+                | MapAlignmentToFile path   -> ["--mapali"; cPath path]
+
+
+
+        let runHMMalignAsync (bcContext:BioContainer.BcContext) (opt:HMMalignParams list) = 
+            //Usage: hmmbuild [-options]   -> filter for in/out and move them to the end
+            let hmm     = 
+                opt 
+                |> List.filter (fun p -> match p with |InputHMMFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input hmm given"
+                            else 
+                                HMMalignParams.makeCmdWith bcContext.Mount x.[0]
+
+            let seqFile     = 
+                opt 
+                |> List.filter (fun p -> match p with |InputSequenceFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input sequence file given"
+                            else 
+                                HMMalignParams.makeCmdWith bcContext.Mount x.[0]
+
+            let options = opt |> List.filter (fun p -> match p with |InputHMMFile _ |InputSequenceFile _ -> false |_ -> true)
+            let cmds = (options |> List.map (HMMalignParams.makeCmdWith bcContext.Mount))
+            let tp = ("hmmalign"::(cmds |> List.concat))@hmm@seqFile
+
+            printfn "Starting process hmmalignn\r\nparameters:"
+            printfn "%s" hmm.[0]
+            printfn "%s" seqFile.[0]
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                    let! res = BioContainer.execAsync bcContext tp           
+                    return res
+ 
+            }
+        ///Perform a multiple sequence alignment of all the sequences in seqfile by aligning
+        ///them individually to the profile HMM in hmmfile. The new alignment is output to
+        ///stdout.
+        let runHMMalign (bcContext:BioContainer.BcContext) (opt:HMMalignParams list) =
+            runHMMalignAsync bcContext opt
+            |> Async.RunSynchronously
+
+    ///hmmsearch - search profile(s) against a sequence database
+    module HMMsearch =
+        
+        ///Options directing output:
+        //  -o            : direct output to file , not stdout
+        //  -A            : save multiple alignment of all hits to file 
+        //  --tblout      : save parseable table of per-sequence hits to file 
+        //  --domtblout   : save parseable table of per-domain hits to file 
+        //  --pfamtblout  : save table of hits and domains to file, in Pfam format 
+        //  --acc            : prefer accessions over names in output
+        //  --noali          : don't output alignments, so output is smaller
+        //  --notextw        : unlimit ASCII text output line width
+        //  --textw       : set max width of ASCII text output lines  [120]  (n>=120)
+
+        type OutputDirectionsOptions =
+            ///direct output to file , not stdout
+            | OutputToFile              of string
+            ///save multiple alignment of all hits to file 
+            | AllHitsToFile             of string
+            ///save parseable table of per-sequence hits to file 
+            | HitsToPerSequenceTable    of string
+            ///save parseable table of per-domain hits to file 
+            | HitsToPerDomainTable      of string
+            ///save table of hits and domains to file, in Pfam format 
+            | HitsToPfam                of string
+            ///prefer accessions over names in output
+            | PreferAccessionsOverNames
+            ///don't output alignments, so output is smaller
+            | NoAlignments
+            ///unlimit ASCII text output line width
+            | UnlimitedTextLineWidth
+            ///set max width of ASCII text output lines
+            | MaxTextLineWidth          of int
+
+            static member make = 
+                function
+                | OutputToFile path             -> ["-o"; path]
+                | AllHitsToFile path            -> ["-A"; path]
+                | HitsToPerSequenceTable path   -> ["--tblout"; path]
+                | HitsToPerDomainTable path     -> ["--domtblout"; path]
+                | HitsToPfam path               -> ["--pfamtblout"; path]
+                | PreferAccessionsOverNames     -> ["--acc"]
+                | NoAlignments                  -> ["--noali"]
+                | UnlimitedTextLineWidth        -> ["--notextw "]
+                | MaxTextLineWidth lw           -> ["--textw"]
+
+            static member makeWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | OutputToFile path             -> ["-o"; cPath path]
+                | AllHitsToFile path            -> ["-A"; cPath path]
+                | HitsToPerSequenceTable path   -> ["--tblout"; cPath path]
+                | HitsToPerDomainTable path     -> ["--domtblout"; cPath path]
+                | HitsToPfam path               -> ["--pfamtblout"; cPath path]
+                | PreferAccessionsOverNames     -> ["--acc"]
+                | NoAlignments                  -> ["--noali"]
+                | UnlimitedTextLineWidth        -> ["--notextw "]
+                | MaxTextLineWidth lw           -> ["--textw"]
+
+        ///Options controlling reporting thresholds:
+        //  -E      : report sequences <= this E-value threshold in output  [10.0]  (x>0)
+        //  -T      : report sequences >= this score threshold in output
+        //  --domE  : report domains <= this E-value threshold in output  [10.0]  (x>0)
+        //  --domT  : report domains >= this score cutoff in output
+
+        type ReportingThresholdOptions =
+            ///report sequences <= this E-value threshold in output
+            | MaxSequenceEvalue of float
+            ///report sequences >= this score threshold in output
+            | MinSequenceScore  of float
+            ///report domains <= this E-value threshold in output
+            | MaxDomainEvalue   of float
+            ///report domains >= this score cutoff in output
+            | MinDomainScore    of float
+
+            static member make = 
+                function
+                | MaxSequenceEvalue t   -> ["-E"; string t]
+                | MinSequenceScore  t   -> ["-T"; string t]
+                | MaxDomainEvalue   t   -> ["--domE"; string t]
+                | MinDomainScore    t   -> ["--domT"; string t]
+
+        ///Options controlling inclusion (significance) thresholds:
+        //  --incE     : consider sequences <= this E-value threshold as significant
+        //  --incT     : consider sequences >= this score threshold as significant
+        //  --incdomE  : consider domains <= this E-value threshold as significant
+        //  --incdomT  : consider domains >= this score threshold as significant
+
+        type InclusionThresholdOptions =
+            ///consider sequences <= this E-value threshold as significant
+            | MaxSequenceEvalue of float
+            ///consider sequences >= this score threshold as significant 
+            | MinSequenceScore  of float
+            ///consider domains <= this E-value threshold as significant
+            | MaxDomainEvalue   of float
+            ///consider domains >= this score threshold as significant
+            | MinDomainScore    of float
+
+            static member make = 
+                function
+                | MaxSequenceEvalue t   -> ["-incE"; string t]
+                | MinSequenceScore  t   -> ["-incT"; string t]
+                | MaxDomainEvalue   t   -> ["--incdomE"; string t]
+                | MinDomainScore    t   -> ["--incdomT"; string t]
+        
+        ///Options controlling model-specific thresholding:
+        //  --cut_ga : use profile's GA gathering cutoffs to set all thresholding
+        //  --cut_nc : use profile's NC noise cutoffs to set all thresholding
+        //  --cut_tc : use profile's TC trusted cutoffs to set all thresholding
+
+        type ModelSpecificThresholdOptions =
+            ///use profile's GA gathering cutoffs to set all thresholding
+            | GatheringCutoff
+            ///use profile's NC noise cutoffs to set all thresholding
+            | NoiseCutoff
+            ///use profile's TC trusted cutoffs to set all thresholding
+            | TrustedCutoff
+
+            static member make =
+                function
+                | GatheringCutoff   -> ["--cut_ga"]
+                | NoiseCutoff       -> ["--cut_nc"]
+                | TrustedCutoff     -> ["--cut_tc"]
+
+        ///Options controlling acceleration heuristics:
+        //  --max    : Turn all heuristic filters off (less speed, more power)
+        //  --F1  : Stage 1 (MSV) threshold: promote hits w/ P <= F1  [0.02]
+        //  --F2  : Stage 2 (Vit) threshold: promote hits w/ P <= F2  [1e-3]
+        //  --F3  : Stage 3 (Fwd) threshold: promote hits w/ P <= F3  [1e-5]
+        //  --nobias : turn off composition bias filter
+
+        type AccelerationHeuristicsOptions =
+            ///Turn all heuristic filters off (less speed, more power)
+            | NoFilters
+            ///Stage 1 (MSV) threshold: promote hits w/ P <= F1
+            | MSVThreshold  of float
+            ///Stage 2 (Vit) threshold: promote hits w/ P <= F2
+            | VitThreshold  of float
+            ///Stage 3 (Fwd) threshold: promote hits w/ P <= F3
+            | FwdThreshold  of float 
+            ///turn off composition bias filter
+            | NoBiasFilter
+
+            static member make =
+                function
+                | NoFilters     -> ["max"]
+                | MSVThreshold t-> ["F1"; string t]
+                | VitThreshold t-> ["F2"; string t]
+                | FwdThreshold t-> ["F3"; string t]
+                | NoBiasFilter  -> ["nobias"]
+
+        ///Other expert options:
+        //  --nonull2     : turn off biased composition score corrections
+        //  -Z         : set # of comparisons done, for E-value calculation
+        //  --domZ     : set # of significant seqs, for domain E-value calculation
+        //  --seed     : set RNG seed to  (if 0: one-time arbitrary seed)  [42]
+        //  --tformat  : assert target  is in format : no autodetection
+        //  --cpu      : number of parallel CPU workers to use for multithreads
+
+        type MiscellaneousOptions =
+            ///turn off biased composition score corrections
+            | TurnOffBiasedScoreCorrections
+            ///set # of comparisons done, for E-value calculation
+            | EValueComparisons     of int
+            ///set # of significant seqs, for domain E-value calculation
+            | NumberOfSigSeqs       of int
+            ///set RNG seed to  (if 0: one-time arbitrary seed)
+            | RNGSeed               of int
+            ///assert target  is in format : no autodetection
+            | SequenceFileFormat    of string
+            ///number of parallel CPU workers to use for multithreads
+            | Threads               of int   
+            
+            static member make =
+                function
+                | TurnOffBiasedScoreCorrections -> ["--nonull2"]
+                | EValueComparisons n           -> ["-Z"; string n]
+                | NumberOfSigSeqs n             -> ["--domZ"; string n]
+                | RNGSeed s                     -> ["--seed"; string s]
+                | SequenceFileFormat f          -> ["--tformat"; f]
+                | Threads t                     -> ["--cpu"; string t]
+
+        type HMMsearchParams =
+            /// Input HMM file containing query profiles to search for
+            | InputHMMFile              of string
+            /// Input sequence database to search query profiles in
+            | SequenceDB                of string
+            ///Options directing output
+            | OutputDirections          of OutputDirectionsOptions list
+            ///Options controlling reporting thresholds
+            | ReportingThreshold        of ReportingThresholdOptions list
+            ///Options controlling inclusion (significance) thresholds
+            | InclusionThreshold        of InclusionThresholdOptions list
+            ///Options controlling model-specific thresholding
+            | ModelSpecificThreshold    of ModelSpecificThresholdOptions list
+            ///Options controlling acceleration heuristics
+            | AccelerationHeuristics    of AccelerationHeuristicsOptions list
+            ///Other expert options
+            | Miscellaneous             of MiscellaneousOptions list
+
+            static member makeCMD = 
+                function
+                | InputHMMFile path                 -> [path]
+                | SequenceDB path                   -> [path]
+                | OutputDirections odList           -> odList |> List.map OutputDirectionsOptions.make          |> List.concat
+                | ReportingThreshold rtList         -> rtList |> List.map ReportingThresholdOptions.make        |> List.concat
+                | InclusionThreshold itList         -> itList |> List.map InclusionThresholdOptions.make        |> List.concat
+                | ModelSpecificThreshold mstList    -> mstList|> List.map ModelSpecificThresholdOptions.make    |> List.concat
+                | AccelerationHeuristics ahList     -> ahList |> List.map AccelerationHeuristicsOptions.make    |> List.concat
+                | Miscellaneous mList               -> mList  |> List.map MiscellaneousOptions.make             |> List.concat
+
+            static member makeCmdWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | InputHMMFile path                 -> [cPath path]
+                | SequenceDB path                   -> [cPath path]
+                | OutputDirections odList           -> odList |> List.map (OutputDirectionsOptions.makeWith m)  |> List.concat
+                | ReportingThreshold rtList         -> rtList |> List.map ReportingThresholdOptions.make        |> List.concat
+                | InclusionThreshold itList         -> itList |> List.map InclusionThresholdOptions.make        |> List.concat
+                | ModelSpecificThreshold mstList    -> mstList|> List.map ModelSpecificThresholdOptions.make    |> List.concat
+                | AccelerationHeuristics ahList     -> ahList |> List.map AccelerationHeuristicsOptions.make    |> List.concat
+                | Miscellaneous mList               -> mList  |> List.map MiscellaneousOptions.make             |> List.concat
+            //Usage: hmmsearch [options]  
+
+        let runHMMsearchAsync (bcContext:BioContainer.BcContext) (opt:HMMsearchParams list) = 
+            //Usage: hmmbuild [-options]   -> filter for in/out and move them to the end
+            let hmm     = 
+                opt 
+                |> List.filter (fun p -> match p with |InputHMMFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input hmm given"
+                            else 
+                                HMMsearchParams.makeCmdWith bcContext.Mount x.[0]
+
+            let seqDB     = 
+                opt 
+                |> List.filter (fun p -> match p with |SequenceDB _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input sequence file given"
+                            else 
+                                HMMsearchParams.makeCmdWith bcContext.Mount x.[0]
+
+            let options = opt |> List.filter (fun p -> match p with |InputHMMFile _ |SequenceDB _ -> false |_ -> true)
+            let cmds = (options |> List.map (HMMsearchParams.makeCmdWith bcContext.Mount))
+            let tp = ("hmmalign"::(cmds |> List.concat))@hmm@seqDB
+
+            printfn "Starting process hmmalignn\r\nparameters:"
+            printfn "%s" hmm.[0]
+            printfn "%s" seqDB.[0]
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                    let! res = BioContainer.execAsync bcContext tp           
+                    return res
+ 
+            }
+        ///Perform a multiple sequence alignment of all the sequences in seqfile by aligning
+        ///them individually to the profile HMM in hmmfile. The new alignment is output to
+        ///stdout.
+        let runHMMalign (bcContext:BioContainer.BcContext) (opt:HMMsearchParams list) =
+            runHMMsearchAsync bcContext opt
+            |> Async.RunSynchronously
\ No newline at end of file

From 56706589262f47035753b02d07b1dbface6f965d Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Fri, 15 Feb 2019 19:29:32 +0100
Subject: [PATCH 25/74] Add HMMscan API for HMMER biocontainer API

---
 src/BioFSharp.BioTools/HMMER.fs | 313 ++++++++++++++++++++++----------
 1 file changed, 222 insertions(+), 91 deletions(-)

diff --git a/src/BioFSharp.BioTools/HMMER.fs b/src/BioFSharp.BioTools/HMMER.fs
index 5b50045d..2dcb40da 100644
--- a/src/BioFSharp.BioTools/HMMER.fs
+++ b/src/BioFSharp.BioTools/HMMER.fs
@@ -21,6 +21,97 @@ module HMMER =
             | DNA       ->  ["--dna"]
             | RNA       ->  ["--rna"]
 
+    ///Options controlling reporting thresholds:
+    //  -E      : report sequences <= this E-value threshold in output  [10.0]  (x>0)
+    //  -T      : report sequences >= this score threshold in output
+    //  --domE  : report domains <= this E-value threshold in output  [10.0]  (x>0)
+    //  --domT  : report domains >= this score cutoff in output
+
+    type ReportingThresholdOptions =
+        ///report sequences <= this E-value threshold in output
+        | MaxSequenceEvalue of float
+        ///report sequences >= this score threshold in output
+        | MinSequenceScore  of float
+        ///report domains <= this E-value threshold in output
+        | MaxDomainEvalue   of float
+        ///report domains >= this score cutoff in output
+        | MinDomainScore    of float
+
+        static member make = 
+            function
+            | MaxSequenceEvalue t   -> ["-E"; string t]
+            | MinSequenceScore  t   -> ["-T"; string t]
+            | MaxDomainEvalue   t   -> ["--domE"; string t]
+            | MinDomainScore    t   -> ["--domT"; string t]
+
+    ///Options controlling inclusion (significance) thresholds:
+    //  --incE     : consider sequences <= this E-value threshold as significant
+    //  --incT     : consider sequences >= this score threshold as significant
+    //  --incdomE  : consider domains <= this E-value threshold as significant
+    //  --incdomT  : consider domains >= this score threshold as significant
+
+    type InclusionThresholdOptions =
+        ///consider sequences <= this E-value threshold as significant
+        | MaxSequenceEvalue of float
+        ///consider sequences >= this score threshold as significant 
+        | MinSequenceScore  of float
+        ///consider domains <= this E-value threshold as significant
+        | MaxDomainEvalue   of float
+        ///consider domains >= this score threshold as significant
+        | MinDomainScore    of float
+
+        static member make = 
+            function
+            | MaxSequenceEvalue t   -> ["-incE"; string t]
+            | MinSequenceScore  t   -> ["-incT"; string t]
+            | MaxDomainEvalue   t   -> ["--incdomE"; string t]
+            | MinDomainScore    t   -> ["--incdomT"; string t]
+        
+    ///Options controlling model-specific thresholding:
+    //  --cut_ga : use profile's GA gathering cutoffs to set all thresholding
+    //  --cut_nc : use profile's NC noise cutoffs to set all thresholding
+    //  --cut_tc : use profile's TC trusted cutoffs to set all thresholding
+
+    type ModelSpecificThresholdOptions =
+        ///use profile's GA gathering cutoffs to set all thresholding
+        | GatheringCutoff
+        ///use profile's NC noise cutoffs to set all thresholding
+        | NoiseCutoff
+        ///use profile's TC trusted cutoffs to set all thresholding
+        | TrustedCutoff
+
+        static member make =
+            function
+            | GatheringCutoff   -> ["--cut_ga"]
+            | NoiseCutoff       -> ["--cut_nc"]
+            | TrustedCutoff     -> ["--cut_tc"]
+
+    ///Options controlling acceleration heuristics:
+    //  --max    : Turn all heuristic filters off (less speed, more power)
+    //  --F1  : Stage 1 (MSV) threshold: promote hits w/ P <= F1  [0.02]
+    //  --F2  : Stage 2 (Vit) threshold: promote hits w/ P <= F2  [1e-3]
+    //  --F3  : Stage 3 (Fwd) threshold: promote hits w/ P <= F3  [1e-5]
+    //  --nobias : turn off composition bias filter
+
+    type AccelerationHeuristicsOptions =
+        ///Turn all heuristic filters off (less speed, more power)
+        | NoFilters
+        ///Stage 1 (MSV) threshold: promote hits w/ P <= F1
+        | MSVThreshold  of float
+        ///Stage 2 (Vit) threshold: promote hits w/ P <= F2
+        | VitThreshold  of float
+        ///Stage 3 (Fwd) threshold: promote hits w/ P <= F3
+        | FwdThreshold  of float 
+        ///turn off composition bias filter
+        | NoBiasFilter
+
+        static member make =
+            function
+            | NoFilters     -> ["max"]
+            | MSVThreshold t-> ["F1"; string t]
+            | VitThreshold t-> ["F2"; string t]
+            | FwdThreshold t-> ["F3"; string t]
+            | NoBiasFilter  -> ["nobias"]
     ///hmmbuild - construct profiles from multiple sequence alignments
     module HMMbuild =
         //Usage: hmmbuild [-options]  
@@ -515,97 +606,7 @@ module HMMER =
                 | UnlimitedTextLineWidth        -> ["--notextw "]
                 | MaxTextLineWidth lw           -> ["--textw"]
 
-        ///Options controlling reporting thresholds:
-        //  -E      : report sequences <= this E-value threshold in output  [10.0]  (x>0)
-        //  -T      : report sequences >= this score threshold in output
-        //  --domE  : report domains <= this E-value threshold in output  [10.0]  (x>0)
-        //  --domT  : report domains >= this score cutoff in output
-
-        type ReportingThresholdOptions =
-            ///report sequences <= this E-value threshold in output
-            | MaxSequenceEvalue of float
-            ///report sequences >= this score threshold in output
-            | MinSequenceScore  of float
-            ///report domains <= this E-value threshold in output
-            | MaxDomainEvalue   of float
-            ///report domains >= this score cutoff in output
-            | MinDomainScore    of float
-
-            static member make = 
-                function
-                | MaxSequenceEvalue t   -> ["-E"; string t]
-                | MinSequenceScore  t   -> ["-T"; string t]
-                | MaxDomainEvalue   t   -> ["--domE"; string t]
-                | MinDomainScore    t   -> ["--domT"; string t]
-
-        ///Options controlling inclusion (significance) thresholds:
-        //  --incE     : consider sequences <= this E-value threshold as significant
-        //  --incT     : consider sequences >= this score threshold as significant
-        //  --incdomE  : consider domains <= this E-value threshold as significant
-        //  --incdomT  : consider domains >= this score threshold as significant
-
-        type InclusionThresholdOptions =
-            ///consider sequences <= this E-value threshold as significant
-            | MaxSequenceEvalue of float
-            ///consider sequences >= this score threshold as significant 
-            | MinSequenceScore  of float
-            ///consider domains <= this E-value threshold as significant
-            | MaxDomainEvalue   of float
-            ///consider domains >= this score threshold as significant
-            | MinDomainScore    of float
-
-            static member make = 
-                function
-                | MaxSequenceEvalue t   -> ["-incE"; string t]
-                | MinSequenceScore  t   -> ["-incT"; string t]
-                | MaxDomainEvalue   t   -> ["--incdomE"; string t]
-                | MinDomainScore    t   -> ["--incdomT"; string t]
         
-        ///Options controlling model-specific thresholding:
-        //  --cut_ga : use profile's GA gathering cutoffs to set all thresholding
-        //  --cut_nc : use profile's NC noise cutoffs to set all thresholding
-        //  --cut_tc : use profile's TC trusted cutoffs to set all thresholding
-
-        type ModelSpecificThresholdOptions =
-            ///use profile's GA gathering cutoffs to set all thresholding
-            | GatheringCutoff
-            ///use profile's NC noise cutoffs to set all thresholding
-            | NoiseCutoff
-            ///use profile's TC trusted cutoffs to set all thresholding
-            | TrustedCutoff
-
-            static member make =
-                function
-                | GatheringCutoff   -> ["--cut_ga"]
-                | NoiseCutoff       -> ["--cut_nc"]
-                | TrustedCutoff     -> ["--cut_tc"]
-
-        ///Options controlling acceleration heuristics:
-        //  --max    : Turn all heuristic filters off (less speed, more power)
-        //  --F1  : Stage 1 (MSV) threshold: promote hits w/ P <= F1  [0.02]
-        //  --F2  : Stage 2 (Vit) threshold: promote hits w/ P <= F2  [1e-3]
-        //  --F3  : Stage 3 (Fwd) threshold: promote hits w/ P <= F3  [1e-5]
-        //  --nobias : turn off composition bias filter
-
-        type AccelerationHeuristicsOptions =
-            ///Turn all heuristic filters off (less speed, more power)
-            | NoFilters
-            ///Stage 1 (MSV) threshold: promote hits w/ P <= F1
-            | MSVThreshold  of float
-            ///Stage 2 (Vit) threshold: promote hits w/ P <= F2
-            | VitThreshold  of float
-            ///Stage 3 (Fwd) threshold: promote hits w/ P <= F3
-            | FwdThreshold  of float 
-            ///turn off composition bias filter
-            | NoBiasFilter
-
-            static member make =
-                function
-                | NoFilters     -> ["max"]
-                | MSVThreshold t-> ["F1"; string t]
-                | VitThreshold t-> ["F2"; string t]
-                | FwdThreshold t-> ["F3"; string t]
-                | NoBiasFilter  -> ["nobias"]
 
         ///Other expert options:
         //  --nonull2     : turn off biased composition score corrections
@@ -717,4 +718,134 @@ module HMMER =
         ///stdout.
         let runHMMalign (bcContext:BioContainer.BcContext) (opt:HMMsearchParams list) =
             runHMMsearchAsync bcContext opt
-            |> Async.RunSynchronously
\ No newline at end of file
+            |> Async.RunSynchronously
+
+    ///hmmscan - search sequence(s) against a profile database
+    module HMMscan =
+        
+    //Usage: hmmscan [-options]  
+
+        ///Options controlling output:
+        //  -o            : direct output to file , not stdout
+        //  --tblout      : save parseable table of per-sequence hits to file 
+        //  --domtblout   : save parseable table of per-domain hits to file 
+        //  --pfamtblout  : save table of hits and domains to file, in Pfam format 
+        //  --acc            : prefer accessions over names in output
+        //  --noali          : don't output alignments, so output is smaller
+        //  --notextw        : unlimit ASCII text output line width
+        //  --textw       : set max width of ASCII text output lines  [120]  (n>=120)
+
+        //TO-DO: maybe unify overlap with output direcction options of other hmmer functions
+        type OutputDirectionsOptions =
+            ///direct output to file , not stdout
+            | OutputToFile              of string
+            ///save parseable table of per-sequence hits to file 
+            | HitsToPerSequenceTable    of string
+            ///save parseable table of per-domain hits to file 
+            | HitsToPerDomainTable      of string
+            ///save table of hits and domains to file, in Pfam format 
+            | HitsToPfam                of string
+            ///prefer accessions over names in output
+            | PreferAccessionsOverNames
+            ///don't output alignments, so output is smaller
+            | NoAlignments
+            ///unlimit ASCII text output line width
+            | UnlimitedTextLineWidth
+            ///set max width of ASCII text output lines
+            | MaxTextLineWidth          of int
+
+            static member make = 
+                function
+                | OutputToFile path             -> ["-o"; path]
+                | HitsToPerSequenceTable path   -> ["--tblout"; path]
+                | HitsToPerDomainTable path     -> ["--domtblout"; path]
+                | HitsToPfam path               -> ["--pfamtblout"; path]
+                | PreferAccessionsOverNames     -> ["--acc"]
+                | NoAlignments                  -> ["--noali"]
+                | UnlimitedTextLineWidth        -> ["--notextw "]
+                | MaxTextLineWidth lw           -> ["--textw"]
+
+            static member makeWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | OutputToFile path             -> ["-o"; cPath path]
+                | HitsToPerSequenceTable path   -> ["--tblout"; cPath path]
+                | HitsToPerDomainTable path     -> ["--domtblout"; cPath path]
+                | HitsToPfam path               -> ["--pfamtblout"; cPath path]
+                | PreferAccessionsOverNames     -> ["--acc"]
+                | NoAlignments                  -> ["--noali"]
+                | UnlimitedTextLineWidth        -> ["--notextw "]
+                | MaxTextLineWidth lw           -> ["--textw"]
+
+        ///Other expert options:
+        //    --nonull2     : turn off biased composition score corrections
+        //    -Z         : set # of comparisons done, for E-value calculation
+        //    --domZ     : set # of significant seqs, for domain E-value calculation
+        //    --seed     : set RNG seed to  (if 0: one-time arbitrary seed)  [42]
+        //    --qformat  : assert input  is in format : no autodetection
+        //    --daemon      : run program as a daemon
+        //    --cpu      : number of parallel CPU workers to use for multithreads
+    
+        type MiscellaneousOptions =
+            ///turn off biased composition score corrections
+            | TurnOffBiasedScoreCorrections
+            ///set # of comparisons done, for E-value calculation
+            | EValueComparisons     of int
+            ///set # of significant seqs, for domain E-value calculation
+            | NumberOfSigSeqs       of int
+            ///set RNG seed to  (if 0: one-time arbitrary seed)
+            | RNGSeed               of int
+            ///assert target  is in format : no autodetection
+            | SequenceFileFormat    of string
+            ///number of parallel CPU workers to use for multithreads
+            | Threads               of int   
+            ///run program as a daemon
+            | RunAsDaemon
+            
+            static member make =
+                function
+                | TurnOffBiasedScoreCorrections -> ["--nonull2"]
+                | EValueComparisons n           -> ["-Z"; string n]
+                | NumberOfSigSeqs n             -> ["--domZ"; string n]
+                | RNGSeed s                     -> ["--seed"; string s]
+                | SequenceFileFormat f          -> ["--qformat"; f]
+                | Threads t                     -> ["--cpu"; string t]
+                | RunAsDaemon                   -> ["--daemon"]
+
+
+        type HMMscanParams =
+            | InputHMMDB                 of string
+            | InputSequenceFile          of string
+            | OutputDirections           of OutputDirectionsOptions list
+            ///Options controlling reporting thresholds
+            | ReportingThreshold        of ReportingThresholdOptions list
+            ///Options controlling inclusion (significance) thresholds
+            | InclusionThreshold        of InclusionThresholdOptions list
+            ///Options controlling model-specific thresholding
+            | ModelSpecificThreshold    of ModelSpecificThresholdOptions list
+            ///Options controlling acceleration heuristics
+            | AccelerationHeuristics    of AccelerationHeuristicsOptions list
+            ///Other expert options
+            | Miscellaneous             of MiscellaneousOptions list
+
+            static member makeCmd = function
+                | InputHMMDB path               -> [path]
+                | InputSequenceFile path        -> [path]
+                | OutputDirections pList        -> pList |> List.map OutputDirectionsOptions.make         |> List.concat
+                | ReportingThreshold pList      -> pList |> List.map ReportingThresholdOptions.make       |> List.concat
+                | InclusionThreshold pList      -> pList |> List.map InclusionThresholdOptions.make       |> List.concat
+                | ModelSpecificThreshold pList  -> pList |> List.map ModelSpecificThresholdOptions.make   |> List.concat
+                | AccelerationHeuristics pList  -> pList |> List.map AccelerationHeuristicsOptions.make   |> List.concat
+                | Miscellaneous   pList         -> pList |> List.map MiscellaneousOptions.make            |> List.concat
+
+            static member makeCmdWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | InputHMMDB path               -> [cPath path]
+                | InputSequenceFile path        -> [cPath path]
+                | OutputDirections pList        -> pList |> List.map (OutputDirectionsOptions.makeWith m) |> List.concat
+                | ReportingThreshold pList      -> pList |> List.map ReportingThresholdOptions.make       |> List.concat
+                | InclusionThreshold pList      -> pList |> List.map InclusionThresholdOptions.make       |> List.concat
+                | ModelSpecificThreshold pList  -> pList |> List.map ModelSpecificThresholdOptions.make   |> List.concat
+                | AccelerationHeuristics pList  -> pList |> List.map AccelerationHeuristicsOptions.make   |> List.concat
+                | Miscellaneous   pList         -> pList |> List.map MiscellaneousOptions.make            |> List.concat
\ No newline at end of file

From 955398a3bfbb8f0b99f39a365f3687c2b85b885c Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Sat, 16 Feb 2019 12:10:48 +0100
Subject: [PATCH 26/74] Add hmmpress and hmmconvert APIs to HMMER biocontainer
 API

---
 src/BioFSharp.BioTools/HMMER.fs | 187 ++++++++++++++++++++++++++++++--
 1 file changed, 177 insertions(+), 10 deletions(-)

diff --git a/src/BioFSharp.BioTools/HMMER.fs b/src/BioFSharp.BioTools/HMMER.fs
index 2dcb40da..c8305471 100644
--- a/src/BioFSharp.BioTools/HMMER.fs
+++ b/src/BioFSharp.BioTools/HMMER.fs
@@ -3,6 +3,8 @@
 // adaped from the hmmer usage guide at http://eddylab.org/software/hmmer/Userguide.pdf
 // HMMER: biosequence analysis using profile hidden Markov models (http://hmmer.org/)
 
+///HMMER - Biological sequence analysis using profile hidden Markov models
+///Functions providing an API for the HMMER 3 biocontainer
 module HMMER =
 
     open BioContainer
@@ -112,6 +114,7 @@ module HMMER =
             | VitThreshold t-> ["F2"; string t]
             | FwdThreshold t-> ["F3"; string t]
             | NoBiasFilter  -> ["nobias"]
+
     ///hmmbuild - construct profiles from multiple sequence alignments
     module HMMbuild =
         //Usage: hmmbuild [-options]  
@@ -443,6 +446,8 @@ module HMMER =
  
             }
         
+        ///For each multiple sequence alignment in a msafile build a profile HMM and save it to a
+        ///new hmmfile.
         let runHMMbuild (bcContext:BioContainer.BcContext) (opt:HMMbuildParams list) = 
             runHMMbuildAsync bcContext opt
             |> Async.RunSynchronously
@@ -509,7 +514,7 @@ module HMMER =
 
 
         let runHMMalignAsync (bcContext:BioContainer.BcContext) (opt:HMMalignParams list) = 
-            //Usage: hmmbuild [-options]   -> filter for in/out and move them to the end
+            //Usage: hmmalign [options] hmmfile seqfile
             let hmm     = 
                 opt 
                 |> List.filter (fun p -> match p with |InputHMMFile _ -> true |_ -> false)
@@ -530,7 +535,7 @@ module HMMER =
             let cmds = (options |> List.map (HMMalignParams.makeCmdWith bcContext.Mount))
             let tp = ("hmmalign"::(cmds |> List.concat))@hmm@seqFile
 
-            printfn "Starting process hmmalignn\r\nparameters:"
+            printfn "Starting process hmmalign\r\nparameters:"
             printfn "%s" hmm.[0]
             printfn "%s" seqFile.[0]
             cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
@@ -542,7 +547,7 @@ module HMMER =
             }
         ///Perform a multiple sequence alignment of all the sequences in seqfile by aligning
         ///them individually to the profile HMM in hmmfile. The new alignment is output to
-        ///stdout.
+        ///stdout (when not specified otherwise).
         let runHMMalign (bcContext:BioContainer.BcContext) (opt:HMMalignParams list) =
             runHMMalignAsync bcContext opt
             |> Async.RunSynchronously
@@ -682,7 +687,7 @@ module HMMER =
             //Usage: hmmsearch [options]  
 
         let runHMMsearchAsync (bcContext:BioContainer.BcContext) (opt:HMMsearchParams list) = 
-            //Usage: hmmbuild [-options]   -> filter for in/out and move them to the end
+            //hmmsearch [options] hmmfile seqdb
             let hmm     = 
                 opt 
                 |> List.filter (fun p -> match p with |InputHMMFile _ -> true |_ -> false)
@@ -701,9 +706,9 @@ module HMMER =
 
             let options = opt |> List.filter (fun p -> match p with |InputHMMFile _ |SequenceDB _ -> false |_ -> true)
             let cmds = (options |> List.map (HMMsearchParams.makeCmdWith bcContext.Mount))
-            let tp = ("hmmalign"::(cmds |> List.concat))@hmm@seqDB
+            let tp = ("hmmsearch"::(cmds |> List.concat))@hmm@seqDB
 
-            printfn "Starting process hmmalignn\r\nparameters:"
+            printfn "Starting process hmmsearch\r\nparameters:"
             printfn "%s" hmm.[0]
             printfn "%s" seqDB.[0]
             cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
@@ -713,9 +718,11 @@ module HMMER =
                     return res
  
             }
-        ///Perform a multiple sequence alignment of all the sequences in seqfile by aligning
-        ///them individually to the profile HMM in hmmfile. The new alignment is output to
-        ///stdout.
+
+        ///hmmsearch is used to search one or more profiles against a sequence database. For each
+        ///profile in hmmfile, use that query profile to search the target database of sequences in
+        ///seqdb, and output ranked lists of the sequences with the most significant matches to
+        ///the profile
         let runHMMalign (bcContext:BioContainer.BcContext) (opt:HMMsearchParams list) =
             runHMMsearchAsync bcContext opt
             |> Async.RunSynchronously
@@ -848,4 +855,164 @@ module HMMER =
                 | InclusionThreshold pList      -> pList |> List.map InclusionThresholdOptions.make       |> List.concat
                 | ModelSpecificThreshold pList  -> pList |> List.map ModelSpecificThresholdOptions.make   |> List.concat
                 | AccelerationHeuristics pList  -> pList |> List.map AccelerationHeuristicsOptions.make   |> List.concat
-                | Miscellaneous   pList         -> pList |> List.map MiscellaneousOptions.make            |> List.concat
\ No newline at end of file
+                | Miscellaneous   pList         -> pList |> List.map MiscellaneousOptions.make            |> List.concat
+
+        let runHMMscanAsync (bcContext:BioContainer.BcContext) (opt:HMMscanParams list) = 
+            //Usage: hmmscan [-options]  
+            let hmmDB     = 
+                opt 
+                |> List.filter (fun p -> match p with |InputHMMDB _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input hmm db given"
+                            else 
+                                HMMscanParams.makeCmdWith bcContext.Mount x.[0]
+
+            let inSeq     = 
+                opt 
+                |> List.filter (fun p -> match p with |InputSequenceFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input sequence file given"
+                            else 
+                                HMMscanParams.makeCmdWith bcContext.Mount x.[0]
+
+            let options = opt |> List.filter (fun p -> match p with |InputHMMDB _ |InputSequenceFile _ -> false |_ -> true)
+            let cmds = (options |> List.map (HMMscanParams.makeCmdWith bcContext.Mount))
+            let tp = ("hmmscan"::(cmds |> List.concat))@hmmDB@inSeq
+
+            printfn "Starting process hmmscan\r\nparameters:"
+            printfn "%s" hmmDB.[0]
+            printfn "%s" inSeq.[0]
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                    let! res = BioContainer.execAsync bcContext tp           
+                    return res
+ 
+            }
+
+        ///hmmscan is used to search protein sequences against collections of protein profiles.
+        ///For each sequence in seqfile, use that query sequence to search the target database
+        ///of profiles in hmmdb, and output ranked lists of the profiles with the most significant
+        ///matches to the sequence
+        let runHMMscan (bcContext:BioContainer.BcContext) (opt:HMMscanParams list) =
+            runHMMscanAsync bcContext opt
+            |> Async.RunSynchronously
+
+
+    ///hmmpress - prepare a profile database for hmmscan
+    module HMMpress =
+        
+        type HMMpressParams = 
+            ///HMM profile to construct the binary compressed datafiles from
+            | HMMInputFile of string
+            ///overwrites any previous hmmpress’ed datafiles
+            | ForceOverwirite 
+
+            static member makeCmd =
+                function
+                | HMMInputFile path     -> [path]
+                | ForceOverwirite       -> ["-f"]
+
+            static member makeCmdWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | HMMInputFile path     -> [cPath path]
+                | ForceOverwirite       -> ["-f"]
+
+        let runHMMpressAsync (bcContext:BioContainer.BcContext) (opt:HMMpressParams list) = 
+            //Usage: hmmpress [options] hmmfile
+            let hmm     = 
+                opt 
+                |> List.filter (fun p -> match p with |HMMInputFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input hmm db given"
+                            else 
+                                HMMpressParams.makeCmdWith bcContext.Mount x.[0]
+
+            let options = opt |> List.filter (fun p -> match p with |HMMInputFile _ -> false |_ -> true)
+            let cmds = (options |> List.map (HMMpressParams.makeCmdWith bcContext.Mount))
+            let tp = ("hmmpress"::(cmds |> List.concat))@hmm
+
+            printfn "Starting process hmmpress\r\nparameters:"
+            printfn "%s" hmm.[0]
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                    let! res = BioContainer.execAsync bcContext tp           
+                    return res
+ 
+            }
+
+        ///Constructs binary compressed datafiles for hmmscan, starting from a profile database
+        ///hmmfile in standard HMMER3 format. The hmmpress step is required for hmmscan to work.
+        let runHMMpress (bcContext:BioContainer.BcContext) (opt:HMMpressParams list) =
+            runHMMpressAsync bcContext opt
+            |> Async.RunSynchronously
+
+
+    module HMMconvert =
+
+    //Usage: hmmconvert [-options] 
+
+    //Options:
+    //  -h           : show brief help on version and usage
+    //  -a           : ascii:  output models in HMMER3 ASCII format  [default]
+    //  -b           : binary: output models in HMMER3 binary format
+    //  -2           : HMMER2: output backward compatible HMMER2 ASCII format (ls mode)
+    //  --outfmt  : choose output legacy 3.x file formats by name, such as '3/a'
+
+        type OutputFormatOptions = 
+            | ASCII
+            | Binary
+            | HMMER2
+
+            static member make = function
+                | ASCII     -> ["-a"]
+                | Binary    -> ["-b"]
+                | HMMER2    -> ["-2"]
+
+        type HMMconvertParams =
+            | HMMInputFile of string
+            | OutputFormat of OutputFormatOptions list
+            | LegacyFormat of string
+
+            static member make = function
+                | HMMInputFile path     -> [path]
+                | OutputFormat pList    -> pList |> List.map OutputFormatOptions.make |> List.concat
+                | LegacyFormat f        -> ["--outfmt"; f]
+
+            static member makeCmdWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | HMMInputFile path     -> [cPath path]
+                | OutputFormat pList    -> pList |> List.map OutputFormatOptions.make |> List.concat
+                | LegacyFormat f        -> ["--outfmt"; f]
+
+        let runHMMconvertAsync (bcContext:BioContainer.BcContext) (opt:HMMconvertParams list) = 
+        //Usage: hmmconvert [options] hmmfile
+            let hmm     = 
+                opt 
+                |> List.filter (fun p -> match p with |HMMInputFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input hmm given"
+                            else 
+                                HMMconvertParams.makeCmdWith bcContext.Mount x.[0]
+
+            let options = opt |> List.filter (fun p -> match p with |HMMInputFile _ -> false |_ -> true)
+            let cmds = (options |> List.map (HMMconvertParams.makeCmdWith bcContext.Mount))
+            let tp = ("hmmconvert"::(cmds |> List.concat))@hmm
+
+            printfn "Starting process hmmconvert\r\nparameters:"
+            printfn "%s" hmm.[0]
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                    let! res = BioContainer.execAsync bcContext tp           
+                    return res
+ 
+            }
+
+        ///The hmmconvert utility converts an input profile file to different HMMER formats
+        let runHMMconvert (bcContext:BioContainer.BcContext) (opt:HMMconvertParams list) =
+            runHMMconvertAsync bcContext opt
+            |> Async.RunSynchronously
\ No newline at end of file

From 3004d2eb7448965eac0b889d2f43d102a7132e61 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Sat, 16 Feb 2019 12:48:28 +0100
Subject: [PATCH 27/74] Add hmmemit API to HMMER biocontainer API

---
 src/BioFSharp.BioTools/HMMER.fs | 143 +++++++++++++++++++++++++++++++-
 1 file changed, 142 insertions(+), 1 deletion(-)

diff --git a/src/BioFSharp.BioTools/HMMER.fs b/src/BioFSharp.BioTools/HMMER.fs
index c8305471..0a46606d 100644
--- a/src/BioFSharp.BioTools/HMMER.fs
+++ b/src/BioFSharp.BioTools/HMMER.fs
@@ -1015,4 +1015,145 @@ module HMMER =
         ///The hmmconvert utility converts an input profile file to different HMMER formats
         let runHMMconvert (bcContext:BioContainer.BcContext) (opt:HMMconvertParams list) =
             runHMMconvertAsync bcContext opt
-            |> Async.RunSynchronously
\ No newline at end of file
+            |> Async.RunSynchronously
+
+    ///hmmemit - sample sequences from a profile
+    module HMMemit =
+
+
+        ///Options controlling what to emit:
+        //  -a : emit alignment
+        //  -c : emit simple majority-rule consensus sequence
+        //  -C : emit fancier consensus sequence (req's --minl, --minu)
+        //  -p : sample sequences from profile, not core model
+        
+        type EmitControllingOptions =
+            ///emit alignment
+            | EmitAlignment
+            ///emit simple majority-rule consensus sequence
+            | EmitConsensus
+            ///emit fancier consensus sequence (req's --minl, --minu)
+            | EmitConsensusFancy
+            ///sample sequences from profile, not core model
+            | SampleFromProfile
+
+            static member make = function
+                | EmitAlignment         -> ["-a"]
+                | EmitConsensus         -> ["-c"]
+                | EmitConsensusFancy    -> ["-C"]
+                | SampleFromProfile     -> ["-p"]
+
+        ///Options controlling emission from profiles with SampleFromProfile:
+        //  -L       : set expected length from profile to   [400]
+        //  --local     : configure profile in multihit local mode  [default]
+        //  --unilocal  : configure profile in unilocal mode
+        //  --glocal    : configure profile in multihit glocal mode
+        //  --uniglocal : configure profile in unihit glocal mode
+
+        type ProfileSamplingOptions =
+            ///set expected length from profile
+            | ExpectedLength of int
+            ///configure profile in multihit local mode
+            | MultihitLocal
+            ///configure profile in unilocal mode
+            | Unilocal
+            ///configure profile in multihit glocal mode
+            | MultihitGlocal
+            ///configure profile in unihit glocal mode
+            | UnihitGlocal
+
+            static member make = function
+                | ExpectedLength l  -> ["-L"; string l]
+                | MultihitLocal     -> ["--local"]
+                | Unilocal          -> ["--unilocal"]
+                | MultihitGlocal    -> ["--glocal"]
+                | UnihitGlocal      -> ["--uniglocal"]
+
+
+        ///Options controlling fancy consensus emission with -C:
+        //  --minl  : show consensus as 'any' (X/N) unless >= this fraction  [0.0]
+        //  --minu  : show consensus as upper case if >= this fraction  [0.0]
+
+        type FancyConsensusOptions =
+            ///show consensus as 'any' (X/N) unless >= this fraction
+            |ShowAsAny      of float
+            ///show consensus as upper case if >= this fraction
+            |ShowAsUpper    of float
+
+            static member make = function
+                | ShowAsAny f   -> ["--minl"; string f]
+                | ShowAsUpper f -> ["--minu"; string f]
+
+
+        //Common options are:
+        //  -h     : show brief help on version and usage
+        //  -o  : send sequence output to file , not stdout
+        //  -N  : number of seqs to sample  [1]  (n>0)
+        //Other options::
+        //  --seed  : set RNG seed to   [0]  (n>=0)
+        type HMMemitParams =
+            ///Options controlling fancy consensus emission with
+            | HMMInputFile      of string
+            ///direct output to file , not stdout
+            | OutputToFile      of string
+            ///number of seqs to sample
+            | SampleAmount      of int
+            ///set RNG seed
+            | RNGSeed           of int
+            ///Options controlling what to emit
+            | EmitControlling   of EmitControllingOptions list
+            ///Options controlling emission from profiles with SampleFromProfile. Only use when using SampleFromProfile as EmitControllingOption
+            | ProfileSampling   of ProfileSamplingOptions list
+            ///Options controlling fancy consensus emission with EmitConsensusFancy. Only use when using EmitConsensusFancy as EmitControllingOption
+            | FancyConsensus    of FancyConsensusOptions list
+
+            static member makeCmd = function
+                | HMMInputFile    path  -> [path]
+                | OutputToFile    path  -> [path]
+                | SampleAmount    s     -> ["-N"; string s]
+                | RNGSeed         s     -> ["--seed"; string s]
+                | EmitControlling pList -> pList |> List.map EmitControllingOptions.make    |> List.concat
+                | ProfileSampling pList -> pList |> List.map ProfileSamplingOptions.make    |> List.concat
+                | FancyConsensus  pList -> pList |> List.map FancyConsensusOptions.make     |> List.concat
+
+            static member makeCmdWith (m:MountInfo) =
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | HMMInputFile    path  -> [cPath path]
+                | OutputToFile    path  -> [cPath path]
+                | SampleAmount    s     -> ["-N"; string s]
+                | RNGSeed         s     -> ["--seed"; string s]
+                | EmitControlling pList -> pList |> List.map EmitControllingOptions.make    |> List.concat
+                | ProfileSampling pList -> pList |> List.map ProfileSamplingOptions.make    |> List.concat
+                | FancyConsensus  pList -> pList |> List.map FancyConsensusOptions.make     |> List.concat
+
+        let runHMMemitAsync (bcContext:BioContainer.BcContext) (opt:HMMemitParams list) = 
+        //Usage: hmmemit [-options] 
+            let hmm     = 
+                opt 
+                |> List.filter (fun p -> match p with |HMMInputFile _ -> true |_ -> false)
+                |> fun x -> if List.isEmpty x then
+                                failwith "no input hmm given"
+                            else 
+                                HMMemitParams.makeCmdWith bcContext.Mount x.[0]
+
+            let options = opt |> List.filter (fun p -> match p with |HMMInputFile _ -> false |_ -> true)
+            let cmds = (options |> List.map (HMMemitParams.makeCmdWith bcContext.Mount))
+            let tp = ("hmmemit"::(cmds |> List.concat))@hmm
+
+            printfn "Starting process hmmemit\r\nparameters:"
+            printfn "%s" hmm.[0]
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                    let! res = BioContainer.execAsync bcContext tp           
+                    return res
+ 
+            }
+
+        ///The hmmemit program samples (emits) sequences from the profile HMM(s) in hmmfile,
+        ///and writes them to output. Sampling sequences may be useful for a variety of purposes, 
+        ///including creating synthetic true positives for benchmarks or tests.
+        let runHMMemit (bcContext:BioContainer.BcContext) (opt:HMMemitParams list) =
+            runHMMemitAsync bcContext opt
+            |> Async.RunSynchronously

From 891c3a594e4944b666d3cb95f1067a2b28308a4e Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 19 Feb 2019 15:22:09 +0100
Subject: [PATCH 28/74] fix typo in hmmer comment

---
 src/BioFSharp.BioTools/HMMER.fs | 5 +++--
 1 file changed, 3 insertions(+), 2 deletions(-)

diff --git a/src/BioFSharp.BioTools/HMMER.fs b/src/BioFSharp.BioTools/HMMER.fs
index 0a46606d..3b6136b2 100644
--- a/src/BioFSharp.BioTools/HMMER.fs
+++ b/src/BioFSharp.BioTools/HMMER.fs
@@ -1,9 +1,10 @@
 namespace BioFSharp.BioTools
 
-// adaped from the hmmer usage guide at http://eddylab.org/software/hmmer/Userguide.pdf
+// adapted from the hmmer usage guide at http://eddylab.org/software/hmmer/Userguide.pdf
 // HMMER: biosequence analysis using profile hidden Markov models (http://hmmer.org/)
+// HMMER source code is available on github under The 3-Clause BSD License: https://github.com/EddyRivasLab/hmmer/blob/master/LICENSE
 
-///HMMER - Biological sequence analysis using profile hidden Markov models
+///HMMER - Biological sequence analysis using profile hidden Markov models (http://hmmer.org/)
 ///Functions providing an API for the HMMER 3 biocontainer
 module HMMER =
 

From cc554f99be4c91f6906e0aab220f01a7ca496262 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 12:38:14 +0100
Subject: [PATCH 29/74] Add BioFSharp.ML project and CNTK dependency

---
 BioFSharp.sln                        |  8 +++++++
 paket.dependencies                   |  2 ++
 paket.lock                           | 31 ++++++++++++++++------------
 src/BioFSharp.ML/BioFSharp.ML.fsproj | 25 ++++++++++++++++++++++
 4 files changed, 53 insertions(+), 13 deletions(-)
 create mode 100644 src/BioFSharp.ML/BioFSharp.ML.fsproj

diff --git a/BioFSharp.sln b/BioFSharp.sln
index df66195c..e70acbe2 100644
--- a/BioFSharp.sln
+++ b/BioFSharp.sln
@@ -96,6 +96,8 @@ Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "BioFSharp.ImgP", "src\BioFS
 EndProject
 Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "BioFSharp.BioTools", "src\BioFSharp.BioTools\BioFSharp.BioTools.fsproj", "{9E8A5AED-DD3C-4250-A9B2-164B08238F8E}"
 EndProject
+Project("{6EC3EE1D-3C4E-46DD-8F32-0CC8E7565705}") = "BioFSharp.ML", "src\BioFSharp.ML\BioFSharp.ML.fsproj", "{B46C2CB5-8EC2-425B-9B15-D0BAEF30C08F}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -156,6 +158,12 @@ Global
 		{9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Mono|Any CPU.Build.0 = Mono|Any CPU
 		{9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{9E8A5AED-DD3C-4250-A9B2-164B08238F8E}.Release|Any CPU.Build.0 = Release|Any CPU
+		{B46C2CB5-8EC2-425B-9B15-D0BAEF30C08F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{B46C2CB5-8EC2-425B-9B15-D0BAEF30C08F}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{B46C2CB5-8EC2-425B-9B15-D0BAEF30C08F}.Mono|Any CPU.ActiveCfg = Mono|Any CPU
+		{B46C2CB5-8EC2-425B-9B15-D0BAEF30C08F}.Mono|Any CPU.Build.0 = Mono|Any CPU
+		{B46C2CB5-8EC2-425B-9B15-D0BAEF30C08F}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{B46C2CB5-8EC2-425B-9B15-D0BAEF30C08F}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE
diff --git a/paket.dependencies b/paket.dependencies
index 7247008f..34c78cc4 100644
--- a/paket.dependencies
+++ b/paket.dependencies
@@ -19,6 +19,8 @@ nuget YamlDotNet
 nuget docker.dotnet
 nuget SharpZipLib
 
+nuget CNTK.CPUOnly
+
 git https://github.com/CSBiology/FSharpAux.git nuget Packages: /
 nuget FSharpAux
 nuget FSharpAux.IO
diff --git a/paket.lock b/paket.lock
index aa1c3012..80c8fb82 100644
--- a/paket.lock
+++ b/paket.lock
@@ -21,6 +21,11 @@ NUGET
       System.ValueTuple (>= 4.4) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0)
       System.Xml.XmlSerializer (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0)
       System.Xml.XPath.XmlDocument (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0)
+    CNTK.CPUOnly (2.6)
+      CNTK.Deps.MKL (2.6)
+      CNTK.Deps.OpenCV.Zip (2.6)
+    CNTK.Deps.MKL (2.6)
+    CNTK.Deps.OpenCV.Zip (2.6)
     CommandLineParser (2.4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
     Docker.DotNet (3.125.2)
       Newtonsoft.Json (>= 9.0.1)
@@ -124,14 +129,14 @@ NUGET
     System.Diagnostics.Debug (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
     System.Diagnostics.FileVersionInfo (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0)
       Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0)
-      System.Globalization (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Globalization (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
       System.IO (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0)
       System.IO.FileSystem (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0)
       System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0)
       System.Reflection.Metadata (>= 1.4.1) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0)
       System.Runtime (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0)
       System.Runtime.Extensions (>= 4.3) - restriction: || (== net45) (&& (== net47) (< net46)) (&& (== net47) (< netstandard1.3)) (== netstandard2.0)
-      System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Runtime.InteropServices (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
     System.Diagnostics.StackTrace (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
     System.Diagnostics.Tools (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
     System.Dynamic.Runtime (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
@@ -147,16 +152,16 @@ NUGET
       System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0)
     System.IO.Compression (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
     System.IO.FileSystem (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0)
-      Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
-      Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
-      System.IO (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.IO (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
       System.IO.FileSystem.Primitives (>= 4.3) - restriction: || (&& (== net45) (>= net46)) (&& (== net45) (>= netstandard1.3)) (== net47) (== netstandard2.0)
-      System.Runtime (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
-      System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
-      System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
-      System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Runtime.Handles (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Text.Encoding (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Threading.Tasks (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
     System.IO.FileSystem.Primitives (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0)
-      System.Runtime (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
     System.Linq (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
     System.Linq.Expressions (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
     System.Management (4.5) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (== net47) (&& (== netstandard2.0) (>= net461)) (&& (== netstandard2.0) (>= netcoreapp2.0))
@@ -186,9 +191,9 @@ NUGET
       Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0)
       System.Runtime (>= 4.3) - restriction: || (&& (== net45) (< portable-net45+win8+wp8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (< portable-net45+win8+wp8+wpa81)) (== netstandard2.0)
     System.Runtime.Handles (4.3) - restriction: || (&& (== net45) (>= netstandard2.0)) (&& (== net47) (< net46) (>= netstandard2.0)) (&& (== net47) (< netstandard1.3) (>= netstandard2.0)) (== netstandard2.0)
-      Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
-      Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
-      System.Runtime (>= 4.3) - restriction: || (&& (== net45) (== net47)) (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
+      System.Runtime (>= 4.3) - restriction: || (&& (== net45) (>= netstandard1.3)) (&& (== net47) (< net46)) (== netstandard2.0)
     System.Runtime.InteropServices (4.3) - restriction: || (&& (== net45) (>= net461)) (&& (== net45) (>= netcoreapp2.0)) (&& (== net45) (>= netstandard2.0)) (== net47) (== netstandard2.0)
       Microsoft.NETCore.Platforms (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0)
       Microsoft.NETCore.Targets (>= 1.1) - restriction: || (&& (== net45) (>= netcoreapp1.1)) (&& (== net45) (< portable-net45+win8+wpa81)) (&& (== net47) (< net45)) (&& (== net47) (>= netcoreapp1.1)) (&& (== net47) (< portable-net45+win8+wpa81)) (== netstandard2.0)
diff --git a/src/BioFSharp.ML/BioFSharp.ML.fsproj b/src/BioFSharp.ML/BioFSharp.ML.fsproj
new file mode 100644
index 00000000..9d184a34
--- /dev/null
+++ b/src/BioFSharp.ML/BioFSharp.ML.fsproj
@@ -0,0 +1,25 @@
+
+
+  
+    netstandard2.0
+    BioFSharp.ML
+    BioFSharp.ML
+    BioFSharp.ML
+    Library
+    true
+    
+    true
+    
+    true
+    
+    $(AllowedOutputExtensionsInPackageBuildOutputFolder);.pdb
+    Debug;Release;Mono
+  
+  
+    
+    
+    
+    
+  
+  
+
\ No newline at end of file

From ce1f29e297b825ab750d498a8d0bc72019ae1930 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 12:39:49 +0100
Subject: [PATCH 30/74] Add CNTK load script to BioFSharp.ML to ensure correct
 native DLL loading

---
 src/BioFSharp.ML/AssemblyInfo.fs     | 19 +++++++++++++++
 src/BioFSharp.ML/BioFSharp.ML.fsproj |  1 +
 src/BioFSharp.ML/CNTK.fs             |  7 ++++++
 src/BioFSharp.ML/CNTKLoadScript.fsx  | 35 ++++++++++++++++++++++++++++
 src/BioFSharp.ML/paket.references    |  4 ++++
 src/BioFSharp.ML/paket.template      | 29 +++++++++++++++++++++++
 6 files changed, 95 insertions(+)
 create mode 100644 src/BioFSharp.ML/AssemblyInfo.fs
 create mode 100644 src/BioFSharp.ML/CNTK.fs
 create mode 100644 src/BioFSharp.ML/CNTKLoadScript.fsx
 create mode 100644 src/BioFSharp.ML/paket.references
 create mode 100644 src/BioFSharp.ML/paket.template

diff --git a/src/BioFSharp.ML/AssemblyInfo.fs b/src/BioFSharp.ML/AssemblyInfo.fs
new file mode 100644
index 00000000..a8b0f889
--- /dev/null
+++ b/src/BioFSharp.ML/AssemblyInfo.fs
@@ -0,0 +1,19 @@
+// Auto-Generated by FAKE; do not edit
+namespace System
+open System.Reflection
+
+[]
+[]
+[")>]
+[]
+[]
+[]
+do ()
+
+module internal AssemblyVersionInformation =
+    let [] AssemblyTitle = "BioFSharp.ML"
+    let [] AssemblyProduct = "BioFSharp"
+    let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
+    let [] AssemblyVersion = "0.0.14"
+    let [] AssemblyFileVersion = "0.0.14"
+    let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.ML/BioFSharp.ML.fsproj b/src/BioFSharp.ML/BioFSharp.ML.fsproj
index 9d184a34..08f5d6c1 100644
--- a/src/BioFSharp.ML/BioFSharp.ML.fsproj
+++ b/src/BioFSharp.ML/BioFSharp.ML.fsproj
@@ -16,6 +16,7 @@
     Debug;Release;Mono
   
   
+    
     
     
     
diff --git a/src/BioFSharp.ML/CNTK.fs b/src/BioFSharp.ML/CNTK.fs
new file mode 100644
index 00000000..e878e687
--- /dev/null
+++ b/src/BioFSharp.ML/CNTK.fs
@@ -0,0 +1,7 @@
+namespace BioFSharp.ML
+
+module Say =
+
+    open CNTK
+    let hello name =
+        printfn "Hello %s" name
diff --git a/src/BioFSharp.ML/CNTKLoadScript.fsx b/src/BioFSharp.ML/CNTKLoadScript.fsx
new file mode 100644
index 00000000..514ffe0c
--- /dev/null
+++ b/src/BioFSharp.ML/CNTKLoadScript.fsx
@@ -0,0 +1,35 @@
+
+open System
+open System.IO
+
+  
+let dependencies = 
+    [
+        @"../../packages/CNTK.CPUOnly/lib/netstandard2.0"
+        @"../../packages/CNTK.CPUOnly/support/x64/Release"
+        @"../../packages/CNTK.CPUOnly/support/x64/Release"
+        @"../../packages/CNTK.Deps.MKL/support/x64/Dependency"
+        @"../../packages/CNTK.Deps.OpenCV.Zip/support/x64/Dependency"
+    ]
+
+let resolveCNTKDependencies () =
+    Environment.SetEnvironmentVariable("Path",
+        Environment.GetEnvironmentVariable("Path") + ";" + __SOURCE_DIRECTORY__ )
+    dependencies 
+    |> Seq.iter (fun dep -> 
+        let path = Path.Combine(__SOURCE_DIRECTORY__,dep)
+        Environment.SetEnvironmentVariable("Path",
+            Environment.GetEnvironmentVariable("Path") + ";" + path)
+        )    
+
+
+#I @"../../packages/CNTK.CPUOnly/lib/netstandard2.0"
+#I @"../../packages/CNTK.CPUOnly/support/x64/Release"
+#I @"../../packages/CNTK.CPUOnly/support/x64/Release"
+#I @"../../packages/CNTK.Deps.MKL/support/x64/Dependency"
+#I @"../../packages/CNTK.Deps.OpenCV.Zip/support/x64/Dependency"
+#I @"../../bin"
+
+ 
+#r @"../../packages/CNTK.CPUOnly/lib/netstandard2.0/Cntk.Core.Managed-2.6.dll"
+#r "netstandard"
\ No newline at end of file
diff --git a/src/BioFSharp.ML/paket.references b/src/BioFSharp.ML/paket.references
new file mode 100644
index 00000000..5938e277
--- /dev/null
+++ b/src/BioFSharp.ML/paket.references
@@ -0,0 +1,4 @@
+FSharp.Core
+FSharpAux
+FSharpAux.IO
+CNTK.CPUOnly
\ No newline at end of file
diff --git a/src/BioFSharp.ML/paket.template b/src/BioFSharp.ML/paket.template
new file mode 100644
index 00000000..5bdfe402
--- /dev/null
+++ b/src/BioFSharp.ML/paket.template
@@ -0,0 +1,29 @@
+type file
+id BioFSharp.ML
+title
+    BioFSharp.ML
+owners
+    Timo Mühlhaus
+authors 
+    Timo Mühlhaus
+projectUrl
+    https://github.com/CSBiology/BioFSharp
+iconUrl
+    https://raw.githubusercontent.com/CSBiology/BioFSharp/master/docs/files/img/logo.png
+licenseUrl
+    https://github.com/CSBiology/BioFSharp/blob/master/LICENSE.txt
+requireLicenseAcceptance
+    false
+language
+    F#
+copyright
+    Copyright 2017
+tags
+    bioinformatics F# fsharp
+summary
+    BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
+description
+    BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
+
+files
+	../../bin/BioFSharp.ML ==> lib

From 0352afebc97dc2df51572737eceb255417184c7b Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 13:48:21 +0100
Subject: [PATCH 31/74] Add CNTKExtensions and DPPOP namespaces to BioFSharp.ML

---
 src/BioFSharp.ML/BioFSharp.ML.fsproj | 1 +
 src/BioFSharp.ML/CNTK.fs             | 2 +-
 src/BioFSharp.ML/DPPOP.fs            | 9 +++++++++
 3 files changed, 11 insertions(+), 1 deletion(-)
 create mode 100644 src/BioFSharp.ML/DPPOP.fs

diff --git a/src/BioFSharp.ML/BioFSharp.ML.fsproj b/src/BioFSharp.ML/BioFSharp.ML.fsproj
index 08f5d6c1..f3ca016f 100644
--- a/src/BioFSharp.ML/BioFSharp.ML.fsproj
+++ b/src/BioFSharp.ML/BioFSharp.ML.fsproj
@@ -19,6 +19,7 @@
     
     
     
+    
     
     
   
diff --git a/src/BioFSharp.ML/CNTK.fs b/src/BioFSharp.ML/CNTK.fs
index e878e687..fcc4f409 100644
--- a/src/BioFSharp.ML/CNTK.fs
+++ b/src/BioFSharp.ML/CNTK.fs
@@ -1,6 +1,6 @@
 namespace BioFSharp.ML
 
-module Say =
+module CNTKExtensions =
 
     open CNTK
     let hello name =
diff --git a/src/BioFSharp.ML/DPPOP.fs b/src/BioFSharp.ML/DPPOP.fs
new file mode 100644
index 00000000..68475450
--- /dev/null
+++ b/src/BioFSharp.ML/DPPOP.fs
@@ -0,0 +1,9 @@
+namespace BioFSharp.ML
+
+module DPPOP =
+    
+    module Classification =
+        ()
+
+    module Prediction =
+        ()
\ No newline at end of file

From b6fb4309176d46e688f1c14e78bc452d674b1efb Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 14:06:03 +0100
Subject: [PATCH 32/74] Add function to get distinct peptides from fasta input
 to classification module in dppop (BioFSharp.ML)

---
 src/BioFSharp.ML/BioFSharp.ML.fsproj |  4 ++++
 src/BioFSharp.ML/DPPOP.fs            | 34 +++++++++++++++++++++++++++-
 2 files changed, 37 insertions(+), 1 deletion(-)

diff --git a/src/BioFSharp.ML/BioFSharp.ML.fsproj b/src/BioFSharp.ML/BioFSharp.ML.fsproj
index f3ca016f..a77f8498 100644
--- a/src/BioFSharp.ML/BioFSharp.ML.fsproj
+++ b/src/BioFSharp.ML/BioFSharp.ML.fsproj
@@ -23,5 +23,9 @@
     
     
   
+  
+    
+    
+  
   
 
\ No newline at end of file
diff --git a/src/BioFSharp.ML/DPPOP.fs b/src/BioFSharp.ML/DPPOP.fs
index 68475450..ba214f5a 100644
--- a/src/BioFSharp.ML/DPPOP.fs
+++ b/src/BioFSharp.ML/DPPOP.fs
@@ -2,8 +2,40 @@ namespace BioFSharp.ML
 
 module DPPOP =
     
+    open FSharpAux
+    open FSharpAux.IO
+    open BioFSharp
+    open BioFSharp.IO
+  
+    ///
     module Classification =
-        ()
 
+        ///
+        let digestTryptic (aminoAcidSeq:BioArray.BioArray) =
+            Digestion.BioArray.digest (Digestion.Table.getProteaseBy "Trypsin") 0 aminoAcidSeq
+            |> Digestion.BioArray.concernMissCleavages 0 3
+            |> Seq.map (fun p -> p.PepSequence |> List.toArray) // TODO not |> List.toArray
+            |> Seq.filter (fun p -> p.Length > 6)
+
+        ///
+        let getDistinctPeptidesFromFasta (fa:seq>>)= 
+            //fileDir + "Chlamy_Cp.fastA"
+            fa
+            |> Seq.map (fun fi -> fi.Sequence |> Array.filter (not << AminoAcids.isTerminator))
+            |> Seq.collect digestTryptic
+            |> Seq.map BioArray.toString
+            |> Set.ofSeq
+
+        ///
+        let getDistinctPeptidesFromFastaFile (filePath: string) = 
+            //fileDir + "Chlamy_Cp.fastA"
+            filePath
+            |> FastA.fromFile BioArray.ofAminoAcidString
+            |> Seq.map (fun fi -> fi.Sequence |> Array.filter (not << AminoAcids.isTerminator))
+            |> Seq.collect digestTryptic
+            |> Seq.map BioArray.toString
+            |> Set.ofSeq
+
+    ///
     module Prediction =
         ()
\ No newline at end of file

From 24943fe83558bfa04a26e4ce3551a7551ac812a3 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 14:29:31 +0100
Subject: [PATCH 33/74] Add digestion efficiency calculation to dppop
 classification Refactor existing functions and supply generic counterparts

---
 src/BioFSharp.ML/DPPOP.fs | 41 +++++++++++++++++++++++++++++++++------
 1 file changed, 35 insertions(+), 6 deletions(-)

diff --git a/src/BioFSharp.ML/DPPOP.fs b/src/BioFSharp.ML/DPPOP.fs
index ba214f5a..69ce3993 100644
--- a/src/BioFSharp.ML/DPPOP.fs
+++ b/src/BioFSharp.ML/DPPOP.fs
@@ -6,19 +6,25 @@ module DPPOP =
     open FSharpAux.IO
     open BioFSharp
     open BioFSharp.IO
+    open BioFSharp.Digestion
   
     ///
     module Classification =
 
-        ///
-        let digestTryptic (aminoAcidSeq:BioArray.BioArray) =
+        ///Tryptic digestion of an amino acid sequence with the ability to control the maximal amount of misscleavages and filtering of a minimal peptide length
+        let digestTrypticWith (maxMissCleavages:int) (minPeptideLength:int) (aminoAcidSeq:BioArray.BioArray) =
             Digestion.BioArray.digest (Digestion.Table.getProteaseBy "Trypsin") 0 aminoAcidSeq
-            |> Digestion.BioArray.concernMissCleavages 0 3
-            |> Seq.map (fun p -> p.PepSequence |> List.toArray) // TODO not |> List.toArray
-            |> Seq.filter (fun p -> p.Length > 6)
+            |> Digestion.BioArray.concernMissCleavages 0 maxMissCleavages
+            |> Seq.map (fun p -> p.PepSequence |> List.toArray)
+            |> Seq.filter (fun p -> p.Length > minPeptideLength)
+
+        ///Tryptic digestion of an amino acid sequence with the settings used for the dppop web API
+        let digestTryptic (aminoAcidSeq:BioArray.BioArray) =
+            aminoAcidSeq
+            |> digestTrypticWith 3 6 
 
         ///
-        let getDistinctPeptidesFromFasta (fa:seq>>)= 
+        let getDistinctTrypticPeptidesFromFasta (fa:seq>>)= 
             //fileDir + "Chlamy_Cp.fastA"
             fa
             |> Seq.map (fun fi -> fi.Sequence |> Array.filter (not << AminoAcids.isTerminator))
@@ -36,6 +42,29 @@ module DPPOP =
             |> Seq.map BioArray.toString
             |> Set.ofSeq
 
+
+        let getDifestionEfficiency (protId) (sequence:BioArray.BioArray) =
+            let cleavageScore = sequence |> Array.map AminoAcidSymbols.aminoAcidSymbol |> Digestion.CleavageScore.calculateCleavageScore
+        
+            //TODO: digestion hast changed from 1 based index to 0 based index, identify the numbers to change
+            let getStart index = if index < 2 then 0. else cleavageScore.[index-1]
+            let getEnd index = if index >= cleavageScore.Length  then 0. else cleavageScore.[index]
+
+
+            let calc (p:DigestedPeptide) =
+                if p.MissCleavages < 1 then
+                    (protId,p.PepSequence |> Seq.map AminoAcidSymbols.aminoAcidSymbol |> Seq.toArray ),(getStart p.CleavageStart,0.,getEnd p.CleavageEnd)
+                else
+                    let inter' = p.MissCleavages - 1 |> float
+                    let s = getStart p.CleavageStart                
+                    let e = getEnd p.CleavageEnd
+                    // let inter' = inter - s - e
+                    (protId,p.PepSequence |> Seq.map AminoAcidSymbols.aminoAcidSymbol |> Seq.toArray),(s,inter',e)
+
+            Digestion.BioArray.digest (Digestion.Table.getProteaseBy "Trypsin") 0 sequence
+            |> Digestion.BioArray.concernMissCleavages 0 3
+            |> Seq.map calc
+
     ///
     module Prediction =
         ()
\ No newline at end of file

From f3028162365fde7bfb67735d463cdf4e24cc74bd Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 14:49:46 +0100
Subject: [PATCH 34/74] Add getPhysicoHemical properties to dppop
 classification module

---
 src/BioFSharp.ML/DPPOP.fs | 41 ++++++++++++++++++++++++++++++++++-----
 1 file changed, 36 insertions(+), 5 deletions(-)

diff --git a/src/BioFSharp.ML/DPPOP.fs b/src/BioFSharp.ML/DPPOP.fs
index 69ce3993..4c5a5d0c 100644
--- a/src/BioFSharp.ML/DPPOP.fs
+++ b/src/BioFSharp.ML/DPPOP.fs
@@ -33,14 +33,11 @@ module DPPOP =
             |> Set.ofSeq
 
         ///
-        let getDistinctPeptidesFromFastaFile (filePath: string) = 
+        let getDistinctTrypticPeptidesFromFastaFile (filePath: string) = 
             //fileDir + "Chlamy_Cp.fastA"
             filePath
             |> FastA.fromFile BioArray.ofAminoAcidString
-            |> Seq.map (fun fi -> fi.Sequence |> Array.filter (not << AminoAcids.isTerminator))
-            |> Seq.collect digestTryptic
-            |> Seq.map BioArray.toString
-            |> Set.ofSeq
+            |> getDistinctTrypticPeptidesFromFasta
 
 
         let getDifestionEfficiency (protId) (sequence:BioArray.BioArray) =
@@ -65,6 +62,40 @@ module DPPOP =
             |> Digestion.BioArray.concernMissCleavages 0 3
             |> Seq.map calc
 
+
+        ///get the physicochemical properties of a peptide: length, MolecularWeight, NetCharge, PositiveCharge, NegativeCharge, piI, Relative frewuencies of polar, hydrophobic, and negatively charge amino acids
+        let getPhysicochemicalProperties (peptide:BioArray.BioArray) =
+            let pI peptide = 
+                //default function for pKr of charged aminoacids
+                let pKrFunction = IsoelectricPoint.getpKr
+                match IsoelectricPoint.tryFind pKrFunction 0.5 peptide with
+                | Some (pk) -> pk
+                | None -> 0.
+
+            let len = float peptide.Length
+            let positiveCharge = peptide |> Seq.countIf AminoAcidSymbols.isPosCharged |> float
+            let negativeCharge = peptide |> Seq.countIf AminoAcidSymbols.isNegCharged |> float
+            [|
+                //length
+                len;
+                //MolecularWeight
+                BioArray.toAverageMass peptide
+                //  NetCharge
+                negativeCharge + positiveCharge
+                // PositiveCharge, 
+                positiveCharge
+                // NegativeCharge        
+                negativeCharge
+                // piI
+                pI peptide      
+                //RelFreqPolar
+                peptide |> Seq.countIf AminoAcidSymbols.isPolar |> fun x -> float x / len  
+                //RelFreqHydrophobic
+                peptide |> Seq.countIf AminoAcidSymbols.isHydrophobic |> fun x -> float x / len
+                //RelFreqNegative 
+                negativeCharge / len
+            |]
+
     ///
     module Prediction =
         ()
\ No newline at end of file

From ae4008b8816e5846cd75c7956edb9e19448b5145 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 15:15:39 +0100
Subject: [PATCH 35/74] Add functions and helpers to get all peptide features
 concerned for classification in dppop

---
 src/BioFSharp.ML/DPPOP.fs | 69 ++++++++++++++++++++++++++++++++++++---
 1 file changed, 64 insertions(+), 5 deletions(-)

diff --git a/src/BioFSharp.ML/DPPOP.fs b/src/BioFSharp.ML/DPPOP.fs
index 4c5a5d0c..2f56364a 100644
--- a/src/BioFSharp.ML/DPPOP.fs
+++ b/src/BioFSharp.ML/DPPOP.fs
@@ -6,25 +6,45 @@ module DPPOP =
     open FSharpAux.IO
     open BioFSharp
     open BioFSharp.IO
+    open BioFSharp.BioArray
     open BioFSharp.Digestion
+    open BioFSharp.AminoAcidSymbols
   
     ///
     module Classification =
 
+        let private peptideFeatures =
+            [|
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.ActivationGibbsEnergy9;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.MEMofSingleSpanning;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.PrincipalComponentII;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.HydrophobicityIndex2;        
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.ChouFasmanCoil;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.AverageNumberSurroundingResidues;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.CompositionIntracellular;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.WeightsHelixMinus3;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.HelixFormationParameters;        
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.FreeEnergyHelicalRegion;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.ELi;        
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.CompositionExtracellular;
+                AminoProperties.initGetAminoProperty AminoProperties.AminoProperty.HydrophobicityIndex;
+            |]
+
+
         ///Tryptic digestion of an amino acid sequence with the ability to control the maximal amount of misscleavages and filtering of a minimal peptide length
-        let digestTrypticWith (maxMissCleavages:int) (minPeptideLength:int) (aminoAcidSeq:BioArray.BioArray) =
+        let digestTrypticWith (maxMissCleavages:int) (minPeptideLength:int) (aminoAcidSeq:BioArray) =
             Digestion.BioArray.digest (Digestion.Table.getProteaseBy "Trypsin") 0 aminoAcidSeq
             |> Digestion.BioArray.concernMissCleavages 0 maxMissCleavages
             |> Seq.map (fun p -> p.PepSequence |> List.toArray)
             |> Seq.filter (fun p -> p.Length > minPeptideLength)
 
         ///Tryptic digestion of an amino acid sequence with the settings used for the dppop web API
-        let digestTryptic (aminoAcidSeq:BioArray.BioArray) =
+        let digestTryptic (aminoAcidSeq:BioArray) =
             aminoAcidSeq
             |> digestTrypticWith 3 6 
 
         ///
-        let getDistinctTrypticPeptidesFromFasta (fa:seq>>)= 
+        let getDistinctTrypticPeptidesFromFasta (fa:seq>>)= 
             //fileDir + "Chlamy_Cp.fastA"
             fa
             |> Seq.map (fun fi -> fi.Sequence |> Array.filter (not << AminoAcids.isTerminator))
@@ -40,7 +60,7 @@ module DPPOP =
             |> getDistinctTrypticPeptidesFromFasta
 
 
-        let getDifestionEfficiency (protId) (sequence:BioArray.BioArray) =
+        let getDifestionEfficiency (protId) (sequence:BioArray) =
             let cleavageScore = sequence |> Array.map AminoAcidSymbols.aminoAcidSymbol |> Digestion.CleavageScore.calculateCleavageScore
         
             //TODO: digestion hast changed from 1 based index to 0 based index, identify the numbers to change
@@ -62,9 +82,14 @@ module DPPOP =
             |> Digestion.BioArray.concernMissCleavages 0 3
             |> Seq.map calc
 
+        let createDigestionEfficiencyMapFromFasta (fa:seq>>) = 
+            fa
+            |> Seq.map (fun fi -> {fi with Sequence=fi.Sequence |> Array.filter (not << AminoAcids.isTerminator)})
+            |> Seq.collect (fun fi -> getDifestionEfficiency fi.Header fi.Sequence)
+            |> Map.ofSeq
 
         ///get the physicochemical properties of a peptide: length, MolecularWeight, NetCharge, PositiveCharge, NegativeCharge, piI, Relative frewuencies of polar, hydrophobic, and negatively charge amino acids
-        let getPhysicochemicalProperties (peptide:BioArray.BioArray) =
+        let getPhysicochemicalProperties (peptide:BioArray) =
             let pI peptide = 
                 //default function for pKr of charged aminoacids
                 let pKrFunction = IsoelectricPoint.getpKr
@@ -96,6 +121,40 @@ module DPPOP =
                 negativeCharge / len
             |]
 
+
+        ///get all features of a peptide used for classification in dppop given a map that maps from (proteinID,Sequence) -> . 
+        let getPeptideFeatures (digestionEfficiencyMap:Map<(string*BioArray),(float*float*float)>) (protId:string) peptide =
+            let getIndex (a:AminoAcidSymbol) = (int a) - 65
+            // Relative amino acid frequency peptide features
+            let relFreq = 
+                let tmp = BioArray.toRelCompositionVector peptide
+                [|
+                    tmp.[getIndex AminoAcidSymbol.Ala];tmp.[getIndex AminoAcidSymbol.Cys];tmp.[getIndex AminoAcidSymbol.Asp];tmp.[getIndex AminoAcidSymbol.Glu];
+                    tmp.[getIndex AminoAcidSymbol.Phe];tmp.[getIndex AminoAcidSymbol.Gly];tmp.[getIndex AminoAcidSymbol.His];tmp.[getIndex AminoAcidSymbol.Ile];
+                    tmp.[getIndex AminoAcidSymbol.Lys];tmp.[getIndex AminoAcidSymbol.Leu];tmp.[getIndex AminoAcidSymbol.Met];tmp.[getIndex AminoAcidSymbol.Asn];
+                    tmp.[getIndex AminoAcidSymbol.Pro];tmp.[getIndex AminoAcidSymbol.Gln];tmp.[getIndex AminoAcidSymbol.Arg];tmp.[getIndex AminoAcidSymbol.Ser];
+                    tmp.[getIndex AminoAcidSymbol.Thr];tmp.[getIndex AminoAcidSymbol.Val];tmp.[getIndex AminoAcidSymbol.Trp];tmp.[getIndex AminoAcidSymbol.Tyr];        
+                |]
+
+            let physicochemical = getPhysicochemicalProperties peptide
+            let pf = 
+                peptideFeatures
+                |> Array.map (fun f -> peptide |> Array.averageBy f)
+
+
+            let digest = 
+                if digestionEfficiencyMap.ContainsKey (protId,peptide) then
+                    let a,b,c = digestionEfficiencyMap.[(protId,peptide)]
+                    Some [|a;b;c|]
+                else
+                    //printfn "%s - %A" protId peptide
+                    // [|0.;0.;0.|]
+                    None
+            match digest with
+            | Some v -> Array.concat [|relFreq;physicochemical;pf;v|] |> Some
+            | None -> None
+
+
     ///
     module Prediction =
         ()
\ No newline at end of file

From 511d75dcaad711a0484c2c2bf1ed5107ed260295 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 15:24:54 +0100
Subject: [PATCH 36/74] Add scoreBy function to Prediction module in dppop

---
 src/BioFSharp.ML/DPPOP.fs | 85 +++++++++++++++++++++++++++++++++++++--
 1 file changed, 82 insertions(+), 3 deletions(-)

diff --git a/src/BioFSharp.ML/DPPOP.fs b/src/BioFSharp.ML/DPPOP.fs
index 2f56364a..63b72037 100644
--- a/src/BioFSharp.ML/DPPOP.fs
+++ b/src/BioFSharp.ML/DPPOP.fs
@@ -1,7 +1,7 @@
 namespace BioFSharp.ML
 
 module DPPOP =
-    
+    open System.Collections.Generic
     open FSharpAux
     open FSharpAux.IO
     open BioFSharp
@@ -9,7 +9,38 @@ module DPPOP =
     open BioFSharp.BioArray
     open BioFSharp.Digestion
     open BioFSharp.AminoAcidSymbols
-  
+    open CNTK
+
+    // Input
+    type Qid = {
+        Id        : int
+        Rank      : int
+        Data      : float[]
+        ProtId    : string
+        Intensity : float
+        Sequence  : string
+    }
+
+    // Output
+    type ScoredQid = {
+        Id        : int
+        Rank      : int
+        Data      : float[]
+        ProtId    : string
+        Intensity : float
+        Sequence  : string
+        Score     : float
+        }
+
+    let createScoredID id rank data protID intensity sequence score = {
+        Id        = id
+        Rank      = rank
+        Data      = data
+        ProtId    = protID
+        Intensity = intensity
+        Sequence  = sequence
+        Score     = score
+        }
     ///
     module Classification =
 
@@ -157,4 +188,52 @@ module DPPOP =
 
     ///
     module Prediction =
-        ()
\ No newline at end of file
+
+        /// Loads a trained CNTK model (at path given by "model") and evaluates the scores for the given collection of qids (input)
+        // in the final pipeline the parameter model is probably better modeled by a unionCase ;)
+        let scoreBy (model:string) (data:Qid []) = 
+            let device = DeviceDescriptor.CPUDevice
+
+            let PeptidePredictor : Function = 
+                Function.Load(model,device)
+
+            ///////////Input 
+            let inputVar: Variable = PeptidePredictor.Arguments.Item 0
+
+            let inputShape = inputVar.Shape
+            /// Gets Size of one Feature Vector
+            let featureVectorLength = inputShape.[0] 
+
+            /// Extracts all Features and appends them, stores Values in a List
+            let featureData = 
+                let tmp = new System.Collections.Generic.List()
+                data |> Array.iter (fun x -> 
+                                    let data' = x.Data |> Array.map (fun x -> float32 (x))
+                                    tmp.AddRange(data')
+                                   )
+                tmp
+
+            /// Creates an input Batch
+            let inputValues = Value.CreateBatch(inputShape,featureData,device)
+
+            let inputMap = new Dictionary()
+            inputMap.Add(inputVar,inputValues)
+
+            ///////////Output
+            let outputVar : Variable = PeptidePredictor.Output
+
+            let outputMap = new Dictionary()
+            outputMap.Add(outputVar,null)
+
+            PeptidePredictor.Evaluate(inputMap,outputMap,device)
+
+            let outputValues = outputMap.[outputVar]
+
+            let preds = 
+                outputValues.GetDenseData(outputVar)
+                |> Seq.concat
+                |> Array.ofSeq
+
+            let res = 
+                Array.map2 (fun (data:Qid) preds -> createScoredID data.Id data.Rank data.Data data.ProtId data.Intensity data.Sequence (float preds)) data preds
+            res
\ No newline at end of file

From d5f11dd33338e870f993f5f91e4b1cb190d48704 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Wed, 20 Feb 2019 16:39:09 +0100
Subject: [PATCH 37/74] Add model files used by the dppop web API as embedded
 resources to BioFSharp.ML

---
 src/BioFSharp.ML/BioFSharp.ML.fsproj           |   3 +++
 .../Resources/Chlamy5Times128.model            | Bin 0 -> 295455 bytes
 .../Resources/Yeast5Times128.model             | Bin 0 -> 295526 bytes
 3 files changed, 3 insertions(+)
 create mode 100644 src/BioFSharp.ML/Resources/Chlamy5Times128.model
 create mode 100644 src/BioFSharp.ML/Resources/Yeast5Times128.model

diff --git a/src/BioFSharp.ML/BioFSharp.ML.fsproj b/src/BioFSharp.ML/BioFSharp.ML.fsproj
index a77f8498..a32de5ee 100644
--- a/src/BioFSharp.ML/BioFSharp.ML.fsproj
+++ b/src/BioFSharp.ML/BioFSharp.ML.fsproj
@@ -20,6 +20,9 @@
     
     
     
+    
+    
+    
     
     
   
diff --git a/src/BioFSharp.ML/Resources/Chlamy5Times128.model b/src/BioFSharp.ML/Resources/Chlamy5Times128.model
new file mode 100644
index 0000000000000000000000000000000000000000..7a0e22feb1875bac0c0d7a2d046e028b892f6f0a
GIT binary patch
literal 295455
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

literal 0
HcmV?d00001

diff --git a/src/BioFSharp.ML/Resources/Yeast5Times128.model b/src/BioFSharp.ML/Resources/Yeast5Times128.model
new file mode 100644
index 0000000000000000000000000000000000000000..f403e5c1191c6a557c169cf1a75eab7f225fb26a
GIT binary patch
literal 295526
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
diff --git a/src/BioFSharp.Parallel/AssemblyInfo.fs b/src/BioFSharp.Parallel/AssemblyInfo.fs
index d8ecb415..8c19ce4e 100644
--- a/src/BioFSharp.Parallel/AssemblyInfo.fs
+++ b/src/BioFSharp.Parallel/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Parallel"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.14"
-    let [] AssemblyFileVersion = "0.0.14"
+    let [] AssemblyVersion = "0.0.15"
+    let [] AssemblyFileVersion = "0.0.15"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Stats/AssemblyInfo.fs b/src/BioFSharp.Stats/AssemblyInfo.fs
index 7e3bd4fb..09d6a62b 100644
--- a/src/BioFSharp.Stats/AssemblyInfo.fs
+++ b/src/BioFSharp.Stats/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Stats"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.14"
-    let [] AssemblyFileVersion = "0.0.14"
+    let [] AssemblyVersion = "0.0.15"
+    let [] AssemblyFileVersion = "0.0.15"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Vis/AssemblyInfo.fs b/src/BioFSharp.Vis/AssemblyInfo.fs
index 0b94ede8..4b5a4a00 100644
--- a/src/BioFSharp.Vis/AssemblyInfo.fs
+++ b/src/BioFSharp.Vis/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Vis"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.14"
-    let [] AssemblyFileVersion = "0.0.14"
+    let [] AssemblyVersion = "0.0.15"
+    let [] AssemblyFileVersion = "0.0.15"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp/AssemblyInfo.fs b/src/BioFSharp/AssemblyInfo.fs
index b8e92c17..0dc8cc78 100644
--- a/src/BioFSharp/AssemblyInfo.fs
+++ b/src/BioFSharp/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.14"
-    let [] AssemblyFileVersion = "0.0.14"
+    let [] AssemblyVersion = "0.0.15"
+    let [] AssemblyFileVersion = "0.0.15"
     let [] AssemblyConfiguration = "Release"

From 797c372414bd453626a988a9b5cd2b2aa14f6165 Mon Sep 17 00:00:00 2001
From: HLWeil 
Date: Tue, 12 Mar 2019 14:29:32 +0100
Subject: [PATCH 51/74] unprivate proteinInference helper functions

---
 src/BioFSharp/PeptideClassification.fs | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/src/BioFSharp/PeptideClassification.fs b/src/BioFSharp/PeptideClassification.fs
index a02b3624..b68f980a 100644
--- a/src/BioFSharp/PeptideClassification.fs
+++ b/src/BioFSharp/PeptideClassification.fs
@@ -23,7 +23,7 @@ module PeptideClassification =
         }
 
     /// Helper function to create ProteinModelInfo
-    let private createProteinModelInfo id chromosomeId strand geneLocus spliceVariantId seqEquivalents orthologs = {
+    let createProteinModelInfo id chromosomeId strand geneLocus spliceVariantId seqEquivalents orthologs = {
         Id               = id
         ChromosomeId     = chromosomeId
         Strand           = strand
@@ -40,7 +40,7 @@ module PeptideClassification =
         }
 
     /// Helper function
-    let private createProteinModel proteinModelInfo sequence = 
+    let createProteinModel proteinModelInfo sequence = 
         {ProteinModelInfo=proteinModelInfo;Sequence=sequence}
     
     /// A marker for unambiguity of a peptide in protein inference 

From 0354c9c13e7a4692f2ab61b80ef86ac8f5bd83c3 Mon Sep 17 00:00:00 2001
From: Benedikt Venn 
Date: Thu, 21 Mar 2019 10:01:03 +0100
Subject: [PATCH 52/74] closes #35

---
 src/BioFSharp.IO/Obo.fs | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/src/BioFSharp.IO/Obo.fs b/src/BioFSharp.IO/Obo.fs
index 179c886f..f080964f 100644
--- a/src/BioFSharp.IO/Obo.fs
+++ b/src/BioFSharp.IO/Obo.fs
@@ -26,7 +26,7 @@ module Obo =
             IsObsolete : string
             Replacedby : string //new
             Consider : string //new
-            AltId : string
+            AltId : string list
             DisjointFrom : string list
             Subset : string list
             IntersectionOf : string list
@@ -102,7 +102,7 @@ module Obo =
                                      xrefAnalog split.[1] isObsolete replaced_by consider altId disjointFrom subset intersectionOf xref propertyValue
         
             | "is_obsolete"     -> parseSingleOboTerm en  id name name_space definition relationship related_synonym isA synonym exactSynonym broadSynonym narrowSynonym
-                                     xrefAnalog comment split.[1] replaced_by altId consider disjointFrom subset intersectionOf xref propertyValue
+                                     xrefAnalog comment split.[1] replaced_by consider altId disjointFrom subset intersectionOf xref propertyValue
                                          
             | "replaced_by"     -> parseSingleOboTerm en  id name name_space definition relationship related_synonym isA synonym exactSynonym broadSynonym narrowSynonym
                                      xrefAnalog comment isObsolete split.[1] consider altId disjointFrom subset intersectionOf xref propertyValue
@@ -111,7 +111,7 @@ module Obo =
                                      xrefAnalog comment isObsolete replaced_by split.[1] altId disjointFrom subset intersectionOf xref propertyValue
         
             | "alt_id"          -> parseSingleOboTerm en  id name name_space definition relationship related_synonym isA synonym exactSynonym broadSynonym narrowSynonym
-                                     xrefAnalog comment isObsolete replaced_by consider split.[1] disjointFrom subset intersectionOf xref propertyValue
+                                     xrefAnalog comment isObsolete replaced_by consider (split.[1]::altId) disjointFrom subset intersectionOf xref propertyValue
         
             | "disjoint_from"   -> parseSingleOboTerm en  id name name_space definition relationship related_synonym isA synonym exactSynonym broadSynonym narrowSynonym
                                      xrefAnalog comment isObsolete replaced_by consider altId (split.[1]::disjointFrom) subset intersectionOf xref propertyValue
@@ -167,7 +167,7 @@ module Obo =
                 match en.MoveNext() with
                 | true ->             
                     match en.Current with
-                    | "[Term]"    -> yield (parseSingleOboTerm en "" "" "" "" "" [] [] [] "" "" "" "" "" "" "" "" "" [] [] [] [] "")
+                    | "[Term]"    -> yield (parseSingleOboTerm en "" "" "" "" "" [] [] [] "" "" "" "" "" "" "" "" [] [] [] [] [] "")
                                      yield! loop en 
                     | _ -> yield! loop en
                 | false -> ()

From abab82be1ac9fa0c540acfb5f3ccc6bd5143df1f Mon Sep 17 00:00:00 2001
From: Benedikt Venn 
Date: Thu, 21 Mar 2019 10:01:45 +0100
Subject: [PATCH 53/74] fix heigth adjustment ricker

---
 src/BioFSharp.ImgP/Trace.fs | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/BioFSharp.ImgP/Trace.fs b/src/BioFSharp.ImgP/Trace.fs
index 61a13ee2..5b18a6cf 100644
--- a/src/BioFSharp.ImgP/Trace.fs
+++ b/src/BioFSharp.ImgP/Trace.fs
@@ -25,11 +25,17 @@ module Ricker =
             Array.append 
                 (Array.map (fun x -> correctionVal * ( rickerMHwithScale scaleRise x)) [|-(padArea)..(- 1.)|]) 
                 (Array.map (fun x ->                   rickerMHwithScale scaleDecay x) [|0.0..(padArea)|])
-                
+        let amplitudeAdjValues =
+            let sum = values |> Array.fold (fun acc x -> acc + Math.Abs(x)) 0.
+            let max = values |> Array.max
+            let corrFacTwo = 
+                0.15 / max
+            values |> Array.map (fun x -> corrFacTwo * x)      
         {
         ScaleDecay  = scaleDecay
         ScaleRise   = scaleRise
-        Values      = values
+        Values      = amplitudeAdjValues
+        //Values      = values
         PadArea     = padAreaInt
         }
 

From cbba6a41a9b239e26467f32048aaec3335373faf Mon Sep 17 00:00:00 2001
From: Benedikt Venn 
Date: Thu, 21 Mar 2019 10:13:35 +0100
Subject: [PATCH 54/74] add GAF Parser (#45)

---
 .paket/Paket.Restore.targets         | 132 ++++-----------------------
 src/BioFSharp.IO/BioFSharp.IO.fsproj |   1 +
 src/BioFSharp.IO/GAF.fs              |  75 +++++++++++++++
 3 files changed, 96 insertions(+), 112 deletions(-)
 create mode 100644 src/BioFSharp.IO/GAF.fs

diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index 52f41c60..6be03acb 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -11,49 +11,23 @@
     $(MSBuildThisFileDirectory)..\
     $(PaketRootPath)paket-files\paket.restore.cached
     $(PaketRootPath)paket.lock
-    classic
-    proj
-    assembly
-    native
     /Library/Frameworks/Mono.framework/Commands/mono
     mono
-
-    
-    $(PaketRootPath)paket.bootstrapper.exe
-    $(PaketToolsPath)paket.bootstrapper.exe
-    $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\
-
-    
-
-    
-    $(PaketRootPath)paket.exe
-    $(PaketToolsPath)paket.exe
-    $(PaketToolsPath)paket.exe
-    $(_PaketBootStrapperExeDir)paket.exe
-    paket.exe
-
-    
-    $(PaketRootPath)paket
-    $(PaketToolsPath)paket
-    $(PaketToolsPath)paket
-
-    
-    $(PaketRootPath)paket.exe
-    $(PaketToolsPath)paket.exe
-
-    
-    $(PaketBootStrapperExeDir)paket.exe
-
-    
-    paket
-
     
+    $(PaketRootPath)paket.exe
+    $(PaketToolsPath)paket.exe
+    "$(PaketExePath)"
+    $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"
+
+    
     <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)"))
-    dotnet "$(PaketExePath)"
-    $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"
-    "$(PaketExePath)"
+    dotnet "$(PaketExePath)"
 
+    
+    "$(PaketExePath)"
 
+    $(PaketRootPath)paket.bootstrapper.exe
+    $(PaketToolsPath)paket.bootstrapper.exe
     "$(PaketBootStrapperExePath)"
     $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)"
 
@@ -62,16 +36,9 @@
     
     true
     true
-
-    
-    True
   
 
-  
-    
-  
-
-  
+  
 
     
     
@@ -105,16 +72,12 @@
       true
     
 
-	
-    
+    
       true
     
 
     
-    
+    
     
 
     
@@ -178,19 +141,15 @@
 
     
       
-        $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length)
         $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])
         $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])
         $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4])
-        $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5])
       
       
         %(PaketReferencesFileLinesInfo.PackageVersion)
         All
-        runtime
-        runtime
+        runtime
         true
-        true
       
     
 
@@ -222,27 +181,19 @@
   
     
       false
-      $(MSBuildVersion)
-      15.8.0
     
   
 
   
     
       <_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/>
-      
-      
     
 
     
       $(MSBuildProjectDirectory)/$(MSBuildProjectFile)
       true
-      false
-      true
-      false
-      true
-      false
-      true
+      false
+      true
       $(BaseIntermediateOutputPath)$(Configuration)
       $(BaseIntermediateOutputPath)
     
@@ -257,52 +208,9 @@
       
     
 
-    
-    
 
-    
+    
 
-    Debug;Release;Mono
   
   
+    
     
     
     
diff --git a/src/BioFSharp.IO/GAF.fs b/src/BioFSharp.IO/GAF.fs
new file mode 100644
index 00000000..81a46e99
--- /dev/null
+++ b/src/BioFSharp.IO/GAF.fs
@@ -0,0 +1,75 @@
+namespace BioFSharp.IO
+
+open System
+open FSharpAux
+open FSharpAux.IO
+
+module GAF =
+    
+    type GAFEntry = {
+        Database            : string
+        DbObjectID          : string
+        DbObjectSymbol      : string
+        Qualifier           : string []
+        GoTerm              : string
+        DbReference         : string []
+        Evidence            : string
+        WithFrom            : string []
+        Aspect              : string
+        DbObjectName        : string
+        DbObjectSynonym     : string []
+        DbObjectType        : string
+        Taxon               : string []
+        Date                : System.DateTime
+        AssignedBy          : string
+        AnnotationExtension : string [] option
+        GeneProductFormId   : string option
+                    }
+
+    let createGAFEntry (str:string) version2 =  
+        let split = str.Split([|'\t'|])
+        { 
+        Database            = split.[0]
+        DbObjectID          = split.[1]
+        DbObjectSymbol      = split.[2]
+        Qualifier           = split.[3].Split([|'|'|])
+        GoTerm              = split.[4]
+        DbReference         = split.[5].Split([|'|'|])
+        Evidence            = split.[6]
+        WithFrom            = split.[7].Split([|'|'|])
+        Aspect              = split.[8]
+        DbObjectName        = split.[9]
+        DbObjectSynonym     = split.[10].Split([|'|'|])
+        DbObjectType        = split.[11]
+        Taxon               = split.[12].Split([|'|'|])
+        Date                = System.DateTime.ParseExact(split.[13],"yyyyMMdd",null).Date
+        AssignedBy          = split.[14]
+        AnnotationExtension = if version2 then Some (split.[15].Split([|','|])) else None
+        GeneProductFormId   = if version2 then Some  split.[16]                 else None
+        }
+    
+    type GAF = {
+        Header  : seq
+        Entries : seq
+        }
+
+    let fromFile filepath :GAF=
+        let strEnumerator = (FileIO.readFile(filepath)).GetEnumerator()
+
+        let isVersion2 = 
+            strEnumerator.MoveNext() |> ignore
+            strEnumerator.Current.StartsWith("!gaf-version: 2")
+
+        let rec parseSingle (accE:GAFEntry list) (accH:string list)=
+            if strEnumerator.MoveNext() then 
+                let currentString = strEnumerator.Current
+                if currentString.StartsWith("!") then 
+                    parseSingle accE (currentString::accH) 
+                else 
+                    parseSingle ((createGAFEntry currentString isVersion2)::accE) accH
+
+            else 
+                {Header =  accH |> List.rev |> Seq.cast
+                 Entries = accE |> List.rev |> Seq.cast}   
+
+        parseSingle [] []
\ No newline at end of file

From f11cb122df29ccaa0809d3c3c951294a1b645e0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= 
Date: Wed, 10 Apr 2019 18:31:57 +0200
Subject: [PATCH 55/74] Add  TMHMM to  Biotools

---
 .paket/Paket.Restore.targets                  | 182 ++++++++++++++++--
 BioFSharp.sln                                 |   1 +
 docsrc/content/BioTools-tmhmm.fsx             |  78 ++++++++
 .../BioFSharp.BioTools.fsproj                 |   1 +
 src/BioFSharp.BioTools/Tmhmm.fs               |  98 ++++++++++
 5 files changed, 340 insertions(+), 20 deletions(-)
 create mode 100644 docsrc/content/BioTools-tmhmm.fsx
 create mode 100644 src/BioFSharp.BioTools/Tmhmm.fs

diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index 6be03acb..e33a731f 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -11,23 +11,49 @@
     $(MSBuildThisFileDirectory)..\
     $(PaketRootPath)paket-files\paket.restore.cached
     $(PaketRootPath)paket.lock
+    classic
+    proj
+    assembly
+    native
     /Library/Frameworks/Mono.framework/Commands/mono
     mono
-    
-    $(PaketRootPath)paket.exe
-    $(PaketToolsPath)paket.exe
-    "$(PaketExePath)"
-    $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"
 
-    
+    
+    $(PaketRootPath)paket.bootstrapper.exe
+    $(PaketToolsPath)paket.bootstrapper.exe
+    $([System.IO.Path]::GetDirectoryName("$(PaketBootStrapperExePath)"))\
+
+    
+
+    
+    $(PaketRootPath)paket.exe
+    $(PaketToolsPath)paket.exe
+    $(PaketToolsPath)paket.exe
+    $(_PaketBootStrapperExeDir)paket.exe
+    paket.exe
+
+    
+    $(PaketRootPath)paket
+    $(PaketToolsPath)paket
+    $(PaketToolsPath)paket
+
+    
+    $(PaketRootPath)paket.exe
+    $(PaketToolsPath)paket.exe
+
+    
+    $(PaketBootStrapperExeDir)paket.exe
+
+    
+    paket
+
+    
     <_PaketExeExtension>$([System.IO.Path]::GetExtension("$(PaketExePath)"))
-    dotnet "$(PaketExePath)"
+    dotnet "$(PaketExePath)"
+    $(MonoPath) --runtime=v4.0.30319 "$(PaketExePath)"
+    "$(PaketExePath)"
 
-    
-    "$(PaketExePath)"
 
-    $(PaketRootPath)paket.bootstrapper.exe
-    $(PaketToolsPath)paket.bootstrapper.exe
     "$(PaketBootStrapperExePath)"
     $(MonoPath) --runtime=v4.0.30319 "$(PaketBootStrapperExePath)"
 
@@ -36,9 +62,16 @@
     
     true
     true
+
+    
+    True
   
 
-  
+  
+    
+  
+
+  
 
     
     
@@ -72,12 +105,16 @@
       true
     
 
-    
+	
+    
       true
     
 
     
-    
+    
     
 
     
@@ -141,15 +178,19 @@
 
     
       
+        $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',').Length)
         $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[0])
         $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[1])
         $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[4])
+        $([System.String]::Copy('%(PaketReferencesFileLines.Identity)').Split(',')[5])
       
       
         %(PaketReferencesFileLinesInfo.PackageVersion)
         All
-        runtime
+        runtime
+        runtime
         true
+        true
       
     
 
@@ -181,19 +222,30 @@
   
     
       false
+      $(MSBuildVersion)
+      15.8.0
     
   
 
   
+
     
       <_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/>
+      
+      
     
 
     
       $(MSBuildProjectDirectory)/$(MSBuildProjectFile)
       true
-      false
-      true
+      false
+      true
+      false
+      true
+      false
+      true
+      false
+      true
       $(BaseIntermediateOutputPath)$(Configuration)
       $(BaseIntermediateOutputPath)
     
@@ -208,9 +260,99 @@
       
     
 
-
     
-    
+
+    
+
+    
 
-     Async.RunSynchronously
+
+
+
+//BioContainer.disposeAsync bcContextUbuntu
+//|> Async.Start
+
+
+let bcContext =
+    BioContainer.initBcContextLocalDefaultAsync Tmhmm.ImageTmhmm
+    |> Async.RunSynchronously
+
+
+let stream = new FileStream("C:/tmp/seq.fasta",FileMode.Open)
+
+let res = Tmhmm.run bcContext stream
+
+
+BioContainer.disposeAsync bcContext
+|> Async.Start
+
+
+
+res |> Seq.head |> fun tp -> tp.Topology
+
+
+
+
+
+//let bcContext =
+//    BioContainer.initBcContextLocalDefaultAsync TargetP.ImageTagetP
+//    |> Async.RunSynchronously
+
+
+//let stream = new FileStream("C:/tmp/twelve.fsa",FileMode.Open)
+
+//let res = TargetP.run bcContext (TargetP.NonPlant) stream
+
+
+
+//BioContainer.disposeAsync bcContext
+//|> Async.Start
+
+
+
+//res |> Seq.head |> fun tp -> tp.Mtp
\ No newline at end of file
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
index a6e005dc..118608a9 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
@@ -25,6 +25,7 @@
     
     
     
+    
     
   
   
diff --git a/src/BioFSharp.BioTools/Tmhmm.fs b/src/BioFSharp.BioTools/Tmhmm.fs
new file mode 100644
index 00000000..822d88ff
--- /dev/null
+++ b/src/BioFSharp.BioTools/Tmhmm.fs
@@ -0,0 +1,98 @@
+namespace BioFSharp.BioTools
+
+open System
+open System.IO
+open System.Threading
+
+
+/// TMHMM 2.0c predicts transmembrane helices in proteins
+module Tmhmm =
+ 
+    open FSharpAux
+    open FSharpAux.IO
+    open FSharpAux.IO.SchemaReader.Attribute
+ 
+    let ImageTmhmm = Docker.DockerId.ImageId "tmhmm"
+
+
+    //type TmhmmParams =
+    //    | Short
+    //    | Verbose
+    
+    //    static member makeCmd = function
+    //        | Short   -> ["-short"]
+    //        | Verbose -> []
+
+    //    static member make = function
+    //        | Short   -> "-short"
+    //        | Verbose -> ""
+
+
+    
+    type ConverterSplitString() = 
+        inherit ConverterAttribute()
+        override this.convertToObj = 
+            (fun (str : string) -> 
+                String.split '=' str
+                |> Array.tryItem 1
+                |> Option.defaultValue "" 
+                |> box) |> SchemaReader.Converter.Single
+                
+    type ConverterSplitInt() = 
+        inherit ConverterAttribute()
+        override this.convertToObj = 
+            (fun (str : string) -> 
+                String.split '=' str
+                |> Array.tryItem 1
+                |> Option.defaultValue "0"
+                |> FSharpAux.String.tryParseIntDefault 0 
+                |> box) |> SchemaReader.Converter.Single
+
+    type ConverterSplitFloat() = 
+        inherit ConverterAttribute()
+        override this.convertToObj = 
+            (fun (str : string) -> 
+                String.split '=' str
+                |> Array.tryItem 1
+                |> Option.defaultValue "nan"
+                |> FSharpAux.String.tryParseFloatDefault nan 
+                |> box) |> SchemaReader.Converter.Single
+
+    // 5H2A_CRIGR      len=471 ExpAA=159.47    First60=0.02    PredHel=7       Topology=o77-99i112-134o149-171i192-214o234-256i325-347o357-379i
+    type TmhmmItem = 
+        { 
+            []                           Name     : string
+            [][]    Len      : int
+            [][]  ExpAA    : float
+            [][]  First60  : float
+            [][]    PredHel  : int
+            [][] Topology : string
+            
+        }
+
+
+    let runAsync bcContext (fsaStream:Stream) = 
+        let tp = "tmhmm"::["-short"]
+        let tmpFile = sprintf "/data/%A.fsa" (System.Guid.NewGuid())
+        async {
+            do!
+                BioContainer.putStreamAsync bcContext fsaStream tmpFile
+            let! result =
+                BioContainer.execReturnAsync bcContext (tp@[tmpFile])
+            //do!
+            //    BioContainer.disposeAsync bcContext
+ 
+            // CsV Reader
+            let skipLines             = 0
+            let skipLinesBeforeHeader = 0
+            let schemaMode = SchemaReader.Csv.Fill
+            let csvReader = SchemaReader.Csv.CsvReader(SchemaMode=schemaMode)
+            
+            return csvReader.ReadFromString(result,'\t',false,skipLines, skipLinesBeforeHeader)
+ 
+        }
+        
+        
+    let run bcContext (fsaStream:Stream) = 
+        runAsync bcContext fsaStream
+        |> Async.RunSynchronously

From 209c3497e3cdb1db56a0675e0f2a76634a6dbe7a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= 
Date: Thu, 11 Apr 2019 14:02:27 +0200
Subject: [PATCH 56/74] Add GravyScore

---
 src/BioFSharp/AminoProperties.fs                | 6 ++++++
 src/BioFSharp/Resources/AminoAcidProperties.txt | 2 ++
 2 files changed, 8 insertions(+)

diff --git a/src/BioFSharp/AminoProperties.fs b/src/BioFSharp/AminoProperties.fs
index f6c25250..e09fa9a3 100644
--- a/src/BioFSharp/AminoProperties.fs
+++ b/src/BioFSharp/AminoProperties.fs
@@ -10,6 +10,8 @@ module AminoProperties =
 
     ///Union case of amino acid properties, referencing the according included information in this library. Use "initGetAminoProperty" function to obtain a simple mapping function
     type AminoProperty =
+        // Gravy score (Grand Average of Hydropathy)
+        | GravyScore 
         /// Hydrophobicity index (Argos et al., 1982)
         | HydrophobicityIndex
         /// Hydrophobicity index (Fasman, 1989)
@@ -78,6 +80,8 @@ module AminoProperties =
         | CompositionIntracellular
         /// Composition of amino acids in extracellular proteins (percent) (Cedano et al., 1997)
         | CompositionExtracellular
+        // Weights for coil at the window position of -3 (Qian-Sejnowski, 1988) 
+        | WeightsCoilMinus3
         /// Weights for alpha-helix at the window position of -3 (Qian-Sejnowski, 1988)
         | WeightsHelixMinus3
         /// Helix formation parameters (delta delta G) (O'Neil-DeGrado, 1990)
@@ -89,6 +93,7 @@ module AminoProperties =
 
 
         static member toString = function
+            | GravyScore -> "Gravy score (Grand Average of Hydropathy)"
             | HydrophobicityIndex       -> "Hydrophobicity index (Argos et al., 1982)"
             | HydrophobicityFasman      -> "Hydrophobicity index (Fasman, 1989)"
             | HydrophobicityIndex2      -> "Hydrophobicity index (Wolfenden et al., 1979)"
@@ -123,6 +128,7 @@ module AminoProperties =
             | AverageNumberSurroundingResidues   -> "Average number of surrounding residues (Ponnuswamy et al., 1980)"
             | CompositionIntracellular  -> "Interior composition of amino acids in intracellular proteins of mesophiles (percent) (Fukuchi-Nishikawa, 2001)"
             | CompositionExtracellular  -> "Composition of amino acids in extracellular proteins (percent) (Cedano et al., 1997)"
+            | WeightsCoilMinus3        -> "Weights for coil at the window position of -3 (Qian-Sejnowski, 1988)"
             | WeightsHelixMinus3        -> "Weights for alpha-helix at the window position of -3 (Qian-Sejnowski, 1988)"
             | HelixFormationParameters  -> "Helix formation parameters (delta delta G) (O'Neil-DeGrado, 1990)"
             | FreeEnergyHelicalRegion   -> "Free energy in alpha-helical region (Munoz-Serrano, 1994)"
diff --git a/src/BioFSharp/Resources/AminoAcidProperties.txt b/src/BioFSharp/Resources/AminoAcidProperties.txt
index dc820951..d60863bd 100644
--- a/src/BioFSharp/Resources/AminoAcidProperties.txt
+++ b/src/BioFSharp/Resources/AminoAcidProperties.txt
@@ -1,3 +1,5 @@
+Gravy score (Grand Average of Hydropathy)
+A:1.8 R:-4.5 N:-3.5 D:-3.5 C:2.5 Q:-3.5 E:-3.5 G:-0.4 H:-3.2 I:4.5 L:3.8 K:-3.9 M:1.9 F:2.8 P:-1.6 S:-0.8 T:-0.7 W:-0.9 Y:-1.3 V:4.2
 Hydrophobicity index (Argos et al., 1982)
 A:0.61 R:0.6 N:0.06 D:0.46 C:1.07 Q:0 E:0.47 G:0.07 H:0.61 I:2.22 L:1.53 K:1.15 M:1.18 F:2.02 P:1.95 S:0.05 T:0.05 W:2.65 Y:1.88 V:1.32
 Hydrophobicity index (Fasman, 1989)

From d0f059ab899c715a37b7f50318292c8a81f18dd9 Mon Sep 17 00:00:00 2001
From: Benedikt Venn 
Date: Fri, 26 Apr 2019 16:27:02 +0200
Subject: [PATCH 57/74] closes #47

---
 src/BioFSharp.IO/GFF3.fs | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/src/BioFSharp.IO/GFF3.fs b/src/BioFSharp.IO/GFF3.fs
index 0ac72309..fa621d2a 100644
--- a/src/BioFSharp.IO/GFF3.fs
+++ b/src/BioFSharp.IO/GFF3.fs
@@ -324,12 +324,18 @@ module GFF3 =
                 }
         toString
 
-    ///writes GFF lines to file. Hint: Use id as converter if no FASTA sequence is included.
-    let write (input : seq>>) converter path=
+    ///writesOrAppends GFF lines to file. Hint: Use id as converter if no FASTA sequence is included.
+    let writeOrAppend (input : seq>>) converter path =
         toString input converter path
         |> Seq.writeOrAppend path
         printfn "Writing is finished! Path: %s" path
 
+    ///writes GFF lines to file. Hint: Use id as converter if no FASTA sequence is included.
+    let write (input : seq>>) converter path =
+        toString input converter path
+        |> Seq.write path
+        printfn "Writing is finished! Path: %s" path
+
     ///if a FastA sequence is included this function searches the features corresponding sequence
     let getSequence (gFFFile : seq>>) (cDSfeature:GFFEntry)= 
     

From 0122fc6b6ac02824bddb6c2abde09868b4d8511b Mon Sep 17 00:00:00 2001
From: Benedikt Venn 
Date: Mon, 29 Apr 2019 16:49:22 +0200
Subject: [PATCH 58/74] update GFF3 parameter order

---
 docsrc/content/GFF3.fsx  | 2 +-
 src/BioFSharp.IO/GFF3.fs | 8 ++++----
 2 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/docsrc/content/GFF3.fsx b/docsrc/content/GFF3.fsx
index 89ee7cfa..26c5ccec 100644
--- a/docsrc/content/GFF3.fsx
+++ b/docsrc/content/GFF3.fsx
@@ -101,7 +101,7 @@ _Note: The order of key value pairs in field 9 (attributes) may be changed._
 
 ///Takes a seq>, a FASTA converter and a destination filepath and writes it into a .gff. Hint: Use converter = id if no FastA sequence is included.
 (*** do-not-eval ***)
-let gffExampleWrite = GFF3.write features BioItem.symbol (__SOURCE_DIRECTORY__ + "/data/gffExampleWrite.gff")
+let gffExampleWrite = GFF3.write BioItem.symbol (__SOURCE_DIRECTORY__ + "/data/gffExampleWrite.gff") features
 
 (**
 ##Example: Sequence of CDS
diff --git a/src/BioFSharp.IO/GFF3.fs b/src/BioFSharp.IO/GFF3.fs
index fa621d2a..f5db1ed7 100644
--- a/src/BioFSharp.IO/GFF3.fs
+++ b/src/BioFSharp.IO/GFF3.fs
@@ -310,7 +310,7 @@ module GFF3 =
         else sprintf "%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s" g.Seqid g.Source g.Feature (toStringInt g.StartPos) (toStringInt g.EndPos) (toStringFloat g.Score) (toStringChar g.Strand) (toStringInt g.Phase) (toStringMap g.Attributes) (toStringSup g.Supplement)
 
     ///converts GFF lines to string sequence. Hint: Use id as converter if no FASTA sequence is included.
-    let toString (input : seq>>) converter path=
+    let toString converter (input : seq>>) =
         let en = input.GetEnumerator()
         let toString =
             seq {   
@@ -326,13 +326,13 @@ module GFF3 =
 
     ///writesOrAppends GFF lines to file. Hint: Use id as converter if no FASTA sequence is included.
     let writeOrAppend (input : seq>>) converter path =
-        toString input converter path
+        toString converter input
         |> Seq.writeOrAppend path
         printfn "Writing is finished! Path: %s" path
 
     ///writes GFF lines to file. Hint: Use id as converter if no FASTA sequence is included.
-    let write (input : seq>>) converter path =
-        toString input converter path
+    let write converter path (input : seq>>) =
+        toString converter input
         |> Seq.write path
         printfn "Writing is finished! Path: %s" path
 

From f2a16aaa2456b0c431f6d50d0f78a12834671e97 Mon Sep 17 00:00:00 2001
From: Lukas Weil 
Date: Mon, 29 Apr 2019 18:06:34 +0200
Subject: [PATCH 59/74] add UniProt style FastA Header parser

---
 .paket/Paket.Restore.targets |  29 ++---
 src/BioFSharp/BioID.fs       | 226 ++++++++++++++++++++++++-----------
 2 files changed, 173 insertions(+), 82 deletions(-)

diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index e33a731f..0df24f94 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -65,6 +65,8 @@
 
     
     True
+
+    $(BaseIntermediateOutputPath.TrimEnd('\').TrimEnd('\/'))
   
 
   
@@ -115,18 +117,18 @@
 
     
     
-    
-
+    
+    
     
     
       
       
       
-      
+      
     
     
     
-      $(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).paket.references.cached
+      $(PaketIntermediateOutputPath)\$(MSBuildProjectFile).paket.references.cached
       
       $(MSBuildProjectFullPath).paket.references
       
@@ -161,8 +163,8 @@
 
     
     
-    
-    
+    
+    
 
     
     
@@ -195,7 +197,7 @@
     
 
     
-      $(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).paket.clitools
+      $(PaketIntermediateOutputPath)/$(MSBuildProjectFile).paket.clitools
     
 
     
@@ -214,12 +216,12 @@
 
     
 
   
 
-  
+  
     
       false
       $(MSBuildVersion)
@@ -227,10 +229,9 @@
     
   
 
-  
-
+  
     
-      <_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/>
+      <_NuspecFilesNewLocation Include="$(PaketIntermediateOutputPath)\$(Configuration)\*.nuspec"/>
       
       
     
@@ -246,8 +247,8 @@
       true
       false
       true
-      $(BaseIntermediateOutputPath)$(Configuration)
-      $(BaseIntermediateOutputPath)
+      $(PaketIntermediateOutputPath)\$(Configuration)
+      $(PaketIntermediateOutputPath)
     
 
     
diff --git a/src/BioFSharp/BioID.fs b/src/BioFSharp/BioID.fs
index 274bcf83..8b1e0d88 100644
--- a/src/BioFSharp/BioID.fs
+++ b/src/BioFSharp/BioID.fs
@@ -125,81 +125,171 @@ module BioID =
 //    let parseMgiId  = Regex.tryEitherParse MgiId "MGI:[0-9]*"
 
 
-//    module FastA =
-                
+    module FastA =
+
+        open System.Text.RegularExpressions
+        
 //        open FSharp.Care.Regex
 //        open FSharp.Care.Monads
 //        open FSharp.Care.Collections
 
-//        type FastaHeader<'IdType> = {
-//            ID          : 'IdType
-//            Description : string
-//            Info     : Map    
-//            }
+        type FastaHeader<'IdType> = {
+            ID          : 'IdType
+            Description : string
+            Info     : Map    
+            }
 
-//        let createFastaHeader id description info =
-//            {ID=id;Description=description;Info=info}
+        let createFastaHeader id description info =
+            {ID=id;Description=description;Info=info}
     
 
-//        /// Returns DisplayId of FastA header. None if none present.
-//        let displayIdOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "DID"
-//        /// Returns Aliases of FastA header. None if none present.
-//        let aliasesOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "ALS"
-//        /// Returns DataBaseVersion of FastA header. None if none present.
-//        let dataBaseVersionOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "DBV"
-//        /// Returns Type of UniqueIdentifier of FastA header. None if none present.
-//        let touOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "TOU"
-//        /// Returns SequenceVersion of FastA header. None if none present.
-//        let sequenceVersionOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "SV"
-//        /// Returns OrganismName of FastA header. None if none present.
-//        let organismNameOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "OS"
-//        /// Returns ProteinExistence of FastA header. None if none present.
-//        let proteinExistenceOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "PE"
-//        /// Returns GeneName of FastA header. None if none present.
-//        let geneNameOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "GN"
-//        /// Returns ProteinName of FastA header. None if none present.
-//        let proteinNameOf (header:FastaHeader<_>) =
-//            header.Info.TryFindDefault "None" "PN"
-
-
-
-//        /// Sets DisplayId in FastA header.
-//        let setDisplayId displayId (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("DID",displayId)}
-//        /// Sets Aliases in FastA header.
-//        let setAliases alias (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("ALS",alias)}
-//        /// Sets DataBaseVersion in FastA header.
-//        let setDataBaseVersion dbv (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("DBV",dbv)}
-//        /// Sets Type of UniqueIdentifier in FastA header.
-//        let setIdType idType (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("TOU",idType)}
-//        /// Sets SequenceVersion in FastA header.
-//        let setSequenceVersion sv (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("SV",sv)}
-//        /// Sets OrganismName in FastA header.
-//        let setOrganismName os (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("OS",os)}
-//        /// Sets ProteinExistence in FastA header.
-//        let setProteinExistence pe (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("PE",pe)}
-//        /// Sets GeneName in FastA header.
-//        let setGeneName gn (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("GN",gn)}    
-//        /// Sets ProteinName in FastA header.
-//        let setProteinName pn (header:FastaHeader<_>) =
-//            {header with Info=header.Info.Add("PN",pn)}
-
-
+        /// Returns DisplayId of FastA header. None if none present.
+        let displayIdOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "DID"
+        /// Returns Aliases of FastA header. None if none present.
+        let aliasesOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "ALS"
+        /// Returns DataBaseVersion of FastA header. None if none present.
+        let dataBaseVersionOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "DBV"
+        /// Returns Type of UniqueIdentifier of FastA header. None if none present.
+        let touOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "TOU"
+        /// Returns SequenceVersion of FastA header. None if none present.
+        let sequenceVersionOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "SV"
+        /// Returns OrganismName of FastA header. None if none present.
+        let organismNameOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "OS"
+        /// Returns ProteinExistence of FastA header. None if none present.
+        let proteinExistenceOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "PE"
+        /// Returns GeneName of FastA header. None if none present.
+        let geneNameOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "GN"
+        /// Returns ProteinName of FastA header. None if none present.
+        let proteinNameOf (header:FastaHeader<_>) =
+            header.Info.TryFindDefault "None" "PN"
+
+
+
+        /// Sets DisplayId in FastA header.
+        let setDisplayId displayId (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("DID",displayId)}
+        /// Sets Aliases in FastA header.
+        let setAliases alias (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("ALS",alias)}
+        /// Sets DataBaseVersion in FastA header.
+        let setDataBaseVersion dbv (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("DBV",dbv)}
+        /// Sets Type of UniqueIdentifier in FastA header.
+        let setIdType idType (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("TOU",idType)}
+        /// Sets SequenceVersion in FastA header.
+        let setSequenceVersion sv (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("SV",sv)}
+        /// Sets OrganismName in FastA header.
+        let setOrganismName os (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("OS",os)}
+        /// Sets ProteinExistence in FastA header.
+        let setProteinExistence pe (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("PE",pe)}
+        /// Sets GeneName in FastA header.
+        let setGeneName gn (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("GN",gn)}    
+        /// Sets ProteinName in FastA header.
+        let setProteinName pn (header:FastaHeader<_>) =
+            {header with Info=header.Info.Add("PN",pn)}
+
+
+        /// DisplayId (DID=)
+        let private displayIdRegex              = new Regex(@"(?<=DID=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled)
+        /// Aliases (ALS=)
+        let private AliasesRegex                = new Regex(@"(?<=ALS=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled)
+        /// DataBaseVersion (DBV=)
+        let private DataBaseVersionRegex        = new Regex(@"(?<=DBV=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled)
+        /// Type of UniqueIdentifier (TOU=)
+        let private TypeOfUniqueIdentifierRegex = new Regex(@"(?<=TOU=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled)
+        /// SequenceVersion (SV=)
+        let private SequenceVersionRegex        = new Regex(@"(?<=SV=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled) 
+        /// OrganismName (OS=)
+        let private OrganismNameRegex           = new Regex(@"(?<=OS=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled) 
+        /// OrganismIdentifier (OX=)
+        let private OrganismIdentifierRegex     = new Regex(@"(?<=OX=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled) 
+        /// ProteinExistence (PE=)
+        let private ProteinExistenceRegex       = new Regex(@"(?<=PE=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled) 
+        /// GeneName (GN=)
+        let private GeneNameRegex               = new Regex(@"(?<=GN=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled) 
+        ///  ProteinName (PN=)
+        let private ProteinNameRegex            = new Regex(@"(?<=PN=)[^=]*(?= \S*=|$)", options = RegexOptions.Compiled)    
+
+        /// Parse Description without attributes
+        let private descriptionRegex =  new Regex(@"(?<=|)[^=|]*(?= \S*=|$)", options = RegexOptions.Compiled)
+
+
+        /// Returns FastAHeader Object from UniProt style FastAHeader string
+        ///
+        /// For Reference see: https://www.uniprot.org/help/fasta-headers
+        let fromString (str:string) =    
+            let rec loop (input:(string*(string-> string option)) list) acc (s:string) =
+                match input with
+                | h::t ->   let key,parser = h 
+                            match parser s with
+                            | Some r -> loop t ((key,r)::acc) s
+                            | None -> loop t acc s
+                | [] -> (acc)
+
+            let matchToResultOption (m : Match) = if m.Success then Some m.Value else None
+
+            /// Parse DisplayId (DID=) from string
+            let parseDisplayId str =                displayIdRegex.Match(str) |> matchToResultOption
+            /// Parse Aliases (ALS=)
+            let parseAliases str =                  AliasesRegex.Match(str) |> matchToResultOption
+            /// Parse DataBaseVersion (DBV=)
+            let parseDataBaseVersion str =          DataBaseVersionRegex.Match(str) |> matchToResultOption
+            /// Parse Type of UniqueIdentifier (TOU=)
+            let parseTypeOfUniqueIdentifier str =   TypeOfUniqueIdentifierRegex.Match(str) |> matchToResultOption
+            /// Parse SequenceVersion (SV=)
+            let parseSequenceVersion str =          SequenceVersionRegex.Match(str) |> matchToResultOption
+            /// Parse OrganismName (OS=)
+            let parseOrganismName str =             OrganismNameRegex.Match(str) |> matchToResultOption
+            /// Parse OrganismIdentifier (OX=)
+            let parseOrganismIdentifier str =       OrganismIdentifierRegex.Match(str) |> matchToResultOption
+            /// Parse ProteinExistence (PE=)
+            let parseProteinExistence str =         ProteinExistenceRegex.Match(str) |> matchToResultOption
+            /// Parse GeneName (GN=)
+            let parseGeneName str =                 GeneNameRegex.Match(str) |> matchToResultOption
+            /// Parse ProteinName (PN=)
+            let parseProteinName str =              ProteinNameRegex.Match(str) |> matchToResultOption     
+
+            /// Parse Description without attributes
+            let parseDescription str = descriptionRegex.Match(str).Value
+
+            let splitStr = str.Split([|'|'|],3)
+            
+            let descr,info =
+                //splitStr.[2].Split(' ')
+                //|> Array.takeWhile 
+                if splitStr.Length > 1 then 
+                    let tmp =
+                        [
+                            "DID",parseDisplayId;
+                            "ALS",parseAliases;
+                            "DBV",parseDataBaseVersion;
+                            "TOU",parseTypeOfUniqueIdentifier;
+                            "SV",parseSequenceVersion;
+                            "OS",parseOrganismName;
+                            "OX",parseOrganismIdentifier
+                            "PE",parseProteinExistence;
+                            "GN",parseGeneName;
+                            "PN",parseProteinName;
+
+                        ]
+                    splitStr.[0] + " " + (parseDescription str),loop tmp [] splitStr.[2]
+                else
+                    ("",[])
+   
+            createFastaHeader splitStr.[1] (descr.Trim()) (info|> Map.ofList)
 ////        /// Returns FastaHeader from string
 ////        let fromString (str:string) =    
 ////            let rec loop (input:(string*(string->Either<(string*string),string>)) list) acc (s:string) =

From 2cdd3537398040e1508736bd734b22a67a7c46e7 Mon Sep 17 00:00:00 2001
From: Lukas Weil 
Date: Mon, 29 Apr 2019 18:07:06 +0200
Subject: [PATCH 60/74] add FastA to GFF3 converter functions

---
 src/BioFSharp.IO/GFF3.fs | 57 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 57 insertions(+)

diff --git a/src/BioFSharp.IO/GFF3.fs b/src/BioFSharp.IO/GFF3.fs
index fa621d2a..5210be59 100644
--- a/src/BioFSharp.IO/GFF3.fs
+++ b/src/BioFSharp.IO/GFF3.fs
@@ -392,3 +392,60 @@ module GFF3 =
         sequenceOfFirstCDS
 
     //Output: Nucleotides.Nucleotides [] (ATG...TAA)
+
+    ///Parse FastA to GFF3
+    module FastAHeaderParser = 
+        
+        /// Takes a sequence of FastA items and a regex pattern and transforms them into a sequence of GFF3 RNA items with decoy gene loci.
+        let createGFF3OfFastAWithRegex pattern (fastA : seq>) = 
+            fastA
+            |> Seq.mapi (fun i item -> 
+                let id = 
+                    let regex = System.Text.RegularExpressions.Regex.Match (item.Header,pattern)
+                    if regex.Success then regex.Value
+                    else 
+                        failwithf "Couldn't find pattern \"%s\" in header \"%s\"" pattern item.Header
+                [
+                GFFEntryLine (createGFFEntry "Unknown" "." "gene" "." "." "." "." "." (sprintf "ID=%i" i) "");
+                GFFEntryLine (createGFFEntry "Unknown" "." "mRNA" "." "." "." "." "." (sprintf "ID=%s;Parent=%i" id i) "")
+                ]
+            )
+            |> Seq.concat
+
+        /// Takes a sequence of FastA items and transforms them into a sequence of GFF3 RNA and gene items. FastA headers have to be UniProt style.
+        ///
+        /// For Reference see: https://www.uniprot.org/help/fasta-headers
+        let createGFF3OfFastA (fastA : seq>)= 
+            let fastAHeaders = 
+                fastA
+                |> Seq.map (fun item -> item.Header |> BioFSharp.BioID.FastA.fromString)
+            // "protein" and "mRNA" used interchangeably
+            let mRNAHeadersWithGeneName = 
+                let mutable i = 0
+                fastAHeaders
+                |> Seq.map (fun header ->
+                    // If field Gene name for a given protein is occupied then this gene name is used. In this case multiple Proteins can be associated to the same gene. Else a decoy number is set.
+                    match Map.tryFind "GN" header.Info with
+                    | Some name ->
+                        (header.ID, name)
+                    | None ->
+                        let id = i |> string
+                        i <- i + 1
+                        header.ID,id
+                    )
+            // The proteins are grouped by their gene name 
+            mRNAHeadersWithGeneName
+            |> Seq.groupBy snd
+            |> Seq.collect (fun (genename,proteins) ->
+                // All proteins/mRNAs of one gene
+                proteins
+                |> Seq.map (fun (protID,_) ->
+                    GFFEntryLine (createGFFEntry "Unknown" "." "mRNA" "." "." "." "." "." (sprintf "ID=%s;Parent=%s" protID genename) "")
+                    )
+                // Then gene they point to
+                |> Seq.append (
+                    GFFEntryLine (createGFFEntry "Unknown" "." "gene" "." "." "." "." "." (sprintf "ID=%s" genename) "")
+                    |> Seq.singleton
+                    )
+                )
+

From 3d519cccf9cc3627383d02f317c8c84e2ad20fcb Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 14 May 2019 09:37:44 +0200
Subject: [PATCH 61/74] Bump version to 0.0.15

---
 build.fsx | 36 +++++++++++++++++++++++++++++-------
 1 file changed, 29 insertions(+), 7 deletions(-)

diff --git a/build.fsx b/build.fsx
index 080382ff..6a5484fe 100644
--- a/build.fsx
+++ b/build.fsx
@@ -75,6 +75,26 @@ module TemporaryDocumentationHelpers =
         run arguments.ToolPath command
         printfn "Successfully generated docs for %s" source
 
+[]
+module MessagePrompts =
+
+    let prompt (msg:string) =
+      System.Console.Write(msg)
+      System.Console.ReadLine().Trim()
+      |> function | "" -> None | s -> Some s
+      |> Option.map (fun s -> s.Replace ("\"","\\\""))
+
+    let rec promptYesNo msg =
+      match prompt (sprintf "%s [Yn]: " msg) with
+      | None
+      | Some "Y" | Some "y" -> true
+      | Some "N" | Some "n" -> false
+      | _ -> System.Console.WriteLine("Sorry, invalid answer"); promptYesNo msg
+
+    let releaseMsg = """This will stage all uncommitted changes, push them to the origin and bump the release version to the latest number in the RELEASE_NOTES.md file. 
+    Do you want to continue?"""
+
+
 // --------------------------------------------------------------------------------------
 // START TODO: Provide project-specific details below
 // --------------------------------------------------------------------------------------
@@ -486,13 +506,15 @@ Target.create "Release" (fun _ ->
     //|> Async.RunSynchronously
 
     // using simplified FAKE 5 release for now
-
-    Git.Staging.stageAll ""
-    Git.Commit.exec "" (sprintf "Bump version to %s" release.NugetVersion)
-    Git.Branches.push ""
-
-    Git.Branches.tag "" release.NugetVersion
-    Git.Branches.pushTag "" "origin" release.NugetVersion
+    match promptYesNo releaseMsg with
+    |true ->
+        Git.Staging.stageAll ""
+        Git.Commit.exec "" (sprintf "Bump version to %s" release.NugetVersion)
+        Git.Branches.push ""
+
+        Git.Branches.tag "" release.NugetVersion
+        Git.Branches.pushTag "" "origin" release.NugetVersion
+    |_ -> ()
 )
 
 Target.create "BuildPackage" ignore

From 61f794ae289729784ae94b9ddf7fe1a15d99cf40 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 14 May 2019 09:48:36 +0200
Subject: [PATCH 62/74] Revert accidental release commit

---
 build.fsx | 36 +++++++-----------------------------
 1 file changed, 7 insertions(+), 29 deletions(-)

diff --git a/build.fsx b/build.fsx
index 6a5484fe..080382ff 100644
--- a/build.fsx
+++ b/build.fsx
@@ -75,26 +75,6 @@ module TemporaryDocumentationHelpers =
         run arguments.ToolPath command
         printfn "Successfully generated docs for %s" source
 
-[]
-module MessagePrompts =
-
-    let prompt (msg:string) =
-      System.Console.Write(msg)
-      System.Console.ReadLine().Trim()
-      |> function | "" -> None | s -> Some s
-      |> Option.map (fun s -> s.Replace ("\"","\\\""))
-
-    let rec promptYesNo msg =
-      match prompt (sprintf "%s [Yn]: " msg) with
-      | None
-      | Some "Y" | Some "y" -> true
-      | Some "N" | Some "n" -> false
-      | _ -> System.Console.WriteLine("Sorry, invalid answer"); promptYesNo msg
-
-    let releaseMsg = """This will stage all uncommitted changes, push them to the origin and bump the release version to the latest number in the RELEASE_NOTES.md file. 
-    Do you want to continue?"""
-
-
 // --------------------------------------------------------------------------------------
 // START TODO: Provide project-specific details below
 // --------------------------------------------------------------------------------------
@@ -506,15 +486,13 @@ Target.create "Release" (fun _ ->
     //|> Async.RunSynchronously
 
     // using simplified FAKE 5 release for now
-    match promptYesNo releaseMsg with
-    |true ->
-        Git.Staging.stageAll ""
-        Git.Commit.exec "" (sprintf "Bump version to %s" release.NugetVersion)
-        Git.Branches.push ""
-
-        Git.Branches.tag "" release.NugetVersion
-        Git.Branches.pushTag "" "origin" release.NugetVersion
-    |_ -> ()
+
+    Git.Staging.stageAll ""
+    Git.Commit.exec "" (sprintf "Bump version to %s" release.NugetVersion)
+    Git.Branches.push ""
+
+    Git.Branches.tag "" release.NugetVersion
+    Git.Branches.pushTag "" "origin" release.NugetVersion
 )
 
 Target.create "BuildPackage" ignore

From ffdc75d3352208244f7589757b333a0768ccbbb3 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 14 May 2019 10:21:55 +0200
Subject: [PATCH 63/74] Add module for simple message prompts to build.fsx

---
 build.fsx | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/build.fsx b/build.fsx
index 080382ff..70747612 100644
--- a/build.fsx
+++ b/build.fsx
@@ -75,6 +75,23 @@ module TemporaryDocumentationHelpers =
         run arguments.ToolPath command
         printfn "Successfully generated docs for %s" source
 
+[]
+module MessagePrompts =
+
+     let prompt (msg:string) =
+      System.Console.Write(msg)
+      System.Console.ReadLine().Trim()
+      |> function | "" -> None | s -> Some s
+      |> Option.map (fun s -> s.Replace ("\"","\\\""))
+
+     let rec promptYesNo msg =
+      match prompt (sprintf "%s [Yn]: " msg) with
+      | Some "Y" | Some "y" -> true
+      | Some "N" | Some "n" -> false
+      | _ -> System.Console.WriteLine("Sorry, invalid answer"); promptYesNo msg
+
+     let releaseMsg = """This will stage all uncommitted changes, push them to the origin and bump the release version to the latest number in the RELEASE_NOTES.md file. 
+    Do you want to continue?"""
 // --------------------------------------------------------------------------------------
 // START TODO: Provide project-specific details below
 // --------------------------------------------------------------------------------------

From b8516fd776476f22e82ceab2ac7b74cd20038b4c Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Tue, 14 May 2019 10:23:13 +0200
Subject: [PATCH 64/74] Add confirmation prompt before executing release target
 in build.fsx

---
 build.fsx | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/build.fsx b/build.fsx
index 70747612..a703d8c3 100644
--- a/build.fsx
+++ b/build.fsx
@@ -527,6 +527,10 @@ Target.create "GitReleaseNuget" (fun _ ->
     Shell.copy tempNugetDir files
 )
 
+//Confirmation Targets (Ugly because error is thrown. Maybe there is a better way on handling this using the cancellation tokens in the target context, but i was not able to figure that out)
+
+Target.create "ReleaseConfirmation" (fun _ -> match promptYesNo releaseMsg with | true -> () |_ -> failwith "Release canceled")
+
 // --------------------------------------------------------------------------------------
 // Run all targets by default. Invoke 'build ' to override
 
@@ -561,7 +565,8 @@ Target.create "Linux" ignore
 "Clean"
   ==> "Release"
 
-"BuildPackage"
+"ReleaseConfirmation"
+  ==> "BuildPackage"
   ==> "PublishNuget"
   ==> "Release"
 

From 518b3ade97a96337568d4bb46819d470c39fb846 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Thu, 16 May 2019 14:43:13 +0200
Subject: [PATCH 65/74] Fix paket templates for all projects:  - use type
 project  - update description and summary  - fix binary paths  - fix lookup
 of dependencies

---
 RELEASE_NOTES.md                              |  6 ++++++
 docsrc/content/release-notes.md               |  6 ++++++
 src/BioFSharp.BioDB/AssemblyInfo.fs           |  8 +++----
 src/BioFSharp.BioDB/BioFSharp.BioDB.fsproj    |  3 ++-
 src/BioFSharp.BioDB/paket.template            | 17 ++++++++++-----
 src/BioFSharp.BioTools/AssemblyInfo.fs        |  8 +++----
 .../BioFSharp.BioTools.fsproj                 |  2 ++
 src/BioFSharp.BioTools/paket.template         | 15 ++++++-------
 src/BioFSharp.IO/AssemblyInfo.fs              |  8 +++----
 src/BioFSharp.IO/BioFSharp.IO.fsproj          |  1 +
 src/BioFSharp.IO/paket.template               | 21 ++++++++++++-------
 src/BioFSharp.ImgP/AssemblyInfo.fs            |  8 +++----
 src/BioFSharp.ML/AssemblyInfo.fs              |  8 +++----
 src/BioFSharp.ML/paket.template               | 15 ++++++-------
 src/BioFSharp.Parallel/AssemblyInfo.fs        |  8 +++----
 src/BioFSharp.Parallel/paket.template         | 17 ++++++++++-----
 src/BioFSharp.Stats/AssemblyInfo.fs           |  8 +++----
 src/BioFSharp.Stats/paket.template            | 21 ++++++++++++-------
 src/BioFSharp.Vis/AssemblyInfo.fs             |  8 +++----
 src/BioFSharp.Vis/paket.template              | 21 ++++++++++++-------
 src/BioFSharp/AssemblyInfo.fs                 |  8 +++----
 src/BioFSharp/paket.template                  |  7 ++++---
 22 files changed, 139 insertions(+), 85 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index 5930332e..e587d1a4 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,3 +1,9 @@
+#### 0.0.16 - Thursday, March 7, 2019
+ * Fix template files for all nuget packages: 
+   * use correct paths for binaries
+   * update project descriptions
+   * use type project to infer dependencies
+
 #### 0.0.15 - Thursday, March 7, 2019
  * BioFSharp.ML - project introduction:
    * Usage of Microsoft's CNTK library with a biological focus:
diff --git a/docsrc/content/release-notes.md b/docsrc/content/release-notes.md
index 5930332e..e587d1a4 100644
--- a/docsrc/content/release-notes.md
+++ b/docsrc/content/release-notes.md
@@ -1,3 +1,9 @@
+#### 0.0.16 - Thursday, March 7, 2019
+ * Fix template files for all nuget packages: 
+   * use correct paths for binaries
+   * update project descriptions
+   * use type project to infer dependencies
+
 #### 0.0.15 - Thursday, March 7, 2019
  * BioFSharp.ML - project introduction:
    * Usage of Microsoft's CNTK library with a biological focus:
diff --git a/src/BioFSharp.BioDB/AssemblyInfo.fs b/src/BioFSharp.BioDB/AssemblyInfo.fs
index daa98f49..ea04faf1 100644
--- a/src/BioFSharp.BioDB/AssemblyInfo.fs
+++ b/src/BioFSharp.BioDB/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.BioDB"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.BioDB/BioFSharp.BioDB.fsproj b/src/BioFSharp.BioDB/BioFSharp.BioDB.fsproj
index 096015ae..01fc5fc3 100644
--- a/src/BioFSharp.BioDB/BioFSharp.BioDB.fsproj
+++ b/src/BioFSharp.BioDB/BioFSharp.BioDB.fsproj
@@ -1,4 +1,4 @@
-
+
   
     net45
     BioFSharp.BioDB
@@ -20,6 +20,7 @@
     
     
     
+    
     
     
     
diff --git a/src/BioFSharp.BioDB/paket.template b/src/BioFSharp.BioDB/paket.template
index ccfea2ea..7b61152d 100644
--- a/src/BioFSharp.BioDB/paket.template
+++ b/src/BioFSharp.BioDB/paket.template
@@ -1,9 +1,10 @@
 type project
+id BioFSharp.BioDB
 title
     BioFSharp.BioDB
 owners
     Timo Mühlhaus
-authors
+authors 
     Timo Mühlhaus
 projectUrl
     https://github.com/CSBiology/BioFSharp
@@ -13,11 +14,17 @@ licenseUrl
     https://github.com/CSBiology/BioFSharp/blob/master/LICENSE.txt
 requireLicenseAcceptance
     false
+language
+    F#
 copyright
-    Copyright 2018
+    Copyright 2019
 tags
-    F# FSharp bioinformatics
+    bioinformatics F# fsharp database-access
 summary
-    F# FSharp bioinformatics
+    APIs for querying common biological databases
 description
-    F# FSharp bioinformatics
+    APIs for querying common biological databases
+include-referenced-projects 
+    true
+files
+    ../../bin/BioFSharp.BioDB ==> lib
diff --git a/src/BioFSharp.BioTools/AssemblyInfo.fs b/src/BioFSharp.BioTools/AssemblyInfo.fs
index 33c4db97..311ed633 100644
--- a/src/BioFSharp.BioTools/AssemblyInfo.fs
+++ b/src/BioFSharp.BioTools/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.BioTools"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
index 118608a9..70891fdc 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
@@ -27,6 +27,8 @@
     
     
     
+    
+    
   
   
     
diff --git a/src/BioFSharp.BioTools/paket.template b/src/BioFSharp.BioTools/paket.template
index 71169896..21c0c0bc 100644
--- a/src/BioFSharp.BioTools/paket.template
+++ b/src/BioFSharp.BioTools/paket.template
@@ -1,4 +1,4 @@
-type file
+type project
 id BioFSharp.BioTools
 title
     BioFSharp.BioTools
@@ -17,13 +17,14 @@ requireLicenseAcceptance
 language
     F#
 copyright
-    Copyright 2017
+    Copyright 2019
 tags
-    bioinformatics F# fsharp
+    bioinformatics F# fsharp docker biocontainer
 summary
-    BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
+    Common bioinformatics tools in Docker containers accessible by F#
 description
-    BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
-
+    Common bioinformatics tools in Docker containers (including BioContainers) accessible by F#
+include-referenced-projects 
+    true
 files
-	../../bin/BioFSharp ==> lib
+    ../../bin/BioFSharp.BioTools ==> lib
diff --git a/src/BioFSharp.IO/AssemblyInfo.fs b/src/BioFSharp.IO/AssemblyInfo.fs
index 58cb49db..7b7630e9 100644
--- a/src/BioFSharp.IO/AssemblyInfo.fs
+++ b/src/BioFSharp.IO/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.IO"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.IO/BioFSharp.IO.fsproj b/src/BioFSharp.IO/BioFSharp.IO.fsproj
index 5e6b9c57..8b1e79c3 100644
--- a/src/BioFSharp.IO/BioFSharp.IO.fsproj
+++ b/src/BioFSharp.IO/BioFSharp.IO.fsproj
@@ -33,6 +33,7 @@
     
     
     
+    
   
   
 	
diff --git a/src/BioFSharp.IO/paket.template b/src/BioFSharp.IO/paket.template
index 418dfaf6..7fc1e154 100644
--- a/src/BioFSharp.IO/paket.template
+++ b/src/BioFSharp.IO/paket.template
@@ -1,23 +1,30 @@
 type project
+id BioFSharp.IO
 title
     BioFSharp.IO
 owners
     Timo Mühlhaus
-authors
+authors 
     Timo Mühlhaus
 projectUrl
     https://github.com/CSBiology/BioFSharp
 iconUrl
-    https://raw.githubusercontent.com/CSBiology/FSharp.FGL/master/docs/files/img/logo.png
+    https://raw.githubusercontent.com/CSBiology/BioFSharp/master/docs/files/img/logo.png
 licenseUrl
-    https://github.com/CSBiology/FSharp.FGL/blob/master/LICENSE.txt
+    https://github.com/CSBiology/BioFSharp/blob/master/LICENSE.txt
 requireLicenseAcceptance
     false
+language
+    F#
 copyright
-    Copyright 2015
+    Copyright 2019
 tags
-   F# FSharp bioinformatics
+    bioinformatics F# fsharp IO
 summary
-   F# FSharp bioinformatics
+    Readers/Writers for biological file formats
 description
-   F# FSharp bioinformatics
+    Readers/Writers for biological file formats
+include-referenced-projects 
+    true
+files
+	../../bin/BioFSharp.IO ==> lib
diff --git a/src/BioFSharp.ImgP/AssemblyInfo.fs b/src/BioFSharp.ImgP/AssemblyInfo.fs
index ec51703c..9947b313 100644
--- a/src/BioFSharp.ImgP/AssemblyInfo.fs
+++ b/src/BioFSharp.ImgP/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.ImgP"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.ML/AssemblyInfo.fs b/src/BioFSharp.ML/AssemblyInfo.fs
index 2310d4b7..db231778 100644
--- a/src/BioFSharp.ML/AssemblyInfo.fs
+++ b/src/BioFSharp.ML/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.ML"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.ML/paket.template b/src/BioFSharp.ML/paket.template
index 5bdfe402..5aa40a45 100644
--- a/src/BioFSharp.ML/paket.template
+++ b/src/BioFSharp.ML/paket.template
@@ -1,4 +1,4 @@
-type file
+type project
 id BioFSharp.ML
 title
     BioFSharp.ML
@@ -17,13 +17,14 @@ requireLicenseAcceptance
 language
     F#
 copyright
-    Copyright 2017
+    Copyright 2019
 tags
-    bioinformatics F# fsharp
+    bioinformatics F# fsharp maschine learning
 summary
-    BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
+    Lighweight F# wrapper for ML.NET
 description
-    BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
-
+    Lighweight F# wrapper for ML.NET
+include-referenced-projects 
+    true
 files
-	../../bin/BioFSharp.ML ==> lib
+	../../bin/BioFSharp.ML ==> lib
\ No newline at end of file
diff --git a/src/BioFSharp.Parallel/AssemblyInfo.fs b/src/BioFSharp.Parallel/AssemblyInfo.fs
index 8c19ce4e..b80d364c 100644
--- a/src/BioFSharp.Parallel/AssemblyInfo.fs
+++ b/src/BioFSharp.Parallel/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Parallel"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Parallel/paket.template b/src/BioFSharp.Parallel/paket.template
index 441036df..757307d2 100644
--- a/src/BioFSharp.Parallel/paket.template
+++ b/src/BioFSharp.Parallel/paket.template
@@ -1,4 +1,5 @@
 type project
+id BioFSharp.Parallel
 title
     BioFSharp.Parallel
 owners
@@ -8,16 +9,22 @@ authors
 projectUrl
     https://github.com/CSBiology/BioFSharp
 iconUrl
-    https://raw.githubusercontent.com/CSBiology/FSharp.FGL/master/docs/files/img/logo.png
+    https://raw.githubusercontent.com/CSBiology/BioFSharp/master/docs/files/img/logo.png
 licenseUrl
     https://github.com/CSBiology/FSharp.FGL/blob/master/LICENSE.txt
 requireLicenseAcceptance
     false
+language
+    F#
 copyright
-    Copyright 2015
+    Copyright 2019
 tags
-    F# FSharp bioinformatics
+    F# FSharp bioinformatics parallelization
 summary
-    F# FSharp bioinformatics
+    GPU parallelized functions from BioFSharp
 description
-    F# FSharp bioinformatics
\ No newline at end of file
+    GPU parallelized functions from BioFSharp
+include-referenced-projects 
+    true
+files
+    ../../bin/BioFSharp.Parallel ==> lib
\ No newline at end of file
diff --git a/src/BioFSharp.Stats/AssemblyInfo.fs b/src/BioFSharp.Stats/AssemblyInfo.fs
index 09d6a62b..a60c08c0 100644
--- a/src/BioFSharp.Stats/AssemblyInfo.fs
+++ b/src/BioFSharp.Stats/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Stats"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Stats/paket.template b/src/BioFSharp.Stats/paket.template
index f3d3864c..a27894a2 100644
--- a/src/BioFSharp.Stats/paket.template
+++ b/src/BioFSharp.Stats/paket.template
@@ -1,23 +1,30 @@
 type project
+id BioFSharp.Stats
 title
     BioFSharp.Stats
 owners
     Timo Mühlhaus
-authors
+authors 
     Timo Mühlhaus
 projectUrl
     https://github.com/CSBiology/BioFSharp
 iconUrl
-    https://raw.githubusercontent.com/CSBiology/FSharp.FGL/master/docs/files/img/logo.png
+    https://raw.githubusercontent.com/CSBiology/BioFSharp/master/docs/files/img/logo.png
 licenseUrl
-    https://github.com/CSBiology/FSharp.FGL/blob/master/LICENSE.txt
+    https://github.com/CSBiology/BioFSharp/blob/master/LICENSE.txt
 requireLicenseAcceptance
     false
+language
+    F#
 copyright
-    Copyright 2015
+    Copyright 2019
 tags
-    F# FSharp bioinformatics
+    bioinformatics F# fsharp statistic
 summary
-    F# FSharp bioinformatics
+    Special statistical functions for bioinformatic purposes
 description
-    F# FSharp bioinformatics
\ No newline at end of file
+    Special statistical functions for bioinformatic purposes
+include-referenced-projects 
+    true
+files
+    ../../bin/BioFSharp.Stats ==> lib
\ No newline at end of file
diff --git a/src/BioFSharp.Vis/AssemblyInfo.fs b/src/BioFSharp.Vis/AssemblyInfo.fs
index 4b5a4a00..88f4109c 100644
--- a/src/BioFSharp.Vis/AssemblyInfo.fs
+++ b/src/BioFSharp.Vis/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Vis"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Vis/paket.template b/src/BioFSharp.Vis/paket.template
index cf64cbd2..d261ff1d 100644
--- a/src/BioFSharp.Vis/paket.template
+++ b/src/BioFSharp.Vis/paket.template
@@ -1,23 +1,30 @@
 type project
+id BioFSharp.Vis
 title
     BioFSharp.Vis
 owners
     Timo Mühlhaus
-authors
+authors 
     Timo Mühlhaus
 projectUrl
     https://github.com/CSBiology/BioFSharp
 iconUrl
-    https://raw.githubusercontent.com/CSBiology/FSharp.FGL/master/docs/files/img/logo.png
+    https://raw.githubusercontent.com/CSBiology/BioFSharp/master/docs/files/img/logo.png
 licenseUrl
-    https://github.com/CSBiology/FSharp.FGL/blob/master/LICENSE.txt
+    https://github.com/CSBiology/BioFSharp/blob/master/LICENSE.txt
 requireLicenseAcceptance
     false
+language
+    F#
 copyright
-    Copyright 2015
+    Copyright 2019
 tags
-    F# FSharp bioinformatics
+    bioinformatics F# fsharp image-processing
 summary
-    F# FSharp bioinformatics
+    Image processing tools using continuous wavelet transformations
 description
-    F# FSharp bioinformatics
\ No newline at end of file
+    Image processing tools using continuous wavelet transformations
+include-referenced-projects 
+    true
+files
+    ../../bin/BioFSharp.Vis ==> lib
\ No newline at end of file
diff --git a/src/BioFSharp/AssemblyInfo.fs b/src/BioFSharp/AssemblyInfo.fs
index 0dc8cc78..277ae624 100644
--- a/src/BioFSharp/AssemblyInfo.fs
+++ b/src/BioFSharp/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.15"
-    let [] AssemblyFileVersion = "0.0.15"
+    let [] AssemblyVersion = "0.0.16"
+    let [] AssemblyFileVersion = "0.0.16"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp/paket.template b/src/BioFSharp/paket.template
index b6be001e..161d6217 100644
--- a/src/BioFSharp/paket.template
+++ b/src/BioFSharp/paket.template
@@ -1,4 +1,4 @@
-type file
+type project
 id BioFSharp
 title
     BioFSharp
@@ -17,13 +17,14 @@ requireLicenseAcceptance
 language
     F#
 copyright
-    Copyright 2017
+    Copyright 2019
 tags
     bioinformatics F# fsharp
 summary
     BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
 description
     BioFSharp aims to be a user-friendly library for Bioinformatics written in F# as the official successor of FSharpBio.
-
+include-referenced-projects 
+    true
 files
 	../../bin/BioFSharp ==> lib

From 0b4ffe93755d915da64f4231199b0ec54d4d6c4d Mon Sep 17 00:00:00 2001
From: bvenn 
Date: Mon, 27 May 2019 16:41:45 +0200
Subject: [PATCH 66/74] update 3DCWT correlation calculation to loop

---
 src/BioFSharp.ImgP/Centroid.fs | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/BioFSharp.ImgP/Centroid.fs b/src/BioFSharp.ImgP/Centroid.fs
index b6ddfe69..99217011 100644
--- a/src/BioFSharp.ImgP/Centroid.fs
+++ b/src/BioFSharp.ImgP/Centroid.fs
@@ -109,18 +109,23 @@ module Centroid =
 
 
     let inline C3DWT (marr: Marr.MarrWavelet) (frame:'a[,]) =   
-        let resolutionPixel = (Array2D.length1 frame) - 40 * 2
+        let resolutionPixelfst = (Array2D.length1 frame) - 40 * 2
+        let resolutionPixelsnd = (Array2D.length2 frame) - 40 * 2
         let offset = marr.PadAreaRadius
         let paddingoffset = 40
-        let (CWTArray2D0: float[,]) = Array2D.zeroCreate (Array2D.length1 frame) (Array2D.length2 frame)
-        for x = paddingoffset to (paddingoffset + (resolutionPixel-1)) do
-            for y = paddingoffset to (paddingoffset + (resolutionPixel-1)) do
+        let (CWTArray2D0: float[,]) = Array2D.zeroCreate (Array2D.length2 frame) (Array2D.length1 frame)
+        for x = paddingoffset to (paddingoffset + (resolutionPixelsnd-1)) do
+            for y = paddingoffset to (paddingoffset + (resolutionPixelfst-1)) do
                 CWTArray2D0.[x,y] <-
-                    let mutable acc = 0.                                       
-                    for a = 0 to 2*offset do
-                        for b = 0 to 2*offset do               
-                            acc <- acc + ((marr.Values).[a,b] * (frame.[(y+(a-offset)),(x+(b-offset))] |> float))
-                    acc
+                    let rec loop acc' a b =
+                        if a <= 2 * offset then
+                            if b <= 2 * offset then
+                                let acc = acc' + ((marr.Values).[a,b] * (frame.[(y+(a-offset)),(x+(b-offset))] |> float))
+                                loop acc a (b + 1)
+                            else
+                                loop acc' (a + 1) 0
+                        else acc'
+                    loop 0. 0 0
         let deletePaddingArea =
             let arrayWithoutPaddingoffset = Array2D.zeroCreate ((Array2D.length1 CWTArray2D0)-(2*paddingoffset)) ((Array2D.length2 CWTArray2D0)-(2*paddingoffset))
             for i=paddingoffset to (Array2D.length1 CWTArray2D0)-(paddingoffset+1) do

From 2bb6bb2b67ea43df2d9fe970bd1445e568df53d4 Mon Sep 17 00:00:00 2001
From: bvenn 
Date: Mon, 27 May 2019 16:43:17 +0200
Subject: [PATCH 67/74] fix Ricker values for discrete time points

---
 src/BioFSharp.ImgP/Trace.fs | 18 +++++++++++-------
 1 file changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/BioFSharp.ImgP/Trace.fs b/src/BioFSharp.ImgP/Trace.fs
index 5b18a6cf..4ce54523 100644
--- a/src/BioFSharp.ImgP/Trace.fs
+++ b/src/BioFSharp.ImgP/Trace.fs
@@ -25,17 +25,19 @@ module Ricker =
             Array.append 
                 (Array.map (fun x -> correctionVal * ( rickerMHwithScale scaleRise x)) [|-(padArea)..(- 1.)|]) 
                 (Array.map (fun x ->                   rickerMHwithScale scaleDecay x) [|0.0..(padArea)|])
+
         let amplitudeAdjValues =
             let sum = values |> Array.fold (fun acc x -> acc + Math.Abs(x)) 0.
             let max = values |> Array.max
             let corrFacTwo = 
                 0.15 / max
             values |> Array.map (fun x -> corrFacTwo * x)      
+
         {
         ScaleDecay  = scaleDecay
         ScaleRise   = scaleRise
-        Values      = amplitudeAdjValues
-        //Values      = values
+        //Values      = amplitudeAdjValues
+        Values      = values
         PadArea     = padAreaInt
         }
 
@@ -123,14 +125,14 @@ module Trace =
 
     let paddTrace (cwtTrace:float[])= 
         let rnd = System.Random() 
-        let padding = 3000  //number of zeros the data is padded with
+        let padding = 20000  //number of zeros the data is padded with
         let listRnd = Array.map (fun x -> cwtTrace.[rnd.Next(0,cwtTrace.Length-1)]|> float ) [|0..padding-1|]
         let paddedCWT3Dtrace = Array.append (Array.append listRnd cwtTrace) listRnd
         paddedCWT3Dtrace
 
     ///computes the continious wavelet transform of the padded trace with wavelet type Ricker.
     let cWT1D (paddedTrace: float []) (myRicker: Ricker.myRicker)=
-        let padding =  3000
+        let padding =  20000
         let myRickerOffsetRise = (6. * myRicker.ScaleRise) |> ceil |> int 
         let myRickerOffset = myRicker.PadArea
         let arr = Array.zeroCreate (paddedTrace.Length - (2 * padding))
@@ -218,13 +220,15 @@ module Trace =
             let factorFstTerm = 3.4071 * factorSndTerm
             ((factorFstTerm * (x + rise)) / (Math.Sqrt(2. * Math.PI)))*Math.Exp(- 0.5 * (factorSndTerm * (x + rise)))
 
-        let blitarray = Array.zeroCreate (numberOfFrames+221)
+        //let blitarray = Array.zeroCreate (numberOfFrames+221)
+        let blitarray = Array.zeroCreate (numberOfFrames+501)
         let fitOfStandardCurve j =
                 if maximaArr.[j] >= threshold then 
                     //for i =j-7 to j+220 do
                         //blitarray.[i] <- (fittingFunction2 0.6 ((i - j) |> float)) * maximaArr.[j] 
-                    for i =j-(int rise) to j+220 do 
-                        blitarray.[i] <- (fittingFunction rise ((i - j) |> float)) * maximaArr.[j] 
+                    //for i =j-(int rise) to j+220 do 
+                    for i =j-(int rise) to j+500 do 
+                        blitarray.[i] <- (fittingFunction2 rise ((i - j) |> float)) * maximaArr.[j] 
                     blitarray.[0 .. numberOfFrames - 1]
                 else
                     blitarray.[j   ] <- 0.

From eaaa59fbd382721e75fbb9c6558b0ba2ff6afb00 Mon Sep 17 00:00:00 2001
From: bvenn 
Date: Mon, 27 May 2019 16:45:21 +0200
Subject: [PATCH 68/74] add prettyPrinter GFF3

---
 src/BioFSharp.IO/FSIPrinters.fs | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/src/BioFSharp.IO/FSIPrinters.fs b/src/BioFSharp.IO/FSIPrinters.fs
index 35fb0a89..41112253 100644
--- a/src/BioFSharp.IO/FSIPrinters.fs
+++ b/src/BioFSharp.IO/FSIPrinters.fs
@@ -8,6 +8,7 @@ module FSIPrinters =
     open BioFSharp.BioID
     open BioFSharp.IO
     open BioFSharp.IO.Clustal
+    open BioFSharp.IO.GFF3
     open FSharpAux
     open System.Text
     
@@ -101,3 +102,7 @@ module FSIPrinters =
         loop 0 false
         sprintf "\r\n%s\r\n" (prnt.ToString())
 
+    ///print GFF3 formatted file as seen in the specifications.
+    let prettyPrintGFF3 (input : seq>>) =
+        toString id input
+        |> Seq.iter (fun x -> printfn "%s" x)

From eb0c81fcd8c8b1999c51083a1adc8c4dd8c00555 Mon Sep 17 00:00:00 2001
From: bvenn 
Date: Mon, 27 May 2019 16:46:14 +0200
Subject: [PATCH 69/74] fix GFF3.write parameter order

---
 .paket/Paket.Restore.targets | 29 +++++++++++++++--------------
 src/BioFSharp.IO/GFF3.fs     |  4 ++--
 2 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index e33a731f..0df24f94 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -65,6 +65,8 @@
 
     
     True
+
+    $(BaseIntermediateOutputPath.TrimEnd('\').TrimEnd('\/'))
   
 
   
@@ -115,18 +117,18 @@
 
     
     
-    
-
+    
+    
     
     
       
       
       
-      
+      
     
     
     
-      $(MSBuildProjectDirectory)\obj\$(MSBuildProjectFile).paket.references.cached
+      $(PaketIntermediateOutputPath)\$(MSBuildProjectFile).paket.references.cached
       
       $(MSBuildProjectFullPath).paket.references
       
@@ -161,8 +163,8 @@
 
     
     
-    
-    
+    
+    
 
     
     
@@ -195,7 +197,7 @@
     
 
     
-      $(MSBuildProjectDirectory)/obj/$(MSBuildProjectFile).paket.clitools
+      $(PaketIntermediateOutputPath)/$(MSBuildProjectFile).paket.clitools
     
 
     
@@ -214,12 +216,12 @@
 
     
 
   
 
-  
+  
     
       false
       $(MSBuildVersion)
@@ -227,10 +229,9 @@
     
   
 
-  
-
+  
     
-      <_NuspecFilesNewLocation Include="$(BaseIntermediateOutputPath)$(Configuration)\*.nuspec"/>
+      <_NuspecFilesNewLocation Include="$(PaketIntermediateOutputPath)\$(Configuration)\*.nuspec"/>
       
       
     
@@ -246,8 +247,8 @@
       true
       false
       true
-      $(BaseIntermediateOutputPath)$(Configuration)
-      $(BaseIntermediateOutputPath)
+      $(PaketIntermediateOutputPath)\$(Configuration)
+      $(PaketIntermediateOutputPath)
     
 
     
diff --git a/src/BioFSharp.IO/GFF3.fs b/src/BioFSharp.IO/GFF3.fs
index f5db1ed7..67d0c406 100644
--- a/src/BioFSharp.IO/GFF3.fs
+++ b/src/BioFSharp.IO/GFF3.fs
@@ -325,7 +325,7 @@ module GFF3 =
         toString
 
     ///writesOrAppends GFF lines to file. Hint: Use id as converter if no FASTA sequence is included.
-    let writeOrAppend (input : seq>>) converter path =
+    let writeOrAppend converter path (input : seq>>) =
         toString converter input
         |> Seq.writeOrAppend path
         printfn "Writing is finished! Path: %s" path
@@ -337,7 +337,7 @@ module GFF3 =
         printfn "Writing is finished! Path: %s" path
 
     ///if a FastA sequence is included this function searches the features corresponding sequence
-    let getSequence (gFFFile : seq>>) (cDSfeature:GFFEntry)= 
+    let getSequence (cDSfeature:GFFEntry) (gFFFile : seq>>) = 
     
 //        let firstCDS = 
 //            let filteredGFFEntries = 

From aff8eff849deb1cca411faf3c640d53f6e410497 Mon Sep 17 00:00:00 2001
From: bvenn 
Date: Tue, 28 May 2019 09:03:39 +0200
Subject: [PATCH 70/74] fix Fasta.write add Fasta.writeAppend

---
 src/BioFSharp.IO/FastA.fs | 8 ++++++--
 1 file changed, 6 insertions(+), 2 deletions(-)

diff --git a/src/BioFSharp.IO/FastA.fs b/src/BioFSharp.IO/FastA.fs
index c5621e37..d277d59d 100644
--- a/src/BioFSharp.IO/FastA.fs
+++ b/src/BioFSharp.IO/FastA.fs
@@ -87,11 +87,15 @@ module FastA =
                                 sWriter.WriteLine(">" + i.Header)
                                 toChunks sWriter 80 i.Sequence) 
 
-    /// Writes FastaItem to file. Converter determines type of sequence by converting type -> char
+    /// Writes FastaItem to file. Converter determines type of sequence by converting type -> char. If file already exists the data is overwritten.
     let write (toString:'T -> char) (filePath:string) (data:seq>>) =
-        let file = new FileStream(filePath,FileMode.Append)
+        let file = new FileStream(filePath,FileMode.Create)
         writeToStreaam toString file data   
 
+    /// Writes FastaItem to file. Converter determines type of sequence by converting type -> char. If file already exists the data is appended.
+    let writeAndAppend (toString:'T -> char) (filePath:string) (data:seq>>) =
+        let file = new FileStream(filePath,FileMode.Append)
+        writeToStreaam toString file data   
 
     /// Converts FastaItem to string. Converter determines type of sequence by converting type -> char
     let toString (toString:'T -> char) (data:seq>>) =

From 43fadc6228b24229a38f499cd4049119b40558f3 Mon Sep 17 00:00:00 2001
From: bvenn 
Date: Tue, 28 May 2019 09:04:15 +0200
Subject: [PATCH 71/74] add confirmation prompt before executing releaseDocs
 target in build.fsx

---
 .paket/Paket.Restore.targets |  2 +-
 build.fsx                    | 35 +++++++++++++++++++++--------------
 2 files changed, 22 insertions(+), 15 deletions(-)

diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index 0df24f94..818b4eca 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -252,7 +252,7 @@
     
 
     
-      <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.nuspec"/>
+      <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion).nuspec"/>
     
 
     
diff --git a/build.fsx b/build.fsx
index a703d8c3..aea7b114 100644
--- a/build.fsx
+++ b/build.fsx
@@ -78,20 +78,23 @@ module TemporaryDocumentationHelpers =
 []
 module MessagePrompts =
 
-     let prompt (msg:string) =
-      System.Console.Write(msg)
-      System.Console.ReadLine().Trim()
-      |> function | "" -> None | s -> Some s
-      |> Option.map (fun s -> s.Replace ("\"","\\\""))
-
-     let rec promptYesNo msg =
-      match prompt (sprintf "%s [Yn]: " msg) with
-      | Some "Y" | Some "y" -> true
-      | Some "N" | Some "n" -> false
-      | _ -> System.Console.WriteLine("Sorry, invalid answer"); promptYesNo msg
-
-     let releaseMsg = """This will stage all uncommitted changes, push them to the origin and bump the release version to the latest number in the RELEASE_NOTES.md file. 
-    Do you want to continue?"""
+    let prompt (msg:string) =
+        System.Console.Write(msg)
+        System.Console.ReadLine().Trim()
+        |> function | "" -> None | s -> Some s
+        |> Option.map (fun s -> s.Replace ("\"","\\\""))
+
+    let rec promptYesNo msg =
+        match prompt (sprintf "%s [Yn]: " msg) with
+        | Some "Y" | Some "y" -> true
+        | Some "N" | Some "n" -> false
+        | _ -> System.Console.WriteLine("Sorry, invalid answer"); promptYesNo msg
+
+    let releaseMsg = """This will stage all uncommitted changes, push them to the origin and bump the release version to the latest number in the RELEASE_NOTES.md file. 
+        Do you want to continue?"""
+
+    let releaseDocsMsg = """This will push the docs to gh-pages. Remember building the docs prior to this. Do you want to continue?"""
+
 // --------------------------------------------------------------------------------------
 // START TODO: Provide project-specific details below
 // --------------------------------------------------------------------------------------
@@ -530,6 +533,7 @@ Target.create "GitReleaseNuget" (fun _ ->
 //Confirmation Targets (Ugly because error is thrown. Maybe there is a better way on handling this using the cancellation tokens in the target context, but i was not able to figure that out)
 
 Target.create "ReleaseConfirmation" (fun _ -> match promptYesNo releaseMsg with | true -> () |_ -> failwith "Release canceled")
+Target.create "ReleaseDocsConfirmation" (fun _ -> match promptYesNo releaseDocsMsg with | true -> () |_ -> failwith "Release canceled")
 
 // --------------------------------------------------------------------------------------
 // Run all targets by default. Invoke 'build ' to override
@@ -581,6 +585,9 @@ Target.create "Linux" ignore
 "GenerateDocs"
   ==> "ReleaseDocs"
 
+"ReleaseDocsConfirmation"
+  ==> "ReleaseDocs"
+
 "All"
   ==> "ReleaseLocal"
 

From a659496179cd754fbea2fe9ef4030544a35eb68b Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Thu, 30 May 2019 15:58:22 +0200
Subject: [PATCH 72/74] Add IntaRNA biocontainer API

---
 .paket/Paket.Restore.targets                  |   2 +-
 .../BioFSharp.BioTools.fsproj                 |   1 +
 src/BioFSharp.BioTools/IntaRNA.fs             | 306 ++++++++++++++++++
 3 files changed, 308 insertions(+), 1 deletion(-)
 create mode 100644 src/BioFSharp.BioTools/IntaRNA.fs

diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index 818b4eca..0df24f94 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -252,7 +252,7 @@
     
 
     
-      <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion).nuspec"/>
+      <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.nuspec"/>
     
 
     
diff --git a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
index 70891fdc..6fa10fb9 100644
--- a/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
+++ b/src/BioFSharp.BioTools/BioFSharp.BioTools.fsproj
@@ -24,6 +24,7 @@
     
     
     
+    
     
     
     
diff --git a/src/BioFSharp.BioTools/IntaRNA.fs b/src/BioFSharp.BioTools/IntaRNA.fs
new file mode 100644
index 00000000..1dfd7fa3
--- /dev/null
+++ b/src/BioFSharp.BioTools/IntaRNA.fs
@@ -0,0 +1,306 @@
+namespace BioFSharp.BioTools
+
+module IntaRNA =
+    
+    //TO-DO: add full argument support. Currently only basic arguments are wrapped.
+
+    open BioContainer
+    
+    
+        ///  -q [ --query ] arg           
+        ///
+        ///either an RNA sequence or the stream/file name from where to read the query sequences (shouldbe the shorter sequences to increaseefficiency); 
+        ///sequences have to use IUPACnucleotide encoding
+        type QueryInputOptions =
+            ///RNA sequence string
+            |RNASequence of string
+            ///stream/file name from where to read the query sequences
+            |File of string
+
+            static member make = function
+                |RNASequence s  -> ["-q"; s]
+                |File f         -> ["-q"; f]
+
+            static member makeWith (m:MountInfo) = 
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                |RNASequence s  -> ["-q"; s]        
+                |File f         -> ["-q"; cPath f]  
+
+        ///  --qAcc arg (=C)              
+        ///
+        /// accessibility computation :
+        ///    'N' no accessibility contributions
+        ///    'C' computation of accessibilities
+        ///    'P' unpaired probabilities in RNAplfold format
+        ///   from --qAccFile
+        ///    'E' ED values in RNAplfold Pu-like format from
+        ///   --qAccFile
+        type QueryAcessibilityComputationTypeOptions =
+            ///'N' no accessibility contributions
+            |NoContributions
+            ///'C' computation of accessibilities
+            |Compute
+            ///'P' unpaired probabilities in RNAplfold format
+            |UnpairedFromFile
+            ///'E' ED values in RNAplfold Pu-like format from
+            |EDValuesFromFile
+
+            static member make = function
+                |NoContributions    -> ["--qAcc=N"]
+                |Compute            -> ["--qAcc=C"]
+                |UnpairedFromFile   -> ["--qAcc=P"]
+                |EDValuesFromFile   -> ["--qAcc=E"]
+
+
+        type QueryAcessibilityComputationOptions =
+
+            |QueryAcessibilityComputationType of QueryAcessibilityComputationTypeOptions
+
+            ///  --qAccW arg (=150)           accessibility computation : sliding window size
+            ///                               for query accessibility computation (arg in
+            ///                               range [0,99999]; 0 will use to the full sequence
+            ///                               length). Note, this also restricts the maximal
+            ///                               interaction length (see --qIntLenMax).
+
+            |SlidingWindowSize of int
+            ///  --qAccL arg (=100)           accessibility computation : maximal loop length
+            ///                               (base pair span) for query accessibility
+            ///                               computation (arg in range [0,99999]; 0 will use
+            ///                               to sliding window size 'qAccW')
+
+            |MaximalLoopLength of int
+
+            static member make = function
+                |QueryAcessibilityComputationType t ->  QueryAcessibilityComputationTypeOptions.make t
+                |SlidingWindowSize i                ->  [sprintf "--qAccW=%i" i]
+                |MaximalLoopLength i                ->  [sprintf "--qAccL=%i" i]
+    
+
+
+        type QueryOptions = 
+            |QueryInput of QueryInputOptions
+            |QueryAcessibilityComputation of QueryAcessibilityComputationOptions list
+
+            static member make = function
+                |QueryInput qi                      -> QueryInputOptions.make qi
+                |QueryAcessibilityComputation cList -> cList |> List.map QueryAcessibilityComputationOptions.make |> List.concat
+
+            static member makeWith (m:MountInfo) = 
+                let cPath p = (MountInfo.containerPathOf m p)
+                function        
+                |QueryInput qi                      -> (QueryInputOptions.makeWith m) qi
+                |QueryAcessibilityComputation cList -> cList |> List.map QueryAcessibilityComputationOptions.make |> List.concat
+
+
+
+        //Target:
+        //  -t [ --target ] arg          either an RNA sequence or the stream/file name
+        //                               from where to read the target sequences (should
+        //                               be the longer sequences to increase efficiency);
+        //                               use 'STDIN' to read from standard input stream;
+        //                               sequences have to use IUPAC nucleotide encoding
+
+        type TargetInputOptions =
+            |RNASequence of string
+            |File of string
+
+            static member make = function
+                |RNASequence s  -> ["-t"; s] 
+                |File f         -> ["-t"; f] 
+
+            static member makeWith (m:MountInfo) = 
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                |RNASequence s  -> ["-t"; s]        
+                |File f         -> ["-t"; cPath f]  
+
+        //  --tAcc arg (=C)              accessibility computation :
+        //                                'N' no accessibility contributions
+        //                                'C' computation of accessibilities
+        //                                'P' unpaired probabilities in RNAplfold format
+        //                               from --tAccFile
+        //                                'E' ED values in RNAplfold Pu-like format from
+        //                               --tAccFile
+
+        type TargetAcessibilityComputationTypeOptions =
+            |NoContributions
+            |Compute
+            |UnpairedFromFile
+            |EDValuesFromFile
+
+            static member make = function
+                |NoContributions    -> ["--tAcc=N"]
+                |Compute            -> ["--tAcc=C"]
+                |UnpairedFromFile   -> ["--tAcc=P"]
+                |EDValuesFromFile   -> ["--tAcc=E"]
+
+        type TargetAcessibilityComputationOptions =
+            |TargetAcessibilityComputationType of TargetAcessibilityComputationTypeOptions
+
+            //  --tAccW arg (=150)           accessibility computation : sliding window size
+            //                               for query accessibility computation (arg in
+            //                               range [0,99999]; 0 will use the full sequence
+            //                               length) Note, this also restricts the maximal
+            //                               interaction length (see --tIntLenMax).
+            |SlidingWindowSize of int
+
+            //  --tAccL arg (=100)           accessibility computation : maximal loop size
+            //                               (base pair span) for query accessibility
+            //                               computation (arg in range [0,99999]; 0 will use
+            //                               the sliding window size 'tAccW')
+            |MaximalLoopLength of int
+
+            static member make = function
+                |TargetAcessibilityComputationType t ->  TargetAcessibilityComputationTypeOptions.make t
+                |SlidingWindowSize i                ->  [sprintf "--tAccW=%i" i]
+                |MaximalLoopLength i                ->  [sprintf "--tAccL=%i" i]
+
+
+
+        type TargetOptions = 
+            |TargetInput of TargetInputOptions
+            |TargetAcessibilityComputation of TargetAcessibilityComputationOptions list
+
+            static member make = function
+                |TargetInput ti                      -> TargetInputOptions.make ti
+                |TargetAcessibilityComputation cList -> cList |> List.map TargetAcessibilityComputationOptions.make |> List.concat
+
+            static member makeWith (m:MountInfo) = 
+                let cPath p = (MountInfo.containerPathOf m p)
+                function        
+                |TargetInput ti                      -> (TargetInputOptions.makeWith m) ti
+                |TargetAcessibilityComputation cList -> cList |> List.map TargetAcessibilityComputationOptions.make |> List.concat 
+
+
+        //Helix (only if --model=H):
+        type HelixOptions =
+            |Default
+            ///  --helixMinBP arg (=2)        minimal number of base pairs inside a helix (arg
+            ///                               in range [2,4])
+            |MinBP              of int
+            ///  --helixMaxBP arg (=10)       maximal number of base pairs inside a helix (arg
+            ///                               in range [2,20])
+            |MaxBP              of int
+            ///  --helixMaxIL arg (=0)        maximal size for each internal loop size in a
+            ///                               helix (arg in range [0,2]).
+            |MaxInternalLoop    of float
+            ///  --helixMaxED arg (=999)      maximal ED-value allowed (per sequence) during
+            ///                               helix computation (arg in range [-999,999]).
+            |MaxEDValue         of float
+            ///  --helixMaxE arg (=0)         maximal energy considered during helix
+            ///                               computation (arg in range [-999,999]).
+            |MaxEnergy          of float
+            ///  --helixWithED                if present, ED-values will be used within the
+            ///                               energy evaluation of a helix
+            |WithED             
+
+            static member make = function
+                |Default            ->[""]
+                |MinBP            i ->[sprintf "--helixMinBP=%i" i]
+                |MaxBP            i ->[sprintf "--helixMaxBP=%i" i]
+                |MaxInternalLoop  f ->[sprintf "--helixMaxIL=%f" f]
+                |MaxEDValue       f ->[sprintf "--helixMaxED=%f" f]
+                |MaxEnergy        f ->[sprintf "--helixMaxE=%f"  f]
+                |WithED             ->["--helixWithED"]
+
+        ///Interaction:
+        ///  -m [ --mode ] arg (=H)       prediction mode
+
+
+        type PredictionModeOptions =
+            ///'H' = heuristic (fast and low memory),
+            |Heuristic of HelixOptions list
+            ///'M' = exact and low memory
+            |ExactLowMemory
+            ///'E' = exact (high memory)
+            |Exact
+
+            static member make = function
+                |Heuristic hList->  ("--mode=H":: (hList |> List.map HelixOptions.make |> List.concat))
+                |ExactLowMemory ->  ["--mode=M"]
+                |Exact          ->  ["--mode=E"]
+
+
+
+        type SeedOptions = 
+            ///  --noSeed                     if present, no seed is enforced within the
+            ///                               predicted interactions
+            |NoSeed
+            ///  --seedTQ arg                 comma separated list of explicit seed base pair
+            ///                               encoding(s) in the format startTbpsT&startQbpsQ,
+            ///                               e.g. '3|||.|&7||.||', where startT/Q are the
+            ///                               indices of the 5' seed ends in target/query
+            ///                               sequence and 'bps' the dot-bar base pair
+            ///                               encodings. This disables all other seed
+            ///                               constraints and seed identification.
+            |SeedList of string
+            ///  --seedBP arg (=7)            number of inter-molecular base pairs within the
+            ///                               seed region (arg in range [2,20])
+            |BPAmount of int
+            ///  --seedMaxUP arg (=0)         maximal overall number (query+target) of
+            ///                               unpaired bases within the seed region (arg in
+            ///                               range [0,20])
+            |MaxUnpairedBases of int
+    
+            static member make = function
+                |NoSeed             -> ["--noSeed"]
+                |SeedList sL        -> [sprintf "--seedTQ=%s" sL    ]
+                |BPAmount i         -> [sprintf "--seedBP=%i" i     ]
+                |MaxUnpairedBases i -> [sprintf "--seedMaxUP=%i" i  ]
+
+        /// --outMode arg (=N)   
+        type OutputModeOptions = 
+            ///'N' normal output (ASCII char + energy),
+            |Normal
+            ///'D' detailed output (ASCII char + energy/position details),
+            |Detailed
+            ///'C' CSV output (see --outCsvCols),
+            |CSV
+
+            static member make = function
+                |Normal     -> ["--outMode=N"]
+                |Detailed   -> ["--outMode=D"]
+                |CSV        -> ["--outMode=C"]
+
+
+        ///Top level type for modelling basic command line arguments for IntaRNA
+        type IntaRNAParams =
+            | Query of QueryOptions list
+            | Target of TargetOptions list
+            | PredictionMode of PredictionModeOptions list
+            | Seed of SeedOptions list
+            | OutputMode of OutputModeOptions
+
+            static member makeCmd = function
+                | Query             qList -> qList |> List.map QueryOptions.make            |> List.concat 
+                | Target            tList -> tList |> List.map TargetOptions.make           |> List.concat 
+                | PredictionMode    pList -> pList |> List.map PredictionModeOptions.make   |> List.concat 
+                | Seed              sList -> sList |> List.map SeedOptions.make             |> List.concat 
+                | OutputMode        o     -> OutputModeOptions.make o
+
+            static member makeCmdWith (m:MountInfo) = 
+                let cPath p = (MountInfo.containerPathOf m p)
+                function
+                | Query             qList -> qList |> List.map (QueryOptions.makeWith m)    |> List.concat 
+                | Target            tList -> tList |> List.map (TargetOptions.makeWith m)   |> List.concat 
+                | PredictionMode    pList -> pList |> List.map PredictionModeOptions.make   |> List.concat 
+                | Seed              sList -> sList |> List.map SeedOptions.make             |> List.concat 
+                | OutputMode        o     -> OutputModeOptions.make o
+
+        ///
+        let runIntaRNAAsync (bcContext:BioContainer.BcContext) (opt:IntaRNAParams list) = 
+            let cmds = opt |> List.map (IntaRNAParams.makeCmdWith bcContext.Mount)
+            let tp = "IntaRNA"::(cmds |> List.concat)
+            printfn "starting process IntaRNA\r\nparameters:"
+            cmds |> List.iter (fun op -> printfn "\t%s" (String.concat " " op))
+
+            async {
+                let! res = BioContainer.execReturnAsync bcContext tp
+                return res
+            }
+
+        ///Runs IntaRNA with the given the input parameters in a container specified by the bcContext
+        let runIntaRNA (bcContext:BioContainer.BcContext) (opt:IntaRNAParams list) = 
+            runIntaRNAAsync bcContext opt
+            |> Async.RunSynchronously
\ No newline at end of file

From 20f8973ea717208627ef5a7ea0b72cbaecb4103c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Timo=20M=C3=BChlhaus?= 
Date: Thu, 30 May 2019 16:15:22 +0200
Subject: [PATCH 73/74] Fix in BioContainerIO.tarOfStream() - Entry closed at
 '32768' ...

---
 .paket/Paket.Restore.targets             | 2 +-
 src/BioFSharp.BioTools/BioContainerIO.fs | 1 +
 2 files changed, 2 insertions(+), 1 deletion(-)

diff --git a/.paket/Paket.Restore.targets b/.paket/Paket.Restore.targets
index 818b4eca..0df24f94 100644
--- a/.paket/Paket.Restore.targets
+++ b/.paket/Paket.Restore.targets
@@ -252,7 +252,7 @@
     
 
     
-      <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.$(PackageVersion).nuspec"/>
+      <_NuspecFiles Include="$(AdjustedNuspecOutputPath)\*.nuspec"/>
     
 
     
diff --git a/src/BioFSharp.BioTools/BioContainerIO.fs b/src/BioFSharp.BioTools/BioContainerIO.fs
index 773edec1..0be7c35f 100644
--- a/src/BioFSharp.BioTools/BioContainerIO.fs
+++ b/src/BioFSharp.BioTools/BioContainerIO.fs
@@ -68,6 +68,7 @@ module BioContainerIO =
                 tarOutputStream.CloseEntry()
             else
                 tarOutputStream.Write(localBuffer, 0, numRead)
+                loop ()
     
         loop ()
         tarOutputStream.IsStreamOwner <- false

From 11e22ad5ba379059b90c254541eec951637d2f97 Mon Sep 17 00:00:00 2001
From: Kevin Schneider 
Date: Thu, 30 May 2019 16:49:02 +0200
Subject: [PATCH 74/74] Add Release notes for version 0.1.0

---
 RELEASE_NOTES.md                       | 35 ++++++++++++++++++++++++++
 docsrc/content/release-notes.md        | 35 ++++++++++++++++++++++++++
 src/BioFSharp.BioDB/AssemblyInfo.fs    |  8 +++---
 src/BioFSharp.BioTools/AssemblyInfo.fs |  8 +++---
 src/BioFSharp.IO/AssemblyInfo.fs       |  8 +++---
 src/BioFSharp.ImgP/AssemblyInfo.fs     |  8 +++---
 src/BioFSharp.ML/AssemblyInfo.fs       |  8 +++---
 src/BioFSharp.Parallel/AssemblyInfo.fs |  8 +++---
 src/BioFSharp.Stats/AssemblyInfo.fs    |  8 +++---
 src/BioFSharp.Vis/AssemblyInfo.fs      |  8 +++---
 src/BioFSharp/AssemblyInfo.fs          |  8 +++---
 11 files changed, 106 insertions(+), 36 deletions(-)

diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md
index e587d1a4..bb6fa510 100644
--- a/RELEASE_NOTES.md
+++ b/RELEASE_NOTES.md
@@ -1,3 +1,38 @@
+#### 0.1.0 - Thursday, May 30, 2019
+Several bugfixes and additions to multiple sub projects:
+
+* **BioFSharp** (core):
+    * Additional functionality:
+      * [GravyScore](https://github.com/CSBiology/BioFSharp/commit/209c3497e3cdb1db56a0675e0f2a76634a6dbe7a) (Grand Average of Hydropathy) as additional amino acid property
+
+* **BioFSharp.IO**:
+    * Additional functionality:
+      * [GAF Parser](https://github.com/CSBiology/BioFSharp/commit/cbba6a41a9b239e26467f32048aaec3335373faf) for GO Annotation file format: [Gene Association File](http://geneontology.org/docs/go-annotation-file-gaf-format-2.0/)
+      * [Uniprot style Fasta header parser](https://github.com/CSBiology/BioFSharp/commit/f2a16aaa2456b0c431f6d50d0f78a12834671e97)
+      * [FastA to GFF3 converter functions](https://github.com/CSBiology/BioFSharp/commit/2cdd3537398040e1508736bd734b22a67a7c46e7)
+      * [GFF3 Pretty Printer](https://github.com/CSBiology/BioFSharp/commit/eaaa59fbd382721e75fbb9c6558b0ba2ff6afb00) 
+
+    * BugFixes:
+      * [Fix OboParser](https://github.com/CSBiology/BioFSharp/commit/0354c9c13e7a4692f2ab61b80ef86ac8f5bd83c3) just taking the last occurence of the alt_id keyword and discards previous ones.
+      * Fix [Fasta](https://github.com/CSBiology/BioFSharp/commit/aff8eff849deb1cca411faf3c640d53f6e410497) and [GFF3](https://github.com/CSBiology/BioFSharp/commit/d0f059ab899c715a37b7f50318292c8a81f18dd9) writers appending to files instead of recreating
+
+* **BioFSharp.BioTools**:
+    * Additional functionality:
+      * [TMHMM biocontainer API wrapper](https://github.com/CSBiology/BioFSharp/commit/f11cb122df29ccaa0809d3c3c951294a1b645e0f) ([TMHMM](http://www.cbs.dtu.dk/services/TMHMM/) 2.0c predicts transmembrane helices in proteins)
+      * [FastP and Hera biocontainer API wrapper](https://github.com/CSBiology/BioFSharp/commit/28b7654d57824bcdfdb8bae16af2f0f706ed60ad)
+      * [IntaRNA biocontainer API wrapper](https://github.com/CSBiology/BioFSharp/commit/a659496179cd754fbea2fe9ef4030544a35eb68b) ([IntaRNA](https://github.com/BackofenLab/IntaRNA) is a tool for prediction of various nucleotide interactions)
+
+    * BugFixes:
+      * Fix Stream entry closed error in [BioContainer.tarOfStream()](https://github.com/CSBiology/BioFSharp/commit/20f8973ea717208627ef5a7ea0b72cbaecb4103c)
+
+* **BioFSharp.ImgP**:
+    * Additional functionality:
+      * [update 3DCWT correlation calculation to loop](https://github.com/CSBiology/BioFSharp/commit/0b4ffe93755d915da64f4231199b0ec54d4d6c4d)
+
+    * Bugfixes:
+      * [fix height adjustment in ricker](https://github.com/CSBiology/BioFSharp/commit/abab82be1ac9fa0c540acfb5f3ccc6bd5143df1f)
+      * [fix Ricker values for discrete time points](https://github.com/CSBiology/BioFSharp/commit/2bb6bb2b67ea43df2d9fe970bd1445e568df53d4)
+
 #### 0.0.16 - Thursday, March 7, 2019
  * Fix template files for all nuget packages: 
    * use correct paths for binaries
diff --git a/docsrc/content/release-notes.md b/docsrc/content/release-notes.md
index e587d1a4..bb6fa510 100644
--- a/docsrc/content/release-notes.md
+++ b/docsrc/content/release-notes.md
@@ -1,3 +1,38 @@
+#### 0.1.0 - Thursday, May 30, 2019
+Several bugfixes and additions to multiple sub projects:
+
+* **BioFSharp** (core):
+    * Additional functionality:
+      * [GravyScore](https://github.com/CSBiology/BioFSharp/commit/209c3497e3cdb1db56a0675e0f2a76634a6dbe7a) (Grand Average of Hydropathy) as additional amino acid property
+
+* **BioFSharp.IO**:
+    * Additional functionality:
+      * [GAF Parser](https://github.com/CSBiology/BioFSharp/commit/cbba6a41a9b239e26467f32048aaec3335373faf) for GO Annotation file format: [Gene Association File](http://geneontology.org/docs/go-annotation-file-gaf-format-2.0/)
+      * [Uniprot style Fasta header parser](https://github.com/CSBiology/BioFSharp/commit/f2a16aaa2456b0c431f6d50d0f78a12834671e97)
+      * [FastA to GFF3 converter functions](https://github.com/CSBiology/BioFSharp/commit/2cdd3537398040e1508736bd734b22a67a7c46e7)
+      * [GFF3 Pretty Printer](https://github.com/CSBiology/BioFSharp/commit/eaaa59fbd382721e75fbb9c6558b0ba2ff6afb00) 
+
+    * BugFixes:
+      * [Fix OboParser](https://github.com/CSBiology/BioFSharp/commit/0354c9c13e7a4692f2ab61b80ef86ac8f5bd83c3) just taking the last occurence of the alt_id keyword and discards previous ones.
+      * Fix [Fasta](https://github.com/CSBiology/BioFSharp/commit/aff8eff849deb1cca411faf3c640d53f6e410497) and [GFF3](https://github.com/CSBiology/BioFSharp/commit/d0f059ab899c715a37b7f50318292c8a81f18dd9) writers appending to files instead of recreating
+
+* **BioFSharp.BioTools**:
+    * Additional functionality:
+      * [TMHMM biocontainer API wrapper](https://github.com/CSBiology/BioFSharp/commit/f11cb122df29ccaa0809d3c3c951294a1b645e0f) ([TMHMM](http://www.cbs.dtu.dk/services/TMHMM/) 2.0c predicts transmembrane helices in proteins)
+      * [FastP and Hera biocontainer API wrapper](https://github.com/CSBiology/BioFSharp/commit/28b7654d57824bcdfdb8bae16af2f0f706ed60ad)
+      * [IntaRNA biocontainer API wrapper](https://github.com/CSBiology/BioFSharp/commit/a659496179cd754fbea2fe9ef4030544a35eb68b) ([IntaRNA](https://github.com/BackofenLab/IntaRNA) is a tool for prediction of various nucleotide interactions)
+
+    * BugFixes:
+      * Fix Stream entry closed error in [BioContainer.tarOfStream()](https://github.com/CSBiology/BioFSharp/commit/20f8973ea717208627ef5a7ea0b72cbaecb4103c)
+
+* **BioFSharp.ImgP**:
+    * Additional functionality:
+      * [update 3DCWT correlation calculation to loop](https://github.com/CSBiology/BioFSharp/commit/0b4ffe93755d915da64f4231199b0ec54d4d6c4d)
+
+    * Bugfixes:
+      * [fix height adjustment in ricker](https://github.com/CSBiology/BioFSharp/commit/abab82be1ac9fa0c540acfb5f3ccc6bd5143df1f)
+      * [fix Ricker values for discrete time points](https://github.com/CSBiology/BioFSharp/commit/2bb6bb2b67ea43df2d9fe970bd1445e568df53d4)
+
 #### 0.0.16 - Thursday, March 7, 2019
  * Fix template files for all nuget packages: 
    * use correct paths for binaries
diff --git a/src/BioFSharp.BioDB/AssemblyInfo.fs b/src/BioFSharp.BioDB/AssemblyInfo.fs
index ea04faf1..0357f92e 100644
--- a/src/BioFSharp.BioDB/AssemblyInfo.fs
+++ b/src/BioFSharp.BioDB/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.BioDB"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.BioTools/AssemblyInfo.fs b/src/BioFSharp.BioTools/AssemblyInfo.fs
index 311ed633..851e6769 100644
--- a/src/BioFSharp.BioTools/AssemblyInfo.fs
+++ b/src/BioFSharp.BioTools/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.BioTools"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.IO/AssemblyInfo.fs b/src/BioFSharp.IO/AssemblyInfo.fs
index 7b7630e9..4b40b2cc 100644
--- a/src/BioFSharp.IO/AssemblyInfo.fs
+++ b/src/BioFSharp.IO/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.IO"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.ImgP/AssemblyInfo.fs b/src/BioFSharp.ImgP/AssemblyInfo.fs
index 9947b313..d5ac9ce5 100644
--- a/src/BioFSharp.ImgP/AssemblyInfo.fs
+++ b/src/BioFSharp.ImgP/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.ImgP"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.ML/AssemblyInfo.fs b/src/BioFSharp.ML/AssemblyInfo.fs
index db231778..cd98b6ee 100644
--- a/src/BioFSharp.ML/AssemblyInfo.fs
+++ b/src/BioFSharp.ML/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.ML"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Parallel/AssemblyInfo.fs b/src/BioFSharp.Parallel/AssemblyInfo.fs
index b80d364c..1e01fd93 100644
--- a/src/BioFSharp.Parallel/AssemblyInfo.fs
+++ b/src/BioFSharp.Parallel/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Parallel"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Stats/AssemblyInfo.fs b/src/BioFSharp.Stats/AssemblyInfo.fs
index a60c08c0..5b99211f 100644
--- a/src/BioFSharp.Stats/AssemblyInfo.fs
+++ b/src/BioFSharp.Stats/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Stats"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp.Vis/AssemblyInfo.fs b/src/BioFSharp.Vis/AssemblyInfo.fs
index 88f4109c..f91abe52 100644
--- a/src/BioFSharp.Vis/AssemblyInfo.fs
+++ b/src/BioFSharp.Vis/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp.Vis"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"
diff --git a/src/BioFSharp/AssemblyInfo.fs b/src/BioFSharp/AssemblyInfo.fs
index 277ae624..0b57be74 100644
--- a/src/BioFSharp/AssemblyInfo.fs
+++ b/src/BioFSharp/AssemblyInfo.fs
@@ -5,8 +5,8 @@ open System.Reflection
 []
 []
 [")>]
-[]
-[]
+[]
+[]
 []
 do ()
 
@@ -14,6 +14,6 @@ module internal AssemblyVersionInformation =
     let [] AssemblyTitle = "BioFSharp"
     let [] AssemblyProduct = "BioFSharp"
     let [] AssemblyDescription = "An open source bioinformatics toolbox written in F#. "
-    let [] AssemblyVersion = "0.0.16"
-    let [] AssemblyFileVersion = "0.0.16"
+    let [] AssemblyVersion = "0.1.0"
+    let [] AssemblyFileVersion = "0.1.0"
     let [] AssemblyConfiguration = "Release"