Skip to content

Commit 73cc76b

Browse files
committed
Use target.is_some() for get_euler_basis global path check
1 parent b481553 commit 73cc76b

1 file changed

Lines changed: 62 additions & 65 deletions

File tree

crates/transpiler/src/passes/optimize_1q_gates_decomposition.rs

Lines changed: 62 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -241,74 +241,71 @@ impl Optimize1qGatesDecompositionState {
241241
) -> EulerBasisSet {
242242
if self.global {
243243
let mut target_basis_set = EulerBasisSet::new();
244-
match target {
245-
Some(_target) => {
246-
EULER_BASES
247-
.iter()
248-
.enumerate()
249-
.filter_map(|(idx, gates)| {
250-
if !gates.iter().all(|gate| {
251-
let BasisGatesPerQubit::Gates(gates) =
252-
self.basis_gates_per_qubit[0].get().unwrap()
253-
else {
254-
unreachable!("The target path always provides a hash set");
255-
};
256-
gates.contains(*gate)
257-
}) {
258-
return None;
259-
}
260-
let basis = EULER_BASIS_NAMES[idx];
261-
Some(basis)
262-
})
263-
.for_each(|basis| target_basis_set.add_basis(basis));
264-
if target_basis_set.basis_supported(EulerBasis::U3)
265-
&& target_basis_set.basis_supported(EulerBasis::U321)
266-
{
267-
target_basis_set.remove(EulerBasis::U3);
268-
}
269-
if target_basis_set.basis_supported(EulerBasis::ZSX)
270-
&& target_basis_set.basis_supported(EulerBasis::ZSXX)
271-
{
272-
target_basis_set.remove(EulerBasis::ZSX);
273-
}
244+
if target.is_some() {
245+
EULER_BASES
246+
.iter()
247+
.enumerate()
248+
.filter_map(|(idx, gates)| {
249+
if !gates.iter().all(|gate| {
250+
let BasisGatesPerQubit::Gates(gates) =
251+
self.basis_gates_per_qubit[0].get().unwrap()
252+
else {
253+
unreachable!("The target path always provides a hash set");
254+
};
255+
gates.contains(*gate)
256+
}) {
257+
return None;
258+
}
259+
let basis = EULER_BASIS_NAMES[idx];
260+
Some(basis)
261+
})
262+
.for_each(|basis| target_basis_set.add_basis(basis));
263+
if target_basis_set.basis_supported(EulerBasis::U3)
264+
&& target_basis_set.basis_supported(EulerBasis::U321)
265+
{
266+
target_basis_set.remove(EulerBasis::U3);
274267
}
275-
None => {
276-
match &global_decomposers {
277-
Some(bases) => {
278-
for basis in bases.iter() {
279-
target_basis_set.add_basis(
280-
EulerBasis::__new__(basis).expect("a valid basis string"),
281-
)
282-
}
268+
if target_basis_set.basis_supported(EulerBasis::ZSX)
269+
&& target_basis_set.basis_supported(EulerBasis::ZSXX)
270+
{
271+
target_basis_set.remove(EulerBasis::ZSX);
272+
}
273+
} else {
274+
match &global_decomposers {
275+
Some(bases) => {
276+
for basis in bases.iter() {
277+
target_basis_set.add_basis(
278+
EulerBasis::__new__(basis).expect("a valid basis string"),
279+
)
283280
}
284-
None => match self.basis_gates_per_qubit[0].get().unwrap() {
285-
BasisGatesPerQubit::Gates(gates) => EULER_BASES
286-
.iter()
287-
.enumerate()
288-
.filter_map(|(idx, basis_gates)| {
289-
if !gates
290-
.iter()
291-
.all(|gate| basis_gates.as_ref().contains(&gate.as_str()))
292-
{
293-
return None;
294-
}
295-
let basis = EULER_BASIS_NAMES[idx];
296-
Some(basis)
297-
})
298-
.for_each(|basis| target_basis_set.add_basis(basis)),
299-
BasisGatesPerQubit::All => target_basis_set.support_all(),
300-
},
301-
}
302-
if target_basis_set.basis_supported(EulerBasis::U3)
303-
&& target_basis_set.basis_supported(EulerBasis::U321)
304-
{
305-
target_basis_set.remove(EulerBasis::U3);
306-
}
307-
if target_basis_set.basis_supported(EulerBasis::ZSX)
308-
&& target_basis_set.basis_supported(EulerBasis::ZSXX)
309-
{
310-
target_basis_set.remove(EulerBasis::ZSX);
311281
}
282+
None => match self.basis_gates_per_qubit[0].get().unwrap() {
283+
BasisGatesPerQubit::Gates(gates) => EULER_BASES
284+
.iter()
285+
.enumerate()
286+
.filter_map(|(idx, basis_gates)| {
287+
if !gates
288+
.iter()
289+
.all(|gate| basis_gates.as_ref().contains(&gate.as_str()))
290+
{
291+
return None;
292+
}
293+
let basis = EULER_BASIS_NAMES[idx];
294+
Some(basis)
295+
})
296+
.for_each(|basis| target_basis_set.add_basis(basis)),
297+
BasisGatesPerQubit::All => target_basis_set.support_all(),
298+
},
299+
}
300+
if target_basis_set.basis_supported(EulerBasis::U3)
301+
&& target_basis_set.basis_supported(EulerBasis::U321)
302+
{
303+
target_basis_set.remove(EulerBasis::U3);
304+
}
305+
if target_basis_set.basis_supported(EulerBasis::ZSX)
306+
&& target_basis_set.basis_supported(EulerBasis::ZSXX)
307+
{
308+
target_basis_set.remove(EulerBasis::ZSX);
312309
}
313310
}
314311
target_basis_set

0 commit comments

Comments
 (0)