def circuit_from_qasm_string(qasm_string,
                             name=None,
                             basis_gates="id,u0,u1,u2,u3,x,y,z,h,s,sdg,t,tdg,"
                             "rx,ry,rz,cx,cy,cz,ch,crz,cu1,cu3,swap,ccx,"
                             "cswap"):
    """Construct a quantum circuit from a qasm representation (string).

    Args:
        qasm_string (str): a string of qasm, or a filename containing qasm.
        basis_gates (str): basis gates for the quantum circuit.
        name (str or None): the name of the quantum circuit after loading
            qasm text into it. If no name given, assign automatically.
    Returns:
        QuantumCircuit: circuit constructed from qasm.
    Raises:
        QISKitError: if the string is not valid QASM
    """

    node_circuit = Qasm(data=qasm_string).parse()
    unrolled_circuit = Unroller(node_circuit,
                                CircuitBackend(basis_gates.split(",")))
    circuit_unrolled = unrolled_circuit.execute()
    if name:
        circuit_unrolled.name = name
    return circuit_unrolled
def load_unroll_qasm_file(filename, basis_gates='u1,u2,u3,cx,id'):
    """Load qasm file and return unrolled circuit

    Args:
        filename (str): a string for the filename including its location.
        basis_gates (str): basis to unroll circuit to.
    Returns:
        object: Returns a unrolled QuantumCircuit object
    """
    # create Program object Node (AST)
    node_circuit = qasm.Qasm(filename=filename).parse()
    node_unroller = Unroller(node_circuit, CircuitBackend(basis_gates.split(",")))
    circuit_unrolled = node_unroller.execute()
    return circuit_unrolled
def load_qasm_string(qasm_string, name=None,
                     basis_gates="id,u0,u1,u2,u3,x,y,z,h,s,sdg,t,tdg,rx,ry,rz,"
                                 "cx,cy,cz,ch,crz,cu1,cu3,swap,ccx,cswap"):
    """Construct a quantum circuit from a qasm representation (string).

    Args:
        qasm_string (str): a string of qasm, or a filename containing qasm.
        basis_gates (str): basis gates for the quantum circuit.
        name (str or None): the name of the quantum circuit after loading qasm
            text into it. If no name given, assign automatically.
    Returns:
        QuantumCircuit: circuit constructed from qasm.
    Raises:
        QISKitError: if the string is not valid QASM
    """
    node_circuit = Qasm(data=qasm_string).parse()
    unrolled_circuit = Unroller(node_circuit, CircuitBackend(basis_gates.split(",")))
    circuit_unrolled = unrolled_circuit.execute()
    if name:
        circuit_unrolled.name = name
    return circuit_unrolled