QuantumLibraries/Standard/tests/ApplyMultiControlledTests.qs

47 строки
1.7 KiB
Plaintext
Исходник Постоянная ссылка Обычный вид История

// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
namespace Microsoft.Quantum.Tests {
open Microsoft.Quantum.Canon;
Release v0.6 to master. (#98) * Begin refactoring standard libraries (#39) * Began splitting up namespaces. * Began refactoring tests. * Updated chemistry src and tests for new namespaces. * Remove unused opens. * Began renaming operations and functions. * Separated out and updated ApplyReversed*. * Updated BE ↔ LE type conversions. * Added new transformed operation fns. * Whitespace fix * Eliminated some redundant code in applyreversed * Fixed deprecation comments. * Began working on refactoring With. * Refactored With further. * More renaming for consistency with LE/BE suffix convention. * Added Zip3, Zip4 * Added shorthand for MAJ and updated some type conv. * Fixed a typo in Zip4. * Separated out and updated arithmetic measurements. * Other minor maintenance changes. * Started separating out modular arithmetic. * Began refactoring ripple-carry comparators. * Refactored integer increment operations. * Fixed some See Also blocks. * Some minor progress. * Moved new arithmetic functionality into right folders. * Renamed integer arithmetic namespaces. * Split out qecc namespace. * Added documentation file for Microsoft.Quantum.ErrorCorrection. * Progress on renaming type conversion functions. * More progress on updating type conversion names. * Split out AA namespace. * Split out oracles namespace as well. * Renamed UDTs to remove "AmpAmp" prefix. This prefix is now implied by the Microsoft.Quantum.AmplitudeAmplification namespace. * Renamed some Qecc operations/fns * Moved more conversions into Convert.qs. * Updated some deprecated syntax. * Split out M.Q.Convert. * Added missing open stmt. * Started separating out classical math. * Began separating out QCVV. * Fixing namespaces in tests. * Update to use new docgen. * Began making arrays namespace. * Updated to use new arrays and diagnostics namespaces. * Updated names for claims * Started extracting measurements from Paulis.qs. * Updated namespaces in tests as well. * Updating chemistry for most recent changes. * Added ForEach, used to simplify measurements. * Updating deprecated Q# syntax. * Minor fix for XML error. * Fixed infinite recursion in deprecation stubs. * Started trying to reduce # of warnings. * Fixed some minor build errors. * Resolved a couple TODOs. * Removed BigEndian support. * Resolved warnings due to && and ||. * Update Standard/src/Arithmetic/Shorthand.qs Co-Authored-By: cgranade <cgranade@gmail.com> * Addressing feedback. * Claim → Fact * Moved MeasureInteger back to Microsoft.Quantum.Arithmetic. * Resolved more deprecated syntax. * Removed one more LE suffix. * Addressing feedback. * Cgranade/complete 0.6 move (#57) * Revert "Begin refactoring standard libraries (#39)" (#56) As Chris pointed out, reverting these breaking changes until we have a chance to change everything... * Complete move of standard library refactoring to release branch This reverts commit 058048983c4d0509e5d522888d3d47ae49cd300e. * Explicitly qualify all names in M.Q.Ext.Math. (#74) * Explicitly qualify all names in M.Q.Ext.Math. * Fixed two missing qualified names. * Removed more occurances of M.Q.Ext.Math. * Removed Microsoft.Quantum.Extensions.Math from tests as well. * Reverted slight change to QuantumROM. * New array functions (#75) * Added new IndexRange function to eliminate `-1` in for loops. * Added some missing open statements. * New Enumerated function. * Port library and test code to new 0.6 names to reduce warning count. (#72) * Updating to use new syntax, namespace names, etc. * More primitive → intrinsic. * Updated test project to use beta version. * Updated chemistry proiects to beta. * Finding a few more calls to deprecated fns. * Cleaned up some assert and qcvv tests. * Removed uses of deprecated IntArrayFromRange * Resolved some more deprecated functions and ops. * Minor maintenance in QubitizationTests. * Bumped versions to latest beta. * Some trivial change to retrigger build. * Resolved package downgrade. * Move Microsoft.Quantum.Math.Complex UDT and resolve Microsoft.Quantum.Diagnostics deprecation stubs. (#77) * More primitive → intrinsic. * Finding a few more calls to deprecated fns. * Resolved some more deprecated functions and ops. * Minor maintenance in QubitizationTests. * Bumped versions to latest beta. * Resolved package downgrade. * Use Complex UDT at its new name. * Adapted tests. * A few more test adaptations. * Updated name of AssertQubitState to 0.6 name. * Fixes to chemistry. * Getting updates from master (#80) * Revert "Begin refactoring standard libraries (#39)" (#56) As Chris pointed out, reverting these breaking changes until we have a chance to change everything... * Missing return statement when compiling more than one Q# snippet from Python. (#60) * Fixing bug * Adding tests * Change Assembly.Version to Python.Version. (#64) * Prevent loading Q# modules when Python client is busy. (#71) * Prevent loading Q# modules when Python client is busy. * Linux build failed with some unrelated problem. Committing. * modifying contructor calls for QArray in preparation for a simulation framework change (#78) * Revert "Revert "Begin refactoring standard libraries (#39)" (#56)" This reverts commit 058048983c4d0509e5d522888d3d47ae49cd300e. * Update to 0.6.1904.1302-beta. (#81) * Update to 0.6.1904.1302-beta. * Removed deprecation warnings for Microsoft.Quantum.Math. * Resolved a few more deprecations. * Resolved a few more deprecation warnings. * A few more deprecation resolutions. * Removed some duplicate namespace opens. * Slight code cleanup. * Addressed feedback from @bettinaheim. * Standard.sln builds again, Standard.sln builds (#84) * Gulow/v0.6 chemistry deprecation (#82) * Update to 0.6.1904.1302-beta. * Removed deprecation warnings for Microsoft.Quantum.Math. * Resolved a few more deprecations. * Resolved a few more deprecation warnings. * A few more deprecation resolutions. * Removed some duplicate namespace opens. * Slight code cleanup. * Update test * . * Remove deprecated operations from chemistry and dependencies. * Fix comments * Update to use 0.65 syntax from latest beta. (#87) * Ported stateprep.qs to 0.65 syntax. * Fixed deprecation in test. * Updated to latest beta. * Fix mutable array issue in chemistry data model. (#88) * Explicitly call new QArray. (#89) * do not rely on collections.immutable (#93) * Continue migrating libraries to Q# 0.6 (#91) * Continue migrating to 0.65 syntax and applying style guidance. * A bit more progress normalizing private names. * Resolved more deprecated syntax, updated a name. * Resolved some more syntax warnings. * Ported more syntax and updated more names. * Resolved all remaining compile-time warnings in Standard. * Addressed all Q#-level compile-time warnings in chem. * Migrated a bit more syntax and updated to newest beta. * Moved to using intrinsic warnings. * Fixed endianness of exact QFT. * Fixed Microsoft.Quantum.Warnings. * Addressing @bettinaheim's feedback. * Removed some warnings in unit tests. * Adding DocsOutDir for single doc output location across projects. (#94) * Adding DocsOutDir for single doc output location across projects. * Begin adding more classical math functions for BigInt. (#96) * Begin adding more classical math functions for BigInt. * Addressing @beheim's feedback. * Minor fixes. * Bump to latest beta. * Fixed two minor bugs. * Fixed the type of signs. * Bump version to released packages.
2019-05-04 01:44:41 +03:00
open Microsoft.Quantum.Intrinsic;
open Microsoft.Quantum.Diagnostics;
/// # Summary
/// Tests multiply controlled not implementation that uses
/// ApplyMultiControlledCA against multiply controlled version of
Release v0.6 to master. (#98) * Begin refactoring standard libraries (#39) * Began splitting up namespaces. * Began refactoring tests. * Updated chemistry src and tests for new namespaces. * Remove unused opens. * Began renaming operations and functions. * Separated out and updated ApplyReversed*. * Updated BE ↔ LE type conversions. * Added new transformed operation fns. * Whitespace fix * Eliminated some redundant code in applyreversed * Fixed deprecation comments. * Began working on refactoring With. * Refactored With further. * More renaming for consistency with LE/BE suffix convention. * Added Zip3, Zip4 * Added shorthand for MAJ and updated some type conv. * Fixed a typo in Zip4. * Separated out and updated arithmetic measurements. * Other minor maintenance changes. * Started separating out modular arithmetic. * Began refactoring ripple-carry comparators. * Refactored integer increment operations. * Fixed some See Also blocks. * Some minor progress. * Moved new arithmetic functionality into right folders. * Renamed integer arithmetic namespaces. * Split out qecc namespace. * Added documentation file for Microsoft.Quantum.ErrorCorrection. * Progress on renaming type conversion functions. * More progress on updating type conversion names. * Split out AA namespace. * Split out oracles namespace as well. * Renamed UDTs to remove "AmpAmp" prefix. This prefix is now implied by the Microsoft.Quantum.AmplitudeAmplification namespace. * Renamed some Qecc operations/fns * Moved more conversions into Convert.qs. * Updated some deprecated syntax. * Split out M.Q.Convert. * Added missing open stmt. * Started separating out classical math. * Began separating out QCVV. * Fixing namespaces in tests. * Update to use new docgen. * Began making arrays namespace. * Updated to use new arrays and diagnostics namespaces. * Updated names for claims * Started extracting measurements from Paulis.qs. * Updated namespaces in tests as well. * Updating chemistry for most recent changes. * Added ForEach, used to simplify measurements. * Updating deprecated Q# syntax. * Minor fix for XML error. * Fixed infinite recursion in deprecation stubs. * Started trying to reduce # of warnings. * Fixed some minor build errors. * Resolved a couple TODOs. * Removed BigEndian support. * Resolved warnings due to && and ||. * Update Standard/src/Arithmetic/Shorthand.qs Co-Authored-By: cgranade <cgranade@gmail.com> * Addressing feedback. * Claim → Fact * Moved MeasureInteger back to Microsoft.Quantum.Arithmetic. * Resolved more deprecated syntax. * Removed one more LE suffix. * Addressing feedback. * Cgranade/complete 0.6 move (#57) * Revert "Begin refactoring standard libraries (#39)" (#56) As Chris pointed out, reverting these breaking changes until we have a chance to change everything... * Complete move of standard library refactoring to release branch This reverts commit 058048983c4d0509e5d522888d3d47ae49cd300e. * Explicitly qualify all names in M.Q.Ext.Math. (#74) * Explicitly qualify all names in M.Q.Ext.Math. * Fixed two missing qualified names. * Removed more occurances of M.Q.Ext.Math. * Removed Microsoft.Quantum.Extensions.Math from tests as well. * Reverted slight change to QuantumROM. * New array functions (#75) * Added new IndexRange function to eliminate `-1` in for loops. * Added some missing open statements. * New Enumerated function. * Port library and test code to new 0.6 names to reduce warning count. (#72) * Updating to use new syntax, namespace names, etc. * More primitive → intrinsic. * Updated test project to use beta version. * Updated chemistry proiects to beta. * Finding a few more calls to deprecated fns. * Cleaned up some assert and qcvv tests. * Removed uses of deprecated IntArrayFromRange * Resolved some more deprecated functions and ops. * Minor maintenance in QubitizationTests. * Bumped versions to latest beta. * Some trivial change to retrigger build. * Resolved package downgrade. * Move Microsoft.Quantum.Math.Complex UDT and resolve Microsoft.Quantum.Diagnostics deprecation stubs. (#77) * More primitive → intrinsic. * Finding a few more calls to deprecated fns. * Resolved some more deprecated functions and ops. * Minor maintenance in QubitizationTests. * Bumped versions to latest beta. * Resolved package downgrade. * Use Complex UDT at its new name. * Adapted tests. * A few more test adaptations. * Updated name of AssertQubitState to 0.6 name. * Fixes to chemistry. * Getting updates from master (#80) * Revert "Begin refactoring standard libraries (#39)" (#56) As Chris pointed out, reverting these breaking changes until we have a chance to change everything... * Missing return statement when compiling more than one Q# snippet from Python. (#60) * Fixing bug * Adding tests * Change Assembly.Version to Python.Version. (#64) * Prevent loading Q# modules when Python client is busy. (#71) * Prevent loading Q# modules when Python client is busy. * Linux build failed with some unrelated problem. Committing. * modifying contructor calls for QArray in preparation for a simulation framework change (#78) * Revert "Revert "Begin refactoring standard libraries (#39)" (#56)" This reverts commit 058048983c4d0509e5d522888d3d47ae49cd300e. * Update to 0.6.1904.1302-beta. (#81) * Update to 0.6.1904.1302-beta. * Removed deprecation warnings for Microsoft.Quantum.Math. * Resolved a few more deprecations. * Resolved a few more deprecation warnings. * A few more deprecation resolutions. * Removed some duplicate namespace opens. * Slight code cleanup. * Addressed feedback from @bettinaheim. * Standard.sln builds again, Standard.sln builds (#84) * Gulow/v0.6 chemistry deprecation (#82) * Update to 0.6.1904.1302-beta. * Removed deprecation warnings for Microsoft.Quantum.Math. * Resolved a few more deprecations. * Resolved a few more deprecation warnings. * A few more deprecation resolutions. * Removed some duplicate namespace opens. * Slight code cleanup. * Update test * . * Remove deprecated operations from chemistry and dependencies. * Fix comments * Update to use 0.65 syntax from latest beta. (#87) * Ported stateprep.qs to 0.65 syntax. * Fixed deprecation in test. * Updated to latest beta. * Fix mutable array issue in chemistry data model. (#88) * Explicitly call new QArray. (#89) * do not rely on collections.immutable (#93) * Continue migrating libraries to Q# 0.6 (#91) * Continue migrating to 0.65 syntax and applying style guidance. * A bit more progress normalizing private names. * Resolved more deprecated syntax, updated a name. * Resolved some more syntax warnings. * Ported more syntax and updated more names. * Resolved all remaining compile-time warnings in Standard. * Addressed all Q#-level compile-time warnings in chem. * Migrated a bit more syntax and updated to newest beta. * Moved to using intrinsic warnings. * Fixed endianness of exact QFT. * Fixed Microsoft.Quantum.Warnings. * Addressing @bettinaheim's feedback. * Removed some warnings in unit tests. * Adding DocsOutDir for single doc output location across projects. (#94) * Adding DocsOutDir for single doc output location across projects. * Begin adding more classical math functions for BigInt. (#96) * Begin adding more classical math functions for BigInt. * Addressing @beheim's feedback. * Minor fixes. * Bump to latest beta. * Fixed two minor bugs. * Fixed the type of signs. * Bump version to released packages.
2019-05-04 01:44:41 +03:00
/// the Microsoft.Quantum.Intrinsic.X
@Test("QuantumSimulator")
operation CheckApplyMultiControlled() : Unit {
let twoQubitOp = CNOT;
// this gives us operation ( controls : Qubit[], targets : Qubit[] ) => ()
// where we expect targets to have length 2
let multiControlledCNOT = Controlled (ApplyToFirstTwoQubitsCA(twoQubitOp, _));
// this gives up operation ( qubits : Qubit[] ) => ()
// where first qubit in qubits is control and the rest are target for
// twoQubitOp
let singlyControlledCNOT = ApplyToPartitionCA(multiControlledCNOT, 1, _);
// Construct multiply controlled op using its singly controlled version
// with the help of ApplyMultiControlledCA
let canonMultiNot = ApplyMultiControlledCA(singlyControlledCNOT, CCNOTop(CCNOT), _, _);
for numberOfcontrols in 1 .. 5 {
Message($"Checking the equality with {numberOfcontrols} controls");
// construct actual and expected with desired number of controls
let actual = ApplyToPartitionCA(canonMultiNot, numberOfcontrols, _);
let expected = ApplyToPartitionCA(multiControlledCNOT, numberOfcontrols, _);
// check equality
Release v0.6 to master. (#98) * Begin refactoring standard libraries (#39) * Began splitting up namespaces. * Began refactoring tests. * Updated chemistry src and tests for new namespaces. * Remove unused opens. * Began renaming operations and functions. * Separated out and updated ApplyReversed*. * Updated BE ↔ LE type conversions. * Added new transformed operation fns. * Whitespace fix * Eliminated some redundant code in applyreversed * Fixed deprecation comments. * Began working on refactoring With. * Refactored With further. * More renaming for consistency with LE/BE suffix convention. * Added Zip3, Zip4 * Added shorthand for MAJ and updated some type conv. * Fixed a typo in Zip4. * Separated out and updated arithmetic measurements. * Other minor maintenance changes. * Started separating out modular arithmetic. * Began refactoring ripple-carry comparators. * Refactored integer increment operations. * Fixed some See Also blocks. * Some minor progress. * Moved new arithmetic functionality into right folders. * Renamed integer arithmetic namespaces. * Split out qecc namespace. * Added documentation file for Microsoft.Quantum.ErrorCorrection. * Progress on renaming type conversion functions. * More progress on updating type conversion names. * Split out AA namespace. * Split out oracles namespace as well. * Renamed UDTs to remove "AmpAmp" prefix. This prefix is now implied by the Microsoft.Quantum.AmplitudeAmplification namespace. * Renamed some Qecc operations/fns * Moved more conversions into Convert.qs. * Updated some deprecated syntax. * Split out M.Q.Convert. * Added missing open stmt. * Started separating out classical math. * Began separating out QCVV. * Fixing namespaces in tests. * Update to use new docgen. * Began making arrays namespace. * Updated to use new arrays and diagnostics namespaces. * Updated names for claims * Started extracting measurements from Paulis.qs. * Updated namespaces in tests as well. * Updating chemistry for most recent changes. * Added ForEach, used to simplify measurements. * Updating deprecated Q# syntax. * Minor fix for XML error. * Fixed infinite recursion in deprecation stubs. * Started trying to reduce # of warnings. * Fixed some minor build errors. * Resolved a couple TODOs. * Removed BigEndian support. * Resolved warnings due to && and ||. * Update Standard/src/Arithmetic/Shorthand.qs Co-Authored-By: cgranade <cgranade@gmail.com> * Addressing feedback. * Claim → Fact * Moved MeasureInteger back to Microsoft.Quantum.Arithmetic. * Resolved more deprecated syntax. * Removed one more LE suffix. * Addressing feedback. * Cgranade/complete 0.6 move (#57) * Revert "Begin refactoring standard libraries (#39)" (#56) As Chris pointed out, reverting these breaking changes until we have a chance to change everything... * Complete move of standard library refactoring to release branch This reverts commit 058048983c4d0509e5d522888d3d47ae49cd300e. * Explicitly qualify all names in M.Q.Ext.Math. (#74) * Explicitly qualify all names in M.Q.Ext.Math. * Fixed two missing qualified names. * Removed more occurances of M.Q.Ext.Math. * Removed Microsoft.Quantum.Extensions.Math from tests as well. * Reverted slight change to QuantumROM. * New array functions (#75) * Added new IndexRange function to eliminate `-1` in for loops. * Added some missing open statements. * New Enumerated function. * Port library and test code to new 0.6 names to reduce warning count. (#72) * Updating to use new syntax, namespace names, etc. * More primitive → intrinsic. * Updated test project to use beta version. * Updated chemistry proiects to beta. * Finding a few more calls to deprecated fns. * Cleaned up some assert and qcvv tests. * Removed uses of deprecated IntArrayFromRange * Resolved some more deprecated functions and ops. * Minor maintenance in QubitizationTests. * Bumped versions to latest beta. * Some trivial change to retrigger build. * Resolved package downgrade. * Move Microsoft.Quantum.Math.Complex UDT and resolve Microsoft.Quantum.Diagnostics deprecation stubs. (#77) * More primitive → intrinsic. * Finding a few more calls to deprecated fns. * Resolved some more deprecated functions and ops. * Minor maintenance in QubitizationTests. * Bumped versions to latest beta. * Resolved package downgrade. * Use Complex UDT at its new name. * Adapted tests. * A few more test adaptations. * Updated name of AssertQubitState to 0.6 name. * Fixes to chemistry. * Getting updates from master (#80) * Revert "Begin refactoring standard libraries (#39)" (#56) As Chris pointed out, reverting these breaking changes until we have a chance to change everything... * Missing return statement when compiling more than one Q# snippet from Python. (#60) * Fixing bug * Adding tests * Change Assembly.Version to Python.Version. (#64) * Prevent loading Q# modules when Python client is busy. (#71) * Prevent loading Q# modules when Python client is busy. * Linux build failed with some unrelated problem. Committing. * modifying contructor calls for QArray in preparation for a simulation framework change (#78) * Revert "Revert "Begin refactoring standard libraries (#39)" (#56)" This reverts commit 058048983c4d0509e5d522888d3d47ae49cd300e. * Update to 0.6.1904.1302-beta. (#81) * Update to 0.6.1904.1302-beta. * Removed deprecation warnings for Microsoft.Quantum.Math. * Resolved a few more deprecations. * Resolved a few more deprecation warnings. * A few more deprecation resolutions. * Removed some duplicate namespace opens. * Slight code cleanup. * Addressed feedback from @bettinaheim. * Standard.sln builds again, Standard.sln builds (#84) * Gulow/v0.6 chemistry deprecation (#82) * Update to 0.6.1904.1302-beta. * Removed deprecation warnings for Microsoft.Quantum.Math. * Resolved a few more deprecations. * Resolved a few more deprecation warnings. * A few more deprecation resolutions. * Removed some duplicate namespace opens. * Slight code cleanup. * Update test * . * Remove deprecated operations from chemistry and dependencies. * Fix comments * Update to use 0.65 syntax from latest beta. (#87) * Ported stateprep.qs to 0.65 syntax. * Fixed deprecation in test. * Updated to latest beta. * Fix mutable array issue in chemistry data model. (#88) * Explicitly call new QArray. (#89) * do not rely on collections.immutable (#93) * Continue migrating libraries to Q# 0.6 (#91) * Continue migrating to 0.65 syntax and applying style guidance. * A bit more progress normalizing private names. * Resolved more deprecated syntax, updated a name. * Resolved some more syntax warnings. * Ported more syntax and updated more names. * Resolved all remaining compile-time warnings in Standard. * Addressed all Q#-level compile-time warnings in chem. * Migrated a bit more syntax and updated to newest beta. * Moved to using intrinsic warnings. * Fixed endianness of exact QFT. * Fixed Microsoft.Quantum.Warnings. * Addressing @bettinaheim's feedback. * Removed some warnings in unit tests. * Adding DocsOutDir for single doc output location across projects. (#94) * Adding DocsOutDir for single doc output location across projects. * Begin adding more classical math functions for BigInt. (#96) * Begin adding more classical math functions for BigInt. * Addressing @beheim's feedback. * Minor fixes. * Bump to latest beta. * Fixed two minor bugs. * Fixed the type of signs. * Bump version to released packages.
2019-05-04 01:44:41 +03:00
AssertOperationsEqualReferenced(numberOfcontrols + 2, actual, expected);
}
}
}