Browse Source

[MNT] update add learnware method

tags/v0.3.2
bxdd 3 years ago
parent
commit
4358c67eca
6 changed files with 27 additions and 15 deletions
  1. +1
    -1
      examples/learnware_config/svm/learnware.yaml
  2. +5
    -1
      learnware/config.py
  3. +3
    -3
      learnware/learnware/__init__.py
  4. +12
    -8
      learnware/learnware/base.py
  5. +2
    -0
      learnware/learnware/utils.py
  6. +4
    -2
      learnware/market/easy.py

+ 1
- 1
examples/learnware_config/svm/learnware.yaml View File

@@ -1,8 +1,8 @@
model:
name: SVM_example
class_name: SVM
kwargs: {}
stat_specifications:
- module_name: learnware.specification
class_name: RKMEStatSpecification
file_name: svm.json
kwargs: {}

+ 5
- 1
learnware/config.py View File

@@ -97,9 +97,13 @@ semantic_config = {
"Type": "Tag", # Choose one or more tags
},
"Description": {
"Values": str,
"Values": None,
"Type": "Description",
},
"Name": {
"Values": None,
"Type": "Name",
},
}

_DEFAULT_CONFIG = {


+ 3
- 3
learnware/learnware/__init__.py View File

@@ -27,7 +27,6 @@ def get_learnware_from_dirpath(id: int, semantic_spec: dict, learnware_dirpath:
The contructed learnware object, return None if build failed
"""
learnware_config = {
"name": "None",
"model": {
"class_name": "Model",
"kwargs": {},
@@ -36,6 +35,7 @@ def get_learnware_from_dirpath(id: int, semantic_spec: dict, learnware_dirpath:
{
"module_name": "learnware.specification",
"class_name": "RKMEStatSpecification",
"file_name": "stat_spec.json",
"kwargs": {},
},
],
@@ -52,7 +52,7 @@ def get_learnware_from_dirpath(id: int, semantic_spec: dict, learnware_dirpath:
if "model" in yaml_config:
learnware_config["model"].update(yaml_config["model"])
if "stats_specifications" in yaml_config:
learnware_config["stat_specifications"] = yaml_config["stat_specifications"]
learnware_config["stat_specifications"] = yaml_config["stat_specifications"].copy()

try:
learnware_spec = Specification()
@@ -67,4 +67,4 @@ def get_learnware_from_dirpath(id: int, semantic_spec: dict, learnware_dirpath:
logger.warning(f"Load Learnware {id} failed!")
return None

return Learnware(id=id, name=learnware_config["name"], model=learnware_model, specification=learnware_spec)
return Learnware(id=id, model=learnware_model, specification=learnware_spec)

+ 12
- 8
learnware/learnware/base.py View File

@@ -8,9 +8,19 @@ from ..utils import get_module_by_module_path


class Learnware:
def __init__(self, id: str, name: str, model: BaseModel, specification: Specification):
def __init__(self, id: str, model: BaseModel, specification: Specification):
"""_summary_

Parameters
----------
id : str
The learnware id that is generated by market, and is unique
model : BaseModel
The learnware model for prediction
specification : Specification
The specification including the semantic specification and the statistic specification
"""
self.id = id
self.name = name
self.model = model
self.specification = specification

@@ -23,12 +33,6 @@ class Learnware:
def get_specification(self) -> Specification:
return self.specification

def get_info(self):
return self.desc

def get_name(self):
return self.name

def update_stat_spec(self, name, new_stat_spec: BaseStatSpecification):
self.specification.update_stat_spec(name, new_stat_spec)



+ 2
- 0
learnware/learnware/utils.py View File

@@ -44,8 +44,10 @@ def get_model_from_config(model: Union[BaseModel, dict]) -> BaseModel:
def get_stat_spec_from_config(stat_spec: dict) -> BaseStatSpecification:
stat_spec_module = get_module_by_module_path(stat_spec["module_path"])
stat_spec_inst = getattr(stat_spec_module, stat_spec["class_name"])(**stat_spec["kwargs"])

if not isinstance(stat_spec_inst, BaseStatSpecification):
raise TypeError(
f"Statistic specification must be type of BaseStatSpecification, not {BaseStatSpecification.__class__.__name__}"
)
stat_spec_inst.load(stat_spec["file_path"])
return stat_spec["class_name"], stat_spec_inst

+ 4
- 2
learnware/market/easy.py View File

@@ -9,7 +9,7 @@ from typing import Tuple, Any, List, Union, Dict
from .base import BaseMarket, BaseUserInfo
from .database_ops import load_market_from_db, add_learnware_to_db, delete_learnware_from_db

from ..learnware import Learnware, get_learnware_from_config
from ..learnware import Learnware, get_learnware_from_dirpath
from ..specification import RKMEStatSpecification, Specification
from ..logger import get_module_logger
from ..config import C
@@ -101,7 +101,9 @@ class EasyMarket(BaseMarket):
z_file.extractall(target_folder_dir)
config_file_dir = os.path.join(target_folder_dir, "learnware.yaml")

new_learnware = get_learnware_from_config(id=id, semantic_spec=semantic_spec, file_config=config_file_dir)
new_learnware = get_learnware_from_dirpath(
id=id, semantic_spec=semantic_spec, learnware_dirpath=config_file_dir
)
if new_learnware is None:
os.rmdir(target_zip_dir)
rmtree(target_folder_dir)


Loading…
Cancel
Save