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