diff --git a/Build/build.ps1 b/Build/build.ps1
new file mode 100644
index 00000000000..8743ab2f623
--- /dev/null
+++ b/Build/build.ps1
@@ -0,0 +1,42 @@
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License.
+
+$ErrorActionPreference = 'Stop'
+
+& "$PSScriptRoot/set-env.ps1"
+$all_ok = $True
+
+function Build-One {
+ param(
+ [string]$action,
+ [string]$project
+ );
+
+ dotnet $action (Join-Path $PSScriptRoot $project) `
+ -c $Env:BUILD_CONFIGURATION `
+ -v $Env:BUILD_VERBOSITY `
+ /property:DefineConstants=$Env:ASSEMBLY_CONSTANTS `
+ /property:Version=$Env:ASSEMBLY_VERSION `
+ /property:QsharpDocsOutDir=$Env:DOCS_OUTDIR
+
+ if ($LastExitCode -ne 0) {
+ Write-Host "##vso[task.logissue type=error;]Failed to build $project."
+ $script:all_ok = $False
+ }
+}
+
+Write-Host "##[info]Build Standard library"
+Build-One 'publish' '../Standard.sln'
+
+Write-Host "##[info]Build Chemistry library"
+Build-One 'publish' '../Chemistry.sln'
+
+Write-Host "##[info]Build Numerics library"
+Build-One 'publish' '../Numerics.sln'
+
+Write-Host "##[info]Build Standard library"
+Build-One 'publish' '../Magic.sln'
+
+if (-not $all_ok) {
+ throw "At least one test failed execution. Check the logs."
+}
\ No newline at end of file
diff --git a/Build/pack.ps1 b/Build/pack.ps1
new file mode 100644
index 00000000000..d2742c51184
--- /dev/null
+++ b/Build/pack.ps1
@@ -0,0 +1,39 @@
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License.
+
+$ErrorActionPreference = 'Stop'
+
+& "$PSScriptRoot/set-env.ps1"
+$all_ok = $True
+
+function Pack-One() {
+ Param($project)
+
+ dotnet pack (Join-Path $PSScriptRoot $project) `
+ --no-build `
+ -c $Env:BUILD_CONFIGURATION `
+ -v $Env:BUILD_VERBOSITY `
+ -o $Env:NUGET_OUTDIR `
+ /property:PackageVersion=$Env:NUGET_VERSION
+
+ if ($LastExitCode -ne 0) {
+ Write-Host "##vso[task.logissue type=error;]Failed to pack $project."
+ $script:all_ok = $False
+ }
+}
+
+Write-Host "##[info]Pack Standard library"
+Pack-One '../Standard/src/Standard.csproj'
+
+Write-Host "##[info]Pack Chemistry library"
+Pack-One '../Chemistry/src/DataModel/DataModel.csproj'
+
+Write-Host "##[info]Pack Numerics library"
+Pack-One '../Numerics/src/Numerics.csproj'
+
+Write-Host "##[info]Pack chemistry magics library"
+Pack-One '../Chemistry/src/Jupyter/Jupyter.csproj'
+
+if (-not $all_ok) {
+ throw "At least one test failed execution. Check the logs."
+}
diff --git a/Build/set-env.ps1 b/Build/set-env.ps1
new file mode 100644
index 00000000000..194452a0d32
--- /dev/null
+++ b/Build/set-env.ps1
@@ -0,0 +1,21 @@
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License.
+
+$ErrorActionPreference = 'Stop'
+
+Write-Host "Setting up build environment variables"
+
+If ($Env:BUILD_BUILDNUMBER -eq $null) { $Env:BUILD_BUILDNUMBER ="0.0.1.0" }
+If ($Env:BUILD_CONFIGURATION -eq $null) { $Env:BUILD_CONFIGURATION ="Debug" }
+If ($Env:BUILD_VERBOSITY -eq $null) { $Env:BUILD_VERBOSITY ="m" }
+If ($Env:ASSEMBLY_VERSION -eq $null) { $Env:ASSEMBLY_VERSION ="$Env:BUILD_BUILDNUMBER" }
+If ($Env:NUGET_VERSION -eq $null) { $Env:NUGET_VERSION ="$Env:ASSEMBLY_VERSION-alpha" }
+
+If ($Env:DROPS_DIR -eq $null) { $Env:DROPS_DIR = [IO.Path]::GetFullPath((Join-Path $PSScriptRoot "..\drops")) }
+
+If ($Env:NUGET_OUTDIR -eq $null) { $Env:NUGET_OUTDIR = (Join-Path $Env:DROPS_DIR "nugets") }
+If (-not (Test-Path -Path $Env:NUGET_OUTDIR)) { [IO.Directory]::CreateDirectory($Env:NUGET_OUTDIR) }
+
+If ($Env:DOCS_OUTDIR -eq $null) { $Env:DOCS_OUTDIR = (Join-Path $Env:DROPS_DIR "docs") }
+If (-not (Test-Path -Path $Env:DOCS_OUTDIR)) { [IO.Directory]::CreateDirectory($Env:DOCS_OUTDIR) }
+
diff --git a/Build/step-build-libs.yml b/Build/step-build-libs.yml
deleted file mode 100644
index 414ed32e57b..00000000000
--- a/Build/step-build-libs.yml
+++ /dev/null
@@ -1,62 +0,0 @@
-##
-# Builds, tests & package all libraries.
-##
-
-steps:
-##
-# Build
-##
-- task: DotNetCoreCLI@2
- displayName: 'Build Libraries'
- inputs:
- projects: |
- $(LibrariesRootFolder)/Standard.sln
- $(LibrariesRootFolder)/Chemistry.sln
- $(LibrariesRootFolder)/Numerics.sln
- arguments: >
- -c $(BuildConfiguration)
- -v n
- /p:Version=$(Assembly.Version)
- /p:QsharpDocsOutDir=$(DocsOutDir)
- /p:DefineConstants=$(Assembly.Constants)
-
-##
-# Test
-##
-- task: DotNetCoreCLI@2
- displayName: 'Test Libraries'
- condition: and(succeeded(), ne(variables['Skip.Tests'], 'true'))
- inputs:
- command: test
- projects: |
- $(LibrariesRootFolder)/Standard/tests
- $(LibrariesRootFolder)/Chemistry/tests/ChemistryTests/QSharpTests.csproj
- $(LibrariesRootFolder)/Chemistry/tests/SystemTests/SystemTests.csproj
- $(LibrariesRootFolder)/Chemistry/tests/DataModelTests/CSharpTests.csproj
- $(LibrariesRootFolder)/Chemistry/tests/SerializationTests/SerializationTests.csproj
- $(LibrariesRootFolder)/Numerics/tests/NumericsTests.csproj
- arguments: >
- -c $(BuildConfiguration)
- -v n
- /p:Version=$(Assembly.Version)
- /p:QsharpDocsOutDir=$(DocsOutDir)
- /p:DefineConstants=$(Assembly.Constants)
-
-##
-# Create Nuget.
-##
-- task: DotNetCoreCLI@2
- displayName: 'Pack Libraries nugets'
- inputs:
- command: custom
- custom: pack
- projects: |
- $(LibrariesRootFolder)/Standard/src/Standard.csproj
- $(LibrariesRootFolder)/Chemistry/src/DataModel/DataModel.csproj
- $(LibrariesRootFolder)/Numerics/src/Numerics.csproj
- arguments: >
- --no-build
- -c $(BuildConfiguration)
- -v n
- -o $(System.DefaultWorkingDirectory)
- /p:PackageVersion=$(Nuget.Version)
diff --git a/Build/step-build-magic.yml b/Build/step-build-magic.yml
deleted file mode 100644
index 0a8c3852db0..00000000000
--- a/Build/step-build-magic.yml
+++ /dev/null
@@ -1,32 +0,0 @@
-##
-# Builds, tests & package all libraries.
-##
-
-steps:
-##
-# Build
-##
-- task: DotNetCoreCLI@2
- displayName: 'Build Chemistry Magic'
- inputs:
- projects: '$(LibrariesRootFolder)/Magic.sln'
- arguments: >
- -c $(BuildConfiguration)
- -v n
- /p:Version=$(Assembly.Version)
- /p:DefineConstants=$(Assembly.Constants)
-
-##
-# Test
-##
-- task: DotNetCoreCLI@2
- displayName: 'Test Chemistry Magic'
- condition: and(succeeded(), ne(variables['Skip.Tests'], 'true'))
- inputs:
- command: test
- projects: '$(LibrariesRootFolder)/Chemistry/tests/JupyterTests/JupyterTests.csproj'
- arguments: >
- -c $(BuildConfiguration)
- -v n
- /p:Version=$(Assembly.Version)
- /p:DefineConstants=$(Assembly.Constants)
diff --git a/Build/step-wrap-up.yml b/Build/step-wrap-up.yml
index 72e934691fc..3f07aa85f7d 100644
--- a/Build/step-wrap-up.yml
+++ b/Build/step-wrap-up.yml
@@ -3,27 +3,25 @@
##
steps:
-- task: PublishSymbols@1
- displayName: 'Publish symbols path: '
-
-
-- task: CopyFiles@2
- displayName: 'Copy Files to: $(build.artifactstagingdirectory)'
- inputs:
- SourceFolder: '$(build.sourcesdirectory)'
- Contents: |
- **/bin/$(BuildConfiguration)/**
- *.nupkg
- TargetFolder: '$(build.artifactstagingdirectory)'
+- task: PublishTestResults@2
+ displayName: 'Publish tests results'
condition: succeededOrFailed()
+ inputs:
+ testResultsFormat: VSTest
+ testResultsFiles: '$(System.DefaultWorkingDirectory)/**/*.trx'
+ testRunTitle: 'Q# Libraries tests'
-
+- task: PublishSymbols@1
+ displayName: 'Publish symbols'
+ condition: and(succeeded(), eq(variables['Agent.OS'], 'Windows_NT'))
+ inputs:
+ SearchPattern: '$(System.DefaultWorkingDirectory)/src/**/*.pdb'
- task: PublishBuildArtifacts@1
- displayName: 'Publish Artifact: drop'
- inputs:
- PathtoPublish: '$(build.artifactstagingdirectory)'
+ displayName: 'Publish Artifact: qsharp-runtime'
condition: succeededOrFailed()
-
+ inputs:
+ PathtoPublish: '$(Build.ArtifactStagingDirectory)'
+ artifactName: QuantumLibraries
diff --git a/Build/steps.yml b/Build/steps.yml
new file mode 100644
index 00000000000..9aa10809d1f
--- /dev/null
+++ b/Build/steps.yml
@@ -0,0 +1,19 @@
+steps:
+
+- powershell: ./build.ps1
+ displayName: "Building"
+ workingDirectory: $(System.DefaultWorkingDirectory)/Build
+
+
+- powershell: ./test.ps1
+ displayName: "Testing"
+ workingDirectory: $(System.DefaultWorkingDirectory)/Build
+ condition: and(succeeded(), ne(variables['Skip.Tests'], 'true'))
+
+
+- powershell: ./pack.ps1
+ displayName: "Pack"
+ workingDirectory: $(System.DefaultWorkingDirectory)/Build
+
+
+- template: step-wrap-up.yml
diff --git a/Build/test.ps1 b/Build/test.ps1
new file mode 100644
index 00000000000..f595d33874e
--- /dev/null
+++ b/Build/test.ps1
@@ -0,0 +1,48 @@
+# Copyright (c) Microsoft Corporation. All rights reserved.
+# Licensed under the MIT License.
+
+$ErrorActionPreference = 'Stop'
+
+& "$PSScriptRoot/set-env.ps1"
+$all_ok = $True
+
+function Test-One {
+ Param($project)
+
+ dotnet test (Join-Path $PSScriptRoot $project) `
+ -c $Env:BUILD_CONFIGURATION `
+ -v $Env:BUILD_VERBOSITY `
+ --logger trx `
+ /property:DefineConstants=$Env:ASSEMBLY_CONSTANTS `
+ /property:Version=$Env:ASSEMBLY_VERSION
+
+ if ($LastExitCode -ne 0) {
+ Write-Host "##vso[task.logissue type=error;]Failed to test $project."
+ $script:all_ok = $False
+ }
+}
+
+Write-Host "##[info]Testing Standard/tests/Standard.Tests.csproj"
+Test-One '../Standard/tests/Standard.Tests.csproj'
+
+Write-Host "##[info]Testing Chemistry/tests/ChemistryTests/QSharpTests.csproj"
+Test-One '../Chemistry/tests/ChemistryTests/QSharpTests.csproj'
+
+Write-Host "##[info]Testing Chemistry/tests/SystemTests/SystemTests.csproj"
+Test-One '../Chemistry/tests/SystemTests/SystemTests.csproj'
+
+Write-Host "##[info]Testing Chemistry/tests/DataModelTests/CSharpTests.csproj"
+Test-One '../Chemistry/tests/DataModelTests/CSharpTests.csproj'
+
+Write-Host "##[info]Testing Chemistry/tests/SerializationTests/SerializationTests.csproj"
+Test-One '../Chemistry/tests/SerializationTests/SerializationTests.csproj'
+
+Write-Host "##[info]Testing Chemistry/tests/JupyterTests/JupyterTests.csproj"
+Test-One '../Chemistry/tests/JupyterTests/JupyterTests.csproj'
+
+Write-Host "##[info]Testing Numerics/tests/NumericsTests.csproj"
+Test-One '../Numerics/tests/NumericsTests.csproj'
+
+if (-not $all_ok) {
+ throw "At least one test failed execution. Check the logs."
+}
diff --git a/Chemistry/src/DataModel/DataModel.csproj b/Chemistry/src/DataModel/DataModel.csproj
index 27f73640795..d8f082debdb 100644
--- a/Chemistry/src/DataModel/DataModel.csproj
+++ b/Chemistry/src/DataModel/DataModel.csproj
@@ -28,7 +28,7 @@
-
+
diff --git a/Chemistry/src/Jupyter/Jupyter.csproj b/Chemistry/src/Jupyter/Jupyter.csproj
index d5c34afbb1f..755dbd01233 100644
--- a/Chemistry/src/Jupyter/Jupyter.csproj
+++ b/Chemistry/src/Jupyter/Jupyter.csproj
@@ -19,8 +19,8 @@
-
-
+
+
diff --git a/Chemistry/src/Runtime/Runtime.csproj b/Chemistry/src/Runtime/Runtime.csproj
index a334740692f..7764a19ce66 100644
--- a/Chemistry/src/Runtime/Runtime.csproj
+++ b/Chemistry/src/Runtime/Runtime.csproj
@@ -15,7 +15,7 @@
-
+
diff --git a/Chemistry/tests/ChemistryTests/QSharpTests.csproj b/Chemistry/tests/ChemistryTests/QSharpTests.csproj
index 03ddc1d7096..80451788e6d 100644
--- a/Chemistry/tests/ChemistryTests/QSharpTests.csproj
+++ b/Chemistry/tests/ChemistryTests/QSharpTests.csproj
@@ -11,8 +11,8 @@
-
-
+
+
diff --git a/Chemistry/tests/DataModelTests/CSharpTests.csproj b/Chemistry/tests/DataModelTests/CSharpTests.csproj
index b3ff76dcb3a..c3a204dc2e2 100644
--- a/Chemistry/tests/DataModelTests/CSharpTests.csproj
+++ b/Chemistry/tests/DataModelTests/CSharpTests.csproj
@@ -24,8 +24,8 @@
-
-
+
+
diff --git a/Chemistry/tests/SamplesTests/SamplesTests.csproj b/Chemistry/tests/SamplesTests/SamplesTests.csproj
index 8b23bd91987..309dde0589c 100644
--- a/Chemistry/tests/SamplesTests/SamplesTests.csproj
+++ b/Chemistry/tests/SamplesTests/SamplesTests.csproj
@@ -18,8 +18,8 @@
-
-
+
+
diff --git a/Chemistry/tests/SystemTests/Molecules/LithiumHydride/LithiumHydride.cs b/Chemistry/tests/SystemTests/Molecules/LithiumHydride/LithiumHydride.cs
index d9b3e312799..40c20a1de9c 100644
--- a/Chemistry/tests/SystemTests/Molecules/LithiumHydride/LithiumHydride.cs
+++ b/Chemistry/tests/SystemTests/Molecules/LithiumHydride/LithiumHydride.cs
@@ -157,8 +157,8 @@ public void EstimateEnergyUCCSD()
var configuration = Config.Default();
configuration.UseIndexConvention = IndexConvention.UpDown;
- // Loads a given UCCSD state
- var qSharpData = Load("UCCSD test0", configuration);
+ // Loads a given UCCSD state
+ var qSharpData = Load("UCCSD test0", configuration);
using (var qsim = new QuantumSimulator())
{
@@ -167,9 +167,9 @@ public void EstimateEnergyUCCSD()
var estEnergy = EstimateEnergy.Run(qsim, qSharpData, nSamples).Result;
// Compare to reference value
- Assert.Equal(-7.8602, estEnergy, 2);
+ Assert.Equal(-7.8602, estEnergy, 2);
}
}
- }
+ }
}
}
\ No newline at end of file
diff --git a/Chemistry/tests/SystemTests/Molecules/MolecularHydrogen/Hydrogen.cs b/Chemistry/tests/SystemTests/Molecules/MolecularHydrogen/Hydrogen.cs
index 6b2022c4622..7ded5470ec1 100644
--- a/Chemistry/tests/SystemTests/Molecules/MolecularHydrogen/Hydrogen.cs
+++ b/Chemistry/tests/SystemTests/Molecules/MolecularHydrogen/Hydrogen.cs
@@ -116,15 +116,15 @@ public void EstimateEnergyUCCSD()
// Loads a given UCCSD state
var qSharpData = Load("UCCSD |G>", configuration);
- using (var qsim = new QuantumSimulator())
- {
- // Estimate the energy of the molecule with UCCSD
- var nSamples = 1000000000000000000;
- var estEnergy = EstimateEnergy.Run(qsim, qSharpData, nSamples).Result;
-
- // Compare to reference value
- Assert.Equal(-1.13727, estEnergy, 3);
- }
+ using (var qsim = new QuantumSimulator())
+ {
+ // Estimate the energy of the molecule with UCCSD
+ var nSamples = 1000000000000000000;
+ var estEnergy = EstimateEnergy.Run(qsim, qSharpData, nSamples).Result;
+
+ // Compare to reference value
+ Assert.Equal(-1.13727, estEnergy, 3);
+ }
}
}
diff --git a/Chemistry/tests/SystemTests/SystemTests.csproj b/Chemistry/tests/SystemTests/SystemTests.csproj
index 0fdfdc6d55a..cae3ee498e2 100644
--- a/Chemistry/tests/SystemTests/SystemTests.csproj
+++ b/Chemistry/tests/SystemTests/SystemTests.csproj
@@ -18,8 +18,8 @@
-
-
+
+
diff --git a/Numerics/src/Numerics.csproj b/Numerics/src/Numerics.csproj
index 10307b9916f..a0f0605945c 100644
--- a/Numerics/src/Numerics.csproj
+++ b/Numerics/src/Numerics.csproj
@@ -23,6 +23,6 @@
-
+
diff --git a/Numerics/tests/NumericsTests.csproj b/Numerics/tests/NumericsTests.csproj
index ea2e90d6b43..8a3689219b9 100644
--- a/Numerics/tests/NumericsTests.csproj
+++ b/Numerics/tests/NumericsTests.csproj
@@ -15,8 +15,8 @@
-
-
+
+
diff --git a/Standard/src/Characterization/EstimateFrequency.cs b/Standard/src/Characterization/EstimateFrequency.cs
index 7c9f9dd9b20..b10be896810 100644
--- a/Standard/src/Characterization/EstimateFrequency.cs
+++ b/Standard/src/Characterization/EstimateFrequency.cs
@@ -25,7 +25,7 @@ public partial class EstimateFrequencyA
///
public class Native : EstimateFrequencyA
{
- [DllImport(QuantumSimulator.QSIM_DLL_NAME, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "sim_JointEnsembleProbability")]
+ [DllImport(QuantumSimulator.QSIM_DLL_NAME, ExactSpelling = true, CallingConvention = CallingConvention.Cdecl, EntryPoint = "JointEnsembleProbability")]
private static extern double JointEnsembleProbability(uint id, uint n, Pauli[] b, uint[] q);
private System.Random _random = new System.Random();
@@ -72,7 +72,8 @@ public override void Init()
var p = 1.0 - JointEnsembleProbability(Simulator.Id, (uint)count, paulis, qubits.GetIds());
preparation.Adjoint.Apply(qubits);
- var dist = new BinomialDistribution(samples, p);
+ var random = this.Simulator.Seed == 0 ? new System.Random() : new System.Random((int)this.Simulator.Seed);
+ var dist = new BinomialDistribution(samples, p, random);
return (double)dist.NextSample() / (double)samples;
}
finally
diff --git a/Standard/src/Standard.csproj b/Standard/src/Standard.csproj
index 0a76a0a94e6..b874e7d6fec 100644
--- a/Standard/src/Standard.csproj
+++ b/Standard/src/Standard.csproj
@@ -23,6 +23,6 @@
-
+
diff --git a/Standard/tests/Standard.Tests.csproj b/Standard/tests/Standard.Tests.csproj
index ec60d9ac842..75fb400ad75 100644
--- a/Standard/tests/Standard.Tests.csproj
+++ b/Standard/tests/Standard.Tests.csproj
@@ -20,8 +20,8 @@
-
-
+
+
diff --git a/build.yml b/build.yml
index a3155c184b6..dda94d08471 100644
--- a/build.yml
+++ b/build.yml
@@ -2,34 +2,26 @@
# Build configuration file to run build on azure-pipelines
#
name: $(Build.Major).$(Build.Minor).$(date:yyMM).$(DayOfMonth)$(rev:rr)
-trigger: none
-resources:
-- repo: self
+trigger:
+- master
+
variables:
Build.Major: 0
Build.Minor: 0
- LibrariesRootFolder: $(System.DefaultWorkingDirectory)
- DocsOutDir: ''
- Assembly.Constants: ''
- Assembly.Version: $(Build.BuildNumber)
- Nuget.Version: $(Assembly.Version)-preview
- Python.Version: $(Assembly.Version)
+ Drops.Dir: $(Build.ArtifactStagingDirectory)/drops
jobs:
- job: Windows
pool: 'Hosted VS2017'
steps:
- - template: Build/step-build-libs.yml
- - template: Build/step-build-magic.yml
+ - template: Build/steps.yml
- job: macOS
pool: 'Hosted macOS'
steps:
- - template: Build/step-build-libs.yml
- - template: Build/step-build-magic.yml
+ - template: Build/steps.yml
- job: Linux
pool: 'Hosted Ubuntu 1604'
steps:
- - template: Build/step-build-libs.yml
- - template: Build/step-build-magic.yml
+ - template: Build/steps.yml