diff --git a/.gitattributes b/.gitattributes index 1ff0c423042b..ef8281262d74 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,6 +2,7 @@ # Set default behavior to automatically normalize line endings. ############################################################################### * text=auto +*.sh text eol=lf ############################################################################### # Set default behavior for command prompt diff. diff --git a/.gitignore b/.gitignore index 7b22401c56fa..113fa990a3fa 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ +# Python temporary files +.ipynb_checkpoints + # Git ignore file for the Solid project # Build artifacts @@ -11,12 +14,16 @@ packages/ *.pdb *.exe *.chm -*.html # These files are generated by bootstrap from a .v.template (version template). # Any changes must be done to the corresponding the .v.template file directly Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.nuspec +# Python interop build outputs: +Interoperability/python/build +Interoperability/python/dist +Interoperability/python/qsharp.egg-info +Interoperability/python/qsharp/version.py # test outputs TestResults/ diff --git a/Docs/style-guide.md b/Docs/style-guide.md index 071363f27e57..b395a4502b25 100644 --- a/Docs/style-guide.md +++ b/Docs/style-guide.md @@ -8,7 +8,7 @@ - Avoid using people's names in operation and function names where reasonable. Consider using names that describe the implemented functionality; - e.g. `CCNOT` versus `Toffoli` or `CSWAP` versus `Fredikin `. + e.g. `CCNOT` versus `Toffoli` or `CSWAP` versus `Fredkin `. In sample code, consider using names that are familiar to the community reading each particular example, even if that would otherwise run counter to these suggestions. **NB:** names should still appear in documentation comments. - If an operation or function is not intended for direct use, but rather should be used by a matching callable which acts by partial application, consider using a name ending with `Impl` for the callable that is partially applied. diff --git a/Interoperability/python/environment.yml b/Interoperability/python/environment.yml new file mode 100644 index 000000000000..bc76f5ba1a5b --- /dev/null +++ b/Interoperability/python/environment.yml @@ -0,0 +1,19 @@ +## +# environment.yml: Specification of a conda environment for use with +# the Q# interoperability package. +## +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +## + +name: qsharp +channels: + - conda-forge + - pythonnet +dependencies: + - numpy + - pythonnet + - qutip + - matplotlib + - pip: + - qinfer diff --git a/Interoperability/python/packages.config b/Interoperability/python/packages.config new file mode 100644 index 000000000000..2a3e0ed54c4c --- /dev/null +++ b/Interoperability/python/packages.config @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Interoperability/python/qsharp/__init__.py b/Interoperability/python/qsharp/__init__.py new file mode 100644 index 000000000000..949fd88cc173 --- /dev/null +++ b/Interoperability/python/qsharp/__init__.py @@ -0,0 +1,230 @@ +#!/bin/env python +# -*- coding: utf-8 -*- +## +# __init__.py: Root module for Q# interoperability package. +## +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +## + +## IMPORTS ################################################################### + +# Standard Library Imports # + +from enum import IntEnum +from functools import partial, singledispatch +from abc import ABCMeta, abstractproperty +from random import randrange + +# HACK: In order to make DLLs that we ship with visible to Python.NET +# in the next step, we need to add the directory containing __file__ +# to sys.path. +import os.path +import sys +sys.path.append(os.path.split(__file__)[0]) + +# Version Information # +# We try to import version.py, and if not, set our version to None. +try: + import qsharp.version + __version__ = qsharp.version.version +except ImportError: + __version__ = "" + +# CLR Imports # + +import clr + +import System.Threading.Tasks +import Microsoft.Quantum.Simulation.Simulators as mqss + +# External Python Imports # + +try: + import colorama as ca + ca.init() + + SIMULATOR_COLOR = ca.Fore.BLUE + ca.Back.WHITE + RESET_COLOR = ca.Style.RESET_ALL +except: + ca = None + SIMULATOR_COLOR = "" + RESET_COLOR = "" + +try: + import qutip as qt +except: + qt = None + +try: + from IPython.display import display +except: + def display(value): + pass + +import qsharp.tomography +from qsharp.clr_wrapper import * + + +## ENUMERATIONS ############################################################## + +class SampleableEnum(IntEnum): + """ + Extends integer-valued enumerations to allow for uniformly sampling from + enumeration members. + """ + @classmethod + def random(cls): + """ + Returns a member of the enumeration uniformly at random. + """ + return cls(randrange(len(cls))) + +class Pauli(SampleableEnum): + """ + Represents the `Pauli` Q# type. + """ + I = 0 + X = 1 + Y = 2 + Z = 3 + + def as_qobj(self): + """ + Returns a representation of the given Pauli operator as a QuTiP + Qobj instance. + """ + if qt is None: + raise RuntimeError("Requires QuTiP.") + if self == Pauli.I: + return qt.qeye(2) + elif self == Pauli.X: + return qt.sigmax() + elif self == Pauli.Y: + return qt.sigmay() + else: + return qt.sigmaz() + +class Result(SampleableEnum): + """ + Represents the `Result` Q# type. + """ + + #: Represents a measurement corresponding to the $+1 = (-1)^0$ eigenvalue + #: of a Pauli operator. + Zero = 0 + + #: Represents a measurement corresponding to the $-1 = (-1)^1$ eigenvalue + #: of a Pauli operator. + One = 1 + +## FUNCTIONS ################################################################# + +@singledispatch +def wrap_clr_object(clr_object): + return WrappedCLRObject(clr_object) + +@wrap_clr_object.register(type(None)) +def _(none): + return None + +@wrap_clr_object.register(System.Threading.Tasks.Task) +def _(clr_object): + return Task(clr_object) + +## CLASSES ################################################################### + +class SimulatorOutput(object): + """ + Wraps a string for pretty-printing to Jupyter outputs. + """ + @classmethod + def display_output(cls, data): + display(cls(data)) + + def __init__(self, data): + self.data = data + + def __repr__(self): + return repr(self.data) + def __str__(self): + return "{}[Simulator]{} {}".format( + SIMULATOR_COLOR, RESET_COLOR, self.data + ) + + def _repr_html_(self): + return """ +
{}
+""".format(self.data) + +class Task(WrappedCLRObject): + _detailed_repr = False + + @property + def _friendly_name(self): + return "Asynchronous {} Task".format( + self.clr_type.GetGenericArguments()[0] + ) + + def result(self): + # Wait for the response first. This should be implied by self.Result, + # but we've seen some bugs occur related to that. + self.clr_object.Wait() + return wrap_clr_object(self.clr_object.Result) + +class Simulator(WrappedCLRObject): + _friendly_name = "Simulator" + + def __init__(self, clr_simulator): + if isinstance(clr_simulator, CLR_METATYPE): + clr_simulator = clr_simulator() + super(Simulator, self).__init__(clr_simulator) + + # Register a delegate to handle Message calls. + self.clr_object.OnLog += SimulatorOutput.display_output + + def get(self, clr_type): + return Callable(self, self.clr_object.Get[clr_type, clr_type]()) + + def run(self, clr_type, *args): + if isinstance(clr_type, Callable): + # Check if the passed in type is already wrapped in a Callable Python + # class. + return clr_type(*args) + else: + # We need to get the callable ourselves, then. + callable = self.get(clr_type) + return callable(*args) + +class QuantumSimulator(Simulator): + _friendly_name = "Quantum Simulator" + def __init__(self): + super(QuantumSimulator, self).__init__(mqss.QuantumSimulator) + +class Callable(WrappedCLRObject): + _detailed_repr = False + _parent = None + _include_plain_repr = False + + @property + def _friendly_name(self): + # TODO: extract operation signature! + return self.ToString() + + def __init__(self, parent, clr_callable): + self._parent = parent + super(Callable, self).__init__(clr_callable) + + def __call__(self, *args): + output = self.clr_object.Run( + unwrap_clr(self._parent), + *map(unwrap_clr, args) + ) + + if isinstance(type(output), CLR_METATYPE): + # Try to wrap the output as best as we can. + # We provide convienence wrappers for a few, so we call the + # single-dispatched convienence function above. + return wrap_clr_object(output) + else: + return output diff --git a/Interoperability/python/qsharp/__main__.py b/Interoperability/python/qsharp/__main__.py new file mode 100644 index 000000000000..e9bbfa67a5a4 --- /dev/null +++ b/Interoperability/python/qsharp/__main__.py @@ -0,0 +1,19 @@ +#!/bin/env python +# -*- coding: utf-8 -*- +## +# __main__.py: Main script for the Q# interoperability package. +## +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +## + +import qsharp + +from qsharp.tomography import single_qubit_process_tomography +from Microsoft.Quantum.Primitive import I + +qsim = qsharp.QuantumSimulator() +noise_channel = qsim.get(I) +estimation_results = single_qubit_process_tomography(qsim, noise_channel, n_measurements=2000) + +print(estimation_results['est_channel']) diff --git a/Interoperability/python/qsharp/clr_wrapper.py b/Interoperability/python/qsharp/clr_wrapper.py new file mode 100644 index 000000000000..1785d26bb3a5 --- /dev/null +++ b/Interoperability/python/qsharp/clr_wrapper.py @@ -0,0 +1,190 @@ + +#!/bin/env python +# -*- coding: utf-8 -*- +## +# clr_wrapper.py: Classes to wrap CLR objects to provide Jupyter integration. +## +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +## + + +## IMPORTS ################################################################### + +# Standard Library Imports # + +from abc import ABCMeta, abstractproperty +from random import randrange + +# CLR Imports # + +import clr +import System + +# External Python Imports # + +try: + from IPython.display import display +except ImportError: + def display(value): + pass + +## STYLESHEETS ############################################################### +# We load a custom stylesheet into Jupyter Notebook to allow formatting +# prettier CLR representation tables. +class Stylesheet(object): + def __init__(self, style): + self.style = style + def _repr_html_(self): + return "".format(self.style) + def __repr__(self): + return "" # We want to be invisible if we're not in Jupyter! + +display(Stylesheet(""" + .clr-repr-table td { + text-align: left; + } + + div.output_area pre.simulator-output { + border-left: solid 12px #409AE1; + padding-left: 4px; + margin-left: -4px + } +""")) + +## CONSTANTS ################################################################# + +# We find and record the metatype associated with Python representations of +# CLR types. Since this metatype is not directly exposed by the Python.NET +# API, we can find it by asking for the type of an Object type that we are +# guaranteed exists. + +#: The metatype common to all Python representations of CLR types. +CLR_METATYPE = type(System.Object) + +## CLASSES ################################################################### + +class WrappedCLRObject(object): + _detailed_repr = True + _friendly_name = "Wrapped CLR Object" + _include_plain_repr = True + + def __init__(self, clr_object): + self._clr_object = clr_object + + @property + def clr_object(self): + return self._clr_object + + @property + def clr_type(self): + return self.clr_object.GetType() + + def __getattr__(self, attr): + # Forward upper-cased attributes to the underlying CLR + # object. + if str.isupper(attr[0]): + return getattr(self.clr_object, attr) + else: + # This is only called on last resort, so we can raise + # the exception here without breaking anything. + raise AttributeError("{0.__class__} object has no attribute {1}".format(self, attr)) + + + def __repr__(self): + try: + return "<{ty_self.__name__}({self.clr_type.FullName}) at 0x{id_self:x}>".format(ty_self=type(self), self=self, id_self=id(self)) + except: + return "<{ty_self.__module__}{ty_self.__name__} at 0x{id_self:x}>".format(ty_self=type(self), id_self=id(self)) + + def __str__(self): + return self.clr_object.ToString() + + def _method_list(self): + clr_type = self.clr_type + methods = [ + "{0} {1}({2})".format( + method.ReturnType.Name, + method.Name, + ", ".join( + "{param.ParameterType.Name}<{contents}> {param.Name}".format( + param=param, + contents=', '.join(map(str, param.ParameterType.GenericTypeArguments)) + ) + for param in method.GetParameters() + ) + ) + for method in clr_type.GetMethods() + ] + + if methods: + return """ + + + Methods + + +
{}
+ + {} + + """.format( + methods[0], + "\n".join( + "
{}
".format(method) + for method in methods[1:] + ) + ) + else: + return "" + + def _repr_html_(self): + return """ + {self._friendly_name} + + {plain_repr} + + + + + + + + + + + + + + + + + {method_list} +
+ Python type + + {ty_self.__module__}.{ty_self.__name__} +
+ CLR type + + {self.clr_type.FullName} +
+ Assembly name + + {self.clr_type.Assembly.FullName} +
+ """.format( + plain_repr=""" + + +
{}
+ + + """.format(self.clr_object) if self._include_plain_repr else "", + ty_self=type(self), + self=self, + method_list=self._method_list() if self._detailed_repr else "" + ) + +def unwrap_clr(py_value): + return getattr(py_value, 'clr_object', py_value) diff --git a/Interoperability/python/qsharp/tests/__init__.py b/Interoperability/python/qsharp/tests/__init__.py new file mode 100644 index 000000000000..e69de29bb2d1 diff --git a/Interoperability/python/qsharp/tests/test_version.py b/Interoperability/python/qsharp/tests/test_version.py new file mode 100644 index 000000000000..c7618649168f --- /dev/null +++ b/Interoperability/python/qsharp/tests/test_version.py @@ -0,0 +1,25 @@ +#!/bin/env python +# -*- coding: utf-8 -*- +## +# test_version.py: Checks that version metadata agrees with bundled +# assemblies. +## +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +## + +import qsharp +from distutils.version import LooseVersion + +from nose.tools import eq_ + +def test_versions_match(): + """ + Check if Python and .NET assembly versions match. + """ + asm = qsharp.QuantumSimulator().clr_type.Assembly + asm_clr_version = asm.GetName().Version + + asm_version = LooseVersion(asm_clr_version.ToString()) + py_version = LooseVersion(qsharp.__version__) + eq_(asm_version, py_version) diff --git a/Interoperability/python/qsharp/tomography.py b/Interoperability/python/qsharp/tomography.py new file mode 100644 index 000000000000..31d6b520a896 --- /dev/null +++ b/Interoperability/python/qsharp/tomography.py @@ -0,0 +1,67 @@ +#!/bin/env python +# -*- coding: utf-8 -*- +## +# tomography.py: Single qubit tomography of Q# operations. +## +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +## + +## IMPORTS ## + +import qsharp + +import numpy as np +import qinfer as qi +import qutip as qt + +import clr + +def projector(P): + return (qt.qeye(2) + P) / 2.0 + +def single_qubit_process_tomography( + simulator, channel, + n_measurements=2000, + n_particles=4000 +): + from Microsoft.Quantum.Canon import SingleQubitProcessTomographyMeasurement + + print("Preparing tomography model...") + state_basis = qi.tomography.pauli_basis(1) + prior = qi.tomography.BCSZChoiDistribution(state_basis) + model = qi.tomography.TomographyModel(prior.basis) + + updater = qi.SMCUpdater(model, n_particles, prior) + + print("Performing tomography...") + for idx_experiment in range(n_measurements): + prep = qsharp.Pauli.random() + meas = qsharp.Pauli.random() + + # Convert into a QuTiP object by using the standard transformation + # between state and process tomography. + qobj = 2.0 * qt.tensor( + projector(prep.as_qobj()).trans(), projector(meas.as_qobj()) + ) + expparams = np.array( + [(model.basis.state_to_modelparams(qobj),)], + dtype=model.expparams_dtype + ) + + datum = 1 - simulator.run( + SingleQubitProcessTomographyMeasurement, + prep, meas, + channel + ).Result + + updater.update(datum, expparams) + + return { + # We multiply by 2 to turn into a Choi–Jamiłkowski operator instead + # of a Choi–Jamiłkowski state. + 'est_channel': 2.0 * model.basis.modelparams_to_state(updater.est_mean()), + # Returning the updater allows for exploring properties not extracted + # elsewhere. + 'posterior': updater + } diff --git a/Interoperability/python/setup.py b/Interoperability/python/setup.py new file mode 100644 index 000000000000..52326909925a --- /dev/null +++ b/Interoperability/python/setup.py @@ -0,0 +1,140 @@ +#!/usr/bin/env python +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. + +import sys + +from pathlib import Path +from shutil import copy +from setuptools import setup +from subprocess import call + +import os +import platform +import xml.etree.ElementTree + +from distutils.cmd import Command +from setuptools.command.build_py import build_py + +## CONFIGURATION ############################################################# +def pkgPlatform(): + if platform.system() == "Windows": + return "win10-x64" + elif platform.system() == "Darwin": + return "osx-x64" + elif platform.system() == "Linux": + return "linux-x64" + else: + return "unknown" + +VERSION = os.getenv('ASSEMBLY_VERSION', '0.0.0') +PLATFORM = os.getenv('PKG_PLATFORM', pkgPlatform()) +SRC_DIR = Path(__file__).parent.resolve() +QSHARP_PACKAGE_ROOT = SRC_DIR / "qsharp" + +## NUGET DEPENDENCIES ######################################################## +# We need to copy nuget dependencies into site-packages, so we first call nuget restore +# and then a nuget_copy +class NugetRestoreCommand(Command): + description = 'Calls nuget restore to get the binaries from the QDK.' + user_options = [ + ('packages-dir=', None, 'Specifies the location in which to look for NuGet packages.'), + ('packages-config=', None, 'Specifies the packages.config file used to find NuGet dependencies.') + ] + + def initialize_options(self): + self.packages_dir = SRC_DIR / "packages" + self.packages_config = SRC_DIR / "packages.config" + + def finalize_options(self): + pass + + def run(self): + call(["nuget", "restore", str(self.packages_config), "-PackagesDirectory", str(self.packages_dir)]) + +class CopyNugetDllsCommand(Command): + description = 'Copies binaries dependencies into this Python package for installation.' + user_options = [ + ('packages-dir=', None, 'Specifies the location in which to look for NuGet packages.'), + ('packages-config=', None, 'Specifies the packages.config file used to find NuGet dependencies.') + ] + + def initialize_options(self): + self.packages_dir = SRC_DIR / "packages" + self.packages_config = SRC_DIR / "packages.config" + + if self.packages_config.exists(): + self.packages_data = xml.etree.ElementTree.parse(str(self.packages_config)) + else: + raise IOError("NuGet packages.config file {} not found.".format(self.packages_config)) + + def finalize_options(self): + pass + + def run(self): + self.packages_dir = Path(self.packages_dir) + if not self.packages_dir.exists(): + self.run_command('nuget_restore') + + lib_dlls = [] + + for package_dir_node in self.packages_data.iter('package'): + package_dir = self.packages_dir / "{0[id]}.{0[version]}".format(package_dir_node.attrib) + framework = package_dir_node.attrib['targetFramework'] + + print("Found NuGet dependency:\n {}\n framework: {}".format(package_dir, framework)) + pkg_lib_dir = package_dir / "lib" / framework + pkg_runtime_dir = package_dir / "runtimes" / PLATFORM / "native" + + if pkg_lib_dir.exists(): + lib_dlls += list(pkg_lib_dir.glob("*.dll")) + + if pkg_runtime_dir.exists(): + lib_dlls += list(pkg_runtime_dir.glob("*.dll")) + + # Copy the libraries we found adjacent to qsharp/__init__.py so that they + # appear as package data. + print ("Copying DLLs into package root:") + for lib_dll in lib_dlls: + print(" - {}".format(lib_dll)) + copy(str(lib_dll), str(QSHARP_PACKAGE_ROOT)) + +class BuildPyCommand(build_py): + def write_version(self): + with open('qsharp/version.py', 'w') as f: + f.write(""" +# AUTOGENERATED, DO NOT MODIFY +version = "{}" +""".format(VERSION)) + + def run(self): + qsimDll = Path(QSHARP_PACKAGE_ROOT / "Microsoft.Quantum.Simulation.Simulators.dll") + if not qsimDll.exists(): + self.run_command('nuget_copy') + + self.write_version() + build_py.run(self) + +## SETUP MAIN ################################################################ + +setup( + cmdclass={ + 'nuget_restore': NugetRestoreCommand, + 'nuget_copy': CopyNugetDllsCommand, + 'build_py': BuildPyCommand + }, + name='qsharp', + # NB: "-preview" is not supported as a Python version identifier. + version=VERSION, + description='Python interoperability layer for the Quantum Development Kit', + author='Microsoft', + url='http://microsoft.com/quantum/', + packages=[ + 'qsharp', + 'qsharp.tests' + ], + package_data={ + 'qsharp': ["*.dll"] + }, + zip_safe=False +) diff --git a/LibraryTests/AssertTests.qs b/LibraryTests/AssertTests.qs index da7db70bf3b0..ff3ffc346a2b 100644 --- a/LibraryTests/AssertTests.qs +++ b/LibraryTests/AssertTests.qs @@ -46,6 +46,10 @@ namespace Microsoft.Quantum.Tests { AssertBoolEqual(true, false, "OK"); } + function AssertResultEqualTestShouldFail() : () { + AssertResultEqual(Zero, One, "OK"); + } + function AssertIntEqualTestShouldFail() : () { AssertIntEqual(12, 42, "OK"); } diff --git a/LibraryTests/LibraryTests.csproj b/LibraryTests/LibraryTests.csproj index 72684ce1a622..5b31c67e8d06 100644 --- a/LibraryTests/LibraryTests.csproj +++ b/LibraryTests/LibraryTests.csproj @@ -1,176 +1,32 @@ - - - - - - - + - Debug - AnyCPU - {0DF89F4F-F839-4EA8-802E-C8B18D4F6652} - Library - Properties - LibraryTests - LibraryTests - v4.6.1 - 512 - {3AC096D0-A1C2-E12C-1390-A8335801FDAB};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC} - 15.0 - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion) - $(ProgramFiles)\Common Files\microsoft shared\VSTT\$(VisualStudioVersion)\UITestExtensionPackages - False - UnitTest - - + netcoreapp2.0 + x64 + false + false + latest - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AnyCPU - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 + + 1701;1702;1705;0162;0219 + - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\packages\Microsoft.Quantum.Xunit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - ..\packages\Microsoft.Quantum.Xunit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.XUnit.dll - - - - - ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - ..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll - - - ..\packages\xunit.assert.2.3.1\lib\netstandard1.1\xunit.assert.dll - - - ..\packages\xunit.extensibility.core.2.3.1\lib\netstandard1.1\xunit.core.dll - - - ..\packages\xunit.extensibility.execution.2.3.1\lib\net452\xunit.execution.desktop.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - - - {7e3cbfa5-6dd8-4599-bd65-c5d2bed3b87a} - AdiabaticIsingSample - - - {72b1648c-83b0-4bbd-a877-cc651b587689} - BitFlipCode - - - {743ce57e-b96b-456e-9c32-10bf45756cd9} - DatabaseSearchSample - - - {f1560649-37e2-4a95-938d-f4b48644583d} - IsingPhaseEstimationSample - - - {ecc1dab3-ccef-47ed-bfbe-44e273c60776} - Measurement - - - {f36c17e3-68ea-4ecf-828e-3fdeffd8941d} - PhaseEstimationSample - - - {3754cbc9-6d79-4682-aa26-19f6fb589aa2} - SimpleAlgorithms - + + + + + + + + + - + + + + + + - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - - - \ No newline at end of file + diff --git a/LibraryTests/QcvvTests.qs b/LibraryTests/QcvvTests.qs index 3331e5eadadc..ce67079caf6f 100644 --- a/LibraryTests/QcvvTests.qs +++ b/LibraryTests/QcvvTests.qs @@ -45,7 +45,7 @@ namespace Microsoft.Quantum.Tests { controlled auto controlled adjoint auto } - + operation RobustPhaseEstimationDemoImpl(phaseSet : Double, bitsPrecision: Int) : Double{ body { let op = DiscreteOracle(_RobustPhaseEstimationTestOp(phaseSet, _, _)); @@ -72,5 +72,33 @@ namespace Microsoft.Quantum.Tests { } } + operation PrepareQubitTest() : () { + body { + using (register = Qubit[1]) { + let qubit = register[0]; + let bases = [PauliI; PauliX; PauliY; PauliZ]; + + for (idxBasis in 0..Length(bases) - 1) { + let basis = bases[idxBasis]; + PrepareQubit(basis, qubit); + Assert([basis], register, Zero, $"Did not prepare in {basis} correctly."); + Reset(qubit); + } + } + } + } + + operation SingleQubitProcessTomographyMeasurementTest() : () { + body { + AssertResultEqual(SingleQubitProcessTomographyMeasurement(PauliI, PauliI, H), Zero, "Failed at ⟪I | H | I⟫."); + AssertResultEqual(SingleQubitProcessTomographyMeasurement(PauliX, PauliI, H), Zero, "Failed at ⟪I | H | X⟫."); + AssertResultEqual(SingleQubitProcessTomographyMeasurement(PauliY, PauliI, H), Zero, "Failed at ⟪I | H | Y⟫."); + AssertResultEqual(SingleQubitProcessTomographyMeasurement(PauliZ, PauliI, H), Zero, "Failed at ⟪I | H | Z⟫."); + + AssertResultEqual(SingleQubitProcessTomographyMeasurement(PauliX, PauliZ, H), Zero, "Failed at ⟪Z | H | X⟫."); + AssertResultEqual(SingleQubitProcessTomographyMeasurement(PauliY, PauliY, H), One, "Failed at -⟪Y | H | Y⟫."); + AssertResultEqual(SingleQubitProcessTomographyMeasurement(PauliX, PauliZ, H), Zero, "Failed at ⟪Z | H | X⟫."); + } + } } diff --git a/LibraryTests/packages.config b/LibraryTests/packages.config deleted file mode 100644 index facc505abd1a..000000000000 --- a/LibraryTests/packages.config +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/Microsoft.Quantum.Canon/Arithmetic/Arithmetic.qs b/Microsoft.Quantum.Canon/Arithmetic/Arithmetic.qs index 0dd47f3acb19..73f2b7630e61 100644 --- a/Microsoft.Quantum.Canon/Arithmetic/Arithmetic.qs +++ b/Microsoft.Quantum.Canon/Arithmetic/Arithmetic.qs @@ -123,16 +123,20 @@ namespace Microsoft.Quantum.Canon { } /// # Summary - /// Asserts that the highest bit of an unsigned integer has given value + /// Asserts that the highest qubit of a qubit register + /// representing an unsigned integer is in a particular state. /// /// # Input /// ## value - /// The value of the highest bit being asserted + /// The value of the highest bit being asserted. /// ## number - /// Unsigned integer of which the highest bit is checked + /// Unsigned integer of which the highest bit is checked. /// /// # Remarks /// The controlled version of this operation ignores controls. + /// + /// # See Also + /// - Microsoft.Quantum.Primitive.Assert operation AssertHighestBit( value : Result, number : LittleEndian ) : () { body{ let mostSingificantQubit = Tail(AsQubitArray(number)); @@ -235,7 +239,8 @@ namespace Microsoft.Quantum.Canon { } /// # Summary - /// Copies the most significant bit of `from` into target + /// Copies the most significant bit of a qubit register + /// `from` representing an unsigned integer into the qubit `target`. /// /// # Input /// ## from @@ -353,9 +358,25 @@ namespace Microsoft.Quantum.Canon { } /// # Summary - /// Let us denote modulus by N, constMultiplier by a, multiplier by x - /// and summand by y, then this operation is given by map - /// |x⟩|b⟩ ↦ |x⟩| (b + a⋅x) (mod N) ⟩ + /// Implements the map + /// $$ + /// \begin{align} + /// \ket{x} \ket{b} \mapsto \ket{x} \ket{b + a \cdot x \operatorname{mod} N} + /// \end{align} + /// $$ + /// for a given modulus $N$, constant multiplier $a$, and summand $y$. + /// + /// # Input + /// ## constantMultiplier + /// An integer $a$ to be added to each basis state label. + /// ## modulus + /// The modulus $N$ which addition and multiplication is taken with respect to. + /// ## multiplier + /// A quantum register representing an unsigned integer whose value is to + /// be added to each basis state label of `summand`. + /// ## summand + /// A quantum register representing an unsigned integer to use as the target + /// for this operation. /// /// # Remarks /// - For the circuit diagram and explanation see Figure 6 on [Page 7 diff --git a/Microsoft.Quantum.Canon/Asserts/ClassicalAsserts.qs b/Microsoft.Quantum.Canon/Asserts/ClassicalAsserts.qs index 00ed29d189fd..11aeb87bee61 100644 --- a/Microsoft.Quantum.Canon/Asserts/ClassicalAsserts.qs +++ b/Microsoft.Quantum.Canon/Asserts/ClassicalAsserts.qs @@ -79,6 +79,24 @@ namespace Microsoft.Quantum.Canon { } } + /// # Summary + /// Asserts that a classical Result variable has the expected value. + /// + /// # Input + /// ## actual + /// The variable to be checked. + /// + /// ## expected + /// The expected value. + /// + /// ## message + /// Failure message string to be used when the assertion is triggered. + function AssertResultEqual ( actual : Result, expected : Result, message : String ) : () { + if( actual != expected ) { + fail message; + } + } + /// # Summary /// Asserts that two arrays of boolean values are equal. /// diff --git a/Microsoft.Quantum.Canon/Math/Functions.qs b/Microsoft.Quantum.Canon/Math/Functions.qs index 0dfc397a2df3..d28ade6b73f4 100644 --- a/Microsoft.Quantum.Canon/Math/Functions.qs +++ b/Microsoft.Quantum.Canon/Math/Functions.qs @@ -107,7 +107,7 @@ namespace Microsoft.Quantum.Canon { /// /// # Input /// ## x - /// A real number $x$. + /// A real number $x\geq 1$. /// /// # Output /// A real number $y$ such that $x = \cosh(y)$. @@ -331,15 +331,15 @@ namespace Microsoft.Quantum.Canon { } /// # Summary - /// For non-negative integer `a` returns the smallest n such - /// that a < 2ⁿ . + /// For a non-negative integer `a`, returns the smallest $n$ such + /// that $a < 2^n$. /// /// # Input /// ## a - /// The integer bit-size of which is computed. + /// The integer whose bit-size is to be computed. /// /// # Output - /// The bit-size of `a` + /// The bit-size of `a`. function BitSize( a : Int ) : Int { AssertBoolEqual(a >= 0 , true, "`a` must be non-negative"); mutable bitsize = 0; diff --git a/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.csproj b/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.csproj index 464b9ee01c1d..b7954d458d2f 100644 --- a/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.csproj +++ b/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.csproj @@ -1,159 +1,13 @@ - - - - + - Debug - AnyCPU - {2A1B0D78-2CE6-44DB-BFA1-3575F3C36321} - Library - Properties - Microsoft.Quantum.Canon - Microsoft.Quantum.Canon - v4.6.1 - 512 - - - True - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - AnyCPU - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full + netstandard2.0 x64 - prompt - MinimumRecommendedRules.ruleset - - true - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset + + 1701;1702;1705;0162;0219 + - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - - - - ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.nuspec.v.template b/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.nuspec.v.template index 8791be3e1968..986cb1085222 100644 --- a/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.nuspec.v.template +++ b/Microsoft.Quantum.Canon/Microsoft.Quantum.Canon.nuspec.v.template @@ -13,5 +13,13 @@ Microsoft's Quantum Core Libraries. © Microsoft Corporation. All rights reserved. Quantum Q# Qsharp + + + + + + + + \ No newline at end of file diff --git a/Microsoft.Quantum.Canon/Properties/AssemblyInfo.cs b/Microsoft.Quantum.Canon/Properties/AssemblyInfo.cs deleted file mode 100644 index fbe4cb575e32..000000000000 --- a/Microsoft.Quantum.Canon/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,39 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Microsoft.Quantum.Canon")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("Microsoft")] -[assembly: AssemblyProduct("Microsoft.Quantum.Canon")] -[assembly: AssemblyCopyright("Copyright (c) 2017 Microsoft Corporation. All Rights Reserved.")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("2a1b0d78-2ce6-44db-bfa1-3575f3c36321")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("0.1.*")] diff --git a/Microsoft.Quantum.Canon/Qcvv/ProcessTomography.qs b/Microsoft.Quantum.Canon/Qcvv/ProcessTomography.qs index b60005017909..13aaf8eb0da7 100644 --- a/Microsoft.Quantum.Canon/Qcvv/ProcessTomography.qs +++ b/Microsoft.Quantum.Canon/Qcvv/ProcessTomography.qs @@ -156,6 +156,32 @@ namespace Microsoft.Quantum.Canon { } } + /// # Summary + /// Given a single qubit initially in the $\ket{0}$ state, prepares the + /// qubit in the $+1$ eigenstate of a given Pauli operator, or in the + /// maximally mixed state for the $\boldone$ Pauli operator `PauliI`. + /// + /// # Input + /// ## basis + /// A Pauli operator $P$ such that measuring $P$ immediately after this + /// operation will return `Zero`. + /// ## qubit + /// A qubit initially in the $\ket{0}$ state which is to be prepared in + /// the given basis. + operation PrepareQubit(basis : Pauli, qubit : Qubit) : () { + body { + if (basis == PauliI) { + PrepareSingleQubitIdentity(qubit); + } elif (basis == PauliX) { + H(qubit); + } elif (basis == PauliY) { + H(qubit); + S(qubit); + } + } + } + + /// # Summary /// Given two registers, prepares the maximally entangled state /// $\bra{\beta_{00}}\ket{\beta_{00}}$ between each pair of qubits on the respective registers, @@ -256,6 +282,7 @@ namespace Microsoft.Quantum.Canon { /// # Summary /// Prepares the Choi–Jamiłkowski state for a given operation with both controlled and adjoint variants onto given reference /// and target registers. + /// /// # See Also /// - @"microsoft.quantum.canon.preparechoistate" operation PrepareChoiStateCA(op : (Qubit[] => () : Controlled, Adjoint), reference : Qubit[], target : Qubit[]) : () { @@ -269,4 +296,65 @@ namespace Microsoft.Quantum.Canon { controlled adjoint auto } + + /// # Summary + /// Performs a single-qubit process tomography measurement in the Pauli + /// basis, given a particular channel of interest. + /// + /// # Input + /// ## preparation + /// The Pauli basis element $P$ in which a qubit is to be prepared. + /// ## measurement + /// The Pauli basis element $Q$ in which a qubit is to be measured. + /// ## channel + /// A single qubit channel $\Lambda$ whose behavior is being estimated + /// with process tomography. + /// + /// # Output + /// The Result `Zero` with probability + /// $$ + /// \begin{align} + /// \Pr(\texttt{Zero} | \Lambda; P, Q) = \Tr\left( + /// \frac{\boldone + Q}{2} \Lambda\left[ + /// \frac{\boldone + P}{2} + /// \right] + /// \right). + /// \end{align} + /// $$ + /// + /// # Remarks + /// The distribution over results returned by this operation is a special + /// case of two-qubit state tomography. Let $\rho = J(\Lambda) / 2$ be + /// the Choi–Jamiłkowski state for $\Lambda$. Then, the distribution above + /// is identical to + /// $$ + /// \begin{align} + /// \Pr(\texttt{Zero} | \rho; M) = \Tr(M \rho), + /// \end{align} + /// $$ + /// where $M = 2 (\boldone + P)^\mathrm{T} / 2 \cdot (\boldone + Q) / 2$ + /// is the effective measurement corresponding to $P$ and $Q$. + operation SingleQubitProcessTomographyMeasurement( + preparation : Pauli, + measurement : Pauli, + channel : (Qubit => ()) + ) : Result { + body { + mutable result = Zero; + + using (register = Qubit[1]) { + let qubit = register[0]; + + PrepareQubit(preparation, qubit); + channel(qubit); + set result = Measure([measurement], [qubit]); + + Reset(qubit); + } + + return result; + } + } + + } diff --git a/Microsoft.Quantum.Canon/Qecc/KnillDistill.qs b/Microsoft.Quantum.Canon/Qecc/KnillDistill.qs index 14b8ea7e6e51..4566692141d7 100644 --- a/Microsoft.Quantum.Canon/Qecc/KnillDistill.qs +++ b/Microsoft.Quantum.Canon/Qecc/KnillDistill.qs @@ -67,7 +67,7 @@ namespace Microsoft.Quantum.Canon { /// \begin{align} /// \cos\frac{\pi}{8} \ket{0} + \sin \frac{\pi}{8} \ket{1}. /// \end{align} - /// $$. + /// $$ /// /// # Input /// ## data @@ -129,9 +129,10 @@ namespace Microsoft.Quantum.Canon { /// Given 15 approximate copies of a magic state /// $$ /// \begin{align} - /// \cos\frac{\pi}{8} \ket{0} + \sin \frac{\pi}{8} \ket{1}. + /// \cos\frac{\pi}{8} \ket{0} + \sin \frac{\pi}{8} \ket{1} /// \end{align}, - /// $$ yields one higher-quality copy. + /// $$ + /// yields one higher-quality copy. /// /// # Input /// ## roughMagic diff --git a/Microsoft.Quantum.Canon/Utils/Paulis.qs b/Microsoft.Quantum.Canon/Utils/Paulis.qs index e9f6fec09191..7fbe17f9074b 100644 --- a/Microsoft.Quantum.Canon/Utils/Paulis.qs +++ b/Microsoft.Quantum.Canon/Utils/Paulis.qs @@ -370,6 +370,24 @@ namespace Microsoft.Quantum.Canon { } } + /// # Summary + /// Applies the Hadamard transformation $H_Y = S H$ + /// between the $Z$ and $Y$ bases to a single qubit, + /// + /// \begin{align} + /// H_Y \mathrel{:=} + /// \frac{1}{\sqrt{2}} + /// \begin{bmatrix} + /// 1 & 1 \\\\ + /// i & -i + /// \end{bmatrix}. + /// \end{align} + /// + /// # Input + /// ## qubit + /// Qubit to which the gate should be applied. + /// + /// # See Also operation HY(target : Qubit) : () { body { H(target); diff --git a/Microsoft.Quantum.Canon/packages.config b/Microsoft.Quantum.Canon/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Microsoft.Quantum.Canon/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/QsharpLibraries.sln b/QsharpLibraries.sln index 9ff783066c70..452aa33b880f 100644 --- a/QsharpLibraries.sln +++ b/QsharpLibraries.sln @@ -1,9 +1,8 @@ - Microsoft Visual Studio Solution File, Format Version 12.00 # Visual Studio 15 VisualStudioVersion = 15.0.26730.16 MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Microsoft.Quantum.Canon", "Microsoft.Quantum.Canon\Microsoft.Quantum.Canon.csproj", "{2A1B0D78-2CE6-44DB-BFA1-3575F3C36321}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Quantum.Canon", "Microsoft.Quantum.Canon\Microsoft.Quantum.Canon.csproj", "{2A1B0D78-2CE6-44DB-BFA1-3575F3C36321}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Documentation", "Documentation", "{561759D2-4D2D-4EE3-9565-9AAEC4A7D64B}" ProjectSection(SolutionItems) = preProject @@ -15,51 +14,55 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Samples", "Samples", "{614D Samples\README.md = Samples\README.md EndProjectSection EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TeleportationSample", "Samples\Teleportation\TeleportationSample.csproj", "{B88BE160-367F-43F1-BB56-8E21972D43D4}" -EndProject -Project("{F2A71F9B-5D33-465A-A702-920D77279786}") = "H2SimulationSampleGUI", "Samples\H2SimulationGUI\H2SimulationSampleGUI.fsproj", "{73DE9730-9C8B-415F-9016-EB414CE1B3C7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "TeleportationSample", "Samples\Teleportation\TeleportationSample.csproj", "{B88BE160-367F-43F1-BB56-8E21972D43D4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Ising Model", "Ising Model", "{6E6063FB-43EB-41D1-B095-4701A5D966BF}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AdiabaticIsingSample", "Samples\AdiabaticIsing\AdiabaticIsingSample.csproj", "{7E3CBFA5-6DD8-4599-BD65-C5D2BED3B87A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "AdiabaticIsingSample", "Samples\AdiabaticIsing\AdiabaticIsingSample.csproj", "{7E3CBFA5-6DD8-4599-BD65-C5D2BED3B87A}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "PhaseEstimationSample", "Samples\PhaseEstimation\PhaseEstimationSample.csproj", "{F36C17E3-68EA-4ECF-828E-3FDEFFD8941D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PhaseEstimationSample", "Samples\PhaseEstimation\PhaseEstimationSample.csproj", "{F36C17E3-68EA-4ECF-828E-3FDEFFD8941D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleIsingSample", "Samples\SimpleIsing\SimpleIsingSample.csproj", "{55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleIsingSample", "Samples\SimpleIsing\SimpleIsingSample.csproj", "{55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IsingPhaseEstimationSample", "Samples\IsingPhaseEstimation\IsingPhaseEstimationSample.csproj", "{F1560649-37E2-4A95-938D-F4B48644583D}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IsingPhaseEstimationSample", "Samples\IsingPhaseEstimation\IsingPhaseEstimationSample.csproj", "{F1560649-37E2-4A95-938D-F4B48644583D}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IsingGeneratorsSample", "Samples\IsingGenerators\IsingGeneratorsSample.csproj", "{179B52ED-B81F-4844-A263-8E49D6DAB4A5}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IsingGeneratorsSample", "Samples\IsingGenerators\IsingGeneratorsSample.csproj", "{179B52ED-B81F-4844-A263-8E49D6DAB4A5}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LibraryTests", "LibraryTests\LibraryTests.csproj", "{0DF89F4F-F839-4EA8-802E-C8B18D4F6652}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibraryTests", "LibraryTests\LibraryTests.csproj", "{0DF89F4F-F839-4EA8-802E-C8B18D4F6652}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "DatabaseSearchSample", "Samples\DatabaseSearch\DatabaseSearchSample.csproj", "{743CE57E-B96B-456E-9C32-10BF45756CD9}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "DatabaseSearchSample", "Samples\DatabaseSearch\DatabaseSearchSample.csproj", "{743CE57E-B96B-456E-9C32-10BF45756CD9}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "0. Introduction", "0. Introduction", "{87B15726-C98C-4D4D-A959-CC57D6B10789}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "1. Algorithms", "1. Algorithms", "{3065C0E5-A209-4688-93DB-6BD85127D7B8}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SimpleAlgorithms", "Samples\SimpleAlgorithms\SimpleAlgorithms.csproj", "{3754CBC9-6D79-4682-AA26-19F6FB589AA2}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "SimpleAlgorithms", "Samples\SimpleAlgorithms\SimpleAlgorithms.csproj", "{3754CBC9-6D79-4682-AA26-19F6FB589AA2}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2. Characterization and Testing", "2. Characterization and Testing", "{AEEA483D-7AA4-4B61-A989-ADAAC8C84458}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3. Simulation", "3. Simulation", "{AB49B48F-9250-4076-A939-CFB24D09C8A7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "UnitTesting", "Samples\UnitTesting\UnitTesting.csproj", "{2606956D-E795-4EA5-957A-C41A9A79CAA9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "BitFlipCode", "Samples\BitFlipCode\BitFlipCode.csproj", "{72B1648C-83B0-4BBD-A877-CC651B587689}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BitFlipCode", "Samples\BitFlipCode\BitFlipCode.csproj", "{72B1648C-83B0-4BBD-A877-CC651B587689}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Measurement", "Samples\Measurement\Measurement.csproj", "{ECC1DAB3-CCEF-47ED-BFBE-44E273C60776}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Measurement", "Samples\Measurement\Measurement.csproj", "{ECC1DAB3-CCEF-47ED-BFBE-44E273C60776}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IsingTrotterSample", "Samples\IsingTrotterEvolution\IsingTrotterSample.csproj", "{F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IsingTrotterSample", "Samples\IsingTrotterEvolution\IsingTrotterSample.csproj", "{F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "HubbardSimulationSample", "Samples\HubbardSimulation\HubbardSimulationSample.csproj", "{8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "HubbardSimulationSample", "Samples\HubbardSimulation\HubbardSimulationSample.csproj", "{8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "IntegerFactorization", "Samples\IntegerFactorization\IntegerFactorization.csproj", "{7D655364-1C17-488E-8E9A-01A04C5898CD}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "IntegerFactorization", "Samples\IntegerFactorization\IntegerFactorization.csproj", "{7D655364-1C17-488E-8E9A-01A04C5898CD}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "H₂ Simulation", "H₂ Simulation", "{461F5123-AB62-4FDE-8964-EE4A952BAFC2}" EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "H2SimulationSampleCmdLine", "Samples\H2SimulationCmdLine\H2SimulationSampleCmdLine.csproj", "{35967B2F-472A-4647-BBF8-4128838D354A}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H2SimulationSampleCmdLine", "Samples\H2SimulationCmdLine\H2SimulationSampleCmdLine.csproj", "{35967B2F-472A-4647-BBF8-4128838D354A}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Microsoft.Quantum.Canon.Tests", "Samples\UnitTesting\Microsoft.Quantum.Canon.Tests.csproj", "{66A3651C-7B99-42D5-AFE2-E2A115CFECD1}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "H2SimulationGUI", "Samples\H2SimulationGUI\H2SimulationGUI.csproj", "{6AF1B129-586C-4150-8330-7444A24B7FB6}" +EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "PythonInterop", "Samples\PythonInterop\PythonInterop.csproj", "{191B1B56-B7A7-422B-9F21-1EC175132C37}" +EndProject +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "4. Interoperability", "4. Interoperability", "{A6237CFB-5897-452B-916B-9A9867EAD93F}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution @@ -93,34 +96,18 @@ Global {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|Any CPU.Build.0 = Debug|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|ARM.ActiveCfg = Debug|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|ARM.Build.0 = Debug|Any CPU - {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|x64.ActiveCfg = Debug|x64 - {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|x64.Build.0 = Debug|x64 + {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|x64.ActiveCfg = Debug|Any CPU + {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|x64.Build.0 = Debug|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|x86.ActiveCfg = Debug|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Debug|x86.Build.0 = Debug|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|Any CPU.ActiveCfg = Release|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|Any CPU.Build.0 = Release|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|ARM.ActiveCfg = Release|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|ARM.Build.0 = Release|Any CPU - {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|x64.ActiveCfg = Release|x64 - {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|x64.Build.0 = Release|x64 + {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|x64.ActiveCfg = Release|Any CPU + {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|x64.Build.0 = Release|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|x86.ActiveCfg = Release|Any CPU {B88BE160-367F-43F1-BB56-8E21972D43D4}.Release|x86.Build.0 = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|ARM.ActiveCfg = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|ARM.Build.0 = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|x64.ActiveCfg = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|x64.Build.0 = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|x86.ActiveCfg = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Debug|x86.Build.0 = Debug|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|Any CPU.Build.0 = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|ARM.ActiveCfg = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|ARM.Build.0 = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|x64.ActiveCfg = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|x64.Build.0 = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|x86.ActiveCfg = Release|Any CPU - {73DE9730-9C8B-415F-9016-EB414CE1B3C7}.Release|x86.Build.0 = Release|Any CPU {7E3CBFA5-6DD8-4599-BD65-C5D2BED3B87A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {7E3CBFA5-6DD8-4599-BD65-C5D2BED3B87A}.Debug|Any CPU.Build.0 = Debug|Any CPU {7E3CBFA5-6DD8-4599-BD65-C5D2BED3B87A}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -157,48 +144,48 @@ Global {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|Any CPU.Build.0 = Debug|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|ARM.ActiveCfg = Debug|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|ARM.Build.0 = Debug|Any CPU - {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|x64.ActiveCfg = Debug|x64 - {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|x64.Build.0 = Debug|x64 + {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|x64.ActiveCfg = Debug|Any CPU + {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|x64.Build.0 = Debug|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|x86.ActiveCfg = Debug|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Debug|x86.Build.0 = Debug|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|Any CPU.ActiveCfg = Release|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|Any CPU.Build.0 = Release|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|ARM.ActiveCfg = Release|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|ARM.Build.0 = Release|Any CPU - {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|x64.ActiveCfg = Release|x64 - {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|x64.Build.0 = Release|x64 + {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|x64.ActiveCfg = Release|Any CPU + {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|x64.Build.0 = Release|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|x86.ActiveCfg = Release|Any CPU {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C}.Release|x86.Build.0 = Release|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|Any CPU.Build.0 = Debug|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|ARM.ActiveCfg = Debug|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|ARM.Build.0 = Debug|Any CPU - {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|x64.ActiveCfg = Debug|x64 - {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|x64.Build.0 = Debug|x64 + {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|x64.ActiveCfg = Debug|Any CPU + {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|x64.Build.0 = Debug|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|x86.ActiveCfg = Debug|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Debug|x86.Build.0 = Debug|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Release|Any CPU.ActiveCfg = Release|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Release|Any CPU.Build.0 = Release|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Release|ARM.ActiveCfg = Release|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Release|ARM.Build.0 = Release|Any CPU - {F1560649-37E2-4A95-938D-F4B48644583D}.Release|x64.ActiveCfg = Release|x64 - {F1560649-37E2-4A95-938D-F4B48644583D}.Release|x64.Build.0 = Release|x64 + {F1560649-37E2-4A95-938D-F4B48644583D}.Release|x64.ActiveCfg = Release|Any CPU + {F1560649-37E2-4A95-938D-F4B48644583D}.Release|x64.Build.0 = Release|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Release|x86.ActiveCfg = Release|Any CPU {F1560649-37E2-4A95-938D-F4B48644583D}.Release|x86.Build.0 = Release|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|Any CPU.Build.0 = Debug|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|ARM.ActiveCfg = Debug|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|ARM.Build.0 = Debug|Any CPU - {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|x64.ActiveCfg = Debug|x64 - {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|x64.Build.0 = Debug|x64 + {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|x64.ActiveCfg = Debug|Any CPU + {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|x64.Build.0 = Debug|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|x86.ActiveCfg = Debug|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Debug|x86.Build.0 = Debug|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|Any CPU.ActiveCfg = Release|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|Any CPU.Build.0 = Release|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|ARM.ActiveCfg = Release|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|ARM.Build.0 = Release|Any CPU - {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|x64.ActiveCfg = Release|x64 - {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|x64.Build.0 = Release|x64 + {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|x64.ActiveCfg = Release|Any CPU + {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|x64.Build.0 = Release|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|x86.ActiveCfg = Release|Any CPU {179B52ED-B81F-4844-A263-8E49D6DAB4A5}.Release|x86.Build.0 = Release|Any CPU {0DF89F4F-F839-4EA8-802E-C8B18D4F6652}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -249,22 +236,6 @@ Global {3754CBC9-6D79-4682-AA26-19F6FB589AA2}.Release|x64.Build.0 = Release|Any CPU {3754CBC9-6D79-4682-AA26-19F6FB589AA2}.Release|x86.ActiveCfg = Release|Any CPU {3754CBC9-6D79-4682-AA26-19F6FB589AA2}.Release|x86.Build.0 = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|ARM.ActiveCfg = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|ARM.Build.0 = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|x64.ActiveCfg = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|x64.Build.0 = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|x86.ActiveCfg = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Debug|x86.Build.0 = Debug|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|Any CPU.Build.0 = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|ARM.ActiveCfg = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|ARM.Build.0 = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|x64.ActiveCfg = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|x64.Build.0 = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|x86.ActiveCfg = Release|Any CPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9}.Release|x86.Build.0 = Release|Any CPU {72B1648C-83B0-4BBD-A877-CC651B587689}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {72B1648C-83B0-4BBD-A877-CC651B587689}.Debug|Any CPU.Build.0 = Debug|Any CPU {72B1648C-83B0-4BBD-A877-CC651B587689}.Debug|ARM.ActiveCfg = Debug|Any CPU @@ -301,32 +272,32 @@ Global {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|Any CPU.Build.0 = Debug|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|ARM.ActiveCfg = Debug|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|ARM.Build.0 = Debug|Any CPU - {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|x64.ActiveCfg = Debug|x64 - {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|x64.Build.0 = Debug|x64 + {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|x64.ActiveCfg = Debug|Any CPU + {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|x64.Build.0 = Debug|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|x86.ActiveCfg = Debug|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Debug|x86.Build.0 = Debug|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|Any CPU.ActiveCfg = Release|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|Any CPU.Build.0 = Release|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|ARM.ActiveCfg = Release|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|ARM.Build.0 = Release|Any CPU - {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|x64.ActiveCfg = Release|x64 - {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|x64.Build.0 = Release|x64 + {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|x64.ActiveCfg = Release|Any CPU + {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|x64.Build.0 = Release|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|x86.ActiveCfg = Release|Any CPU {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93}.Release|x86.Build.0 = Release|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|Any CPU.Build.0 = Debug|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|ARM.ActiveCfg = Debug|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|ARM.Build.0 = Debug|Any CPU - {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|x64.ActiveCfg = Debug|x64 - {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|x64.Build.0 = Debug|x64 + {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|x64.ActiveCfg = Debug|Any CPU + {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|x64.Build.0 = Debug|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|x86.ActiveCfg = Debug|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Debug|x86.Build.0 = Debug|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|Any CPU.ActiveCfg = Release|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|Any CPU.Build.0 = Release|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|ARM.ActiveCfg = Release|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|ARM.Build.0 = Release|Any CPU - {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|x64.ActiveCfg = Release|x64 - {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|x64.Build.0 = Release|x64 + {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|x64.ActiveCfg = Release|Any CPU + {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|x64.Build.0 = Release|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|x86.ActiveCfg = Release|Any CPU {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7}.Release|x86.Build.0 = Release|Any CPU {7D655364-1C17-488E-8E9A-01A04C5898CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU @@ -361,13 +332,60 @@ Global {35967B2F-472A-4647-BBF8-4128838D354A}.Release|x64.Build.0 = Release|Any CPU {35967B2F-472A-4647-BBF8-4128838D354A}.Release|x86.ActiveCfg = Release|Any CPU {35967B2F-472A-4647-BBF8-4128838D354A}.Release|x86.Build.0 = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|Any CPU.Build.0 = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|ARM.ActiveCfg = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|ARM.Build.0 = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|x64.ActiveCfg = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|x64.Build.0 = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|x86.ActiveCfg = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Debug|x86.Build.0 = Debug|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|Any CPU.ActiveCfg = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|Any CPU.Build.0 = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|ARM.ActiveCfg = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|ARM.Build.0 = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|x64.ActiveCfg = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|x64.Build.0 = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|x86.ActiveCfg = Release|Any CPU + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1}.Release|x86.Build.0 = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|Any CPU.Build.0 = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|ARM.ActiveCfg = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|ARM.Build.0 = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|x64.ActiveCfg = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|x64.Build.0 = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|x86.ActiveCfg = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Debug|x86.Build.0 = Debug|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|Any CPU.ActiveCfg = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|Any CPU.Build.0 = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|ARM.ActiveCfg = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|ARM.Build.0 = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|x64.ActiveCfg = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|x64.Build.0 = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|x86.ActiveCfg = Release|Any CPU + {6AF1B129-586C-4150-8330-7444A24B7FB6}.Release|x86.Build.0 = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|Any CPU.Build.0 = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|ARM.ActiveCfg = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|ARM.Build.0 = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|x64.ActiveCfg = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|x64.Build.0 = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|x86.ActiveCfg = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Debug|x86.Build.0 = Debug|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|Any CPU.ActiveCfg = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|Any CPU.Build.0 = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|ARM.ActiveCfg = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|ARM.Build.0 = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|x64.ActiveCfg = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|x64.Build.0 = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|x86.ActiveCfg = Release|Any CPU + {191B1B56-B7A7-422B-9F21-1EC175132C37}.Release|x86.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection GlobalSection(NestedProjects) = preSolution {B88BE160-367F-43F1-BB56-8E21972D43D4} = {87B15726-C98C-4D4D-A959-CC57D6B10789} - {73DE9730-9C8B-415F-9016-EB414CE1B3C7} = {461F5123-AB62-4FDE-8964-EE4A952BAFC2} {6E6063FB-43EB-41D1-B095-4701A5D966BF} = {AB49B48F-9250-4076-A939-CFB24D09C8A7} {7E3CBFA5-6DD8-4599-BD65-C5D2BED3B87A} = {6E6063FB-43EB-41D1-B095-4701A5D966BF} {F36C17E3-68EA-4ECF-828E-3FDEFFD8941D} = {AEEA483D-7AA4-4B61-A989-ADAAC8C84458} @@ -380,7 +398,6 @@ Global {3754CBC9-6D79-4682-AA26-19F6FB589AA2} = {87B15726-C98C-4D4D-A959-CC57D6B10789} {AEEA483D-7AA4-4B61-A989-ADAAC8C84458} = {614D2908-AAF9-48CE-B688-C28CC99C1D19} {AB49B48F-9250-4076-A939-CFB24D09C8A7} = {614D2908-AAF9-48CE-B688-C28CC99C1D19} - {2606956D-E795-4EA5-957A-C41A9A79CAA9} = {AEEA483D-7AA4-4B61-A989-ADAAC8C84458} {72B1648C-83B0-4BBD-A877-CC651B587689} = {AEEA483D-7AA4-4B61-A989-ADAAC8C84458} {ECC1DAB3-CCEF-47ED-BFBE-44E273C60776} = {87B15726-C98C-4D4D-A959-CC57D6B10789} {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93} = {6E6063FB-43EB-41D1-B095-4701A5D966BF} @@ -388,6 +405,10 @@ Global {7D655364-1C17-488E-8E9A-01A04C5898CD} = {3065C0E5-A209-4688-93DB-6BD85127D7B8} {461F5123-AB62-4FDE-8964-EE4A952BAFC2} = {AB49B48F-9250-4076-A939-CFB24D09C8A7} {35967B2F-472A-4647-BBF8-4128838D354A} = {461F5123-AB62-4FDE-8964-EE4A952BAFC2} + {66A3651C-7B99-42D5-AFE2-E2A115CFECD1} = {AEEA483D-7AA4-4B61-A989-ADAAC8C84458} + {6AF1B129-586C-4150-8330-7444A24B7FB6} = {461F5123-AB62-4FDE-8964-EE4A952BAFC2} + {191B1B56-B7A7-422B-9F21-1EC175132C37} = {A6237CFB-5897-452B-916B-9A9867EAD93F} + {A6237CFB-5897-452B-916B-9A9867EAD93F} = {614D2908-AAF9-48CE-B688-C28CC99C1D19} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {6869E5BF-551A-40F1-9B6B-D1B27A5676CB} diff --git a/README.md b/README.md index 35f7de613a6a..3d611413430d 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Welcome to the Microsoft Quantum Development Kit! This repository contains the libraries and samples provided with the Quantum Development Kit: -- **[Docs/](./Docs)**: Additional documentation for developing on the the libraries and samples. +- **[Docs/](./Docs)**: Additional documentation for developing on the libraries and samples. Please see [QDK online documentation](https://docs.microsoft.com/quantum/) for online documentation. - **[LibraryTests/](./LibraryTests)**: Tests to ensure correctness of the libraries and samples. - **[Microsoft.Quantum.Canon/](./Microsoft.Quantum.Canon)**: Q# sources used to implement [the canon](https://docs.microsoft.com/quantum/libraries/intro) portion of the Q# standard library. - **[Samples/](./Samples)**: C# and F# projects demonstrating how to use Q#, the prelude, and the canon. diff --git a/Samples/AdiabaticIsing/AdiabaticIsingSample.csproj b/Samples/AdiabaticIsing/AdiabaticIsingSample.csproj index d46346b49bbe..1efdbd5cf723 100644 --- a/Samples/AdiabaticIsing/AdiabaticIsingSample.csproj +++ b/Samples/AdiabaticIsing/AdiabaticIsingSample.csproj @@ -1,98 +1,17 @@ - - - - + + - Debug - AnyCPU - {7E3CBFA5-6DD8-4599-BD65-C5D2BED3B87A} Exe - Ising_Adiabatic_Evolution - Ising_Adiabatic_Evolution - v4.6.1 - 512 - true - - + netcoreapp2.0 + x64 - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - + - - - - + + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - - - {179b52ed-b81f-4844-a263-8e49d6dab4a5} - IsingGeneratorsSample - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/AdiabaticIsing/Program.cs b/Samples/AdiabaticIsing/Program.cs index 229c76dc3478..c24939abfc34 100644 --- a/Samples/AdiabaticIsing/Program.cs +++ b/Samples/AdiabaticIsing/Program.cs @@ -120,6 +120,7 @@ static void Main(string[] args) Console.Write($"State: {string.Join(", ", data.Select(x => x.ToString()).ToArray())} \n"); } + Console.WriteLine("Press Enter to continue..."); Console.ReadLine(); #endregion diff --git a/Samples/AdiabaticIsing/Properties/AssemblyInfo.cs b/Samples/AdiabaticIsing/Properties/AssemblyInfo.cs deleted file mode 100644 index cefbad2d0da1..000000000000 --- a/Samples/AdiabaticIsing/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Ising_Adiabatic_Evolution_A")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Ising_Adiabatic_Evolution_A")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7e3cbfa5-6dd8-4599-bd65-c5d2bed3b87a")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/AdiabaticIsing/packages.config b/Samples/AdiabaticIsing/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/AdiabaticIsing/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/BitFlipCode/BitFlipCode.csproj b/Samples/BitFlipCode/BitFlipCode.csproj index 48a2c0102e96..cbf94eb129ae 100644 --- a/Samples/BitFlipCode/BitFlipCode.csproj +++ b/Samples/BitFlipCode/BitFlipCode.csproj @@ -1,100 +1,16 @@ - - - + + - Debug - AnyCPU - 8.0.30703 - 2.0 - {72B1648C-83B0-4BBD-A877-CC651B587689} Exe - Properties - Quantum.BitFlipCode - BitFlipCode - v4.6.1 - 512 - false - - + netcoreapp2.0 + x64 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - - - - $(SolutionDir)\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - + - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - \ No newline at end of file + diff --git a/Samples/BitFlipCode/Properties/AssemblyInfo.cs b/Samples/BitFlipCode/Properties/AssemblyInfo.cs deleted file mode 100644 index f625b27e875a..000000000000 --- a/Samples/BitFlipCode/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("BitFlipCode")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("BitFlipCode")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("72b1648c-83b0-4bbd-a877-cc651b587689")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/BitFlipCode/packages.config b/Samples/BitFlipCode/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/BitFlipCode/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/DatabaseSearch/DatabaseSearchSample.csproj b/Samples/DatabaseSearch/DatabaseSearchSample.csproj index 2902201f4213..cbf94eb129ae 100644 --- a/Samples/DatabaseSearch/DatabaseSearchSample.csproj +++ b/Samples/DatabaseSearch/DatabaseSearchSample.csproj @@ -1,114 +1,16 @@ - - - - + + - Debug - AnyCPU - {743CE57E-B96B-456E-9C32-10BF45756CD9} Exe - DatabaseSearchSample - DatabaseSearchSample - v4.6.1 - 512 - true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\x64\Release\ - TRACE - true - pdbonly + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - true + - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/DatabaseSearch/Properties/AssemblyInfo.cs b/Samples/DatabaseSearch/Properties/AssemblyInfo.cs deleted file mode 100644 index b1bb4792c67a..000000000000 --- a/Samples/DatabaseSearch/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("DatabaseSearchSample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("DatabaseSearchSample")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("743ce57e-b96b-456e-9c32-10bf45756cd9")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/DatabaseSearch/packages.config b/Samples/DatabaseSearch/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/DatabaseSearch/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/H2SimulationCmdLine/H2SimulationSampleCmdLine.csproj b/Samples/H2SimulationCmdLine/H2SimulationSampleCmdLine.csproj index 96cab64c6b43..cbf94eb129ae 100644 --- a/Samples/H2SimulationCmdLine/H2SimulationSampleCmdLine.csproj +++ b/Samples/H2SimulationCmdLine/H2SimulationSampleCmdLine.csproj @@ -1,102 +1,16 @@ - - - + + - Debug - AnyCPU - 8.0.30703 - 2.0 - {35967B2F-472A-4647-BBF8-4128838D354A} Exe - Properties - Quantum.H2SimulationSupport - H2SimulationSupport - v4.6.1 - 512 - false - - + netcoreapp2.0 + x64 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - - - - ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - + - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - \ No newline at end of file + diff --git a/Samples/H2SimulationCmdLine/Program.cs b/Samples/H2SimulationCmdLine/Program.cs index b23eaf3dc70a..1fb8f0f4c94f 100644 --- a/Samples/H2SimulationCmdLine/Program.cs +++ b/Samples/H2SimulationCmdLine/Program.cs @@ -65,8 +65,8 @@ select H2EstimateEnergyRPE.Body.Invoke((idx, 6, 1.0)) } - System.Console.WriteLine("Press Enter to exit..."); - System.Console.ReadLine(); + Console.WriteLine("Press Enter to continue..."); + Console.ReadLine(); } } } diff --git a/Samples/H2SimulationCmdLine/Properties/AssemblyInfo.cs b/Samples/H2SimulationCmdLine/Properties/AssemblyInfo.cs deleted file mode 100644 index 4ed4f5597af8..000000000000 --- a/Samples/H2SimulationCmdLine/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,22 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("H2SimulationCmdLine")] -[assembly: AssemblyDescription("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("35967b2f-472a-4647-bbf8-4128838d354a")] - diff --git a/Samples/H2SimulationCmdLine/packages.config b/Samples/H2SimulationCmdLine/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/H2SimulationCmdLine/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/H2SimulationGUI/App.config b/Samples/H2SimulationGUI/App.config deleted file mode 100644 index 731f6de6c291..000000000000 --- a/Samples/H2SimulationGUI/App.config +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/Samples/H2SimulationGUI/AssemblyInfo.fs b/Samples/H2SimulationGUI/AssemblyInfo.fs deleted file mode 100644 index b8838a28d347..000000000000 --- a/Samples/H2SimulationGUI/AssemblyInfo.fs +++ /dev/null @@ -1,26 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -namespace H2PlottingDemo.AssemblyInfo - -open System.Reflection -open System.Runtime.CompilerServices -open System.Runtime.InteropServices - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[] -[] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[] - -do - () diff --git a/Samples/H2SimulationGUI/H2SimulationGUI.csproj b/Samples/H2SimulationGUI/H2SimulationGUI.csproj new file mode 100644 index 000000000000..9d4d45e6ca5a --- /dev/null +++ b/Samples/H2SimulationGUI/H2SimulationGUI.csproj @@ -0,0 +1,18 @@ + + + + Exe + netcoreapp2.0 + x64 + + + + + + + + + + + + diff --git a/Samples/H2SimulationGUI/H2SimulationOperations.qs b/Samples/H2SimulationGUI/H2SimulationOperations.qs new file mode 100644 index 000000000000..490dfcc18846 --- /dev/null +++ b/Samples/H2SimulationGUI/H2SimulationOperations.qs @@ -0,0 +1,275 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Microsoft.Quantum.Samples.H2Simulation { + open Microsoft.Quantum.Primitive; + open Microsoft.Quantum.Canon; + + ///////////////////////////////////////////////////////////////////////////// + // Introduction ///////////////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////// + + + // Terms and coefficients from "Scalable Quantum Simulation of Molecular Energies," + // O'Malley et. al. https://arxiv.org/abs/1512.06860. + + // H ≔ a II + b₀ ZI + b₁ IZ + b₂ ZZ + b₃ YY + b₄ XX + + ///////////////////////////////////////////////////////////////////////////// + // Hamiltonian Definition /////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////// + + function H2BondLengths() : Double[] { + return [0.2; 0.25; 0.3; 0.35; 0.4; 0.45; 0.5; 0.55; 0.6; 0.65; 0.7; 0.75; 0.8; 0.85; 0.9; 0.95; 1.0; 1.05; 1.1; 1.15; 1.2; 1.25; 1.3; 1.35; 1.4; 1.45; 1.5; 1.55; 1.6; 1.65; 1.7; 1.75; 1.8; 1.85; 1.9; 1.95; 2.0; 2.05; 2.1; 2.15; 2.2; 2.25; 2.3; 2.35; 2.4; 2.45; 2.5; 2.55; 2.6; 2.65; 2.7; 2.75; 2.8; 2.85]; + } + + function H2Coeff(idxBondLength : Int) : Double[] + { + let nBondLengths = 54; + + mutable bondCoefficients = new Double[][nBondLengths]; + + set bondCoefficients[0] = [0.5678; -1.4508; 0.6799; 0.0791; 0.0791]; + set bondCoefficients[1] = [0.5449; -1.287; 0.6719; 0.0798; 0.0798]; + set bondCoefficients[2] = [0.5215; -1.1458; 0.6631; 0.0806; 0.0806]; + set bondCoefficients[3] = [0.4982; -1.0226; 0.6537; 0.0815; 0.0815]; + set bondCoefficients[4] = [0.4754; -0.9145; 0.6438; 0.0825; 0.0825]; + set bondCoefficients[5] = [0.4534; -0.8194; 0.6336; 0.0835; 0.0835]; + set bondCoefficients[6] = [0.4325; -0.7355; 0.6233; 0.0846; 0.0846]; + set bondCoefficients[7] = [0.4125; -0.6612; 0.6129; 0.0858; 0.0858]; + set bondCoefficients[8] = [0.3937; -0.595; 0.6025; 0.087; 0.087]; + set bondCoefficients[9] = [0.376; -0.5358; 0.5921; 0.0883; 0.0883]; + set bondCoefficients[10] = [0.3593; -0.4826; 0.5818; 0.0896; 0.0896]; + set bondCoefficients[11] = [0.3435; -0.4347; 0.5716; 0.091; 0.091]; + set bondCoefficients[12] = [0.3288; -0.3915; 0.5616; 0.0925; 0.0925]; + set bondCoefficients[13] = [0.3149; -0.3523; 0.5518; 0.0939; 0.0939]; + set bondCoefficients[14] = [0.3018; -0.3168; 0.5421; 0.0954; 0.0954]; + set bondCoefficients[15] = [0.2895; -0.2845; 0.5327; 0.097; 0.097]; + set bondCoefficients[16] = [0.2779; -0.255; 0.5235; 0.0986; 0.0986]; + set bondCoefficients[17] = [0.2669; -0.2282; 0.5146; 0.1002; 0.1002]; + set bondCoefficients[18] = [0.2565; -0.2036; 0.5059; 0.1018; 0.1018]; + set bondCoefficients[19] = [0.2467; -0.181; 0.4974; 0.1034; 0.1034]; + set bondCoefficients[20] = [0.2374; -0.1603; 0.4892; 0.105; 0.105]; + set bondCoefficients[21] = [0.2286; -0.1413; 0.4812; 0.1067; 0.1067]; + set bondCoefficients[22] = [0.2203; -0.1238; 0.4735; 0.1083; 0.1083]; + set bondCoefficients[23] = [0.2123; -0.1077; 0.466; 0.11; 0.11]; + set bondCoefficients[24] = [0.2048; -0.0929; 0.4588; 0.1116; 0.1116]; + set bondCoefficients[25] = [0.1976; -0.0792; 0.4518; 0.1133; 0.1133]; + set bondCoefficients[26] = [0.1908; -0.0666; 0.4451; 0.1149; 0.1149]; + set bondCoefficients[27] = [0.1843; -0.0549; 0.4386; 0.1165; 0.1165]; + set bondCoefficients[28] = [0.1782; -0.0442; 0.4323; 0.1181; 0.1181]; + set bondCoefficients[29] = [0.1723; -0.0342; 0.4262; 0.1196; 0.1196]; + set bondCoefficients[30] = [0.1667; -0.0251; 0.4204; 0.1211; 0.1211]; + set bondCoefficients[31] = [0.1615; -0.0166; 0.4148; 0.1226; 0.1226]; + set bondCoefficients[32] = [0.1565; -0.0088; 0.4094; 0.1241; 0.1241]; + set bondCoefficients[33] = [0.1517; -0.0015; 0.4042; 0.1256; 0.1256]; + set bondCoefficients[34] = [0.1472; 0.0052; 0.3992; 0.127; 0.127]; + set bondCoefficients[35] = [0.143; 0.0114; 0.3944; 0.1284; 0.1284]; + set bondCoefficients[36] = [0.139; 0.0171; 0.3898; 0.1297; 0.1297]; + set bondCoefficients[37] = [0.1352; 0.0223; 0.3853; 0.131; 0.131]; + set bondCoefficients[38] = [0.1316; 0.0272; 0.3811; 0.1323; 0.1323]; + set bondCoefficients[39] = [0.1282; 0.0317; 0.3769; 0.1335; 0.1335]; + set bondCoefficients[40] = [0.1251; 0.0359; 0.373; 0.1347; 0.1347]; + set bondCoefficients[41] = [0.1221; 0.0397; 0.3692; 0.1359; 0.1359]; + set bondCoefficients[42] = [0.1193; 0.0432; 0.3655; 0.137; 0.137]; + set bondCoefficients[43] = [0.1167; 0.0465; 0.362; 0.1381; 0.1381]; + set bondCoefficients[44] = [0.1142; 0.0495; 0.3586; 0.1392; 0.1392]; + set bondCoefficients[45] = [0.1119; 0.0523; 0.3553; 0.1402; 0.1402]; + set bondCoefficients[46] = [0.1098; 0.0549; 0.3521; 0.1412; 0.1412]; + set bondCoefficients[47] = [0.1078; 0.0572; 0.3491; 0.1422; 0.1422]; + set bondCoefficients[48] = [0.1059; 0.0594; 0.3461; 0.1432; 0.1432]; + set bondCoefficients[49] = [0.1042; 0.0614; 0.3433; 0.1441; 0.1441]; + set bondCoefficients[50] = [0.1026; 0.0632; 0.3406; 0.145; 0.145]; + set bondCoefficients[51] = [0.1011; 0.0649; 0.3379; 0.1458; 0.1458]; + set bondCoefficients[52] = [0.0997; 0.0665; 0.3354; 0.1467; 0.1467]; + set bondCoefficients[53] = [0.0984; 0.0679; 0.3329; 0.1475; 0.1475]; + + return bondCoefficients[idxBondLength]; + + } + function H2IdentityCoeff(idxBond : Int) : Double + { + let coeffIdentity = [2.8489;2.1868;1.7252;1.3827;1.1182;0.9083;0.7381;0.5979;0.4808;0.3819;0.2976;0.2252;0.1626;0.1083;0.0609;0.0193;-0.0172;-0.0493;-0.0778;-0.1029;-0.1253;-0.1452;-0.1629;-0.1786;-0.1927;-0.2053;-0.2165;-0.2265;-0.2355;-0.2436;-0.2508;-0.2573;-0.2632;-0.2684;-0.2731;-0.2774;-0.2812;-0.2847;-0.2879;-0.2908;-0.2934;-0.2958;-0.298;-0.3;-0.3018;-0.3035;-0.3051;-0.3066;-0.3079;-0.3092;-0.3104;-0.3115;-0.3125;-0.3135]; + return coeffIdentity[idxBond]; + } + + /// # Summary + /// Given an index, returns a description of the correponding + /// term in the Hamiltonian for H₂. Each term is described by + /// a pair of integer arrays representing a sparse Pauli operator. + /// + /// # Example + /// ``` + /// // Returns ([3], [0]), to represent H₀ ≔ Z₀. + /// let (idxsPaulis, idxsQubits) = H2Terms(0) + /// ``` + function H2Terms(idxHamiltonian : Int) : (Int[], Int[]) + { + //This is how a user might input the raw data + let hamiltonianTerms = [([3], [0]); ([3],[1]); ([3;3],[0;1]); ([2;2],[0;1]); ([1;1],[0;1])]; + return hamiltonianTerms[idxHamiltonian]; + } + + ///////////////////////////////////////////////////////////////////////////// + // Direct Trotterization //////////////////////////////////////////////////// + ///////////////////////////////////////////////////////////////////////////// + + /// # Summary + /// Given the index of bond length, the index of a term in the + /// corresponding Hamiltonian, and a step size, applies the given + /// term to a register of qubits for that step size. + /// + /// # Remarks + /// This operation uses the common "Impl" idiom to expose a user-facing + /// API in terms of functions (no side effects). + operation H2TrotterUnitariesImpl(idxBondLength : Int, idxHamiltonian: Int, stepSize : Double, qubits : Qubit[]) : () + { + body { + let (idxPauliString, idxQubits) = H2Terms(idxHamiltonian); + let coeff = (H2Coeff(idxBondLength))[idxHamiltonian]; + + // We use library functions from the canon to restrict the action + // of Exp to the given qubits. + (RestrictToSubregisterCA( + Exp(IntsToPaulis(idxPauliString), stepSize * coeff, _), + idxQubits + ))(qubits); + } + adjoint auto + controlled auto + controlled adjoint auto + } + + /// # Summary + /// Given the index of a bond length, returns an operation that + /// represents the decomposition of the corresponding Hamiltonian + /// into unitary gates. + function H2TrotterUnitaries(idxBondLength : Int) : (Int, ((Int, Double, Qubit[]) => () : Adjoint, Controlled)) + { + let nTerms = 5; + return (nTerms, H2TrotterUnitariesImpl(idxBondLength, _, _, _)); + } + + /// # Summary + /// Uses the DecomposeIntoTimeSteps flow control library + /// to express the above decomposition. + /// + /// # Remarks + /// This is a function, such that the user can call this as flow control + /// and be guaranteed that there will be no side effects until they + /// act on a particular register. + function H2TrotterStepManual(idxBondLength : Int, trotterOrder: Int, trotterStepSize: Double): (Qubit[] => (): Adjoint, Controlled) + { + let op = H2TrotterUnitaries(idxBondLength); + return (DecomposeIntoTimeStepsCA(op, trotterOrder))(trotterStepSize, _); + } + + ////////////////////////////////////////////////////////////////////////// + // Using the Hamiltonian representation library ////////////////////////// + ////////////////////////////////////////////////////////////////////////// + + // We now show how to automate this process using Canon to turn a + // sparse-Pauli representation into the appropriate decomposition. + + /// # Summary + /// Represents a term in the H₂ Hamiltonian for a particular bond + /// length using the GeneratorTerm type from Canon. + function H2GeneratorIndex(idxBondLength : Int, idxHamiltonian : Int) : GeneratorIndex + { + let (idxPauliString, idxQubits) = H2Terms(idxHamiltonian); + let coefficient = (H2Coeff(idxBondLength))[idxHamiltonian]; + return GeneratorIndex((idxPauliString, [coefficient]), idxQubits); + } + + /// # Summary + /// Represents the sum of all Hamiltonian terms for a given + /// bond length using the GeneratorSystem type from Canon. + /// + /// # Remarks + /// The GeneratorSystem type takes a function and not an + /// array, enabling us to calculate terms on the fly if + /// appropriate. + function H2GeneratorSystem(idxBondLength : Int) : GeneratorSystem + { + let nTerms = 5; + return GeneratorSystem(nTerms, H2GeneratorIndex(idxBondLength, _)); + } + + /// # Summary + /// We finish our description of the H₂ Hamiltonian for a + /// given bond length by specifying that we wish to use + /// the above description with the PauliEvolutionSet. + /// + /// We could choose other evolution sets as well, allowing the + /// canon to be very general with respect to how Hamiltonians + /// are represented. + function H2EvolutionGenerator(idxBondLength : Int) : EvolutionGenerator + { + return EvolutionGenerator(PauliEvolutionSet(), H2GeneratorSystem(idxBondLength)); + } + + /// # Summary + /// We now provide Canon's Hamiltonian simulation + /// functions with the above representaiton to automatically + /// decompose the H₂ Hamiltonian into an appropriate operation + /// that we can apply to qubits as we please. + operation H2TrotterStep(idxBondLength : Int, trotterOrder: Int, trotterStepSize: Double, qubits: Qubit[]): () { + body { + let simulationAlgorithm = TrotterSimulationAlgorithm(trotterStepSize, trotterOrder); + simulationAlgorithm(trotterStepSize, H2EvolutionGenerator(idxBondLength), qubits); + } + adjoint auto + controlled auto + controlled adjoint auto + } + + /// # Summary + /// Prepares the an approximation to the H₂ ground state, + /// assuming an initial state of |00〉. + operation H2StatePrep(q : Qubit[]) : () + { + body { + X(q[0]); + } + } + + /// # Summary + /// We can now use Canon's phase estimation algorithms to + /// learn the ground state energy using the above simulation. + operation H2EstimateEnergy( + idxBondLength: Int, trotterStepSize: Double, + phaseEstAlgorithm : ((DiscreteOracle, Qubit[]) => Double) + ) : Double + { + body { + let nQubits = 2; + let trotterOrder = 1; + let trotterStep = H2TrotterStep(idxBondLength, trotterOrder, trotterStepSize, _); + + let estPhase = EstimateEnergy( + nQubits, + H2StatePrep, + trotterStep, + phaseEstAlgorithm); + + return estPhase / trotterStepSize + H2IdentityCoeff(idxBondLength); + } + } + + /// # Summary + /// We finish by using the Robust Phase Estimation algorithm + /// of Kimmel, Low and Yoder. + operation H2EstimateEnergyRPE(idxBondLength: Int, nBitsPrecision : Int, trotterStepSize: Double) : Double + { + body { + return H2EstimateEnergy( + idxBondLength, + trotterStepSize, + RobustPhaseEstimation(nBitsPrecision, _, _) + ); + } + } + +} + + diff --git a/Samples/H2SimulationGUI/H2SimulationSampleGUI.fsproj b/Samples/H2SimulationGUI/H2SimulationSampleGUI.fsproj deleted file mode 100644 index df1f411f047a..000000000000 --- a/Samples/H2SimulationGUI/H2SimulationSampleGUI.fsproj +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - Debug - AnyCPU - 2.0 - 73de9730-9c8b-415f-9016-eb414ce1b3c7 - WinExe - H2PlottingDemo - H2PlottingDemo - v4.6.1 - true - 4.4.1.0 - H2SimulationSampleGUI - - - - - true - full - false - false - bin\$(Configuration)\ - DEBUG;TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - false - - - pdbonly - true - true - bin\$(Configuration)\ - TRACE - 3 - AnyCPU - bin\$(Configuration)\$(AssemblyName).XML - false - - - 11 - - - - - $(MSBuildExtensionsPath32)\..\Microsoft SDKs\F#\3.0\Framework\v4.0\Microsoft.FSharp.Targets - - - - - $(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\FSharp\Microsoft.FSharp.Targets - - - - - - - - - - - - - - ..\..\packages\FSharp.Charting.0.91.1\lib\net45\FSharp.Charting.dll - - - ..\..\packages\FSharp.Control.AsyncSeq.2.0.16\lib\net45\FSharp.Control.AsyncSeq.dll - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - True - - - - - - - - - - Microsoft.Quantum.Canon - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - True - - - H2SimulationSampleCmdLine - {35967b2f-472a-4647-bbf8-4128838d354a} - True - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file diff --git a/Samples/H2SimulationGUI/Program.cs b/Samples/H2SimulationGUI/Program.cs new file mode 100644 index 000000000000..6f1b94e5e1ae --- /dev/null +++ b/Samples/H2SimulationGUI/Program.cs @@ -0,0 +1,197 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using System.IO; +using System.Net; +using System.Net.Sockets; +using System.Text; +using System.Threading; +using System.Collections.Generic; +using Newtonsoft.Json; +using Microsoft.Quantum.Simulation.Simulators; +using Microsoft.Quantum.Simulation.Core; +using System.Runtime.InteropServices; +using System.Linq; + +namespace Microsoft.Quantum.Samples.H2Simulation +{ + class ServerThread + { + + private static readonly double[] theoryData = { + 0.14421, -0.323939, -0.612975, -0.80051, -0.92526, + -1.00901, -1.06539, -1.10233, -1.12559, -1.13894, + -1.14496, -1.1456, -1.14268, -1.13663, -1.12856, + -1.1193, -1.10892, -1.09802, -1.08684, -1.07537, + -1.06424, -1.05344, -1.043, -1.03293, -1.02358, + -1.01482, -1.00665, -0.999025, -0.992226, -0.985805, + -0.980147, -0.975156, -0.970807, -0.966831, -0.963298, + -0.960356, -0.957615, -0.95529, -0.953451, -0.951604, + -0.950183, -0.949016, -0.947872, -0.946982, -0.946219, + -0.945464, -0.944887, -0.944566, -0.94415, -0.943861, + -0.943664, -0.943238, -0.943172, -0.942973 + }; + + private static byte[] SerializeResponse(string respType, object response) => + System.Text.Encoding.UTF8.GetBytes( + JsonConvert.SerializeObject( + new Dictionary + { + { "type", respType }, + { "data", response } + } + ) + "\f" + ); + + private static void SendPlotPoints(NetworkStream stream) + { + using (var qsim = new QuantumSimulator()) + { + // To call a Q# operation that takes unit `()` as its input, we need to grab + // the QVoid.Instance value. + var bondLengths = H2BondLengths.Run(qsim).Result; + + // In Q#, we defined the operation that performs the actual estimation; since the Q# operation + // has type (idxBondLength : Int, nBitsPrecision : Int, trotterStepSize : Double) => (Double), + // we pass the index along with that we want six bits of precision and + // step size of 1. + // + // The result of calling H2EstimateEnergyRPE is a Double, so we can minimize over + // that to deal with the possibility that we accidently entered into the excited + // state instead of the ground state of interest. + Func estAtBondLength = (idx) => Enumerable.Min( + from idxRep in Enumerable.Range(0, 3) + select H2EstimateEnergyRPE.Run(qsim, idx, 6, 1.0).Result + ); + + // We are now equipped to run the Q# simulation at each bond length + // and print the answers out to the console. + foreach (var idxBond in Enumerable.Range(0, 54)) + { + System.Console.WriteLine($"Estimating at bond length {bondLengths[idxBond]}:"); + var est = estAtBondLength(idxBond); + var response = SerializeResponse( + "plotPoint", + new Dictionary + { + { "bondLength", bondLengths[idxBond] }, + { "theoreticalEnergy", theoryData[idxBond] }, + { "estEnergy", est } + } + ); + stream.Write(response, 0, response.Length); + } + } + } + + public static void Start() + { + TcpListener server = null; + + try + { + var port = 8001; + var localAddress = IPAddress.Parse("127.0.0.1"); + + server = new TcpListener(localAddress, port); + server.Start(); + + while (true) + { + var client = server.AcceptTcpClient(); + Console.WriteLine("@@ Connected to client. @@"); + + // Allocate a buffer. + var buffer = new Byte[256]; + + var stream = client.GetStream(); + + var nBytesRead = -1; + while ((nBytesRead = stream.Read(buffer, 0, buffer.Length)) != 0) + { + var rawMessage = System.Text.Encoding.UTF8.GetString(buffer, 0, nBytesRead); + Console.WriteLine($"@@ Received from client: {rawMessage} @@"); + + var message = JsonConvert.DeserializeObject>(rawMessage); + message.TryGetValue("type", out var messageType); + message.TryGetValue("data", out var messageData); + if ((string)messageType == "event" && (string)messageData == "readyToPlot") + { + Console.WriteLine("@@ Got request for plotting data, running simulator. @@"); + SendPlotPoints(stream); + } + } + + } + + } + + finally + { + server.Stop(); + } + + } + + } + + class Program + { + static string FindOnPath(string fileName) + { + foreach (var candidateRoot in ( + Environment.GetEnvironmentVariable("PATH").Split( + Path.PathSeparator + )) + ) + { + var path = Path.Combine(candidateRoot.Trim(), fileName); + if (File.Exists(path)) + { + return path; + } + } + + throw new FileNotFoundException($"Did not find {fileName} on $Env:PATH."); + } + + static void Main(string[] args) + { + Console.WriteLine("Starting Simulation Server..."); + var serverThread = new Thread(ServerThread.Start); + serverThread.Start(); + + Console.WriteLine("Starting GUI..."); + + var process = new System.Diagnostics.Process + { + StartInfo = new System.Diagnostics.ProcessStartInfo + { + FileName = FindOnPath( + RuntimeInformation.IsOSPlatform(OSPlatform.Windows) + ? "npm.cmd" : "npm" + ), + UseShellExecute = false, + Arguments = "start", + CreateNoWindow = true + } + }; + process.Start(); + process.WaitForExit(); + + // Check the npm process' exit code to make sure that npm + // start actually ran correctly. + while (!process.HasExited) { + System.Threading.Thread.Sleep(500); + } + if (process.ExitCode != 0) { + System.Console.WriteLine($"GUI returned exit code {process.ExitCode}; did you run npm install?"); + } + + // If we got this far, go on and call Environment's exit method, + // killing the server thread. + Environment.Exit(process.ExitCode); + } + } +} diff --git a/Samples/H2SimulationGUI/Program.fs b/Samples/H2SimulationGUI/Program.fs deleted file mode 100644 index 6b7f044985d3..000000000000 --- a/Samples/H2SimulationGUI/Program.fs +++ /dev/null @@ -1,139 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -namespace Microsoft.Quantum.Samples.H2Simulation - -open System -open System.Windows -open System.Windows.Controls - -open Microsoft.Quantum.Simulation.Simulators -open Microsoft.Quantum.Simulation.Core - -open Microsoft.FSharp.Core -open Microsoft.FSharp.Collections - -open FSharp.Charting -open FSharp.Control -open FSharp.Charting.ChartTypes - -module H2PlottingDemo = - - [] - [] - let main argv = - // We begin by making an instance of the simulator that we will use to run our Q# code. - use qsim = new QuantumSimulator() - - // Next, we give F# names to each operation defined in Q#. - // In doing so, we ask the simulator to give us each operation - // so that it has an opportunity to override operation definitions. - let H2EstimateEnergyRPE = qsim.Get() - let H2BondLengths = qsim.Get() - - // To call a Q# operation that takes unit `()` as its input, we need to grab - // the QVoid.Instance value. - let bondLengths = - H2BondLengths.Body.Invoke QVoid.Instance - - // In Q#, we defined the operation that performs the actual estimation; - // we can call it here, giving a structure tuple that corresponds to the - // C# ValueTuple that it takes as its input. Since the Q# operation - // has type (idxBondLength : Int, nBitsPrecision : Int, trotterStepSize : Double) => (Double), - // we pass the index along with that we want six bits of precision and - // step size of 1. - // - // The result of calling H2EstimateEnergyRPE is a Double, so we can minimize over - // that to deal with the possibility that we accidently entered into the excited - // state instead of the ground state of interest. - - let estAtBondLength idx = - [0..2] - |> Seq.map (fun idxRep -> - H2EstimateEnergyRPE.Body.Invoke (struct (idx, int64 6, float 1)) - ) - |> Seq.min - - // So that the above computation can proceed without blocking the GUI thread, - // we use FSharp.Control.AsyncSeq to create a workflow in which energies - // are calculated for each energy in turn as an asynchronous sequence. - let estimateEnergies = - asyncSeq { - for idxBond in [0..53] do - yield bondLengths.[idxBond], (int64 >> estAtBondLength) idxBond - } - - // We're now equipped to define the GUI itself. - - // First we create a blank window, and attach our plotting routines - // to its Loaded event. If we try to define the plot before then, - // we may inadvertantly finish a computation before the plot is - // ready, causing the GUI to crash. - let window = Window() - window.Loaded.Add <| fun eventArgs -> - - // We make the chart by piping the asynchronous sequence which - // estimates the energy at each bond length through the FSharp.Charting - // package's LiveChart object. - // - // The LiveChart object will in turn observe when each computation completes, - // and will update the chart accordingly. - let estEnergyChart = - estimateEnergies - |> AsyncSeq.toObservable - |> fun data -> - LiveChart - .LineIncremental(data, Name="Estimated") - .WithMarkers(Size=12, Style=MarkerStyle.Circle) - - // For comparison, we also include the exact values obtained - // by diagonalizing the H₂ Hamiltonian at each bond length. - // Please see README.md for a description of how these - // values were calculated. - let theoryChart = - [ - 0.14421; -0.323939; -0.612975; -0.80051; -0.92526; - -1.00901; -1.06539; -1.10233; -1.12559; -1.13894; - -1.14496; -1.1456; -1.14268; -1.13663; -1.12856; - -1.1193; -1.10892; -1.09802; -1.08684; -1.07537; - -1.06424; -1.05344; -1.043; -1.03293; -1.02358; - -1.01482; -1.00665; -0.999025; -0.992226; -0.985805; - -0.980147; -0.975156; -0.970807; -0.966831; -0.963298; - -0.960356; -0.957615; -0.95529; -0.953451; -0.951604; - -0.950183; -0.949016; -0.947872; -0.946982; -0.946219; - -0.945464; -0.944887; -0.944566; -0.94415; -0.943861; - -0.943664; -0.943238; -0.943172; -0.942973 - ] - |> Seq.zip bondLengths - |> fun data -> - Chart - .Line(data, Name="Theory") - - - // Having defined both charts individually, we can now combine them into - // a GUI control suitable for adding to our new window. - let chart = - new ChartControl - ( - Chart.Combine([estEnergyChart; theoryChart]) - |> fun chart -> - chart - .WithXAxis(Title = "BOND LENGTH", TitleFontName="Segoe UI Semibold", TitleFontSize = 24.0) - .WithYAxis(Title = "ENERGY", TitleFontName="Segoe UI Semibold", TitleFontSize = 24.0) - .WithLegend(FontSize = 24.0, FontName = "Segoe UI") - .WithTitle("H₂", FontName="Segoe UI", FontSize = 24.0) - ) - - // Since FSharp.Charting uses Windows.Forms instead of the Windows Presentation - // Framework (WPF), we need to wrap the control in a host that maps between - // the two GUI frameworks. - let integrationHost = new Forms.Integration.WindowsFormsHost(Child = chart) - - window.Content <- integrationHost - - // With everything all set up, we can now invoke the new window as our application, - // which will start the chart plotting. Have fun! - Application().Run(window) - |> ignore - 0 diff --git a/Samples/H2SimulationGUI/README.md b/Samples/H2SimulationGUI/README.md index cc7d25679f85..d5df40957489 100644 --- a/Samples/H2SimulationGUI/README.md +++ b/Samples/H2SimulationGUI/README.md @@ -1,24 +1,39 @@ -# Hamiltonian Simulation of H₂ : GUI # +# H₂ Simulation GUI Demo # -This Sample demonstrates the use of the Quantum Development Kit for Hamiltonian simulation by showing how to simulate molecular hydrogen (H₂). -The sample walks through both simulating H₂ manually, and using the generator representation library provided in the canon. +## Prerequisites ## -## Running the Sample ## +On top of [.NET core](https://www.microsoft.com/net/learn/get-started/macos), +this demo uses the [Electron](https://github.com/electron/electron) framework to display the results of simulating H₂. +Since Electron is distributed using the Node.js Package Manager (npm), we must therefore install npm first. -Open the `QsharpLibraries.sln` solution in Visual Studio and set `Samples/H2SimulationGUI/H2SimulationSample.fsproj` as the startup project. -Press Start in Visual Studio to run the sample. +**Windows** npm can be installed using chocolatey: -## Manifest ## +```powershell +PS> choco install nodejs +``` -- [Program.fs](./Program.fs): F# code to interact with the Hamiltonian simulation operations provided in the canon and to plot the results. -- [H2SimulationSample.fsproj](./H2SimulationSample.fsproj): Main F# project for the Sample. +Alternatively, manual downloads are available from [nodejs.org](https://nodejs.org/en/). -Note that this sample depends on the [H2SimulationCmdLine](./../H2SimulationCmdLine) sample and executes operations defined in [Operation.qs](./../H2SimulationCmdLine/Operation.qs). +**macOS** Download and run the Node.js installer package from [nodejs.org](https://nodejs.org/en/). -## Theory ## +**Linux** Most distributions include Node.js and npm, but that version might be out of date. +To ensure that you have the latest version, we recommend using the packages provided by NodeSource: -The F# program provided with this sample compares the results of the simulation to exactly diagonalizing the Hamiltonian for each bond length. +```bash +curl -sL https://deb.nodesource.com/setup_9.x | sudo -E bash - +sudo apt-get install -y nodejs +``` -## References ## +Once npm is installed, we can then install all Node.js packages required for the front end using `npm install`: -- O'Malley et. al. https://arxiv.org/abs/1512.06860 +```bash +$ npm install +``` + +## Running the Demo ## + +Once pre-reqs are ready, to run the demo from the command line use `dotnet` to start the project: + +```bash +$ dotnet run +``` diff --git a/Samples/H2SimulationGUI/index.html b/Samples/H2SimulationGUI/index.html new file mode 100644 index 000000000000..340be6912022 --- /dev/null +++ b/Samples/H2SimulationGUI/index.html @@ -0,0 +1,105 @@ + + + + + + H₂ Simulation Demo + + + +

+ H2 Simulation Demo +

+
+ +
+ + + + diff --git a/Samples/H2SimulationGUI/main.js b/Samples/H2SimulationGUI/main.js new file mode 100644 index 000000000000..01645580db77 --- /dev/null +++ b/Samples/H2SimulationGUI/main.js @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +const electron = require('electron') +// Module to control application life. +const app = electron.app +// Module to create native browser window. +const BrowserWindow = electron.BrowserWindow + +const path = require('path') +const url = require('url') + +// Keep a global reference of the window object, if you don't, the window will +// be closed automatically when the JavaScript object is garbage collected. +let mainWindow + +function createWindow () { + // Create the browser window. + mainWindow = new BrowserWindow({ + width: 800, height: 600, + autoHideMenuBar: true + }) + + // and load the index.html of the app. + mainWindow.loadURL(url.format({ + pathname: path.join(__dirname, 'index.html'), + protocol: 'file:', + slashes: true + })) + + // Emitted when the window is closed. + mainWindow.on('closed', function () { + // Dereference the window object, usually you would store windows + // in an array if your app supports multi windows, this is the time + // when you should delete the corresponding element. + mainWindow = null + }) +} + +// This method will be called when Electron has finished +// initialization and is ready to create browser windows. +// Some APIs can only be used after this event occurs. +app.on('ready', createWindow) + +// Quit when all windows are closed. +app.on('window-all-closed', function () { + // On OS X it is common for applications and their menu bar + // to stay active until the user quits explicitly with Cmd + Q + if (process.platform !== 'darwin') { + app.quit() + } +}) + +app.on('activate', function () { + // On OS X it's common to re-create a window in the app when the + // dock icon is clicked and there are no other windows open. + if (mainWindow === null) { + createWindow() + } +}) diff --git a/Samples/H2SimulationGUI/package-lock.json b/Samples/H2SimulationGUI/package-lock.json new file mode 100644 index 000000000000..23d3ddc5800b --- /dev/null +++ b/Samples/H2SimulationGUI/package-lock.json @@ -0,0 +1,1349 @@ +{ + "name": "h2-simulation-demo", + "version": "1.0.0", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@types/node": { + "version": "7.0.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-7.0.54.tgz", + "integrity": "sha512-w5PYRbRlUOUqHziUzmSeKhIAV9ogBb/sJQxsR8DsYFY30/xJ2RIIuee6gNNl3TgPEFON8vkOR/qKbQr5/XF7/A==", + "dev": true + }, + "ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "dev": true, + "requires": { + "co": "4.6.0", + "fast-deep-equal": "1.0.0", + "fast-json-stable-stringify": "2.0.0", + "json-schema-traverse": "0.3.1" + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "asn1": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", + "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", + "dev": true + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", + "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", + "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", + "dev": true, + "optional": true, + "requires": { + "tweetnacl": "0.14.5" + } + }, + "boom": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/boom/-/boom-4.3.1.tgz", + "integrity": "sha1-T4owBctKfjiJ90kDD9JbluAdLjE=", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "1.0.0", + "concat-map": "0.0.1" + } + }, + "builtin-modules": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz", + "integrity": "sha1-Jw8HbFpywC9bZaR9+Uxf46J4iS8=", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "2.1.1", + "map-obj": "1.0.1" + } + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "chart.js": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.7.1.tgz", + "integrity": "sha512-pX1oQAY86MiuyZ2hY593Acbl4MLHKrBBhhmZ1YqSadzQbbsBE2rnd6WISoHjIsdf0WDeC0hbePYCz2ZxkV8L+g==", + "requires": { + "chartjs-color": "2.2.0", + "moment": "2.18.1" + } + }, + "chartjs-color": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.2.0.tgz", + "integrity": "sha1-hKL7dVeH7YXDndbdjHsdiEKbrq4=", + "requires": { + "chartjs-color-string": "0.5.0", + "color-convert": "0.5.3" + } + }, + "chartjs-color-string": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.5.0.tgz", + "integrity": "sha512-amWNvCOXlOUYxZVDSa0YOab5K/lmEhbFNKI55PWc4mlv28BDzA7zaoQTGxSBgJMHIW+hGX8YUrvw/FH4LyhwSQ==", + "requires": { + "color-name": "1.1.3" + } + }, + "co": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", + "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", + "dev": true + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "color-convert": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-0.5.3.tgz", + "integrity": "sha1-vbbGnOZg+t/+CwAHzER+G59ygr0=" + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + }, + "combined-stream": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz", + "integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=", + "dev": true, + "requires": { + "delayed-stream": "1.0.0" + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.0.tgz", + "integrity": "sha1-CqxmL9Ur54lk1VMvaUeE5wEQrPc=", + "dev": true, + "requires": { + "inherits": "2.0.3", + "readable-stream": "2.3.4", + "typedarray": "0.0.6" + }, + "dependencies": { + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "readable-stream": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.4.tgz", + "integrity": "sha512-vuYxeWYM+fde14+rajzqgeohAI7YoJcHE7kXDAc4Nk0EbuKnJfqtY9YtRkLo/tqkuF7MsBQRhPnPeyjYITp3ZQ==", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "1.0.0", + "process-nextick-args": "2.0.0", + "safe-buffer": "5.1.1", + "string_decoder": "1.0.3", + "util-deprecate": "1.0.2" + } + }, + "string_decoder": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz", + "integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cryptiles": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-3.1.2.tgz", + "integrity": "sha1-qJ+7Ig9c4l7FboxKqKT9e1sNKf4=", + "dev": true, + "requires": { + "boom": "5.2.0" + }, + "dependencies": { + "boom": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/boom/-/boom-5.2.0.tgz", + "integrity": "sha512-Z5BTk6ZRe4tXXQlkqftmsAUANpXmuwlsF5Oov8ThoMbQRzdGTA1ngYRW160GexgOgjsFOKJz0LYhoNi+2AMBUw==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + } + } + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "1.0.2" + } + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "deep-extend": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.4.2.tgz", + "integrity": "sha1-SLaZwn4zS/ifEIkr5DL25MfTSn8=", + "dev": true + }, + "delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "easy-stack": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz", + "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=" + }, + "ecc-jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", + "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", + "dev": true, + "optional": true, + "requires": { + "jsbn": "0.1.1" + } + }, + "electron": { + "version": "1.7.12", + "resolved": "https://registry.npmjs.org/electron/-/electron-1.7.12.tgz", + "integrity": "sha1-3MYaLBsMPfJfaLNCU3mgGr0BGQ4=", + "dev": true, + "requires": { + "@types/node": "7.0.54", + "electron-download": "3.3.0", + "extract-zip": "1.6.6" + } + }, + "electron-download": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/electron-download/-/electron-download-3.3.0.tgz", + "integrity": "sha1-LP1U1pZsAZxNSa1l++Zcyc3vaMg=", + "dev": true, + "requires": { + "debug": "2.6.9", + "fs-extra": "0.30.0", + "home-path": "1.0.5", + "minimist": "1.2.0", + "nugget": "2.0.1", + "path-exists": "2.1.0", + "rc": "1.2.5", + "semver": "5.5.0", + "sumchecker": "1.3.1" + } + }, + "error-ex": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.1.tgz", + "integrity": "sha1-+FWobOYa3E6GIcPNoh56dhLDqNw=", + "dev": true, + "requires": { + "is-arrayish": "0.2.1" + } + }, + "es6-promise": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.4.tgz", + "integrity": "sha512-/NdNZVJg+uZgtm9eS3O6lrOLYmQag2DjdEXuPaHlZ6RuVqgqaVZfgYCepEIKsLqwdQArOPtC3XzRLqGGfT8KQQ==", + "dev": true + }, + "event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==" + }, + "extend": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", + "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", + "dev": true + }, + "extract-zip": { + "version": "1.6.6", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.6.6.tgz", + "integrity": "sha1-EpDt6NINCHK0Kf0/NRyhKOxe+Fw=", + "dev": true, + "requires": { + "concat-stream": "1.6.0", + "debug": "2.6.9", + "mkdirp": "0.5.0", + "yauzl": "2.4.1" + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.0.0.tgz", + "integrity": "sha1-liVqO8l1WV6zbYLpkp0GDYk0Of8=", + "dev": true + }, + "fast-json-stable-stringify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", + "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "dev": true + }, + "fd-slicer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.0.1.tgz", + "integrity": "sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU=", + "dev": true, + "requires": { + "pend": "1.2.0" + } + }, + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "2.1.0", + "pinkie-promise": "2.0.1" + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.1.tgz", + "integrity": "sha1-b7lPvXGIUwbXPRXMSX/kzE7NRL8=", + "dev": true, + "requires": { + "asynckit": "0.4.0", + "combined-stream": "1.0.5", + "mime-types": "2.1.17" + } + }, + "fs-extra": { + "version": "0.30.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", + "integrity": "sha1-8jP/zAjU2n1DLapEl3aYnbHfk/A=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "jsonfile": "2.4.0", + "klaw": "1.3.1", + "path-is-absolute": "1.0.1", + "rimraf": "2.6.2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "1.0.0" + } + }, + "glob": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.2.tgz", + "integrity": "sha512-MJTUg1kjuLeQCJ+ccE4Vpa6kKVXkPYJ2mOCQyUuKLcLQsdrMCpBPUi8qVE6+YuaJkozeA9NusTAw3hLr8Xe5EQ==", + "dev": true, + "requires": { + "fs.realpath": "1.0.0", + "inflight": "1.0.6", + "inherits": "2.0.3", + "minimatch": "3.0.4", + "once": "1.4.0", + "path-is-absolute": "1.0.1" + } + }, + "graceful-fs": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz", + "integrity": "sha1-Dovf5NHduIVNZOBOp8AOKgJuVlg=", + "dev": true + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.0.3.tgz", + "integrity": "sha1-ukAsJmGU8VlW7xXg/PJCmT9qff0=", + "dev": true, + "requires": { + "ajv": "5.5.2", + "har-schema": "2.0.0" + } + }, + "hawk": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/hawk/-/hawk-6.0.2.tgz", + "integrity": "sha512-miowhl2+U7Qle4vdLqDdPt9m09K6yZhkLDTWGoUiUzrQCn+mHHSmfJgAyGaLRZbPmTqfFFjRV1QWCW0VWUJBbQ==", + "dev": true, + "requires": { + "boom": "4.3.1", + "cryptiles": "3.1.2", + "hoek": "4.2.0", + "sntp": "2.1.0" + } + }, + "hoek": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/hoek/-/hoek-4.2.0.tgz", + "integrity": "sha512-v0XCLxICi9nPfYrS9RL8HbYnXi9obYAeLbSP00BmnZwCK9+Ih9WOjoZ8YoHCoav2csqn4FOz4Orldsy2dmDwmQ==", + "dev": true + }, + "home-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/home-path/-/home-path-1.0.5.tgz", + "integrity": "sha1-eIspgVsS1Tus9XVkhHbm+QQdEz8=", + "dev": true + }, + "hosted-git-info": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", + "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "dev": true + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "jsprim": "1.4.1", + "sshpk": "1.13.1" + } + }, + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", + "dev": true, + "requires": { + "repeating": "2.0.1" + } + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "1.4.0", + "wrappy": "1.0.2" + } + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-builtin-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz", + "integrity": "sha1-VAVy0096wxGfj3bDDLwbHgN6/74=", + "dev": true, + "requires": { + "builtin-modules": "1.1.1" + } + }, + "is-finite": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", + "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "1.0.1" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "js-message": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", + "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=" + }, + "js-queue": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz", + "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "requires": { + "easy-stack": "1.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true, + "optional": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "jsonfile": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-2.4.0.tgz", + "integrity": "sha1-NzaitCi4e72gzIO1P6PWM6NcKug=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "klaw": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-1.3.1.tgz", + "integrity": "sha1-QIhDO0azsbolnXh4XY6W9zugJDk=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "parse-json": "2.2.0", + "pify": "2.3.0", + "pinkie-promise": "2.0.1", + "strip-bom": "2.0.0" + } + }, + "loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "dev": true, + "requires": { + "currently-unhandled": "0.4.1", + "signal-exit": "3.0.2" + } + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "2.1.0", + "decamelize": "1.2.0", + "loud-rejection": "1.6.0", + "map-obj": "1.0.1", + "minimist": "1.2.0", + "normalize-package-data": "2.4.0", + "object-assign": "4.1.1", + "read-pkg-up": "1.0.1", + "redent": "1.0.0", + "trim-newlines": "1.0.0" + } + }, + "mime-db": { + "version": "1.30.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.30.0.tgz", + "integrity": "sha1-dMZD2i3Z1qRTmZY0ZbJtXKfXHwE=", + "dev": true + }, + "mime-types": { + "version": "2.1.17", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.17.tgz", + "integrity": "sha1-Cdejk/A+mVp5+K+Fe3Cp4KsWVXo=", + "dev": true, + "requires": { + "mime-db": "1.30.0" + } + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "1.1.11" + } + }, + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + }, + "mkdirp": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.0.tgz", + "integrity": "sha1-HXMHam35hs2TROFecfzAWkyavxI=", + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", + "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", + "dev": true + } + } + }, + "moment": { + "version": "2.18.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.18.1.tgz", + "integrity": "sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=" + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "node-ipc": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz", + "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==", + "requires": { + "event-pubsub": "4.3.0", + "js-message": "1.0.5", + "js-queue": "2.0.0" + } + }, + "normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", + "dev": true, + "requires": { + "hosted-git-info": "2.5.0", + "is-builtin-module": "1.0.0", + "semver": "5.5.0", + "validate-npm-package-license": "3.0.1" + } + }, + "nugget": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/nugget/-/nugget-2.0.1.tgz", + "integrity": "sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA=", + "dev": true, + "requires": { + "debug": "2.6.9", + "minimist": "1.2.0", + "pretty-bytes": "1.0.4", + "progress-stream": "1.2.0", + "request": "2.83.0", + "single-line-log": "1.1.2", + "throttleit": "0.0.2" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "oauth-sign": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", + "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-keys": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", + "integrity": "sha1-KKaq50KN0sOpLz2V8hM13SBOAzY=", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1.0.2" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "1.3.1" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "2.0.1" + } + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "4.1.11", + "pify": "2.3.0", + "pinkie-promise": "2.0.1" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "2.0.4" + } + }, + "pretty-bytes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-1.0.4.tgz", + "integrity": "sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ=", + "dev": true, + "requires": { + "get-stdin": "4.0.1", + "meow": "3.7.0" + } + }, + "process-nextick-args": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true + }, + "progress-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/progress-stream/-/progress-stream-1.2.0.tgz", + "integrity": "sha1-LNPP6jO6OonJwSHsM0er6asSX3c=", + "dev": true, + "requires": { + "speedometer": "0.1.4", + "through2": "0.2.3" + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "qs": { + "version": "6.5.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.1.tgz", + "integrity": "sha512-eRzhrN1WSINYCDCbrz796z37LOe3m5tmW7RQf6oBntukAG1nmovJvhnwHHRMAfeoItc1m2Hk02WER2aQ/iqs+A==", + "dev": true + }, + "rc": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.5.tgz", + "integrity": "sha1-J1zWh/bjs2zHVrqibf7oCnkDAf0=", + "dev": true, + "requires": { + "deep-extend": "0.4.2", + "ini": "1.3.5", + "minimist": "1.2.0", + "strip-json-comments": "2.0.1" + } + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "1.1.0", + "normalize-package-data": "2.4.0", + "path-type": "1.1.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "1.1.2", + "read-pkg": "1.1.0" + } + }, + "readable-stream": { + "version": "1.1.14", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", + "integrity": "sha1-fPTFTvZI44EwhMY23SB54WbAgdk=", + "dev": true, + "requires": { + "core-util-is": "1.0.2", + "inherits": "2.0.3", + "isarray": "0.0.1", + "string_decoder": "0.10.31" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "2.1.0", + "strip-indent": "1.0.1" + } + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "1.0.2" + } + }, + "request": { + "version": "2.83.0", + "resolved": "https://registry.npmjs.org/request/-/request-2.83.0.tgz", + "integrity": "sha512-lR3gD69osqm6EYLk9wB/G1W/laGWjzH90t1vEa2xuxHD5KUrSzp9pUSfTm+YC5Nxt2T8nMPEvKlhbQayU7bgFw==", + "dev": true, + "requires": { + "aws-sign2": "0.7.0", + "aws4": "1.6.0", + "caseless": "0.12.0", + "combined-stream": "1.0.5", + "extend": "3.0.1", + "forever-agent": "0.6.1", + "form-data": "2.3.1", + "har-validator": "5.0.3", + "hawk": "6.0.2", + "http-signature": "1.2.0", + "is-typedarray": "1.0.0", + "isstream": "0.1.2", + "json-stringify-safe": "5.0.1", + "mime-types": "2.1.17", + "oauth-sign": "0.8.2", + "performance-now": "2.1.0", + "qs": "6.5.1", + "safe-buffer": "5.1.1", + "stringstream": "0.0.5", + "tough-cookie": "2.3.3", + "tunnel-agent": "0.6.0", + "uuid": "3.2.1" + } + }, + "rimraf": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.2.tgz", + "integrity": "sha512-lreewLK/BlghmxtfH36YYVg1i8IAce4TI7oao75I1g245+6BctqTVQiBP3YUJ9C6DQOXJmkYR9X9fCLtCOJc5w==", + "dev": true, + "requires": { + "glob": "7.1.2" + } + }, + "safe-buffer": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.1.tgz", + "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==", + "dev": true + }, + "semver": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", + "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true + }, + "single-line-log": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/single-line-log/-/single-line-log-1.1.2.tgz", + "integrity": "sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q=", + "dev": true, + "requires": { + "string-width": "1.0.2" + } + }, + "sntp": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/sntp/-/sntp-2.1.0.tgz", + "integrity": "sha512-FL1b58BDrqS3A11lJ0zEdnJ3UOKqVxawAkF3k7F0CVN7VQ34aZrV+G8BZ1WC9ZL7NyrwsW0oviwsWDgRuVYtJg==", + "dev": true, + "requires": { + "hoek": "4.2.0" + } + }, + "spdx-correct": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz", + "integrity": "sha1-SzBz2TP/UfORLwOsVRlJikFQ20A=", + "dev": true, + "requires": { + "spdx-license-ids": "1.2.2" + } + }, + "spdx-expression-parse": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.4.tgz", + "integrity": "sha1-m98vIOH0DtRH++JzJmGR/O1RYmw=", + "dev": true + }, + "spdx-license-ids": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz", + "integrity": "sha1-yd96NCRZSt5r0RkA1ZZpbcBrrFc=", + "dev": true + }, + "speedometer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/speedometer/-/speedometer-0.1.4.tgz", + "integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0=", + "dev": true + }, + "sshpk": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", + "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", + "dev": true, + "requires": { + "asn1": "0.2.3", + "assert-plus": "1.0.0", + "bcrypt-pbkdf": "1.0.1", + "dashdash": "1.14.1", + "ecc-jsbn": "0.1.1", + "getpass": "0.1.7", + "jsbn": "0.1.1", + "tweetnacl": "0.14.5" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "1.1.0", + "is-fullwidth-code-point": "1.0.0", + "strip-ansi": "3.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "stringstream": { + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", + "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", + "dev": true + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "2.1.1" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "sumchecker": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/sumchecker/-/sumchecker-1.3.1.tgz", + "integrity": "sha1-ebs7RFbdBPGOvbwNcDodHa7FEF0=", + "dev": true, + "requires": { + "debug": "2.6.9", + "es6-promise": "4.2.4" + } + }, + "throttleit": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/throttleit/-/throttleit-0.0.2.tgz", + "integrity": "sha1-z+34jmDADdlpe2H90qg0OptoDq8=", + "dev": true + }, + "through2": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", + "integrity": "sha1-6zKE2k6jEbbMis42U3SKUqvyWj8=", + "dev": true, + "requires": { + "readable-stream": "1.1.14", + "xtend": "2.1.2" + } + }, + "tough-cookie": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.3.tgz", + "integrity": "sha1-C2GKVWW23qkL80JdBNVe3EdadWE=", + "dev": true, + "requires": { + "punycode": "1.4.1" + } + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "5.1.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true, + "optional": true + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "uuid": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", + "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz", + "integrity": "sha1-KAS6vnEq0zeUWaz74kdGqywwP7w=", + "dev": true, + "requires": { + "spdx-correct": "1.0.2", + "spdx-expression-parse": "1.0.4" + } + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "1.3.0" + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "xtend": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", + "integrity": "sha1-bv7MKk2tjmlixJAbM3znuoe10os=", + "dev": true, + "requires": { + "object-keys": "0.4.0" + } + }, + "yauzl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.4.1.tgz", + "integrity": "sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU=", + "dev": true, + "requires": { + "fd-slicer": "1.0.1" + } + } + } +} diff --git a/Samples/H2SimulationGUI/package.json b/Samples/H2SimulationGUI/package.json new file mode 100644 index 000000000000..7ce71e64286f --- /dev/null +++ b/Samples/H2SimulationGUI/package.json @@ -0,0 +1,17 @@ +{ + "name": "h2-simulation-demo", + "version": "1.0.0", + "main": "main.js", + "scripts": { + "start": "electron ." + }, + "author": "Microsoft", + "license": "MIT", + "devDependencies": { + "electron": "~1.7.8" + }, + "dependencies": { + "node-ipc": "9.1.1", + "chart.js": "2.7.1" + } +} diff --git a/Samples/H2SimulationGUI/packages.config b/Samples/H2SimulationGUI/packages.config deleted file mode 100644 index 43017169e3a3..000000000000 --- a/Samples/H2SimulationGUI/packages.config +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - \ No newline at end of file diff --git a/Samples/H2SimulationGUI/renderer.js b/Samples/H2SimulationGUI/renderer.js new file mode 100644 index 000000000000..e61a9116920c --- /dev/null +++ b/Samples/H2SimulationGUI/renderer.js @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +"use strict"; +exports.id = 'renderer'; + +const ipc = require('node-ipc') + +exports.connectToSimulationServer = function(callback) { + ipc.config.id = "h2SimulationClient"; + ipc.config.networkPort = 8001; + + ipc.connectToNet( + "h2SimulationServer", + () => { + ipc.of.h2SimulationServer.on( + 'connect', + () => { + ipc.log('## Connected to simulation server. ##', ipc.config.delay); + ipc.of.h2SimulationServer.emit( + 'event', + 'readyToPlot' + ) + } + ); + + ipc.of.h2SimulationServer.on( + 'disconnect', + () => { + ipc.log('## Disconnected from simulation server. ##') + } + ) + + ipc.of.h2SimulationServer.on( + 'plotPoint', + (data) => { + ipc.log('## Got data: ', data, ' ##') + callback(data); + } + ) + } + ) +} + diff --git a/Samples/HubbardSimulation/HubbardSimulationSample.csproj b/Samples/HubbardSimulation/HubbardSimulationSample.csproj index ef39a1cb5d89..cbf94eb129ae 100644 --- a/Samples/HubbardSimulation/HubbardSimulationSample.csproj +++ b/Samples/HubbardSimulation/HubbardSimulationSample.csproj @@ -1,141 +1,16 @@ - - - - + + - Debug - AnyCPU - {8C771873-E2F2-440B-A2C3-CAD38AA5A6F7} Exe - Microsoft.Quantum.Samples.Hubbard - HubbardSimulation - v4.6.1 - 512 - true - - - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - true - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - true - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - - + - - False - Microsoft .NET Framework 4.6.1 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/HubbardSimulation/Program.cs b/Samples/HubbardSimulation/Program.cs index d1b88b27acc4..57e310c27b13 100644 --- a/Samples/HubbardSimulation/Program.cs +++ b/Samples/HubbardSimulation/Program.cs @@ -78,6 +78,7 @@ static void Main(string[] args) #endregion + Console.WriteLine("Press Enter to continue..."); Console.ReadLine(); } } diff --git a/Samples/HubbardSimulation/Properties/AssemblyInfo.cs b/Samples/HubbardSimulation/Properties/AssemblyInfo.cs deleted file mode 100644 index 5faf0bac1b26..000000000000 --- a/Samples/HubbardSimulation/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IsingModel")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("IsingModel")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("55174a3f-a1a0-4f66-827d-cd0d07f8fb9c")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/HubbardSimulation/packages.config b/Samples/HubbardSimulation/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/HubbardSimulation/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/IntegerFactorization/IntegerFactorization.csproj b/Samples/IntegerFactorization/IntegerFactorization.csproj index 8782d2015de8..3692afe1f6eb 100644 --- a/Samples/IntegerFactorization/IntegerFactorization.csproj +++ b/Samples/IntegerFactorization/IntegerFactorization.csproj @@ -1,95 +1,24 @@ - - - - + + - Debug - AnyCPU - {7D655364-1C17-488E-8E9A-01A04C5898CD} Exe - IntegerFactorization - IntegerFactorization - v4.6.1 - 512 - true - - + netcoreapp2.0 + x64 - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - false + + + + 0162 + - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/IntegerFactorization/Program.cs b/Samples/IntegerFactorization/Program.cs index 2d40ad5fc933..a196fd4b9a87 100644 --- a/Samples/IntegerFactorization/Program.cs +++ b/Samples/IntegerFactorization/Program.cs @@ -1,7 +1,6 @@ // Copyright (c) Microsoft Corporation. All rights reserved. // Licensed under the MIT License. - using System; using Microsoft.Quantum.Simulation.Simulators; using Microsoft.Quantum.Simulation.Core; diff --git a/Samples/IntegerFactorization/Properties/AssemblyInfo.cs b/Samples/IntegerFactorization/Properties/AssemblyInfo.cs deleted file mode 100644 index b97d48499bf9..000000000000 --- a/Samples/IntegerFactorization/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IntegerFactorizationWithCanon")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("IntegerFactorizationWithCanon")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("7d655364-1c17-488e-8e9a-01a04c5898cd")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/IntegerFactorization/packages.config b/Samples/IntegerFactorization/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/IntegerFactorization/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/IsingGenerators/IsingGeneratorsSample.csproj b/Samples/IsingGenerators/IsingGeneratorsSample.csproj index 0d709d3fe284..cbf94eb129ae 100644 --- a/Samples/IsingGenerators/IsingGeneratorsSample.csproj +++ b/Samples/IsingGenerators/IsingGeneratorsSample.csproj @@ -1,114 +1,16 @@ - - - - + + - Debug - AnyCPU - {179B52ED-B81F-4844-A263-8E49D6DAB4A5} Exe - Ising_Generators - Ising_Generators - v4.6.1 - 512 - true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\x64\Release\ - TRACE - true - pdbonly + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - true + - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/IsingGenerators/Program.cs b/Samples/IsingGenerators/Program.cs index 0ae6e6f46407..937649f3060c 100644 --- a/Samples/IsingGenerators/Program.cs +++ b/Samples/IsingGenerators/Program.cs @@ -89,11 +89,12 @@ static void Main(string[] args) $"with coefficient {coefficient}. \n"); } - - Console.ReadLine(); #endregion + Console.WriteLine("Press Enter to continue..."); + Console.ReadLine(); + } } } diff --git a/Samples/IsingGenerators/Properties/AssemblyInfo.cs b/Samples/IsingGenerators/Properties/AssemblyInfo.cs deleted file mode 100644 index 37ca31ea83d3..000000000000 --- a/Samples/IsingGenerators/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Ising_Generators")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Ising_Generators")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("179b52ed-b81f-4844-a263-8e49d6dab4a5")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/IsingGenerators/packages.config b/Samples/IsingGenerators/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/IsingGenerators/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/IsingPhaseEstimation/IsingPhaseEstimationSample.csproj b/Samples/IsingPhaseEstimation/IsingPhaseEstimationSample.csproj index b6063d441e47..aed5c7d549eb 100644 --- a/Samples/IsingPhaseEstimation/IsingPhaseEstimationSample.csproj +++ b/Samples/IsingPhaseEstimation/IsingPhaseEstimationSample.csproj @@ -1,124 +1,18 @@ - - - - + + - Debug - AnyCPU - {F1560649-37E2-4A95-938D-F4B48644583D} Exe - Ising_Adiabatic_Evolution_B - Ising_Adiabatic_Evolution_B - v4.6.1 - 512 - true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - true - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - true - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - - - {7e3cbfa5-6dd8-4599-bd65-c5d2bed3b87a} - AdiabaticIsingSample - - - {179b52ed-b81f-4844-a263-8e49d6dab4a5} - IsingGeneratorsSample - + + + + - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/IsingPhaseEstimation/Program.cs b/Samples/IsingPhaseEstimation/Program.cs index d71f03234ba8..d77481b20554 100644 --- a/Samples/IsingPhaseEstimation/Program.cs +++ b/Samples/IsingPhaseEstimation/Program.cs @@ -119,7 +119,7 @@ static void Main(string[] args) Console.WriteLine("Energy estimate: {0} vs Theory: {1}.", phaseEst, energyTheory); } - + Console.WriteLine("Press Enter to continue..."); Console.ReadLine(); #endregion diff --git a/Samples/IsingPhaseEstimation/Properties/AssemblyInfo.cs b/Samples/IsingPhaseEstimation/Properties/AssemblyInfo.cs deleted file mode 100644 index 24fff87b83e8..000000000000 --- a/Samples/IsingPhaseEstimation/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Ising_Adiabatic_Evolution_B")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Ising_Adiabatic_Evolution_B")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f1560649-37e2-4a95-938d-f4b48644583d")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/IsingPhaseEstimation/packages.config b/Samples/IsingPhaseEstimation/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/IsingPhaseEstimation/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/IsingTrotterEvolution/IsingTrotterSample.csproj b/Samples/IsingTrotterEvolution/IsingTrotterSample.csproj index f94b2f859b3a..cbf94eb129ae 100644 --- a/Samples/IsingTrotterEvolution/IsingTrotterSample.csproj +++ b/Samples/IsingTrotterEvolution/IsingTrotterSample.csproj @@ -1,113 +1,16 @@ - - - - + + - Debug - AnyCPU - {F210681B-3E3D-4ED3-A0B5-B90CB4A64C93} Exe - IsingTrotterSample - IsingTrotterSample - v4.6.1 - 512 - true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - true - - - bin\x64\Release\ - TRACE - true - pdbonly + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - true + - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/IsingTrotterEvolution/Program.cs b/Samples/IsingTrotterEvolution/Program.cs index b1af932dfcff..916a7200eb7a 100644 --- a/Samples/IsingTrotterEvolution/Program.cs +++ b/Samples/IsingTrotterEvolution/Program.cs @@ -96,6 +96,8 @@ static void Main(string[] args) } Console.Write($"\t after {repeats} repeats.\n"); } + + Console.WriteLine("Press Enter to continue..."); Console.ReadLine(); #endregion diff --git a/Samples/IsingTrotterEvolution/Properties/AssemblyInfo.cs b/Samples/IsingTrotterEvolution/Properties/AssemblyInfo.cs deleted file mode 100644 index d403ea3d3e2c..000000000000 --- a/Samples/IsingTrotterEvolution/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IsingTrotterSample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("IsingTrotterSample")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f210681b-3e3d-4ed3-a0b5-b90cb4a64c93")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/IsingTrotterEvolution/packages.config b/Samples/IsingTrotterEvolution/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/IsingTrotterEvolution/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/Measurement/Driver.cs b/Samples/Measurement/Driver.cs index 47ffcb978f94..40509df80628 100644 --- a/Samples/Measurement/Driver.cs +++ b/Samples/Measurement/Driver.cs @@ -76,7 +76,7 @@ static void Main(string[] args) #endregion - System.Console.WriteLine("\n\nPress Enter to exit...\n\n"); + System.Console.WriteLine("\n\nPress Enter to continue...\n\n"); System.Console.ReadLine(); } diff --git a/Samples/Measurement/Measurement.csproj b/Samples/Measurement/Measurement.csproj index 3968a393e3f3..cbf94eb129ae 100644 --- a/Samples/Measurement/Measurement.csproj +++ b/Samples/Measurement/Measurement.csproj @@ -1,100 +1,16 @@ - - - + + - Debug - AnyCPU - 8.0.30703 - 2.0 - {ECC1DAB3-CCEF-47ED-BFBE-44E273C60776} Exe - Properties - Quantum.Measurement - Measurement - v4.6.1 - 512 - false - - + netcoreapp2.0 + x64 - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - - - - ..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - + - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - \ No newline at end of file + diff --git a/Samples/Measurement/Properties/AssemblyInfo.cs b/Samples/Measurement/Properties/AssemblyInfo.cs deleted file mode 100644 index d65bb8f0c8cf..000000000000 --- a/Samples/Measurement/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("Measurement")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("Measurement")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("ecc1dab3-ccef-47ed-bfbe-44e273c60776")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/Measurement/packages.config b/Samples/Measurement/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/Measurement/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/PhaseEstimation/Driver.cs b/Samples/PhaseEstimation/Driver.cs index f2b9be834580..85e5d93f3392 100644 --- a/Samples/PhaseEstimation/Driver.cs +++ b/Samples/PhaseEstimation/Driver.cs @@ -60,7 +60,7 @@ static void Main(string[] args) #endregion - System.Console.WriteLine("\n\nPress Enter to exit...\n\n"); + System.Console.WriteLine("\n\nPress Enter to continue...\n\n"); System.Console.ReadLine(); } diff --git a/Samples/PhaseEstimation/PhaseEstimationSample.csproj b/Samples/PhaseEstimation/PhaseEstimationSample.csproj index 2606e0d4c1d4..6d15834bfbac 100644 --- a/Samples/PhaseEstimation/PhaseEstimationSample.csproj +++ b/Samples/PhaseEstimation/PhaseEstimationSample.csproj @@ -1,112 +1,20 @@ - - - + + - Debug - AnyCPU - {F36C17E3-68EA-4ECF-828E-3FDEFFD8941D} Exe - PhaseEstimationSample - PhaseEstimationSample - v4.6.1 - 512 - true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - true + + + 1701;1702;1705;0162;0219 + - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/PhaseEstimation/Properties/AssemblyInfo.cs b/Samples/PhaseEstimation/Properties/AssemblyInfo.cs deleted file mode 100644 index 5190ec0cbc31..000000000000 --- a/Samples/PhaseEstimation/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("PhaseEstimationExample")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("PhaseEstimationExample")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("f36c17e3-68ea-4ecf-828e-3fdeffd8941d")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/PhaseEstimation/packages.config b/Samples/PhaseEstimation/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/PhaseEstimation/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/PythonInterop/Operation.qs b/Samples/PythonInterop/Operation.qs new file mode 100644 index 000000000000..452055c07cec --- /dev/null +++ b/Samples/PythonInterop/Operation.qs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace Microsoft.Quantum.Samples.Python { + open Microsoft.Quantum.Primitive; + open Microsoft.Quantum.Canon; + + function HelloWorld(pauli : Pauli) : () { + Message($"Hello, world! {pauli}"); + } + + operation NoisyHadamardChannelImpl(depol : Double, target : Qubit) : () { + body { + let idxAction = Random([1.0 - depol; depol]); + if (idxAction == 0) { + H(target); + } else { + PrepareSingleQubitIdentity(target); + } + } + } + + function NoisyHadamardChannel(depol : Double) : (Qubit => ()) { + return NoisyHadamardChannelImpl(depol, _); + } + +} diff --git a/Samples/PythonInterop/PythonInterop.csproj b/Samples/PythonInterop/PythonInterop.csproj new file mode 100644 index 000000000000..536ce6443948 --- /dev/null +++ b/Samples/PythonInterop/PythonInterop.csproj @@ -0,0 +1,14 @@ + + + netstandard2.0 + x64 + + + + + + + + + + diff --git a/Samples/PythonInterop/README.md b/Samples/PythonInterop/README.md new file mode 100644 index 000000000000..b484b0357cdc --- /dev/null +++ b/Samples/PythonInterop/README.md @@ -0,0 +1,156 @@ +# Python Interoperability # + +This sample demonstrates the use of Python to call into Q# by using the [QInfer](http://qinfer.org/) and [QuTiP](http://qutip.org/) Python libraries to study the behavior of a Q# operation. + +**NB**: This sample is currently a preview, and is supported on Windows only. + +## Installation ## + +As this sample demonstrates using Q# and Python together, we'll need to install a few more things than for Q# itself: + +- **Python 3.5** or later +- **Jupyter Notebook** +- Python packages used by this sample: **Python.NET**, **NumPy**/**SciPy**, **Matplotlib**, **QInfer**, and **QuTiP** +- **.NET Framework 4.7.1** or later is required for this sample. + This version of the .NET Framework is installed with Windows 10 Fall Creators Update (launched in October 2017), but you may need to install it separately if you are on an earlier version of Windows. + [See below](#net-framework-versions) to check your installed version, and how to update if needed. + +We recommend installing the [**Anaconda distribution**](https://www.anaconda.com/) of Python, as it includes NumPy, SciPy, Jupyter, and tools to make it easier to install and manage Python packages. + +### Installing Anaconda ### + +- Download the [latest version of Anaconda](https://www.anaconda.com/download/#windows), making sure to select the Python 3.5 or later version and not the version for Python 2.7. +- Run the Anaconda installer, and make sure to select *Add to PATH* during the installation. + +To check that Anaconda was installed correctly, run `python` from your favorite command line. +You should see something like the following: + +```powershell +PS> python +Python 3.6.2 |Anaconda custom (64-bit)| (default, Sep 19 2017, 08:03:39) [MSC v.1900 64 bit (AMD64)] on win32 +Type "help", "copyright", "credits" or "license" for more information. +>>> +``` +Type `exit()` and press *Enter* to quit Python and return to your command line. + +The Anaconda distribution installed above comes with Jupyter Notebook by default, but we recommend installing the `nb_conda` extension as well: + +```powershell +PS> conda install nb_conda +``` + +### Installing Required Python Packages ### + +Once you have Anaconda installed, run the following from your favorite command line to install the environment for this sample: + +```powershell +> cd Samples/PythonInterop +> conda env create -f environment.yml +``` + +#### [Optional] Testing the New Conda Environment #### + +To use the new environment from the command line, we must activate it with the `activate` command. +For instance, to find the path at which the new environment was created, we can run the following commands: + +```powershell +PS> cmd +> activate qsharp-samples +(qsharp-samples) > python -c "import sys; print(sys.executable)" +C:\Users\\AppData\Local\Continuum\anaconda3\envs\qsharp-samples\python.exe +``` + +Note that `cmd` is required as `activate` is not currently supported from within PowerShell; if the `(qsharp-samples)` prompt does not appear, you may need to run the above commands from within `cmd`. + +In any case, we will not be executing Jupyter inside this enviroment directly, but we will instead rely on `nb_conda` as installed above. +Thus, you must deactivate `qsharp-samples` to get back to the `root` environment. +This is done with the `deactivate` command: + +```powershell +(qsharp-samples) > deactivate +``` + +### Running the Sample ### + +Once everything is installed, from the command line build the PythonInterp project using dotnet: + +```powershell +PS> cd Samples\PythonInterop +PS> dotnet build +``` + +Then run `jupyter notebook` to start the Jupyter Notebook interface in your web browser: + +```powershell +PS> jupyter notebook +``` + +On the browser +- Select the `tomography-sample.ipynb` notebook in your browser to view the sample. +- From the `Kernel` menu, change to the `Python [conda env: qsharp-samples]` kernel. +- You are ready to start running the `tomography-sample` notebook. + +## Troubleshooting ## + +### `raw write() returned invalid length` ### + +You may see an error message similar to the one below: + +``` +File "C:\Users\\AppData\Local\Continuum\anaconda3\envs\qsharp-samples\lib\site-packages\pip\_vendor\colorama\ansitowin32.py", line 141, in write + self.write_and_convert(text) + File "C:\Users\\AppData\Local\Continuum\anaconda3\envs\qsharp-samples\lib\site-packages\pip\_vendor\colorama\ansitowin32.py", line 169, in write_and_convert + self.write_plain_text(text, cursor, len(text)) + File "C:\Users\\AppData\Local\Continuum\anaconda3\envs\qsharp-samples\lib\site-packages\pip\_vendor\colorama\ansitowin32.py", line 175, in write_plain_text + self.wrapped.flush() +OSError: raw write() returned invalid length 134 (should have been between 0 and 67) + 9% |### | 348kB 2.7MB/s eta 0:00:02 +``` + +This is a known issue with running Python 3.5 from within VS Code. +If you encounter this error, run the sample from a PowerShell window outside of VS Code. + +### `ImportError: No module named 'Microsoft.Quantum.Samples'; 'Microsoft.Quantum' is not a package` ### + +If there is an error loading a .NET assembly into Python, this may manifest as an `ImportError` later in the notebook when you attempt to import namespaces exposed in that assembly. +This may happen because the assemblies defining your Q# operations and functions did not build properly. +To check this, run `dotnet build` again. + +The next most often cause of this problem is a version number mismatch between the version of the Quantum Development Kit expected by the Python interoperability package and the version referenced by the assembly that you are loading. +If the `qsharp` Python package successfully imports, you can check its version by running `print(qsharp.version)` from within Python. +To check if the `qsharp` package installed at all, please use the `conda list` command: + +```bash +$ conda list -n qsharp-samples qsharp +``` + +This version number should agree with the version listed in [`PythonInterop.csproj`](./PythonInterop.csproj), up to that Python packages do not use the `-preview` notation. + +If all else fails, you can see more detailed error messages by catching the exceptions raised by the .NET assembly loader: + +```python +>>> import sys +>>> sys.path.append('./bin/Debug/netstandard2.0') +>>> import qsharp + +>>> import clr +>>> asm = clr.AddReference('PythonInterop') +>>> try: +... print(asm.DefinedTypes) +... except Exception as ex: +... for loader_ex in ex.LoaderExceptions: +... print(loader_ex) +``` + +### .NET Framework Versions ### + +This sample uses *.NET Standard 2.0*, first supported by the .NET Framework as of version 4.7.1. +.NET Framework 4.7.1 can be installed on Windows 7 or later, and comes installed by default on Windows 10 Fall Creators Update and later. +To check if your installation of .NET Framework supports .NET Standard 2.0, run the following command in Windows PowerShell or PowerShell Core: + +```powershell +PS> Get-ChildItem "HKLM:SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\" | Get-ItemPropertyValue -Name Release | ForEach-Object { $_ -ge 461308 } +``` + +If your installation of .NET Framework supports .NET Standard 2.0, you will see the word `True` printed to the console. +Otherwise, please [update your installation of the .NET Framework](https://www.microsoft.com/net/download/dotnet-framework-runtime). diff --git a/Samples/PythonInterop/environment.yml b/Samples/PythonInterop/environment.yml new file mode 100644 index 000000000000..9780988ec7e0 --- /dev/null +++ b/Samples/PythonInterop/environment.yml @@ -0,0 +1,28 @@ +## +# environment.yml: Specification of a conda environment for use with +# Q# interoperability samples. +## +# Copyright (c) Microsoft Corporation. All rights reserved. +# Licensed under the MIT License. +## + +name: qsharp-samples +channels: + - conda-forge + - pythonnet + - https://solidrepo.blob.core.windows.net/release/latest/qdk-channel +dependencies: + - python>=3.6 + - numpy + - scipy + - future + - pythonnet + - qutip + - matplotlib + - ipyparallel + - py + - qsharp=0.2.1802.2202 + - pip: + - qinfer + - duecredit + - mpltools diff --git a/Samples/PythonInterop/tomography-sample.ipynb b/Samples/PythonInterop/tomography-sample.ipynb new file mode 100644 index 000000000000..cf6aa03815e3 --- /dev/null +++ b/Samples/PythonInterop/tomography-sample.ipynb @@ -0,0 +1,666 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Quantum Process Tomography with Q# and Python #" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Abstract ##" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In this sample, we will demonstrate interoperability between Q# and Python by using the QInfer and QuTiP libraries for Python to characterize and verify quantum processes implemented in Q#.\n", + "In particular, this sample will use *quantum process tomography* to learn about the behavior of a \"noisy\" Hadamard operation from the results of random Pauli measurements." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Preamble ##" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "When working with Q# from languages other than C#, we normally need to separate Q# operations and functions into their own project.\n", + "We can then add the project containing our new operations as a *reference* to our interoperability project in order to run from within Visual Studio.\n", + "For running from Jupyter, though, we must manually add the other project to `sys.path` so that Python.NET can find the assemblies containing our new operations, as well as the assemblies from the rest of the Quantum Development Kit that get included as dependencies." + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "" + ], + "text/plain": [] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import qsharp \n", + "from qsharp.tomography import single_qubit_process_tomography" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import warnings; warnings.filterwarnings('ignore')" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import sys\n", + "sys.path.append('./bin/Debug/netstandard2.0')" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "With the new assemblies added to `sys.path`, we can reference them using the Python.NET `clr` package." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "" + ] + }, + "execution_count": 4, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import clr\n", + "clr.AddReference(\"Microsoft.Quantum.Canon\")\n", + "clr.AddReference(\"PythonInterop\")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Next, we import plotting support and the QuTiP library, since these will be helpful to us in manipulating the quantum objects returned by the quantum process tomography functionality that we call later." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "%matplotlib inline\n", + "import matplotlib.pyplot as plt" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "import qutip as qt\n", + "qt.settings.colorblind_safe = True" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Setting up the Simulator ##" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "This sample is provided along with a small Python package to help facilitate interoperability.\n", + "We can import this package like any other Python package, provided that we have set `sys.path` correctly." + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "In particular, the `qsharp` package provides a `QuantumSimulator` class which wraps the `Microsoft.Quantum.Simulation.Simulators.QuantumSimulator` .NET class provided with the Quantum Development Kit.\n", + "This wrapper provides a few useful convienence features that we will use along the way." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Quantum Simulator\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "
\n", + "
Microsoft.Quantum.Simulation.Simulators.QuantumSimulator
\n", + "
\n", + " Python type\n", + " \n", + " qsharp.QuantumSimulator\n", + "
\n", + " CLR type\n", + " \n", + " Microsoft.Quantum.Simulation.Simulators.QuantumSimulator\n", + "
\n", + " Assembly name\n", + " \n", + " Microsoft.Quantum.Simulation.Simulators, Version=0.2.1802.2202, Culture=neutral, PublicKeyToken=40866b40fd95c7f5\n", + "
\n", + " Methods\n", + "
UInt32 get_Seed()
String get_Name()
Void Dispose()
Void add_OnLog(Action`1 value)
Void remove_OnLog(Action`1 value)
IQubitManager get_QubitManager()
I Get()
Void Validate(AbstractOperation<> op)
Task`1 Run(I<> args)
Void CheckQubit(Qubit<> q, String<> qubitName)
Void CheckQubits(QArray`1 qubits, String<> arrayName)
Void StartOperation(String<> operationName, OperationFunctor<> functor, Object<> inputValue)
Void EndOperation(String<> operationName, OperationFunctor<> functor, Object<> resultValue)
Void Register(Type<> original, Type<> replace, Type<> signature)
Object GetInstance(Type<> t)
Boolean CanCache(AbstractOperation<> obj)
String ToString()
Boolean Equals(Object<> obj)
Int32 GetHashCode()
Type GetType()
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "qsim = qsharp.QuantumSimulator()\n", + "qsim" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We can use our new simulator instance to run operations and functions defined in Q#.\n", + "To do so, we import the operation and function names as though the Q# namespaces were Python packages." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "from Microsoft.Quantum.Samples.Python import (\n", + " HelloWorld, NoisyHadamardChannel\n", + ")" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Once we've imported the new names, we can then ask our simulator to run each function and operation using the `run` method.\n", + "Jupyter will denote messages emitted by the simulator with a blue sidebar to separate them from normal Python output." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Microsoft.Quantum.Samples.Python.HelloWorld\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + "
\n", + " Python type\n", + " \n", + " qsharp.Callable\n", + "
\n", + " CLR type\n", + " \n", + " Microsoft.Quantum.Samples.Python.HelloWorld\n", + "
\n", + " Assembly name\n", + " \n", + " PythonInterop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\n", + "
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "hello_world = qsim.get(HelloWorld)\n", + "hello_world" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + "
Hello, world! PauliZ
\n" + ], + "text/plain": [ + "'Hello, world! PauliZ'" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "qsim.run(hello_world, qsharp.Pauli.Z).Wait()" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To obtain the output from a Q# operation or function, we must use the `result` function, since outputs are wrapped in .NET asynchronous tasks.\n", + "These tasks are wrapped in a future-like object for convienence." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " Wrapped CLR Object\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + "\n", + " \n", + " \n", + " \n", + "\n", + " \n", + "\n", + " \n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + "\n", + " \n", + " \n", + "
\n", + "
Microsoft.Quantum.Samples.Python.NoisyHadamardChannelImpl((0.1,_))
\n", + "
\n", + " Python type\n", + " \n", + " qsharp.clr_wrapper.WrappedCLRObject\n", + "
\n", + " CLR type\n", + " \n", + " Microsoft.Quantum.Simulation.Core.PartialUnitary`2[[Microsoft.Quantum.Simulation.Core.Qubit, Microsoft.Quantum.Simulation.Core, Version=0.2.1802.2202, Culture=neutral, PublicKeyToken=40866b40fd95c7f5],[System.ValueTuple`2[[System.Double, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[Microsoft.Quantum.Simulation.Core.Qubit, Microsoft.Quantum.Simulation.Core, Version=0.2.1802.2202, Culture=neutral, PublicKeyToken=40866b40fd95c7f5]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]\n", + "
\n", + " Assembly name\n", + " \n", + " Microsoft.Quantum.Simulation.Core, Version=0.2.1802.2202, Culture=neutral, PublicKeyToken=40866b40fd95c7f5\n", + "
\n", + " Methods\n", + "
Type[] get_Dependencies()
Operation`2 get_BaseOp()
Func`2 get_Mapper()
Func`2 get_Body()
Func`2 get_AdjointBody()
Func`2 get_ControlledBody()
Func`2 get_ControlledAdjointBody()
List`1 GetQubits()
String ToString()
QVoid Apply(Qubit<> args)
Object Partial(Object<> partialTuple)
IOperationFactory get_Factory()
Boolean Equals(Object<> obj)
Int32 GetHashCode()
Type GetType()
\n", + " " + ], + "text/plain": [ + "" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "noisy_h = qsim.run(NoisyHadamardChannel, 0.1).result()\n", + "noisy_h" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Tomography ##" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "The `qsharp` interoperability package also comes with a `single_qubit_process_tomography` function which uses the QInfer library for Python to learn the channels corresponding to single-qubit Q# operations.\n", + "Here, we ask for 10,000 measurements from the noisy Hadamard operation that we defined above." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Preparing tomography model...\n", + "Performing tomography...\n" + ] + } + ], + "source": [ + "estimation_results = single_qubit_process_tomography(qsim, noisy_h, n_measurements=10000)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "To visualize the results, it's helpful to compare to the actual channel, which we can find exactly in QuTiP." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "metadata": { + "collapsed": true + }, + "outputs": [], + "source": [ + "depolarizing_channel = sum(map(qt.to_super, [qt.qeye(2), qt.sigmax(), qt.sigmay(), qt.sigmaz()])) / 4.0\n", + "actual_noisy_h = 0.1 * qt.to_choi(depolarizing_channel) + 0.9 * qt.to_choi(qt.hadamard_transform())" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We then plot the estimated and actual channels as Hinton diagrams, showing how each acts on the Pauli operators $X$, $Y$ and $Z$." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(None, )" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "fig, (left, right) = plt.subplots(ncols=2, figsize=(12, 4))\n", + "plt.sca(left)\n", + "plt.xlabel('Estimated', fontsize='x-large')\n", + "qt.visualization.hinton(estimation_results['est_channel'], ax=left)\n", + "plt.sca(right)\n", + "plt.xlabel('Actual', fontsize='x-large')\n", + "qt.visualization.hinton(actual_noisy_h, ax=right)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "We also obtain a wealth of other information as well, such as the covariance matrix over each parameter of the resulting channel.\n", + "This shows us which parameters we are least certain about, as well as how those parameters are correlated with each other." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15]),\n", + " )" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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\n", + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plt.figure(figsize=(10, 10))\n", + "estimation_results['posterior'].plot_covariance()\n", + "plt.xticks(rotation=90)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## Diagnostics ##" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Python version: 3.6.4 | packaged by conda-forge | (default, Dec 24 2017, 10:11:43) [MSC v.1900 64 bit (AMD64)]\n", + "Quantum Development Kit version: 0.2.1802.2202\n", + "\n" + ] + } + ], + "source": [ + "import sys\n", + "print(\"\"\"\n", + "Python version: {}\n", + "Quantum Development Kit version: {}\n", + "\"\"\".format(sys.version, qsharp.__version__))" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python [conda env:qsharp-samples]", + "language": "python", + "name": "conda-env-qsharp-samples-py" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 2 +} diff --git a/Samples/README.md b/Samples/README.md index fb3712a0c780..7346282eb83e 100644 Binary files a/Samples/README.md and b/Samples/README.md differ diff --git a/Samples/SimpleAlgorithms/Driver.cs b/Samples/SimpleAlgorithms/Driver.cs index 2e054ed1e21c..05f2a0480dbc 100644 --- a/Samples/SimpleAlgorithms/Driver.cs +++ b/Samples/SimpleAlgorithms/Driver.cs @@ -124,7 +124,7 @@ static void Main(string[] args) #endregion - System.Console.WriteLine("\n\nPress Enter to exit...\n\n"); + System.Console.WriteLine("\n\nPress Enter to continue...\n\n"); System.Console.ReadLine(); } diff --git a/Samples/SimpleAlgorithms/Properties/AssemblyInfo.cs b/Samples/SimpleAlgorithms/Properties/AssemblyInfo.cs deleted file mode 100644 index 6a085512ec31..000000000000 --- a/Samples/SimpleAlgorithms/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("SimpleAlgorithms")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("SimpleAlgorithms")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("3754cbc9-6d79-4682-aa26-19f6fb589aa2")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/SimpleAlgorithms/SimpleAlgorithms.csproj b/Samples/SimpleAlgorithms/SimpleAlgorithms.csproj index 5bc3470ecfa1..4950cb296c98 100644 --- a/Samples/SimpleAlgorithms/SimpleAlgorithms.csproj +++ b/Samples/SimpleAlgorithms/SimpleAlgorithms.csproj @@ -1,98 +1,17 @@ - - - + + - Debug - AnyCPU - 8.0.30703 - 2.0 - {3754CBC9-6D79-4682-AA26-19F6FB589AA2} Exe - Properties - Quantum.SimpleAlgorithms - SimpleAlgorithms - v4.6.1 - 512 - false - - + netcoreapp2.0 + x64 + Microsoft.Quantum.Samples.SimpleAlgorithms.Driver - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - - - - $(SolutionDir)\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - + - - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - \ No newline at end of file + diff --git a/Samples/SimpleAlgorithms/packages.config b/Samples/SimpleAlgorithms/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/SimpleAlgorithms/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/SimpleIsing/Program.cs b/Samples/SimpleIsing/Program.cs index 5c766762d64f..073e11f5cdf8 100644 --- a/Samples/SimpleIsing/Program.cs +++ b/Samples/SimpleIsing/Program.cs @@ -80,6 +80,7 @@ static void Main(string[] args) #endregion + Console.WriteLine("Press Enter to continue..."); Console.ReadLine(); } } diff --git a/Samples/SimpleIsing/Properties/AssemblyInfo.cs b/Samples/SimpleIsing/Properties/AssemblyInfo.cs deleted file mode 100644 index 5faf0bac1b26..000000000000 --- a/Samples/SimpleIsing/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("IsingModel")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("IsingModel")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("55174a3f-a1a0-4f66-827d-cd0d07f8fb9c")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/SimpleIsing/SimpleIsingSample.csproj b/Samples/SimpleIsing/SimpleIsingSample.csproj index d649478dd2e3..3933a60e4278 100644 --- a/Samples/SimpleIsing/SimpleIsingSample.csproj +++ b/Samples/SimpleIsing/SimpleIsingSample.csproj @@ -1,135 +1,12 @@ - - - - + + - Debug - AnyCPU - {55174A3F-A1A0-4F66-827D-CD0D07F8FB9C} Exe - Microsoft.Quantum.Examples.IsingModel - SimpleIsingExample - v4.6.1 - 512 - true - - - false - publish\ - true - Disk - false - Foreground - 7 - Days - false - false - true - 0 - 1.0.0.%2a - false - true - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - true - - bin\x64\Release\ - TRACE - true - pdbonly - x64 - prompt - MinimumRecommendedRules.ruleset - true - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - - + - - False - Microsoft .NET Framework 4.6.1 %28x86 and x64%29 - true - - - False - .NET Framework 3.5 SP1 - false - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/SimpleIsing/packages.config b/Samples/SimpleIsing/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/SimpleIsing/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/Teleportation/Program.cs b/Samples/Teleportation/Program.cs index 13442cf52227..3ca3038689ae 100644 --- a/Samples/Teleportation/Program.cs +++ b/Samples/Teleportation/Program.cs @@ -20,7 +20,7 @@ static void Main(string[] args) System.Console.WriteLine(sent == received ? "Teleportation successful!!\n" : "\n"); } - System.Console.WriteLine("\n\nPress Enter to exit...\n\n"); + System.Console.WriteLine("\n\nPress Enter to continue...\n\n"); System.Console.ReadLine(); } diff --git a/Samples/Teleportation/Properties/AssemblyInfo.cs b/Samples/Teleportation/Properties/AssemblyInfo.cs deleted file mode 100644 index 933e4d32eb64..000000000000 --- a/Samples/Teleportation/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,40 +0,0 @@ -// Copyright (c) Microsoft Corporation. All rights reserved. -// Licensed under the MIT License. - - -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// General Information about an assembly is controlled through the following -// set of attributes. Change these attribute values to modify the information -// associated with an assembly. -[assembly: AssemblyTitle("TeleportDemo")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("TeleportDemo")] -[assembly: AssemblyCopyright("Copyright © 2017")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Setting ComVisible to false makes the types in this assembly not visible -// to COM components. If you need to access a type in this assembly from -// COM, set the ComVisible attribute to true on that type. -[assembly: ComVisible(false)] - -// The following GUID is for the ID of the typelib if this project is exposed to COM -[assembly: Guid("b88be160-367f-43f1-bb56-8e21972d43d4")] - -// Version information for an assembly consists of the following four values: -// -// Major Version -// Minor Version -// Build Number -// Revision -// -// You can specify all the values or you can default the Build and Revision Numbers -// by using the '*' as shown below: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/Samples/Teleportation/TeleportationSample.csproj b/Samples/Teleportation/TeleportationSample.csproj index 441d3674ee5e..cbf94eb129ae 100644 --- a/Samples/Teleportation/TeleportationSample.csproj +++ b/Samples/Teleportation/TeleportationSample.csproj @@ -1,113 +1,16 @@ - - - - + + - Debug - AnyCPU - {B88BE160-367F-43F1-BB56-8E21972D43D4} Exe - TeleportDemo - TeleportDemo - v4.6.1 - 512 - true - - - - - AnyCPU - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - false - - - AnyCPU - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - true - bin\x64\Debug\ - DEBUG;TRACE - full - x64 - prompt - MinimumRecommendedRules.ruleset - - - bin\x64\Release\ - TRACE - true - pdbonly + netcoreapp2.0 x64 - prompt - MinimumRecommendedRules.ruleset - true + - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - - - - - - - - - + + - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - + - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - \ No newline at end of file + diff --git a/Samples/Teleportation/packages.config b/Samples/Teleportation/packages.config deleted file mode 100644 index 587c497a234b..000000000000 --- a/Samples/Teleportation/packages.config +++ /dev/null @@ -1,5 +0,0 @@ - - - - - \ No newline at end of file diff --git a/Samples/UnitTesting/Microsoft.Quantum.Canon.Tests.csproj b/Samples/UnitTesting/Microsoft.Quantum.Canon.Tests.csproj new file mode 100644 index 000000000000..da1e9cf23dd3 --- /dev/null +++ b/Samples/UnitTesting/Microsoft.Quantum.Canon.Tests.csproj @@ -0,0 +1,22 @@ + + + netcoreapp2.0 + x64 + false + false + latest + + + + + + + + + + + + + + + diff --git a/Samples/UnitTesting/UnitTesting.csproj b/Samples/UnitTesting/UnitTesting.csproj deleted file mode 100644 index 832e201bb372..000000000000 --- a/Samples/UnitTesting/UnitTesting.csproj +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - Debug - AnyCPU - {2606956D-E795-4EA5-957A-C41A9A79CAA9} - Library - Properties - UnitTesting - Microsoft.Quantum.Canon.Tests - v4.6.1 - 512 - - - - - true - full - false - bin\Debug\ - DEBUG;TRACE - prompt - 4 - - - pdbonly - true - bin\Release\ - TRACE - prompt - 4 - - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.MetaData.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Primitives.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Common.dll - - - ..\..\packages\Microsoft.Quantum.Xunit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Core.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.QCTraceSimulatorRuntime.dll - - - ..\..\packages\Microsoft.Quantum.Development.Kit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.Simulators.dll - - - ..\..\packages\Microsoft.Quantum.Xunit.0.1.1802.2201-preview\lib\net461\Microsoft.Quantum.Simulation.XUnit.dll - - - - - ..\..\packages\System.ValueTuple.4.4.0\lib\net461\System.ValueTuple.dll - - - - - - - - - ..\..\packages\xunit.abstractions.2.0.1\lib\net35\xunit.abstractions.dll - - - ..\..\packages\xunit.assert.2.3.1\lib\netstandard1.1\xunit.assert.dll - - - ..\..\packages\xunit.extensibility.core.2.3.1\lib\netstandard1.1\xunit.core.dll - - - ..\..\packages\xunit.extensibility.execution.2.3.1\lib\net452\xunit.execution.desktop.dll - - - - - - - - - - - - - - {2a1b0d78-2ce6-44db-bfa1-3575f3c36321} - Microsoft.Quantum.Canon - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}. - - - - - - - - - \ No newline at end of file diff --git a/Samples/UnitTesting/packages.config b/Samples/UnitTesting/packages.config deleted file mode 100644 index 159f0fb44be1..000000000000 --- a/Samples/UnitTesting/packages.config +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - \ No newline at end of file diff --git a/updateQDKVersion.sh b/updateQDKVersion.sh new file mode 100644 index 000000000000..7fe00922cd09 --- /dev/null +++ b/updateQDKVersion.sh @@ -0,0 +1,21 @@ +#!/bin/bash + +ver=$1 +pkgs=$2 + +: ${ver:="$NUGET_VERSION"} +: ${pkgs:="Microsoft.Quantum.Development.Kit;Microsoft.Quantum.Canon;Microsoft.Quantum.Xunit"} + +for pkg in `echo $pkgs | tr ";" "\n"`; do + echo Will update package $pkg with version $ver... + + grep --include=\*proj -lri -e "PackageReference *Include=\"$pkg\" *Version=" | xargs sed -i "s/PackageReference *Include=\"$pkg\" *Version=\"\([^\"]*\)\"/PackageReference Include=\"$pkg\" Version=\"$ver\"/i" + grep --include=\packages.config -lri -e "package *id=\"$pkg\" *version=" | xargs sed -i "s/package *id=\"$pkg\" *version=\"\([^\"]*\)\"/package id=\"$pkg\" version=\"$ver\"/i" +done + +echo done! +echo + +# For debugging.... +git status +git --no-pager diff