@ -1,536 +0,0 @@ |
|||
// __ __ _ _ _ _ ______ _______ |
|||
// | \/ | | | | | | \ | | ____|__ __| |
|||
// | \ / | __ _| |_| |__ | \| | |__ | | |
|||
// | |\/| |/ _` | __| '_ \ | . ` | __| | | |
|||
// | | | | (_| | |_| | | |_| |\ | |____ | | |
|||
// |_| |_|\__,_|\__|_| |_(_)_| \_|______| |_| |
|||
// |
|||
// Math.NET Numerics - https://numerics.mathdotnet.com |
|||
// Copyright (c) Math.NET - Open Source MIT/X11 License |
|||
// |
|||
// Build Framework using FAKE (http://fsharp.github.io/FAKE) |
|||
// |
|||
|
|||
module BuildFramework |
|||
|
|||
#I "../packages/build/FAKE/tools" |
|||
#r "../packages/build/FAKE/tools/FakeLib.dll" |
|||
|
|||
open FSharp.Core |
|||
open Fake |
|||
open Fake.ReleaseNotesHelper |
|||
open System |
|||
open System.IO |
|||
|
|||
let rootDir = Path.GetFullPath (Path.Combine (__SOURCE_DIRECTORY__ + "/../")) |
|||
Environment.CurrentDirectory <- rootDir |
|||
trace rootDir |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// .Net SDK |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
|
|||
let dotnet workingDir command = |
|||
let properties = |
|||
[ |
|||
] |
|||
let suffix = properties |> List.map (fun (name, value) -> sprintf """ /p:%s="%s" /nr:false """ name value) |> String.concat "" |
|||
DotNetCli.RunCommand |
|||
(fun c -> { c with WorkingDir = workingDir}) |
|||
(command + suffix) |
|||
|
|||
let dotnetWeak workingDir command = |
|||
let properties = |
|||
[ |
|||
yield "StrongName", "False" |
|||
] |
|||
let suffix = properties |> List.map (fun (name, value) -> sprintf """ /p:%s="%s" /nr:false """ name value) |> String.concat "" |
|||
DotNetCli.RunCommand |
|||
(fun c -> { c with WorkingDir = workingDir }) |
|||
(command + suffix) |
|||
|
|||
let dotnetStrong workingDir command = |
|||
let properties = |
|||
[ |
|||
yield "StrongName", "True" |
|||
] |
|||
let suffix = properties |> List.map (fun (name, value) -> sprintf """ /p:%s="%s" /nr:false """ name value) |> String.concat "" |
|||
DotNetCli.RunCommand |
|||
(fun c -> { c with WorkingDir = workingDir}) |
|||
(command + suffix) |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// Header |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let header = ReadFile(__SOURCE_DIRECTORY__ </> __SOURCE_FILE__) |> Seq.take 10 |> Seq.map (fun s -> s.Substring(2)) |> toLines |
|||
|
|||
type Release = |
|||
{ RepoKey: string |
|||
Title: string |
|||
AssemblyVersion: string |
|||
PackageVersion: string |
|||
ReleaseNotes: string |
|||
ReleaseNotesFile: string } |
|||
|
|||
type ZipPackage = |
|||
{ Id: string |
|||
Release: Release |
|||
Title: string } |
|||
|
|||
type NuGetPackage = |
|||
{ Id: string |
|||
Release: Release } |
|||
|
|||
type VisualStudioProject = |
|||
{ AssemblyName: string |
|||
ProjectFile: string |
|||
OutputDir: string |
|||
Release: Release |
|||
NuGetPackages: NuGetPackage list } |
|||
|
|||
type NativeVisualStudioProject = |
|||
{ BinaryName: string |
|||
ProjectFile: string |
|||
OutputDir: string |
|||
Release: Release |
|||
NuGetPackages: NuGetPackage list } |
|||
|
|||
type NativeBashScriptProject = |
|||
{ BinaryName: string |
|||
BashScriptFile: string |
|||
OutputDir: string |
|||
Release: Release |
|||
NuGetPackages: NuGetPackage list } |
|||
|
|||
type Project = |
|||
| VisualStudio of VisualStudioProject |
|||
| NativeVisualStudio of NativeVisualStudioProject |
|||
| NativeBashScript of NativeBashScriptProject |
|||
|
|||
type Solution = |
|||
{ Key: string |
|||
SolutionFile: string |
|||
Projects: Project list |
|||
Release: Release |
|||
ZipPackages: ZipPackage list |
|||
OutputDir: string |
|||
OutputLibDir: string |
|||
OutputLibStrongNameDir: string |
|||
OutputZipDir: string |
|||
OutputNuGetDir: string } |
|||
|
|||
type NuGetSpecification = |
|||
{ NuGet: NuGetPackage |
|||
NuSpecFile: string |
|||
Title: string } |
|||
|
|||
|
|||
let release repoKey title releaseNotesFile : Release = |
|||
let info = LoadReleaseNotes releaseNotesFile |
|||
let buildPart = "0" |
|||
let assemblyVersion = info.AssemblyVersion + "." + buildPart |
|||
let packageVersion = info.NugetVersion |
|||
let notes = info.Notes |> List.map (fun l -> l.Replace("*","").Replace("`","")) |> toLines |
|||
{ Release.RepoKey = repoKey |
|||
Title = title |
|||
AssemblyVersion = assemblyVersion |
|||
PackageVersion = packageVersion |
|||
ReleaseNotes = notes |
|||
ReleaseNotesFile = releaseNotesFile } |
|||
|
|||
let zipPackage packageId title release = |
|||
{ ZipPackage.Id = packageId |
|||
Title = title |
|||
Release = release } |
|||
|
|||
let nugetPackage packageId release = |
|||
{ NuGetPackage.Id = packageId |
|||
Release = release } |
|||
|
|||
let project assemblyName projectFile nuGetPackages = |
|||
{ VisualStudioProject.AssemblyName = assemblyName |
|||
ProjectFile = projectFile |
|||
OutputDir = (Path.GetDirectoryName projectFile) </> "bin" </> "Release" |
|||
NuGetPackages = nuGetPackages |
|||
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne } |
|||
|> Project.VisualStudio |
|||
|
|||
let nativeProject binaryName projectFile nuGetPackages = |
|||
{ NativeVisualStudioProject.BinaryName = binaryName |
|||
ProjectFile = projectFile |
|||
OutputDir = (Path.GetDirectoryName projectFile) </> "bin" </> "Release" |
|||
NuGetPackages = nuGetPackages |
|||
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne } |
|||
|> Project.NativeVisualStudio |
|||
|
|||
let nativeBashScriptProject binaryName bashScriptFile nuGetPackages = |
|||
{ NativeBashScriptProject.BinaryName = binaryName |
|||
BashScriptFile = bashScriptFile |
|||
OutputDir = (Path.GetDirectoryName bashScriptFile) </> "bin" </> "Release" |
|||
NuGetPackages = nuGetPackages |
|||
Release = nuGetPackages |> List.map (fun p -> p.Release) |> List.distinct |> List.exactlyOne } |
|||
|> Project.NativeBashScript |
|||
|
|||
|
|||
let projectOutputDir = function |
|||
| VisualStudio p -> p.OutputDir |
|||
| NativeVisualStudio p -> p.OutputDir |
|||
| NativeBashScript p -> p.OutputDir |
|||
|
|||
let projectRelease = function |
|||
| VisualStudio p -> p.Release |
|||
| NativeVisualStudio p -> p.Release |
|||
| NativeBashScript p -> p.Release |
|||
|
|||
let projectNuGetPackages = function |
|||
| VisualStudio p -> p.NuGetPackages |
|||
| NativeVisualStudio p -> p.NuGetPackages |
|||
| NativeBashScript p -> p.NuGetPackages |
|||
|
|||
let solution key solutionFile projects zipPackages = |
|||
{ Solution.Key = key |
|||
SolutionFile = solutionFile |
|||
Projects = projects |
|||
ZipPackages = zipPackages |
|||
Release = List.concat [ projects |> List.map projectRelease; zipPackages |> List.map (fun p -> p.Release) ] |> List.distinct |> List.exactlyOne |
|||
OutputDir = "out" </> key |
|||
OutputLibDir = "out" </> key </> "Lib" |
|||
OutputLibStrongNameDir = "out" </> key </> "Lib-StrongName" |
|||
OutputZipDir = "out" </> key </> "Zip" |
|||
OutputNuGetDir = "out" </> key </> "NuGet" } |
|||
|
|||
let traceHeader (releases:Release list) = |
|||
trace header |
|||
let titleLength = releases |> List.map (fun r -> r.Title.Length) |> List.max |
|||
for release in releases do |
|||
trace ([ " "; release.Title.PadRight titleLength; " v"; release.PackageVersion ] |> String.concat "") |
|||
trace "" |
|||
dotnet rootDir "--info" |
|||
trace "" |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// PREPARE |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let patchVersionInAssemblyInfo path (release:Release) = |
|||
BulkReplaceAssemblyInfoVersions path (fun f -> |
|||
{ f with |
|||
AssemblyVersion = release.AssemblyVersion |
|||
AssemblyFileVersion = release.AssemblyVersion |
|||
AssemblyInformationalVersion = release.PackageVersion }) |
|||
|
|||
let private regexes_sl = new System.Collections.Generic.Dictionary<string, System.Text.RegularExpressions.Regex>() |
|||
let private getRegexSingleLine pattern = |
|||
match regexes_sl.TryGetValue pattern with |
|||
| true, regex -> regex |
|||
| _ -> (new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.Singleline)) |
|||
let regex_replace_singleline pattern (replacement : string) text = (getRegexSingleLine pattern).Replace(text, replacement) |
|||
|
|||
let patchVersionInResource path (release:Release) = |
|||
ReplaceInFile |
|||
(regex_replace @"\d+\.\d+\.\d+\.\d+" release.AssemblyVersion |
|||
>> regex_replace @"\d+,\d+,\d+,\d+" (replace "." "," release.AssemblyVersion)) |
|||
path |
|||
|
|||
let patchVersionInProjectFile (project:Project) = |
|||
match project with |
|||
| VisualStudio p -> |
|||
let semverSplit = p.Release.PackageVersion.IndexOf('-') |
|||
let prefix = if semverSplit <= 0 then p.Release.PackageVersion else p.Release.PackageVersion.Substring(0, semverSplit) |
|||
let suffix = if semverSplit <= 0 then "" else p.Release.PackageVersion.Substring(semverSplit+1) |
|||
ReplaceInFile |
|||
(regex_replace """\<PackageVersion\>.*\</PackageVersion\>""" (sprintf """<PackageVersion>%s</PackageVersion>""" p.Release.PackageVersion) |
|||
>> regex_replace """\<Version\>.*\</Version\>""" (sprintf """<Version>%s</Version>""" p.Release.PackageVersion) |
|||
>> regex_replace """\<AssemblyVersion\>.*\</AssemblyVersion\>""" (sprintf """<AssemblyVersion>%s</AssemblyVersion>""" p.Release.AssemblyVersion) |
|||
>> regex_replace """\<FileVersion\>.*\</FileVersion\>""" (sprintf """<FileVersion>%s</FileVersion>""" p.Release.AssemblyVersion) |
|||
>> regex_replace """\<VersionPrefix\>.*\</VersionPrefix\>""" (sprintf """<VersionPrefix>%s</VersionPrefix>""" prefix) |
|||
>> regex_replace """\<VersionSuffix\>.*\</VersionSuffix\>""" (sprintf """<VersionSuffix>%s</VersionSuffix>""" suffix) |
|||
>> regex_replace_singleline """\<PackageReleaseNotes\>.*\</PackageReleaseNotes\>""" (sprintf """<PackageReleaseNotes>%s</PackageReleaseNotes>""" (p.Release.ReleaseNotes.Replace("<","<").Replace(">",">")))) |
|||
p.ProjectFile |
|||
| NativeVisualStudio _ -> () |
|||
| NativeBashScript _ -> () |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// BUILD |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let clean (solution:Solution) = dotnet rootDir (sprintf "clean %s --configuration Release --verbosity minimal" solution.SolutionFile) |
|||
|
|||
let restoreWeak (solution:Solution) = dotnetWeak rootDir (sprintf "restore %s --verbosity minimal" solution.SolutionFile) |
|||
let restoreStrong (solution:Solution) = dotnetStrong rootDir (sprintf "restore %s --verbosity minimal" solution.SolutionFile) |
|||
|
|||
let buildWeak (solution:Solution) = dotnetWeak rootDir (sprintf "build %s --configuration Release --no-incremental --no-restore --verbosity minimal" solution.SolutionFile) |
|||
let buildStrong (solution:Solution) = dotnetStrong rootDir (sprintf "build %s --configuration Release --no-incremental --no-restore --verbosity minimal" solution.SolutionFile) |
|||
|
|||
let packWeak (solution:Solution) = dotnetWeak rootDir (sprintf "pack %s --configuration Release --no-restore --verbosity minimal" solution.SolutionFile) |
|||
let packStrong (solution:Solution) = dotnetStrong rootDir (sprintf "pack %s --configuration Release --no-restore --verbosity minimal" solution.SolutionFile) |
|||
|
|||
let packProjectWeak = function |
|||
| VisualStudio p -> dotnetWeak rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" p.ProjectFile) |
|||
| _ -> failwith "Project type not supported" |
|||
let packProjectStrong = function |
|||
| VisualStudio p -> dotnetStrong rootDir (sprintf "pack %s --configuration Release --no-restore --no-build" p.ProjectFile) |
|||
| _ -> failwith "Project type not supported" |
|||
|
|||
//let buildConfig config subject = MSBuild "" (if hasBuildParam "incremental" then "Build" else "Rebuild") [ "Configuration", config ] subject |> ignore |
|||
//let build subject = buildConfig "Release" subject |
|||
//let buildSigned subject = buildConfig "Release-Signed" subject |
|||
let buildConfig32 config subject = MSBuild "" (if hasBuildParam "incremental" then "Build" else "Rebuild") [("Configuration", config); ("Platform","Win32")] subject |> ignore |
|||
let buildConfig64 config subject = MSBuild "" (if hasBuildParam "incremental" then "Build" else "Rebuild") [("Configuration", config); ("Platform","x64")] subject |> ignore |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// COLLECT |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let collectBinaries (solution:Solution) = |
|||
solution.Projects |> List.iter (function |
|||
| VisualStudio project -> CopyDir solution.OutputLibDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")) |
|||
| _ -> failwith "Project type not supported") |
|||
|
|||
let collectBinariesSN (solution:Solution) = |
|||
solution.Projects |> List.iter (function |
|||
| VisualStudio project -> CopyDir solution.OutputLibStrongNameDir project.OutputDir (fun n -> n.Contains(project.AssemblyName + ".dll") || n.Contains(project.AssemblyName + ".pdb") || n.Contains(project.AssemblyName + ".xml")) |
|||
| _ -> failwith "Project type not supported") |
|||
|
|||
let collectNuGetPackages (solution:Solution) = |
|||
solution.Projects |> List.iter (function |
|||
| VisualStudio project -> CopyDir solution.OutputNuGetDir project.OutputDir (fun n -> n.EndsWith(".nupkg")) |
|||
| _ -> failwith "Project type not supported") |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// TEST |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let test testsDir testsProj framework = |
|||
dotnet testsDir (sprintf "run -p %s --configuration Release --framework %s --no-restore --no-build" testsProj framework) |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// PACKAGES |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let provideLicense path = |
|||
ReadFileAsString "LICENSE.md" |
|||
|> ConvertTextToWindowsLineBreaks |
|||
|> ReplaceFile (path </> "license.txt") |
|||
|
|||
let provideReadme title (release:Release) path = |
|||
String.concat Environment.NewLine [header; " " + title; ""; ReadFileAsString release.ReleaseNotesFile] |
|||
|> ConvertTextToWindowsLineBreaks |
|||
|> ReplaceFile (path </> "readme.txt") |
|||
|
|||
|
|||
// SIGN |
|||
|
|||
let sign fingerprint timeserver (solution: Solution) = |
|||
let files = solution.Projects |> Seq.collect (function |
|||
| VisualStudio project -> !! (project.OutputDir + "/**/" + project.AssemblyName + ".dll") |
|||
| _ -> failwith "Project type not supported") |
|||
let fileArgs = files |> Seq.map (sprintf "\"%s\"") |> String.concat " " |
|||
let optionsArgs = sprintf """/v /fd sha256 /sha1 "%s" /tr "%s" /td sha256""" fingerprint timeserver |
|||
let arguments = sprintf """sign %s %s""" optionsArgs fileArgs |
|||
let result = |
|||
ExecProcess (fun info -> |
|||
info.FileName <- findToolInSubPath "signtool.exe" """C:\Program Files (x86)\Windows Kits\10\bin\x64""" |
|||
info.Arguments <- arguments) TimeSpan.MaxValue |
|||
if result <> 0 then |
|||
failwithf "Error during SignTool call " |
|||
|
|||
let signNuGet fingerprint timeserver (solutions: Solution list) = |
|||
CleanDir "obj/NuGet" |
|||
solutions |
|||
|> Seq.collect (fun solution -> !! (solution.OutputNuGetDir </> "*.nupkg")) |
|||
|> Seq.distinct |
|||
|> Seq.iter (fun file -> |
|||
let args = sprintf """sign "%s" -HashAlgorithm SHA256 -TimestampHashAlgorithm SHA256 -CertificateFingerprint "%s" -Timestamper "%s""" (FullName file) fingerprint timeserver |
|||
let result = |
|||
ExecProcess (fun info -> |
|||
info.FileName <- "packages/build/NuGet.CommandLine/tools/NuGet.exe" |
|||
info.WorkingDirectory <- FullName "obj/NuGet" |
|||
info.Arguments <- args) (TimeSpan.FromMinutes 10.) |
|||
if result <> 0 then failwith "Error during NuGet sign.") |
|||
DeleteDir "obj/NuGet" |
|||
|
|||
|
|||
// ZIP |
|||
|
|||
let zip (package:ZipPackage) zipDir filesDir filesFilter = |
|||
CleanDir "obj/Zip" |
|||
let workPath = "obj/Zip/" + package.Id |
|||
CopyDir workPath filesDir filesFilter |
|||
provideLicense workPath |
|||
provideReadme (sprintf "%s v%s" package.Title package.Release.PackageVersion) package.Release workPath |
|||
Zip "obj/Zip/" (zipDir </> sprintf "%s-%s.zip" package.Id package.Release.PackageVersion) !! (workPath + "/**/*.*") |
|||
DeleteDir "obj/Zip" |
|||
|
|||
|
|||
// NUGET |
|||
|
|||
let updateNuspec (nuget:NuGetPackage) outPath spec = |
|||
{ spec with ToolPath = "packages/build/NuGet.CommandLine/tools/NuGet.exe" |
|||
OutputPath = outPath |
|||
WorkingDir = "obj/NuGet" |
|||
Version = nuget.Release.PackageVersion |
|||
ReleaseNotes = nuget.Release.ReleaseNotes |
|||
Publish = false } |
|||
|
|||
let nugetPackManually (solution:Solution) (packages:NuGetSpecification list) = |
|||
CleanDir "obj/NuGet" |
|||
for pack in packages do |
|||
provideLicense "obj/NuGet" |
|||
provideReadme (sprintf "%s v%s" pack.Title pack.NuGet.Release.PackageVersion) pack.NuGet.Release "obj/NuGet" |
|||
NuGet (updateNuspec pack.NuGet solution.OutputNuGetDir) pack.NuSpecFile |
|||
CleanDir "obj/NuGet" |
|||
DeleteDir "obj/NuGet" |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// Documentation |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let provideDocExtraFiles extraDocs (releases:Release list) = |
|||
for (fileName, docName) in extraDocs do CopyFile ("docs/content" </> docName) fileName |
|||
let menu = releases |> List.map (fun r -> sprintf "[%s](%s)" r.Title (r.ReleaseNotesFile |> replace "RELEASENOTES" "ReleaseNotes" |> replace ".md" ".html")) |> String.concat " | " |
|||
for release in releases do |
|||
String.concat Environment.NewLine |
|||
[ "# " + release.Title + " Release Notes" |
|||
menu |
|||
"" |
|||
ReadFileAsString release.ReleaseNotesFile ] |
|||
|> ReplaceFile ("docs/content" </> (release.ReleaseNotesFile |> replace "RELEASENOTES" "ReleaseNotes")) |
|||
|
|||
let buildDocumentationTarget fsiargs target = |
|||
trace (sprintf "Building documentation (%s), this could take some time, please wait..." target) |
|||
let fakePath = "packages" </> "build" </> "FAKE" </> "tools" </> "FAKE.exe" |
|||
let fakeStartInfo script workingDirectory args fsiargs environmentVars = |
|||
(fun (info: System.Diagnostics.ProcessStartInfo) -> |
|||
info.FileName <- System.IO.Path.GetFullPath fakePath |
|||
info.Arguments <- sprintf "%s --fsiargs -d:FAKE %s \"%s\"" args fsiargs script |
|||
info.WorkingDirectory <- workingDirectory |
|||
let setVar k v = |
|||
info.EnvironmentVariables.[k] <- v |
|||
for (k, v) in environmentVars do |
|||
setVar k v |
|||
setVar "MSBuild" msBuildExe |
|||
setVar "GIT" Git.CommandHelper.gitPath |
|||
setVar "FSI" fsiPath) |
|||
let executeFAKEWithOutput workingDirectory script fsiargs envArgs = |
|||
let exitCode = |
|||
ExecProcessWithLambdas |
|||
(fakeStartInfo script workingDirectory "" fsiargs envArgs) |
|||
TimeSpan.MaxValue false ignore ignore |
|||
System.Threading.Thread.Sleep 1000 |
|||
exitCode |
|||
let exit = executeFAKEWithOutput "docs/tools" "build-docs.fsx" fsiargs ["target", target] |
|||
if exit <> 0 then |
|||
failwith "Generating documentation failed" |
|||
() |
|||
|
|||
let generateDocs fail local = |
|||
let args = if local then "" else "--define:RELEASE" |
|||
try |
|||
buildDocumentationTarget args "Default" |
|||
traceImportant "Documentation generated" |
|||
with |
|||
| e when not fail -> |
|||
failwith "Generating documentation failed" |
|||
|
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// Publishing |
|||
// Requires permissions; intended only for maintainers |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
let publishReleaseTag title prefix (release:Release) = |
|||
// inspired by Deedle/tpetricek |
|||
let tagName = prefix + "v" + release.PackageVersion |
|||
let tagMessage = String.concat Environment.NewLine [title + " v" + release.PackageVersion; ""; release.ReleaseNotes ] |
|||
let cmd = sprintf """tag -a %s -m "%s" """ tagName tagMessage |
|||
Git.CommandHelper.runSimpleGitCommand "." cmd |> printfn "%s" |
|||
let _, remotes, _ = Git.CommandHelper.runGitCommand "." "remote -v" |
|||
let main = remotes |> Seq.find (fun s -> s.Contains("(push)") && s.Contains("mathnet/mathnet-" + release.RepoKey)) |
|||
let remoteName = main.Split('\t').[0] |
|||
Git.Branches.pushTag "." remoteName tagName |
|||
|
|||
let publishNuGet (solutions: Solution list) = |
|||
CleanDir "obj/NuGet" |
|||
let rec impl trials (file:string) = |
|||
trace ("NuGet Push: " + System.IO.Path.GetFileName(file) + ".") |
|||
try |
|||
let args = sprintf """push "%s" -Source https://api.nuget.org/v3/index.json -T 900""" (FullName file) |
|||
let result = |
|||
ExecProcess (fun info -> |
|||
info.FileName <- "packages/build/NuGet.CommandLine/tools/NuGet.exe" |
|||
info.WorkingDirectory <- FullName "obj/NuGet" |
|||
info.Arguments <- args) (TimeSpan.FromMinutes 10.) |
|||
if result <> 0 then failwith "Error during NuGet push." |
|||
with exn -> |
|||
if trials > 0 then impl (trials-1) file |
|||
else () |
|||
solutions |
|||
|> Seq.collect (fun solution -> !! (solution.OutputNuGetDir </> "*.nupkg")) |
|||
|> Seq.distinct |
|||
|> Seq.iter (impl 3) |
|||
DeleteDir "obj/NuGet" |
|||
|
|||
let publishDocs (release:Release) = |
|||
let repo = "../web-mathnet-" + release.RepoKey |
|||
Git.Branches.pull repo "origin" "gh-pages" |
|||
CopyRecursive "out/docs" repo true |> printfn "%A" |
|||
Git.Staging.StageAll repo |
|||
Git.Commit.Commit repo (sprintf "%s: %s docs update" release.Title release.PackageVersion) |
|||
Git.Branches.pushBranch repo "origin" "gh-pages" |
|||
|
|||
let publishApi (release:Release) = |
|||
let repo = "../web-mathnet-" + release.RepoKey |
|||
Git.Branches.pull repo "origin" "gh-pages" |
|||
CleanDir (repo + "/api") |
|||
CopyRecursive "out/api" (repo + "/api") true |> printfn "%A" |
|||
Git.Staging.StageAll repo |
|||
Git.Commit.Commit repo (sprintf "%s: %s api update" release.Title release.PackageVersion) |
|||
Git.Branches.pushBranch repo "origin" "gh-pages" |
|||
|
|||
let publishNuGetToArchive (package:NuGetPackage) archivePath nupkgFile = |
|||
let tempDir = Path.GetTempPath() </> Path.GetRandomFileName() |
|||
let archiveDir = archivePath </> package.Id </> package.Release.PackageVersion |
|||
CleanDirs [tempDir; archiveDir] |
|||
nupkgFile |> CopyFile archiveDir |
|||
use sha512 = System.Security.Cryptography.SHA512.Create() |
|||
let hash = File.ReadAllBytes nupkgFile |> sha512.ComputeHash |> Convert.ToBase64String |
|||
File.WriteAllText ((archiveDir </> (Path.GetFileName(nupkgFile) + ".sha512")), hash) |
|||
ZipHelper.Unzip tempDir nupkgFile |
|||
!! (tempDir </> "*.nuspec") |> Copy archiveDir |
|||
DeleteDir tempDir |
|||
|
|||
let publishArchiveManual title zipOutPath nugetOutPath (zipPackages:ZipPackage list) (nugetPackages:NuGetPackage list) = |
|||
let archivePath = (environVarOrFail "MathNetReleaseArchive") </> title |
|||
if directoryExists archivePath |> not then failwith "Release archive directory does not exists. Safety Check failed." |
|||
for zipPackage in zipPackages do |
|||
let zipFile = zipOutPath </> sprintf "%s-%s.zip" zipPackage.Id zipPackage.Release.PackageVersion |
|||
if FileSystemHelper.fileExists zipFile then |
|||
zipFile |> CopyFile (archivePath </> "Zip") |
|||
for nugetPackage in nugetPackages do |
|||
let nupkgFile = nugetOutPath </> sprintf "%s.%s.nupkg" nugetPackage.Id nugetPackage.Release.PackageVersion |
|||
if FileSystemHelper.fileExists nupkgFile then |
|||
trace nupkgFile |
|||
publishNuGetToArchive nugetPackage (archivePath </> "NuGet") nupkgFile |
|||
let symbolsFile = nugetOutPath </> sprintf "%s.%s.symbols.nupkg" nugetPackage.Id nugetPackage.Release.PackageVersion |
|||
if FileSystemHelper.fileExists symbolsFile then |
|||
symbolsFile |> CopyFile (archivePath </> "Symbols") |
|||
|
|||
let publishArchive (solution:Solution) = |
|||
let zipOutPath = solution.OutputZipDir |
|||
let nugetOutPath = solution.OutputNuGetDir |
|||
let zipPackages = solution.ZipPackages |
|||
let nugetPackages = solution.Projects |> List.collect projectNuGetPackages |> List.distinct |
|||
publishArchiveManual solution.Release.Title zipOutPath nugetOutPath zipPackages nugetPackages |
|||
|
|||
let publishArchives (solutions: Solution list) = solutions |> List.iter publishArchive |
|||
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 8.8 KiB After Width: | Height: | Size: 8.8 KiB |
|
Before Width: | Height: | Size: 3.5 KiB After Width: | Height: | Size: 3.5 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 9.5 KiB After Width: | Height: | Size: 9.5 KiB |
|
Before Width: | Height: | Size: 3.7 KiB After Width: | Height: | Size: 3.7 KiB |
|
Before Width: | Height: | Size: 11 KiB After Width: | Height: | Size: 11 KiB |
|
Before Width: | Height: | Size: 13 KiB After Width: | Height: | Size: 13 KiB |
|
Before Width: | Height: | Size: 31 KiB After Width: | Height: | Size: 31 KiB |
|
Before Width: | Height: | Size: 47 KiB After Width: | Height: | Size: 47 KiB |
@ -0,0 +1,133 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
|
|||
<head> |
|||
<meta charset="utf-8"> |
|||
<title>{{fsdocs-page-title}}</title> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> |
|||
<meta name="author" content="{{fsdocs-authors}}"> |
|||
|
|||
<link rel="stylesheet" id="theme_link" href="https://cdnjs.cloudflare.com/ajax/libs/bootswatch/4.6.0/materia/bootstrap.min.css"> |
|||
<script src="https://code.jquery.com/jquery-3.4.1.min.js"></script> |
|||
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-Piv4xVNRyMGpqkS2by6br4gNJ7DXjqk09RmUpJ8jgGtD7zP9yug3goQfGII0yAns" crossorigin="anonymous"></script> |
|||
|
|||
<script type="text/javascript" async src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/MathJax.js?config=TeX-MML-AM_CHTML"></script> |
|||
|
|||
<link rel="shortcut icon" type="image/x-icon" href="/favicon.ico"> |
|||
<link type="text/css" rel="stylesheet" href="{{root}}content/navbar-{{fsdocs-navbar-position}}.css" /> |
|||
<link type="text/css" rel="stylesheet" href="{{root}}content/fsdocs-{{fsdocs-theme}}.css" /> |
|||
<link type="text/css" rel="stylesheet" href="{{root}}content/fsdocs-custom.css" /> |
|||
<script type="text/javascript" src="{{root}}content/fsdocs-tips.js"></script> |
|||
<!-- HTML5 shim, for IE6-8 support of HTML5 elements --> |
|||
<!--[if lt IE 9]> |
|||
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script> |
|||
<![endif]--> |
|||
<!-- BEGIN SEARCH BOX: this adds support for the search box --> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.css" /> |
|||
<!-- END SEARCH BOX: this adds support for the search box --> |
|||
{{fsdocs-watch-script}} |
|||
</head> |
|||
|
|||
<body> |
|||
<nav class="navbar navbar-expand-md navbar-light bg-secondary {{fsdocs-navbar-position}}" id="fsdocs-nav"> |
|||
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarsExampleDefault" aria-controls="navbarsExampleDefault" aria-expanded="false" aria-label="Toggle navigation"> |
|||
<span class="navbar-toggler-icon"></span> |
|||
</button> |
|||
<div class="collapse navbar-collapse navbar-nav-scroll" id="navbarsExampleDefault"> |
|||
<a href="{{fsdocs-logo-link}}"><img id="fsdocs-logo" src="{{fsdocs-logo-src}}" /></a> |
|||
<!-- BEGIN SEARCH BOX: this adds support for the search box --> |
|||
<div id="header"> |
|||
<div class="searchbox" id="fsdocs-searchbox"> |
|||
<label for="search-by"> |
|||
<i class="fas fa-search"></i> |
|||
</label> |
|||
<input data-search-input="" id="search-by" type="search" placeholder="Search..." /> |
|||
<span data-search-clear=""> |
|||
<i class="fas fa-times"></i> |
|||
</span> |
|||
</div> |
|||
</div> |
|||
<!-- END SEARCH BOX: this adds support for the search box --> |
|||
<ul class="navbar-nav"> |
|||
<li class="nav-header">Math.NET Numerics</li> |
|||
<li class="nav-item"><a class="nav-link" href="Packages.html">NuGet & Binaries</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="ReleaseNotes.html">Release Notes</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/blob/master/LICENSE.md">MIT License</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Compatibility.html">Platform Support</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="https://numerics.mathdotnet.com/api/">Class Reference</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/issues">Issues & Bugs</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Users.html">Who is using Math.NET?</a></li> |
|||
|
|||
<li class="nav-header">Contributing</li> |
|||
<li class="nav-item"><a class="nav-link" href="Contributors.html">Contributors</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Contributing.html">Contributing</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Build.html">Build & Tools</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="https://github.com/mathnet/mathnet-numerics/discussions/categories/ideas">Your Ideas</a></li> |
|||
|
|||
<li class="nav-header">Getting Help</li> |
|||
<li class="nav-item"><a class="nav-link" href="https://discuss.mathdotnet.com/c/numerics">Discuss</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="https://stackoverflow.com/questions/tagged/mathdotnet">Stack Overflow</a></li> |
|||
|
|||
<li class="nav-header">Getting Started</li> |
|||
<l class="nav-item"i><a class="nav-link" href="/">Getting started</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Constants.html">Constants</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Matrix.html">Matrices and Vectors</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Euclid.html">Euclid & Number Theory</a></li> |
|||
<li class="nav-item">Combinatorics</li> |
|||
|
|||
<li class="nav-header">Evaluation</li> |
|||
<li class="nav-item"><a class="nav-link" href="Functions.html">Special Functions</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Integration.html">Integration</a></li> |
|||
|
|||
<li class="nav-header">Statistics/Probability</li> |
|||
<li class="nav-item"><a class="nav-link" href="DescriptiveStatistics.html">Descriptive Statistics</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Probability.html">Probability Distributions</a></li> |
|||
|
|||
<li class="nav-header">Generation</li> |
|||
<li class="nav-item"><a class="nav-link" href="Generate.html">Generating Data</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="Random.html">Random Numbers</a></li> |
|||
|
|||
<li class="nav-header">Solving Equations</li> |
|||
<li class="nav-item"><a class="nav-link" href="LinearEquations.html">Linear Equation Systems</a></li> |
|||
|
|||
<li class="nav-header">Optimization</li> |
|||
<li class="nav-item"><a class="nav-link" href="Distance.html">Distance Metrics</a></li> |
|||
|
|||
<li class="nav-header">Curve Fitting</li> |
|||
<li class="nav-item"><a class="nav-link" href="Regression.html">Regression</a></li> |
|||
|
|||
<li class="nav-header">Native Providers</li> |
|||
<li class="nav-item"><a class="nav-link" href="MKL.html">Intel MKL</a></li> |
|||
|
|||
<li class="nav-header">Working Together</li> |
|||
<li class="nav-item"><a class="nav-link" href="CSV.html">Delimited Text Files (CSV)</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="MatrixMarket.html">NIST MatrixMarket</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="MatlabFiles.html">MATLAB</a></li> |
|||
<li class="nav-item"><a class="nav-link" href="IFSharpNotebook.html">IF# Notebook</a></li> |
|||
</ul> |
|||
</div> |
|||
</nav> |
|||
<div class="container"> |
|||
<div class="masthead"> |
|||
<h3 class="muted"> |
|||
<a href="https://numerics.mathdotnet.com">Math.NET Numerics</a> | |
|||
<a href="https://www.mathdotnet.com">Math.NET Project</a> | |
|||
<a href="https://github.com/mathnet/mathnet-numerics">GitHub</a> |
|||
</h3> |
|||
</div> |
|||
<hr /> |
|||
<div class="container" id="fsdocs-content"> |
|||
{{fsdocs-content}} |
|||
{{fsdocs-tooltips}} |
|||
</div> |
|||
<!-- BEGIN SEARCH BOX: this adds support for the search box --> |
|||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.css" /> |
|||
<script type="text/javascript">var fsdocs_search_baseurl = '{{root}}';</script> |
|||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/lunr.js/2.3.8/lunr.min.js"></script> |
|||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/JavaScript-autoComplete/1.0.4/auto-complete.min.js"></script> |
|||
<script type="text/javascript" src="{{root}}content/fsdocs-search.js"></script> |
|||
<!-- END SEARCH BOX: this adds support for the search box --> |
|||
</div> |
|||
</body> |
|||
|
|||
</html> |
|||
@ -0,0 +1,16 @@ |
|||
.navbar-nav .nav-link { |
|||
padding-top: 0.1rem; |
|||
padding-bottom: 0.1rem; |
|||
} |
|||
|
|||
#fsdocs-content li { |
|||
margin: 0px 0px 10px 0px; |
|||
} |
|||
|
|||
.masthead h3 { |
|||
margin-top: 15px; |
|||
margin-bottom: 5px; |
|||
font-size: 130%; |
|||
text-align: right; |
|||
color: #999999; |
|||
} |
|||
|
After Width: | Height: | Size: 55 KiB |
|
Before Width: | Height: | Size: 16 KiB After Width: | Height: | Size: 16 KiB |
@ -1,95 +0,0 @@ |
|||
// -------------------------------------------------------------------------------------- |
|||
// Builds the documentation from `.fsx` and `.md` files in the 'docs/content' directory |
|||
// (the generated documentation is stored in the 'docs/output' directory) |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
// Binaries that have XML documentation (in a corresponding generated XML file) |
|||
let referenceBinaries = [ "MathNet.Numerics.dll"; "MathNet.Numerics.FSharp.dll" ] |
|||
// Web site location for the generated documentation |
|||
let website = "https://numerics.mathdotnet.com" |
|||
let githubLink = "https://github.com/mathnet/mathnet-numerics" |
|||
|
|||
// Specify more information about your project |
|||
let info = |
|||
[ "project-name", "Math.NET Numerics" |
|||
"project-author", "Christoph Ruegg, Marcus Cuda, Jurgen Van Gael" |
|||
"project-summary", "Math.NET Numerics, providing methods and algorithms for numerical computations in science, engineering and every day use. .Net 4, .Net 3.5, SL5, Win8, WP8, PCL 47 and 136, Mono, Xamarin Android/iOS." |
|||
"project-github", githubLink |
|||
"project-nuget", "https://nuget.org/packages/MathNet.Numerics" ] |
|||
|
|||
// -------------------------------------------------------------------------------------- |
|||
// For typical project, no changes are needed below |
|||
// -------------------------------------------------------------------------------------- |
|||
|
|||
#load "../../packages/build/FSharp.Formatting/FSharp.Formatting.fsx" |
|||
#r "../../packages/build/FAKE/tools/NuGet.Core.dll" |
|||
#r "../../packages/build/FAKE/tools/FakeLib.dll" |
|||
|
|||
open Fake |
|||
open System |
|||
open System.IO |
|||
open Fake.FileHelper |
|||
open FSharp.Literate |
|||
open FSharp.MetadataFormat |
|||
|
|||
// When called from 'build.fsx', use the public project URL as <root> |
|||
// otherwise, use the current 'output' directory. |
|||
#if RELEASE |
|||
let root = website |
|||
#else |
|||
let root = "file://" + (__SOURCE_DIRECTORY__ @@ "../../out/docs") |
|||
#endif |
|||
|
|||
// Paths with template/source/output locations |
|||
let top = __SOURCE_DIRECTORY__ @@ "../../" |
|||
let bin = __SOURCE_DIRECTORY__ @@ "../../out/lib/Net40" |
|||
let content = __SOURCE_DIRECTORY__ @@ "../content" |
|||
let output = __SOURCE_DIRECTORY__ @@ "../../out/docs" |
|||
let files = __SOURCE_DIRECTORY__ @@ "../files" |
|||
let templates = __SOURCE_DIRECTORY__ @@ "templates" |
|||
let formatting = __SOURCE_DIRECTORY__ @@ "../../packages/build/FSharp.Formatting/" |
|||
let docTemplate = formatting @@ "templates/docpage.cshtml" |
|||
|
|||
// Where to look for *.csproj templates (in this order) |
|||
let layoutRoots = |
|||
[ templates |
|||
formatting @@ "templates" |
|||
formatting @@ "templates/reference" ] |
|||
|
|||
// Copy static files and CSS + JS from F# Formatting |
|||
let copyFiles() = |
|||
CopyRecursive files output true |> Log "Copying file: " |
|||
ensureDirectory (output @@ "content") |
|||
CopyRecursive (formatting @@ "styles") (output @@ "content") true |
|||
|> Log "Copying styles and scripts: " |
|||
|
|||
// Build API reference from XML comments |
|||
let buildReference () = |
|||
CleanDir (output @@ "reference") |
|||
let binaries = |
|||
referenceBinaries |
|||
|> List.map (fun lib-> bin @@ lib) |
|||
MetadataFormat.Generate |
|||
( binaries, output @@ "reference", layoutRoots, |
|||
parameters = ("root", root)::info, |
|||
sourceRepo = githubLink @@ "tree/master", |
|||
sourceFolder = __SOURCE_DIRECTORY__ @@ ".." @@ "..", |
|||
publicOnly = true, libDirs = [bin] ) |
|||
|
|||
|
|||
// Build documentation from `fsx` and `md` files in `docs/content` |
|||
let buildDocumentation() = |
|||
let subdirs = Directory.EnumerateDirectories(content, "*", SearchOption.AllDirectories) |
|||
for dir in Seq.append [content] subdirs do |
|||
let sub = if dir.Length > content.Length then dir.Substring(content.Length + 1) else "." |
|||
Literate.ProcessDirectory |
|||
( dir, docTemplate, output @@ sub, replacements = ("root", root)::info, |
|||
layoutRoots = layoutRoots, |
|||
references = false, |
|||
lineNumbers = true, |
|||
generateAnchors = true ) |
|||
|
|||
|
|||
// Generate |
|||
copyFiles() |
|||
buildDocumentation() |
|||
@ -1,5 +0,0 @@ |
|||
group Build |
|||
FSharp.Formatting |
|||
Microsoft.AspNet.Razor |
|||
RazorEngine |
|||
FSharp.Compiler.Service |
|||
@ -1,142 +0,0 @@ |
|||
<!DOCTYPE html> |
|||
<html lang="en"> |
|||
<head> |
|||
<meta charset="utf-8"/> |
|||
<title>@Title</title> |
|||
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
|||
<meta name="description" content="@Description"/> |
|||
<meta name="author" content="@Properties["project-author"]"/> |
|||
|
|||
<script src="https://code.jquery.com/jquery-1.8.0.js"></script> |
|||
<script src="https://code.jquery.com/ui/1.8.23/jquery-ui.js"></script> |
|||
<script src="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/js/bootstrap.min.js"></script> |
|||
<link href="https://netdna.bootstrapcdn.com/twitter-bootstrap/2.2.1/css/bootstrap-combined.min.css" rel="stylesheet"/> |
|||
|
|||
<link type="text/css" rel="stylesheet" href="@Root/content/style.css" /> |
|||
<style> |
|||
#main table:not(.pre) { |
|||
border: 1px solid #dddddd; |
|||
max-width: 100%; |
|||
border-style: solid; |
|||
border-width: 1px; |
|||
border-color: gray; |
|||
border-collapse: collapse; |
|||
border-right-width: 1px; |
|||
border-bottom-width: 1px; |
|||
margin-top: 15px; |
|||
margin-bottom: 25px; |
|||
} |
|||
#main table:not(.pre) th, #main table:not(.pre) td { |
|||
border: 1px solid #dddddd; |
|||
padding: 6px; |
|||
} |
|||
#main table:not(.pre) th p, #main table:not(.pre) td p { |
|||
margin-bottom: 5px; |
|||
} |
|||
</style> |
|||
<script type="text/javascript" src="@Root/content/tips.js"></script> |
|||
<!-- HTML5 shim, for IE6-8 support of HTML5 elements --> |
|||
<!--[if lt IE 9]> |
|||
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> |
|||
<![endif]--> |
|||
|
|||
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.1/MathJax.js?config=TeX-AMS-MML_HTMLorMML"></script> |
|||
</head> |
|||
<body> |
|||
<div class="container"> |
|||
<div class="masthead"> |
|||
<ul class="nav nav-pills pull-right"> |
|||
<li><a href="https://www.mathdotnet.com">Math.NET Project</a></li> |
|||
<li><a href="https://numerics.mathdotnet.com">Math.NET Numerics</a></li> |
|||
<li><a href="https://github.com/mathnet/mathnet-numerics">GitHub</a></li> |
|||
</ul> |
|||
<h3 class="muted">Math.NET Numerics</h3> |
|||
</div> |
|||
<hr /> |
|||
<div class="row"> |
|||
<div class="span9" id="main"> |
|||
@RenderBody() |
|||
</div> |
|||
<div class="span3"> |
|||
<ul class="nav nav-list" id="menu"> |
|||
|
|||
<li class="nav-header">Math.NET Numerics</li> |
|||
<li><a href="@Root/Packages.html">NuGet & Binaries</a></li> |
|||
<li><a href="@Root/ReleaseNotes.html">Release Notes</a></li> |
|||
<li><a href="@Root/License.html">MIT License</a></li> |
|||
<li><a href="@Root/Compatibility.html">Platform Support</a></li> |
|||
<li><a href="https://numerics.mathdotnet.com/api/">Class Reference</a></li> |
|||
<li><a href="https://github.com/mathnet/mathnet-numerics/issues">Issues & Bugs</a></li> |
|||
<li><a href="@Root/Users.html">Who is using Math.NET?</a></li> |
|||
|
|||
<li class="nav-header">Contributing</li> |
|||
<li><a href="@Root/Contributors.html">Contributors</a></li> |
|||
<li><a href="@Root/Contributing.html">Contributing</a></li> |
|||
<li><a href="@Root/Build.html">Build & Tools</a></li> |
|||
<li><a href="http://feedback.mathdotnet.com/forums/2060-math-net-numerics">Your Ideas</a></li> |
|||
|
|||
<li class="nav-header">Getting Help</li> |
|||
<li><a href="https://discuss.mathdotnet.com/c/numerics">Discuss</a></li> |
|||
<li><a href="https://stackoverflow.com/questions/tagged/mathdotnet">Stack Overflow</a></li> |
|||
|
|||
<li class="nav-header">Getting Started</li> |
|||
<li><a href="@Root/">Getting started</a></li> |
|||
<li><a href="@Root/Constants.html">Constants</a></li> |
|||
<li>Floating-Point Numbers</li> |
|||
<li>Arbitrary Precision Numbers</li> |
|||
<li>Complex Numbers</li> |
|||
<li><a href="@Root/Matrix.html">Matrices and Vectors</a></li> |
|||
<li><a href="@Root/Euclid.html">Euclid & Number Theory</a></li> |
|||
<li>Combinatorics</li> |
|||
|
|||
<li class="nav-header">Evaluation</li> |
|||
<li><a href="@Root/Functions.html">Special Functions</a></li> |
|||
<li>Differentiation</li> |
|||
<li><a href="@Root/Integration.html">Integration</a></li> |
|||
|
|||
<li class="nav-header">Statistics/Probability</li> |
|||
<li><a href="@Root/DescriptiveStatistics.html">Descriptive Statistics</a></li> |
|||
<li><a href="@Root/Probability.html">Probability Distributions</a></li> |
|||
|
|||
<li class="nav-header">Generation</li> |
|||
<li><a href="@Root/Generate.html">Generating Data</a></li> |
|||
<li><a href="@Root/Random.html">Random Numbers</a></li> |
|||
|
|||
<li class="nav-header">Transformation</li> |
|||
<li>Fourier Transform (FFT)</li> |
|||
<li>Filtering & DSP</li> |
|||
<li>Window Functions</li> |
|||
|
|||
<li class="nav-header">Solving Equations</li> |
|||
<li><a href="@Root/LinearEquations.html">Linear Equation Systems</a></li> |
|||
<li>Nonlinear Root Finding</li> |
|||
|
|||
<li class="nav-header">Optimization</li> |
|||
<li>Linear Least Squares</li> |
|||
<li>Nonlinear Optimization</li> |
|||
<li><a href="@Root/Distance.html">Distance Metrics</a></li> |
|||
|
|||
<li class="nav-header">Curve Fitting</li> |
|||
<li><a href="@Root/Regression.html">Regression</a></li> |
|||
<li>Interpolation</li> |
|||
<li>Fourier Approximation</li> |
|||
|
|||
<li class="nav-header">Native Providers</li> |
|||
<li><a href="@Root/MKL.html">Intel MKL</a></li> |
|||
|
|||
<li class="nav-header">Working Together</li> |
|||
<li><a href="@Root/CSV.html">Delimited Text Files (CSV)</a></li> |
|||
<li><a href="@Root/MatrixMarket.html">NIST MatrixMarket</a></li> |
|||
<li><a href="@Root/MatlabFiles.html">MATLAB</a></li> |
|||
<li><a href="@Root/IFSharpNotebook.html">IF# Notebook</a></li> |
|||
<li>FsLab & Deedle</li> |
|||
<li>Microsoft Excel</li> |
|||
<li>numl.net machine learning</li> |
|||
<li>R-project</li> |
|||
|
|||
</ul> |
|||
</div> |
|||
</div> |
|||
</div> |
|||
</body> |
|||
</html> |
|||
@ -1,16 +1,7 @@ |
|||
using System.Reflection; |
|||
using System.Runtime.InteropServices; |
|||
using System.Runtime.InteropServices; |
|||
using MathNet.Numerics.UnitTests; |
|||
|
|||
[assembly: AssemblyTitle("Math.NET Numerics Unit Tests")] |
|||
[assembly: AssemblyCompany("Math.NET Project")] |
|||
[assembly: AssemblyProduct("Math.NET Numerics")] |
|||
[assembly: AssemblyCopyright("Copyright (c) Math.NET Project")] |
|||
[assembly: ComVisible(false)] |
|||
[assembly: Guid("04157581-63f3-447b-a277-83c6e69126a4")] |
|||
|
|||
[assembly: AssemblyVersion("5.0.0.0")] |
|||
[assembly: AssemblyFileVersion("5.0.0.0")] |
|||
[assembly: AssemblyInformationalVersion("5.0.0-alpha02")] |
|||
|
|||
[assembly: UseLinearAlgebraProvider] |
|||
|
|||