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',
# 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)
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):