Compare commits

...

1 Commits

Author SHA1 Message Date
Harmen Stoppels
8b020067f4 spec.py: further arch related fixes 2025-01-28 16:59:53 +01:00

View File

@ -230,7 +230,7 @@ def ensure_modern_format_string(fmt: str) -> None:
def _make_microarchitecture(name: str) -> archspec.cpu.Microarchitecture:
if isinstance(name, archspec.cpu.Microarchitecture):
return name
return archspec.cpu.TARGETS.get(name, archspec.cpu.generic_microarchitecture(name))
return archspec.cpu.TARGETS.get(name) or archspec.cpu.generic_microarchitecture(name)
@lang.lazy_lexicographic_ordering
@ -467,10 +467,10 @@ def _target_constrain(self, other: "ArchSpec") -> bool:
if not other._target_satisfies(self, strict=False):
raise UnsatisfiableArchitectureSpecError(self, other)
if self.target_concrete:
if self._target_concrete:
return False
elif other.target_concrete:
elif other._target_concrete:
self.target = other.target
return True
@ -485,8 +485,8 @@ def _target_constrain(self, other: "ArchSpec") -> bool:
self.target = intersection_target
return True
def _target_intersection(self, other):
results = []
def _target_intersection(self, other: "ArchSpec") -> List[str]:
results: List[str] = []
if not self.target or not other.target:
return results
@ -593,23 +593,23 @@ def constrain(self, other: "ArchSpec") -> bool:
return constrained
def copy(self):
def copy(self) -> "ArchSpec":
"""Copy the current instance and returns the clone."""
return ArchSpec(self)
@property
def concrete(self):
"""True if the spec is concrete, False otherwise"""
return self.platform and self.os and self.target and self.target_concrete
return self.platform and self.os and self.target and self._target_concrete
@property
def target_concrete(self):
def _target_concrete(self) -> bool:
"""True if the target is not a range or list."""
return (
self.target is not None and ":" not in str(self.target) and "," not in str(self.target)
)
def to_dict(self):
def to_dict(self) -> dict:
# Generic targets represent either an architecture family (like x86_64)
# or a custom micro-architecture
if self.target.vendor == "generic":
@ -621,7 +621,7 @@ def to_dict(self):
return {"arch": {"platform": self.platform, "platform_os": self.os, "target": target_data}}
@staticmethod
def from_dict(d):
def from_dict(d: dict) -> "ArchSpec":
"""Import an ArchSpec from raw YAML/JSON data"""
arch = d["arch"]
target_name = arch["target"]
@ -631,13 +631,12 @@ def from_dict(d):
return ArchSpec((arch["platform"], arch["platform_os"], target))
def __str__(self):
return "%s-%s-%s" % (self.platform, self.os, self.target)
return f"{self.platform}-{self.os}-{self.target}"
def __repr__(self):
fmt = "ArchSpec(({0.platform!r}, {0.os!r}, {1!r}))"
return fmt.format(self, str(self.target))
return f"ArchSpec(({self.platform!r}, {self.os!r}, {str(self.target)!r}))"
def __contains__(self, string):
def __contains__(self, string) -> bool:
return string in str(self) or string in self.target