diff --git a/src/python/gem5/resources/resource.py b/src/python/gem5/resources/resource.py index aafb3b70b0..4b4e3c0b79 100644 --- a/src/python/gem5/resources/resource.py +++ b/src/python/gem5/resources/resource.py @@ -70,6 +70,7 @@ class AbstractResource: def __init__( self, + id: Optional[str] = None, resource_version: Optional[str] = None, local_path: Optional[str] = None, description: Optional[str] = None, @@ -91,12 +92,24 @@ class AbstractResource: f"Local path specified for resource, '{local_path}', does not " "exist." ) - + self._id = id self._local_path = local_path self._description = description self._source = source self._version = resource_version + def get_category_name(cls) -> str: + raise NotImplementedError + + def __str__(self): + message = ( + f"{self.get_category_name()}({self._id}, {self._version})\n" + "For more information, please visit " + f"https://resources.gem5.org/resources/{self._id}?" + f"version={self._version}" + ) + return message + def get_resource_version(self) -> str: """Returns the version of the resource.""" return self._version @@ -122,6 +135,7 @@ class FileResource(AbstractResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -134,11 +148,15 @@ class FileResource(AbstractResource): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, ) + def get_category_name(cls) -> str: + return "FileResource" + class DirectoryResource(AbstractResource): """A resource consisting of a directory.""" @@ -146,6 +164,7 @@ class DirectoryResource(AbstractResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -159,11 +178,15 @@ class DirectoryResource(AbstractResource): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, ) + def get_category_name(cls) -> str: + return "DirectoryResource" + class DiskImageResource(FileResource): """A Disk Image resource.""" @@ -171,6 +194,7 @@ class DiskImageResource(FileResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -179,6 +203,7 @@ class DiskImageResource(FileResource): ): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, @@ -189,6 +214,9 @@ class DiskImageResource(FileResource): """Returns, if applicable, the Root Partition of the disk image.""" return self._root_partition + def get_category_name(cls) -> str: + return "DiskImageResource" + class BinaryResource(FileResource): """A binary resource.""" @@ -196,6 +224,7 @@ class BinaryResource(FileResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -204,6 +233,7 @@ class BinaryResource(FileResource): ): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, @@ -216,6 +246,9 @@ class BinaryResource(FileResource): elif isinstance(architecture, ISA): self._architecture = architecture + def get_category_name(cls) -> str: + return "BinaryResource" + def get_architecture(self) -> Optional[ISA]: """Returns the ISA this binary is compiled to.""" return self._architecture @@ -227,6 +260,7 @@ class BootloaderResource(BinaryResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -235,12 +269,16 @@ class BootloaderResource(BinaryResource): ): super().__init__( local_path=local_path, + id=id, description=description, architecture=architecture, source=source, resource_version=resource_version, ) + def get_category_name(cls) -> str: + return "BootloaderResource" + class GitResource(DirectoryResource): """A git resource.""" @@ -248,6 +286,7 @@ class GitResource(DirectoryResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -255,11 +294,15 @@ class GitResource(DirectoryResource): ): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, ) + def get_category_name(cls) -> str: + return "GitResource" + class KernelResource(BinaryResource): """A kernel resource.""" @@ -267,6 +310,7 @@ class KernelResource(BinaryResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -275,12 +319,16 @@ class KernelResource(BinaryResource): ): super().__init__( local_path=local_path, + id=id, description=description, source=source, architecture=architecture, resource_version=resource_version, ) + def get_category_name(cls) -> str: + return "KernelResource" + class CheckpointResource(DirectoryResource): """A checkpoint resource. The following directory structure is expected: @@ -293,6 +341,7 @@ class CheckpointResource(DirectoryResource): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -300,11 +349,15 @@ class CheckpointResource(DirectoryResource): ): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, ) + def get_category_name(cls) -> str: + return "CheckpointResource" + class SimpointResource(AbstractResource): """A simpoint resource. This resource stores all information required to @@ -320,6 +373,7 @@ class SimpointResource(AbstractResource): simpoint_list: List[int] = None, weight_list: List[float] = None, warmup_interval: int = 0, + id: Optional[str] = None, workload_name: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -340,6 +394,7 @@ class SimpointResource(AbstractResource): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, @@ -421,6 +476,9 @@ class SimpointResource(AbstractResource): self._simpoint_start_insts[index] = start_inst - warmup_inst return warmup_list + def get_category_name(cls) -> str: + return "SimpointResource" + class LooppointCsvResource(FileResource, LooppointCsvLoader): """This Looppoint resource used to create a Looppoint resource from a @@ -429,6 +487,7 @@ class LooppointCsvResource(FileResource, LooppointCsvLoader): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -437,17 +496,22 @@ class LooppointCsvResource(FileResource, LooppointCsvLoader): FileResource.__init__( self, local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, ) LooppointCsvLoader.__init__(self, pinpoints_file=Path(local_path)) + def get_category_name(cls) -> str: + return "LooppointCsvResource" + class LooppointJsonResource(FileResource, LooppointJsonLoader): def __init__( self, local_path: str, + id: Optional[str] = None, resource_version: Optional[str] = None, region_id: Optional[Union[str, int]] = None, description: Optional[str] = None, @@ -457,6 +521,7 @@ class LooppointJsonResource(FileResource, LooppointJsonLoader): FileResource.__init__( self, local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, @@ -465,6 +530,9 @@ class LooppointJsonResource(FileResource, LooppointJsonLoader): self, looppoint_file=local_path, region_id=region_id ) + def get_category_name(cls) -> str: + return "LooppointJsonResource" + class SimpointDirectoryResource(SimpointResource): """A Simpoint diretory resource. This Simpoint Resource assumes the @@ -477,6 +545,7 @@ class SimpointDirectoryResource(SimpointResource): weight_file: str, simpoint_interval: int, warmup_interval: int, + id: Optional[str] = None, resource_version: Optional[str] = None, workload_name: Optional[str] = None, description: Optional[str] = None, @@ -510,6 +579,7 @@ class SimpointDirectoryResource(SimpointResource): warmup_interval=warmup_interval, workload_name=workload_name, local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, @@ -553,6 +623,9 @@ class SimpointDirectoryResource(SimpointResource): weight_list.append(weight) return simpoint_list, weight_list + def get_category_name(cls) -> str: + return "SimpointDirectoryResource" + class WorkloadResource(AbstractResource): """A workload resource. This resource is used to specify a workload to run @@ -563,6 +636,7 @@ class WorkloadResource(AbstractResource): def __init__( self, function: str = None, + id: Optional[str] = None, resource_version: Optional[str] = None, description: Optional[str] = None, source: Optional[str] = None, @@ -577,6 +651,7 @@ class WorkloadResource(AbstractResource): super().__init__( local_path=local_path, + id=id, description=description, source=source, resource_version=resource_version, @@ -613,6 +688,9 @@ class WorkloadResource(AbstractResource): """ self._params[parameter] = value + def get_category_name(cls) -> str: + return "WorkloadResource" + def obtain_resource( resource_id: str,