Skip to content

Commit

Permalink
refactor simplify upvalues
Browse files Browse the repository at this point in the history
  • Loading branch information
sw1sh committed Feb 5, 2024
1 parent 0f5aa9d commit 66668f6
Show file tree
Hide file tree
Showing 14 changed files with 44 additions and 45 deletions.
2 changes: 1 addition & 1 deletion QuantumFramework/Kernel/MIC.m
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@
]


Options[QuantumWignerMICBasis] = Options[QuantumWignerMICPOVM]
Options[QuantumWignerMICBasis] := Options[QuantumWignerMICPOVM]

QuantumWignerMICBasis[d : _Integer ? Positive : 2, opts : OptionsPattern[]] := Block[{povm = QuantumWignerMICPOVM[d, opts], G, dual},
G = Simplify @ Outer[Tr @* Dot, povm, povm, 1];
Expand Down
9 changes: 4 additions & 5 deletions QuantumFramework/Kernel/QuantumBasis/QuantumBasis.m
Original file line number Diff line number Diff line change
Expand Up @@ -205,8 +205,7 @@

(* simplify *)

Simplify[qb_QuantumBasis] ^:= qb["Simplify"]

FullSimplify[qb_QuantumBasis] ^:= qb["FullSimplify"]

Chop[qb_QuantumBasis] ^:= qb["Chop"]
Scan[
(Symbol[#][qb_QuantumBasis, args___] ^:= qs[#, args]) &,
{"Simplify", "FullSimplify", "Chop", "ComplexExpand"}
]
9 changes: 4 additions & 5 deletions QuantumFramework/Kernel/QuantumChannel/QuantumChannel.m
Original file line number Diff line number Diff line change
Expand Up @@ -62,11 +62,10 @@

(* simplify *)

Simplify[qc_QuantumChannel, args___] ^:= qc["Simplify", args]

FullSimplify[qc_QuantumChannel, args___] ^:= qc["FullSimplify", args]

Chop[qc_QuantumChannel, args___] ^:= qc["Chop", args]
Scan[
(Symbol[#][qc_QuantumChannel, args___] ^:= qc[#, args]) &,
{"Simplify", "FullSimplify", "Chop", "ComplexExpand"}
]


(* parameterization *)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@
QuantumCircuitOperatorProp[qco_, prop : "Conjugate" | "Dual" | "Double"] :=
QuantumCircuitOperator[If[BarrierQ[#], #, #[prop]] & /@ qco["Elements"], Switch[prop, "Double", Style[#, Bold] &, _, SuperStar][qco["Label"]]]

QuantumCircuitOperatorProp[qco_, prop : "Simplify" | "FullSimplify" | "Computational", args___] :=
QuantumCircuitOperatorProp[qco_, prop : "Computational" | "Simplify" | "FullSimplify" | "Chop" | "ComplexExpand", args___] :=
QuantumCircuitOperator[If[BarrierQ[#], #, #[prop, args]] & /@ qco["Elements"], qco["Label"]]


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -182,11 +182,10 @@

(* simplify *)

Simplify[qco_QuantumCircuitOperator, args___] ^:= qco["Simplify", args]

FullSimplify[qco_QuantumCircuitOperator, args___] ^:= qco["FullSimplify", args]

Chop[qco_QuantumCircuitOperator, args___] ^:= qco["Chop", args]
Scan[
(Symbol[#][qco_QuantumCircuitOperator, args___] ^:= qco[#, args]) &,
{"Simplify", "FullSimplify", "Chop", "ComplexExpand"}
]


(* parameterization *)
Expand Down
11 changes: 5 additions & 6 deletions QuantumFramework/Kernel/QuantumMeasurement.m
Original file line number Diff line number Diff line change
Expand Up @@ -233,7 +233,7 @@

QuantumMeasurementProp[qm_, "MeanState"] := Total @ KeyValueMap[Times, qm["StateAssociation"]]

QuantumMeasurementProp[qm_, prop : "Simplify" | "FullSimplify" | "Chop", args___] := QuantumMeasurement[qm["QuantumOperator"][prop, args]]
QuantumMeasurementProp[qm_, prop : "Simplify" | "FullSimplify" | "Chop" | "ComplexExpand", args___] := QuantumMeasurement[qm["QuantumOperator"][prop, args]]


(* qmo properties *)
Expand All @@ -250,11 +250,10 @@

(* simplify *)

Simplify[qm_QuantumMeasurement, args___] ^:= qm["Simplify", args]

FullSimplify[qm_QuantumMeasurement, args___] ^:= qm["FullSimplify", args]

Chop[qm_QuantumMeasurement, args___] ^:= qm["Chop", args]
Scan[
(Symbol[#][qm_QuantumMeasurement, args___] ^:= qs[#, args]) &,
{"Simplify", "FullSimplify", "Chop", "ComplexExpand"}
]


(* parameterization *)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -296,7 +296,7 @@

(* operator properties *)

QuantumMeasurementOperatorProp[qmo_, prop : "Ordered" | "Sort" | "SortOutput" | "SortInput" | "Computational" | "Simplify" | "FullSimplify" | "Chop", args___] :=
QuantumMeasurementOperatorProp[qmo_, prop : "Ordered" | "Sort" | "SortOutput" | "SortInput" | "Computational" | "Simplify" | "FullSimplify" | "Chop" | "ComplexExpand", args___] :=
QuantumMeasurementOperator[qmo["QuantumOperator"][prop, args], qmo["Target"]]

QuantumMeasurementOperatorProp[qmo_, prop : "Dagger", args___] :=
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,10 @@

(* simplify *)

Simplify[qmo_QuantumMeasurementOperator, args___] ^:= qmo["Simplify", args]

FullSimplify[qmo_QuantumMeasurementOperator, args___] ^:= qmo["FullSimplify", args]

Chop[qmo_QuantumMeasurementOperator, args___] ^:= qmo["Chop", args]
Scan[
(Symbol[#][qmo_QuantumMeasurementOperator, args___] ^:= qmo[#, args]) &,
{"Simplify", "FullSimplify", "Chop", "ComplexExpand"}
]


(* parameterization *)
Expand Down
4 changes: 2 additions & 2 deletions QuantumFramework/Kernel/QuantumOperator/Properties.m
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
"PauliDecompose",
"CircuitDiagram",
"OrderedFormula",
"Simplify", "FullSimplify", "Chop"
"Simplify", "FullSimplify", "Chop", "ComplexExpand"
};

QuantumOperator["Properties"] := Union @ Join[$QuantumOperatorProperties, Complement[QuantumState["Properties"], {
Expand Down Expand Up @@ -550,7 +550,7 @@
]
]

QuantumOperatorProp[qo_, prop : "Simplify" | "FullSimplify" | "Chop", args___] := QuantumOperator[qo["State"][prop, args], qo["Order"]]
QuantumOperatorProp[qo_, prop : "Simplify" | "FullSimplify" | "Chop" | "ComplexExpand", args___] := QuantumOperator[qo["State"][prop, args], qo["Order"]]


(* evolution *)
Expand Down
9 changes: 4 additions & 5 deletions QuantumFramework/Kernel/QuantumOperator/QuantumOperator.m
Original file line number Diff line number Diff line change
Expand Up @@ -517,11 +517,10 @@

(* simplify *)

Simplify[qo_QuantumOperator, args___] ^:= qo["Simplify", args]

FullSimplify[qo_QuantumOperator, args___] ^:= qo["FullSimplify", args]

Chop[qo_QuantumOperator, args___] ^:= qo["Chop", args]
Scan[
(Symbol[#][qo_QuantumOperator, args___] ^:= qo[#, args]) &,
{"Simplify", "FullSimplify", "Chop", "ComplexExpand"}
]


(* join *)
Expand Down
6 changes: 5 additions & 1 deletion QuantumFramework/Kernel/QuantumState/Properties.m
Original file line number Diff line number Diff line change
Expand Up @@ -312,7 +312,11 @@
]
]

QuantumStateProp[qs_, prop : "Simplify" | "FullSimplify" | "Chop", args___] := QuantumState[Map[Symbol[prop][#, args] &, qs["State"], {If[qs["VectorQ"], 1, 2]}], qs["Basis"]]
QuantumStateProp[qs_, prop : "Simplify" | "FullSimplify" | "Chop" | "ComplexExpand", args___] :=
QuantumState[Map[Symbol[prop][#, args] &, qs["State"], {If[qs["VectorQ"], 1, 2]}], qs["Basis"][prop]]

(* these work on SparseArrays directly *)
QuantumStateProp[qs_, prop : "Chop" | "ComplexExpand", args___] := QuantumState[Symbol[prop][qs["State"], args], qs["Basis"][prop]]


(* normalization *)
Expand Down
9 changes: 4 additions & 5 deletions QuantumFramework/Kernel/QuantumState/QuantumState.m
Original file line number Diff line number Diff line change
Expand Up @@ -242,11 +242,10 @@

(* simplify *)

Simplify[qs_QuantumState, args___] ^:= qs["Simplify", args]

FullSimplify[qs_QuantumState, args___] ^:= qs["FullSimplify", args]

Chop[qs_QuantumState, args___] ^:= qs["Chop", args]
Scan[
(Symbol[#][qs_QuantumState, args___] ^:= qs[#, args]) &,
{"Simplify", "FullSimplify", "Chop", "ComplexExpand"}
]


(* join *)
Expand Down
4 changes: 3 additions & 1 deletion QuantumFramework/Kernel/QuditBasis/Properties.m
Original file line number Diff line number Diff line change
Expand Up @@ -328,4 +328,6 @@
QuditBasisProp[qb_, prop : "DimensionSplit" | "DimensionSplitDual", splits : {_Integer ? Positive ..}] := qb[prop, Thread[{Range[Length[splits]], splits}]]


QuditBasisProp[qb_, prop : "Simplify" | "FullSimplify" | "Chop", args___] := QuditBasis @ Map[Symbol[prop][#, args] &, qb["Representations"]]
QuditBasisProp[qb_, prop : "Simplify" | "FullSimplify", args___] := QuditBasis @ Map[Map[Symbol[prop][#, args] &, #, {-1}] &, qb["Representations"]]

QuditBasisProp[qb_, prop : "Chop" | "ComplexExpand", args___] := QuditBasis @ Map[Symbol[prop][#, args] &, qb["Representations"]]
4 changes: 2 additions & 2 deletions QuantumFramework/ResourceDefinition.nb
Git LFS file not shown

0 comments on commit 66668f6

Please sign in to comment.