Ejemplo n.º 1
0
import ply.lex as lex
import logging

from pycactus.utils import get_logger
logger_lex = get_logger('lexer')
logger_lex.setLevel(logging.INFO)


class Eqasm_lexer(object):
    def __init__(self):
        """Create a ply lexer."""
        self.lexer = lex.lex(module=self,
                             debug=False,
                             errorlog=lex.NullLogger())

        self.lineno = 1

    # must be defined for the lexer
    def input(self, data):
        """Set the input text data."""
        self.data = data.lower()
        self.lexer.input(self.data)

    # must be defined for the lexer
    def token(self):
        """Return the next token."""
        ret = self.lexer.token()
        return ret

    reserved = {
        'nop': 'NOP',
Ejemplo n.º 2
0
# TODO: add definition def_sym and .register

# ------------------------------------------------------------
import logging
from logging import error
import tempfile
from pycactus.eqasm_lexer import Eqasm_lexer
from pycactus.global_config import pycactus_root_dir
from pathlib import Path
import re
import ply.lex as lex
import ply.yacc as yacc
from pycactus.insn import *
from pycactus.utils import get_logger

logger_yacc = get_logger('yacc')
logger_yacc.setLevel(logging.ERROR)


class Eqasm_parser:
    '''eQASM parser'''
    def __init__(self):
        self.lexer = Eqasm_lexer()
        # print("lexer in parser is: ", self.lexer)
        self.tokens = self.lexer.tokens
        self.parse_dir = tempfile.mkdtemp(prefix='pycactus')
        # For yacc, also, write_tables = Bool and optimize = Bool
        self.parser = yacc.yacc(module=self,
                                debug=False,
                                outputdir=self.parse_dir)
Ejemplo n.º 3
0
from logging import log
from .quantumsim_wrapper import interface_quantumsim
from .if_qubit_sim import If_qubit_sim
from pycactus.utils import get_logger
import logging

logger = get_logger((__name__).split('.')[-1])


class Quantumsim(If_qubit_sim):
    def __init__(self, num_qubit: int, log_level=logging.WARNING):
        """
        Interface for the qubit state simulator .
        """
        super().__init__('quantumsim')

        self.quantumsim = interface_quantumsim()
        self.quantumsim.init_dm(num_qubit)
        self.quantumsim.print_classical_state()
        self.set_log_level(log_level)
        logger.info("initialize quantumsim")

    def set_log_level(self, log_level):
        logger.setLevel(log_level)

    def apply_idle_gate(self, idle_duration, qubit):
        self.quantumsim.calculate_gamma_lamda(idle_duration)
        self.quantumsim.prepare_idling_ptm()
        self.quantumsim.apply_ptm()

    def apply_single_qubit_gate(self, operation, qubit):