# Path: compile_definitions/utilities.py
# def f_fmt(data, *args, **kwargs):
#     for arg in args:
#         op = str if kwargs.get('sane', True) else f_repr
#         data = data.replace('%s', op(arg), 1)
#     data = data.replace('%S', '%s')
#     return data
# 
# def to_docstring(label, doc, prefix=4,
#                  blank=True):  # output a full docstring section
#     label = [] if label is None else [label]
#     doc = [] if doc is None else [q.strip() for q in doc.split(u'\n') if
#                                   len(q.strip()) > 0]
#     pre = u' ' * prefix
# 
#     doc = label + doc
# 
#     if len(doc) == 0:
#         return u''
# 
#     doc[0] = doc[0].capitalize()
# 
#     if len(doc) == 1:
#         return doc[0]
# 
#     doc = [p for p in doc if len(p.strip()) > 0]
# 
#     if blank:
#         doc = [doc[0], u''] + doc[1:]
# 
#     f = (u'\n'.join(pre + lin for lin in doc))[prefix:]
#     return f
# 
# def pythonify_name(p):
#     return p.strip().replace('-', '_').upper()
# 
# def to_code_binary(p):
#     body = []
#     for q in p:
#         if isinstance(q, int):
#             q = six.int2byte(q)
#         z = (hex(ord(q))[2:].upper())
#         if len(z) == 1:
#             z = u'0' + z
#         body.append(u'\\x' + z)
#     return u"b'" + (u''.join(body)) + u"'"
# 
# def f_repr(p, sop=six.text_type):
#     if isinstance(p, (six.binary_type, six.text_type)):
#         p = sop(p)
#     s = repr(p)
# 
#     if isinstance(p, (six.binary_type, six.text_type)) and not s.startswith(
#             'u'):
#         return ('u' if sop == six.text_type else 'b') + s
#     else:
#         return s
# 
# @as_unicode
# def format_method_class_name(method_name):
#     if '-' in method_name:
#         i = method_name.find('-')
#         return method_name[0:i].capitalize() + method_name[
#             i + 1].upper() + method_name[i + 2:]
#     else:
#         return method_name.capitalize()
# 
# @as_unicode
# def name_class(classname):
#     """Change AMQP class name to Python class name"""
#     return classname.capitalize()
# 
# def get_size(fields):  # assume all fields have static length
#     """Assuming all fields have static length, return their length together. Supports bits"""
#     size = 0
#     bits = 0
#     for field in fields:
# 
#         if (bits > 0) and (field.basic_type != 'bit'):  # sync bits
#             size += int(math.ceil(bits / 8))
#             bits = 0
# 
#         if BASIC_TYPES[field.basic_type][0] is None:
#             if field.basic_type == 'bit':
#                 bits += 1
#             else:
#                 size += len(
#                     BASIC_TYPES[field.basic_type][2])  # default minimum entry
#         else:
#             size += BASIC_TYPES[field.basic_type][0]
# 
#     if bits > 0:  # sync bits
#         size += int(math.ceil(bits / 8))
# 
#     return size
# 
# Path: coolamqp/framing/compilation/utilities.py
# @as_unicode
# def format_field_name(field):
#     if field in (u'global', u'type'):
#         field = field + '_'
#     return field.replace('-', '_')
# 
# Path: compile_definitions/xml_tags.py
# class Constant(BaseObject):
#     NAME = 'constant'
#     FIELDS = [
#         _name,
#         SimpleField('value', int),
#         ValueField('class', 'kind', default=''),
#         _docs,
#     ]
# 
# class Class(BaseObject):
#     NAME = 'class'
#     FIELDS = [
#         _name,
#         SimpleField('index', int),
#         _docs_with_label,
#         ChildField('methods', 'method', Method, post_exec= \
#             _cls_method_postexec),
#         ChildField('properties', 'field', Field)
#     ]
# 
# class Domain(BaseObject):
#     NAME = 'domain'
#     FIELDS = [
#         _name,
#         SimpleField('type'),
#         ComputedField('elementary',
#                       lambda a: a.attrib['type'] == a.attrib['name'])
#     ]


import collections
import math
import struct
import subprocess
import six
from xml.etree import ElementTree
from compile_definitions.utilities import f_fmt, to_docstring, pythonify_name, to_code_binary, f_repr, \
    format_method_class_name, name_class, get_size
from coolamqp.framing.compilation.utilities import format_field_name
from .xml_tags import Constant, Class, Domain
                from coolamqp.framing.compilation.textcode_fields import \
                    get_serializer, get_counter, get_from_buffer
            %s.PARTICULAR_CLASSES[zpf] = c
            return c.from_buffer(buf, offset)

