# Path: cmd_ir/core_types.py
# class InsnArg:
# 
#     @classmethod
#     def _init_from_parser(cls, value):
#         return value
# 
# class NativeType(InsnArg):
# 
#     @classmethod
#     def typename(cls):
#         return cls.__name__
# 
#     def clone(self):
#         raise TypeError(self.typename() + ' does not support cloning')
# 
#     def inline_copy(self):
#         import copy
#         return copy.copy(self)
# 
#     def write_out(self, out):
#         pass
# 
# Path: cmd_ir/nbt.py
# class NBTType(NativeType):
# 
#     __LOOKUP = {}
# 
#     def __init__(self, typename, compound=False):
#         self.name = typename
#         self._compound = compound
#         self.__LOOKUP[typename] = self
# 
#     @property
#     def exec_store_name(self):
#         assert self.isnumeric
#         # Currently we have the same names
#         return self.name
# 
#     @property
#     def isnumeric(self):
#         return not self._compound and self.name != 'string'
# 
#     def __str__(self):
#         return 'NBTType(%s)' % self.name
# 
#     def serialize(self):
#         return self.name
# 
#     @classmethod
#     def _init_from_parser(cls, value):
#         return cls.__LOOKUP[value]
# 
#     def new(self, *args):
#         # There are better ways of doing this
#         if self is self.byte:
#             impl = NBTByte
#         elif self is self.short:
#             impl = NBTShort
#         elif self is self.int:
#             impl = NBTInt
#         elif self is self.long:
#             impl = NBTLong
#         elif self is self.float:
#             impl = NBTFloat
#         elif self is self.double:
#             impl = NBTDouble
#         elif self is self.string:
#             impl = NBTString
#         elif self is self.list:
#             impl = NBTList
#         elif self is self.compound:
#             impl = NBTCompound
#         else:
#             assert False, str(self)
#         return impl(*args)
# 
#     byte = None
#     short = None
#     int = None
#     long = None
#     float = None
#     double = None
#     string = None
#     list = None
#     compound = None


import abc
import commands as c
        import copy
from .core_types import InsnArg, NativeType
from .nbt import NBTType

    @property
    def scale(self):
        raise TypeError('%s cannot scale values' % self)

class IConversions(Conversions):

    @property
    def scale(self):
        return 1

    def to_int(self, val):
        return int(val)

class QConversions(Conversions):

    def __init__(self, size):
        self.size = size
        self.__scale = 2 ** size

    @property
    def scale(self):
        return self.__scale

    def to_int(self, val):
        return int(val * self.scale)

class NBTConversions(Conversions):
    pass


# Path: cmd_ir/core_types.py
# class InsnArg:
# 
#     @classmethod
#     def _init_from_parser(cls, value):
#         return value
# 
# class NativeType(InsnArg):
# 
#     @classmethod
#     def typename(cls):
#         return cls.__name__
# 
#     def clone(self):
#         raise TypeError(self.typename() + ' does not support cloning')
# 
#     def inline_copy(self):
#         import copy
#         return copy.copy(self)
# 
#     def write_out(self, out):
#         pass
# 
# Path: cmd_ir/nbt.py
# class NBTType(NativeType):
# 
#     __LOOKUP = {}
# 
#     def __init__(self, typename, compound=False):
#         self.name = typename
#         self._compound = compound
#         self.__LOOKUP[typename] = self
# 
#     @property
#     def exec_store_name(self):
#         assert self.isnumeric
#         # Currently we have the same names
#         return self.name
# 
#     @property
#     def isnumeric(self):
#         return not self._compound and self.name != 'string'
# 
#     def __str__(self):
#         return 'NBTType(%s)' % self.name
# 
#     def serialize(self):
#         return self.name
# 
#     @classmethod
#     def _init_from_parser(cls, value):
#         return cls.__LOOKUP[value]
# 
#     def new(self, *args):
#         # There are better ways of doing this
#         if self is self.byte:
#             impl = NBTByte
#         elif self is self.short:
#             impl = NBTShort
#         elif self is self.int:
#             impl = NBTInt
#         elif self is self.long:
#             impl = NBTLong
#         elif self is self.float:
#             impl = NBTFloat
#         elif self is self.double:
#             impl = NBTDouble
#         elif self is self.string:
#             impl = NBTString
#         elif self is self.list:
#             impl = NBTList
#         elif self is self.compound:
#             impl = NBTCompound
#         else:
#             assert False, str(self)
#         return impl(*args)
# 
#     byte = None
#     short = None
#     int = None
#     long = None
#     float = None
#     double = None
#     string = None
#     list = None
#     compound = None


# Path: cmd_ir/variables.py
import abc
import commands as c
        import copy
from .core_types import InsnArg, NativeType
from .nbt import NBTType


    @property
    def scale(self):
        raise TypeError('%s cannot scale values' % self)

class IConversions(Conversions):

    @property
    def scale(self):
        return 1

    def to_int(self, val):
        return int(val)

class QConversions(Conversions):

    def __init__(self, size):
        self.size = size
        self.__scale = 2 ** size

    @property
    def scale(self):
        return self.__scale

    def to_int(self, val):
        return int(val * self.scale)

class NBTConversions(Conversions):
    pass


class VarType(InsnArg):