Exemplo n.º 1
0
def parse_error(name):
    """
    Instanciate a subtype of :class:`BaseError`, depending on the format of
    ``name``. We currently understand the following formats::

        x               -> InitTwiss
        Δax_b3mu1       -> ElemAttr
        δax_b3mu1       -> ScaleAttr
        Δg3mu1->angle   -> Param
        δg3mu1->angle   -> ScaleParam
        g3mu1<dx>       -> Ealign
    """

    mult = name.startswith('δ')
    name = name.lstrip('δΔ \t')
    if name in ('x', 'y', 'px', 'py'):
        return InitTwiss(name)
    if '->' in name:
        elem, attr = name.split('->')
        if mult:
            return ScaleAttr(elem, attr)
        return ElemAttr(elem, attr)
    if '<' in name:
        elem, attr = re.match(r'(.*)\<(.*)\>', name).groups()
        return Ealign({'range': elem}, attr)
    if is_identifier(name):
        if mult:
            return ScaleParam(name)
        return Param(name)
    # TODO: efcomp field errors!
    raise ValueError("{!r} is not a valid error specification!".format(name))
Exemplo n.º 2
0
def _get_property_lval(elem, attr):
    """
    Return lvalue name for a given element attribute from MAD-X.

    >>> get_element_attribute(elements['r1qs1'], 'k1')
    'r1qs1->k1'
    """
    expr = elem[attr]
    if isinstance(expr, list):
        names = [_get_identifier(v) for v in expr]
        if not any(names):
            raise api.UnknownElement
        return names
    else:
        name = _get_identifier(expr)
        if is_identifier(name):
            return name
        return elem['name'] + '->' + attr
Exemplo n.º 3
0
 def test_is_identifier(self):
     self.assertTrue(util.is_identifier('hdr23_oei'))
     self.assertTrue(util.is_identifier('_hdr23_oei'))
     self.assertFalse(util.is_identifier('2_hdr23_oei'))
     self.assertFalse(util.is_identifier('hdr oei'))
     self.assertFalse(util.is_identifier('hdr@oei'))
Exemplo n.º 4
0
def test_is_identifier():
    assert util.is_identifier('hdr23_oei')
    assert util.is_identifier('_hdr23_oei')
    assert not util.is_identifier('2_hdr23_oei')
    assert not util.is_identifier('hdr oei')
    assert not util.is_identifier('hdr@oei')
Exemplo n.º 5
0
 def test_is_identifier(self):
     self.assertTrue(util.is_identifier('hdr23_oei'))
     self.assertTrue(util.is_identifier('_hdr23_oei'))
     self.assertFalse(util.is_identifier('2_hdr23_oei'))
     self.assertFalse(util.is_identifier('hdr oei'))
     self.assertFalse(util.is_identifier('hdr@oei'))