Source code for feynml.feynml

import logging
import warnings
from dataclasses import dataclass, field
from importlib.metadata import version
from typing import List, Optional

import cssutils
from xsdata.formats.dataclass.parsers import XmlParser
from xsdata.formats.dataclass.serializers import XmlSerializer
from xsdata.formats.dataclass.serializers.config import SerializerConfig

from feynml.feynmandiagram import FeynmanDiagram

# We don't want to see the cssutils warnings, since we have custom properties
cssutils.log.setLevel(logging.CRITICAL)


feynml_version = "0.0"


[docs]@dataclass class Tool: class Meta: name = "tool" name: Optional[str] = field(default="feynml", metadata={"type": "Element"}) version: Optional[str] = field( default=version("feynml"), metadata={"type": "Element"} )
[docs]@dataclass class Meta: class Meta: name = "meta" name: Optional[str] = field(default="", metadata={"type": "Attribute"}) content: Optional[str] = field(default="", metadata={"type": "Attribute"})
alias_meta = Meta
[docs]@dataclass class FeynML: class Meta: name = "feynml" version: Optional[str] = field( default=feynml_version, metadata={"name": "version", "type": "Attribute"} ) # post init to check version def __post_init__(self): if self.version < feynml_version: warnings.warn("FeynML version is older than this parser.") elif self.version > feynml_version: warnings.warn("FeynML version is newer than this parser.") self.head.metas.append(Meta("feynml", version("feynml"))) head: Optional[Head] = field( default=Head(), metadata={"name": "head", "namespace": "", "type": "Element"} ) diagrams: List[FeynmanDiagram] = field( default_factory=list, metadata={"name": "diagram", "type": "Element", "namespace": ""}, ) def get_diagram(self, idd): for d in self.diagrams: if d.id == idd: return d return None
[docs] def to_xml(self) -> str: """Return self as XML.""" config = SerializerConfig(pretty_print=True) serializer = XmlSerializer(config=config) return serializer.render(self)
[docs] @classmethod def from_xml(cls, xml: str): """Load self from XML.""" parser = XmlParser() return parser.from_string(xml, cls)