'''.replace('%s', name_class(cls.name) + 'ContentPropertyList').replace("%d",
                                                                        "%s"))

        # ============================================ Do methods for this class
        for method in cls.methods:
            full_class_name = u'%s%s' % (
                name_class(cls.name), format_method_class_name(method.name))

            # annotate types
            method.fields = [
                field._replace(basic_type=domain_to_basic_type[field.type]) for
                field in method.fields]

            non_reserved_fields = [field for field in method.fields if
                                   not field.reserved]

            is_static = method.is_static()
            if is_static:
                static_size = get_size(method.fields)

            is_content_static = len(
                [f for f in method.fields if not f.reserved]) == 0

            if len(non_reserved_fields) == 0:
                slots = u''
            else:
                slots = (u', '.join(

# Path: compile_definitions/utilities.py
# def f_fmt(data, *args, **kwargs):
#     for arg in args:
#         op = str if kwargs.get('sane', True) else f_repr
#         data = data.replace('%s', op(arg), 1)
#     data = data.replace('%S', '%s')
#     return data
# 
# def to_docstring(label, doc, prefix=4,
#                  blank=True):  # output a full docstring section
#     label = [] if label is None else [label]
#     doc = [] if doc is None else [q.strip() for q in doc.split(u'\n') if
#                                   len(q.strip()) > 0]
#     pre = u' ' * prefix
# 
#     doc = label + doc
# 
#     if len(doc) == 0:
#         return u''
# 
#     doc[0] = doc[0].capitalize()
# 
#     if len(doc) == 1:
#         return doc[0]
# 
#     doc = [p for p in doc if len(p.strip()) > 0]
# 
#     if blank:
#         doc = [doc[0], u''] + doc[1:]
# 
#     f = (u'\n'.join(pre + lin for lin in doc))[prefix:]
#     return f
# 
# def pythonify_name(p):
#     return p.strip().replace('-', '_').upper()
# 
# def to_code_binary(p):
#     body = []
#     for q in p:
#         if isinstance(q, int):
#             q = six.int2byte(q)
#         z = (hex(ord(q))[2:].upper())
#         if len(z) == 1:
#             z = u'0' + z
#         body.append(u'\\x' + z)
#     return u"b'" + (u''.join(body)) + u"'"
# 
# def f_repr(p, sop=six.text_type):
#     if isinstance(p, (six.binary_type, six.text_type)):
#         p = sop(p)
#     s = repr(p)
# 
#     if isinstance(p, (six.binary_type, six.text_type)) and not s.startswith(
#             'u'):
#         return ('u' if sop == six.text_type else 'b') + s
#     else:
#         return s
# 
# @as_unicode
# def format_method_class_name(method_name):
#     if '-' in method_name:
#         i = method_name.find('-')
#         return method_name[0:i].capitalize() + method_name[
#             i + 1].upper() + method_name[i + 2:]
#     else:
#         return method_name.capitalize()
# 
# @as_unicode
# def name_class(classname):
#     """Change AMQP class name to Python class name"""
#     return classname.capitalize()
# 
# def get_size(fields):  # assume all fields have static length
#     """Assuming all fields have static length, return their length together. Supports bits"""
#     size = 0
#     bits = 0
#     for field in fields:
# 
#         if (bits > 0) and (field.basic_type != 'bit'):  # sync bits
#             size += int(math.ceil(bits / 8))
#             bits = 0
# 
#         if BASIC_TYPES[field.basic_type][0] is None:
#             if field.basic_type == 'bit':
#                 bits += 1
#             else:
#                 size += len(
#                     BASIC_TYPES[field.basic_type][2])  # default minimum entry
#         else:
#             size += BASIC_TYPES[field.basic_type][0]
# 
#     if bits > 0:  # sync bits
#         size += int(math.ceil(bits / 8))
# 
#     return size
# 
# Path: coolamqp/framing/compilation/utilities.py
# @as_unicode
# def format_field_name(field):
#     if field in (u'global', u'type'):
#         field = field + '_'
#     return field.replace('-', '_')
# 
# Path: compile_definitions/xml_tags.py
# class Constant(BaseObject):
#     NAME = 'constant'
#     FIELDS = [
#         _name,
#         SimpleField('value', int),
#         ValueField('class', 'kind', default=''),
#         _docs,
#     ]
# 
# class Class(BaseObject):
#     NAME = 'class'
#     FIELDS = [
#         _name,
#         SimpleField('index', int),
#         _docs_with_label,
#         ChildField('methods', 'method', Method, post_exec= \
#             _cls_method_postexec),
#         ChildField('properties', 'field', Field)
#     ]
# 
# class Domain(BaseObject):
#     NAME = 'domain'
#     FIELDS = [
#         _name,
#         SimpleField('type'),
#         ComputedField('elementary',
#                       lambda a: a.attrib['type'] == a.attrib['name'])
#     ]


# Path: compile_definitions/__main__.py
import collections
import math
import struct
import subprocess
import six
from xml.etree import ElementTree
from compile_definitions.utilities import f_fmt, to_docstring, pythonify_name, to_code_binary, f_repr, \
    format_method_class_name, name_class, get_size
from coolamqp.framing.compilation.utilities import format_field_name
from .xml_tags import Constant, Class, Domain
                from coolamqp.framing.compilation.textcode_fields import \
                    get_serializer, get_counter, get_from_buffer

            %s.PARTICULAR_CLASSES[zpf] = c
            return c.from_buffer(buf, offset)

'''.replace('%s', name_class(cls.name) + 'ContentPropertyList').replace("%d",
                                                                        "%s"))

        # ============================================ Do methods for this class
        for method in cls.methods:
            full_class_name = u'%s%s' % (
                name_class(cls.name), format_method_class_name(method.name))

            # annotate types
            method.fields = [
                field._replace(basic_type=domain_to_basic_type[field.type]) for
                field in method.fields]

            non_reserved_fields = [field for field in method.fields if
                                   not field.reserved]

            is_static = method.is_static()
            if is_static:
                static_size = get_size(method.fields)

            is_content_static = len(
                [f for f in method.fields if not f.reserved]) == 0

            if len(non_reserved_fields) == 0:
                slots = u''
            else:
                slots = (u', '.join(

                    map(lambda f: f_repr(format_field_name(f.name)),