From 7c5db88843893875c3b33cdae05407a4e6be5329 Mon Sep 17 00:00:00 2001 From: Raphael Koh Date: Fri, 17 Jul 2020 16:47:46 -0400 Subject: [PATCH 1/6] Override ApplyToEach GetRuntimeMetadata --- Standard/src/Canon/Combinators/ApplyToEach.cs | 31 +++++++++ Standard/tests/Canon/ApplyToEachTests.cs | 63 +++++++++++++++++++ 2 files changed, 94 insertions(+) create mode 100644 Standard/src/Canon/Combinators/ApplyToEach.cs create mode 100644 Standard/tests/Canon/ApplyToEachTests.cs diff --git a/Standard/src/Canon/Combinators/ApplyToEach.cs b/Standard/src/Canon/Combinators/ApplyToEach.cs new file mode 100644 index 00000000000..375259e616e --- /dev/null +++ b/Standard/src/Canon/Combinators/ApplyToEach.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using Microsoft.Quantum.Simulation.Core; + +namespace Microsoft.Quantum.Canon +{ + public partial class ApplyToEach<__T__> + { + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => + new RuntimeMetadata() { IsComposite = true }; + } + + public partial class ApplyToEachC<__T__> + { + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => + new RuntimeMetadata() { IsComposite = true }; + } + + public partial class ApplyToEachA<__T__> + { + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => + new RuntimeMetadata() { IsComposite = true }; + } + + public partial class ApplyToEachCA<__T__> + { + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => + new RuntimeMetadata() { IsComposite = true }; + } +} diff --git a/Standard/tests/Canon/ApplyToEachTests.cs b/Standard/tests/Canon/ApplyToEachTests.cs new file mode 100644 index 00000000000..fcee12ed578 --- /dev/null +++ b/Standard/tests/Canon/ApplyToEachTests.cs @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + + +using Microsoft.Quantum.Simulation.Core; +using Microsoft.Quantum.Simulation.Simulators; +using Microsoft.Quantum.Simulation.XUnit; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Security.Cryptography; +using System.Text; +using Xunit; + +namespace Microsoft.Quantum.Tests +{ + public class ApplyToEachRuntimeMetadataTests + { + [Fact] + public void ApplyToEach() + { + var op = new Microsoft.Quantum.Canon.ApplyToEach(new QuantumSimulator()); + var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); + var targets = new QArray(new Qubit[] { }) as IQArray; + var args = op.__dataIn((baseOp, targets)); + var expected = new RuntimeMetadata() { IsComposite = true }; + Assert.Equal(expected, op.GetRuntimeMetadata(args)); + } + + [Fact] + public void ApplyToEachC() + { + var op = new Microsoft.Quantum.Canon.ApplyToEachC(new QuantumSimulator()); + var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); + var targets = new QArray(new Qubit[] { }) as IQArray; + var args = op.__dataIn((baseOp, targets)); + var expected = new RuntimeMetadata() { IsComposite = true }; + Assert.Equal(expected, op.GetRuntimeMetadata(args)); + } + + [Fact] + public void ApplyToEachA() + { + var op = new Microsoft.Quantum.Canon.ApplyToEachA(new QuantumSimulator()); + var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); + var targets = new QArray(new Qubit[] { }) as IQArray; + var args = op.__dataIn((baseOp, targets)); + var expected = new RuntimeMetadata() { IsComposite = true }; + Assert.Equal(expected, op.GetRuntimeMetadata(args)); + } + + [Fact] + public void ApplyToEachCA() + { + var op = new Microsoft.Quantum.Canon.ApplyToEachCA(new QuantumSimulator()); + var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); + var targets = new QArray(new Qubit[] { }) as IQArray; + var args = op.__dataIn((baseOp, targets)); + var expected = new RuntimeMetadata() { IsComposite = true }; + Assert.Equal(expected, op.GetRuntimeMetadata(args)); + } + } +} From 7e1243428c26fad8038eff29d0c6c90b960bea93 Mon Sep 17 00:00:00 2001 From: "Project Collection Build Service (ms-quantum)" <> Date: Thu, 23 Jul 2020 07:08:23 +0000 Subject: [PATCH 2/6] Build 0.12.2007.2301. --- Build/props/tests.props | 2 +- Chemistry/src/Runtime/Runtime.csproj | 4 ++-- Chemistry/tests/ChemistryTests/QSharpTests.csproj | 2 +- Chemistry/tests/SystemTests/SystemTests.csproj | 2 +- MachineLearning/src/MachineLearning.csproj | 2 +- MachineLearning/tests/MachineLearningTests.csproj | 2 +- Numerics/src/Numerics.csproj | 4 ++-- Numerics/tests/NumericsTests.csproj | 2 +- Standard/src/Standard.csproj | 4 ++-- Standard/tests/Standard.Tests.csproj | 2 +- 10 files changed, 13 insertions(+), 13 deletions(-) diff --git a/Build/props/tests.props b/Build/props/tests.props index f8425ad56b1..8c6bdbe91e3 100644 --- a/Build/props/tests.props +++ b/Build/props/tests.props @@ -6,7 +6,7 @@ - + diff --git a/Chemistry/src/Runtime/Runtime.csproj b/Chemistry/src/Runtime/Runtime.csproj index 955cc64c8a2..f3f5e74c07a 100644 --- a/Chemistry/src/Runtime/Runtime.csproj +++ b/Chemistry/src/Runtime/Runtime.csproj @@ -1,4 +1,4 @@ - + netstandard2.1 @@ -36,7 +36,7 @@ - + diff --git a/Chemistry/tests/ChemistryTests/QSharpTests.csproj b/Chemistry/tests/ChemistryTests/QSharpTests.csproj index 5f67d6eabb3..c10bdcc9653 100644 --- a/Chemistry/tests/ChemistryTests/QSharpTests.csproj +++ b/Chemistry/tests/ChemistryTests/QSharpTests.csproj @@ -1,4 +1,4 @@ - + diff --git a/Chemistry/tests/SystemTests/SystemTests.csproj b/Chemistry/tests/SystemTests/SystemTests.csproj index e639c70d365..a856d69a6ff 100644 --- a/Chemistry/tests/SystemTests/SystemTests.csproj +++ b/Chemistry/tests/SystemTests/SystemTests.csproj @@ -1,4 +1,4 @@ - + diff --git a/MachineLearning/src/MachineLearning.csproj b/MachineLearning/src/MachineLearning.csproj index c3c610ce7d5..02408133dc4 100644 --- a/MachineLearning/src/MachineLearning.csproj +++ b/MachineLearning/src/MachineLearning.csproj @@ -1,4 +1,4 @@ - + netstandard2.1 Microsoft.Quantum.MachineLearning diff --git a/MachineLearning/tests/MachineLearningTests.csproj b/MachineLearning/tests/MachineLearningTests.csproj index 24e796bf78b..a0824b9e216 100644 --- a/MachineLearning/tests/MachineLearningTests.csproj +++ b/MachineLearning/tests/MachineLearningTests.csproj @@ -1,4 +1,4 @@ - + diff --git a/Numerics/src/Numerics.csproj b/Numerics/src/Numerics.csproj index 356da38b794..23ce269672f 100644 --- a/Numerics/src/Numerics.csproj +++ b/Numerics/src/Numerics.csproj @@ -1,4 +1,4 @@ - + netstandard2.1 @@ -40,7 +40,7 @@ - + diff --git a/Numerics/tests/NumericsTests.csproj b/Numerics/tests/NumericsTests.csproj index ed5dc9199c6..ad593aad679 100644 --- a/Numerics/tests/NumericsTests.csproj +++ b/Numerics/tests/NumericsTests.csproj @@ -1,4 +1,4 @@ - + diff --git a/Standard/src/Standard.csproj b/Standard/src/Standard.csproj index d0cbc8cc426..634fa6a0eb6 100644 --- a/Standard/src/Standard.csproj +++ b/Standard/src/Standard.csproj @@ -1,4 +1,4 @@ - + netstandard2.1 @@ -30,7 +30,7 @@ - + diff --git a/Standard/tests/Standard.Tests.csproj b/Standard/tests/Standard.Tests.csproj index 1a4ded18c16..993c86a80fa 100644 --- a/Standard/tests/Standard.Tests.csproj +++ b/Standard/tests/Standard.Tests.csproj @@ -1,4 +1,4 @@ - + From e66854efe407de84d3398dbcdb911e4e1207f989 Mon Sep 17 00:00:00 2001 From: Raphael Koh Date: Thu, 23 Jul 2020 19:31:50 -0400 Subject: [PATCH 3/6] Implement GetRuntimeMetadata for ForEach --- Standard/src/Arrays/ForEach.cs | 13 ++++++++++ Standard/tests/Arrays/MapTests.cs | 30 ++++++++++++++++++++++++ Standard/tests/Canon/ApplyToEachTests.cs | 16 ++++++------- 3 files changed, 51 insertions(+), 8 deletions(-) create mode 100644 Standard/src/Arrays/ForEach.cs create mode 100644 Standard/tests/Arrays/MapTests.cs diff --git a/Standard/src/Arrays/ForEach.cs b/Standard/src/Arrays/ForEach.cs new file mode 100644 index 00000000000..94c83142f73 --- /dev/null +++ b/Standard/src/Arrays/ForEach.cs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. +// Licensed under the MIT License. + +using Microsoft.Quantum.Simulation.Core; + +namespace Microsoft.Quantum.Arrays +{ + public partial class ForEach<__T__, __U__> + { + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => + new RuntimeMetadata() { IsComposite = true }; + } +} diff --git a/Standard/tests/Arrays/MapTests.cs b/Standard/tests/Arrays/MapTests.cs new file mode 100644 index 00000000000..1ff055f409a --- /dev/null +++ b/Standard/tests/Arrays/MapTests.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + + +using Microsoft.Quantum.Simulation.Core; +using Microsoft.Quantum.Simulation.Simulators; +using Microsoft.Quantum.Simulation.XUnit; +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Security.Cryptography; +using System.Text; +using Xunit; + +namespace Microsoft.Quantum.Tests +{ + public class ForEachRuntimeMetadataTests + { + [Fact] + public void ForEach() + { + var op = new Microsoft.Quantum.Arrays.ForEach(new QuantumSimulator()); + var baseOp = new Microsoft.Quantum.Intrinsic.M(new QuantumSimulator()); + IQArray targets = new QArray(new Qubit[] { }); + var args = op.__dataIn((baseOp, targets)); + var expected = new RuntimeMetadata() { IsComposite = true }; + Assert.Equal(expected, op.GetRuntimeMetadata(args)); + } + } +} diff --git a/Standard/tests/Canon/ApplyToEachTests.cs b/Standard/tests/Canon/ApplyToEachTests.cs index fcee12ed578..d2223d8f34b 100644 --- a/Standard/tests/Canon/ApplyToEachTests.cs +++ b/Standard/tests/Canon/ApplyToEachTests.cs @@ -20,8 +20,8 @@ public class ApplyToEachRuntimeMetadataTests public void ApplyToEach() { var op = new Microsoft.Quantum.Canon.ApplyToEach(new QuantumSimulator()); - var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); - var targets = new QArray(new Qubit[] { }) as IQArray; + var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); + IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); var expected = new RuntimeMetadata() { IsComposite = true }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); @@ -31,8 +31,8 @@ public void ApplyToEach() public void ApplyToEachC() { var op = new Microsoft.Quantum.Canon.ApplyToEachC(new QuantumSimulator()); - var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); - var targets = new QArray(new Qubit[] { }) as IQArray; + var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); + IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); var expected = new RuntimeMetadata() { IsComposite = true }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); @@ -42,8 +42,8 @@ public void ApplyToEachC() public void ApplyToEachA() { var op = new Microsoft.Quantum.Canon.ApplyToEachA(new QuantumSimulator()); - var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); - var targets = new QArray(new Qubit[] { }) as IQArray; + var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); + IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); var expected = new RuntimeMetadata() { IsComposite = true }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); @@ -53,8 +53,8 @@ public void ApplyToEachA() public void ApplyToEachCA() { var op = new Microsoft.Quantum.Canon.ApplyToEachCA(new QuantumSimulator()); - var baseOp = new Microsoft.Quantum.Canon.ApplyQuantumFourierTransform(new QuantumSimulator()); - var targets = new QArray(new Qubit[] { }) as IQArray; + var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); + IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); var expected = new RuntimeMetadata() { IsComposite = true }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); From 34377f3bd6079b3b13bfcd4a679b20db65f0eeb3 Mon Sep 17 00:00:00 2001 From: Raphael Koh Date: Fri, 24 Jul 2020 16:57:06 -0400 Subject: [PATCH 4/6] Get base RuntimeMetadata --- Standard/src/Arrays/ForEach.cs | 8 +++-- Standard/src/Canon/Combinators/ApplyToEach.cs | 32 ++++++++++++++----- Standard/tests/Arrays/MapTests.cs | 8 ++++- Standard/tests/Canon/ApplyToEachTests.cs | 32 ++++++++++++++++--- 4 files changed, 65 insertions(+), 15 deletions(-) diff --git a/Standard/src/Arrays/ForEach.cs b/Standard/src/Arrays/ForEach.cs index 94c83142f73..68541e03e77 100644 --- a/Standard/src/Arrays/ForEach.cs +++ b/Standard/src/Arrays/ForEach.cs @@ -7,7 +7,11 @@ namespace Microsoft.Quantum.Arrays { public partial class ForEach<__T__, __U__> { - public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => - new RuntimeMetadata() { IsComposite = true }; + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) + { + var metadata = base.GetRuntimeMetadata(args); + metadata.IsComposite = true; + return metadata; + } } } diff --git a/Standard/src/Canon/Combinators/ApplyToEach.cs b/Standard/src/Canon/Combinators/ApplyToEach.cs index 375259e616e..f28964a7347 100644 --- a/Standard/src/Canon/Combinators/ApplyToEach.cs +++ b/Standard/src/Canon/Combinators/ApplyToEach.cs @@ -7,25 +7,41 @@ namespace Microsoft.Quantum.Canon { public partial class ApplyToEach<__T__> { - public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => - new RuntimeMetadata() { IsComposite = true }; + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) + { + var metadata = base.GetRuntimeMetadata(args); + metadata.IsComposite = true; + return metadata; + } } public partial class ApplyToEachC<__T__> { - public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => - new RuntimeMetadata() { IsComposite = true }; + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) + { + var metadata = base.GetRuntimeMetadata(args); + metadata.IsComposite = true; + return metadata; + } } public partial class ApplyToEachA<__T__> { - public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => - new RuntimeMetadata() { IsComposite = true }; + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) + { + var metadata = base.GetRuntimeMetadata(args); + metadata.IsComposite = true; + return metadata; + } } public partial class ApplyToEachCA<__T__> { - public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) => - new RuntimeMetadata() { IsComposite = true }; + public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) + { + var metadata = base.GetRuntimeMetadata(args); + metadata.IsComposite = true; + return metadata; + } } } diff --git a/Standard/tests/Arrays/MapTests.cs b/Standard/tests/Arrays/MapTests.cs index 1ff055f409a..5594ee6ce29 100644 --- a/Standard/tests/Arrays/MapTests.cs +++ b/Standard/tests/Arrays/MapTests.cs @@ -23,7 +23,13 @@ public void ForEach() var baseOp = new Microsoft.Quantum.Intrinsic.M(new QuantumSimulator()); IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); - var expected = new RuntimeMetadata() { IsComposite = true }; + var expected = new RuntimeMetadata() + { + Label = "ForEach", + FormattedNonQubitArgs = "(M)", + IsComposite = true, + Targets = new List() { }, + }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); } } diff --git a/Standard/tests/Canon/ApplyToEachTests.cs b/Standard/tests/Canon/ApplyToEachTests.cs index d2223d8f34b..bca042da663 100644 --- a/Standard/tests/Canon/ApplyToEachTests.cs +++ b/Standard/tests/Canon/ApplyToEachTests.cs @@ -23,7 +23,13 @@ public void ApplyToEach() var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); - var expected = new RuntimeMetadata() { IsComposite = true }; + var expected = new RuntimeMetadata() + { + Label = "ApplyToEach", + FormattedNonQubitArgs = "(I)", + IsComposite = true, + Targets = new List() { }, + }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); } @@ -34,7 +40,13 @@ public void ApplyToEachC() var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); - var expected = new RuntimeMetadata() { IsComposite = true }; + var expected = new RuntimeMetadata() + { + Label = "ApplyToEachC", + FormattedNonQubitArgs = "(I)", + IsComposite = true, + Targets = new List() { }, + }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); } @@ -45,7 +57,13 @@ public void ApplyToEachA() var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); - var expected = new RuntimeMetadata() { IsComposite = true }; + var expected = new RuntimeMetadata() + { + Label = "ApplyToEachA", + FormattedNonQubitArgs = "(I)", + IsComposite = true, + Targets = new List() { }, + }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); } @@ -56,7 +74,13 @@ public void ApplyToEachCA() var baseOp = new Microsoft.Quantum.Intrinsic.I(new QuantumSimulator()); IQArray targets = new QArray(new Qubit[] { }); var args = op.__dataIn((baseOp, targets)); - var expected = new RuntimeMetadata() { IsComposite = true }; + var expected = new RuntimeMetadata() + { + Label = "ApplyToEachCA", + FormattedNonQubitArgs = "(I)", + IsComposite = true, + Targets = new List() { }, + }; Assert.Equal(expected, op.GetRuntimeMetadata(args)); } } From 4ba3432517c205e3cc148a899271eed83ced91e2 Mon Sep 17 00:00:00 2001 From: Raphael Koh Date: Fri, 24 Jul 2020 17:13:27 -0400 Subject: [PATCH 5/6] Add null check --- Standard/src/Arrays/ForEach.cs | 2 ++ Standard/src/Canon/Combinators/ApplyToEach.cs | 5 +++++ 2 files changed, 7 insertions(+) diff --git a/Standard/src/Arrays/ForEach.cs b/Standard/src/Arrays/ForEach.cs index 68541e03e77..534e3e3366d 100644 --- a/Standard/src/Arrays/ForEach.cs +++ b/Standard/src/Arrays/ForEach.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using Microsoft.Quantum.Simulation.Core; +using System; namespace Microsoft.Quantum.Arrays { @@ -10,6 +11,7 @@ public partial class ForEach<__T__, __U__> public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) { var metadata = base.GetRuntimeMetadata(args); + if (metadata == null) throw new NullReferenceException($"Null RuntimeMetadata found for {this.ToString()}."); metadata.IsComposite = true; return metadata; } diff --git a/Standard/src/Canon/Combinators/ApplyToEach.cs b/Standard/src/Canon/Combinators/ApplyToEach.cs index f28964a7347..352bfc32039 100644 --- a/Standard/src/Canon/Combinators/ApplyToEach.cs +++ b/Standard/src/Canon/Combinators/ApplyToEach.cs @@ -2,6 +2,7 @@ // Licensed under the MIT License. using Microsoft.Quantum.Simulation.Core; +using System; namespace Microsoft.Quantum.Canon { @@ -10,6 +11,7 @@ public partial class ApplyToEach<__T__> public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) { var metadata = base.GetRuntimeMetadata(args); + if (metadata == null) throw new NullReferenceException($"Null RuntimeMetadata found for {this.ToString()}."); metadata.IsComposite = true; return metadata; } @@ -20,6 +22,7 @@ public partial class ApplyToEachC<__T__> public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) { var metadata = base.GetRuntimeMetadata(args); + if (metadata == null) throw new NullReferenceException($"Null RuntimeMetadata found for {this.ToString()}."); metadata.IsComposite = true; return metadata; } @@ -30,6 +33,7 @@ public partial class ApplyToEachA<__T__> public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) { var metadata = base.GetRuntimeMetadata(args); + if (metadata == null) throw new NullReferenceException($"Null RuntimeMetadata found for {this.ToString()}."); metadata.IsComposite = true; return metadata; } @@ -40,6 +44,7 @@ public partial class ApplyToEachCA<__T__> public override RuntimeMetadata GetRuntimeMetadata(IApplyData args) { var metadata = base.GetRuntimeMetadata(args); + if (metadata == null) throw new NullReferenceException($"Null RuntimeMetadata found for {this.ToString()}."); metadata.IsComposite = true; return metadata; } From 55b56c27c19250022bcd4e0de58e1806bea172d4 Mon Sep 17 00:00:00 2001 From: Raphael Koh Date: Fri, 24 Jul 2020 17:53:50 -0400 Subject: [PATCH 6/6] Empty commit to retrigger CI