Scopri come scegliere la giusta estetista a domicilio per le tue esigenze di bellezza e benessere. In questo articolo, esploreremo i criteri fondamentali per una scelta consapevole, le domande da porre e i vantaggi dei servizi a domicilio, per garantirti un'esperienza di qualità e soddisfacente.
Trova professionisti vicino a te
Trova professionisti
from itertools import cycle
from . import base
from . import exprs
def _make_descriptor(name, label):
if name.endswith('_'):
name = name[:-1]
label_parts = label.split('_')
if label_parts[0] == 'imm':
label_parts = label_parts[1:]
label_parts = [p.title() for p in label_parts]
label = ''.join(label_parts)
attr_name = '_{}'.format(name)
setattr(base.Instruction, attr_name, property(lambda self: getattr(self, name)))
setattr(base.Instruction, name, property(lambda self: getattr(self, attr_name),
lambda self, val: setattr(self, attr_name, val)))
setattr(base.Instruction, label, property(lambda self: getattr(self, attr_name)))
def _make_descriptors(name, labels):
for label in labels:
_make_descriptor(name, label)
class _Builder:
def __init__(self):
self.opcodes = []
def opcode(self, *args):
self.opcodes.append(args)
def _make_instructions(builder):
instructions = {}
for args in builder.opcodes:
if len(args) == 2:
_, labels = args
name = labels[0]
labels = labels[1:]
args = (name,) + args
else:
_, name, labels = args
_make_descriptors(name, labels)
instruction = type(name, (base.Instruction,), {})
instructions[name] = instruction
setattr(base.Instructions, name, instruction)
return instructions
def _make_instructions_with_arity(builder):
instructions = _make_instructions(builder)
for args in builder.opcodes:
if len(args) == 2:
_, labels = args
name = labels[0]
labels = labels[1:]
args = (name,) + args
else:
_, name, labels = args
instruction = instructions[name]
setattr(instruction, 'arity', len(labels))
return instructions
def _make_instructions_with_exprs(builder, exprs):
instructions = _make_instructions_with_arity(builder)
for name, expr in exprs.items():
instruction = instructions[name]
setattr(instruction, 'expr', expr)
return instructions
def _make_instructions_with_opcodes(builder, exprs):
instructions = _make_instructions_with_exprs(builder, exprs)
for args in builder.opcodes:
if len(args) == 2:
opcode, labels = args
else:
opcode, name, labels = args
instruction = instructions[name]
setattr(instruction, 'opcode', opcode)
return instructions
def make_instructions(builder, exprs):
instructions = _make_instructions_with_opcodes(builder, exprs)
_make_descriptor('opcode', 'opcode')
_make_descriptor('expr', 'expr')
for name, instruction in instructions.items():
setattr(base.Instructions, name, instruction)
return instructions
def make_expression(expr):
if isinstance(expr, str):
lines = expr.split('\n')
if any(line.startswith(' ') for line in lines):
expr = exprs.compile(expr)
else:
expr = exprs.compile_lines(expr)
if isinstance(expr, (tuple, list)):
expr = exprs.make_expression(expr)
return expr
class _OpcodeMapper:
def __init__(self):
self.opcodes = cycle(range(64, 128))
def next(self):
return next(self.opcodes)
opcode_mapper = _OpcodeMapper()