@@ -376,27 +376,32 @@ def _sample_measure_results(
376376 seed = self ._prng ,
377377 )
378378
379- for i in range ( repetitions ):
380- for key , op in meas_ops . items ():
381- meas_indices = [ qubit_map [ qubit ] for qubit in op .qubits ]
382- invert_mask = op . gate . full_invert_mask ()
383- for j , q in enumerate ( meas_indices ):
384- results [ key ][ i ][ j ] = full_results [ i ][ q ] ^ invert_mask [ j ]
379+ for key , op in meas_ops . items ( ):
380+ meas_indices = [ qubit_map [ qubit ] for qubit in op . qubits ]
381+ invert_mask = op .gate . full_invert_mask ()
382+ # Apply invert mask to re-ordered results
383+ results [ key ] = full_results [:, meas_indices ] ^ invert_mask
384+
385385 else :
386386 options ["c" ] = self ._translate_circuit (
387387 program ,
388388 translator_fn_name ,
389389 cirq .QubitOrder .DEFAULT ,
390390 )
391+ measurements = np .empty (
392+ shape = (
393+ repetitions ,
394+ sum (cirq .num_qubits (op ) for op in meas_ops .values ()),
395+ ),
396+ dtype = int ,
397+ )
391398 for i in range (repetitions ):
392399 options ["s" ] = self .get_seed ()
393- measurements = sampler_fn (options )
394- for key , bound in bounds .items ():
395- invert_mask = meas_ops [key ].gate .full_invert_mask ()
396- for j in range (bound [1 ] - bound [0 ]):
397- results [key ][i ][j ] = int (
398- measurements [bound [0 ] + j ] ^ invert_mask [j ]
399- )
400+ measurements [i ] = sampler_fn (options )
401+
402+ for key , (start , end ) in bounds .items ():
403+ invert_mask = meas_ops [key ].gate .full_invert_mask ()
404+ results [key ] = measurements [:, start :end ] ^ invert_mask
400405
401406 return results
402407
0 commit comments