@@ -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