Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
New algorithm for RB building Cliffords by layers (#892)
* New algorithm for generating Clifford circuits for single qubit. We generate once all 24 transpiled Cliffords. Then, for every rb_circuit, select Cliffords at random and compose them to a circuit * Changed basis for transpilation to match the one in single_qubit_test. Added parameter to all calls to compose to use inplace=True. Removed redundant method generate_all_transpiled_clifford_circuits * Modified the methods in create_clifford_map so that compose does not use front=True, because I assume front=False when creating the circuits * Changed generation of generation of random numbers to be identical to the previous version of rb_experiment. * Test to run on device * added methods for new algorithm to generate rb circuits: build_rb_circuits, generate_1q_transpiled_clifford_circuits * Added the method _layout_for_rb_single_qubit and added test_full_sampling_single_qubit * In test_full_sampling_single_qubit fixed num_samples to be 1, because otherwise randomization is not identical in the two experiments * Tidied up build_rb_circuits * Added documentation and moved methods * Added test_single_qubit_parallel * Changed name _format_data to format_data because the method wasn't being called by the child class CurveAnalaysis. Added parameter to rb_experiment to determine whether to use the old algorithm or new one * Fixed handling of num_samples>1. Cleaned out prints. Reverted previous change regarding _format_data * Added assertExperimentDone to test_single-qubit_parallel. Fixed parameters for test_full_sampling_single_qubit * Modified assertAllIdentity to support circuits with rz gates * Changed name _new_rb to _transpiled_rb. Also changed default to be False, so that all tests will pass * removed fast_rb.py * removed rb_on_device.py * Removed temporary 'import time' * Added support for interleaved rb single qubit * Fixed handling of interleaved element * Fixed bug caused by change of interface of _buil_rb_circuits after adding support for interleave * added test_number_to_clifford_mapping and fixed the method num_from_1_qubit_clifford * Added support for computation of the Clifford to number mapping of a circuit * Moved setting of interleaved metadata to be under 'if is_interleaved' * Added transpilation of interleaved element before creating the rb circuits. Transformed interleaved element into a transpiled clifford circuit. Added relevant tests * Fixed incorrect parameter 'qubits' in test_non_clifford_interleaved_element * Added support for 'delay' as interleaved element * Moved setting of basis gates to circuits(), because in __init__ the transpile_options are not available yet * Cleaned up setting of tranpile_options in the test. Added call to generate_1q_transpiled_clifford_circuits in InterleavedRB.circuits() * Changed the clifford compose mapping so that the rhs includes only single-gate cliffords. The purpose is to reduce the size of the mapping table * Changed all methods in CliffordUtils to be classmethod * Fixes following changes in CliffordUtils * Changed structure of CLIFF_COMPOSE_DATA to be an array instead of a dict, for performance reasons. The index in the array is computed in compose_num_with_clifford * Improved _layout_for_rb_single_qubit to be more robust * Documentation, black, pylint * black * Removed the parameter transpiled_rb used for choosing whether to use old algorithm or new one. * Cleaning up * Generated transpiled clifford circuits for 2 qubits, and stored in a file. Adding load from this file in circuits() * re-generated transpiled circuits * Added support for compose_num_with_clifford_2q. Added suitable test - test_number_to_clifford_mapping_2q. * Created method load_transpiled_cliff_circuits * Added support for two sets of basis gates and their corresponding transpiled clifford files * United the two class variables _transpiled_cliff_circuits_1q and _transpiled_cliff_circuits_2q to a single dict * Added setting of transpile_options to all tests * Fixed error messages * United methods compose_num_with_clifford and num_from_clifford_single_gate for 1 and 2 qubits. Interface changes in StandardRB towards uniting functionality for 1 and 2 qubits * Unified the format for CLIFF_SINGLE_GATE_MAP_1Q and CLIFF_SINGLE_GATE_MAP_2Q * Added method clifford_inverse_by_num to unite handling of 1 and 2 qubit-rb * Fixes to support 1 and 2 qubits in _build_rb_circuits * Fixed more places where the code assumed 1 qubit rb * Fix for handling of delay. Changed test_interleaving_circuit_with_delay to suit transpiled circuits * changed basis gates in test, because rz is not supported in conversion to Clifford * Extended lenths for test, because test was failing for statistical reasons * changed name of method after addition of 2q * black and lint * black, lint and documentation * black, lint, cleaning * Removed legacy code. Additional cleaning * Removed more legacy code. More cleaning * Removed pylint messages for the data file * pylint, and use method CliffordUtils.file_name * Removed additional legacy code * Release notes * Added missing () * Fixed error message * Added QiskitError to documentation * black * Fixed error message * Changed varible name * attempt to fix documentation failure in CI * pylint * Added transpile options to every experiment * Made setting transpile_options mandatory, because if basis_gates are taken from backend, then the names of the transpiled clifford files don't match * Split test_rb_utils into itself and test_clifford_utils * Added tests for composing a clifford with a number * Added test for inverse clifford by num * Changed random to rng because of failure on Windows * Removed dependency on Aer for transpile. Removed the method transpile_single_clifford and use transpile() directly instead * Changed parameter backend to be optional, as it was before * Improved format for CLIFF_SINGLE_GATE_MAP, CLIFF_COMPOSE_DATA, CLIFF_INVERSE_DATA * Changed usage from cliff.__repr__ to repr(cliff) * Fixed a bug where transpiled_circuits were loaded multiple times * New algorithm that constructs the Cliffords by layers * Added support for 1 qubits, for full sampling and for interleaved rb * Removed unused files. Black * Added 2 parameters to CliffordUtils.__init__: num_qubits and basis_gates * Removed all parameters num_qubits and use self.num-qubits instead * Removed usage of specific gate sets * moved interleaved element out of StandardRB * Split _build_rb_circuits into small methods to make it more modular * Added tests for CliffordUtils * Added support for cz * Added backend to CliffordInit.__init__. Added transpile to initial circuit created in _build methods * Modified test_correct_1q_depolarization for it to pass * black and pylint * Fixed bug with cz - since it is a symmetrical operation, we store only (cz, [0,1]) in all the Clifford lists. * Fixed the parameters in cliffordUtils methods. Since num_qubits was added as a class member, no need to pass it as a parameter. * Data updated by changes in create_clifford_map.py from previous commit * Fixed two tests. test_correct_1q_depolarization was failing due to too strict assertion. test_interleaving_circuit_with_delay needed to be changed because now returns transpiled circuits. * Changed usage of VGate and WGate to their component gates: s, h, sdg. * Moved transpiled clifford structures outside init to make them static in the class * Added test for two qubit rb in parallel * Moved structures back inside __init__ because the previous change caused a bug * Added back the old code to create RB circuits for more than 2 qubits * Changed InterleavedRB.circuits to call its super() when number of qubits > 2. Added default set of basis gates * Added test for three qubit RB * Documentation * black and pylint * Disabled black and pylint errors on clifford_data.py * Changed _clifford_utils to be a static class member. Added a couple of short methods to reduce code duplication * Updated release notes * Fixed failing test * Fixed bug: _transpile_cliff_layer_0 was ignoring the backend * Documentation * Reverted changes in tutorial as it is not mandatory to supply basis_gates any more * Cleaning up * Cleaning up * black and doc * Fixed bug found in tutorial - added transpile at the beginning of building an interleaved circuit * Added header * black * Cleaning up temporary comments * documentation * Changed order of several methods * Removed -interleave(). It was previously removed in main, but I forgot it in the code * Removed method _set_interleaved_element that was removed in a previous PR and I missed it * Name changed and spaces * Removed empty spaces * typo * Fixed transpilation of interleaved element. Made a few structural changes to the surrounding code
- Loading branch information