qsharp-lang 1.6.1-dev → 1.6.3-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.d.ts +7 -11
- package/dist/browser.js +6 -6
- package/dist/compiler/compiler.d.ts +25 -38
- package/dist/compiler/compiler.js +44 -50
- package/dist/debug-service/debug-service.d.ts +3 -3
- package/dist/debug-service/debug-service.js +4 -3
- package/dist/katas-content.generated.js +139 -72
- package/dist/katas-content.generated.md.js +139 -72
- package/dist/language-service/language-service.d.ts +4 -4
- package/dist/language-service/language-service.js +10 -3
- package/dist/main.d.ts +3 -6
- package/dist/main.js +4 -4
- package/dist/samples.generated.js +4 -4
- package/docs/Microsoft.Quantum.Arrays/All.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Any.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Chunks.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/CircularlyShifted.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/ColumnAt.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Count.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Diagonal.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/DrawMany.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Enumerated.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Excluding.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Filtered.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/FlatMapped.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Flattened.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Fold.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/ForEach.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Head.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/HeadAndRest.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/IndexOf.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/IndexRange.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Interleaved.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/IsEmpty.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/IsRectangularArray.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/IsSorted.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/IsSquareArray.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Mapped.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/MappedByIndex.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/MappedOverRange.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Most.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/MostAndTail.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Padded.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Partitioned.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Rest.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Reversed.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/SequenceI.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/SequenceL.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Sorted.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Subarray.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Swapped.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Tail.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Transposed.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Unzipped.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Where.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Windows.md +1 -1
- package/docs/Microsoft.Quantum.Arrays/Zipped.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyCNOTChain.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyControlledOnBitString.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyControlledOnInt.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyP.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyPauli.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyPauliFromBitString.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyPauliFromInt.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyQFT.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyToEach.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyToEachA.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyToEachC.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyToEachCA.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyXorInPlace.md +1 -1
- package/docs/Microsoft.Quantum.Canon/ApplyXorInPlaceL.md +1 -1
- package/docs/Microsoft.Quantum.Canon/CX.md +1 -1
- package/docs/Microsoft.Quantum.Canon/CY.md +1 -1
- package/docs/Microsoft.Quantum.Canon/CZ.md +1 -1
- package/docs/Microsoft.Quantum.Canon/Fst.md +1 -1
- package/docs/Microsoft.Quantum.Canon/Snd.md +1 -1
- package/docs/Microsoft.Quantum.Canon/SwapReverseRegister.md +1 -1
- package/docs/Microsoft.Quantum.Convert/BigIntAsBoolArray.md +1 -1
- package/docs/Microsoft.Quantum.Convert/BoolArrayAsBigInt.md +1 -1
- package/docs/Microsoft.Quantum.Convert/BoolArrayAsInt.md +1 -1
- package/docs/Microsoft.Quantum.Convert/BoolArrayAsResultArray.md +1 -1
- package/docs/Microsoft.Quantum.Convert/BoolAsResult.md +1 -1
- package/docs/Microsoft.Quantum.Convert/ComplexAsComplexPolar.md +1 -1
- package/docs/Microsoft.Quantum.Convert/ComplexPolarAsComplex.md +1 -1
- package/docs/Microsoft.Quantum.Convert/IntAsBigInt.md +1 -1
- package/docs/Microsoft.Quantum.Convert/IntAsBoolArray.md +1 -1
- package/docs/Microsoft.Quantum.Convert/IntAsDouble.md +1 -1
- package/docs/Microsoft.Quantum.Convert/ResultArrayAsBoolArray.md +1 -1
- package/docs/Microsoft.Quantum.Convert/ResultArrayAsInt.md +1 -1
- package/docs/Microsoft.Quantum.Convert/ResultAsBool.md +1 -1
- package/docs/Microsoft.Quantum.Core/IsRangeEmpty.md +1 -1
- package/docs/Microsoft.Quantum.Core/Length.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeEnd.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeReverse.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeStart.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeStep.md +1 -1
- package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
- package/docs/Microsoft.Quantum.Diagnostics/DumpMachine.md +1 -1
- package/docs/Microsoft.Quantum.Diagnostics/DumpRegister.md +1 -1
- package/docs/Microsoft.Quantum.Diagnostics/Fact.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/AdjustForSingleControl.md +21 -0
- package/docs/Microsoft.Quantum.Intrinsic/ApplyGlobalPhase.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CCH.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CCNOT.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/CCY.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CCZ.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CH.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CNOT.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/CRxx.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CRyy.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CRz.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CRzz.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CS.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CT.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/CollectControls.md +27 -0
- package/docs/Microsoft.Quantum.Intrinsic/ControllableGlobalPhase.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/EntangleForJointMeasure.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/Exp.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/GlobalPhase.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/H.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/I.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/IndicesOfNonIdentity.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/M.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/MapPauli.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/Measure.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Message.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/PhaseCCX.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/R.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/R1.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/R1Frac.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/RFrac.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/RemovePauliI.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/Reset.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/ResetAll.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Rx.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Rxx.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Ry.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Ryy.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Rz.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Rzz.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/S.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/SWAP.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/SpreadZ.md +18 -0
- package/docs/Microsoft.Quantum.Intrinsic/T.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/X.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Y.md +1 -1
- package/docs/Microsoft.Quantum.Intrinsic/Z.md +1 -1
- package/docs/Microsoft.Quantum.Logical/Xor.md +1 -1
- package/docs/Microsoft.Quantum.Math/AbsComplex.md +1 -1
- package/docs/Microsoft.Quantum.Math/AbsComplexPolar.md +1 -1
- package/docs/Microsoft.Quantum.Math/AbsD.md +1 -1
- package/docs/Microsoft.Quantum.Math/AbsI.md +1 -1
- package/docs/Microsoft.Quantum.Math/AbsL.md +1 -1
- package/docs/Microsoft.Quantum.Math/AbsSquaredComplex.md +1 -1
- package/docs/Microsoft.Quantum.Math/AbsSquaredComplexPolar.md +1 -1
- package/docs/Microsoft.Quantum.Math/ApproximateFactorial.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArcCos.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArcCosh.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArcSin.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArcSinh.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArcTan.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArcTan2.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArcTanh.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArgComplex.md +1 -1
- package/docs/Microsoft.Quantum.Math/ArgComplexPolar.md +1 -1
- package/docs/Microsoft.Quantum.Math/Binom.md +1 -1
- package/docs/Microsoft.Quantum.Math/BitSizeI.md +1 -1
- package/docs/Microsoft.Quantum.Math/BitSizeL.md +1 -1
- package/docs/Microsoft.Quantum.Math/Ceiling.md +1 -1
- package/docs/Microsoft.Quantum.Math/Complex.md +1 -1
- package/docs/Microsoft.Quantum.Math/ComplexPolar.md +1 -1
- package/docs/Microsoft.Quantum.Math/ContinuedFractionConvergentI.md +1 -1
- package/docs/Microsoft.Quantum.Math/ContinuedFractionConvergentL.md +1 -1
- package/docs/Microsoft.Quantum.Math/Cos.md +1 -1
- package/docs/Microsoft.Quantum.Math/Cosh.md +1 -1
- package/docs/Microsoft.Quantum.Math/DivRemI.md +1 -1
- package/docs/Microsoft.Quantum.Math/DivRemL.md +1 -1
- package/docs/Microsoft.Quantum.Math/DividedByC.md +1 -1
- package/docs/Microsoft.Quantum.Math/DividedByCP.md +1 -1
- package/docs/Microsoft.Quantum.Math/E.md +1 -1
- package/docs/Microsoft.Quantum.Math/ExpModI.md +1 -1
- package/docs/Microsoft.Quantum.Math/ExpModL.md +1 -1
- package/docs/Microsoft.Quantum.Math/ExtendedGreatestCommonDivisorI.md +1 -1
- package/docs/Microsoft.Quantum.Math/ExtendedGreatestCommonDivisorL.md +1 -1
- package/docs/Microsoft.Quantum.Math/ExtendedTruncation.md +18 -0
- package/docs/Microsoft.Quantum.Math/FactorialI.md +1 -1
- package/docs/Microsoft.Quantum.Math/FactorialL.md +1 -1
- package/docs/Microsoft.Quantum.Math/Floor.md +1 -1
- package/docs/Microsoft.Quantum.Math/GreatestCommonDivisorI.md +1 -1
- package/docs/Microsoft.Quantum.Math/GreatestCommonDivisorL.md +1 -1
- package/docs/Microsoft.Quantum.Math/HammingWeightI.md +1 -1
- package/docs/Microsoft.Quantum.Math/InverseModI.md +1 -1
- package/docs/Microsoft.Quantum.Math/InverseModL.md +1 -1
- package/docs/Microsoft.Quantum.Math/IsCoprimeI.md +1 -1
- package/docs/Microsoft.Quantum.Math/IsCoprimeL.md +1 -1
- package/docs/Microsoft.Quantum.Math/IsInfinite.md +1 -1
- package/docs/Microsoft.Quantum.Math/IsNaN.md +1 -1
- package/docs/Microsoft.Quantum.Math/LargestFixedPoint.md +1 -1
- package/docs/Microsoft.Quantum.Math/Lg.md +1 -1
- package/docs/Microsoft.Quantum.Math/Log.md +1 -1
- package/docs/Microsoft.Quantum.Math/Log10.md +1 -1
- package/docs/Microsoft.Quantum.Math/LogFactorialD.md +1 -1
- package/docs/Microsoft.Quantum.Math/LogGammaD.md +1 -1
- package/docs/Microsoft.Quantum.Math/LogOf2.md +1 -1
- package/docs/Microsoft.Quantum.Math/Max.md +1 -1
- package/docs/Microsoft.Quantum.Math/MaxD.md +1 -1
- package/docs/Microsoft.Quantum.Math/MaxI.md +1 -1
- package/docs/Microsoft.Quantum.Math/MaxL.md +1 -1
- package/docs/Microsoft.Quantum.Math/Min.md +1 -1
- package/docs/Microsoft.Quantum.Math/MinD.md +1 -1
- package/docs/Microsoft.Quantum.Math/MinI.md +1 -1
- package/docs/Microsoft.Quantum.Math/MinL.md +1 -1
- package/docs/Microsoft.Quantum.Math/MinusC.md +1 -1
- package/docs/Microsoft.Quantum.Math/MinusCP.md +1 -1
- package/docs/Microsoft.Quantum.Math/ModulusI.md +1 -1
- package/docs/Microsoft.Quantum.Math/ModulusL.md +1 -1
- package/docs/Microsoft.Quantum.Math/NegationC.md +1 -1
- package/docs/Microsoft.Quantum.Math/NegationCP.md +1 -1
- package/docs/Microsoft.Quantum.Math/PI.md +1 -1
- package/docs/Microsoft.Quantum.Math/PNorm.md +1 -1
- package/docs/Microsoft.Quantum.Math/PNormalized.md +1 -1
- package/docs/Microsoft.Quantum.Math/PlusC.md +1 -1
- package/docs/Microsoft.Quantum.Math/PlusCP.md +1 -1
- package/docs/Microsoft.Quantum.Math/PowC.md +1 -1
- package/docs/Microsoft.Quantum.Math/PowCAsCP.md +24 -0
- package/docs/Microsoft.Quantum.Math/PowCP.md +1 -1
- package/docs/Microsoft.Quantum.Math/RealMod.md +1 -1
- package/docs/Microsoft.Quantum.Math/Round.md +1 -1
- package/docs/Microsoft.Quantum.Math/SignD.md +1 -1
- package/docs/Microsoft.Quantum.Math/SignI.md +1 -1
- package/docs/Microsoft.Quantum.Math/SignL.md +1 -1
- package/docs/Microsoft.Quantum.Math/Sin.md +1 -1
- package/docs/Microsoft.Quantum.Math/Sinh.md +1 -1
- package/docs/Microsoft.Quantum.Math/SmallestFixedPoint.md +1 -1
- package/docs/Microsoft.Quantum.Math/Sqrt.md +1 -1
- package/docs/Microsoft.Quantum.Math/SquaredNorm.md +1 -1
- package/docs/Microsoft.Quantum.Math/Tan.md +1 -1
- package/docs/Microsoft.Quantum.Math/Tanh.md +1 -1
- package/docs/Microsoft.Quantum.Math/TimesC.md +1 -1
- package/docs/Microsoft.Quantum.Math/TimesCP.md +1 -1
- package/docs/Microsoft.Quantum.Math/TrailingZeroCountI.md +1 -1
- package/docs/Microsoft.Quantum.Math/TrailingZeroCountL.md +1 -1
- package/docs/Microsoft.Quantum.Math/Truncate.md +1 -1
- package/docs/Microsoft.Quantum.Measurement/MResetEachZ.md +1 -1
- package/docs/Microsoft.Quantum.Measurement/MResetX.md +1 -1
- package/docs/Microsoft.Quantum.Measurement/MResetY.md +1 -1
- package/docs/Microsoft.Quantum.Measurement/MResetZ.md +1 -1
- package/docs/Microsoft.Quantum.Measurement/MeasureAllZ.md +1 -1
- package/docs/Microsoft.Quantum.Measurement/MeasureEachZ.md +1 -1
- package/docs/Microsoft.Quantum.Measurement/MeasureInteger.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/AccountForEstimates.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/AuxQubitCount.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/BeginEstimateCaching.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/BeginRepeatEstimates.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/CczCount.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/EndEstimateCaching.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/EndRepeatEstimates.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/MeasurementCount.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/PSSPCLayout.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/RepeatEstimates.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/RotationCount.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/RotationDepth.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/SingleVariant.md +1 -1
- package/docs/Microsoft.Quantum.ResourceEstimation/TCount.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/AddLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyActionIfGreaterThanOrEqualConstant.md +23 -0
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyActionIfSumOverflows.md +23 -0
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyAsSinglyControlled.md +24 -0
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfEqualL.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfEqualLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfGreaterL.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfGreaterLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfLessL.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfLessLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/FourierTDIncByLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/IncByI.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/IncByIUsingIncByLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/IncByL.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/IncByLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/IncByLEUsingAddLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/IncByLUsingIncByLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/LookAheadDKRSAddLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/MAJ.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/PhaseGradient.md +18 -0
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/ReflectAboutInteger.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/RippleCarryCGAddLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/RippleCarryCGIncByLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.StatePreparation/PreparePureStateD.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.TableLookup/EncodeUnary.md +18 -0
- package/docs/Microsoft.Quantum.Unstable.TableLookup/MustBeFixed.md +18 -0
- package/docs/Microsoft.Quantum.Unstable.TableLookup/Select.md +1 -1
- package/docs/Microsoft.Quantum.Unstable.TableLookup/Unlookup.md +22 -0
- package/docs/Microsoft.Quantum.Unstable.TableLookup/WriteMemoryContents.md +18 -0
- package/docs/toc.yml +31 -1
- package/lib/node/qsc_wasm.cjs +162 -158
- package/lib/node/qsc_wasm.d.cts +73 -36
- package/lib/node/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.d.ts +82 -45
- package/lib/web/qsc_wasm.js +152 -157
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/ux/estimatesOverview.tsx +2 -0
- package/ux/estimatesPanel.tsx +2 -0
- package/ux/qsharp-ux.css +30 -5
- package/ux/saveImage.tsx +107 -0
- package/ux/saveImageUtil.tsx +72 -0
- package/ux/scatterChart.tsx +31 -0
- package/docs/Microsoft.Quantum.Intrinsic/AND.md +0 -33
|
@@ -81,7 +81,9 @@ export default {
|
|
|
81
81
|
"content": "<p><strong>Input:</strong> An even integer $n$ (can be negative).</p>\n<p><strong>Goal:</strong> Return the $n$-th power of $i$ ($i^n$).</p>\n"
|
|
82
82
|
},
|
|
83
83
|
"sourceIds": [
|
|
84
|
-
"complex_arithmetic__powers_of_i__Verification.qs"
|
|
84
|
+
"complex_arithmetic__powers_of_i__Verification.qs",
|
|
85
|
+
"KatasLibrary.qs",
|
|
86
|
+
"complex_arithmetic__Common.qs"
|
|
85
87
|
],
|
|
86
88
|
"placeholderCode": "namespace Kata {\n function PowersOfI(n : Int) : Int {\n // Replace the return values with correct answers.\n if n % 4 == 0 {\n return 0;\n } else {\n return 0;\n }\n }\n}\n",
|
|
87
89
|
"explainedSolution": {
|
|
@@ -120,6 +122,7 @@ export default {
|
|
|
120
122
|
},
|
|
121
123
|
"sourceIds": [
|
|
122
124
|
"complex_arithmetic__complex_addition__Verification.qs",
|
|
125
|
+
"KatasLibrary.qs",
|
|
123
126
|
"complex_arithmetic__Common.qs"
|
|
124
127
|
],
|
|
125
128
|
"placeholderCode": "namespace Kata { \n open Microsoft.Quantum.Math;\n \n function ComplexAdd(x : Complex, y : Complex) : Complex { \n // Extract real and imaginary components of the inputs.\n let (a, b) = x!;\n let (c, d) = (y::Real, y::Imag);\n // Implement your solution here...\n return Complex(0., 0.);\n }\n}\n",
|
|
@@ -148,6 +151,7 @@ export default {
|
|
|
148
151
|
},
|
|
149
152
|
"sourceIds": [
|
|
150
153
|
"complex_arithmetic__complex_multiplication__Verification.qs",
|
|
154
|
+
"KatasLibrary.qs",
|
|
151
155
|
"complex_arithmetic__Common.qs"
|
|
152
156
|
],
|
|
153
157
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n \n function ComplexMult(x : Complex, y: Complex) : Complex {\n // Implement your solution here...\n return Complex(0., 0.);\n }\n}\n",
|
|
@@ -187,6 +191,7 @@ export default {
|
|
|
187
191
|
},
|
|
188
192
|
"sourceIds": [
|
|
189
193
|
"complex_arithmetic__complex_conjugate__Verification.qs",
|
|
194
|
+
"KatasLibrary.qs",
|
|
190
195
|
"complex_arithmetic__Common.qs"
|
|
191
196
|
],
|
|
192
197
|
"placeholderCode": "namespace Kata { \n open Microsoft.Quantum.Math;\n \n function ComplexConjugate(x : Complex) : Complex { \n // Implement your solution here...\n return Complex(0., 0.);\n }\n}\n",
|
|
@@ -226,6 +231,7 @@ export default {
|
|
|
226
231
|
},
|
|
227
232
|
"sourceIds": [
|
|
228
233
|
"complex_arithmetic__complex_division__Verification.qs",
|
|
234
|
+
"KatasLibrary.qs",
|
|
229
235
|
"complex_arithmetic__Common.qs"
|
|
230
236
|
],
|
|
231
237
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math; \n \n function ComplexDiv(x : Complex, y : Complex) : Complex {\n // Implement your solution here...\n return Complex(0., 0.);\n }\n}\n",
|
|
@@ -265,6 +271,7 @@ export default {
|
|
|
265
271
|
},
|
|
266
272
|
"sourceIds": [
|
|
267
273
|
"complex_arithmetic__complex_modulus__Verification.qs",
|
|
274
|
+
"KatasLibrary.qs",
|
|
268
275
|
"complex_arithmetic__Common.qs"
|
|
269
276
|
],
|
|
270
277
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n \n function ComplexModulus(x : Complex) : Double {\n // Implement your solution here...\n return 0.;\n }\n}\n",
|
|
@@ -304,6 +311,7 @@ export default {
|
|
|
304
311
|
},
|
|
305
312
|
"sourceIds": [
|
|
306
313
|
"complex_arithmetic__complex_exponents__Verification.qs",
|
|
314
|
+
"KatasLibrary.qs",
|
|
307
315
|
"complex_arithmetic__Common.qs"
|
|
308
316
|
],
|
|
309
317
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n \n function ComplexExponent(x : Complex) : Complex {\n // Implement your solution here...\n return Complex(0.0, 0.0);\n }\n}\n",
|
|
@@ -332,6 +340,7 @@ export default {
|
|
|
332
340
|
},
|
|
333
341
|
"sourceIds": [
|
|
334
342
|
"complex_arithmetic__complex_powers_real__Verification.qs",
|
|
343
|
+
"KatasLibrary.qs",
|
|
335
344
|
"complex_arithmetic__Common.qs"
|
|
336
345
|
],
|
|
337
346
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n\n function ComplexExpReal (r : Double, x : Complex) : Complex {\n // Implement your solution here...\n return Complex(0.0, 0.0);\n }\n}\n",
|
|
@@ -371,6 +380,7 @@ export default {
|
|
|
371
380
|
},
|
|
372
381
|
"sourceIds": [
|
|
373
382
|
"complex_arithmetic__cartesian_to_polar__Verification.qs",
|
|
383
|
+
"KatasLibrary.qs",
|
|
374
384
|
"complex_arithmetic__Common.qs"
|
|
375
385
|
],
|
|
376
386
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n \n function ComplexToComplexPolar(x : Complex) : ComplexPolar {\n // Implement your solution here...\n return ComplexPolar(0., 0.);\n }\n}\n",
|
|
@@ -399,6 +409,7 @@ export default {
|
|
|
399
409
|
},
|
|
400
410
|
"sourceIds": [
|
|
401
411
|
"complex_arithmetic__polar_to_cartesian__Verification.qs",
|
|
412
|
+
"KatasLibrary.qs",
|
|
402
413
|
"complex_arithmetic__Common.qs"
|
|
403
414
|
],
|
|
404
415
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n \n function ComplexPolarToComplex(x : ComplexPolar) : Complex {\n // Implement your solution here...\n return Complex(0., 0.);\n }\n}\n",
|
|
@@ -427,6 +438,7 @@ export default {
|
|
|
427
438
|
},
|
|
428
439
|
"sourceIds": [
|
|
429
440
|
"complex_arithmetic__polar_multiplication__Verification.qs",
|
|
441
|
+
"KatasLibrary.qs",
|
|
430
442
|
"complex_arithmetic__Common.qs"
|
|
431
443
|
],
|
|
432
444
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n \n function ComplexPolarMult(x : ComplexPolar, y: ComplexPolar) : ComplexPolar {\n // Implement your solution here...\n return ComplexPolar(0., 0.);\n }\n}\n",
|
|
@@ -506,6 +518,7 @@ export default {
|
|
|
506
518
|
},
|
|
507
519
|
"sourceIds": [
|
|
508
520
|
"linear_algebra__addition__Verification.qs",
|
|
521
|
+
"KatasLibrary.qs",
|
|
509
522
|
"linear_algebra__Common.qs"
|
|
510
523
|
],
|
|
511
524
|
"placeholderCode": "namespace Kata {\n function Addition() : Double[][] {\n // Replace the return value with correct answer.\n return [[0., 0.],\n [0., 0.]];\n }\n}\n",
|
|
@@ -545,6 +558,7 @@ export default {
|
|
|
545
558
|
},
|
|
546
559
|
"sourceIds": [
|
|
547
560
|
"linear_algebra__scalar_multiplication__Verification.qs",
|
|
561
|
+
"KatasLibrary.qs",
|
|
548
562
|
"linear_algebra__Common.qs"
|
|
549
563
|
],
|
|
550
564
|
"placeholderCode": "namespace Kata {\n function ScalarMultiplication() : Double[][] {\n // Replace the return value with correct answer.\n return [[0., 0.],\n [0., 0.]];\n }\n}\n",
|
|
@@ -584,6 +598,7 @@ export default {
|
|
|
584
598
|
},
|
|
585
599
|
"sourceIds": [
|
|
586
600
|
"linear_algebra__multiplication__Verification.qs",
|
|
601
|
+
"KatasLibrary.qs",
|
|
587
602
|
"linear_algebra__Common.qs"
|
|
588
603
|
],
|
|
589
604
|
"placeholderCode": "namespace Kata {\n function Multiplication() : Double[][] {\n // Replace the return value with correct answer.\n return [[0., 0.],\n [0., 0.]];\n }\n}\n",
|
|
@@ -623,6 +638,7 @@ export default {
|
|
|
623
638
|
},
|
|
624
639
|
"sourceIds": [
|
|
625
640
|
"linear_algebra__inverse__Verification.qs",
|
|
641
|
+
"KatasLibrary.qs",
|
|
626
642
|
"linear_algebra__Common.qs"
|
|
627
643
|
],
|
|
628
644
|
"placeholderCode": "namespace Kata {\n function Inverse() : Double[][] {\n // Replace the return value with correct answer.\n return [[0., 0.],\n [0., 0.]];\n }\n}\n",
|
|
@@ -662,6 +678,7 @@ export default {
|
|
|
662
678
|
},
|
|
663
679
|
"sourceIds": [
|
|
664
680
|
"linear_algebra__transpose__Verification.qs",
|
|
681
|
+
"KatasLibrary.qs",
|
|
665
682
|
"linear_algebra__Common.qs"
|
|
666
683
|
],
|
|
667
684
|
"placeholderCode": "namespace Kata {\n function Transpose() : Double[][] {\n // Replace the return value with correct answer.\n return [[0., 0.],\n [0., 0.]];\n }\n}\n",
|
|
@@ -701,6 +718,7 @@ export default {
|
|
|
701
718
|
},
|
|
702
719
|
"sourceIds": [
|
|
703
720
|
"linear_algebra__conjugate__Verification.qs",
|
|
721
|
+
"KatasLibrary.qs",
|
|
704
722
|
"linear_algebra__Common.qs"
|
|
705
723
|
],
|
|
706
724
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n\n function Conjugate() : Complex[][] {\n // Replace the return value with correct answer.\n return [[Complex(0., 0.), Complex(0., 0.)],\n [Complex(0., 0.), Complex(0., 0.)]];\n }\n}\n",
|
|
@@ -740,6 +758,7 @@ export default {
|
|
|
740
758
|
},
|
|
741
759
|
"sourceIds": [
|
|
742
760
|
"linear_algebra__adjoint__Verification.qs",
|
|
761
|
+
"KatasLibrary.qs",
|
|
743
762
|
"linear_algebra__Common.qs"
|
|
744
763
|
],
|
|
745
764
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n\n function MatrixAdjoint() : Complex[][] {\n // Replace the return value with correct answer.\n return [[Complex(0., 0.), Complex(0., 0.)],\n [Complex(0., 0.), Complex(0., 0.)]];\n }\n}\n",
|
|
@@ -790,6 +809,7 @@ export default {
|
|
|
790
809
|
},
|
|
791
810
|
"sourceIds": [
|
|
792
811
|
"linear_algebra__inner_product__Verification.qs",
|
|
812
|
+
"KatasLibrary.qs",
|
|
793
813
|
"linear_algebra__Common.qs"
|
|
794
814
|
],
|
|
795
815
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n\n function InnerProduct() : Complex {\n // Replace the return value with correct answer.\n return Complex(0., 0.);\n }\n}\n",
|
|
@@ -818,6 +838,7 @@ export default {
|
|
|
818
838
|
},
|
|
819
839
|
"sourceIds": [
|
|
820
840
|
"linear_algebra__normalized_vector__Verification.qs",
|
|
841
|
+
"KatasLibrary.qs",
|
|
821
842
|
"linear_algebra__Common.qs"
|
|
822
843
|
],
|
|
823
844
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n\n function NormalizedVector() : Complex[][] {\n // Replace the return value with correct answer.\n return [[Complex(0., 0.)],\n [Complex(0., 0.)]];\n }\n}\n",
|
|
@@ -857,6 +878,7 @@ export default {
|
|
|
857
878
|
},
|
|
858
879
|
"sourceIds": [
|
|
859
880
|
"linear_algebra__outer_product__Verification.qs",
|
|
881
|
+
"KatasLibrary.qs",
|
|
860
882
|
"linear_algebra__Common.qs"
|
|
861
883
|
],
|
|
862
884
|
"placeholderCode": "namespace Kata {\n open Microsoft.Quantum.Math;\n\n function OuterProduct() : Complex[][] {\n // Replace the return value with correct answer.\n return [[Complex(0., 0.), Complex(0., 0.)],\n [Complex(0., 0.), Complex(0., 0.)]];\n }\n}\n",
|
|
@@ -896,6 +918,7 @@ export default {
|
|
|
896
918
|
},
|
|
897
919
|
"sourceIds": [
|
|
898
920
|
"linear_algebra__tensor_product__Verification.qs",
|
|
921
|
+
"KatasLibrary.qs",
|
|
899
922
|
"linear_algebra__Common.qs"
|
|
900
923
|
],
|
|
901
924
|
"placeholderCode": "namespace Kata {\n function TensorProduct() : Double[][] {\n // Replace the return value with correct answer.\n return [[0., 0., 0., 0.],\n [0., 0., 0., 0.],\n [0., 0., 0., 0.],\n [0., 0., 0., 0.]];\n }\n}\n",
|
|
@@ -3018,7 +3041,8 @@ export default {
|
|
|
3018
3041
|
},
|
|
3019
3042
|
"sourceIds": [
|
|
3020
3043
|
"preparing_states__wstate_power_of_two__Verification.qs",
|
|
3021
|
-
"KatasLibrary.qs"
|
|
3044
|
+
"KatasLibrary.qs",
|
|
3045
|
+
"preparing_states__Common.qs"
|
|
3022
3046
|
],
|
|
3023
3047
|
"placeholderCode": "namespace Kata {\n operation WState_PowerOfTwo (qs : Qubit[]) : Unit {\n // Implement your solution here...\n\n }\n}\n",
|
|
3024
3048
|
"explainedSolution": {
|
|
@@ -3055,7 +3079,8 @@ export default {
|
|
|
3055
3079
|
},
|
|
3056
3080
|
"sourceIds": [
|
|
3057
3081
|
"preparing_states__wstate_arbitrary__Verification.qs",
|
|
3058
|
-
"KatasLibrary.qs"
|
|
3082
|
+
"KatasLibrary.qs",
|
|
3083
|
+
"preparing_states__Common.qs"
|
|
3059
3084
|
],
|
|
3060
3085
|
"placeholderCode": "namespace Kata {\n operation WState_Arbitrary (qs : Qubit[]) : Unit {\n // Implement your solution here...\n\n }\n}\n",
|
|
3061
3086
|
"explainedSolution": {
|
|
@@ -3655,7 +3680,12 @@ export default {
|
|
|
3655
3680
|
"type": "lesson",
|
|
3656
3681
|
"id": "distinguishing_states__orthogonal_states",
|
|
3657
3682
|
"title": "Distinguishing Orthogonal States",
|
|
3658
|
-
"items": [
|
|
3683
|
+
"items": [
|
|
3684
|
+
{
|
|
3685
|
+
"type": "text-content",
|
|
3686
|
+
"content": "<p>In this lesson, you will practice distinguishing sets of states that are pairwise orthogonal.\nIn this scenario, the states can be distinguished perfectly, with 100% accuracy.</p>\n"
|
|
3687
|
+
}
|
|
3688
|
+
]
|
|
3659
3689
|
},
|
|
3660
3690
|
{
|
|
3661
3691
|
"type": "exercise",
|
|
@@ -3667,7 +3697,8 @@ export default {
|
|
|
3667
3697
|
},
|
|
3668
3698
|
"sourceIds": [
|
|
3669
3699
|
"distinguishing_states__zero_one__Verification.qs",
|
|
3670
|
-
"KatasLibrary.qs"
|
|
3700
|
+
"KatasLibrary.qs",
|
|
3701
|
+
"distinguishing_states__Common.qs"
|
|
3671
3702
|
],
|
|
3672
3703
|
"placeholderCode": "namespace Kata {\n operation IsQubitOne (q : Qubit) : Bool {\n // Implement your solution here...\n\n return false;\n }\n}\n",
|
|
3673
3704
|
"explainedSolution": {
|
|
@@ -3695,7 +3726,8 @@ export default {
|
|
|
3695
3726
|
},
|
|
3696
3727
|
"sourceIds": [
|
|
3697
3728
|
"distinguishing_states__plus_minus__Verification.qs",
|
|
3698
|
-
"KatasLibrary.qs"
|
|
3729
|
+
"KatasLibrary.qs",
|
|
3730
|
+
"distinguishing_states__Common.qs"
|
|
3699
3731
|
],
|
|
3700
3732
|
"placeholderCode": "namespace Kata {\n operation IsQubitPlus(q : Qubit) : Bool {\n // Implement your solution here...\n\n return false;\n }\n}\n",
|
|
3701
3733
|
"explainedSolution": {
|
|
@@ -3732,7 +3764,8 @@ export default {
|
|
|
3732
3764
|
},
|
|
3733
3765
|
"sourceIds": [
|
|
3734
3766
|
"distinguishing_states__a_b__Verification.qs",
|
|
3735
|
-
"KatasLibrary.qs"
|
|
3767
|
+
"KatasLibrary.qs",
|
|
3768
|
+
"distinguishing_states__Common.qs"
|
|
3736
3769
|
],
|
|
3737
3770
|
"placeholderCode": "namespace Kata {\n operation IsQubitA(alpha : Double, q : Qubit) : Bool {\n // Implement your solution here...\n\n return false;\n }\n}\n",
|
|
3738
3771
|
"explainedSolution": {
|
|
@@ -3760,7 +3793,8 @@ export default {
|
|
|
3760
3793
|
},
|
|
3761
3794
|
"sourceIds": [
|
|
3762
3795
|
"distinguishing_states__zerozero_oneone__Verification.qs",
|
|
3763
|
-
"KatasLibrary.qs"
|
|
3796
|
+
"KatasLibrary.qs",
|
|
3797
|
+
"distinguishing_states__Common.qs"
|
|
3764
3798
|
],
|
|
3765
3799
|
"placeholderCode": "namespace Kata {\n operation ZeroZeroOrOneOne(qs : Qubit[]) : Int {\n // Implement your solution here...\n\n return 0;\n }\n}\n",
|
|
3766
3800
|
"explainedSolution": {
|
|
@@ -3967,11 +4001,12 @@ export default {
|
|
|
3967
4001
|
"title": "Distinguish Four Bell States",
|
|
3968
4002
|
"description": {
|
|
3969
4003
|
"type": "text-content",
|
|
3970
|
-
"content": "<p><strong>Input:</strong> Two qubits (stored in an array of length 2) which are guaranteed to be in one of the four Bell states.</p>\n<p>Output:</p>\n<ul>\n<li>0 if they were in the state $\\ket{\\Phi^{+}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{00} + \\ket{11}\\big)$,</li>\n<li>1 if they were in the state $\\ket{\\Phi^{-}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{00} - \\ket{11}\\big)$,</li>\n<li>2 if they were in the state $\\ket{\\Psi^{+}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{01} + \\ket{10}\\big)$,</li>\n<li>3 if they were in the state $\\ket{\\Psi^{-}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{01} - \\ket{10}\\big)$.</li>\n</ul>\n<p>The state of the qubits at the end of the operation does not matter.</p>\n"
|
|
4004
|
+
"content": "<p><strong>Input:</strong> Two qubits (stored in an array of length 2) which are guaranteed to be in one of the four Bell states.</p>\n<p><strong>Output:</strong></p>\n<ul>\n<li>0 if they were in the state $\\ket{\\Phi^{+}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{00} + \\ket{11}\\big)$,</li>\n<li>1 if they were in the state $\\ket{\\Phi^{-}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{00} - \\ket{11}\\big)$,</li>\n<li>2 if they were in the state $\\ket{\\Psi^{+}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{01} + \\ket{10}\\big)$,</li>\n<li>3 if they were in the state $\\ket{\\Psi^{-}} = \\frac{1}{\\sqrt{2}} \\big(\\ket{01} - \\ket{10}\\big)$.</li>\n</ul>\n<p>The state of the qubits at the end of the operation does not matter.</p>\n"
|
|
3971
4005
|
},
|
|
3972
4006
|
"sourceIds": [
|
|
3973
4007
|
"distinguishing_states__four_bell_states__Verification.qs",
|
|
3974
|
-
"KatasLibrary.qs"
|
|
4008
|
+
"KatasLibrary.qs",
|
|
4009
|
+
"distinguishing_states__Common.qs"
|
|
3975
4010
|
],
|
|
3976
4011
|
"placeholderCode": "namespace Kata {\n operation BellState(qs : Qubit[]) : Int {\n // Implement your solution here...\n\n return -1;\n }\n}\n",
|
|
3977
4012
|
"explainedSolution": {
|
|
@@ -4079,8 +4114,13 @@ export default {
|
|
|
4079
4114
|
{
|
|
4080
4115
|
"type": "lesson",
|
|
4081
4116
|
"id": "distinguishing_states__nonorthogonal_states",
|
|
4082
|
-
"title": "Distinguishing Non-
|
|
4083
|
-
"items": [
|
|
4117
|
+
"title": "Distinguishing Non-Orthogonal States",
|
|
4118
|
+
"items": [
|
|
4119
|
+
{
|
|
4120
|
+
"type": "text-content",
|
|
4121
|
+
"content": "<p>This lesson offers you several variants of the task of distinguishing sets of states that are not orthogonal.</p>\n"
|
|
4122
|
+
}
|
|
4123
|
+
]
|
|
4084
4124
|
},
|
|
4085
4125
|
{
|
|
4086
4126
|
"type": "exercise",
|
|
@@ -4092,7 +4132,8 @@ export default {
|
|
|
4092
4132
|
},
|
|
4093
4133
|
"sourceIds": [
|
|
4094
4134
|
"distinguishing_states__zero_plus__Verification.qs",
|
|
4095
|
-
"KatasLibrary.qs"
|
|
4135
|
+
"KatasLibrary.qs",
|
|
4136
|
+
"distinguishing_states__Common.qs"
|
|
4096
4137
|
],
|
|
4097
4138
|
"placeholderCode": "namespace Kata {\n operation IsQubitZeroOrPlus (q : Qubit) : Bool {\n // Implement your solution here...\n return true;\n }\n}\n",
|
|
4098
4139
|
"explainedSolution": {
|
|
@@ -4120,7 +4161,8 @@ export default {
|
|
|
4120
4161
|
},
|
|
4121
4162
|
"sourceIds": [
|
|
4122
4163
|
"distinguishing_states__zero_plus_inc__Verification.qs",
|
|
4123
|
-
"KatasLibrary.qs"
|
|
4164
|
+
"KatasLibrary.qs",
|
|
4165
|
+
"distinguishing_states__Common.qs"
|
|
4124
4166
|
],
|
|
4125
4167
|
"placeholderCode": "namespace Kata {\n operation IsQubitZeroPlusOrInconclusive(q : Qubit) : Int {\n // Implement your solution here...\n return -2;\n }\n}\n",
|
|
4126
4168
|
"explainedSolution": {
|
|
@@ -4148,7 +4190,8 @@ export default {
|
|
|
4148
4190
|
},
|
|
4149
4191
|
"sourceIds": [
|
|
4150
4192
|
"distinguishing_states__peres_wooters_game__Verification.qs",
|
|
4151
|
-
"KatasLibrary.qs"
|
|
4193
|
+
"KatasLibrary.qs",
|
|
4194
|
+
"distinguishing_states__Common.qs"
|
|
4152
4195
|
],
|
|
4153
4196
|
"placeholderCode": "namespace Kata {\n operation IsQubitNotInABC(q : Qubit) : Int {\n // Implement your solution here...\n return -1;\n }\n}",
|
|
4154
4197
|
"explainedSolution": {
|
|
@@ -4173,7 +4216,7 @@ export default {
|
|
|
4173
4216
|
"items": [
|
|
4174
4217
|
{
|
|
4175
4218
|
"type": "text-content",
|
|
4176
|
-
"content": "<p>Congratulations! In this kata you learned to use measurements and basic quantum computing gates to distinguish quantum states
|
|
4219
|
+
"content": "<p>Congratulations! In this kata you learned to use measurements and basic quantum computing gates to distinguish quantum states.</p>\n"
|
|
4177
4220
|
}
|
|
4178
4221
|
]
|
|
4179
4222
|
}
|
|
@@ -4199,7 +4242,12 @@ export default {
|
|
|
4199
4242
|
"type": "lesson",
|
|
4200
4243
|
"id": "distinguishing_unitaries__single_qubit",
|
|
4201
4244
|
"title": "Distinguishing Single-Qubit Gates",
|
|
4202
|
-
"items": [
|
|
4245
|
+
"items": [
|
|
4246
|
+
{
|
|
4247
|
+
"type": "text-content",
|
|
4248
|
+
"content": "<p>To start with, let's look at some problems involving distinguishing single-qubit gates.</p>\n"
|
|
4249
|
+
}
|
|
4250
|
+
]
|
|
4203
4251
|
},
|
|
4204
4252
|
{
|
|
4205
4253
|
"type": "exercise",
|
|
@@ -4495,7 +4543,12 @@ export default {
|
|
|
4495
4543
|
"type": "lesson",
|
|
4496
4544
|
"id": "distinguishing_unitaries__multi_qubit",
|
|
4497
4545
|
"title": "Distinguishing Multi-Qubit Gates",
|
|
4498
|
-
"items": [
|
|
4546
|
+
"items": [
|
|
4547
|
+
{
|
|
4548
|
+
"type": "text-content",
|
|
4549
|
+
"content": "<p>In this lesson, the exercises focus on distinguishing multi-qubit gates.</p>\n"
|
|
4550
|
+
}
|
|
4551
|
+
]
|
|
4499
4552
|
},
|
|
4500
4553
|
{
|
|
4501
4554
|
"type": "exercise",
|
|
@@ -4847,7 +4900,9 @@ export default {
|
|
|
4847
4900
|
"content": "<p><strong>Input:</strong> An integer $N$.</p>\n<p><strong>Output</strong> : A <code>Bool</code> array of length N, where each element is chosen at random as <code>true</code> or <code>false</code> with $50\\%$ probability.</p>\n<blockquote>\n<p>This will be used by both Alice and Bob to choose either the sequence of bits to send or the sequence of bases\nto use when encoding/measuring the bits.</p>\n</blockquote>\n"
|
|
4848
4901
|
},
|
|
4849
4902
|
"sourceIds": [
|
|
4850
|
-
"key_distribution__random_array__Verification.qs"
|
|
4903
|
+
"key_distribution__random_array__Verification.qs",
|
|
4904
|
+
"KatasLibrary.qs",
|
|
4905
|
+
"key_distribution__Common.qs"
|
|
4851
4906
|
],
|
|
4852
4907
|
"placeholderCode": "namespace Kata {\n operation RandomArray(N : Int) : Bool[] {\n // Create a mutable array variable for storing the return value.\n mutable s = [];\n\n // Implement your solution here...\n\n return s;\n }\n}\n",
|
|
4853
4908
|
"explainedSolution": {
|
|
@@ -4875,6 +4930,7 @@ export default {
|
|
|
4875
4930
|
},
|
|
4876
4931
|
"sourceIds": [
|
|
4877
4932
|
"key_distribution__prepare_qubits__Verification.qs",
|
|
4933
|
+
"KatasLibrary.qs",
|
|
4878
4934
|
"key_distribution__Common.qs"
|
|
4879
4935
|
],
|
|
4880
4936
|
"placeholderCode": "namespace Kata {\n operation PrepareQubits(qs : Qubit[], bases : Bool[], bits : Bool[]) : Unit {\n // Implement your solution here...\n\n }\n}\n",
|
|
@@ -4903,6 +4959,7 @@ export default {
|
|
|
4903
4959
|
},
|
|
4904
4960
|
"sourceIds": [
|
|
4905
4961
|
"key_distribution__measure_qubits__Verification.qs",
|
|
4962
|
+
"KatasLibrary.qs",
|
|
4906
4963
|
"key_distribution__Common.qs"
|
|
4907
4964
|
],
|
|
4908
4965
|
"placeholderCode": "namespace Kata {\n operation MeasureQubits(qs : Qubit[], bases : Bool[]) : Bool[] {\n // Implement your solution here...\n return [];\n }\n}\n",
|
|
@@ -4931,6 +4988,7 @@ export default {
|
|
|
4931
4988
|
},
|
|
4932
4989
|
"sourceIds": [
|
|
4933
4990
|
"key_distribution__shared_key__Verification.qs",
|
|
4991
|
+
"KatasLibrary.qs",
|
|
4934
4992
|
"key_distribution__Common.qs"
|
|
4935
4993
|
],
|
|
4936
4994
|
"placeholderCode": "namespace Kata {\n function GenerateSharedKey(basesAlice : Bool[], basesBob : Bool[], bits : Bool[]) : Bool[] {\n // Create a mutable array variable for storing the key.\n mutable key = [];\n \n // Implement your solution here...\n\n return key;\n }\n}\n",
|
|
@@ -5510,6 +5568,7 @@ export default {
|
|
|
5510
5568
|
},
|
|
5511
5569
|
"sourceIds": [
|
|
5512
5570
|
"superdense_coding__alice_sends_message__Verification.qs",
|
|
5571
|
+
"KatasLibrary.qs",
|
|
5513
5572
|
"superdense_coding__Common.qs"
|
|
5514
5573
|
],
|
|
5515
5574
|
"placeholderCode": "namespace Kata {\n operation EncodeMessageInQubit(qAlice : Qubit, message : (Bool, Bool)) : Unit {\n // Get the bits from the message\n let (bit1, bit2) = message;\n\n // Implement your solution here...\n\n }\n}\n",
|
|
@@ -5538,6 +5597,7 @@ export default {
|
|
|
5538
5597
|
},
|
|
5539
5598
|
"sourceIds": [
|
|
5540
5599
|
"superdense_coding__bob_decodes_message__Verification.qs",
|
|
5600
|
+
"KatasLibrary.qs",
|
|
5541
5601
|
"superdense_coding__Common.qs"
|
|
5542
5602
|
],
|
|
5543
5603
|
"placeholderCode": "namespace Kata {\n operation DecodeMessageFromQubits(qAlice : Qubit, qBob : Qubit) : (Bool, Bool) {\n // Implement your solution here...\n\n return (false, false);\n }\n}\n",
|
|
@@ -5566,6 +5626,7 @@ export default {
|
|
|
5566
5626
|
},
|
|
5567
5627
|
"sourceIds": [
|
|
5568
5628
|
"superdense_coding__protocol_e2e__Verification.qs",
|
|
5629
|
+
"KatasLibrary.qs",
|
|
5569
5630
|
"superdense_coding__Common.qs"
|
|
5570
5631
|
],
|
|
5571
5632
|
"placeholderCode": "namespace Kata {\n operation SuperdenseCodingProtocol(message : (Bool, Bool)) : (Bool, Bool) {\n // Implement your solution here...\n\n return (false, false);\n }\n\n // You might find these helper operations from earlier tasks useful.\n operation CreateEntangledPair(qAlice : Qubit, qBob : Qubit) : Unit is Adj {\n H(qAlice);\n CNOT(qAlice, qBob);\n }\n\n operation EncodeMessageInQubit(qAlice : Qubit, message : (Bool, Bool)) : Unit {\n let (bit1, bit2) = message;\n\n if bit2 {\n X(qAlice);\n }\n\n if bit1 {\n Z(qAlice);\n }\n }\n\n operation DecodeMessageFromQubits(qAlice : Qubit, qBob : Qubit) : (Bool, Bool) {\n CNOT(qAlice, qBob);\n H(qAlice);\n return (MResetZ(qAlice) == One, MResetZ(qBob) == One);\n }\n}\n",
|
|
@@ -6513,7 +6574,7 @@ export default {
|
|
|
6513
6574
|
"items": [
|
|
6514
6575
|
{
|
|
6515
6576
|
"type": "text-content",
|
|
6516
|
-
"content": "<p>This kata introduces you to Deutsch algorithm - the single-qubit variant of Deutsch–Jozsa algorithm, one of the most famous educational algorithms in quantum computing.</p>\n<p><strong>This kata covers the following topics:</strong></p>\n<ul>\n<li>The problem solved by Deutsch algorithm and the classical solution to it</li>\n<li>Single-qubit phase oracles (for a more detailed introduction to phase oracles, see Oracles kata)</li>\n<li>Deutsch algorithm</li>\n<li>Implementing oracles and end-to-end Deutsch algorithm in Q#</li>\n</ul>\n<p><strong>What you should know to start working on this kata:</strong></p>\n<ul>\n<li>Basic single-qubit gates</li>\n<li>
|
|
6577
|
+
"content": "<p>This kata introduces you to Deutsch algorithm - the single-qubit variant of Deutsch–Jozsa algorithm, one of the most famous educational algorithms in quantum computing.</p>\n<p><strong>This kata covers the following topics:</strong></p>\n<ul>\n<li>The problem solved by Deutsch algorithm and the classical solution to it</li>\n<li>Single-qubit phase oracles (for a more detailed introduction to phase oracles, see Oracles kata)</li>\n<li>Deutsch algorithm</li>\n<li>Implementing oracles and end-to-end Deutsch algorithm in Q#</li>\n</ul>\n<p><strong>What you should know to start working on this kata:</strong></p>\n<ul>\n<li>Basic knowledge of single-qubit gates</li>\n<li>Basic knowledge of quantum measurements</li>\n</ul>\n"
|
|
6517
6578
|
}
|
|
6518
6579
|
]
|
|
6519
6580
|
},
|
|
@@ -6524,7 +6585,7 @@ export default {
|
|
|
6524
6585
|
"items": [
|
|
6525
6586
|
{
|
|
6526
6587
|
"type": "text-content",
|
|
6527
|
-
"content": "<p>You are given a classical function that takes one bit as an input and returns one bit: $f(x): \\{0, 1\\} \\to \\{0, 1\\}$. You are guaranteed that the function $f$ is</p>\n<ul>\n<li>either <em>constant</em> (returns the same value for all inputs)</li>\n<li>or <em>variable</em> (returns different values for different inputs).</li>\n</ul>\n<p>The task is to figure out whether the function is constant or variable. In other words, you need to decide whether $f(0) = f(1)$ (which is the same as the function being constant for single-bit functions).</p>\n<p><strong>Examples</strong></p>\n<ul>\n<li>$f(x) \\equiv 0$ or $f(x) \\equiv 1$ are constant functions (and they are actually the only constant functions in existence).</li>\n<li>$f(x) = x$ and $f(x) = 1 - x$ are the only variable functions (and they are the only variable functions for single-bit functions).</li>\n</ul>\n<p>If
|
|
6588
|
+
"content": "<p>You are given a classical function that takes one bit as an input and returns one bit: $f(x): \\{0, 1\\} \\to \\{0, 1\\}$. You are guaranteed that the function $f$ is</p>\n<ul>\n<li>either <em>constant</em> (returns the same value for all inputs)</li>\n<li>or <em>variable</em> (returns different values for different inputs).</li>\n</ul>\n<p>The task is to figure out whether the function is constant or variable. In other words, you need to decide whether $f(0) = f(1)$ (which is the same as the function being constant for single-bit functions).</p>\n<p><strong>Examples</strong></p>\n<ul>\n<li>$f(x) \\equiv 0$ or $f(x) \\equiv 1$ are constant functions (and they are actually the only constant functions in existence).</li>\n<li>$f(x) = x$ and $f(x) = 1 - x$ are the only variable functions (and they are the only variable functions for single-bit functions).</li>\n</ul>\n<p>If you solve this problem classically, how many calls to the given function will you need?</p>\n<p>The first function call will give you no information - regardless of whether it returns $0$ or $1$, the function could still be constant or variable.\nYou'll need to call the function a second time to evaluate its return values for both possible inputs to be able to check whether these values are equal.\nThis means that the classical solution requires <strong>2</strong> function calls.</p>\n<p>What about the quantum scenario?</p>\n"
|
|
6528
6589
|
}
|
|
6529
6590
|
]
|
|
6530
6591
|
},
|
|
@@ -6535,7 +6596,7 @@ export default {
|
|
|
6535
6596
|
"items": [
|
|
6536
6597
|
{
|
|
6537
6598
|
"type": "text-content",
|
|
6538
|
-
"content": "<p>In the quantum scenario, the classical function
|
|
6599
|
+
"content": "<p>In the quantum scenario, the classical function you're working with is implemented as a quantum oracle - a "black box" operation used as input to another algorithm. This operation is implemented in a way which allows to perform calculations not only on individual inputs, but also on superpositions of inputs.</p>\n<p>The oracle has to act on quantum states instead of classical values.\nTo enable this, integer input $x$ is represented as a qubit state $\\ket{x}$.</p>\n<p>The type of oracles used in this tutorial are called <em>phase oracles</em>. A phase oracle $U_f$ encodes the value of the classical function $f$ it implements in the phase of the qubit state as follows:</p>\n<p>$$U_f \\ket{x} = (-1)^{f(x)} \\ket{x}$$</p>\n<p>In our case $f$ can return only two values, 0 or 1, which result in no phase change or multiplication by a relative phase $-1$, respectively.</p>\n<p>The effect of such an oracle on any single basis state isn't particularly interesting: it just adds a global phase which isn't something you can observe. However, if you apply this oracle to a <em>superposition</em> of basis states, its effect becomes noticeable.\nRemember that quantum operations are linear: if you define the effect of an operation on the basis states, you'll be able to deduce its effect on superposition states (which are just linear combinations of the basis states) using its linearity.</p>\n<p>There are only four single-bit functions, so you can see how to implement them all as phase oracles in Q#.</p>\n<ol>\n<li>$f(x) \\equiv 0$</li>\n</ol>\n<p>This is the easiest function to implement: if $f(x) \\equiv 0$,</p>\n<p>$$U_f \\ket{x} \\equiv (-1)^0 \\ket{x} = \\ket{x}$$</p>\n<p>This means that $U_f$ is an identity - a transformation which does absolutely nothing!</p>\n<ol start=\"2\">\n<li>$f(x) \\equiv 1$</li>\n</ol>\n<p>The second constant function is slightly trickier: if $f(x) \\equiv 1$</p>\n<p>$$U_f \\ket{x} \\equiv (-1)^1 \\ket{x} = - \\ket{x}$$</p>\n<p>Now $U_f$ is a negative identity, that is, a transformation which applies a global phase of $-1$ to the state.\nA lot of algorithms just ignore the global phase accumulated in them, since it isn't observable.\nHowever, if you want to be really meticulous, you can use the $R$ gate which performs a given rotation around the given axis.\nWhen called with <code>PauliI</code> axis, this operation applies a global phase to the given qubit.</p>\n<ol start=\"3\">\n<li>$f(x) = x$</li>\n</ol>\n<p>$$U_f \\ket{x} = (-1)^{f(x)} \\ket{x} = (-1)^{x} \\ket{x}$$</p>\n<p>This means that you don't need to do anything if the qubit is in the $\\ket{0}$ state, and apply a phase of $-1$ if it is in the $\\ket{1}$ state. This is exactly the effect of the $Z$ gate!</p>\n<p>In the following demo, you'll see how to implement the first three one-bit functions as quantum oracles, and their effect on a qubit state.\nAfter that, you'll try to implement the oracle for the fourth function on your own!</p>\n"
|
|
6539
6600
|
},
|
|
6540
6601
|
{
|
|
6541
6602
|
"type": "example",
|
|
@@ -6550,7 +6611,7 @@ export default {
|
|
|
6550
6611
|
"title": "Oracle for f(x) = 1 - x",
|
|
6551
6612
|
"description": {
|
|
6552
6613
|
"type": "text-content",
|
|
6553
|
-
"content": "<p><strong>Input:</strong> A qubit in an arbitrary state $\\ket{\\psi} = \\alpha\\ket{0} + \\beta\\ket{1}$.</p>\n<p><strong>Goal:</strong> Apply the phase oracle $U_f$ for $f(x) = 1 - x$ to the qubit.\nThat is, apply a relative phase $(-1)^{f(x)}$ to each basis state $\\ket{x}$.</p>\n<details>\n<summary><strong>Need a hint?</strong></summary>\
|
|
6614
|
+
"content": "<p><strong>Input:</strong> A qubit in an arbitrary state $\\ket{\\psi} = \\alpha\\ket{0} + \\beta\\ket{1}$.</p>\n<p><strong>Goal:</strong> Apply the phase oracle $U_f$ for $f(x) = 1 - x$ to the qubit.\nThat is, apply a relative phase $(-1)^{f(x)}$ to each basis state $\\ket{x}$.</p>\n<details>\n<summary><strong>Need a hint?</strong></summary>\nYou can represent the effect of the oracle as\n<p>$$U_f \\ket{x} = (-1)^{1-x} \\ket{x} = (-1) \\cdot (-1)^x \\ket{x}$$</p>\n<p>Can you get this effect by combining some of the previous oracles implementations?</p>\n</details>\n"
|
|
6554
6615
|
},
|
|
6555
6616
|
"sourceIds": [
|
|
6556
6617
|
"deutsch_algo__one_minus_x_oracle__Verification.qs",
|
|
@@ -6562,7 +6623,7 @@ export default {
|
|
|
6562
6623
|
"items": [
|
|
6563
6624
|
{
|
|
6564
6625
|
"type": "text-content",
|
|
6565
|
-
"content": "<p>
|
|
6626
|
+
"content": "<p>You can represent the effect of the oracle as</p>\n<p>$$U_f \\ket{x} = (-1)^{1-x} \\ket{x} = (-1) \\cdot (-1)^x \\ket{x}$$</p>\n<p>This effect can be achieved as a combination of two oracles you've seen earlier, for functions $f(x) = 1$ and $f(x) = x$, applied consecutively.</p>\n"
|
|
6566
6627
|
},
|
|
6567
6628
|
{
|
|
6568
6629
|
"type": "solution",
|
|
@@ -6579,7 +6640,7 @@ export default {
|
|
|
6579
6640
|
"items": [
|
|
6580
6641
|
{
|
|
6581
6642
|
"type": "text-content",
|
|
6582
|
-
"content": "<p>Now let's return to the problem of figuring out whether the given function is constant or variable for single-bit functions.\nWhat can we do if we are given a quantum oracle $U_f$ implementing the function $f(x)$?</p>\n<p>There are two possible inputs to the function, $\\ket{0}$ and $\\ket{1}$. Let's see what happens if
|
|
6643
|
+
"content": "<p>Now let's return to the problem of figuring out whether the given function is constant or variable for single-bit functions.\nWhat can we do if we are given a quantum oracle $U_f$ implementing the function $f(x)$?</p>\n<p>There are two possible inputs to the function, $\\ket{0}$ and $\\ket{1}$. Let's see what happens if you apply the oracle to their superposition:</p>\n<p>$$U_f \\left( \\frac{1}{\\sqrt2} \\big( \\ket{0} + \\ket{1} \\big) \\right) \n= \\frac{1}{\\sqrt2} \\big( U_f \\ket{0} + U_f \\ket{1} \\big) \n= \\frac{1}{\\sqrt2} \\big( (-1)^{f(0)} \\ket{0} + (-1)^{f(1)} \\ket{1} \\big)$$.</p>\n<ul>\n<li>If $f(0) = f(1)$, the relative phases of the two basis states are the same, and the resulting state is $\\ket{+} = \\frac{1}{\\sqrt2} \\big( \\ket{0} + \\ket{1} \\big)$ (up to a global phase).</li>\n<li>If $f(0) \\neq f(1)$, the relative phases of the two basis states differ by a factor of $-1$, and the resulting state is $\\ket{-} = \\frac{1}{\\sqrt2} \\big( \\ket{0} - \\ket{1} \\big)$ (up to a global phase).</li>\n</ul>\n<p>Now, the states $\\ket{+}$ and $\\ket{-}$ can be distinguished using measurement: if you apply the H gate to each of them, you'll get $H\\ket{+} = \\ket{0}$ if $f(0) = f(1)$, or $H\\ket{-} = \\ket{1}$ if $f(0) \\neq f(1)$. This means that one oracle call doesn't let you calculate both $f(0)$ and $f(1)$, but it allows you to figure out whether $f(0) = f(1)$!</p>\n<p>Overall, the algorithm is very straightforward:</p>\n<ol>\n<li>Start with a qubit in the $\\ket{0}$ state.</li>\n<li>Apply the $H$ gate to the qubit.</li>\n<li>Apply the oracle.</li>\n<li>Apply the $H$ gate to the qubit again.</li>\n<li>Measure the qubit: if it's in the $\\ket{0}$ state, the function is constant, otherwise it's variable.</li>\n</ol>\n<p>Note that this algorithm requires only <strong>1</strong> oracle call, and always produces the correct result (the algorithm is deterministic).</p>\n"
|
|
6583
6644
|
}
|
|
6584
6645
|
]
|
|
6585
6646
|
},
|
|
@@ -6590,7 +6651,7 @@ export default {
|
|
|
6590
6651
|
"items": [
|
|
6591
6652
|
{
|
|
6592
6653
|
"type": "text-content",
|
|
6593
|
-
"content": "<p>We can follow the steps of the algorithm for the constant and the balanced scenarios using a neat visualization. Since Deutsch algorithm deals only with states with real amplitudes, we can map all states on the unit circle, and follow the state evolution through the steps.</p>\n<ol>\n<li>Start with a qubit in the $\\ket{0}$ state and apply the $H$ gate to the qubit.\n<br/></li>\n</ol>\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<p><svg width=\"660\" height=\"334\" fill=\"none\" version=\"1.1\" viewBox=\"0 0 660 334\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_4_498)\"><g clip-rule=\"evenodd\" fill-rule=\"evenodd\"><path d=\"m7.1 146c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m279 147c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke=\"#0070C0\"/><g stroke=\"#000\"><path d=\"m140 7.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/><path d=\"m1.3 147c0-3.26 2.64-5.9 5.9-5.9 3.26 0 5.9 2.64 5.9 5.9s-2.64 5.9-5.9 5.9c-3.26 0-5.9-2.64-5.9-5.9z\"/><path d=\"m140 286c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/></g></g><path d=\"m240 50.1c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m240 243c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m40.3 50.2c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\"/><path d=\"m40.3 243c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/></g><path d=\"m358 146c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m630 147c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#0070C0\"/><g stroke=\"#000\"><path d=\"m491 7.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m352 147c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m491 286c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/></g></g><path d=\"m591 50.1c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m591 243c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/><path d=\"m391 50.2c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\"/><path d=\"m391 243c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/></g></g><path d=\"m120 319c-0.941 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.863-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.701 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.73 0.432 3.59 1.29 0.869 0.857 1.3 1.99 1.3 3.4 0 1.53-0.449 2.73-1.35 3.62-0.892 0.886-2.12 1.33-3.67 1.33zm0.071-7.48c-0.67 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.05 1.26 3.05 3.79v5.63zm1.65-0.243v-2.3c0.468 0.282 0.932 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.898-0.069 1.19-0.207 0.293-0.137 0.44-0.347 0.44-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.302-0.224-0.512-0.314c-0.204-0.09-0.428-0.171-0.674-0.243-0.245-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.688-0.285-0.97-0.441-0.275-0.161-0.509-0.347-0.701-0.557-0.185-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.333-1.33 0.227-0.372 0.527-0.674 0.898-0.908 0.378-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.408 0 0.821 0.033 1.24 0.099 0.419 0.06 0.833 0.15 1.24 0.27v2.19c-0.359-0.21-0.746-0.365-1.16-0.467-0.407-0.108-0.809-0.162-1.2-0.162-0.186 0-0.362 0.018-0.53 0.054-0.162 0.03-0.305 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.107 0.207-0.107 0.333 0 0.167 0.053 0.311 0.161 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.429 0.135 0.638 0.207 0.378 0.131 0.719 0.275 1.02 0.431 0.305 0.156 0.566 0.338 0.781 0.548 0.222 0.21 0.39 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.359 1.4-0.234 0.384-0.548 0.698-0.944 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.42 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.926-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1z\" fill=\"#000\"/><path d=\"m476 307-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.143 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.617 0-1.1 0.228-1.45 0.683-0.348 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.42-1.87 0.3 0 0.534 0.036 0.701 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.485 0 0.878 0.134 1.18 0.404 0.306 0.269 0.458 0.617 0.458 1.04 0 0.431-0.152 0.785-0.458 1.06-0.299 0.276-0.692 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.64 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.778 0.584 1.31 0.584 0.647 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.095 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z\" fill=\"#000\"/><path d=\"m291 146h16.5l-0.688 0.688v-96.5l0.688 0.687h-54.6v-1.38h55.3v97.9h-17.2v-1.38zm-33-90.7-6.13-5.11 6.13-5.11c0.292-0.243 0.726-0.204 0.968 0.088 0.244 0.292 0.204 0.725-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.243 0.332 0.677 0.088 0.968-0.242 0.292-0.676 0.331-0.968 0.088z\" fill=\"#0070C0\"/><path d=\"m642 146h16.5l-0.688 0.688v-96.5l0.688 0.687h-54.6v-1.38h55.3v97.9h-17.2v-1.38zm-33-90.7-6.13-5.11 6.13-5.11c0.292-0.243 0.726-0.204 0.968 0.088 0.244 0.292 0.204 0.725-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.243 0.332 0.677 0.088 0.968-0.242 0.292-0.676 0.331-0.968 0.088z\" fill=\"#0070C0\"/><g clip-rule=\"evenodd\" fill=\"#000\" fill-rule=\"evenodd\"><path d=\"m242 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m250 142c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956-0.154 0.418-0.264 0.924-0.328 1.52-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.774 0.476-1.98 0.476-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.62 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.854-2.31-0.854-4.18 0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.79 0.316-0.474 0.696-0.824 1.14-1.05 0.442-0.228 0.926-0.34 1.45-0.34z\"/><path d=\"m256 140 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.29z\"/><path d=\"m140 30.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m148 30.6h0.446c-0.033 0.519-0.049 1.24-0.049 2.16v6.92c0 0.313 0.018 0.55 0.053 0.709s0.097 0.289 0.186 0.389 0.218 0.178 0.385 0.235c0.168 0.0568 0.378 0.1 0.632 0.13 0.254 0.0296 0.589 0.05 1 0.0608v0.592h-5.99v-0.592c0.599-0.0272 1.03-0.0636 1.28-0.11 0.257-0.0458 0.453-0.115 0.588-0.207s0.234-0.222 0.296-0.389c0.062-0.168 0.093-0.44 0.093-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.075-0.1-0.186-0.15-0.332-0.15-0.173 0-0.419 0.0892-0.737 0.268-0.319 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m154 29.4 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m208 73h1.25v15.1h-1.25v-15.1z\"/><path d=\"m217 74.6h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m226 72.3 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m208 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m213 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m226 205 3.23 7.28v0.598l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m133 250h9.99v1.08h-9.99v-1.08z\"/><path d=\"m146 243h1.25v15.1h-1.25v-15.1z\"/><path d=\"m154 244h0.446c-0.033 0.518-0.049 1.24-0.049 2.16v6.92c0 0.312 0.018 0.55 0.053 0.708 0.035 0.16 0.097 0.29 0.186 0.39s0.218 0.178 0.385 0.234c0.168 0.058 0.378 0.1 0.632 0.13s0.59 0.05 1.01 0.062v0.59h-5.99v-0.59c0.599-0.028 1.03-0.064 1.28-0.11 0.257-0.046 0.453-0.114 0.588-0.206s0.234-0.222 0.296-0.39 0.093-0.44 0.093-0.818v-6.57c0-0.216-0.038-0.374-0.113-0.474-0.076-0.1-0.187-0.15-0.333-0.15-0.173 0-0.419 0.088-0.737 0.268-0.319 0.178-0.714 0.424-1.18 0.736l-0.356-0.624 3.79-2.26z\"/><path d=\"m160 243 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m28.4 147h9.99v1.08h-9.99v-1.08z\"/><path d=\"m41.6 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m49.5 142c-0.373 0-0.685 0.11-0.936 0.332s-0.454 0.54-0.608 0.956c-0.154 0.418-0.263 0.924-0.328 1.52-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.824 0.833 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.696-0.824 1.14-1.05 0.443-0.228 0.927-0.34 1.45-0.34z\"/><path d=\"m55.8 140 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.29z\"/><path d=\"m57.9 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m71 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m79.9 207h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m88.4 205 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.29z\"/><path d=\"m57.2 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m70.3 72.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m74.8 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m87.7 71.8 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m592 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m600 142c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956-0.154 0.418-0.262 0.924-0.328 1.52-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.824 0.832 1.24 1.52 1.24 0.652 0 1.14-0.388 1.45-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.08-2.25-0.242-3.02-0.164-0.77-0.388-1.32-0.678-1.66-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.856-2.31-0.856-4.18 0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.696-0.824 1.14-1.05 0.444-0.228 0.926-0.34 1.45-0.34z\"/><path d=\"m606 140 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z\"/><path d=\"m489 30.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m498 30.6h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.016 0.55 0.052 0.709 0.034 0.159 0.098 0.289 0.186 0.389 0.09 0.1 0.218 0.178 0.386 0.235 0.166 0.0568 0.378 0.1 0.632 0.13 0.254 0.0296 0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.0272 1.03-0.0636 1.29-0.11 0.256-0.0458 0.452-0.115 0.588-0.207 0.134-0.0918 0.232-0.222 0.294-0.389 0.064-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.0892-0.738 0.268-0.318 0.178-0.712 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m504 29.4 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m558 73h1.25v15.1h-1.25v-15.1z\"/><path d=\"m567 74.6h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m575 72.3 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m558 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m563 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m575 205 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m483 250h9.99v1.08h-9.99v-1.08z\"/><path d=\"m496 243h1.25v15.1h-1.25v-15.1z\"/><path d=\"m504 244h0.446c-0.032 0.518-0.048 1.24-0.048 2.16v6.92c0 0.312 0.016 0.55 0.052 0.708 0.036 0.16 0.098 0.29 0.186 0.39 0.09 0.1 0.218 0.178 0.386 0.234 0.166 0.058 0.378 0.1 0.632 0.13s0.588 0.05 1 0.062v0.59h-5.99v-0.59c0.6-0.028 1.03-0.064 1.29-0.11 0.256-0.046 0.452-0.114 0.588-0.206 0.134-0.092 0.232-0.222 0.294-0.39 0.064-0.168 0.094-0.44 0.094-0.818v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.088-0.738 0.268-0.318 0.178-0.712 0.424-1.18 0.736l-0.358-0.624 3.79-2.26z\"/><path d=\"m510 243 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m378 147h9.99v1.08h-9.99v-1.08z\"/><path d=\"m391 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m399 142c-0.372 0-0.684 0.11-0.936 0.332s-0.454 0.54-0.608 0.956c-0.154 0.418-0.264 0.924-0.328 1.52-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.824 0.832 1.24 1.52 1.24 0.654 0 1.14-0.388 1.46-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.386-1.32-0.676-1.66c-0.29-0.334-0.638-0.502-1.05-0.502zm0.04-0.688c1.18 0 2.07 0.456 2.64 1.37 0.578 0.912 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.856-2.31-0.856-4.18 0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.694-0.824 1.14-1.05 0.444-0.228 0.926-0.34 1.45-0.34z\"/><path d=\"m406 140 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z\"/><path d=\"m408 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m421 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m430 207h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m438 205 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z\"/><path d=\"m407 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m420 72.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m425 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m438 71.8 3.24 7.28v0.6l-3.24 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/></g></g><defs><clipPath id=\"clip0_4_498\"><rect transform=\"translate(.6 .8)\" width=\"659\" height=\"332\" fill=\"#fff\"/></clipPath></defs></svg></p>\n<ol start=\"2\">\n<li>Apply the oracle.<br />\nHere, the difference between the two scenarios becomes noticeable. In the constant scenario, $\\ket{0}$ and $\\ket{1}$ states get the same phase (either $1$ or $-1$), so the state remains the same or acquires a global phase of $-1$, which is physically the same state. In the variable scenario, zero and one states get different phases, so the state changes!\n<br/></li>\n</ol>\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<p><svg width=\"738\" height=\"374\" fill=\"none\" version=\"1.1\" viewBox=\"0 0 738 374\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_5_635)\"><g clip-rule=\"evenodd\" fill-rule=\"evenodd\"><path d=\"m7.3 189c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\"><path d=\"m279 189c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke-width=\"1.15\"/><g stroke-width=\"1.38\"><path d=\"m140 49.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\"/><path d=\"m1.3 189c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\"/><path d=\"m140 328c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/></g></g><path d=\"m240 92.3c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" fill=\"#0070C0\"/><path d=\"m240 285c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m40.5 92.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m40.4 285c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\" fill=\"#0070C0\"/><path d=\"m358 189c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><g stroke=\"#000\"><path d=\"m630 189c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m491 49.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\"/><path d=\"m352 189c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/><path d=\"m491 328c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/></g><path d=\"m591 92.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#0070C0\"/></g><path d=\"m591 285c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><path d=\"m391 92.3c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><path d=\"m392 285c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/></g><g fill=\"#0070C0\"><path d=\"m247 85.4v-15.1l-0.688 0.688h22.1l-0.687-0.688v22.1l0.687-0.688h-16.2v1.38h16.9v-23.5h-23.5v15.8h1.38zm-5.8-5.06 5.11 6.13 5.11-6.13c0.244-0.292 0.204-0.725-0.088-0.968-0.291-0.243-0.725-0.204-0.968 0.088l-4.58 5.5h1.06l-4.58-5.5c-0.243-0.292-0.677-0.331-0.968-0.088-0.292 0.243-0.332 0.677-0.088 0.968z\"/><path d=\"m199 136-105 102 0.96 0.985 105-102-0.96-0.984zm-104 95.6-0.826 7.94 7.96-0.619c0.378-0.03 0.661-0.361 0.632-0.739-0.03-0.379-0.36-0.662-0.739-0.632l-7.14 0.555 0.737 0.757 0.741-7.12c0.0392-0.378-0.235-0.716-0.613-0.755-0.378-0.04-0.716 0.235-0.755 0.612z\"/><path d=\"m603 91.6h58.4v194h-56.4v-1.37h55.8l-0.688 0.686v-193l0.688 0.688h-57.8v-1.38zm7.05 199-6.13-5.11 6.13-5.11c0.29-0.244 0.724-0.204 0.968 0.088 0.242 0.29 0.204 0.724-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.242 0.33 0.676 0.088 0.968-0.244 0.292-0.678 0.332-0.968 0.088z\"/><path d=\"m397 85.7v-56.4h201v56.6h-1.37v-55.9l0.686 0.688h-200l0.688-0.688v55.7h-1.38zm5.8-5.06-5.11 6.13-5.11-6.13c-0.242-0.292-0.204-0.725 0.088-0.968 0.292-0.243 0.726-0.204 0.968 0.0882l4.58 5.5h-1.06l4.58-5.5c0.242-0.292 0.676-0.331 0.968-0.0882 0.292 0.243 0.33 0.677 0.088 0.968z\"/></g><g clip-rule=\"evenodd\" fill=\"#0078D4\" fill-rule=\"evenodd\"><path d=\"m231 48.1c0.516 0 0.962 0.0422 1.34 0.126l-0.308 1.34h-0.696c-0.074-0.301-0.17-0.517-0.288-0.649-0.12-0.132-0.294-0.198-0.526-0.198-0.302 0-0.556 0.083-0.764 0.249s-0.386 0.413-0.534 0.74-0.284 0.767-0.412 1.32l-0.196 0.862h2.03l-0.174 0.799h-2.04l-1.47 6.9c-0.242 1.14-0.614 2-1.12 2.56-0.5 0.562-1.13 0.842-1.89 0.842-0.222 0-0.396-0.0132-0.522-0.0396l0.134-0.696c0.054 0.0158 0.178 0.0236 0.372 0.0236 0.238 0 0.44-0.0606 0.61-0.182 0.168-0.121 0.324-0.332 0.47-0.633 0.144-0.3 0.278-0.717 0.4-1.25l1.7-7.52h-1.34l0.118-0.546c0.354-0.0212 0.608-0.0502 0.764-0.087 0.154-0.037 0.276-0.0924 0.364-0.166 0.086-0.0738 0.16-0.17 0.22-0.289 0.062-0.119 0.138-0.336 0.234-0.653 0.28-0.949 0.71-1.66 1.29-2.14 0.582-0.477 1.32-0.716 2.23-0.716z\"/><path d=\"m250 47.3c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.41 3.53-1.23 4.88-0.822 1.34-2.01 2.22-3.55 2.62l-0.19-0.609c1.22-0.406 2.12-1.21 2.72-2.4 0.594-1.2 0.89-2.72 0.89-4.56 0-1.78-0.296-3.26-0.886-4.44s-1.51-1.97-2.74-2.38l0.214-0.609zm-10.1 0 0.214 0.609c-1.23 0.406-2.15 1.2-2.74 2.38-0.592 1.18-0.89 2.66-0.89 4.44 0 1.85 0.298 3.37 0.89 4.56 0.594 1.2 1.5 2 2.72 2.4l-0.19 0.609c-1.55-0.406-2.73-1.28-3.55-2.62-0.822-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88s2.01-2.22 3.55-2.63z\"/><path d=\"m243 51.7c0.162 0 0.306 0.0184 0.43 0.0554 0.124 0.0368 0.234 0.0936 0.328 0.17 0.096 0.0764 0.18 0.175 0.254 0.297s0.144 0.286 0.214 0.494c0.068 0.208 0.132 0.467 0.194 0.775 0.06 0.308 0.114 0.629 0.162 0.961h0.078c0.506-0.712 0.89-1.23 1.15-1.56 0.26-0.33 0.48-0.575 0.66-0.736s0.352-0.274 0.518-0.34c0.166-0.0658 0.386-0.0988 0.66-0.0988 0.248 0 0.452 0.0316 0.61 0.0948l-0.316 1.43h-0.554c-0.032-0.221-0.124-0.332-0.278-0.332-0.046 0-0.098 0.0078-0.15 0.0238-0.052 0.0158-0.118 0.05-0.194 0.103-0.076 0.0526-0.188 0.156-0.336 0.308-0.148 0.153-0.314 0.34-0.498 0.562-0.184 0.222-0.374 0.454-0.57 0.696l-0.538 0.672c0.096 0.506 0.186 0.944 0.27 1.31s0.158 0.676 0.224 0.922 0.124 0.439 0.174 0.581c0.052 0.142 0.106 0.249 0.164 0.32 0.058 0.0712 0.116 0.121 0.178 0.15 0.06 0.029 0.13 0.0434 0.208 0.0434 0.144 0 0.282-0.0552 0.416-0.166s0.328-0.361 0.582-0.751l0.514 0.34c-0.37 0.548-0.704 0.935-1 1.16-0.298 0.224-0.652 0.336-1.06 0.336-0.226 0-0.418-0.0408-0.576-0.123-0.158-0.0816-0.296-0.212-0.412-0.391-0.116-0.179-0.218-0.459-0.308-0.839-0.164-0.675-0.264-1.19-0.3-1.55h-0.08c-0.558 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759-0.348 0.278-0.514 0.344c-0.166 0.066-0.386 0.099-0.66 0.099-0.248 0-0.452-0.0316-0.61-0.095l0.316-1.43h0.554c0.032 0.221 0.124 0.332 0.278 0.332 0.072 0 0.15-0.0198 0.232-0.0594s0.2-0.134 0.352-0.285c0.154-0.15 0.364-0.386 0.634-0.708 0.268-0.322 0.658-0.804 1.17-1.45-0.08-0.417-0.16-0.817-0.246-1.2-0.084-0.385-0.17-0.744-0.26-1.08s-0.164-0.55-0.222-0.653-0.12-0.174-0.186-0.214-0.148-0.0592-0.248-0.0592c-0.112 0-0.212 0.025-0.302 0.075-0.09 0.0502-0.186 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.958-1.12 0.306-0.248 0.666-0.372 1.08-0.372z\"/><path d=\"m262 55.9h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z\"/><path d=\"m281 49.2c-0.364 0-0.668 0.108-0.914 0.324-0.244 0.216-0.442 0.527-0.592 0.933-0.15 0.406-0.258 0.901-0.32 1.48-0.064 0.583-0.096 1.24-0.096 1.97 0 1.72 0.16 2.98 0.478 3.78 0.32 0.804 0.814 1.21 1.48 1.21 0.638 0 1.11-0.378 1.42-1.14s0.462-1.93 0.462-3.52c0-1.21-0.078-2.2-0.236-2.95-0.16-0.751-0.38-1.29-0.662-1.62s-0.622-0.49-1.02-0.49zm0.04-0.672c1.15 0 2.01 0.446 2.58 1.34s0.846 2.24 0.846 4.04c0 1.87-0.3 3.28-0.904 4.24s-1.49 1.44-2.65 1.44c-1.14 0-1.99-0.448-2.54-1.34-0.556-0.897-0.834-2.26-0.834-4.08 0-0.97 0.086-1.81 0.256-2.52 0.172-0.707 0.412-1.29 0.72-1.75 0.31-0.461 0.68-0.803 1.11-1.02s0.904-0.332 1.42-0.332z\"/><path d=\"m94.3 164c0.53 0 0.986 0.043 1.37 0.13l-0.316 1.38h-0.713c-0.0756-0.308-0.174-0.53-0.296-0.665s-0.301-0.203-0.539-0.203c-0.308 0-0.569 0.085-0.782 0.256-0.213 0.17-0.396 0.422-0.547 0.758-0.151 0.334-0.292 0.786-0.422 1.35l-0.203 0.882h2.08l-0.178 0.82h-2.09l-1.51 7.07c-0.249 1.17-0.63 2.05-1.14 2.62-0.513 0.574-1.16 0.862-1.94 0.862-0.227 0-0.405-0.012-0.535-0.04l0.138-0.714c0.054 0.016 0.181 0.026 0.381 0.026 0.243 0 0.451-0.064 0.624-0.188s0.334-0.34 0.482-0.648 0.285-0.734 0.409-1.28l1.74-7.71h-1.37l0.122-0.56c0.362-0.022 0.623-0.052 0.782-0.09s0.284-0.094 0.373-0.17c0.0892-0.076 0.165-0.174 0.227-0.296 0.0622-0.12 0.142-0.344 0.239-0.668 0.286-0.972 0.728-1.7 1.33-2.19 0.597-0.489 1.36-0.734 2.28-0.734z\"/><path d=\"m113 163c1.58 0.416 2.79 1.31 3.64 2.7 0.846 1.38 1.27 3.05 1.27 5 0 1.96-0.422 3.62-1.26 5-0.843 1.37-2.06 2.27-3.64 2.69l-0.195-0.624c1.25-0.416 2.18-1.24 2.78-2.46 0.608-1.23 0.911-2.79 0.911-4.68 0-1.83-0.302-3.34-0.907-4.55-0.606-1.21-1.54-2.02-2.81-2.44l0.219-0.624zm-10.3 0 0.219 0.624c-1.26 0.416-2.2 1.23-2.81 2.44-0.608 1.21-0.912 2.73-0.912 4.55 0 1.89 0.304 3.45 0.912 4.68 0.608 1.23 1.54 2.05 2.78 2.46l-0.194 0.624c-1.58-0.416-2.8-1.31-3.64-2.69-0.843-1.38-1.26-3.04-1.26-5 0-1.95 0.423-3.62 1.27-5 0.846-1.38 2.06-2.28 3.64-2.7z\"/><path d=\"m106 168c0.168 0 0.315 0.02 0.442 0.058s0.239 0.096 0.336 0.174c0.098 0.078 0.184 0.18 0.26 0.304 0.075 0.124 0.148 0.292 0.219 0.506 0.07 0.214 0.136 0.478 0.198 0.794s0.118 0.646 0.166 0.986h0.081c0.519-0.73 0.912-1.26 1.18-1.6 0.267-0.338 0.493-0.588 0.677-0.754 0.183-0.164 0.36-0.28 0.53-0.348 0.171-0.068 0.396-0.1 0.677-0.1 0.254 0 0.462 0.032 0.624 0.096l-0.324 1.47h-0.567c-0.033-0.228-0.127-0.342-0.284-0.342-0.049 0-0.1 0.01-0.154 0.026s-0.12 0.05-0.199 0.104c-0.078 0.054-0.193 0.16-0.344 0.316-0.151 0.158-0.322 0.35-0.511 0.576-0.189 0.228-0.383 0.464-0.583 0.714l-0.551 0.688c0.097 0.52 0.189 0.968 0.275 1.35 0.087 0.378 0.164 0.694 0.231 0.944 0.068 0.252 0.127 0.45 0.178 0.596 0.052 0.146 0.107 0.256 0.167 0.328 0.059 0.074 0.12 0.124 0.182 0.154s0.134 0.044 0.215 0.044c0.146 0 0.288-0.056 0.425-0.17 0.138-0.112 0.337-0.37 0.596-0.77l0.527 0.35c-0.378 0.562-0.72 0.956-1.02 1.19-0.306 0.23-0.669 0.346-1.09 0.346-0.232 0-0.429-0.042-0.591-0.126s-0.303-0.218-0.422-0.402-0.224-0.47-0.316-0.858c-0.167-0.692-0.27-1.22-0.308-1.59h-0.081c-0.573 0.806-0.998 1.38-1.28 1.73-0.278 0.352-0.507 0.612-0.689 0.78-0.181 0.166-0.356 0.284-0.526 0.352-0.171 0.068-0.396 0.102-0.677 0.102-0.254 0-0.462-0.034-0.624-0.098l0.324-1.47h0.567c0.033 0.228 0.127 0.342 0.284 0.342 0.076 0 0.155-0.022 0.239-0.062s0.204-0.138 0.361-0.292 0.373-0.396 0.648-0.724c0.276-0.33 0.676-0.824 1.2-1.48-0.081-0.428-0.165-0.838-0.251-1.23-0.087-0.394-0.176-0.762-0.268-1.1-0.092-0.342-0.167-0.564-0.227-0.67-0.059-0.104-0.123-0.178-0.19-0.218-0.068-0.04-0.153-0.06-0.256-0.06-0.113 0-0.216 0.024-0.308 0.076s-0.191 0.14-0.3 0.268c-0.108 0.126-0.251 0.326-0.429 0.596l-0.527-0.35c0.34-0.512 0.667-0.896 0.981-1.15 0.313-0.254 0.683-0.382 1.11-0.382z\"/><path d=\"m125 172h9.99v1.08h-9.99v-1.08zm0-3.36h9.99v1.08h-9.99v-1.08z\"/><path d=\"m146 164h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.052 0.71 0.036 0.158 0.098 0.288 0.186 0.388 0.09 0.1 0.218 0.178 0.386 0.236 0.168 0.056 0.378 0.1 0.632 0.128 0.254 0.03 0.588 0.05 1 0.062v0.592h-5.99v-0.592c0.6-0.028 1.03-0.064 1.29-0.11s0.452-0.114 0.588-0.206c0.134-0.092 0.234-0.222 0.296-0.39 0.062-0.166 0.092-0.44 0.092-0.818v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.09-0.736 0.268-0.32 0.178-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m676 183c0.516 0 0.962 0.044 1.34 0.128l-0.308 1.34h-0.696c-0.074-0.3-0.17-0.516-0.288-0.648-0.12-0.132-0.294-0.198-0.528-0.198-0.3 0-0.554 0.082-0.762 0.248-0.208 0.168-0.386 0.414-0.534 0.74-0.148 0.328-0.286 0.768-0.412 1.32l-0.198 0.862h2.03l-0.174 0.798h-2.04l-1.47 6.9c-0.244 1.14-0.614 2-1.12 2.56-0.5 0.56-1.13 0.842-1.89 0.842-0.222 0-0.396-0.014-0.522-0.04l0.134-0.696c0.052 0.016 0.176 0.024 0.372 0.024 0.238 0 0.44-0.06 0.608-0.182 0.17-0.122 0.326-0.332 0.472-0.632 0.144-0.302 0.278-0.718 0.398-1.25l1.7-7.52h-1.34l0.12-0.546c0.352-0.02 0.608-0.05 0.762-0.086 0.156-0.038 0.278-0.092 0.364-0.166 0.088-0.074 0.162-0.17 0.222-0.288 0.06-0.12 0.138-0.338 0.234-0.654 0.278-0.948 0.71-1.66 1.29-2.14 0.584-0.476 1.33-0.716 2.23-0.716z\"/><path d=\"m694 182c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.412 3.53-1.23 4.88s-2.01 2.22-3.55 2.62l-0.19-0.608c1.22-0.406 2.12-1.21 2.72-2.41 0.594-1.2 0.89-2.72 0.89-4.56 0-1.78-0.296-3.26-0.886-4.44-0.59-1.18-1.51-1.97-2.74-2.38l0.212-0.608zm-10.1 0 0.212 0.608c-1.23 0.406-2.15 1.2-2.74 2.38-0.594 1.18-0.89 2.66-0.89 4.44 0 1.85 0.296 3.37 0.89 4.56 0.594 1.2 1.5 2 2.72 2.41l-0.19 0.608c-1.55-0.406-2.73-1.28-3.55-2.62-0.824-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88 0.824-1.35 2.01-2.22 3.55-2.63z\"/><path d=\"m688 187c0.164 0 0.308 0.018 0.432 0.054 0.124 0.038 0.234 0.094 0.328 0.17 0.096 0.078 0.18 0.176 0.254 0.298 0.074 0.12 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.466 0.194 0.774 0.062 0.31 0.116 0.63 0.162 0.962h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.576 0.662-0.736 0.178-0.16 0.352-0.274 0.518-0.34s0.386-0.098 0.66-0.098c0.248 0 0.45 0.03 0.61 0.094l-0.318 1.43h-0.554c-0.03-0.222-0.122-0.332-0.276-0.332-0.048 0-0.098 8e-3 -0.15 0.024s-0.118 0.05-0.194 0.102-0.188 0.156-0.336 0.308c-0.148 0.154-0.314 0.34-0.498 0.562-0.186 0.222-0.374 0.454-0.57 0.696l-0.538 0.672c0.094 0.506 0.184 0.944 0.27 1.31 0.084 0.368 0.158 0.676 0.224 0.922 0.066 0.244 0.124 0.438 0.174 0.58 0.05 0.144 0.104 0.25 0.162 0.322 0.058 0.07 0.118 0.12 0.178 0.15 0.062 0.028 0.132 0.042 0.21 0.042 0.142 0 0.282-0.054 0.416-0.166 0.134-0.11 0.328-0.36 0.58-0.75l0.516 0.34c-0.37 0.548-0.704 0.934-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.04-0.576-0.122-0.16-0.082-0.296-0.212-0.412-0.392s-0.22-0.458-0.308-0.838c-0.164-0.676-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.76c-0.178 0.164-0.348 0.278-0.514 0.344s-0.388 0.098-0.662 0.098c-0.248 0-0.45-0.032-0.608-0.094l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.02 0.234-0.06 0.082-0.038 0.2-0.134 0.352-0.284s0.364-0.386 0.632-0.708c0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.416-0.162-0.816-0.246-1.2-0.084-0.384-0.172-0.744-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.652-0.058-0.104-0.12-0.174-0.186-0.214s-0.15-0.06-0.25-0.06c-0.11 0-0.21 0.026-0.3 0.076s-0.188 0.138-0.292 0.262c-0.106 0.122-0.246 0.316-0.42 0.58l-0.514-0.34c0.332-0.5 0.652-0.876 0.958-1.12 0.304-0.248 0.666-0.372 1.08-0.372z\"/><path d=\"m706 191h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z\"/><path d=\"m725 187c0.162 0 0.306 0.018 0.43 0.054 0.124 0.038 0.234 0.094 0.328 0.17 0.096 0.078 0.18 0.176 0.254 0.298 0.074 0.12 0.144 0.286 0.214 0.494 0.068 0.208 0.132 0.466 0.194 0.774 0.06 0.31 0.114 0.63 0.162 0.962h0.078c0.506-0.712 0.89-1.23 1.15-1.56 0.26-0.33 0.48-0.576 0.66-0.736s0.352-0.274 0.518-0.34 0.386-0.098 0.66-0.098c0.248 0 0.452 0.03 0.61 0.094l-0.316 1.43h-0.554c-0.032-0.222-0.124-0.332-0.278-0.332-0.046 0-0.096 8e-3 -0.15 0.024-0.052 0.016-0.118 0.05-0.194 0.102s-0.188 0.156-0.336 0.308c-0.148 0.154-0.314 0.34-0.498 0.562s-0.374 0.454-0.57 0.696l-0.538 0.672c0.096 0.506 0.186 0.944 0.27 1.31 0.084 0.368 0.16 0.676 0.224 0.922 0.066 0.244 0.124 0.438 0.174 0.58 0.052 0.144 0.106 0.25 0.164 0.322 0.058 0.07 0.116 0.12 0.178 0.15 0.06 0.028 0.13 0.042 0.208 0.042 0.144 0 0.282-0.054 0.416-0.166 0.134-0.11 0.328-0.36 0.582-0.75l0.514 0.34c-0.37 0.548-0.704 0.934-1 1.16s-0.652 0.336-1.06 0.336c-0.228 0-0.42-0.04-0.578-0.122s-0.296-0.212-0.412-0.392-0.218-0.458-0.308-0.838c-0.164-0.676-0.264-1.19-0.3-1.55h-0.08c-0.558 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.76-0.348 0.278-0.514 0.344-0.386 0.098-0.66 0.098c-0.248 0-0.452-0.032-0.61-0.094l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.278 0.332 0.072 0 0.15-0.02 0.232-0.06 0.082-0.038 0.2-0.134 0.352-0.284 0.154-0.15 0.364-0.386 0.634-0.708 0.268-0.322 0.658-0.804 1.17-1.45-0.08-0.416-0.16-0.816-0.246-1.2-0.084-0.384-0.17-0.744-0.26-1.08s-0.164-0.55-0.222-0.652c-0.058-0.104-0.12-0.174-0.186-0.214s-0.148-0.06-0.248-0.06c-0.112 0-0.212 0.026-0.302 0.076s-0.186 0.138-0.292 0.262c-0.106 0.122-0.246 0.316-0.42 0.58l-0.514-0.34c0.332-0.5 0.652-0.876 0.958-1.12 0.306-0.248 0.666-0.372 1.08-0.372z\"/><path d=\"m463 7.88c0.516 0 0.962 0.0422 1.34 0.127l-0.308 1.34h-0.696c-0.074-0.301-0.17-0.517-0.288-0.649-0.12-0.132-0.294-0.198-0.526-0.198-0.302 0-0.556 0.083-0.764 0.249-0.208 0.166-0.386 0.413-0.534 0.74-0.148 0.327-0.284 0.767-0.412 1.32l-0.198 0.862h2.03l-0.174 0.799h-2.04l-1.47 6.9c-0.244 1.14-0.614 2-1.12 2.56-0.5 0.562-1.13 0.842-1.89 0.842-0.222 0-0.396-0.0132-0.522-0.0394l0.134-0.696c0.052 0.0158 0.176 0.0238 0.372 0.0238 0.238 0 0.44-0.0606 0.608-0.182 0.17-0.121 0.326-0.332 0.472-0.633 0.144-0.301 0.278-0.717 0.4-1.25l1.7-7.52h-1.34l0.12-0.546c0.352-0.021 0.608-0.05 0.762-0.087 0.156-0.0368 0.278-0.0922 0.364-0.166 0.088-0.074 0.162-0.17 0.222-0.289s0.138-0.336 0.234-0.653c0.28-0.949 0.71-1.66 1.29-2.14 0.584-0.477 1.33-0.716 2.23-0.716z\"/><path d=\"m482 7.11c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.41 3.53-1.23 4.88-0.822 1.34-2.01 2.22-3.55 2.62l-0.19-0.609c1.22-0.406 2.12-1.21 2.72-2.4s0.89-2.72 0.89-4.56c0-1.78-0.296-3.26-0.886-4.44-0.59-1.18-1.51-1.97-2.74-2.38l0.212-0.609zm-10.1 0 0.212 0.609c-1.23 0.406-2.15 1.2-2.74 2.38-0.594 1.18-0.89 2.66-0.89 4.44 0 1.85 0.296 3.37 0.89 4.56s1.5 2 2.72 2.4l-0.19 0.609c-1.55-0.406-2.73-1.28-3.55-2.62-0.824-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88 0.824-1.35 2.01-2.22 3.55-2.63z\"/><path d=\"m475 11.5c0.164 0 0.308 0.0184 0.432 0.0554s0.234 0.0936 0.328 0.17c0.096 0.0766 0.18 0.175 0.254 0.297 0.074 0.121 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.467 0.194 0.775 0.062 0.309 0.116 0.629 0.162 0.961h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.575 0.662-0.736 0.178-0.161 0.352-0.274 0.518-0.34 0.166-0.066 0.386-0.099 0.66-0.099 0.248 0 0.45 0.0318 0.61 0.095l-0.318 1.43h-0.552c-0.032-0.222-0.124-0.332-0.278-0.332-0.048 0-0.098 8e-3 -0.15 0.0238s-0.118 0.0502-0.194 0.103c-0.076 0.0528-0.188 0.156-0.336 0.309-0.148 0.153-0.314 0.34-0.498 0.562-0.186 0.221-0.374 0.453-0.57 0.696l-0.538 0.672c0.096 0.506 0.184 0.944 0.27 1.31 0.084 0.369 0.158 0.676 0.224 0.921s0.124 0.439 0.174 0.581 0.104 0.249 0.162 0.32 0.118 0.121 0.178 0.15c0.062 0.029 0.132 0.0434 0.21 0.0434 0.142 0 0.282-0.0554 0.416-0.166 0.134-0.111 0.328-0.361 0.58-0.751l0.516 0.34c-0.37 0.548-0.704 0.935-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.0408-0.576-0.123-0.16-0.0818-0.296-0.212-0.412-0.392-0.116-0.179-0.22-0.459-0.308-0.838-0.164-0.675-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759c-0.178 0.163-0.348 0.278-0.514 0.344s-0.388 0.0988-0.662 0.0988c-0.248 0-0.45-0.0316-0.608-0.0948l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.0198 0.234-0.0592 0.082-0.0396 0.2-0.135 0.352-0.285 0.152-0.15 0.364-0.386 0.632-0.708 0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.417-0.162-0.817-0.246-1.2-0.084-0.385-0.172-0.743-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.653-0.058-0.103-0.12-0.174-0.186-0.214-0.066-0.0396-0.15-0.0594-0.25-0.0594-0.11 0-0.21 0.025-0.3 0.0752-0.09 0.05-0.188 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.958-1.12s0.666-0.372 1.08-0.372z\"/><path d=\"m494 15.7h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z\"/><path d=\"m510 14h9.74v5.58h-1.12v-4.54h-8.62v-1.04z\"/><path d=\"m524 11.5c0.164 0 0.308 0.0184 0.432 0.0554s0.234 0.0936 0.328 0.17c0.094 0.0766 0.18 0.175 0.254 0.297 0.072 0.121 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.467 0.194 0.775 0.062 0.309 0.116 0.629 0.162 0.961h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.575 0.662-0.736 0.178-0.161 0.352-0.274 0.518-0.34 0.166-0.066 0.386-0.099 0.66-0.099 0.248 0 0.45 0.0318 0.608 0.095l-0.316 1.43h-0.554c-0.03-0.222-0.124-0.332-0.276-0.332-0.048 0-0.098 8e-3 -0.15 0.0238-0.054 0.0158-0.118 0.0502-0.194 0.103-0.076 0.0528-0.188 0.156-0.336 0.309-0.148 0.153-0.314 0.34-0.498 0.562-0.186 0.221-0.376 0.453-0.57 0.696l-0.538 0.672c0.094 0.506 0.184 0.944 0.268 1.31 0.086 0.369 0.16 0.676 0.226 0.921s0.124 0.439 0.174 0.581 0.104 0.249 0.162 0.32 0.118 0.121 0.178 0.15c0.062 0.029 0.13 0.0434 0.21 0.0434 0.142 0 0.28-0.0554 0.416-0.166 0.134-0.111 0.328-0.361 0.58-0.751l0.514 0.34c-0.368 0.548-0.702 0.935-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.0408-0.578-0.123-0.158-0.0818-0.294-0.212-0.41-0.392-0.116-0.179-0.22-0.459-0.308-0.838-0.164-0.675-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759c-0.178 0.163-0.348 0.278-0.514 0.344-0.168 0.066-0.388 0.0988-0.662 0.0988-0.248 0-0.45-0.0316-0.608-0.0948l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.0198 0.234-0.0592 0.082-0.0396 0.198-0.135 0.352-0.285 0.152-0.15 0.364-0.386 0.632-0.708 0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.417-0.162-0.817-0.246-1.2-0.084-0.385-0.172-0.743-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.653-0.058-0.103-0.12-0.174-0.186-0.214-0.066-0.0396-0.15-0.0594-0.25-0.0594-0.11 0-0.21 0.025-0.3 0.0752-0.09 0.05-0.188 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.956-1.12 0.306-0.248 0.668-0.372 1.08-0.372z\"/></g><path d=\"m121 360c-0.941 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.863-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.701 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.73 0.432 3.59 1.29 0.869 0.857 1.3 1.99 1.3 3.4 0 1.53-0.449 2.73-1.35 3.62-0.892 0.886-2.12 1.33-3.67 1.33zm0.071-7.48c-0.67 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-0.243v-2.3c0.467 0.282 0.932 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.898-0.069 1.19-0.207 0.293-0.137 0.44-0.347 0.44-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.302-0.224-0.512-0.314c-0.204-0.09-0.428-0.171-0.674-0.243-0.245-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.688-0.285-0.97-0.441-0.275-0.161-0.509-0.347-0.701-0.557-0.185-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.333-1.33 0.227-0.372 0.527-0.674 0.898-0.908 0.377-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.408 0 0.821 0.033 1.24 0.099 0.419 0.06 0.833 0.15 1.24 0.27v2.19c-0.359-0.21-0.746-0.365-1.16-0.467-0.407-0.108-0.809-0.162-1.2-0.162-0.186 0-0.362 0.018-0.53 0.054-0.162 0.03-0.305 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.108 0.207-0.108 0.333 0 0.167 0.054 0.311 0.162 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.429 0.135 0.638 0.207 0.378 0.131 0.719 0.275 1.02 0.431 0.305 0.156 0.566 0.338 0.781 0.548 0.222 0.21 0.39 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.359 1.4-0.234 0.384-0.548 0.698-0.944 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.967-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.035c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1z\" fill=\"#000\"/><path d=\"m477 347-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.143 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.534 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.617 0-1.1 0.228-1.45 0.683-0.347 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.43-1.87 0.299 0 0.533 0.036 0.7 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.486 0 0.878 0.134 1.18 0.404 0.306 0.269 0.459 0.617 0.459 1.04 0 0.431-0.153 0.785-0.459 1.06-0.299 0.276-0.691 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.641 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.778 0.584 1.31 0.584 0.646 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.096 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z\" fill=\"#000\"/><g clip-rule=\"evenodd\" fill=\"#000\" fill-rule=\"evenodd\"><path d=\"m242 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m250 184c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.826 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.46-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m256 182 3.24 7.28v0.6l-3.24 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m139 72.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m148 72.6h0.444c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.052 0.709 0.036 0.159 0.098 0.289 0.188 0.389 0.088 0.1 0.216 0.178 0.384 0.235 0.168 0.0566 0.378 0.0998 0.632 0.13s0.59 0.05 1.01 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.28-0.109 0.258-0.046 0.454-0.115 0.588-0.207 0.136-0.0918 0.234-0.221 0.296-0.389 0.062-0.167 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.076-0.0998-0.186-0.15-0.332-0.15-0.174 0-0.42 0.089-0.738 0.267-0.32 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m153 71.5 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m208 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m217 117h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m225 114 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m208 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m212 255h9.99v1.08h-9.99v-1.08z\"/><path d=\"m225 247 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m132 292h9.99v1.08h-9.99v-1.08z\"/><path d=\"m145 285h1.25v15.1h-1.25v-15.1z\"/><path d=\"m154 286h0.444c-0.032 0.52-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39 0.088 0.1 0.216 0.178 0.384 0.234 0.168 0.058 0.378 0.1 0.632 0.13s0.59 0.05 1.01 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.28-0.108 0.258-0.046 0.454-0.116 0.588-0.208 0.136-0.092 0.234-0.22 0.296-0.388s0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.088-0.738 0.266-0.318 0.18-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m159 285 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m27.9 189h9.99v1.08h-9.99v-1.08z\"/><path d=\"m41 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m48.9 184c-0.373 0-0.685 0.11-0.936 0.332-0.251 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.826 0.833 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.443-0.228 0.927-0.342 1.45-0.342z\"/><path d=\"m55.2 182 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m57.3 254h9.99v1.08h-9.99v-1.08z\"/><path d=\"m70.4 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m79.3 250h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m87.8 247 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m56.6 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m69.8 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m74.3 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m87.1 114 3.23 7.28v0.599l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m593 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m601 184c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956s-0.262 0.924-0.328 1.52c-0.064 0.598-0.096 1.27-0.096 2.02 0 1.76 0.162 3.05 0.49 3.88 0.326 0.826 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16s0.474-1.98 0.474-3.6c0-1.24-0.08-2.25-0.242-3.02s-0.388-1.32-0.678-1.66c-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.93 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.444-0.228 0.928-0.342 1.45-0.342z\"/><path d=\"m607 182 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m490 72.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m499 72.6h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.052 0.709 0.036 0.159 0.098 0.289 0.186 0.389 0.09 0.1 0.218 0.178 0.386 0.235 0.168 0.0566 0.378 0.0998 0.632 0.13s0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.29-0.109 0.256-0.046 0.452-0.115 0.588-0.207 0.134-0.0918 0.234-0.221 0.296-0.389 0.062-0.167 0.092-0.44 0.092-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.0998-0.186-0.15-0.332-0.15-0.172 0-0.418 0.089-0.736 0.267-0.32 0.178-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m504 71.5 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m559 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m567 117h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m576 114 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m559 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m563 255h9.99v1.08h-9.99v-1.08z\"/><path d=\"m576 247 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m483 292h9.99v1.08h-9.99v-1.08z\"/><path d=\"m496 285h1.25v15.1h-1.25v-15.1z\"/><path d=\"m505 286h0.446c-0.032 0.52-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.052 0.71 0.036 0.16 0.098 0.29 0.186 0.39 0.09 0.1 0.218 0.178 0.386 0.234 0.168 0.058 0.378 0.1 0.632 0.13s0.588 0.05 1 0.06v0.592h-5.99v-0.592c0.598-0.026 1.03-0.062 1.28-0.108s0.452-0.116 0.588-0.208c0.134-0.092 0.234-0.22 0.296-0.388s0.092-0.44 0.092-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.088-0.736 0.266-0.32 0.18-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m510 285 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m379 189h9.99v1.08h-9.99v-1.08z\"/><path d=\"m392 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m400 184c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956s-0.262 0.924-0.328 1.52c-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.826 0.832 1.24 1.52 1.24 0.652 0 1.14-0.388 1.45-1.16s0.474-1.98 0.474-3.6c0-1.24-0.08-2.25-0.242-3.02-0.164-0.77-0.388-1.32-0.678-1.66-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.444-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m406 182 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m408 254h9.99v1.08h-9.99v-1.08z\"/><path d=\"m421 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m430 250h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m439 247 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m408 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m421 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m425 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m438 114 3.23 7.28v0.599l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/></g></g><defs><clipPath id=\"clip0_5_635\"><rect transform=\"translate(.6 .2)\" width=\"737\" height=\"374\" fill=\"#fff\"/></clipPath></defs></svg></p>\n<ol start=\"3\">\n<li>Apply the $H$ gate to the qubit again.\nNow, we get the $\\ket{0}$ state for both constant scenarios and the $\\ket{1}$ state for both variable scenarios!\n<br/></li>\n</ol>\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<p><svg width=\"679\" height=\"365\" fill=\"none\" version=\"1.1\" viewBox=\"0 0 679 365\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_6_812)\"><g clip-rule=\"evenodd\" fill-rule=\"evenodd\"><path d=\"m24.1 163c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m296 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><path d=\"m157 23.8c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m18 163c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m157 302c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#000\"/><path d=\"m257 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" stroke=\"#0070C0\"/><path d=\"m257 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke=\"#000\"/><path d=\"m57.3 66.6c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9 0 3.26-2.69 5.9-6 5.9-3.31 0-6-2.64-6-5.9z\" stroke=\"#000\"/><path d=\"m57.3 260c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\" stroke=\"#0070C0\"/></g><path d=\"m375 163c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m647 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m508 23.7c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" fill=\"#0070C0\"/><path d=\"m369 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m508 302c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m608 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" stroke=\"#000\"/><path d=\"m608 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke=\"#0070C0\"/><path d=\"m408 66.6c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" stroke=\"#0070C0\"/><path d=\"m408 260c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#000\"/></g></g><g fill=\"#0070C0\"><path d=\"m309 162h15.1l-0.688 0.688v-96.5l0.688 0.688h-55.3v-1.38h56v97.9h-15.8v-1.38zm5.06 5.8-6.13-5.11 6.13-5.11c0.292-0.242 0.726-0.202 0.968 0.088 0.244 0.292 0.204 0.726-0.088 0.97l-5.5 4.58v-1.06l5.5 4.58c0.292 0.242 0.332 0.676 0.088 0.968-0.242 0.292-0.676 0.33-0.968 0.088z\"/><path d=\"m17 164h-15.4l0.688-0.688v96.5l-0.688-0.688h55.7v1.38h-56.3v-97.9h16.1v1.38zm-5.06-5.8 6.13 5.11-6.13 5.11c-0.292 0.242-0.725 0.204-0.968-0.088-0.243-0.292-0.204-0.726 0.088-0.968l5.5-4.58v1.06l-5.5-4.58c-0.292-0.242-0.331-0.676-0.088-0.968 0.243-0.292 0.677-0.33 0.968-0.088z\"/><path d=\"m620 259h57.4l-0.688 0.686v-258l0.688 0.687h-163l0.688-0.687v15.4h-1.38v-16.1h165v260h-58.1v-1.37zm-101-247-5.11 6.13-5.11-6.13c-0.242-0.292-0.204-0.725 0.088-0.968 0.292-0.243 0.726-0.204 0.968 0.088l4.58 5.5h-1.06l4.58-5.5c0.242-0.292 0.676-0.331 0.968-0.088 0.292 0.243 0.33 0.677 0.088 0.968z\"/><path d=\"m408 67.4h-51.1l0.686-0.688v258l-0.686-0.688h157l-0.686 0.688v-15.4h1.37v16.1h-158v-259h51.8v1.38zm101 247 5.11-6.13 5.11 6.13c0.244 0.292 0.204 0.726-0.088 0.97-0.292 0.242-0.724 0.202-0.968-0.088l-4.58-5.5h1.06l-4.58 5.5c-0.244 0.29-0.676 0.33-0.968 0.088-0.292-0.244-0.332-0.678-0.088-0.97z\"/></g><path d=\"m135 350c-0.94 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.862-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.7 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.72 0.432 3.59 1.29 0.868 0.857 1.3 1.99 1.3 3.4 0 1.53-0.45 2.73-1.35 3.62-0.893 0.886-2.12 1.33-3.68 1.33zm0.072-7.48c-0.671 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.477 0.856-0.477 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-0.243v-2.3c0.467 0.282 0.931 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.899-0.069 1.19-0.207 0.294-0.137 0.441-0.347 0.441-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.303-0.224-0.512-0.314c-0.204-0.09-0.429-0.171-0.674-0.243-0.246-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.689-0.285-0.97-0.441-0.276-0.161-0.509-0.347-0.701-0.557-0.186-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.332-1.33 0.228-0.372 0.528-0.674 0.899-0.908 0.377-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.407 0 0.821 0.033 1.24 0.099 0.419 0.06 0.832 0.15 1.24 0.27v2.19c-0.36-0.21-0.746-0.365-1.16-0.467-0.408-0.108-0.809-0.162-1.2-0.162-0.186 0-0.363 0.018-0.53 0.054-0.162 0.03-0.306 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.108 0.207-0.108 0.333 0 0.167 0.054 0.311 0.162 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.428 0.135 0.638 0.207 0.377 0.131 0.719 0.275 1.02 0.431 0.306 0.156 0.566 0.338 0.782 0.548 0.222 0.21 0.389 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.36 1.4-0.233 0.384-0.548 0.698-0.943 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.299 0 0.608-0.086 0.925-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.509-0.509-0.763-1.19-0.763-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.923 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.967-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.895 0.188-1.21 0.566-0.317 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.299 0 0.608-0.086 0.925-0.26v2.1z\" fill=\"#000\"/><path d=\"m491 338-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.144 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.616 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.534 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.616 0-1.1 0.228-1.45 0.683-0.347 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.43-1.87 0.299 0 0.533 0.036 0.7 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.486 0 0.878 0.134 1.18 0.404 0.306 0.269 0.459 0.617 0.459 1.04 0 0.431-0.153 0.785-0.459 1.06-0.299 0.276-0.691 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.641 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.779 0.584 1.31 0.584 0.646 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.096 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z\" fill=\"#000\"/><g clip-rule=\"evenodd\" fill=\"#000\" fill-rule=\"evenodd\"><path d=\"m259 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m266 157c-0.372 0-0.684 0.11-0.936 0.332s-0.454 0.54-0.608 0.956-0.264 0.924-0.328 1.52c-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.46-1.16s0.474-1.98 0.474-3.6c0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.42-1.32 0.738-1.8c0.316-0.472 0.694-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m273 156 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m156 45.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m164 45.9h0.446c-0.032 0.519-0.05 1.24-0.05 2.16v6.92c0 0.313 0.018 0.55 0.054 0.709 0.034 0.159 0.096 0.289 0.186 0.389s0.218 0.178 0.384 0.235c0.168 0.0568 0.38 0.1 0.634 0.13 0.254 0.0298 0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.29-0.109 0.256-0.0458 0.452-0.115 0.586-0.207 0.136-0.0918 0.234-0.222 0.296-0.389 0.062-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.0892-0.738 0.267-0.318 0.178-0.712 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m170 44.8 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m224 88.4h1.25v15.1h-1.25v-15.1z\"/><path d=\"m233 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m242 87.6 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m224 222h1.25v15.1h-1.25v-15.1z\"/><path d=\"m229 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m242 221 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m149 265h9.99v1.08h-9.99v-1.08z\"/><path d=\"m162 259h1.25v15.1h-1.25v-15.1z\"/><path d=\"m171 259h0.446c-0.032 0.52-0.05 1.24-0.05 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39s0.218 0.178 0.386 0.234c0.166 0.056 0.378 0.1 0.632 0.13s0.588 0.05 1 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.29-0.108 0.256-0.046 0.452-0.116 0.586-0.208 0.136-0.092 0.234-0.222 0.296-0.388 0.062-0.168 0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.088-0.738 0.266-0.318 0.178-0.712 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m176 258 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m44.7 163h9.99v1.08h-9.99v-1.08z\"/><path d=\"m57.9 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m65.7 157c-0.373 0-0.685 0.11-0.936 0.332s-0.454 0.54-0.608 0.956-0.264 0.924-0.328 1.52c-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.824 0.833 1.24 1.52 1.24 0.654 0 1.14-0.386 1.45-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.443-0.228 0.927-0.342 1.45-0.342z\"/><path d=\"m72 156 3.23 7.28v0.598l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m74.1 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m87.3 221h1.25v15.1h-1.25v-15.1z\"/><path d=\"m96.2 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m105 220 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m73.4 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m86.6 87.9h1.25v15.1h-1.25v-15.1z\"/><path d=\"m91.1 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m104 87.2 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m608 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m616 157c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.46-1.16s0.474-1.98 0.474-3.6c0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m622 156 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m505 45.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m514 45.9h0.444c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.054 0.709 0.034 0.159 0.096 0.289 0.186 0.389 0.088 0.1 0.216 0.178 0.384 0.235s0.378 0.1 0.632 0.13c0.254 0.0298 0.59 0.05 1.01 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.28-0.109 0.258-0.0458 0.454-0.115 0.588-0.207 0.136-0.0918 0.234-0.222 0.296-0.389 0.062-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.0892-0.738 0.267-0.318 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m519 44.8 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m574 88.4h1.25v15.1h-1.25v-15.1z\"/><path d=\"m583 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m591 87.6 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m574 222h1.25v15.1h-1.25v-15.1z\"/><path d=\"m578 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m591 221 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m498 265h9.99v1.08h-9.99v-1.08z\"/><path d=\"m511 259h1.25v15.1h-1.25v-15.1z\"/><path d=\"m520 259h0.446c-0.034 0.52-0.05 1.24-0.05 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39 0.088 0.1 0.216 0.178 0.384 0.234s0.378 0.1 0.632 0.13 0.59 0.05 1.01 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.28-0.108 0.258-0.046 0.454-0.116 0.588-0.208 0.136-0.092 0.234-0.222 0.296-0.388 0.062-0.168 0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.088-0.738 0.266s-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m525 258 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m394 163h9.99v1.08h-9.99v-1.08z\"/><path d=\"m407 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m415 157c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.45-1.16 0.318-0.776 0.476-1.98 0.476-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.62 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m421 156 3.23 7.28v0.598l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m423 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m436 221h1.25v15.1h-1.25v-15.1z\"/><path d=\"m445 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m454 220 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m423 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m436 87.9h1.25v15.1h-1.25v-15.1z\"/><path d=\"m440 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m453 87.2 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/></g></g><defs><clipPath id=\"clip0_6_812\"><rect transform=\"translate(.8 .6)\" width=\"677\" height=\"364\" fill=\"#fff\"/></clipPath></defs></svg></p>\n"
|
|
6654
|
+
"content": "<p>You can follow the steps of the algorithm for the constant and the balanced scenarios using a neat visualization. Since Deutsch algorithm deals only with states with real amplitudes, you can map all states on the unit circle, and follow the state evolution through the steps.</p>\n<ol>\n<li>Start with a qubit in the $\\ket{0}$ state and apply the $H$ gate to the qubit.\n<br/></li>\n</ol>\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<p><svg width=\"660\" height=\"334\" fill=\"none\" version=\"1.1\" viewBox=\"0 0 660 334\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_4_498)\"><g clip-rule=\"evenodd\" fill-rule=\"evenodd\"><path d=\"m7.1 146c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m279 147c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke=\"#0070C0\"/><g stroke=\"#000\"><path d=\"m140 7.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/><path d=\"m1.3 147c0-3.26 2.64-5.9 5.9-5.9 3.26 0 5.9 2.64 5.9 5.9s-2.64 5.9-5.9 5.9c-3.26 0-5.9-2.64-5.9-5.9z\"/><path d=\"m140 286c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/></g></g><path d=\"m240 50.1c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m240 243c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m40.3 50.2c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\"/><path d=\"m40.3 243c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/></g><path d=\"m358 146c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m630 147c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#0070C0\"/><g stroke=\"#000\"><path d=\"m491 7.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m352 147c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m491 286c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/></g></g><path d=\"m591 50.1c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m591 243c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/><path d=\"m391 50.2c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\"/><path d=\"m391 243c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/></g></g><path d=\"m120 319c-0.941 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.863-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.701 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.73 0.432 3.59 1.29 0.869 0.857 1.3 1.99 1.3 3.4 0 1.53-0.449 2.73-1.35 3.62-0.892 0.886-2.12 1.33-3.67 1.33zm0.071-7.48c-0.67 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.05 1.26 3.05 3.79v5.63zm1.65-0.243v-2.3c0.468 0.282 0.932 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.898-0.069 1.19-0.207 0.293-0.137 0.44-0.347 0.44-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.302-0.224-0.512-0.314c-0.204-0.09-0.428-0.171-0.674-0.243-0.245-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.688-0.285-0.97-0.441-0.275-0.161-0.509-0.347-0.701-0.557-0.185-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.333-1.33 0.227-0.372 0.527-0.674 0.898-0.908 0.378-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.408 0 0.821 0.033 1.24 0.099 0.419 0.06 0.833 0.15 1.24 0.27v2.19c-0.359-0.21-0.746-0.365-1.16-0.467-0.407-0.108-0.809-0.162-1.2-0.162-0.186 0-0.362 0.018-0.53 0.054-0.162 0.03-0.305 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.107 0.207-0.107 0.333 0 0.167 0.053 0.311 0.161 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.429 0.135 0.638 0.207 0.378 0.131 0.719 0.275 1.02 0.431 0.305 0.156 0.566 0.338 0.781 0.548 0.222 0.21 0.39 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.359 1.4-0.234 0.384-0.548 0.698-0.944 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.42 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.926-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1z\" fill=\"#000\"/><path d=\"m476 307-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.143 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.617 0-1.1 0.228-1.45 0.683-0.348 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.42-1.87 0.3 0 0.534 0.036 0.701 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.485 0 0.878 0.134 1.18 0.404 0.306 0.269 0.458 0.617 0.458 1.04 0 0.431-0.152 0.785-0.458 1.06-0.299 0.276-0.692 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.64 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.778 0.584 1.31 0.584 0.647 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.095 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z\" fill=\"#000\"/><path d=\"m291 146h16.5l-0.688 0.688v-96.5l0.688 0.687h-54.6v-1.38h55.3v97.9h-17.2v-1.38zm-33-90.7-6.13-5.11 6.13-5.11c0.292-0.243 0.726-0.204 0.968 0.088 0.244 0.292 0.204 0.725-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.243 0.332 0.677 0.088 0.968-0.242 0.292-0.676 0.331-0.968 0.088z\" fill=\"#0070C0\"/><path d=\"m642 146h16.5l-0.688 0.688v-96.5l0.688 0.687h-54.6v-1.38h55.3v97.9h-17.2v-1.38zm-33-90.7-6.13-5.11 6.13-5.11c0.292-0.243 0.726-0.204 0.968 0.088 0.244 0.292 0.204 0.725-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.243 0.332 0.677 0.088 0.968-0.242 0.292-0.676 0.331-0.968 0.088z\" fill=\"#0070C0\"/><g clip-rule=\"evenodd\" fill=\"#000\" fill-rule=\"evenodd\"><path d=\"m242 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m250 142c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956-0.154 0.418-0.264 0.924-0.328 1.52-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.774 0.476-1.98 0.476-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.62 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.854-2.31-0.854-4.18 0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.79 0.316-0.474 0.696-0.824 1.14-1.05 0.442-0.228 0.926-0.34 1.45-0.34z\"/><path d=\"m256 140 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.29z\"/><path d=\"m140 30.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m148 30.6h0.446c-0.033 0.519-0.049 1.24-0.049 2.16v6.92c0 0.313 0.018 0.55 0.053 0.709s0.097 0.289 0.186 0.389 0.218 0.178 0.385 0.235c0.168 0.0568 0.378 0.1 0.632 0.13 0.254 0.0296 0.589 0.05 1 0.0608v0.592h-5.99v-0.592c0.599-0.0272 1.03-0.0636 1.28-0.11 0.257-0.0458 0.453-0.115 0.588-0.207s0.234-0.222 0.296-0.389c0.062-0.168 0.093-0.44 0.093-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.075-0.1-0.186-0.15-0.332-0.15-0.173 0-0.419 0.0892-0.737 0.268-0.319 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m154 29.4 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m208 73h1.25v15.1h-1.25v-15.1z\"/><path d=\"m217 74.6h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m226 72.3 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m208 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m213 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m226 205 3.23 7.28v0.598l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m133 250h9.99v1.08h-9.99v-1.08z\"/><path d=\"m146 243h1.25v15.1h-1.25v-15.1z\"/><path d=\"m154 244h0.446c-0.033 0.518-0.049 1.24-0.049 2.16v6.92c0 0.312 0.018 0.55 0.053 0.708 0.035 0.16 0.097 0.29 0.186 0.39s0.218 0.178 0.385 0.234c0.168 0.058 0.378 0.1 0.632 0.13s0.59 0.05 1.01 0.062v0.59h-5.99v-0.59c0.599-0.028 1.03-0.064 1.28-0.11 0.257-0.046 0.453-0.114 0.588-0.206s0.234-0.222 0.296-0.39 0.093-0.44 0.093-0.818v-6.57c0-0.216-0.038-0.374-0.113-0.474-0.076-0.1-0.187-0.15-0.333-0.15-0.173 0-0.419 0.088-0.737 0.268-0.319 0.178-0.714 0.424-1.18 0.736l-0.356-0.624 3.79-2.26z\"/><path d=\"m160 243 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m28.4 147h9.99v1.08h-9.99v-1.08z\"/><path d=\"m41.6 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m49.5 142c-0.373 0-0.685 0.11-0.936 0.332s-0.454 0.54-0.608 0.956c-0.154 0.418-0.263 0.924-0.328 1.52-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.824 0.833 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.696-0.824 1.14-1.05 0.443-0.228 0.927-0.34 1.45-0.34z\"/><path d=\"m55.8 140 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.29z\"/><path d=\"m57.9 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m71 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m79.9 207h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m88.4 205 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.29z\"/><path d=\"m57.2 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m70.3 72.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m74.8 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m87.7 71.8 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m592 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m600 142c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956-0.154 0.418-0.262 0.924-0.328 1.52-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.824 0.832 1.24 1.52 1.24 0.652 0 1.14-0.388 1.45-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.08-2.25-0.242-3.02-0.164-0.77-0.388-1.32-0.678-1.66-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.688c1.18 0 2.06 0.456 2.64 1.37 0.578 0.912 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.856-2.31-0.856-4.18 0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.696-0.824 1.14-1.05 0.444-0.228 0.926-0.34 1.45-0.34z\"/><path d=\"m606 140 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z\"/><path d=\"m489 30.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m498 30.6h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.016 0.55 0.052 0.709 0.034 0.159 0.098 0.289 0.186 0.389 0.09 0.1 0.218 0.178 0.386 0.235 0.166 0.0568 0.378 0.1 0.632 0.13 0.254 0.0296 0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.0272 1.03-0.0636 1.29-0.11 0.256-0.0458 0.452-0.115 0.588-0.207 0.134-0.0918 0.232-0.222 0.294-0.389 0.064-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.0892-0.738 0.268-0.318 0.178-0.712 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m504 29.4 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m558 73h1.25v15.1h-1.25v-15.1z\"/><path d=\"m567 74.6h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m575 72.3 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m558 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m563 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m575 205 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m483 250h9.99v1.08h-9.99v-1.08z\"/><path d=\"m496 243h1.25v15.1h-1.25v-15.1z\"/><path d=\"m504 244h0.446c-0.032 0.518-0.048 1.24-0.048 2.16v6.92c0 0.312 0.016 0.55 0.052 0.708 0.036 0.16 0.098 0.29 0.186 0.39 0.09 0.1 0.218 0.178 0.386 0.234 0.166 0.058 0.378 0.1 0.632 0.13s0.588 0.05 1 0.062v0.59h-5.99v-0.59c0.6-0.028 1.03-0.064 1.29-0.11 0.256-0.046 0.452-0.114 0.588-0.206 0.134-0.092 0.232-0.222 0.294-0.39 0.064-0.168 0.094-0.44 0.094-0.818v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.088-0.738 0.268-0.318 0.178-0.712 0.424-1.18 0.736l-0.358-0.624 3.79-2.26z\"/><path d=\"m510 243 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m378 147h9.99v1.08h-9.99v-1.08z\"/><path d=\"m391 141h1.25v15.1h-1.25v-15.1z\"/><path d=\"m399 142c-0.372 0-0.684 0.11-0.936 0.332s-0.454 0.54-0.608 0.956c-0.154 0.418-0.264 0.924-0.328 1.52-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.824 0.832 1.24 1.52 1.24 0.654 0 1.14-0.388 1.46-1.16 0.316-0.774 0.474-1.98 0.474-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.386-1.32-0.676-1.66c-0.29-0.334-0.638-0.502-1.05-0.502zm0.04-0.688c1.18 0 2.07 0.456 2.64 1.37 0.578 0.912 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.98-1.52 1.47-2.71 1.47-1.17 0-2.04-0.458-2.61-1.38-0.57-0.918-0.856-2.31-0.856-4.18 0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.79c0.316-0.474 0.694-0.824 1.14-1.05 0.444-0.228 0.926-0.34 1.45-0.34z\"/><path d=\"m406 140 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z\"/><path d=\"m408 212h9.99v1.08h-9.99v-1.08z\"/><path d=\"m421 206h1.25v15.1h-1.25v-15.1z\"/><path d=\"m430 207h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m438 205 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.29z\"/><path d=\"m407 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m420 72.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m425 78.8h9.99v1.08h-9.99v-1.08z\"/><path d=\"m438 71.8 3.24 7.28v0.6l-3.24 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/></g></g><defs><clipPath id=\"clip0_4_498\"><rect transform=\"translate(.6 .8)\" width=\"659\" height=\"332\" fill=\"#fff\"/></clipPath></defs></svg></p>\n<ol start=\"2\">\n<li>Apply the oracle.<br />\nHere, the difference between the two scenarios becomes noticeable. In the constant scenario, $\\ket{0}$ and $\\ket{1}$ states get the same phase (either $1$ or $-1$), so the state remains the same or acquires a global phase of $-1$, which is physically the same state. In the variable scenario, zero and one states get different phases, so the state changes!\n<br/></li>\n</ol>\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<p><svg width=\"738\" height=\"374\" fill=\"none\" version=\"1.1\" viewBox=\"0 0 738 374\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_5_635)\"><g clip-rule=\"evenodd\" fill-rule=\"evenodd\"><path d=\"m7.3 189c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\"><path d=\"m279 189c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke-width=\"1.15\"/><g stroke-width=\"1.38\"><path d=\"m140 49.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\"/><path d=\"m1.3 189c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\"/><path d=\"m140 328c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/></g></g><path d=\"m240 92.3c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" fill=\"#0070C0\"/><path d=\"m240 285c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m40.5 92.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m40.4 285c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\" fill=\"#0070C0\"/><path d=\"m358 189c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><g stroke=\"#000\"><path d=\"m630 189c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/><path d=\"m491 49.4c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\"/><path d=\"m352 189c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\"/><path d=\"m491 328c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\"/></g><path d=\"m591 92.4c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#0070C0\"/></g><path d=\"m591 285c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><path d=\"m391 92.3c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><path d=\"m392 285c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/></g><g fill=\"#0070C0\"><path d=\"m247 85.4v-15.1l-0.688 0.688h22.1l-0.687-0.688v22.1l0.687-0.688h-16.2v1.38h16.9v-23.5h-23.5v15.8h1.38zm-5.8-5.06 5.11 6.13 5.11-6.13c0.244-0.292 0.204-0.725-0.088-0.968-0.291-0.243-0.725-0.204-0.968 0.088l-4.58 5.5h1.06l-4.58-5.5c-0.243-0.292-0.677-0.331-0.968-0.088-0.292 0.243-0.332 0.677-0.088 0.968z\"/><path d=\"m199 136-105 102 0.96 0.985 105-102-0.96-0.984zm-104 95.6-0.826 7.94 7.96-0.619c0.378-0.03 0.661-0.361 0.632-0.739-0.03-0.379-0.36-0.662-0.739-0.632l-7.14 0.555 0.737 0.757 0.741-7.12c0.0392-0.378-0.235-0.716-0.613-0.755-0.378-0.04-0.716 0.235-0.755 0.612z\"/><path d=\"m603 91.6h58.4v194h-56.4v-1.37h55.8l-0.688 0.686v-193l0.688 0.688h-57.8v-1.38zm7.05 199-6.13-5.11 6.13-5.11c0.29-0.244 0.724-0.204 0.968 0.088 0.242 0.29 0.204 0.724-0.088 0.968l-5.5 4.58v-1.06l5.5 4.58c0.292 0.242 0.33 0.676 0.088 0.968-0.244 0.292-0.678 0.332-0.968 0.088z\"/><path d=\"m397 85.7v-56.4h201v56.6h-1.37v-55.9l0.686 0.688h-200l0.688-0.688v55.7h-1.38zm5.8-5.06-5.11 6.13-5.11-6.13c-0.242-0.292-0.204-0.725 0.088-0.968 0.292-0.243 0.726-0.204 0.968 0.0882l4.58 5.5h-1.06l4.58-5.5c0.242-0.292 0.676-0.331 0.968-0.0882 0.292 0.243 0.33 0.677 0.088 0.968z\"/></g><g clip-rule=\"evenodd\" fill=\"#0078D4\" fill-rule=\"evenodd\"><path d=\"m231 48.1c0.516 0 0.962 0.0422 1.34 0.126l-0.308 1.34h-0.696c-0.074-0.301-0.17-0.517-0.288-0.649-0.12-0.132-0.294-0.198-0.526-0.198-0.302 0-0.556 0.083-0.764 0.249s-0.386 0.413-0.534 0.74-0.284 0.767-0.412 1.32l-0.196 0.862h2.03l-0.174 0.799h-2.04l-1.47 6.9c-0.242 1.14-0.614 2-1.12 2.56-0.5 0.562-1.13 0.842-1.89 0.842-0.222 0-0.396-0.0132-0.522-0.0396l0.134-0.696c0.054 0.0158 0.178 0.0236 0.372 0.0236 0.238 0 0.44-0.0606 0.61-0.182 0.168-0.121 0.324-0.332 0.47-0.633 0.144-0.3 0.278-0.717 0.4-1.25l1.7-7.52h-1.34l0.118-0.546c0.354-0.0212 0.608-0.0502 0.764-0.087 0.154-0.037 0.276-0.0924 0.364-0.166 0.086-0.0738 0.16-0.17 0.22-0.289 0.062-0.119 0.138-0.336 0.234-0.653 0.28-0.949 0.71-1.66 1.29-2.14 0.582-0.477 1.32-0.716 2.23-0.716z\"/><path d=\"m250 47.3c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.41 3.53-1.23 4.88-0.822 1.34-2.01 2.22-3.55 2.62l-0.19-0.609c1.22-0.406 2.12-1.21 2.72-2.4 0.594-1.2 0.89-2.72 0.89-4.56 0-1.78-0.296-3.26-0.886-4.44s-1.51-1.97-2.74-2.38l0.214-0.609zm-10.1 0 0.214 0.609c-1.23 0.406-2.15 1.2-2.74 2.38-0.592 1.18-0.89 2.66-0.89 4.44 0 1.85 0.298 3.37 0.89 4.56 0.594 1.2 1.5 2 2.72 2.4l-0.19 0.609c-1.55-0.406-2.73-1.28-3.55-2.62-0.822-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88s2.01-2.22 3.55-2.63z\"/><path d=\"m243 51.7c0.162 0 0.306 0.0184 0.43 0.0554 0.124 0.0368 0.234 0.0936 0.328 0.17 0.096 0.0764 0.18 0.175 0.254 0.297s0.144 0.286 0.214 0.494c0.068 0.208 0.132 0.467 0.194 0.775 0.06 0.308 0.114 0.629 0.162 0.961h0.078c0.506-0.712 0.89-1.23 1.15-1.56 0.26-0.33 0.48-0.575 0.66-0.736s0.352-0.274 0.518-0.34c0.166-0.0658 0.386-0.0988 0.66-0.0988 0.248 0 0.452 0.0316 0.61 0.0948l-0.316 1.43h-0.554c-0.032-0.221-0.124-0.332-0.278-0.332-0.046 0-0.098 0.0078-0.15 0.0238-0.052 0.0158-0.118 0.05-0.194 0.103-0.076 0.0526-0.188 0.156-0.336 0.308-0.148 0.153-0.314 0.34-0.498 0.562-0.184 0.222-0.374 0.454-0.57 0.696l-0.538 0.672c0.096 0.506 0.186 0.944 0.27 1.31s0.158 0.676 0.224 0.922 0.124 0.439 0.174 0.581c0.052 0.142 0.106 0.249 0.164 0.32 0.058 0.0712 0.116 0.121 0.178 0.15 0.06 0.029 0.13 0.0434 0.208 0.0434 0.144 0 0.282-0.0552 0.416-0.166s0.328-0.361 0.582-0.751l0.514 0.34c-0.37 0.548-0.704 0.935-1 1.16-0.298 0.224-0.652 0.336-1.06 0.336-0.226 0-0.418-0.0408-0.576-0.123-0.158-0.0816-0.296-0.212-0.412-0.391-0.116-0.179-0.218-0.459-0.308-0.839-0.164-0.675-0.264-1.19-0.3-1.55h-0.08c-0.558 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759-0.348 0.278-0.514 0.344c-0.166 0.066-0.386 0.099-0.66 0.099-0.248 0-0.452-0.0316-0.61-0.095l0.316-1.43h0.554c0.032 0.221 0.124 0.332 0.278 0.332 0.072 0 0.15-0.0198 0.232-0.0594s0.2-0.134 0.352-0.285c0.154-0.15 0.364-0.386 0.634-0.708 0.268-0.322 0.658-0.804 1.17-1.45-0.08-0.417-0.16-0.817-0.246-1.2-0.084-0.385-0.17-0.744-0.26-1.08s-0.164-0.55-0.222-0.653-0.12-0.174-0.186-0.214-0.148-0.0592-0.248-0.0592c-0.112 0-0.212 0.025-0.302 0.075-0.09 0.0502-0.186 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.958-1.12 0.306-0.248 0.666-0.372 1.08-0.372z\"/><path d=\"m262 55.9h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z\"/><path d=\"m281 49.2c-0.364 0-0.668 0.108-0.914 0.324-0.244 0.216-0.442 0.527-0.592 0.933-0.15 0.406-0.258 0.901-0.32 1.48-0.064 0.583-0.096 1.24-0.096 1.97 0 1.72 0.16 2.98 0.478 3.78 0.32 0.804 0.814 1.21 1.48 1.21 0.638 0 1.11-0.378 1.42-1.14s0.462-1.93 0.462-3.52c0-1.21-0.078-2.2-0.236-2.95-0.16-0.751-0.38-1.29-0.662-1.62s-0.622-0.49-1.02-0.49zm0.04-0.672c1.15 0 2.01 0.446 2.58 1.34s0.846 2.24 0.846 4.04c0 1.87-0.3 3.28-0.904 4.24s-1.49 1.44-2.65 1.44c-1.14 0-1.99-0.448-2.54-1.34-0.556-0.897-0.834-2.26-0.834-4.08 0-0.97 0.086-1.81 0.256-2.52 0.172-0.707 0.412-1.29 0.72-1.75 0.31-0.461 0.68-0.803 1.11-1.02s0.904-0.332 1.42-0.332z\"/><path d=\"m94.3 164c0.53 0 0.986 0.043 1.37 0.13l-0.316 1.38h-0.713c-0.0756-0.308-0.174-0.53-0.296-0.665s-0.301-0.203-0.539-0.203c-0.308 0-0.569 0.085-0.782 0.256-0.213 0.17-0.396 0.422-0.547 0.758-0.151 0.334-0.292 0.786-0.422 1.35l-0.203 0.882h2.08l-0.178 0.82h-2.09l-1.51 7.07c-0.249 1.17-0.63 2.05-1.14 2.62-0.513 0.574-1.16 0.862-1.94 0.862-0.227 0-0.405-0.012-0.535-0.04l0.138-0.714c0.054 0.016 0.181 0.026 0.381 0.026 0.243 0 0.451-0.064 0.624-0.188s0.334-0.34 0.482-0.648 0.285-0.734 0.409-1.28l1.74-7.71h-1.37l0.122-0.56c0.362-0.022 0.623-0.052 0.782-0.09s0.284-0.094 0.373-0.17c0.0892-0.076 0.165-0.174 0.227-0.296 0.0622-0.12 0.142-0.344 0.239-0.668 0.286-0.972 0.728-1.7 1.33-2.19 0.597-0.489 1.36-0.734 2.28-0.734z\"/><path d=\"m113 163c1.58 0.416 2.79 1.31 3.64 2.7 0.846 1.38 1.27 3.05 1.27 5 0 1.96-0.422 3.62-1.26 5-0.843 1.37-2.06 2.27-3.64 2.69l-0.195-0.624c1.25-0.416 2.18-1.24 2.78-2.46 0.608-1.23 0.911-2.79 0.911-4.68 0-1.83-0.302-3.34-0.907-4.55-0.606-1.21-1.54-2.02-2.81-2.44l0.219-0.624zm-10.3 0 0.219 0.624c-1.26 0.416-2.2 1.23-2.81 2.44-0.608 1.21-0.912 2.73-0.912 4.55 0 1.89 0.304 3.45 0.912 4.68 0.608 1.23 1.54 2.05 2.78 2.46l-0.194 0.624c-1.58-0.416-2.8-1.31-3.64-2.69-0.843-1.38-1.26-3.04-1.26-5 0-1.95 0.423-3.62 1.27-5 0.846-1.38 2.06-2.28 3.64-2.7z\"/><path d=\"m106 168c0.168 0 0.315 0.02 0.442 0.058s0.239 0.096 0.336 0.174c0.098 0.078 0.184 0.18 0.26 0.304 0.075 0.124 0.148 0.292 0.219 0.506 0.07 0.214 0.136 0.478 0.198 0.794s0.118 0.646 0.166 0.986h0.081c0.519-0.73 0.912-1.26 1.18-1.6 0.267-0.338 0.493-0.588 0.677-0.754 0.183-0.164 0.36-0.28 0.53-0.348 0.171-0.068 0.396-0.1 0.677-0.1 0.254 0 0.462 0.032 0.624 0.096l-0.324 1.47h-0.567c-0.033-0.228-0.127-0.342-0.284-0.342-0.049 0-0.1 0.01-0.154 0.026s-0.12 0.05-0.199 0.104c-0.078 0.054-0.193 0.16-0.344 0.316-0.151 0.158-0.322 0.35-0.511 0.576-0.189 0.228-0.383 0.464-0.583 0.714l-0.551 0.688c0.097 0.52 0.189 0.968 0.275 1.35 0.087 0.378 0.164 0.694 0.231 0.944 0.068 0.252 0.127 0.45 0.178 0.596 0.052 0.146 0.107 0.256 0.167 0.328 0.059 0.074 0.12 0.124 0.182 0.154s0.134 0.044 0.215 0.044c0.146 0 0.288-0.056 0.425-0.17 0.138-0.112 0.337-0.37 0.596-0.77l0.527 0.35c-0.378 0.562-0.72 0.956-1.02 1.19-0.306 0.23-0.669 0.346-1.09 0.346-0.232 0-0.429-0.042-0.591-0.126s-0.303-0.218-0.422-0.402-0.224-0.47-0.316-0.858c-0.167-0.692-0.27-1.22-0.308-1.59h-0.081c-0.573 0.806-0.998 1.38-1.28 1.73-0.278 0.352-0.507 0.612-0.689 0.78-0.181 0.166-0.356 0.284-0.526 0.352-0.171 0.068-0.396 0.102-0.677 0.102-0.254 0-0.462-0.034-0.624-0.098l0.324-1.47h0.567c0.033 0.228 0.127 0.342 0.284 0.342 0.076 0 0.155-0.022 0.239-0.062s0.204-0.138 0.361-0.292 0.373-0.396 0.648-0.724c0.276-0.33 0.676-0.824 1.2-1.48-0.081-0.428-0.165-0.838-0.251-1.23-0.087-0.394-0.176-0.762-0.268-1.1-0.092-0.342-0.167-0.564-0.227-0.67-0.059-0.104-0.123-0.178-0.19-0.218-0.068-0.04-0.153-0.06-0.256-0.06-0.113 0-0.216 0.024-0.308 0.076s-0.191 0.14-0.3 0.268c-0.108 0.126-0.251 0.326-0.429 0.596l-0.527-0.35c0.34-0.512 0.667-0.896 0.981-1.15 0.313-0.254 0.683-0.382 1.11-0.382z\"/><path d=\"m125 172h9.99v1.08h-9.99v-1.08zm0-3.36h9.99v1.08h-9.99v-1.08z\"/><path d=\"m146 164h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.052 0.71 0.036 0.158 0.098 0.288 0.186 0.388 0.09 0.1 0.218 0.178 0.386 0.236 0.168 0.056 0.378 0.1 0.632 0.128 0.254 0.03 0.588 0.05 1 0.062v0.592h-5.99v-0.592c0.6-0.028 1.03-0.064 1.29-0.11s0.452-0.114 0.588-0.206c0.134-0.092 0.234-0.222 0.296-0.39 0.062-0.166 0.092-0.44 0.092-0.818v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.09-0.736 0.268-0.32 0.178-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m676 183c0.516 0 0.962 0.044 1.34 0.128l-0.308 1.34h-0.696c-0.074-0.3-0.17-0.516-0.288-0.648-0.12-0.132-0.294-0.198-0.528-0.198-0.3 0-0.554 0.082-0.762 0.248-0.208 0.168-0.386 0.414-0.534 0.74-0.148 0.328-0.286 0.768-0.412 1.32l-0.198 0.862h2.03l-0.174 0.798h-2.04l-1.47 6.9c-0.244 1.14-0.614 2-1.12 2.56-0.5 0.56-1.13 0.842-1.89 0.842-0.222 0-0.396-0.014-0.522-0.04l0.134-0.696c0.052 0.016 0.176 0.024 0.372 0.024 0.238 0 0.44-0.06 0.608-0.182 0.17-0.122 0.326-0.332 0.472-0.632 0.144-0.302 0.278-0.718 0.398-1.25l1.7-7.52h-1.34l0.12-0.546c0.352-0.02 0.608-0.05 0.762-0.086 0.156-0.038 0.278-0.092 0.364-0.166 0.088-0.074 0.162-0.17 0.222-0.288 0.06-0.12 0.138-0.338 0.234-0.654 0.278-0.948 0.71-1.66 1.29-2.14 0.584-0.476 1.33-0.716 2.23-0.716z\"/><path d=\"m694 182c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.412 3.53-1.23 4.88s-2.01 2.22-3.55 2.62l-0.19-0.608c1.22-0.406 2.12-1.21 2.72-2.41 0.594-1.2 0.89-2.72 0.89-4.56 0-1.78-0.296-3.26-0.886-4.44-0.59-1.18-1.51-1.97-2.74-2.38l0.212-0.608zm-10.1 0 0.212 0.608c-1.23 0.406-2.15 1.2-2.74 2.38-0.594 1.18-0.89 2.66-0.89 4.44 0 1.85 0.296 3.37 0.89 4.56 0.594 1.2 1.5 2 2.72 2.41l-0.19 0.608c-1.55-0.406-2.73-1.28-3.55-2.62-0.824-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88 0.824-1.35 2.01-2.22 3.55-2.63z\"/><path d=\"m688 187c0.164 0 0.308 0.018 0.432 0.054 0.124 0.038 0.234 0.094 0.328 0.17 0.096 0.078 0.18 0.176 0.254 0.298 0.074 0.12 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.466 0.194 0.774 0.062 0.31 0.116 0.63 0.162 0.962h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.576 0.662-0.736 0.178-0.16 0.352-0.274 0.518-0.34s0.386-0.098 0.66-0.098c0.248 0 0.45 0.03 0.61 0.094l-0.318 1.43h-0.554c-0.03-0.222-0.122-0.332-0.276-0.332-0.048 0-0.098 8e-3 -0.15 0.024s-0.118 0.05-0.194 0.102-0.188 0.156-0.336 0.308c-0.148 0.154-0.314 0.34-0.498 0.562-0.186 0.222-0.374 0.454-0.57 0.696l-0.538 0.672c0.094 0.506 0.184 0.944 0.27 1.31 0.084 0.368 0.158 0.676 0.224 0.922 0.066 0.244 0.124 0.438 0.174 0.58 0.05 0.144 0.104 0.25 0.162 0.322 0.058 0.07 0.118 0.12 0.178 0.15 0.062 0.028 0.132 0.042 0.21 0.042 0.142 0 0.282-0.054 0.416-0.166 0.134-0.11 0.328-0.36 0.58-0.75l0.516 0.34c-0.37 0.548-0.704 0.934-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.04-0.576-0.122-0.16-0.082-0.296-0.212-0.412-0.392s-0.22-0.458-0.308-0.838c-0.164-0.676-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.76c-0.178 0.164-0.348 0.278-0.514 0.344s-0.388 0.098-0.662 0.098c-0.248 0-0.45-0.032-0.608-0.094l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.02 0.234-0.06 0.082-0.038 0.2-0.134 0.352-0.284s0.364-0.386 0.632-0.708c0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.416-0.162-0.816-0.246-1.2-0.084-0.384-0.172-0.744-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.652-0.058-0.104-0.12-0.174-0.186-0.214s-0.15-0.06-0.25-0.06c-0.11 0-0.21 0.026-0.3 0.076s-0.188 0.138-0.292 0.262c-0.106 0.122-0.246 0.316-0.42 0.58l-0.514-0.34c0.332-0.5 0.652-0.876 0.958-1.12 0.304-0.248 0.666-0.372 1.08-0.372z\"/><path d=\"m706 191h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z\"/><path d=\"m725 187c0.162 0 0.306 0.018 0.43 0.054 0.124 0.038 0.234 0.094 0.328 0.17 0.096 0.078 0.18 0.176 0.254 0.298 0.074 0.12 0.144 0.286 0.214 0.494 0.068 0.208 0.132 0.466 0.194 0.774 0.06 0.31 0.114 0.63 0.162 0.962h0.078c0.506-0.712 0.89-1.23 1.15-1.56 0.26-0.33 0.48-0.576 0.66-0.736s0.352-0.274 0.518-0.34 0.386-0.098 0.66-0.098c0.248 0 0.452 0.03 0.61 0.094l-0.316 1.43h-0.554c-0.032-0.222-0.124-0.332-0.278-0.332-0.046 0-0.096 8e-3 -0.15 0.024-0.052 0.016-0.118 0.05-0.194 0.102s-0.188 0.156-0.336 0.308c-0.148 0.154-0.314 0.34-0.498 0.562s-0.374 0.454-0.57 0.696l-0.538 0.672c0.096 0.506 0.186 0.944 0.27 1.31 0.084 0.368 0.16 0.676 0.224 0.922 0.066 0.244 0.124 0.438 0.174 0.58 0.052 0.144 0.106 0.25 0.164 0.322 0.058 0.07 0.116 0.12 0.178 0.15 0.06 0.028 0.13 0.042 0.208 0.042 0.144 0 0.282-0.054 0.416-0.166 0.134-0.11 0.328-0.36 0.582-0.75l0.514 0.34c-0.37 0.548-0.704 0.934-1 1.16s-0.652 0.336-1.06 0.336c-0.228 0-0.42-0.04-0.578-0.122s-0.296-0.212-0.412-0.392-0.218-0.458-0.308-0.838c-0.164-0.676-0.264-1.19-0.3-1.55h-0.08c-0.558 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.76-0.348 0.278-0.514 0.344-0.386 0.098-0.66 0.098c-0.248 0-0.452-0.032-0.61-0.094l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.278 0.332 0.072 0 0.15-0.02 0.232-0.06 0.082-0.038 0.2-0.134 0.352-0.284 0.154-0.15 0.364-0.386 0.634-0.708 0.268-0.322 0.658-0.804 1.17-1.45-0.08-0.416-0.16-0.816-0.246-1.2-0.084-0.384-0.17-0.744-0.26-1.08s-0.164-0.55-0.222-0.652c-0.058-0.104-0.12-0.174-0.186-0.214s-0.148-0.06-0.248-0.06c-0.112 0-0.212 0.026-0.302 0.076s-0.186 0.138-0.292 0.262c-0.106 0.122-0.246 0.316-0.42 0.58l-0.514-0.34c0.332-0.5 0.652-0.876 0.958-1.12 0.306-0.248 0.666-0.372 1.08-0.372z\"/><path d=\"m463 7.88c0.516 0 0.962 0.0422 1.34 0.127l-0.308 1.34h-0.696c-0.074-0.301-0.17-0.517-0.288-0.649-0.12-0.132-0.294-0.198-0.526-0.198-0.302 0-0.556 0.083-0.764 0.249-0.208 0.166-0.386 0.413-0.534 0.74-0.148 0.327-0.284 0.767-0.412 1.32l-0.198 0.862h2.03l-0.174 0.799h-2.04l-1.47 6.9c-0.244 1.14-0.614 2-1.12 2.56-0.5 0.562-1.13 0.842-1.89 0.842-0.222 0-0.396-0.0132-0.522-0.0394l0.134-0.696c0.052 0.0158 0.176 0.0238 0.372 0.0238 0.238 0 0.44-0.0606 0.608-0.182 0.17-0.121 0.326-0.332 0.472-0.633 0.144-0.301 0.278-0.717 0.4-1.25l1.7-7.52h-1.34l0.12-0.546c0.352-0.021 0.608-0.05 0.762-0.087 0.156-0.0368 0.278-0.0922 0.364-0.166 0.088-0.074 0.162-0.17 0.222-0.289s0.138-0.336 0.234-0.653c0.28-0.949 0.71-1.66 1.29-2.14 0.584-0.477 1.33-0.716 2.23-0.716z\"/><path d=\"m482 7.11c1.54 0.406 2.72 1.28 3.55 2.63 0.826 1.35 1.24 2.97 1.24 4.88 0 1.91-0.41 3.53-1.23 4.88-0.822 1.34-2.01 2.22-3.55 2.62l-0.19-0.609c1.22-0.406 2.12-1.21 2.72-2.4s0.89-2.72 0.89-4.56c0-1.78-0.296-3.26-0.886-4.44-0.59-1.18-1.51-1.97-2.74-2.38l0.212-0.609zm-10.1 0 0.212 0.609c-1.23 0.406-2.15 1.2-2.74 2.38-0.594 1.18-0.89 2.66-0.89 4.44 0 1.85 0.296 3.37 0.89 4.56s1.5 2 2.72 2.4l-0.19 0.609c-1.55-0.406-2.73-1.28-3.55-2.62-0.824-1.34-1.23-2.97-1.23-4.88 0-1.9 0.412-3.53 1.24-4.88 0.824-1.35 2.01-2.22 3.55-2.63z\"/><path d=\"m475 11.5c0.164 0 0.308 0.0184 0.432 0.0554s0.234 0.0936 0.328 0.17c0.096 0.0766 0.18 0.175 0.254 0.297 0.074 0.121 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.467 0.194 0.775 0.062 0.309 0.116 0.629 0.162 0.961h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.575 0.662-0.736 0.178-0.161 0.352-0.274 0.518-0.34 0.166-0.066 0.386-0.099 0.66-0.099 0.248 0 0.45 0.0318 0.61 0.095l-0.318 1.43h-0.552c-0.032-0.222-0.124-0.332-0.278-0.332-0.048 0-0.098 8e-3 -0.15 0.0238s-0.118 0.0502-0.194 0.103c-0.076 0.0528-0.188 0.156-0.336 0.309-0.148 0.153-0.314 0.34-0.498 0.562-0.186 0.221-0.374 0.453-0.57 0.696l-0.538 0.672c0.096 0.506 0.184 0.944 0.27 1.31 0.084 0.369 0.158 0.676 0.224 0.921s0.124 0.439 0.174 0.581 0.104 0.249 0.162 0.32 0.118 0.121 0.178 0.15c0.062 0.029 0.132 0.0434 0.21 0.0434 0.142 0 0.282-0.0554 0.416-0.166 0.134-0.111 0.328-0.361 0.58-0.751l0.516 0.34c-0.37 0.548-0.704 0.935-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.0408-0.576-0.123-0.16-0.0818-0.296-0.212-0.412-0.392-0.116-0.179-0.22-0.459-0.308-0.838-0.164-0.675-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759c-0.178 0.163-0.348 0.278-0.514 0.344s-0.388 0.0988-0.662 0.0988c-0.248 0-0.45-0.0316-0.608-0.0948l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.0198 0.234-0.0592 0.082-0.0396 0.2-0.135 0.352-0.285 0.152-0.15 0.364-0.386 0.632-0.708 0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.417-0.162-0.817-0.246-1.2-0.084-0.385-0.172-0.743-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.653-0.058-0.103-0.12-0.174-0.186-0.214-0.066-0.0396-0.15-0.0594-0.25-0.0594-0.11 0-0.21 0.025-0.3 0.0752-0.09 0.05-0.188 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.958-1.12s0.666-0.372 1.08-0.372z\"/><path d=\"m494 15.7h9.75v1.05h-9.75v-1.05zm0-3.28h9.75v1.05h-9.75v-1.05z\"/><path d=\"m510 14h9.74v5.58h-1.12v-4.54h-8.62v-1.04z\"/><path d=\"m524 11.5c0.164 0 0.308 0.0184 0.432 0.0554s0.234 0.0936 0.328 0.17c0.094 0.0766 0.18 0.175 0.254 0.297 0.072 0.121 0.144 0.286 0.212 0.494 0.07 0.208 0.134 0.467 0.194 0.775 0.062 0.309 0.116 0.629 0.162 0.961h0.08c0.506-0.712 0.89-1.23 1.15-1.56 0.262-0.33 0.482-0.575 0.662-0.736 0.178-0.161 0.352-0.274 0.518-0.34 0.166-0.066 0.386-0.099 0.66-0.099 0.248 0 0.45 0.0318 0.608 0.095l-0.316 1.43h-0.554c-0.03-0.222-0.124-0.332-0.276-0.332-0.048 0-0.098 8e-3 -0.15 0.0238-0.054 0.0158-0.118 0.0502-0.194 0.103-0.076 0.0528-0.188 0.156-0.336 0.309-0.148 0.153-0.314 0.34-0.498 0.562-0.186 0.221-0.376 0.453-0.57 0.696l-0.538 0.672c0.094 0.506 0.184 0.944 0.268 1.31 0.086 0.369 0.16 0.676 0.226 0.921s0.124 0.439 0.174 0.581 0.104 0.249 0.162 0.32 0.118 0.121 0.178 0.15c0.062 0.029 0.13 0.0434 0.21 0.0434 0.142 0 0.28-0.0554 0.416-0.166 0.134-0.111 0.328-0.361 0.58-0.751l0.514 0.34c-0.368 0.548-0.702 0.935-1 1.16s-0.652 0.336-1.06 0.336c-0.226 0-0.418-0.0408-0.578-0.123-0.158-0.0818-0.294-0.212-0.41-0.392-0.116-0.179-0.22-0.459-0.308-0.838-0.164-0.675-0.264-1.19-0.302-1.55h-0.078c-0.56 0.786-0.974 1.35-1.25 1.69s-0.496 0.596-0.672 0.759c-0.178 0.163-0.348 0.278-0.514 0.344-0.168 0.066-0.388 0.0988-0.662 0.0988-0.248 0-0.45-0.0316-0.608-0.0948l0.316-1.43h0.554c0.032 0.222 0.124 0.332 0.276 0.332 0.074 0 0.152-0.0198 0.234-0.0592 0.082-0.0396 0.198-0.135 0.352-0.285 0.152-0.15 0.364-0.386 0.632-0.708 0.27-0.322 0.66-0.804 1.17-1.45-0.08-0.417-0.162-0.817-0.246-1.2-0.084-0.385-0.172-0.743-0.26-1.08-0.09-0.332-0.164-0.55-0.222-0.653-0.058-0.103-0.12-0.174-0.186-0.214-0.066-0.0396-0.15-0.0594-0.25-0.0594-0.11 0-0.21 0.025-0.3 0.0752-0.09 0.05-0.188 0.137-0.292 0.261-0.106 0.124-0.246 0.318-0.42 0.581l-0.514-0.34c0.332-0.501 0.652-0.875 0.956-1.12 0.306-0.248 0.668-0.372 1.08-0.372z\"/></g><path d=\"m121 360c-0.941 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.863-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.701 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.73 0.432 3.59 1.29 0.869 0.857 1.3 1.99 1.3 3.4 0 1.53-0.449 2.73-1.35 3.62-0.892 0.886-2.12 1.33-3.67 1.33zm0.071-7.48c-0.67 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.676-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-0.243v-2.3c0.467 0.282 0.932 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.898-0.069 1.19-0.207 0.293-0.137 0.44-0.347 0.44-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.302-0.224-0.512-0.314c-0.204-0.09-0.428-0.171-0.674-0.243-0.245-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.688-0.285-0.97-0.441-0.275-0.161-0.509-0.347-0.701-0.557-0.185-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.333-1.33 0.227-0.372 0.527-0.674 0.898-0.908 0.377-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.408 0 0.821 0.033 1.24 0.099 0.419 0.06 0.833 0.15 1.24 0.27v2.19c-0.359-0.21-0.746-0.365-1.16-0.467-0.407-0.108-0.809-0.162-1.2-0.162-0.186 0-0.362 0.018-0.53 0.054-0.162 0.03-0.305 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.108 0.207-0.108 0.333 0 0.167 0.054 0.311 0.162 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.429 0.135 0.638 0.207 0.378 0.131 0.719 0.275 1.02 0.431 0.305 0.156 0.566 0.338 0.781 0.548 0.222 0.21 0.39 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.359 1.4-0.234 0.384-0.548 0.698-0.944 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.51-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.967-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.035c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.3 0 0.608-0.086 0.925-0.26v2.1z\" fill=\"#000\"/><path d=\"m477 347-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.143 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.534 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.617 0-1.1 0.228-1.45 0.683-0.347 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.43-1.87 0.299 0 0.533 0.036 0.7 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.486 0 0.878 0.134 1.18 0.404 0.306 0.269 0.459 0.617 0.459 1.04 0 0.431-0.153 0.785-0.459 1.06-0.299 0.276-0.691 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.641 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.778 0.584 1.31 0.584 0.646 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.096 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z\" fill=\"#000\"/><g clip-rule=\"evenodd\" fill=\"#000\" fill-rule=\"evenodd\"><path d=\"m242 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m250 184c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.826 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.46-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m256 182 3.24 7.28v0.6l-3.24 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m139 72.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m148 72.6h0.444c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.052 0.709 0.036 0.159 0.098 0.289 0.188 0.389 0.088 0.1 0.216 0.178 0.384 0.235 0.168 0.0566 0.378 0.0998 0.632 0.13s0.59 0.05 1.01 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.28-0.109 0.258-0.046 0.454-0.115 0.588-0.207 0.136-0.0918 0.234-0.221 0.296-0.389 0.062-0.167 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.076-0.0998-0.186-0.15-0.332-0.15-0.174 0-0.42 0.089-0.738 0.267-0.32 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m153 71.5 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m208 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m217 117h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m225 114 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m208 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m212 255h9.99v1.08h-9.99v-1.08z\"/><path d=\"m225 247 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m132 292h9.99v1.08h-9.99v-1.08z\"/><path d=\"m145 285h1.25v15.1h-1.25v-15.1z\"/><path d=\"m154 286h0.444c-0.032 0.52-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39 0.088 0.1 0.216 0.178 0.384 0.234 0.168 0.058 0.378 0.1 0.632 0.13s0.59 0.05 1.01 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.28-0.108 0.258-0.046 0.454-0.116 0.588-0.208 0.136-0.092 0.234-0.22 0.296-0.388s0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.088-0.738 0.266-0.318 0.18-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m159 285 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m27.9 189h9.99v1.08h-9.99v-1.08z\"/><path d=\"m41 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m48.9 184c-0.373 0-0.685 0.11-0.936 0.332-0.251 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.826 0.833 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.443-0.228 0.927-0.342 1.45-0.342z\"/><path d=\"m55.2 182 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m57.3 254h9.99v1.08h-9.99v-1.08z\"/><path d=\"m70.4 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m79.3 250h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m87.8 247 3.23 7.28v0.6l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m56.6 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m69.8 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m74.3 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m87.1 114 3.23 7.28v0.599l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m593 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m601 184c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956s-0.262 0.924-0.328 1.52c-0.064 0.598-0.096 1.27-0.096 2.02 0 1.76 0.162 3.05 0.49 3.88 0.326 0.826 0.834 1.24 1.52 1.24 0.654 0 1.14-0.388 1.45-1.16s0.474-1.98 0.474-3.6c0-1.24-0.08-2.25-0.242-3.02s-0.388-1.32-0.678-1.66c-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.93 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.444-0.228 0.928-0.342 1.45-0.342z\"/><path d=\"m607 182 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m490 72.2h1.25v15.1h-1.25v-15.1z\"/><path d=\"m499 72.6h0.446c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.052 0.709 0.036 0.159 0.098 0.289 0.186 0.389 0.09 0.1 0.218 0.178 0.386 0.235 0.168 0.0566 0.378 0.0998 0.632 0.13s0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.29-0.109 0.256-0.046 0.452-0.115 0.588-0.207 0.134-0.0918 0.234-0.221 0.296-0.389 0.062-0.167 0.092-0.44 0.092-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.0998-0.186-0.15-0.332-0.15-0.172 0-0.418 0.089-0.736 0.267-0.32 0.178-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m504 71.5 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m559 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m567 117h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m576 114 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m559 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m563 255h9.99v1.08h-9.99v-1.08z\"/><path d=\"m576 247 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m483 292h9.99v1.08h-9.99v-1.08z\"/><path d=\"m496 285h1.25v15.1h-1.25v-15.1z\"/><path d=\"m505 286h0.446c-0.032 0.52-0.048 1.24-0.048 2.16v6.92c0 0.314 0.018 0.55 0.052 0.71 0.036 0.16 0.098 0.29 0.186 0.39 0.09 0.1 0.218 0.178 0.386 0.234 0.168 0.058 0.378 0.1 0.632 0.13s0.588 0.05 1 0.06v0.592h-5.99v-0.592c0.598-0.026 1.03-0.062 1.28-0.108s0.452-0.116 0.588-0.208c0.134-0.092 0.234-0.22 0.296-0.388s0.092-0.44 0.092-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474-0.074-0.1-0.186-0.15-0.332-0.15-0.172 0-0.418 0.088-0.736 0.266-0.32 0.18-0.714 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m510 285 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m379 189h9.99v1.08h-9.99v-1.08z\"/><path d=\"m392 183h1.25v15.1h-1.25v-15.1z\"/><path d=\"m400 184c-0.372 0-0.684 0.11-0.936 0.332-0.25 0.222-0.454 0.54-0.608 0.956s-0.262 0.924-0.328 1.52c-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.492 3.88 0.326 0.826 0.832 1.24 1.52 1.24 0.652 0 1.14-0.388 1.45-1.16s0.474-1.98 0.474-3.6c0-1.24-0.08-2.25-0.242-3.02-0.164-0.77-0.388-1.32-0.678-1.66-0.288-0.334-0.638-0.502-1.05-0.502zm0.042-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.444-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m406 182 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m408 254h9.99v1.08h-9.99v-1.08z\"/><path d=\"m421 248h1.25v15.1h-1.25v-15.1z\"/><path d=\"m430 250h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m439 247 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m408 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m421 115h1.25v15.1h-1.25v-15.1z\"/><path d=\"m425 121h9.99v1.08h-9.99v-1.08z\"/><path d=\"m438 114 3.23 7.28v0.599l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/></g></g><defs><clipPath id=\"clip0_5_635\"><rect transform=\"translate(.6 .2)\" width=\"737\" height=\"374\" fill=\"#fff\"/></clipPath></defs></svg></p>\n<ol start=\"3\">\n<li>Apply the $H$ gate to the qubit again.\nNow, you get the $\\ket{0}$ state for both constant scenarios and the $\\ket{1}$ state for both variable scenarios!\n<br/></li>\n</ol>\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<p><svg width=\"679\" height=\"365\" fill=\"none\" version=\"1.1\" viewBox=\"0 0 679 365\" xmlns=\"http://www.w3.org/2000/svg\"><g clip-path=\"url(#clip0_6_812)\"><g clip-rule=\"evenodd\" fill-rule=\"evenodd\"><path d=\"m24.1 163c0-76.8 62.3-139 139-139 76.8 0 139 62.3 139 139 0 76.8-62.3 139-139 139-76.8 0-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m296 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#0070C0\"/><path d=\"m157 23.8c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m18 163c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m157 302c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#000\"/><path d=\"m257 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" stroke=\"#0070C0\"/><path d=\"m257 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke=\"#000\"/><path d=\"m57.3 66.6c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9 0 3.26-2.69 5.9-6 5.9-3.31 0-6-2.64-6-5.9z\" stroke=\"#000\"/><path d=\"m57.3 260c0-3.26 2.69-5.9 6-5.9 3.31 0 6 2.64 6 5.9s-2.69 5.9-6 5.9c-3.31 0-6-2.64-6-5.9z\" stroke=\"#0070C0\"/></g><path d=\"m375 163c0-76.8 62.2-139 139-139s139 62.3 139 139c0 76.8-62.2 139-139 139s-139-62.3-139-139z\" stroke=\"#747474\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m647 163c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m508 23.7c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" fill=\"#0070C0\"/><path d=\"m369 163c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" fill=\"#fff\" stroke=\"#000\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"/><path d=\"m508 302c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" fill=\"#0070C0\"/><g fill=\"#fff\" stroke-miterlimit=\"8\" stroke-width=\"1.38\"><path d=\"m608 66.6c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9c0 3.26-2.69 5.9-6 5.9s-6-2.64-6-5.9z\" stroke=\"#000\"/><path d=\"m608 260c0-3.26 2.69-5.9 6-5.9s6 2.64 6 5.9-2.69 5.9-6 5.9-6-2.64-6-5.9z\" stroke=\"#0070C0\"/><path d=\"m408 66.6c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9c0 3.26-2.64 5.9-5.9 5.9s-5.9-2.64-5.9-5.9z\" stroke=\"#0070C0\"/><path d=\"m408 260c0-3.26 2.64-5.9 5.9-5.9s5.9 2.64 5.9 5.9-2.64 5.9-5.9 5.9-5.9-2.64-5.9-5.9z\" stroke=\"#000\"/></g></g><g fill=\"#0070C0\"><path d=\"m309 162h15.1l-0.688 0.688v-96.5l0.688 0.688h-55.3v-1.38h56v97.9h-15.8v-1.38zm5.06 5.8-6.13-5.11 6.13-5.11c0.292-0.242 0.726-0.202 0.968 0.088 0.244 0.292 0.204 0.726-0.088 0.97l-5.5 4.58v-1.06l5.5 4.58c0.292 0.242 0.332 0.676 0.088 0.968-0.242 0.292-0.676 0.33-0.968 0.088z\"/><path d=\"m17 164h-15.4l0.688-0.688v96.5l-0.688-0.688h55.7v1.38h-56.3v-97.9h16.1v1.38zm-5.06-5.8 6.13 5.11-6.13 5.11c-0.292 0.242-0.725 0.204-0.968-0.088-0.243-0.292-0.204-0.726 0.088-0.968l5.5-4.58v1.06l-5.5-4.58c-0.292-0.242-0.331-0.676-0.088-0.968 0.243-0.292 0.677-0.33 0.968-0.088z\"/><path d=\"m620 259h57.4l-0.688 0.686v-258l0.688 0.687h-163l0.688-0.687v15.4h-1.38v-16.1h165v260h-58.1v-1.37zm-101-247-5.11 6.13-5.11-6.13c-0.242-0.292-0.204-0.725 0.088-0.968 0.292-0.243 0.726-0.204 0.968 0.088l4.58 5.5h-1.06l4.58-5.5c0.242-0.292 0.676-0.331 0.968-0.088 0.292 0.243 0.33 0.677 0.088 0.968z\"/><path d=\"m408 67.4h-51.1l0.686-0.688v258l-0.686-0.688h157l-0.686 0.688v-15.4h1.37v16.1h-158v-259h51.8v1.38zm101 247 5.11-6.13 5.11 6.13c0.244 0.292 0.204 0.726-0.088 0.97-0.292 0.242-0.724 0.202-0.968-0.088l-4.58-5.5h1.06l-4.58 5.5c-0.244 0.29-0.676 0.33-0.968 0.088-0.292-0.244-0.332-0.678-0.088-0.97z\"/></g><path d=\"m135 350c-0.94 0.455-2.17 0.683-3.68 0.683-1.98 0-3.53-0.581-4.66-1.74s-1.7-2.71-1.7-4.64c0-2.06 0.635-3.73 1.9-5.01 1.28-1.28 2.93-1.92 4.96-1.92 1.26 0 2.32 0.159 3.18 0.476v2.79c-0.862-0.515-1.84-0.773-2.95-0.773-1.21 0-2.19 0.381-2.93 1.14-0.743 0.761-1.11 1.79-1.11 3.09 0 1.25 0.35 2.24 1.05 2.98 0.7 0.737 1.64 1.1 2.83 1.1 1.13 0 2.17-0.276 3.11-0.827v2.65zm6.35 0.683c-1.53 0-2.74-0.429-3.62-1.28-0.875-0.863-1.31-2.03-1.31-3.5 0-1.52 0.455-2.71 1.37-3.57 0.91-0.862 2.14-1.29 3.69-1.29 1.53 0 2.72 0.432 3.59 1.29 0.868 0.857 1.3 1.99 1.3 3.4 0 1.53-0.45 2.73-1.35 3.62-0.893 0.886-2.12 1.33-3.68 1.33zm0.072-7.48c-0.671 0-1.19 0.23-1.56 0.691-0.371 0.462-0.557 1.11-0.557 1.96 0 1.77 0.713 2.65 2.14 2.65 1.36 0 2.04-0.907 2.04-2.72 0-1.72-0.686-2.58-2.06-2.58zm15.7 7.25h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.492 0-0.896 0.188-1.21 0.566-0.318 0.377-0.477 0.856-0.477 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm1.65-0.243v-2.3c0.467 0.282 0.931 0.492 1.39 0.629 0.467 0.138 0.907 0.207 1.32 0.207 0.503 0 0.899-0.069 1.19-0.207 0.294-0.137 0.441-0.347 0.441-0.629 0-0.179-0.066-0.329-0.198-0.449s-0.303-0.224-0.512-0.314c-0.204-0.09-0.429-0.171-0.674-0.243-0.246-0.072-0.482-0.153-0.71-0.242-0.365-0.138-0.689-0.285-0.97-0.441-0.276-0.161-0.509-0.347-0.701-0.557-0.186-0.209-0.329-0.452-0.431-0.727-0.096-0.276-0.144-0.602-0.144-0.98 0-0.515 0.111-0.958 0.332-1.33 0.228-0.372 0.528-0.674 0.899-0.908 0.377-0.239 0.806-0.413 1.28-0.521 0.485-0.114 0.988-0.171 1.51-0.171 0.407 0 0.821 0.033 1.24 0.099 0.419 0.06 0.832 0.15 1.24 0.27v2.19c-0.36-0.21-0.746-0.365-1.16-0.467-0.408-0.108-0.809-0.162-1.2-0.162-0.186 0-0.363 0.018-0.53 0.054-0.162 0.03-0.306 0.078-0.431 0.144-0.126 0.06-0.225 0.14-0.297 0.242-0.072 0.096-0.108 0.207-0.108 0.333 0 0.167 0.054 0.311 0.162 0.431s0.249 0.225 0.422 0.314c0.174 0.084 0.366 0.162 0.575 0.234 0.216 0.066 0.428 0.135 0.638 0.207 0.377 0.131 0.719 0.275 1.02 0.431 0.306 0.156 0.566 0.338 0.782 0.548 0.222 0.21 0.389 0.455 0.503 0.737 0.12 0.281 0.18 0.617 0.18 1.01 0 0.545-0.12 1.01-0.36 1.4-0.233 0.384-0.548 0.698-0.943 0.944-0.389 0.239-0.841 0.413-1.36 0.521-0.509 0.114-1.04 0.171-1.59 0.171-1.01 0-1.95-0.156-2.81-0.468zm14.3 0.135c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.299 0 0.608-0.086 0.925-0.26v2.1zm9.26 0.108h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.893 0-1.6-0.252-2.11-0.755-0.509-0.509-0.763-1.19-0.763-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.923 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.967-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm13.8 3.74h-2.83v-5.11c0-1.43-0.509-2.14-1.53-2.14-0.491 0-0.895 0.188-1.21 0.566-0.317 0.377-0.476 0.856-0.476 1.44v5.25h-2.84v-9.2h2.84v1.46h0.036c0.677-1.12 1.66-1.68 2.96-1.68 2.04 0 3.06 1.26 3.06 3.79v5.63zm7.82-0.108c-0.419 0.222-1.05 0.333-1.9 0.333-2 0-3-1.04-3-3.12v-4.21h-1.49v-2.09h1.49v-1.99l2.83-0.808v2.79h2.07v2.09h-2.07v3.72c0 0.958 0.38 1.44 1.14 1.44 0.299 0 0.608-0.086 0.925-0.26v2.1z\" fill=\"#000\"/><path d=\"m491 338-4.44 12.9h-3.29l-4.38-12.9h3.13l2.69 8.97c0.144 0.485 0.23 0.913 0.26 1.28h0.054c0.042-0.402 0.135-0.842 0.279-1.32l2.67-8.93h3.04zm7.54 12.9h-2.69v-1.32h-0.036c-0.616 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.395-0.204 0.934-0.383 1.62-0.539 0.689-0.156 1.32-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.11 0.59 0.332 0.8 0.228 0.203 0.533 0.305 0.916 0.305 0.534 0 0.968-0.183 1.3-0.548 0.336-0.371 0.503-0.838 0.503-1.4zm10.9-2.9c-0.341-0.186-0.739-0.279-1.2-0.279-0.616 0-1.1 0.228-1.45 0.683-0.347 0.449-0.521 1.06-0.521 1.84v4.39h-2.84v-9.2h2.84v1.71h0.036c0.449-1.25 1.26-1.87 2.43-1.87 0.299 0 0.533 0.036 0.7 0.108v2.62zm2.84-4.02c-0.479 0-0.871-0.141-1.18-0.423-0.305-0.287-0.458-0.638-0.458-1.05 0-0.425 0.153-0.773 0.458-1.04 0.306-0.27 0.698-0.404 1.18-0.404 0.486 0 0.878 0.134 1.18 0.404 0.306 0.269 0.459 0.617 0.459 1.04 0 0.431-0.153 0.785-0.459 1.06-0.299 0.276-0.691 0.414-1.18 0.414zm1.4 10.7h-2.84v-9.2h2.84v9.2zm10 0h-2.69v-1.32h-0.036c-0.617 1.03-1.53 1.55-2.74 1.55-0.892 0-1.6-0.252-2.11-0.755-0.509-0.509-0.764-1.19-0.764-2.03 0-1.78 1.06-2.82 3.17-3.09l2.5-0.333c0-1.01-0.545-1.51-1.64-1.51-1.1 0-2.14 0.326-3.13 0.979v-2.14c0.396-0.204 0.935-0.383 1.62-0.539 0.688-0.156 1.31-0.234 1.88-0.234 2.62 0 3.94 1.31 3.94 3.93v5.5zm-2.67-3.74v-0.62l-1.67 0.215c-0.922 0.12-1.38 0.536-1.38 1.25 0 0.323 0.111 0.59 0.333 0.8 0.227 0.203 0.533 0.305 0.916 0.305 0.533 0 0.968-0.183 1.3-0.548 0.335-0.371 0.503-0.838 0.503-1.4zm7.79 2.67h-0.036v1.07h-2.84v-13.6h2.84v5.8h0.036c0.7-1.07 1.7-1.61 2.99-1.61 1.19 0 2.1 0.408 2.74 1.22 0.641 0.815 0.961 1.93 0.961 3.34 0 1.53-0.374 2.76-1.12 3.69s-1.75 1.39-3 1.39c-1.13 0-1.99-0.432-2.57-1.29zm-0.081-3.88v0.943c0 0.593 0.17 1.08 0.512 1.47 0.341 0.39 0.779 0.584 1.31 0.584 0.646 0 1.15-0.248 1.5-0.745 0.359-0.503 0.539-1.21 0.539-2.13 0-0.76-0.165-1.35-0.494-1.78-0.324-0.431-0.788-0.646-1.39-0.646-0.569 0-1.04 0.212-1.42 0.638-0.372 0.425-0.557 0.979-0.557 1.66zm11.5 4.95h-2.84v-13.6h2.84v13.6zm10.7-3.79h-6c0.096 1.34 0.937 2 2.52 2 1.01 0 1.9-0.239 2.67-0.719v2.05c-0.851 0.455-1.96 0.683-3.32 0.683-1.48 0-2.64-0.411-3.46-1.23-0.82-0.827-1.23-1.98-1.23-3.45 0-1.53 0.443-2.74 1.33-3.63 0.887-0.892 1.98-1.34 3.27-1.34 1.34 0 2.38 0.399 3.11 1.2 0.737 0.797 1.1 1.88 1.1 3.24v1.2zm-2.63-1.74c0-1.32-0.533-1.98-1.6-1.98-0.456 0-0.851 0.189-1.19 0.566-0.33 0.377-0.53 0.848-0.602 1.41h3.39z\" fill=\"#000\"/><g clip-rule=\"evenodd\" fill=\"#000\" fill-rule=\"evenodd\"><path d=\"m259 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m266 157c-0.372 0-0.684 0.11-0.936 0.332s-0.454 0.54-0.608 0.956-0.264 0.924-0.328 1.52c-0.064 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.46-1.16s0.474-1.98 0.474-3.6c0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.866 2.29 0.866 4.14 0 1.91-0.308 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.856-2.31-0.856-4.18c0-0.994 0.088-1.85 0.264-2.58s0.42-1.32 0.738-1.8c0.316-0.472 0.694-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m273 156 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m156 45.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m164 45.9h0.446c-0.032 0.519-0.05 1.24-0.05 2.16v6.92c0 0.313 0.018 0.55 0.054 0.709 0.034 0.159 0.096 0.289 0.186 0.389s0.218 0.178 0.384 0.235c0.168 0.0568 0.38 0.1 0.634 0.13 0.254 0.0298 0.588 0.05 1 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.29-0.109 0.256-0.0458 0.452-0.115 0.586-0.207 0.136-0.0918 0.234-0.222 0.296-0.389 0.062-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.0892-0.738 0.267-0.318 0.178-0.712 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m170 44.8 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m224 88.4h1.25v15.1h-1.25v-15.1z\"/><path d=\"m233 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m242 87.6 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m224 222h1.25v15.1h-1.25v-15.1z\"/><path d=\"m229 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m242 221 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m149 265h9.99v1.08h-9.99v-1.08z\"/><path d=\"m162 259h1.25v15.1h-1.25v-15.1z\"/><path d=\"m171 259h0.446c-0.032 0.52-0.05 1.24-0.05 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39s0.218 0.178 0.386 0.234c0.166 0.056 0.378 0.1 0.632 0.13s0.588 0.05 1 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.29-0.108 0.256-0.046 0.452-0.116 0.586-0.208 0.136-0.092 0.234-0.222 0.296-0.388 0.062-0.168 0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.172 0-0.418 0.088-0.738 0.266-0.318 0.178-0.712 0.424-1.18 0.738l-0.358-0.624 3.79-2.26z\"/><path d=\"m176 258 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m44.7 163h9.99v1.08h-9.99v-1.08z\"/><path d=\"m57.9 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m65.7 157c-0.373 0-0.685 0.11-0.936 0.332s-0.454 0.54-0.608 0.956-0.264 0.924-0.328 1.52c-0.0648 0.598-0.0972 1.27-0.0972 2.02 0 1.76 0.163 3.05 0.49 3.88 0.327 0.824 0.833 1.24 1.52 1.24 0.654 0 1.14-0.386 1.45-1.16 0.316-0.776 0.474-1.98 0.474-3.6 0-1.24-0.081-2.25-0.243-3.02-0.162-0.77-0.388-1.32-0.677-1.66-0.289-0.334-0.639-0.502-1.05-0.502zm0.0406-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.867 2.29 0.867 4.14 0 1.91-0.309 3.36-0.928 4.34-0.619 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38-0.57-0.918-0.855-2.31-0.855-4.18 0-0.994 0.0878-1.85 0.263-2.58s0.422-1.32 0.738-1.8c0.316-0.472 0.696-0.822 1.14-1.05 0.443-0.228 0.927-0.342 1.45-0.342z\"/><path d=\"m72 156 3.23 7.28v0.598l-3.23 7.29-0.867-0.308 2.6-7.28-2.6-7.29 0.867-0.292z\"/><path d=\"m74.1 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m87.3 221h1.25v15.1h-1.25v-15.1z\"/><path d=\"m96.2 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m105 220 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m73.4 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m86.6 87.9h1.25v15.1h-1.25v-15.1z\"/><path d=\"m91.1 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m104 87.2 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m608 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m616 157c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.46-1.16s0.474-1.98 0.474-3.6c0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.618 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m622 156 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m505 45.5h1.25v15.1h-1.25v-15.1z\"/><path d=\"m514 45.9h0.444c-0.032 0.519-0.048 1.24-0.048 2.16v6.92c0 0.313 0.018 0.55 0.054 0.709 0.034 0.159 0.096 0.289 0.186 0.389 0.088 0.1 0.216 0.178 0.384 0.235s0.378 0.1 0.632 0.13c0.254 0.0298 0.59 0.05 1.01 0.0608v0.592h-5.99v-0.592c0.6-0.027 1.03-0.0634 1.28-0.109 0.258-0.0458 0.454-0.115 0.588-0.207 0.136-0.0918 0.234-0.222 0.296-0.389 0.062-0.168 0.094-0.44 0.094-0.819v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.0892-0.738 0.267-0.318 0.178-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m519 44.8 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m574 88.4h1.25v15.1h-1.25v-15.1z\"/><path d=\"m583 90h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m591 87.6 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m574 222h1.25v15.1h-1.25v-15.1z\"/><path d=\"m578 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m591 221 3.23 7.28v0.6l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m498 265h9.99v1.08h-9.99v-1.08z\"/><path d=\"m511 259h1.25v15.1h-1.25v-15.1z\"/><path d=\"m520 259h0.446c-0.034 0.52-0.05 1.24-0.05 2.16v6.92c0 0.314 0.018 0.55 0.054 0.71 0.034 0.16 0.096 0.29 0.186 0.39 0.088 0.1 0.216 0.178 0.384 0.234s0.378 0.1 0.632 0.13 0.59 0.05 1.01 0.06v0.592h-5.99v-0.592c0.6-0.026 1.03-0.062 1.28-0.108 0.258-0.046 0.454-0.116 0.588-0.208 0.136-0.092 0.234-0.222 0.296-0.388 0.062-0.168 0.094-0.44 0.094-0.82v-6.57c0-0.216-0.038-0.374-0.114-0.474s-0.186-0.15-0.332-0.15c-0.174 0-0.42 0.088-0.738 0.266s-0.714 0.424-1.18 0.738l-0.356-0.624 3.79-2.26z\"/><path d=\"m525 258 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m394 163h9.99v1.08h-9.99v-1.08z\"/><path d=\"m407 156h1.25v15.1h-1.25v-15.1z\"/><path d=\"m415 157c-0.374 0-0.686 0.11-0.936 0.332-0.252 0.222-0.454 0.54-0.608 0.956s-0.264 0.924-0.328 1.52c-0.066 0.598-0.098 1.27-0.098 2.02 0 1.76 0.164 3.05 0.49 3.88 0.328 0.824 0.834 1.24 1.52 1.24 0.654 0 1.14-0.386 1.45-1.16 0.318-0.776 0.476-1.98 0.476-3.6 0-1.24-0.082-2.25-0.244-3.02s-0.388-1.32-0.676-1.66c-0.29-0.334-0.64-0.502-1.05-0.502zm0.04-0.69c1.18 0 2.06 0.458 2.64 1.37 0.578 0.914 0.868 2.29 0.868 4.14 0 1.91-0.31 3.36-0.928 4.34-0.62 0.982-1.52 1.47-2.71 1.47-1.17 0-2.04-0.46-2.61-1.38s-0.854-2.31-0.854-4.18c0-0.994 0.088-1.85 0.262-2.58 0.176-0.724 0.422-1.32 0.738-1.8 0.316-0.472 0.696-0.822 1.14-1.05 0.442-0.228 0.926-0.342 1.45-0.342z\"/><path d=\"m421 156 3.23 7.28v0.598l-3.23 7.29-0.866-0.308 2.6-7.28-2.6-7.29 0.866-0.292z\"/><path d=\"m423 228h9.99v1.08h-9.99v-1.08z\"/><path d=\"m436 221h1.25v15.1h-1.25v-15.1z\"/><path d=\"m445 223h1.15v4.67h4.42v1.08h-4.42v4.67h-1.15v-4.67h-4.42v-1.08h4.42v-4.67z\"/><path d=\"m454 220 3.23 7.28v0.598l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/><path d=\"m423 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m436 87.9h1.25v15.1h-1.25v-15.1z\"/><path d=\"m440 94.2h9.99v1.08h-9.99v-1.08z\"/><path d=\"m453 87.2 3.23 7.28v0.6l-3.23 7.29-0.868-0.308 2.6-7.28-2.6-7.29 0.868-0.292z\"/></g></g><defs><clipPath id=\"clip0_6_812\"><rect transform=\"translate(.8 .6)\" width=\"677\" height=\"364\" fill=\"#fff\"/></clipPath></defs></svg></p>\n"
|
|
6594
6655
|
}
|
|
6595
6656
|
]
|
|
6596
6657
|
},
|
|
@@ -6612,7 +6673,7 @@ export default {
|
|
|
6612
6673
|
"items": [
|
|
6613
6674
|
{
|
|
6614
6675
|
"type": "text-content",
|
|
6615
|
-
"content": "<p>Follow the algorithm as outlined in the previous section:</p>\n<ol>\n<li>Allocate a qubit - it starts in the $\\ket{0}$ state.</li>\n<li>Apply the $H$ gate to the qubit.</li>\n<li>Apply the oracle. The syntax for applying the oracle is the same as for applying any other gate or operation.</li>\n<li>Apply the $H$ gate to the qubit again.</li>\n<li>Measure the qubit: if the measurement result is <code>Zero</code>, the function is constant, otherwise it
|
|
6676
|
+
"content": "<p>Follow the algorithm as outlined in the previous section:</p>\n<ol>\n<li>Allocate a qubit - it starts in the $\\ket{0}$ state.</li>\n<li>Apply the $H$ gate to the qubit.</li>\n<li>Apply the oracle. The syntax for applying the oracle is the same as for applying any other gate or operation.</li>\n<li>Apply the $H$ gate to the qubit again.</li>\n<li>Measure the qubit: if the measurement result is <code>Zero</code>, the function is constant, otherwise it's variable.\nSince you need to return <code>true</code> if the function is constant, you can just return the result of comparing the measurement result with <code>Zero</code>.</li>\n</ol>\n"
|
|
6616
6677
|
},
|
|
6617
6678
|
{
|
|
6618
6679
|
"type": "solution",
|
|
@@ -6645,7 +6706,7 @@ export default {
|
|
|
6645
6706
|
"items": [
|
|
6646
6707
|
{
|
|
6647
6708
|
"type": "text-content",
|
|
6648
|
-
"content": "<p>Congratulations! In this kata you
|
|
6709
|
+
"content": "<p>Congratulations! In this kata you learned Deutsch algorithm.</p>\n<ul>\n<li>Deutsch algorithm is the smallest example of a quantum algorithm that allows to answer a question about a function in fewer queries than its classical counterpart: one query to a quantum oracle versus two queries to a classical function.</li>\n<li>Quantum oracles don't allow you to evaluate the function on all inputs at once! Instead, Deutsch algorithm finds a clever way to aggregate information about both function values into a single bit that indicates whether they are equal or not.</li>\n</ul>\n<p>Next, you will learn about the more general case of this problem and the algorithm to solve it in the Deutsch-Jozsa Algorithm kata.</p>\n"
|
|
6649
6710
|
}
|
|
6650
6711
|
]
|
|
6651
6712
|
}
|
|
@@ -6869,7 +6930,7 @@ export default {
|
|
|
6869
6930
|
"items": [
|
|
6870
6931
|
{
|
|
6871
6932
|
"type": "text-content",
|
|
6872
|
-
"content": "<p>This kata introduces you to the basic concepts of quantum error correction using several simple error correction codes.</p>\n<p><strong>This kata covers the following topics:</strong></p>\n<ul>\n<li>Simple models of noise in quantum systems</li>\n<li>Parity measurements in Z and X bases</li>\n<li>Bit flip code - the simplest code that protects qubits from the effects of bit flip noise</li>\n<li>Phase flip code - the simplest code that protects qubits from the effects of phase flip noise</li>\n<li>Shor code - the simplest code that can protect from an arbitrary error on a single qubit</li>\n</ul>\n<p><strong>What you should know to start working on this kata:</strong></p>\n<ul>\n<li>Basic single-qubit and multi-qubit gates</li>\n<li>
|
|
6933
|
+
"content": "<p>This kata introduces you to the basic concepts of quantum error correction using several simple error correction codes.</p>\n<p><strong>This kata covers the following topics:</strong></p>\n<ul>\n<li>Simple models of noise in quantum systems</li>\n<li>Parity measurements in Z and X bases</li>\n<li>Bit flip code - the simplest code that protects qubits from the effects of bit flip noise</li>\n<li>Phase flip code - the simplest code that protects qubits from the effects of phase flip noise</li>\n<li>Shor code - the simplest code that can protect from an arbitrary error on a single qubit</li>\n</ul>\n<p><strong>What you should know to start working on this kata:</strong></p>\n<ul>\n<li>Basic knowledge of single-qubit and multi-qubit gates</li>\n<li>Basic knowledge of single-qubit and multi-qubit quantum measurements and their effect on quantum systems</li>\n</ul>\n"
|
|
6873
6934
|
}
|
|
6874
6935
|
]
|
|
6875
6936
|
},
|
|
@@ -6880,7 +6941,7 @@ export default {
|
|
|
6880
6941
|
"items": [
|
|
6881
6942
|
{
|
|
6882
6943
|
"type": "text-content",
|
|
6883
|
-
"content": "<p>Any quantum system we can use to carry out quantum computation is inherently noisy.\nQuantum noise can be caused by different physical processes, depending on the type of
|
|
6944
|
+
"content": "<p>Any quantum system we can use to carry out quantum computation is inherently noisy.\nQuantum noise can be caused by different physical processes, depending on the type of particle or device used as a qubit.\nFrom the computation point of view, the presence of noise in the quantum system means that its state can suffer from random errors, and thus end up in a different state from the state you're relying on to do your computations.\nThis makes computations unreliable very fast, since the effects of noise accumulate quickly to make computation results effectively random.</p>\n<p>Before diving into how to deal with noise in quantum systems, let's take a quick look at how to do that for classical systems.</p>\n<p>The model used for analyzing classical noise is called a <em>binary symmetric channel</em>. In this model, the classical bits sent through the channel are transmitted correctly with probability $1-p$ and flipped with probability $p$. The error introduced if the bit is flipped is called a <em>bit flip error</em>.\nIn this scenario, the information sent through the channel can be protected against the effects of the noise, that is, bit flip errors, using the <em>repetition code</em>:</p>\n<ul>\n<li>On the sender side, for each bit you want to send, you create and send three copies of it:\n$$0 \\rightarrow 000, 1 \\rightarrow 111$$</li>\n<li>On the receiver side, you decode the original bit by majority vote:\n$$000, 100, 010, 001 \\rightarrow 0$$\n$$111, 011, 101, 110 \\rightarrow 1$$</li>\n</ul>\n<p>What is the probability of this scheme failure, that is, getting an incorrect value for the message bit after it was sent through the channel?\nA majority vote allows for one error on any of the three bits to happen without affecting the decoding outcome, so it would take two or three errors happening on individual bits for decoding to produce an incorrect result. The probability of this happening is $3p^2(1-p) + p^3 = 3p^2 - 2p^3$. If you compare this with the probability of an individual bit transmission failing $p$, you can see that using the repetition code yields higher success probability, as long as $p < \\frac12$. You can improve success probability further by increasing the number of repetitions you use to encode each bit: $5$ repetitions allow us to detect and correct $2$ errors, $7$ repetitions can correct $3$ errors, and so on.</p>\n<blockquote>\n<p>This noise model is useful not only for describing noisy communication channels, but also for memory - any classical system that introduces errors in information when it is left on its own, as opposed to systems that introduce errors during information manipulation. Indeed, we assume that no errors are introduced as we copy the bits during encoding or read and compare their values during decoding.</p>\n</blockquote>\n<p>The main idea of quantum error correction is the same as that for classical error correction: encode information with enough redundancy that we can recover the message even from the noisy transmission results.\nDealing with the noise in quantum systems is more challenging than in classical systems, though, due to the limitations imposed by their nature:</p>\n<ul>\n<li><strong>No cloning</strong>: It's not possible to replicate the repetition code for quantum systems in a straightforward manner, by duplicating the quantum state several times, since the no-cloning theorem prohibits that.</li>\n<li><strong>Observing the system damages information</strong>: Even if the no-cloning theorem didn't prohibit producing several copies of a quantum state, it wouldn't be possible to compare the states of the copies afterwards without damaging their state.</li>\n<li><strong>Errors are continuous</strong>: Errors in quantum computing are much more complicated than bit flip errors in classical systems.</li>\n</ul>\n<p>The simplest model used to analyze quantum noise is <em>quantum depolarizing channel</em>.\nThis model assumes that the channel transmits the qubit unchanged with probability $1-p$, and applies one of the Pauli gates $X$, $Y$, and $Z$ with probability $\\frac{p}{3}$ each. The effects of the noise on each qubit transmitted are independent.</p>\n<p>At first glance, this model seems to be limited, and not representative of the full spectrum of errors that can occur in a quantum system. Fortunately, it turns out that any errors on encoded states can be corrected by correcting only a discrete subset of errors - exactly the Pauli $X$, $Y$, and $Z$ errors! This is called <em>discretization of quantum errors</em>, and you'll see how it works later in this kata.</p>\n<blockquote>\n<p>For now, we assume that all errors are introduced by the channel, and the gates and measurements used for encoding and decoding procedures of a quantum error correction code are perfect and don't introduce any errors themselves. This is a useful assumption to get started with error correction, but in real life all gates and measurements are noisy, so eventually we'll need to modify this approach.\n<em>Fault-tolerant quantum computation</em> handles the more general scenario of performing computations on encoded states in a way that tolerates errors introduced by noisy gates and measurements.</p>\n</blockquote>\n"
|
|
6884
6945
|
}
|
|
6885
6946
|
]
|
|
6886
6947
|
},
|
|
@@ -6891,7 +6952,7 @@ export default {
|
|
|
6891
6952
|
"items": [
|
|
6892
6953
|
{
|
|
6893
6954
|
"type": "text-content",
|
|
6894
|
-
"content": "<p>Quantum error correction is based on the use of a special kind of measurements - joint measurements in Pauli bases.\
|
|
6955
|
+
"content": "<p>Quantum error correction is based on the use of a special kind of measurements - joint measurements in Pauli bases.\nYou can learn more about the single-qubit measurements in different Pauli bases in the Measurements in Single-Qubit Systems kata,\nand the general case of joint measurements in the Measurements in Multi-Qubit Systems kata.\nLet's take a closer look at the kinds of joint measurements you'll use in this kata.</p>\n<p>A multi-qubit Pauli measurement on $n$ qubits corresponds to an operator $M_1 \\otimes \\dotsc \\otimes M_n$, with each $M_j$ being from the set of gates $\\{X,Y,Z,I\\}$, and at least one of the $M_j$ is not the identity matrix. (If $M_j = I$, you can think of it as qubit $j$ not being involved in the measurement.) The measurement can produce one of the two outcomes: <code>Zero</code> corresponding to eigenvalue $+1$ of this operator, or <code>One</code> corresponding to the eigenvalue $-1$. The corresponding projection operators are the projections onto the corresponding eigenspaces. The operator $M_1 \\otimes \\dotsc \\otimes M_n$ is referred to as the <em>measurement basis</em>.</p>\n<p>For example, the first two joint measurements you'll encounter later in this kata are two-qubit measurements in $ZZ$ and $XX$ bases. They can be described as follows:</p>\n<table>\n <tr>\n <th>Pauli Operator</th>\n <th>Eigenvalue</th>\n <th>Eigenvectors</th>\n <th>Measurement Projector</th>\n <th>Measurement Result in Q#</th>\n </tr>\n <tr>\n <td rowspan=\"2\">$ZZ$</td>\n <td>$+1$</td>\n <td>$\\ket{00}$, $\\ket{11}$</td>\n <td>$\\ket{00}\\bra{00} + \\ket{11}\\bra{11}$</td>\n <td>Zero</td>\n </tr><tr>\n <td>$-1$</td>\n <td>$\\ket{01}$, $\\ket{10}$</td>\n <td>$\\ket{01}\\bra{01} + \\ket{10}\\bra{10}$</td>\n <td>One</td>\n </tr>\n <tr>\n <td rowspan=\"2\">$XX$</td>\n <td>$+1$</td>\n <td>$\\ket{++}$, $\\ket{--}$</td>\n <td>$\\ket{++}\\bra{++} + \\ket{--}\\bra{--}$</td>\n <td>Zero</td>\n </tr><tr>\n <td>$-1$</td>\n <td>$\\ket{+-}$, $\\ket{-+}$</td>\n <td>$\\ket{+-}\\bra{+-} + \\ket{-+}\\bra{-+}$</td>\n <td>One</td>\n </tr>\n</table>\n<p>In Q#, joint measurements in Pauli bases are implemented using the <code>Measure</code> operation.\nThe <code>Measure</code> operation takes two parameters: the array of <code>Pauli</code> constants (<code>PauliI</code>, <code>PauliX</code>, <code>PauliY</code>, or <code>PauliZ</code>) that define the basis for measurement, and the array of qubits to be measured.</p>\n"
|
|
6895
6956
|
}
|
|
6896
6957
|
]
|
|
6897
6958
|
},
|
|
@@ -6905,7 +6966,8 @@ export default {
|
|
|
6905
6966
|
},
|
|
6906
6967
|
"sourceIds": [
|
|
6907
6968
|
"qec_shor__zz_measurement__Verification.qs",
|
|
6908
|
-
"KatasLibrary.qs"
|
|
6969
|
+
"KatasLibrary.qs",
|
|
6970
|
+
"qec_shor__Common.qs"
|
|
6909
6971
|
],
|
|
6910
6972
|
"placeholderCode": "namespace Kata {\n operation ZZMeasurement(qs : Qubit[]) : Int {\n // Implement your solution here...\n\n return -1;\n }\n}\n",
|
|
6911
6973
|
"explainedSolution": {
|
|
@@ -6913,7 +6975,7 @@ export default {
|
|
|
6913
6975
|
"items": [
|
|
6914
6976
|
{
|
|
6915
6977
|
"type": "text-content",
|
|
6916
|
-
"content": "<p>
|
|
6978
|
+
"content": "<p>You need to measure the <em>parity</em> of the state without collapsing it all the way to the basis states. This means that you need to do the $Z \\otimes Z$ measurement on both qubits.</p>\n<p>A joint measurement using $Z \\otimes Z$ operator can be thought of as projecting the measured state to one of the two eigenspaces of $Z \\otimes Z$ with $+1$ and $-1$ as the corresponding eigenvalues. The measurement returns <code>Zero</code> if the measured state is projected to the space with an eigenvalue of $+1$, and a result of <code>One</code> if projected to the space with an eigenvalue of $-1$.</p>\n<p>You can see that the state $\\alpha \\ket{00} + \\beta \\ket{11}$ is an eigenstate of the $Z \\otimes Z$ operator with the eigenvalue $+1$, and the state $\\alpha \\ket{01} + \\beta \\ket{10}$ is an eigenstate with the eigenvalue $-1$.\nHence, you can use this joint measurement to recognize which of the superposition states you were given while preserving the initial superposition state.</p>\n"
|
|
6917
6979
|
},
|
|
6918
6980
|
{
|
|
6919
6981
|
"type": "solution",
|
|
@@ -6933,7 +6995,8 @@ export default {
|
|
|
6933
6995
|
},
|
|
6934
6996
|
"sourceIds": [
|
|
6935
6997
|
"qec_shor__xx_measurement__Verification.qs",
|
|
6936
|
-
"KatasLibrary.qs"
|
|
6998
|
+
"KatasLibrary.qs",
|
|
6999
|
+
"qec_shor__Common.qs"
|
|
6937
7000
|
],
|
|
6938
7001
|
"placeholderCode": "namespace Kata {\n operation XXMeasurement(qs : Qubit[]) : Int {\n // Implement your solution here...\n\n return -1;\n }\n}\n",
|
|
6939
7002
|
"explainedSolution": {
|
|
@@ -6941,7 +7004,7 @@ export default {
|
|
|
6941
7004
|
"items": [
|
|
6942
7005
|
{
|
|
6943
7006
|
"type": "text-content",
|
|
6944
|
-
"content": "<p>This time,
|
|
7007
|
+
"content": "<p>This time, you need to do the $X \\otimes X$ measurement on both qubits.</p>\n<p>The state $\\alpha \\ket{++} + \\beta \\ket{--}$ is an eigenstate of the $X \\otimes X$ operator with the eigenvalue $+1$, and the state $\\alpha \\ket{+-} + \\beta \\ket{-+}$ is an eigenstate with the eigenvalue $-1$.\nHence, you can use this joint measurement to recognize which of the superposition states you were given while preserving the initial superposition state.</p>\n"
|
|
6945
7008
|
},
|
|
6946
7009
|
{
|
|
6947
7010
|
"type": "solution",
|
|
@@ -6958,7 +7021,7 @@ export default {
|
|
|
6958
7021
|
"items": [
|
|
6959
7022
|
{
|
|
6960
7023
|
"type": "text-content",
|
|
6961
|
-
"content": "<p>Can we reuse the ideas of a classical repetition code for a quantum error correction code?</p>\n<p>The naive approach to it would be to try and encode a quantum state $\\ket{\\psi}$ as several copies of itself:\n$\\ket{\\psi} \\rightarrow \\ket{\\psi} \\otimes \\ket{\\psi} \\otimes \\ket{\\psi}$.\nUnfortunately, the no-cloning theorem and the inability to reconstruct a state accurately after measuring it
|
|
7024
|
+
"content": "<p>Can we reuse the ideas of a classical repetition code for a quantum error correction code?</p>\n<p>The naive approach to it would be to try and encode a quantum state $\\ket{\\psi}$ as several copies of itself:\n$\\ket{\\psi} \\rightarrow \\ket{\\psi} \\otimes \\ket{\\psi} \\otimes \\ket{\\psi}$.\nUnfortunately, the no-cloning theorem and the inability to reconstruct a state accurately after measuring it make this approach impossible.</p>\n<p>You can, however, take a slightly different approach: encode the <em>basis states</em> $\\ket{0}$ and $\\ket{1}$ in repetition code using a unitary transformation, and deduce the effects of this transformation on superposition states based on its linearity:</p>\n<p>$$\\ket{0} \\rightarrow \\ket{000}, \\ket{1} \\rightarrow \\ket{111}$$</p>\n<p>$$\\alpha \\ket{0} + \\beta \\ket{1} \\rightarrow \\alpha \\ket{000} + \\beta \\ket{111}$$</p>\n<p>This encoding is called <strong>bit flip code</strong>, and the states $\\ket{000}$, $\\ket{111}$, and their linear combinations are called <strong>code words</strong> in this code. The bit flip code allows us to detect and correct some errors that can occur on qubits in the depolarizing channel, though not all of them.</p>\n<p>Let's see what happens if an $X$ error happens on one of the qubits, and how you can detect it using two parity measurements (measurements in the $ZZ$ basis).</p>\n<table>\n<tr>\n<th>Error</th>\n<th>State after the error</th>\n<th>Parity of qubits 0 and 1</th>\n<th>Parity of qubits 1 and 2</th>\n</tr>\n<tr>\n<td>No error</td>\n<td>$\\alpha \\ket{000} + \\beta \\ket{111}$</td>\n<td>$0$</td>\n<td>$0$</td>\n</tr>\n<tr>\n<td>$X_0$ (error on qubit $0$)</td>\n<td>$\\alpha \\ket{100} + \\beta \\ket{011}$</td>\n<td>$1$</td>\n<td>$0$</td>\n</tr>\n<tr>\n<td>$X_1$ (error on qubit $1$)</td>\n<td>$\\alpha \\ket{010} + \\beta \\ket{101}$</td>\n<td>$1$</td>\n<td>$1$</td>\n</tr>\n<tr>\n<td>$X_2$ (error on qubit $2$)</td>\n<td>$\\alpha \\ket{001} + \\beta \\ket{110}$</td>\n<td>$0$</td>\n<td>$1$</td>\n</tr>\n</table>\n<p>You can see that these two parity measurements give us different pairs of results depending on whether the $X$ error happened and on which qubit. This means that you can use them to detect the error, and then correct it by applying an $X$ gate to the qubit that was affected by it.</p>\n<p>However, if a $Z$ error happens on any one of these qubits, you won't be able to detect it: it will convert the state $\\alpha \\ket{000} + \\beta \\ket{111}$ to the state $\\alpha \\ket{000} - \\beta \\ket{111}$ which is a valid code word in this code - it's an encoding of the quantum state $\\alpha \\ket{0} - \\beta \\ket{1}$. You need to come up with a different way to detect $Z$ errors.</p>\n"
|
|
6962
7025
|
}
|
|
6963
7026
|
]
|
|
6964
7027
|
},
|
|
@@ -6972,7 +7035,8 @@ export default {
|
|
|
6972
7035
|
},
|
|
6973
7036
|
"sourceIds": [
|
|
6974
7037
|
"qec_shor__bitflip_encode__Verification.qs",
|
|
6975
|
-
"KatasLibrary.qs"
|
|
7038
|
+
"KatasLibrary.qs",
|
|
7039
|
+
"qec_shor__Common.qs"
|
|
6976
7040
|
],
|
|
6977
7041
|
"placeholderCode": "namespace Kata {\n operation BitflipEncode (qs : Qubit[]) : Unit is Adj + Ctl {\n // Implement your solution here...\n \n }\n}",
|
|
6978
7042
|
"explainedSolution": {
|
|
@@ -6980,7 +7044,7 @@ export default {
|
|
|
6980
7044
|
"items": [
|
|
6981
7045
|
{
|
|
6982
7046
|
"type": "text-content",
|
|
6983
|
-
"content": "<p>
|
|
7047
|
+
"content": "<p>You can do this using $CNOT$ gates with the first qubit as control. This will keep the term $\\alpha \\ket{000}$ unchanged and flip $\\beta \\ket{100}$ to $\\beta \\ket{111}$.</p>\n"
|
|
6984
7048
|
},
|
|
6985
7049
|
{
|
|
6986
7050
|
"type": "solution",
|
|
@@ -6996,7 +7060,7 @@ export default {
|
|
|
6996
7060
|
"title": "Bit Flip Code: Detect X Error",
|
|
6997
7061
|
"description": {
|
|
6998
7062
|
"type": "text-content",
|
|
6999
|
-
"content": "<p><strong>Input</strong>: three qubits that are either in the state $\\ket{\\psi_L} = \\alpha \\ket{000} + \\beta \\ket{111}$\nor in one of the states $(X \\otimes I \\otimes I)\\ket{\\psi_L}$, $(I \\otimes X \\otimes I)\\ket{\\psi_L}$, or $(I \\otimes I \\otimes X)\\ket{\\psi_L}$ (that is, either in a valid code word of the bit flip code or a code word with an $X$ error occurring on one of the qubits).</p>\n<p><strong>Goal</strong>: determine whether an $X$ error has occurred, and if so, on which qubit.\nThe return value should be the index of the qubit on which the error occurred, or $-1$ if no error occurred.\nThe state of the qubits after your operation is applied
|
|
7063
|
+
"content": "<p><strong>Input</strong>: three qubits that are either in the state $\\ket{\\psi_L} = \\alpha \\ket{000} + \\beta \\ket{111}$\nor in one of the states $(X \\otimes I \\otimes I)\\ket{\\psi_L}$, $(I \\otimes X \\otimes I)\\ket{\\psi_L}$, or $(I \\otimes I \\otimes X)\\ket{\\psi_L}$ (that is, either in a valid code word of the bit flip code or a code word with an $X$ error occurring on one of the qubits).</p>\n<p><strong>Goal</strong>: determine whether an $X$ error has occurred, and if so, on which qubit.\nThe return value should be the index of the qubit on which the error occurred, or $-1$ if no error occurred.\nThe state of the qubits after your operation is applied shouldn't change.</p>\n"
|
|
7000
7064
|
},
|
|
7001
7065
|
"sourceIds": [
|
|
7002
7066
|
"qec_shor__bitflip_detect__Verification.qs",
|
|
@@ -7009,7 +7073,7 @@ export default {
|
|
|
7009
7073
|
"items": [
|
|
7010
7074
|
{
|
|
7011
7075
|
"type": "text-content",
|
|
7012
|
-
"content": "<p>To identify the qubit on which the error happened,
|
|
7076
|
+
"content": "<p>To identify the qubit on which the error happened, you need to do two parity measurements in the $ZZ$ basis on any two different pairs of qubits and analyze their outcomes:</p>\n<ul>\n<li>If both parity measurements yield $0$, no error occurred.</li>\n<li>If both parity measurements yield $1$, the error occurred on the qubit that is shared between the measured pairs of qubits.</li>\n<li>If one of the parity measurements yields $1$ and the other $0$, the error occurred on the qubit that was part of only the pair of qubits involved in the measurement that yields $1$ but not the other pair.</li>\n</ul>\n<p>The code below implements this logic using $ZZ$ parity measurements on pairs of qubits $0, 1$ and $1, 2$.</p>\n"
|
|
7013
7077
|
},
|
|
7014
7078
|
{
|
|
7015
7079
|
"type": "solution",
|
|
@@ -7026,7 +7090,7 @@ export default {
|
|
|
7026
7090
|
"items": [
|
|
7027
7091
|
{
|
|
7028
7092
|
"type": "text-content",
|
|
7029
|
-
"content": "<p>What kind of code could detect and correct a $Z$ error?
|
|
7093
|
+
"content": "<p>What kind of code could detect and correct a $Z$ error? You detected an $X$ error using the fact that in the $\\{\\ket{0}, \\ket{1}\\}$ basis the error changed the basis state. Similarly, you can detect a $Z$ error using the $\\{\\ket{+}, \\ket{-}\\}$ basis, in which the $Z$ gate converts $\\ket{+}$ to $\\ket{-}$ and vice versa, acting as a basis change operation.</p>\n<p>Based on this idea, you can construct the <strong>phase flip code</strong> that uses the following encoding:</p>\n<p>$$\\ket{0} \\rightarrow \\ket{+++}, \\ket{1} \\rightarrow \\ket{---}$$</p>\n<p>$$\\alpha \\ket{0} + \\beta \\ket{1} \\rightarrow \\alpha \\ket{+++} + \\beta \\ket{---}$$</p>\n<p>Let's see what happens if a $Z$ error happens on one of the qubits, and how you can detect it using two parity measurements.\nThis time you do the parity measurements in the $X$ basis to distinguish the cases of $\\ket{++}$ and $\\ket{--}$ (parity $0$) from $\\ket{+-}$ and $\\ket{-+}$ (parity $1$).</p>\n<table>\n<tr>\n<th>Error</th>\n<th>State after the error</th>\n<th>$XX$ parity of qubits 0 and 1</th>\n<th>$XX$ parity of qubits 1 and 2</th>\n</tr>\n<tr>\n<td>No error</td>\n<td>$\\alpha \\ket{+++} + \\beta \\ket{---}$</td>\n<td>$0$</td>\n<td>$0$</td>\n</tr>\n<tr>\n<td>$Z_0$ (error on qubit $0$)</td>\n<td>$\\alpha \\ket{-++} + \\beta \\ket{+--}$</td>\n<td>$1$</td>\n<td>$0$</td>\n</tr>\n<tr>\n<td>$Z_1$ (error on qubit $1$)</td>\n<td>$\\alpha \\ket{+-+} + \\beta \\ket{-+-}$</td>\n<td>$1$</td>\n<td>$1$</td>\n</tr>\n<tr>\n<td>$Z_2$ (error on qubit $2$)</td>\n<td>$\\alpha \\ket{++-} + \\beta \\ket{--+}$</td>\n<td>$0$</td>\n<td>$1$</td>\n</tr>\n</table>\n<p>You can see that these two parity measurements give different pairs of results depending on whether the $Z$ error happened and on which qubit. This means that you can use them to detect the error, and then correct it by applying a $Z$ gate to the qubit that was affected by it.</p>\n<p>However, if an $X$ error happens on any one of these qubits, you won't be able to detect it: it will convert the state $\\alpha \\ket{+++} + \\beta \\ket{---}$ to the state $\\alpha \\ket{+++} - \\beta \\ket{---}$ which is a valid code word in this code - it's an encoding of the quantum state $\\alpha \\ket{0} - \\beta \\ket{1}$. You need to come up with a different way to detect <strong>both</strong> $X$ and $Z$ errors in the same encoding.</p>\n"
|
|
7030
7094
|
}
|
|
7031
7095
|
]
|
|
7032
7096
|
},
|
|
@@ -7036,11 +7100,12 @@ export default {
|
|
|
7036
7100
|
"title": "Phase Flip Code: Encode Codewords",
|
|
7037
7101
|
"description": {
|
|
7038
7102
|
"type": "text-content",
|
|
7039
|
-
"content": "<p><strong>Input</strong>: three qubits in the state $\\ket{\\psi} \\otimes \\ket{00}$, where $\\ket{\\psi} = \\alpha \\ket{0} + \\beta \\ket{1}$ is the state of the first qubit,
|
|
7103
|
+
"content": "<p><strong>Input</strong>: three qubits in the state $\\ket{\\psi} \\otimes \\ket{00}$, where $\\ket{\\psi} = \\alpha \\ket{0} + \\beta \\ket{1}$ is the state of the first qubit, that is, <code>qs[0]</code>.</p>\n<p><strong>Goal</strong>: prepare a state $\\alpha \\ket{+++} + \\beta \\ket{---}$ on these qubits.</p>\n"
|
|
7040
7104
|
},
|
|
7041
7105
|
"sourceIds": [
|
|
7042
7106
|
"qec_shor__phaseflip_encode__Verification.qs",
|
|
7043
|
-
"KatasLibrary.qs"
|
|
7107
|
+
"KatasLibrary.qs",
|
|
7108
|
+
"qec_shor__Common.qs"
|
|
7044
7109
|
],
|
|
7045
7110
|
"placeholderCode": "namespace Kata {\n operation PhaseflipEncode (qs : Qubit[]) : Unit is Adj + Ctl {\n // Implement your solution here...\n \n }\n}",
|
|
7046
7111
|
"explainedSolution": {
|
|
@@ -7048,7 +7113,7 @@ export default {
|
|
|
7048
7113
|
"items": [
|
|
7049
7114
|
{
|
|
7050
7115
|
"type": "text-content",
|
|
7051
|
-
"content": "<p>
|
|
7116
|
+
"content": "<p>You can implement this encoding in two steps:</p>\n<ol>\n<li>Use bit flip encoding to convert $\\alpha \\ket{000} + \\beta \\ket{100}$ into $\\alpha \\ket{000} + \\beta \\ket{111}$.</li>\n<li>Apply a Hadamard gate to each qubit to convert each of the $\\ket{0}$ states into $\\ket{+}$ and each of the $\\ket{1}$ states into $\\ket{-}$.</li>\n</ol>\n"
|
|
7052
7117
|
},
|
|
7053
7118
|
{
|
|
7054
7119
|
"type": "solution",
|
|
@@ -7064,7 +7129,7 @@ export default {
|
|
|
7064
7129
|
"title": "Phase Flip Code: Detect Z Error",
|
|
7065
7130
|
"description": {
|
|
7066
7131
|
"type": "text-content",
|
|
7067
|
-
"content": "<p><strong>Input</strong>: three qubits that are either in the state $\\ket{\\psi_L} = \\alpha \\ket{+++} + \\beta \\ket{---}$\nor in one of the states $(Z \\otimes I \\otimes I)\\ket{\\psi_L}$, $(I \\otimes Z \\otimes I)\\ket{\\psi_L}$, or $(I \\otimes I \\otimes Z)\\ket{\\psi_L}$ (that is, either in a valid code word of the phase flip code or a code word with a $Z$ error occurring on one of the qubits).</p>\n<p><strong>Goal</strong>: determine whether a $Z$ error has occurred, and if so, on which qubit.\nThe return value should be the index of the qubit on which the error occurred, or $-1$ if no error occurred.\nThe state of the qubits after your operation is applied
|
|
7132
|
+
"content": "<p><strong>Input</strong>: three qubits that are either in the state $\\ket{\\psi_L} = \\alpha \\ket{+++} + \\beta \\ket{---}$\nor in one of the states $(Z \\otimes I \\otimes I)\\ket{\\psi_L}$, $(I \\otimes Z \\otimes I)\\ket{\\psi_L}$, or $(I \\otimes I \\otimes Z)\\ket{\\psi_L}$ (that is, either in a valid code word of the phase flip code or a code word with a $Z$ error occurring on one of the qubits).</p>\n<p><strong>Goal</strong>: determine whether a $Z$ error has occurred, and if so, on which qubit.\nThe return value should be the index of the qubit on which the error occurred, or $-1$ if no error occurred.\nThe state of the qubits after your operation is applied shouldn't change.</p>\n"
|
|
7068
7133
|
},
|
|
7069
7134
|
"sourceIds": [
|
|
7070
7135
|
"qec_shor__phaseflip_detect__Verification.qs",
|
|
@@ -7077,7 +7142,7 @@ export default {
|
|
|
7077
7142
|
"items": [
|
|
7078
7143
|
{
|
|
7079
7144
|
"type": "text-content",
|
|
7080
|
-
"content": "<p>To identify the qubit on which the error happened,
|
|
7145
|
+
"content": "<p>To identify the qubit on which the error happened, you can use the same logic as you did for the error detection for the bit flip code. You need to do two parity measurements, this time in the $XX$ basis, on any two different pairs of qubits and analyze their outcomes.\nThe code below implements this logic using $XX$ parity measurements on pairs of qubits $0, 1$ and $1, 2$.</p>\n"
|
|
7081
7146
|
},
|
|
7082
7147
|
{
|
|
7083
7148
|
"type": "solution",
|
|
@@ -7094,7 +7159,7 @@ export default {
|
|
|
7094
7159
|
"items": [
|
|
7095
7160
|
{
|
|
7096
7161
|
"type": "text-content",
|
|
7097
|
-
"content": "<p>Can we combine the lessons learned from the bit flip and phase flip error correction codes to be able to detect and correct both $X$ and $Z$ errors? In that case, we'd also be able to handle $Y$ errors as a combination of $X$ and $Z$ errors happening at the same time, and, as a result, we'll be able to detect and correct
|
|
7162
|
+
"content": "<p>Can we combine the lessons learned from the bit flip and phase flip error correction codes to be able to detect and correct both $X$ and $Z$ errors? In that case, we'd also be able to handle $Y$ errors as a combination of $X$ and $Z$ errors happening at the same time, and, as a result, we'll be able to detect and correct any arbitrary <strong>single-qubit</strong> error.</p>\n<p>The Shor code, published in 1995, combines the approaches of the bit flip and phase flip codes.\nIt uses the following 9-qubit encoding for logical states:</p>\n<p>$$\\ket{0} \\rightarrow \\ket{0_L} = \\frac1{2\\sqrt2} (\\ket{000} + \\ket{111}) \\otimes (\\ket{000} + \\ket{111}) \\otimes (\\ket{000} + \\ket{111})$$\n$$\\ket{1} \\rightarrow \\ket{1_L} = \\frac1{2\\sqrt2} (\\ket{000} - \\ket{111}) \\otimes (\\ket{000} - \\ket{111}) \\otimes (\\ket{000} - \\ket{111})$$\n$$\\alpha \\ket{0} + \\beta \\ket{1} \\rightarrow \\alpha \\ket{0_L} + \\beta \\ket{1_L}$$</p>\n<blockquote>\n<p>Shor code was created as a <em>concatenation</em> of bit flip and phase flip codes. Encoding a qubit into its 9-qubit representation happens in two steps:</p>\n<ol>\n<li>A qubit is encoded in three qubits using the phase flip code.</li>\n<li>After that, each of those three qubits is encoded again using the bit flip code.</li>\n</ol>\n<p>Concatenation is a commonly used method of combining several error correction codes by encoding the qubit state using the first code, followed by encoding each qubit of the resulting state using the second code, and so on.</p>\n</blockquote>\n<p>How can you detect and correct errors using Shor code?</p>\n<h3>Detect and Correct X Errors</h3>\n<p>$X$ errors happening on any qubit manifest very similarly to the way they do in the bit flip code.\nLet's consider the first triplet of qubits and an error that happens on any of the first three qubits.\nSame as in the bit flip code, measuring the parity of pairs of qubits always returns $0$ if there is no error (since all bits in each basis state of the code words are the same), so a parity measurement returning $1$ on one or two pairs indicates an error, and the measurements which returned $1$ allow us to track down the qubit on which it happened.</p>\n<p>To correct an $X$ error, you simply apply an $X$ gate to the affected qubit.</p>\n<h3>Detect and Correct Z Errors</h3>\n<p>$Z$ errors in Shor code behave similarly to the way they do in the phase flip code, but the error detection and correction procedure has to be modified.</p>\n<p>A $Z$ error happening on any qubit of a triplet flips the relative sign between the basis states $\\ket{000}$ and $\\ket{111}$ on those qubits. This means that you need a measurement that would compare relative signs of whole triplets, rather than individual qubits, allowing us to distinguish $(\\ket{000} + \\ket{111}) \\otimes (\\ket{000} + \\ket{111})$ and $(\\ket{000} - \\ket{111}) \\otimes (\\ket{000} - \\ket{111})$ (parts of valid code words) from $(\\ket{000} + \\ket{111}) \\otimes (\\ket{000} - \\ket{111})$ and $(\\ket{000} - \\ket{111}) \\otimes (\\ket{000} + \\ket{111})$ (parts of code words with a $Z$ error applied).</p>\n<p>The measurement that allows you to do this is a 6-qubit measurement in the $X$ basis.</p>\n<blockquote>\n<p>How can you check this? Remember that doing a measurement in the $X$ basis is the same as applying Hadamard gates to each qubit and then doing a measurement in the $Z$ basis (and then applying Hadamard gates again).</p>\n<ul>\n<li>If you apply Hadamard gates to each qubit of the state $\\frac1{\\sqrt2}(\\ket{000} + \\ket{111})$, you get the state\n$\\frac12(\\ket{000} + \\ket{011} + \\ket{101} + \\ket{110})$. The parity of each basis state in it is $0$.</li>\n<li>If you apply Hadamard gates to each qubit of the state $\\frac1{\\sqrt2}(\\ket{000} - \\ket{111})$, you get the state\n$\\frac12(\\ket{001} + \\ket{010} + \\ket{100} + \\ket{111})$. The parity of each basis state in it is $1$.</li>\n</ul>\n<p>Thus, a 6-qubit measurement in the $X$ basis of two triplets, each either in the state $\\frac1{\\sqrt2}(\\ket{000} + \\ket{111})$ or $\\frac1{\\sqrt2}(\\ket{000} - \\ket{111})$, would produce parity $0$ if both triplets have the same relative sign between the basis states and $1$ if the relative sign is different.</p>\n</blockquote>\n<p>To correct a $Z$ error, you can no longer simply apply a $Z$ gate to the affected qubit, since you can only figure out the triplet of qubits where the error happened, not the exact qubit. To work around this, you correct a $Z$ error by applying a $Z$ gate to each qubit of the affected triplet - and $Z$ gates applied to unaffected qubits just cancel each other out.</p>\n"
|
|
7098
7163
|
}
|
|
7099
7164
|
]
|
|
7100
7165
|
},
|
|
@@ -7104,11 +7169,12 @@ export default {
|
|
|
7104
7169
|
"title": "Shor Code: Encode Codewords",
|
|
7105
7170
|
"description": {
|
|
7106
7171
|
"type": "text-content",
|
|
7107
|
-
"content": "<p><strong>Input</strong>: nine qubits in the state $\\ket{\\psi} \\otimes \\ket{0 \\ldots 0}$, where $\\ket{\\psi} = \\alpha \\ket{0} + \\beta \\ket{1}$ is the state of the first qubit,
|
|
7172
|
+
"content": "<p><strong>Input</strong>: nine qubits in the state $\\ket{\\psi} \\otimes \\ket{0 \\ldots 0}$, where $\\ket{\\psi} = \\alpha \\ket{0} + \\beta \\ket{1}$ is the state of the first qubit, that is, <code>qs[0]</code>.</p>\n<p><strong>Goal</strong>: prepare a state $\\alpha \\ket{0_L} + \\beta \\ket{1_L}$ on these qubits, where\n$$\\ket{0_L} = \\frac1{2\\sqrt2} (\\ket{000} + \\ket{111}) \\otimes (\\ket{000} + \\ket{111}) \\otimes (\\ket{000} + \\ket{111})$$\nand\n$$\\ket{1_L} = \\frac1{2\\sqrt2} (\\ket{000} - \\ket{111}) \\otimes (\\ket{000} - \\ket{111}) \\otimes (\\ket{000} - \\ket{111})$$</p>\n"
|
|
7108
7173
|
},
|
|
7109
7174
|
"sourceIds": [
|
|
7110
7175
|
"qec_shor__shor_encode__Verification.qs",
|
|
7111
|
-
"KatasLibrary.qs"
|
|
7176
|
+
"KatasLibrary.qs",
|
|
7177
|
+
"qec_shor__Common.qs"
|
|
7112
7178
|
],
|
|
7113
7179
|
"placeholderCode": "namespace Kata {\n operation ShorEncode (qs : Qubit[]) : Unit is Adj + Ctl {\n // Implement your solution here...\n \n }\n\n // You might find this helper operation from an earlier task useful.\n operation BitflipEncode (qs : Qubit[]) : Unit is Adj + Ctl {\n CNOT(qs[0], qs[1]);\n CNOT(qs[0], qs[2]);\n }\n}",
|
|
7114
7180
|
"explainedSolution": {
|
|
@@ -7116,7 +7182,7 @@ export default {
|
|
|
7116
7182
|
"items": [
|
|
7117
7183
|
{
|
|
7118
7184
|
"type": "text-content",
|
|
7119
|
-
"content": "<p>
|
|
7185
|
+
"content": "<p>You can implement this encoding in two steps.</p>\n<p>First, you use phase flip encoding on qubits with indices $0, 3, 6$ to convert $\\alpha \\ket{000} + \\beta \\ket{100}$ into $\\alpha \\ket{+++} + \\beta \\ket{---}$.\nAfter this, the state of the system is</p>\n<p>$$\\alpha \\ket{+00} \\otimes \\ket{+00} \\otimes \\ket{+00} + \\beta \\ket{-00} \\otimes \\ket{-00} \\otimes \\ket{-00}$$</p>\n<p>Then, you use bit flip encoding on each triplet of qubits $0 \\ldots 2, 3 \\ldots 5, 6 \\ldots 8$ to convert each $\\ket{+00}$ into $\\frac1{\\sqrt2} (\\ket{000} + \\ket{111})$ and each $\\ket{-00}$ into $\\frac1{\\sqrt2} (\\ket{000} - \\ket{111})$. After this, the nine-qubit system will be exactly in the state you're looking for.</p>\n"
|
|
7120
7186
|
},
|
|
7121
7187
|
{
|
|
7122
7188
|
"type": "solution",
|
|
@@ -7132,11 +7198,12 @@ export default {
|
|
|
7132
7198
|
"title": "Shor Code: Detect X, Y, and Z Errors",
|
|
7133
7199
|
"description": {
|
|
7134
7200
|
"type": "text-content",
|
|
7135
|
-
"content": "<p><strong>Input</strong>: nine qubits that are either in the state $\\ket{\\psi_L} = \\alpha \\ket{0_L} + \\beta \\ket{0_L}$ (a valid code word of the Shor code) or the state that is a code word with $X$, $Y$, or $Z$ error occurring on one of the qubits.</p>\n<p><strong>Goal</strong>: determine whether an error has occurred, and if so, what type and on which qubit.\nThe return value is a tuple of two elements, describing the detected error as follows:</p>\n<ul>\n<li>The first element of the return is an <code>Int</code> - the index of the qubit on which the error occurred, or $-1$ if no error occurred.</li>\n<li>The second element of the return is a <code>Pauli</code> indicating the type of the error (<code>PauliX</code>, <code>PauliY</code>, or <code>PauliZ</code>).\nIf no error occurred, the second element of the return can be any value, it
|
|
7201
|
+
"content": "<p><strong>Input</strong>: nine qubits that are either in the state $\\ket{\\psi_L} = \\alpha \\ket{0_L} + \\beta \\ket{0_L}$ (a valid code word of the Shor code) or the state that is a code word with $X$, $Y$, or $Z$ error occurring on one of the qubits.</p>\n<p><strong>Goal</strong>: determine whether an error has occurred, and if so, what type and on which qubit.\nThe return value is a tuple of two elements, describing the detected error as follows:</p>\n<ul>\n<li>The first element of the return is an <code>Int</code> - the index of the qubit on which the error occurred, or $-1$ if no error occurred.</li>\n<li>The second element of the return is a <code>Pauli</code> indicating the type of the error (<code>PauliX</code>, <code>PauliY</code>, or <code>PauliZ</code>).\nIf no error occurred, the second element of the return can be any value, it isn't validated.</li>\n<li>In case of a single $Z$ error, the qubit on which it occurred cannot be identified uniquely.\nIn this case, the return value should be the index of the triplet of qubits in which the error occurred ($0$ for qubits $0 \\ldots 2$, $1$ for qubits $3 \\ldots 5$, and $2$ for qubits $6 \\ldots 8$).</li>\n</ul>\n<p>Example return values:</p>\n<table>\n<tr>\n<th>Error</th>\n<th>Return value</th>\n</tr>\n<tr>\n<td>No error</td>\n<td>(-1, PauliI)</td>\n</tr>\n<tr>\n<td>$X$ error on qubit $0$</td>\n<td>(0, PauliX)</td>\n</tr>\n<tr>\n<td>$Y$ error on qubit $4$</td>\n<td>(4, PauliY)</td>\n</tr>\n<tr>\n<td>$Z$ error on qubit $8$ (last triplet)</td>\n<td>(2, PauliZ)</td>\n</tr>\n</table>\n<p>The state of the qubits after your operation is applied shouldn't change.</p>\n"
|
|
7136
7202
|
},
|
|
7137
7203
|
"sourceIds": [
|
|
7138
7204
|
"qec_shor__shor_detect__Verification.qs",
|
|
7139
|
-
"KatasLibrary.qs"
|
|
7205
|
+
"KatasLibrary.qs",
|
|
7206
|
+
"qec_shor__Common.qs"
|
|
7140
7207
|
],
|
|
7141
7208
|
"placeholderCode": "namespace Kata {\n operation ShorDetectError (qs : Qubit[]) : (Int, Pauli) {\n // Implement your solution here...\n\n return (-2, PauliI);\n }\n\n // You might find this helper operation from an earlier task useful.\n operation BitflipDetectError (qs : Qubit[]) : Int {\n let m1 = Measure([PauliZ, PauliZ], qs[0 .. 1]);\n let m2 = Measure([PauliZ, PauliZ], qs[1 .. 2]);\n \n if m1 == One and m2 == Zero {\n return 0;\n } elif m1 == One and m2 == One {\n return 1;\n } elif m1 == Zero and m2 == One {\n return 2;\n } else {\n return -1;\n }\n }\n}",
|
|
7142
7209
|
"explainedSolution": {
|
|
@@ -7144,7 +7211,7 @@ export default {
|
|
|
7144
7211
|
"items": [
|
|
7145
7212
|
{
|
|
7146
7213
|
"type": "text-content",
|
|
7147
|
-
"content": "<p>For this code,
|
|
7214
|
+
"content": "<p>For this code, you'll detect $X$ and $Z$ errors separately, similarly to how you did it for bit flip code and phase flip code, and then combine the results into the final answer. A $Y$ error will be signaled by both $X$ and $Z$ errors occurring, since the problem states that at most one error happened.</p>\n<ol>\n<li>\n<p>To detect $X$ errors, recall that in Shor code, each triplet of qubits $0 \\ldots 2, 3 \\ldots 5, 6 \\ldots 8$ is an encoding of a $\\ket{+}$ state in the bit flip code. This means that you can detect an $X$ error by applying the bit flip error detection logic to each triplet of qubits separately.</p>\n</li>\n<li>\n<p>To detect $Z$ errors, recall that 6-qubit joint measurements in $X$ basis can detect the parity of the relative phase of the first three qubits and the last three qubits in the measurement, that is, distinguish</p>\n<p>$$\\frac12 \\left( (\\ket{000} + \\ket{111}) \\otimes (\\ket{000} + \\ket{111}) + (\\ket{000} - \\ket{111}) \\otimes (\\ket{000} - \\ket{111}) \\right)$$</p>\n<p>from</p>\n<p>$$\\frac12 \\left( (\\ket{000} + \\ket{111}) \\otimes (\\ket{000} - \\ket{111}) + (\\ket{000} - \\ket{111}) \\otimes (\\ket{000} + \\ket{111}) \\right)$$</p>\n<p>This means that you can detect a $Z$ error by doing two 6-qubit joint measurements on qubit triplets $0 \\ldots 2$ & $3 \\ldots 5$ and on $3 \\ldots 5$ & $6 \\ldots 8$ and interpret their results in the same way as you did for bit flip and phase flip codes.</p>\n</li>\n<li>\n<p>To combine the results, you check which of the results occurred:</p>\n</li>\n</ol>\n<ul>\n<li>if neither $X$ nor $Z$ error was detected, return "no error";</li>\n<li>if both were detected, return the $Y$ error and use the index of the qubit where the $X$ error was detected (remember that you can tract the $Z$ error only to the triplet in which it occurred, not to the exact qubit);</li>\n<li>if only one error was detected, return that error.</li>\n</ul>\n"
|
|
7148
7215
|
},
|
|
7149
7216
|
{
|
|
7150
7217
|
"type": "solution",
|
|
@@ -7161,7 +7228,7 @@ export default {
|
|
|
7161
7228
|
"items": [
|
|
7162
7229
|
{
|
|
7163
7230
|
"type": "text-content",
|
|
7164
|
-
"content": "<p>The key idea that enables quantum error correction is discretization of quantum errors: being able to correct any kind of error using a code that explicitly allows us to correct only a discrete set of Pauli errors.</p>\n<blockquote>\n<p>The high-level mathematical reasoning behind our ability to discretize quantum errors is as follows.</p>\n<p>Let's consider a single-qubit error acting on one of the qubits of the encoded state, converting the entire state from $\\ket{\\psi_L}$ to $E\\ket{\\psi_L}$.\
|
|
7231
|
+
"content": "<p>The key idea that enables quantum error correction is discretization of quantum errors: being able to correct any kind of error using a code that explicitly allows us to correct only a discrete set of Pauli errors.</p>\n<blockquote>\n<p>The high-level mathematical reasoning behind our ability to discretize quantum errors is as follows.</p>\n<p>Let's consider a single-qubit error acting on one of the qubits of the encoded state, converting the entire state from $\\ket{\\psi_L}$ to $E\\ket{\\psi_L}$.\nYou can represent the state with this error as some superposition of four orthogonal states: $\\ket{\\psi_L}$, $X\\ket{\\psi_L}$, $Z\\ket{\\psi_L}$, and $XZ\\ket{\\psi_L}$ (this is possible because the Pauli matrices $I, X, Y, Z$ form a basis for $2 \\times 2$ Hermitian matrices, so the operator representing the error can be decomposed as their linear combination).</p>\n<p>Doing the set of parity measurements to detect $X$ and $Z$ errors will collapse the state $E\\ket{\\psi_L}$ into other of these four states, yielding measurement results that match that state. For example, if parity measurements yield a set of results indicating that an $X$ error happened, the state $E\\ket{\\psi_L}$ will collapse to $X\\ket{\\psi_L}$.</p>\n<p>Then, you can use the results of parity measurements to correct the error that they indicate, bringing our state back to the error-free state $\\ket{\\psi_L}$.</p>\n</blockquote>\n<p>Does Shor code indeed correct all errors, and not just the set of Pauli errors $X$, $Y$, and $Z$?\nLet's try it out!</p>\n<p>The following demo puts together the steps of error correction using Shor code: it encodes a given logical state into multiple qubits, introduces an arbitrary error, runs the error detection code and applies error correction if necessary, and checks that the result is an accurate encoding of the starting logical state. Experiment with applying different errors to different qubits of the code - and not just the Pauli errors but any single-qubit rotations too. You can even use a measurement!</p>\n"
|
|
7165
7232
|
},
|
|
7166
7233
|
{
|
|
7167
7234
|
"type": "example",
|
|
@@ -7192,20 +7259,20 @@ export default {
|
|
|
7192
7259
|
},
|
|
7193
7260
|
{
|
|
7194
7261
|
"id": "KatasLibrary.qs",
|
|
7195
|
-
"code": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nnamespace Microsoft.Quantum.Katas {\n open Microsoft.Quantum.Arrays;\n open Microsoft.Quantum.Convert;\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Math;\n open Microsoft.Quantum.Random;\n\n /// # Summary\n /// Given two operations, checks whether they act identically (including global phase) for all input states.\n /// This is done through controlled versions of the operations instead of plain ones which convert the global phase\n /// into a relative phase that can be detected.\n operation CheckOperationsAreEqualStrict(\n inputSize : Int,\n op : (Qubit[] => Unit is Adj + Ctl),\n reference : (Qubit[] => Unit is Adj + Ctl))\n : Bool {\n Fact(inputSize > 0, \"`inputSize` must be positive\");\n let controlledOp = register => Controlled op(register[...0], register[1...]);\n let controlledReference = register => Controlled reference(register[...0], register[1...]);\n let areEquivalent = CheckOperationsAreEqual(inputSize + 1, controlledOp, controlledReference);\n areEquivalent\n }\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the zero state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉 composed of\n /// `inputSize` qubits.\n operation CheckOperationsEquivalenceOnZeroState(\n op : (Qubit[] => Unit),\n reference : (Qubit[] => Unit is Adj),\n inputSize : Int)\n : Bool {\n Fact(inputSize > 0, \"`inputSize` must be positive\");\n use target = Qubit[inputSize];\n op(target);\n Adjoint reference(target);\n let isCorrect = CheckAllZero(target);\n ResetAll(target);\n isCorrect\n }\n\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the given initial state composed of `inputSize` qubits.\n /// The initial state is prepared by applying the `initialState` operation to the state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉.\n /// This operation introduces a control qubit to convert a global phase into a relative phase to be able to detect it.\n /// `initialState` operation should be deterministic.\n operation CheckOperationsEquivalenceOnInitialStateStrict(\n initialState : Qubit[] => Unit is Adj,\n op : (Qubit[] => Unit is Adj + Ctl),\n reference : (Qubit[] => Unit is Adj + Ctl),\n inputSize : Int\n ) : Bool {\n use (control, target) = (Qubit(), Qubit[inputSize]);\n within {\n H(control);\n initialState(target);\n }\n apply {\n Controlled op([control], target);\n Adjoint Controlled reference([control], target);\n }\n\n let isCorrect = CheckAllZero([control] + target);\n ResetAll([control] + target);\n isCorrect\n }\n\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the zero state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉 composed of\n /// `inputSize` qubits.\n /// This operation introduces a control qubit to convert a global phase into a relative phase to be able to detect\n /// it.\n operation CheckOperationsEquivalenceOnZeroStateStrict(\n op : (Qubit[] => Unit is Adj + Ctl),\n reference : (Qubit[] => Unit is Adj + Ctl),\n inputSize : Int)\n : Bool {\n Fact(inputSize > 0, \"`inputSize` must be positive\");\n CheckOperationsEquivalenceOnInitialStateStrict(qs => (), op, reference, inputSize)\n }\n\n\n /// # Summary\n /// Shows the comparison of the quantum states produced by a specific operation and a reference operation\n /// when applied to the state prepared using deterministic operation `initialState`.\n operation ShowQuantumStateComparison(\n registerSize : Int,\n initialState : Qubit[] => Unit,\n op : Qubit[] => Unit,\n reference : Qubit[] => Unit)\n : Unit {\n {\n use register = Qubit[registerSize];\n initialState(register);\n\n Message(\"Initial quantum state:\");\n DumpMachine();\n\n // Apply the reference operation and dump the simulator state\n reference(register);\n Message(\"Expected quantum state after applying the operation:\");\n DumpMachine();\n ResetAll(register);\n }\n\n {\n use register = Qubit[registerSize];\n initialState(register);\n // Apply the comparison operation and dump the simulator state\n op(register);\n Message(\"Actual quantum state after applying the operation:\");\n DumpMachine();\n ResetAll(register);\n }\n }\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the zero state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉 composed of\n /// `inputSize` qubits. If they don't, prints user feedback.\n operation CheckOperationsEquivalenceOnZeroStateWithFeedback(\n testImpl : (Qubit[] => Unit),\n refImpl : (Qubit[] => Unit is Adj),\n inputSize : Int\n ) : Bool {\n\n let isCorrect = CheckOperationsEquivalenceOnZeroState(testImpl, refImpl, inputSize);\n\n // Output different feedback to the user depending on whether the exercise was correct.\n if isCorrect {\n Message(\"Correct!\");\n } else {\n Message(\"Incorrect.\");\n ShowQuantumStateComparison(inputSize, (qs => ()), testImpl, refImpl);\n }\n isCorrect\n }\n\n\n internal operation EntangleRegisters(\n control : Qubit[],\n target : Qubit[]) : Unit is Adj + Ctl {\n Fact(\n Length(control) == Length(target),\n $\"The length of qubit registers must be the same.\");\n\n for index in IndexRange(control) {\n H(control[index]);\n CNOT(control[index], target[index]);\n }\n }\n\n\n /// # Summary\n /// Prepare a random uneven superposition state on the given qubit array.\n operation PrepDemoState(qs : Qubit[]) : Unit {\n Fact(Length(qs) <= 4, \"States with 5 qubits or more are not supported.\");\n let probs = [0.36, 0.25, 1. / 3., 1. / 5.][... Length(qs) - 1];\n for (q, prob) in Zipped(qs, probs) {\n Ry(ArcCos(Sqrt(prob)) * 2.0, q);\n }\n }\n\n\n // \"Framework\" operation for testing single-qubit tasks for distinguishing states of one qubit\n // with Bool return\n operation DistinguishTwoStates_SingleQubit(\n statePrep : ((Qubit, Int) => Unit is Adj),\n testImpl : (Qubit => Bool),\n stateNames : String[],\n preserveState : Bool) : Bool {\n\n let nTotal = 100;\n let nStates = 2;\n mutable misclassifications = [0, size=nStates];\n\n use q = Qubit();\n for _ in 1 .. nTotal {\n // get a random bit to define whether qubit will be in a state corresponding to true return (1) or to false one (0)\n // state = 0 false return\n // state = 1 true return\n let state = DrawRandomInt(0, 1);\n\n // do state prep: convert |0⟩ to outcome with false return or to outcome with true return depending on state\n statePrep(q, state);\n\n // get the solution's answer and verify if NOT a match, then differentiate what kind of mismatch\n let ans = testImpl(q);\n if ans != (state == 1) {\n set misclassifications w/= state <- misclassifications[state] + 1;\n }\n\n // If the final state is to be preserved, check if it was not modified\n if preserveState {\n Adjoint statePrep(q, state);\n if not CheckZero(q) {\n Message($\"Input quantum state {stateNames[state]} was not preserved during the measurement.\");\n Reset(q);\n return false;\n }\n } else {\n Reset(q);\n }\n }\n\n mutable totalMisclassifications = 0;\n for i in 0 .. nStates - 1 {\n if misclassifications[i] != 0 {\n set totalMisclassifications += misclassifications[i];\n Message($\"Misclassified {stateNames[i]} as {stateNames[1 - i]} in {misclassifications[i]} test runs.\");\n }\n }\n\n totalMisclassifications == 0\n }\n\n\n // \"Framework\" operation for testing multi-qubit tasks for distinguishing states of an array of qubits\n // with Int return\n operation DistinguishStates_MultiQubit(\n nQubits : Int,\n nStates : Int,\n statePrep : ((Qubit[], Int, Double) => Unit is Adj),\n testImpl : (Qubit[] => Int),\n preserveState : Bool,\n stateNames : String[]) : Bool {\n\n let nTotal = 100;\n // misclassifications will store the number of times state i has been classified as state j (dimension nStates^2)\n mutable misclassifications = [0, size = nStates * nStates];\n // unknownClassifications will store the number of times state i has been classified as some invalid state (index < 0 or >= nStates)\n mutable unknownClassifications = [0, size = nStates];\n\n use qs = Qubit[nQubits];\n for _ in 1 .. nTotal {\n // get a random integer to define the state of the qubits\n let state = DrawRandomInt(0, nStates - 1);\n // get a random rotation angle to define the exact state of the qubits\n // for some exercises, this value might be a dummy variable which does not matter\n let alpha = DrawRandomDouble(0.0, 1.0) * PI();\n\n // do state prep: convert |0...0⟩ to outcome with return equal to state\n statePrep(qs, state, alpha);\n\n // get the solution's answer and verify that it's a match, if not, increase the exact mismatch count\n let ans = testImpl(qs);\n if ans >= 0 and ans < nStates {\n // classification result is a valid state index - check if is it correct\n if ans != state {\n set misclassifications w/= ((state * nStates) + ans) <- (misclassifications[(state * nStates) + ans] + 1);\n }\n }\n else {\n // classification result is an invalid state index - file it separately\n set unknownClassifications w/= state <- (unknownClassifications[state] + 1);\n }\n\n if preserveState {\n // check that the state of the qubit after the operation is unchanged\n Adjoint statePrep(qs, state, alpha);\n if not CheckAllZero(qs) {\n Message($\"Input quantum state {stateNames[state]} was not preserved during the measurement.\");\n ResetAll(qs);\n return false;\n }\n } else {\n // we're not checking the state of the qubit after the operation\n ResetAll(qs);\n }\n }\n\n mutable totalMisclassifications = 0;\n for i in 0 .. nStates - 1 {\n for j in 0 .. nStates - 1 {\n if misclassifications[(i * nStates) + j] != 0 {\n set totalMisclassifications += misclassifications[i * nStates + j];\n Message($\"Misclassified {stateNames[i]} as {stateNames[j]} in {misclassifications[(i * nStates) + j]} test runs.\");\n }\n }\n if unknownClassifications[i] != 0 {\n set totalMisclassifications += unknownClassifications[i];\n Message($\"Misclassified {stateNames[i]} as Unknown State in {unknownClassifications[i]} test runs.\");\n }\n }\n totalMisclassifications == 0\n }\n\n\n /// # Summary\n /// Given a marking oracle acting on N inputs, and a classical function acting on N bits, \n /// checks whether the oracle effect matches that of the function on every classical input.\n operation CheckOracleImplementsFunction (\n N : Int, \n oracle : (Qubit[], Qubit) => Unit, \n f : Bool[] -> Bool\n ) : Bool {\n let size = 1 <<< N;\n use (input, target) = (Qubit[N], Qubit());\n for k in 0 .. size - 1 {\n // Prepare k-th bit vector\n let binaryLE = IntAsBoolArray(k, N);\n \n // \"binary\" is little-endian notation, so the second vector tried has qubit 0 in state 1 and the rest in state 0\n ApplyPauliFromBitString(PauliX, true, binaryLE, input);\n \n // Apply the operation\n oracle(input, target);\n \n // Calculate the expected classical result\n let val = f(binaryLE);\n\n // Apply operations that will revert the qubits to the 0 state if the oracle acted correctly.\n if val {\n X(target);\n }\n ApplyPauliFromBitString(PauliX, true, binaryLE, input);\n\n if not CheckAllZero(input + [target]) {\n Message($\"Unexpected result on input {binaryLE}.\");\n if not CheckAllZero(input) {\n Message(\"The state of the input qubits changed, or they ended up entangled with the target qubit.\");\n Message(\"The state of the system after oracle application:\");\n DumpMachine();\n } else {\n Message($\"Expected result `{val}`, got `{not val}`.\");\n }\n ResetAll(input + [target]);\n return false;\n }\n }\n return true;\n } \n}\n"
|
|
7262
|
+
"code": "// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nnamespace Microsoft.Quantum.Katas {\n open Microsoft.Quantum.Arrays;\n open Microsoft.Quantum.Convert;\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Math;\n open Microsoft.Quantum.Random;\n\n /// # Summary\n /// Given two operations, checks whether they act identically (including global phase) for all input states.\n /// This is done through controlled versions of the operations instead of plain ones which convert the global phase\n /// into a relative phase that can be detected.\n operation CheckOperationsAreEqualStrict(\n inputSize : Int,\n op : (Qubit[] => Unit is Adj + Ctl),\n reference : (Qubit[] => Unit is Adj + Ctl))\n : Bool {\n Fact(inputSize > 0, \"`inputSize` must be positive\");\n let controlledOp = register => Controlled op(register[...0], register[1...]);\n let controlledReference = register => Controlled reference(register[...0], register[1...]);\n let areEquivalent = CheckOperationsAreEqual(inputSize + 1, controlledOp, controlledReference);\n areEquivalent\n }\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the zero state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉 composed of\n /// `inputSize` qubits.\n operation CheckOperationsEquivalenceOnZeroState(\n op : (Qubit[] => Unit),\n reference : (Qubit[] => Unit is Adj),\n inputSize : Int)\n : Bool {\n Fact(inputSize > 0, \"`inputSize` must be positive\");\n use target = Qubit[inputSize];\n op(target);\n Adjoint reference(target);\n let isCorrect = CheckAllZero(target);\n ResetAll(target);\n isCorrect\n }\n\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the given initial state composed of `inputSize` qubits.\n /// The initial state is prepared by applying the `initialState` operation to the state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉.\n /// This operation introduces a control qubit to convert a global phase into a relative phase to be able to detect it.\n /// `initialState` operation should be deterministic.\n operation CheckOperationsEquivalenceOnInitialStateStrict(\n initialState : Qubit[] => Unit is Adj,\n op : (Qubit[] => Unit is Adj + Ctl),\n reference : (Qubit[] => Unit is Adj + Ctl),\n inputSize : Int\n ) : Bool {\n use (control, target) = (Qubit(), Qubit[inputSize]);\n within {\n H(control);\n initialState(target);\n }\n apply {\n Controlled op([control], target);\n Adjoint Controlled reference([control], target);\n }\n\n let isCorrect = CheckAllZero([control] + target);\n ResetAll([control] + target);\n isCorrect\n }\n\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the zero state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉 composed of\n /// `inputSize` qubits.\n /// This operation introduces a control qubit to convert a global phase into a relative phase to be able to detect\n /// it.\n operation CheckOperationsEquivalenceOnZeroStateStrict(\n op : (Qubit[] => Unit is Adj + Ctl),\n reference : (Qubit[] => Unit is Adj + Ctl),\n inputSize : Int)\n : Bool {\n Fact(inputSize > 0, \"`inputSize` must be positive\");\n CheckOperationsEquivalenceOnInitialStateStrict(qs => (), op, reference, inputSize)\n }\n\n\n /// # Summary\n /// Shows the comparison of the quantum states produced by a specific operation and a reference operation\n /// when applied to the state prepared using deterministic operation `initialState`.\n operation ShowQuantumStateComparison(\n registerSize : Int,\n initialState : Qubit[] => Unit,\n op : Qubit[] => Unit,\n reference : Qubit[] => Unit)\n : Unit {\n {\n use register = Qubit[registerSize];\n initialState(register);\n\n Message(\"Initial quantum state:\");\n DumpMachine();\n\n // Apply the reference operation and dump the simulator state\n reference(register);\n Message(\"Expected quantum state after applying the operation:\");\n DumpMachine();\n ResetAll(register);\n }\n\n {\n use register = Qubit[registerSize];\n initialState(register);\n // Apply the comparison operation and dump the simulator state\n op(register);\n Message(\"Actual quantum state after applying the operation:\");\n DumpMachine();\n ResetAll(register);\n }\n }\n\n /// # Summary\n /// Given two operations, checks whether they act identically on the zero state |0〉 ⊗ |0〉 ⊗ ... ⊗ |0〉 composed of\n /// `inputSize` qubits. If they don't, prints user feedback.\n operation CheckOperationsEquivalenceOnZeroStateWithFeedback(\n testImpl : (Qubit[] => Unit),\n refImpl : (Qubit[] => Unit is Adj),\n inputSize : Int\n ) : Bool {\n\n let isCorrect = CheckOperationsEquivalenceOnZeroState(testImpl, refImpl, inputSize);\n\n // Output different feedback to the user depending on whether the exercise was correct.\n if isCorrect {\n Message(\"Correct!\");\n } else {\n Message(\"Incorrect.\");\n ShowQuantumStateComparison(inputSize, (qs => ()), testImpl, refImpl);\n }\n isCorrect\n }\n\n\n internal operation EntangleRegisters(\n control : Qubit[],\n target : Qubit[]) : Unit is Adj + Ctl {\n Fact(\n Length(control) == Length(target),\n $\"The length of qubit registers must be the same.\");\n\n for index in IndexRange(control) {\n H(control[index]);\n CNOT(control[index], target[index]);\n }\n }\n\n\n /// # Summary\n /// Prepare a random uneven superposition state on the given qubit array.\n operation PrepDemoState(qs : Qubit[]) : Unit {\n Fact(Length(qs) <= 4, \"States with 5 qubits or more are not supported.\");\n let probs = [0.36, 0.25, 1. / 3., 1. / 5.][... Length(qs) - 1];\n for (q, prob) in Zipped(qs, probs) {\n Ry(ArcCos(Sqrt(prob)) * 2.0, q);\n }\n }\n\n\n // \"Framework\" operation for testing single-qubit tasks for distinguishing states of one qubit\n // with Bool return\n operation DistinguishTwoStates_SingleQubit(\n statePrep : ((Qubit, Int) => Unit is Adj),\n testImpl : (Qubit => Bool),\n stateNames : String[],\n preserveState : Bool) : Bool {\n\n let nTotal = 100;\n let nStates = 2;\n mutable misclassifications = [0, size=nStates];\n\n use q = Qubit();\n for _ in 1 .. nTotal {\n // get a random bit to define whether qubit will be in a state corresponding to true return (1) or to false one (0)\n // state = 0 false return\n // state = 1 true return\n let state = DrawRandomInt(0, 1);\n\n // do state prep: convert |0⟩ to outcome with false return or to outcome with true return depending on state\n statePrep(q, state);\n\n // get the solution's answer and verify if NOT a match, then differentiate what kind of mismatch\n let ans = testImpl(q);\n if ans != (state == 1) {\n set misclassifications w/= state <- misclassifications[state] + 1;\n }\n\n // If the final state is to be preserved, check if it was not modified\n if preserveState {\n Adjoint statePrep(q, state);\n if not CheckZero(q) {\n Message($\"Input quantum state {stateNames[state]} was not preserved during the measurement.\");\n Reset(q);\n return false;\n }\n } else {\n Reset(q);\n }\n }\n\n mutable totalMisclassifications = 0;\n for i in 0 .. nStates - 1 {\n if misclassifications[i] != 0 {\n set totalMisclassifications += misclassifications[i];\n Message($\"Misclassified {stateNames[i]} as {stateNames[1 - i]} in {misclassifications[i]} test runs.\");\n }\n }\n\n totalMisclassifications == 0\n }\n\n\n // \"Framework\" operation for testing multi-qubit tasks for distinguishing states of an array of qubits\n // with Int return\n operation DistinguishStates_MultiQubit(\n nQubits : Int,\n nStates : Int,\n statePrep : ((Qubit[], Int, Double) => Unit is Adj),\n testImpl : (Qubit[] => Int),\n preserveState : Bool,\n stateNames : String[]) : Bool {\n\n let nTotal = 100;\n // misclassifications will store the number of times state i has been classified as state j (dimension nStates^2)\n mutable misclassifications = [0, size = nStates * nStates];\n // unknownClassifications will store the number of times state i has been classified as some invalid state (index < 0 or >= nStates)\n mutable unknownClassifications = [0, size = nStates];\n\n use qs = Qubit[nQubits];\n for _ in 1 .. nTotal {\n // get a random integer to define the state of the qubits\n let state = DrawRandomInt(0, nStates - 1);\n // get a random rotation angle to define the exact state of the qubits\n // for some exercises, this value might be a dummy variable which does not matter\n let alpha = DrawRandomDouble(0.0, 1.0) * PI();\n\n // do state prep: convert |0...0⟩ to outcome with return equal to state\n statePrep(qs, state, alpha);\n\n // get the solution's answer and verify that it's a match, if not, increase the exact mismatch count\n let ans = testImpl(qs);\n if ans >= 0 and ans < nStates {\n // classification result is a valid state index - check if is it correct\n if ans != state {\n set misclassifications w/= ((state * nStates) + ans) <- (misclassifications[(state * nStates) + ans] + 1);\n }\n }\n else {\n // classification result is an invalid state index - file it separately\n set unknownClassifications w/= state <- (unknownClassifications[state] + 1);\n }\n\n if preserveState {\n // check that the state of the qubit after the operation is unchanged\n Adjoint statePrep(qs, state, alpha);\n if not CheckAllZero(qs) {\n Message($\"Input quantum state {stateNames[state]} was not preserved during the measurement.\");\n ResetAll(qs);\n return false;\n }\n } else {\n // we're not checking the state of the qubit after the operation\n ResetAll(qs);\n }\n }\n\n mutable totalMisclassifications = 0;\n for i in 0 .. nStates - 1 {\n for j in 0 .. nStates - 1 {\n if misclassifications[(i * nStates) + j] != 0 {\n set totalMisclassifications += misclassifications[i * nStates + j];\n Message($\"Misclassified {stateNames[i]} as {stateNames[j]} in {misclassifications[(i * nStates) + j]} test runs.\");\n }\n }\n if unknownClassifications[i] != 0 {\n set totalMisclassifications += unknownClassifications[i];\n Message($\"Misclassified {stateNames[i]} as Unknown State in {unknownClassifications[i]} test runs.\");\n }\n }\n totalMisclassifications == 0\n }\n\n // Helper function to convert a boolean array to its ket state representation\n function BoolArrayAsKetState (bits : Bool[]) : String {\n mutable stateName = \"|\";\n for i in 0 .. Length(bits) - 1 {\n set stateName += (bits[i] ? \"1\" | \"0\");\n }\n\n return stateName + \"⟩\";\n }\n\n // Helper function to convert an array of bit strings to its ket state representation\n function IntArrayAsStateName (\n qubits : Int,\n bitStrings : Bool[][]\n ) : String {\n mutable statename = \"\";\n for i in 0 .. Length(bitStrings) - 1 {\n if i > 0 {\n set statename += \" + \";\n }\n set statename += BoolArrayAsKetState(bitStrings[i]);\n }\n\n return statename;\n }\n\n /// # Summary\n /// Given a marking oracle acting on N inputs, and a classical function acting on N bits, \n /// checks whether the oracle effect matches that of the function on every classical input.\n operation CheckOracleImplementsFunction (\n N : Int, \n oracle : (Qubit[], Qubit) => Unit, \n f : Bool[] -> Bool\n ) : Bool {\n let size = 1 <<< N;\n use (input, target) = (Qubit[N], Qubit());\n for k in 0 .. size - 1 {\n // Prepare k-th bit vector\n let binaryLE = IntAsBoolArray(k, N);\n \n // \"binary\" is little-endian notation, so the second vector tried has qubit 0 in state 1 and the rest in state 0\n ApplyPauliFromBitString(PauliX, true, binaryLE, input);\n \n // Apply the operation\n oracle(input, target);\n \n // Calculate the expected classical result\n let val = f(binaryLE);\n\n // Apply operations that will revert the qubits to the 0 state if the oracle acted correctly.\n if val {\n X(target);\n }\n ApplyPauliFromBitString(PauliX, true, binaryLE, input);\n\n if not CheckAllZero(input + [target]) {\n Message($\"Unexpected result on input {BoolArrayAsKetState(binaryLE)}.\");\n if not CheckAllZero(input) {\n Message(\"The state of the input qubits changed, or they ended up entangled with the target qubit.\");\n Message(\"The state of the system after oracle application:\");\n DumpMachine();\n } else {\n Message($\"Expected result `{val}`, got `{not val}`.\");\n }\n ResetAll(input + [target]);\n return false;\n }\n }\n return true;\n } \n}\n"
|
|
7196
7263
|
},
|
|
7197
7264
|
{
|
|
7198
7265
|
"id": "complex_arithmetic__powers_of_i__Verification.qs",
|
|
7199
7266
|
"code": "namespace Kata.Verification {\n \n operation PowersOfI_Reference(n : Int) : Int{\n // If n is divisible by 4\n if n % 4 == 0 { \n return 1;\n } else {\n return -1;\n }\n }\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n for n in -20 .. 2 .. 20 { \n let expected = PowersOfI_Reference(n);\n let actual = Kata.PowersOfI(n);\n if expected != actual {\n Message(\"Incorrect.\");\n Message($\"Result of exponentiation doesn't match expected value: expected i^({n}) = {expected}, got {actual}\");\n return false; \n }\n }\n Message(\"Correct!\");\n return true; \n }\n}\n"
|
|
7200
7267
|
},
|
|
7201
|
-
{
|
|
7202
|
-
"id": "complex_arithmetic__complex_addition__Verification.qs",
|
|
7203
|
-
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Math;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n CheckTwoComplexOpsAreSame(Kata.ComplexAdd, PlusC)\n }\n}\n"
|
|
7204
|
-
},
|
|
7205
7268
|
{
|
|
7206
7269
|
"id": "complex_arithmetic__Common.qs",
|
|
7207
7270
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Math;\n open Microsoft.Quantum.Random; \n open Microsoft.Quantum.Convert;\n\n operation DrawRandomComplex() : Complex {\n // Generates a random complex number. \n let real = DrawRandomDouble(-10., 10.);\n let imag = DrawRandomDouble(-10., 10.);\n return Complex(real, imag);\n }\n\n function ComplexAsString(x : Complex) : String {\n if x::Imag < 0.0 {\n $\"{x::Real} - {AbsD(x::Imag)}i\"\n } else {\n $\"{x::Real} + {x::Imag}i\"\n }\n }\n\n function ComplexPolarAsString(x : ComplexPolar) : String {\n $\"{x::Magnitude} * exp({x::Argument}i)\"\n }\n\n operation CheckTwoComplexOpsAreSame(sol : (Complex, Complex) -> Complex, ref : (Complex, Complex) -> Complex) : Bool {\n for _ in 0 .. 24 {\n let x = DrawRandomComplex();\n let y = DrawRandomComplex();\n\n let expected = ref(x, y);\n let actual = sol(x, y);\n \n if not ComplexEqual(expected, actual) {\n Message(\"Incorrect\");\n Message($\"For x = {ComplexAsString(x)}, y = {ComplexAsString(y)} expected return {ComplexAsString(expected)}, actual return {ComplexAsString(actual)}.\");\n return false;\n }\n }\n\n Message(\"Correct!\");\n return true;\n }\n\n function ComplexEqual(x : Complex, y : Complex) : Bool { \n // Tests two complex numbers for equality.\n AbsD(x::Real - y::Real) <= 0.001 and AbsD(x::Imag - y::Imag) <= 0.001\n }\n\n function ComplexPolarEqual(x : ComplexPolar, y : ComplexPolar) : Bool { \n // Tests two complex polar numbers for equality.\n AbsD(x::Magnitude - y::Magnitude) <= 0.001 and AbsD(x::Argument - y::Argument) <= 0.001\n }\n}\n"
|
|
7208
7271
|
},
|
|
7272
|
+
{
|
|
7273
|
+
"id": "complex_arithmetic__complex_addition__Verification.qs",
|
|
7274
|
+
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Math;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n CheckTwoComplexOpsAreSame(Kata.ComplexAdd, PlusC)\n }\n}\n"
|
|
7275
|
+
},
|
|
7209
7276
|
{
|
|
7210
7277
|
"id": "complex_arithmetic__complex_multiplication__Verification.qs",
|
|
7211
7278
|
"code": "namespace Kata.Verification { \n open Microsoft.Quantum.Math;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n CheckTwoComplexOpsAreSame(Kata.ComplexMult, TimesC)\n }\n}"
|
|
@@ -7554,6 +7621,10 @@ export default {
|
|
|
7554
7621
|
"id": "distinguishing_states__zero_one__Verification.qs",
|
|
7555
7622
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Katas;\n\n operation StatePrep_IsQubitOne (q : Qubit, state : Int) : Unit is Adj {\n if state == 1 {\n // convert |0⟩ to |1⟩\n X(q);\n }\n }\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n let isCorrect = DistinguishTwoStates_SingleQubit(\n StatePrep_IsQubitOne,\n Kata.IsQubitOne,\n [\"|0⟩\", \"|1⟩\"],\n false);\n if isCorrect {\n Message(\"Correct!\");\n } else {\n Message(\"Incorrect.\");\n }\n isCorrect\n }\n\n}\n"
|
|
7556
7623
|
},
|
|
7624
|
+
{
|
|
7625
|
+
"id": "distinguishing_states__Common.qs",
|
|
7626
|
+
"code": "namespace Kata.Verification{\n open Microsoft.Quantum.Arrays;\n open Microsoft.Quantum.Convert;\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Intrinsic;\n open Microsoft.Quantum.Math;\n\n operation StatePrep_BasisStateMeasurement(\n qs : Qubit[],\n state : Int,\n dummyVar : Double\n ) : Unit is Adj {\n if state / 2 == 1 {\n // |10⟩ or |11⟩\n X(qs[0]);\n }\n\n if state % 2 == 1 {\n // |01⟩ or |11⟩\n X(qs[1]);\n }\n }\n\n operation WState_Arbitrary_Reference(qs : Qubit[]) : Unit is Adj + Ctl {\n let N = Length(qs);\n\n if N == 1 {\n // base case of recursion: |1⟩\n X(qs[0]);\n } else {\n // |W_N⟩ = |0⟩|W_(N-1)⟩ + |1⟩|0...0⟩\n // do a rotation on the first qubit to split it into |0⟩ and |1⟩ with proper weights\n // |0⟩ -> sqrt((N-1)/N) |0⟩ + 1/sqrt(N) |1⟩\n let theta = ArcSin(1.0 / Sqrt(IntAsDouble(N)));\n Ry(2.0 * theta, qs[0]);\n\n // do a zero-controlled W-state generation for qubits 1..N-1\n X(qs[0]);\n Controlled WState_Arbitrary_Reference(qs[0..0], qs[1..N - 1]);\n X(qs[0]);\n }\n }\n\n function StatePrep_FindFirstDiff (\n bits1 : Bool[],\n bits2 : Bool[]\n ) : Int {\n for i in 0 .. Length(bits1) - 1 {\n if bits1[i] != bits2[i] {\n return i;\n }\n }\n\n return -1;\n }\n\n operation StatePrep_SuperpositionMeasurement (\n qs : Qubit[],\n bits1 : Bool[][],\n bits2 : Bool[][],\n state : Int,\n dummyVar: Double\n ) : Unit is Adj {\n let bits = state == 0 ? bits1 | bits2;\n StatePrep_BitstringSuperposition(qs, bits);\n }\n\n // A combination of tasks 14 and 15 from the Superposition kata\n operation StatePrep_BitstringSuperposition (\n qs : Qubit[],\n bits : Bool[][]\n ) : Unit is Adj + Ctl {\n let L = Length(bits);\n Fact(L == 1 or L == 2 or L == 4, \"State preparation only supports arrays of 1, 2 or 4 bit strings.\");\n if L == 1 {\n for i in 0 .. Length(qs) - 1 {\n if bits[0][i] {\n X(qs[i]);\n }\n }\n }\n if L == 2 {\n // find the index of the first bit at which the bit strings are different\n let firstDiff = StatePrep_FindFirstDiff(bits[0], bits[1]);\n\n // Hadamard corresponding qubit to create superposition\n H(qs[firstDiff]);\n\n // iterate through the bit strings again setting the final state of qubits\n for i in 0 .. Length(qs) - 1 {\n if bits[0][i] == bits[1][i] {\n // if two bits are the same, apply X or nothing\n if bits[0][i] {\n X(qs[i]);\n }\n } else {\n // if two bits are different, set their difference using CNOT\n if i > firstDiff {\n CNOT(qs[firstDiff], qs[i]);\n if bits[0][i] != bits[0][firstDiff] {\n X(qs[i]);\n }\n }\n }\n }\n }\n if L == 4 {\n let N = Length(qs);\n\n use anc = Qubit[2];\n // Put two ancillas into equal superposition of 2-qubit basis states\n ApplyToEachCA(H, anc);\n\n // Set up the right pattern on the main qubits with control on ancillas\n for i in 0 .. 3 {\n for j in 0 .. N - 1 {\n if bits[i][j] {\n ApplyControlledOnInt(i, X, anc, qs[j]);\n }\n }\n }\n\n // Uncompute the ancillas, using patterns on main qubits as control\n for i in 0 .. 3 {\n if i % 2 == 1 {\n ApplyControlledOnBitString(bits[i], X, qs, anc[0]);\n }\n if i / 2 == 1 {\n ApplyControlledOnBitString(bits[i], X, qs, anc[1]);\n }\n }\n }\n }\n}\n"
|
|
7627
|
+
},
|
|
7557
7628
|
{
|
|
7558
7629
|
"id": "distinguishing_states__plus_minus__Verification.qs",
|
|
7559
7630
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Katas;\n\n operation StatePrep_IsQubitPlus(q : Qubit, state : Int) : Unit is Adj {\n if state == 1 {\n // convert |0⟩ to |+⟩\n H(q);\n } else {\n // convert |0⟩ to |-⟩\n X(q);\n H(q);\n }\n }\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n let isCorrect = DistinguishTwoStates_SingleQubit(\n StatePrep_IsQubitPlus,\n Kata.IsQubitPlus,\n [\"|-⟩\", \"|+⟩\"],\n false\n );\n if isCorrect {\n Message(\"Correct!\");\n } else {\n Message(\"Incorrect.\");\n }\n isCorrect\n }\n}\n"
|
|
@@ -7570,10 +7641,6 @@ export default {
|
|
|
7570
7641
|
"id": "distinguishing_states__four_basis_states__Verification.qs",
|
|
7571
7642
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Convert;\n open Microsoft.Quantum.Math;\n open Microsoft.Quantum.Katas;\n\n operation CheckSolution() : Bool {\n let isCorrect = DistinguishStates_MultiQubit(2, 4, StatePrep_BasisStateMeasurement, Kata.BasisStateMeasurement, false, [\"|00⟩\", \"|01⟩\", \"|10⟩\", \"|11⟩\"]);\n if (isCorrect) {\n Message(\"Correct!\");\n } else {\n Message(\"Incorrect.\");\n }\n\n isCorrect\n }\n}\n"
|
|
7572
7643
|
},
|
|
7573
|
-
{
|
|
7574
|
-
"id": "distinguishing_states__Common.qs",
|
|
7575
|
-
"code": "namespace Kata.Verification{\n open Microsoft.Quantum.Arrays;\n open Microsoft.Quantum.Convert;\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Intrinsic;\n open Microsoft.Quantum.Math;\n\n operation StatePrep_BasisStateMeasurement(\n qs : Qubit[],\n state : Int,\n dummyVar : Double\n ) : Unit is Adj {\n if state / 2 == 1 {\n // |10⟩ or |11⟩\n X(qs[0]);\n }\n\n if state % 2 == 1 {\n // |01⟩ or |11⟩\n X(qs[1]);\n }\n }\n\n operation WState_Arbitrary_Reference(qs : Qubit[]) : Unit is Adj + Ctl {\n let N = Length(qs);\n\n if N == 1 {\n // base case of recursion: |1⟩\n X(qs[0]);\n } else {\n // |W_N⟩ = |0⟩|W_(N-1)⟩ + |1⟩|0...0⟩\n // do a rotation on the first qubit to split it into |0⟩ and |1⟩ with proper weights\n // |0⟩ -> sqrt((N-1)/N) |0⟩ + 1/sqrt(N) |1⟩\n let theta = ArcSin(1.0 / Sqrt(IntAsDouble(N)));\n Ry(2.0 * theta, qs[0]);\n\n // do a zero-controlled W-state generation for qubits 1..N-1\n X(qs[0]);\n Controlled WState_Arbitrary_Reference(qs[0..0], qs[1..N - 1]);\n X(qs[0]);\n }\n }\n\n // Helper function to convert a boolean array to its ket state representation\n function BoolArrayAsKetState (bits : Bool[]) : String {\n mutable stateName = \"|\";\n for i in 0 .. Length(bits) - 1 {\n set stateName += (bits[i] ? \"1\" | \"0\");\n }\n\n return stateName + \"⟩\";\n }\n\n // Helper function to convert an array of bit strings to its ket state representation\n function IntArrayAsStateName (\n qubits : Int,\n bitStrings : Bool[][]\n ) : String {\n mutable statename = \"\";\n for i in 0 .. Length(bitStrings) - 1 {\n if i > 0 {\n set statename += \" + \";\n }\n set statename += BoolArrayAsKetState(bitStrings[i]);\n }\n\n return statename;\n }\n\n function StatePrep_FindFirstDiff (\n bits1 : Bool[],\n bits2 : Bool[]\n ) : Int {\n for i in 0 .. Length(bits1) - 1 {\n if bits1[i] != bits2[i] {\n return i;\n }\n }\n\n return -1;\n }\n\n operation StatePrep_SuperpositionMeasurement (\n qs : Qubit[],\n bits1 : Bool[][],\n bits2 : Bool[][],\n state : Int,\n dummyVar: Double\n ) : Unit is Adj {\n let bits = state == 0 ? bits1 | bits2;\n StatePrep_BitstringSuperposition(qs, bits);\n }\n\n // A combination of tasks 14 and 15 from the Superposition kata\n operation StatePrep_BitstringSuperposition (\n qs : Qubit[],\n bits : Bool[][]\n ) : Unit is Adj + Ctl {\n let L = Length(bits);\n Fact(L == 1 or L == 2 or L == 4, \"State preparation only supports arrays of 1, 2 or 4 bit strings.\");\n if L == 1 {\n for i in 0 .. Length(qs) - 1 {\n if bits[0][i] {\n X(qs[i]);\n }\n }\n }\n if L == 2 {\n // find the index of the first bit at which the bit strings are different\n let firstDiff = StatePrep_FindFirstDiff(bits[0], bits[1]);\n\n // Hadamard corresponding qubit to create superposition\n H(qs[firstDiff]);\n\n // iterate through the bit strings again setting the final state of qubits\n for i in 0 .. Length(qs) - 1 {\n if bits[0][i] == bits[1][i] {\n // if two bits are the same, apply X or nothing\n if bits[0][i] {\n X(qs[i]);\n }\n } else {\n // if two bits are different, set their difference using CNOT\n if i > firstDiff {\n CNOT(qs[firstDiff], qs[i]);\n if bits[0][i] != bits[0][firstDiff] {\n X(qs[i]);\n }\n }\n }\n }\n }\n if L == 4 {\n let N = Length(qs);\n\n use anc = Qubit[2];\n // Put two ancillas into equal superposition of 2-qubit basis states\n ApplyToEachCA(H, anc);\n\n // Set up the right pattern on the main qubits with control on ancillas\n for i in 0 .. 3 {\n for j in 0 .. N - 1 {\n if bits[i][j] {\n ApplyControlledOnInt(i, X, anc, qs[j]);\n }\n }\n }\n\n // Uncompute the ancillas, using patterns on main qubits as control\n for i in 0 .. 3 {\n if i % 2 == 1 {\n ApplyControlledOnBitString(bits[i], X, qs, anc[0]);\n }\n if i / 2 == 1 {\n ApplyControlledOnBitString(bits[i], X, qs, anc[1]);\n }\n }\n }\n }\n}\n"
|
|
7576
|
-
},
|
|
7577
7644
|
{
|
|
7578
7645
|
"id": "distinguishing_states__two_basis_states_bit_strings__Verification.qs",
|
|
7579
7646
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Katas;\n\n operation StatePrep_Bitstring(\n qs : Qubit[],\n bits : Bool[]\n ) : Unit is Adj {\n for i in 0 .. Length(qs) - 1 {\n if bits[i] {\n X(qs[i]);\n }\n }\n }\n\n operation StatePrep_TwoBitstringsMeasurement(\n qs : Qubit[],\n bits1 : Bool[],\n bits2 : Bool[],\n state : Int,\n dummyVar : Double\n ) : Unit is Adj {\n let bits = state == 0 ? bits1 | bits2;\n StatePrep_Bitstring(qs, bits);\n }\n\n operation CheckTwoBitstringsMeasurement(b1 : Bool[], b2 : Bool[]) : Bool {\n let stateNames = [BoolArrayAsKetState(b1), BoolArrayAsKetState(b2)];\n let isCorrect = DistinguishStates_MultiQubit(\n Length(b1),\n 2,\n StatePrep_TwoBitstringsMeasurement(_, b1, b2, _, _),\n Kata.TwoBitstringsMeasurement(_, b1, b2),\n false,\n stateNames\n );\n\n if not isCorrect {\n Message($\"Incorrect for [{stateNames[0]}, {stateNames[1]}].\");\n }\n\n return isCorrect;\n }\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n for (b1, b2) in [\n ([false, true], [true, false]),\n ([true, true, false], [false, true, true]),\n ([false, true, true, false], [false, true, true, true]),\n ([true, false, false, false], [true, false, true, true])\n ] {\n if not CheckTwoBitstringsMeasurement(b1, b2) {\n return false;\n }\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|
|
@@ -7708,16 +7775,16 @@ export default {
|
|
|
7708
7775
|
},
|
|
7709
7776
|
{
|
|
7710
7777
|
"id": "key_distribution__random_array__Verification.qs",
|
|
7711
|
-
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Arrays;\n open Microsoft.Quantum.Convert;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n // The test only checks that the operation returns an array of correct length\n // and that it's not always the same. It doesn't analyze the distribution of true and false elements.\n let N =
|
|
7712
|
-
},
|
|
7713
|
-
{
|
|
7714
|
-
"id": "key_distribution__prepare_qubits__Verification.qs",
|
|
7715
|
-
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Diagnostics;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n for N in 2 .. 10 {\n let (bases, bits) = (RandomArray(N), RandomArray(N));\n use qs = Qubit[N];\n Kata.PrepareQubits(qs, bases, bits);\n Adjoint PrepareQubits_Reference(qs, bases, bits);\n for i in 0 .. N - 1 {\n if not CheckZero(qs[i]) {\n Message($\"Qubit qs[{i}] prepared in incorrect state.\");\n Message($\"Expected state {StateToString(bases[i], bits[i])}; actual state\");\n PrepareQubits_Reference([qs[i]], [bases[i]], [bits[i]]);\n DumpRegister([qs[i]]);\n ResetAll(qs);\n return false;\n }\n }\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|
|
7778
|
+
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Arrays;\n open Microsoft.Quantum.Convert;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n // The test only checks that the operation returns an array of correct length\n // and that it's not always the same. It doesn't analyze the distribution of true and false elements.\n let N = 20;\n let randomArrays = ForEach(Kata.RandomArray, [N, size = 10]);\n\n for array in randomArrays {\n if Length(array) != N {\n Message($\"Returned array should have length {N}, and it had length {Length(array)}.\");\n return false;\n }\n }\n\n let randomInts = Mapped(BoolArrayAsInt, randomArrays);\n mutable allSame = true;\n for int in randomInts {\n if int != randomInts[0] {\n set allSame = false;\n }\n }\n if allSame {\n Message($\"Random generation should not return a fixed array.\");\n return false;\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|
|
7716
7779
|
},
|
|
7717
7780
|
{
|
|
7718
7781
|
"id": "key_distribution__Common.qs",
|
|
7719
7782
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Arrays;\n open Microsoft.Quantum.Random;\n\n operation RandomArray(N : Int) : Bool[] {\n ForEach(x => DrawRandomInt(0, 1) == 0, [0, size = N])\n }\n\n operation BasisToString(base : Bool) : String {\n base ? \"Hadamard\" | \"computational\"\n }\n\n operation StateToString(base : Bool, bit : Bool) : String {\n if base { // ∣+⟩ / ∣-⟩\n return bit ? \"|-⟩\" | \"|+⟩\";\n } else { // ∣0⟩ / ∣1⟩\n return bit ? \"|1⟩\" | \"|0⟩\";\n }\n }\n\n operation PrepareQubits_Reference(qs : Qubit[], bases : Bool[], bits : Bool[]) : Unit is Adj {\n for i in 0 .. Length(qs) - 1 {\n if bits[i] {\n X(qs[i]);\n }\n if bases[i] {\n H(qs[i]);\n }\n }\n }\n}\n"
|
|
7720
7783
|
},
|
|
7784
|
+
{
|
|
7785
|
+
"id": "key_distribution__prepare_qubits__Verification.qs",
|
|
7786
|
+
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Diagnostics;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n for N in 2 .. 10 {\n let (bases, bits) = (RandomArray(N), RandomArray(N));\n use qs = Qubit[N];\n Kata.PrepareQubits(qs, bases, bits);\n Adjoint PrepareQubits_Reference(qs, bases, bits);\n for i in 0 .. N - 1 {\n if not CheckZero(qs[i]) {\n Message($\"Qubit qs[{i}] prepared in incorrect state.\");\n Message($\"Expected state {StateToString(bases[i], bits[i])}; actual state\");\n PrepareQubits_Reference([qs[i]], [bases[i]], [bits[i]]);\n DumpRegister([qs[i]]);\n ResetAll(qs);\n return false;\n }\n }\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|
|
7787
|
+
},
|
|
7721
7788
|
{
|
|
7722
7789
|
"id": "key_distribution__measure_qubits__Verification.qs",
|
|
7723
7790
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Diagnostics;\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n for N in 2 .. 10 {\n let (bases, bits) = (RandomArray(N), RandomArray(N));\n use qs = Qubit[N];\n PrepareQubits_Reference(qs, bases, bits);\n let res = Kata.MeasureQubits(qs, bases);\n ResetAll(qs);\n\n if Length(res) != N {\n Message($\"The returned array should have length {N}, same as the inputs, and it had length {Length(res)}.\");\n return false;\n }\n\n for i in 0 .. N - 1 {\n if res[i] != bits[i] {\n Message($\"Qubit qs[{i}] measured in incorrect basis.\");\n Message($\"When measuring state {StateToString(bases[i], bits[i])} in the {BasisToString(bases[i])} basis, \" +\n $\"expected result is {bits[i]}, got {res[i]}.\");\n return false;\n }\n }\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|
|
@@ -7934,6 +8001,10 @@ export default {
|
|
|
7934
8001
|
"id": "qec_shor__zz_measurement__Verification.qs",
|
|
7935
8002
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Katas;\n\n operation StatePrep_ZZMeasurement(qs : Qubit[], state : Int, alpha : Double) : Unit is Adj {\n // prep cos(alpha) * |0..0⟩ + sin(alpha) * |1..1⟩\n Ry(2.0 * alpha, qs[0]);\n CNOT(qs[0], qs[1]);\n\n if state == 1 {\n X(qs[0]);\n }\n }\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n let isCorrect = DistinguishStates_MultiQubit(\n 2,\n 2,\n StatePrep_ZZMeasurement,\n Kata.ZZMeasurement,\n true,\n [\"α|00⟩ + β|11⟩\", \"α|01⟩ + β|10⟩\"]);\n\n if (isCorrect) {\n Message(\"Correct!\");\n } else {\n Message(\"Incorrect.\");\n }\n\n isCorrect\n }\n}\n"
|
|
7936
8003
|
},
|
|
8004
|
+
{
|
|
8005
|
+
"id": "qec_shor__Common.qs",
|
|
8006
|
+
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Math;\n open Microsoft.Quantum.Random;\n\n operation CheckErrorDetection(\n n : Int,\n encode : (Qubit[] => Unit is Adj),\n error : (Qubit => Unit is Adj),\n detect : (Qubit[] => Int)\n ) : Bool {\n for err_ind in -1 .. n - 1 {\n for _ in 1 .. 10 {\n use qs = Qubit[n];\n let theta = DrawRandomDouble(0.0, 1.0);\n within {\n // Prepare logical state on first qubit\n Ry(2.0 * theta * PI(), qs[0]);\n // Encode the state in multiple qubits\n encode(qs);\n // Introduce X error\n if err_ind > -1 {\n error(qs[err_ind]);\n }\n } apply {\n // Call solution to detect index\n let detected = detect(qs);\n // Check that it is correct\n if detected != err_ind {\n Message(\"Incorrect.\");\n let actual = err_ind == -1 ? \"No error happened\" | $\"Error happened on qubit {err_ind}\";\n Message($\"{actual}, but solution returned {detected}\");\n ResetAll(qs);\n return false;\n }\n }\n // Check that the state was not modified by the solution\n if not CheckAllZero(qs) {\n Message(\"Incorrect.\");\n Message(\"The state of the qubits changed after the solution was applied\");\n ResetAll(qs);\n return false;\n }\n }\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|
|
8007
|
+
},
|
|
7937
8008
|
{
|
|
7938
8009
|
"id": "qec_shor__xx_measurement__Verification.qs",
|
|
7939
8010
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Katas;\n\n operation StatePrep_XXMeasurement(qs : Qubit[], state : Int, alpha : Double) : Unit is Adj {\n // prep cos(alpha) * |0..0⟩ + sin(alpha) * |1..1⟩\n Ry(2.0 * alpha, qs[0]);\n CNOT(qs[0], qs[1]);\n\n if state == 1 {\n X(qs[0]);\n }\n\n ApplyToEachA(H, qs);\n }\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n let isCorrect = DistinguishStates_MultiQubit(\n 2,\n 2,\n StatePrep_XXMeasurement,\n Kata.XXMeasurement,\n true,\n [\"α|++⟩ + β|--⟩\", \"α|+-⟩ + β|-+⟩\"]);\n\n if (isCorrect) {\n Message(\"Correct!\");\n } else {\n Message(\"Incorrect.\");\n }\n\n isCorrect\n }\n}\n"
|
|
@@ -7946,10 +8017,6 @@ export default {
|
|
|
7946
8017
|
"id": "qec_shor__bitflip_detect__Verification.qs",
|
|
7947
8018
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Katas;\n\n operation BitflipEncode (qs : Qubit[]) : Unit is Adj + Ctl {\n CNOT(qs[0], qs[1]);\n CNOT(qs[0], qs[2]);\n }\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n CheckErrorDetection(3, BitflipEncode, X, Kata.BitflipDetectError)\n }\n}\n"
|
|
7948
8019
|
},
|
|
7949
|
-
{
|
|
7950
|
-
"id": "qec_shor__Common.qs",
|
|
7951
|
-
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Math;\n open Microsoft.Quantum.Random;\n\n operation CheckErrorDetection(\n n : Int,\n encode : (Qubit[] => Unit is Adj),\n error : (Qubit => Unit is Adj),\n detect : (Qubit[] => Int)\n ) : Bool {\n for err_ind in -1 .. n - 1 {\n for _ in 1 .. 10 {\n use qs = Qubit[n];\n let theta = DrawRandomDouble(0.0, 1.0);\n within {\n // Prepare logical state on first qubit\n Ry(2.0 * theta * PI(), qs[0]);\n // Encode the state in multiple qubits\n encode(qs);\n // Introduce X error\n if err_ind > -1 {\n error(qs[err_ind]);\n }\n } apply {\n // Call solution to detect index\n let detected = detect(qs);\n // Check that it is correct\n if detected != err_ind {\n Message(\"Incorrect.\");\n let actual = err_ind == -1 ? \"No error happened\" | $\"Error happened on qubit {err_ind}\";\n Message($\"{actual}, but solution returned {detected}\");\n ResetAll(qs);\n return false;\n }\n }\n // Check that the state was not modified by the solution\n if not CheckAllZero(qs) {\n Message(\"Incorrect.\");\n Message(\"The state of the qubits changed after the solution was applied\");\n ResetAll(qs);\n return false;\n }\n }\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|
|
7952
|
-
},
|
|
7953
8020
|
{
|
|
7954
8021
|
"id": "qec_shor__phaseflip_encode__Verification.qs",
|
|
7955
8022
|
"code": "namespace Kata.Verification {\n open Microsoft.Quantum.Convert;\n open Microsoft.Quantum.Diagnostics;\n open Microsoft.Quantum.Katas;\n open Microsoft.Quantum.Math;\n\n operation PhaseflipEncode_Reference (qs : Qubit[]) : Unit is Adj + Ctl {\n CNOT(qs[0], qs[1]);\n CNOT(qs[0], qs[2]);\n ApplyToEachCA(H, qs);\n }\n\n\n @EntryPoint()\n operation CheckSolution() : Bool {\n let range = 10;\n for i in 0 .. range - 1 {\n let angle = 2.0 * PI() * IntAsDouble(i) / IntAsDouble(range);\n let initialState = qs => Ry(2.0 * angle, qs[0]);\n let isCorrect = CheckOperationsEquivalenceOnInitialStateStrict(\n initialState,\n Kata.PhaseflipEncode, \n PhaseflipEncode_Reference, \n 3);\n if not isCorrect {\n Message(\"Incorrect\");\n Message($\"Test fails for alpha = {Cos(angle)}, beta = {Sin(angle)}.\");\n ShowQuantumStateComparison(3, initialState, Kata.PhaseflipEncode, PhaseflipEncode_Reference);\n return false;\n }\n }\n\n Message(\"Correct!\");\n true\n }\n}\n"
|