from dataclasses import dataclass, field
from typing import Optional
from feynml.id import Identifiable
from feynml.pdgid import PDG
[docs]@dataclass
class Sourcing:
source: Optional[str] = field(default="", metadata={})
"""Source of the object"""
def __post_init__(self):
if isinstance(self, PDG):
PDG.__post_init__(self)
elif isinstance(self, Identifiable):
Identifiable.__post_init__(self)
if isinstance(self.source, Identifiable):
self.source = self.source.id
def with_source(self, source):
if isinstance(source, str):
self.source = source
else:
self.source = source.id
return self
[docs] def goes_out_of(self, vertex):
"""Return True if the propagator goes out of the vertex, False otherwise."""
return self.source == vertex.id