зеркало из https://github.com/microsoft/hi-ml.git
ENH: Apply security fixes (#912)
This commit is contained in:
Родитель
f3525192e1
Коммит
83df149051
|
@ -8,7 +8,7 @@ from io import StringIO
|
||||||
from typing import Any, Dict, Iterable, Union, List, Optional
|
from typing import Any, Dict, Iterable, Union, List, Optional
|
||||||
|
|
||||||
import param
|
import param
|
||||||
from ruamel import yaml
|
from ruamel.yaml import YAML
|
||||||
|
|
||||||
|
|
||||||
def is_basic_type(o: Any) -> bool:
|
def is_basic_type(o: Any) -> bool:
|
||||||
|
@ -138,7 +138,13 @@ def object_to_yaml(o: Any) -> str:
|
||||||
:param o: The object to inspect.
|
:param o: The object to inspect.
|
||||||
:return: A string in YAML format.
|
:return: A string in YAML format.
|
||||||
"""
|
"""
|
||||||
return yaml.safe_dump(object_to_dict(o), default_flow_style=False) # type: ignore
|
yaml = YAML(typ='safe', pure=True)
|
||||||
|
stream = StringIO()
|
||||||
|
yaml.default_flow_style = False
|
||||||
|
yaml.dump(object_to_dict(o), stream)
|
||||||
|
result = stream.getvalue()
|
||||||
|
stream.close()
|
||||||
|
return result
|
||||||
|
|
||||||
|
|
||||||
def yaml_to_dict(s: str) -> Dict[str, Any]:
|
def yaml_to_dict(s: str) -> Dict[str, Any]:
|
||||||
|
@ -150,7 +156,8 @@ def yaml_to_dict(s: str) -> Dict[str, Any]:
|
||||||
or dictionaries again.
|
or dictionaries again.
|
||||||
"""
|
"""
|
||||||
stream = StringIO(s)
|
stream = StringIO(s)
|
||||||
return yaml.safe_load(stream=stream)
|
yaml = YAML(typ='safe', pure=True)
|
||||||
|
return yaml.load(stream=stream)
|
||||||
|
|
||||||
|
|
||||||
def _write_dict_to_object(o: Any, d: Dict[str, Any], traversed_fields: Optional[List] = None) -> List[str]:
|
def _write_dict_to_object(o: Any, d: Dict[str, Any], traversed_fields: Optional[List] = None) -> List[str]:
|
||||||
|
|
|
@ -77,7 +77,7 @@ from testazure.utils_testazure import (
|
||||||
)
|
)
|
||||||
|
|
||||||
INEXPENSIVE_TESTING_CLUSTER_NAME = "lite-testing-ds2"
|
INEXPENSIVE_TESTING_CLUSTER_NAME = "lite-testing-ds2"
|
||||||
EXPECTED_QUEUED = "This command will be run in AzureML:"
|
EXPECTED_QUEUED = "Successfully queued run"
|
||||||
GITHUB_SHIBBOLETH = "GITHUB_RUN_ID" # https://docs.github.com/en/actions/reference/environment-variables
|
GITHUB_SHIBBOLETH = "GITHUB_RUN_ID" # https://docs.github.com/en/actions/reference/environment-variables
|
||||||
AZUREML_FLAG = himl.AZUREML_FLAG
|
AZUREML_FLAG = himl.AZUREML_FLAG
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ numpy==1.22.0
|
||||||
pillow==9.3.0
|
pillow==9.3.0
|
||||||
pydicom==2.3.0
|
pydicom==2.3.0
|
||||||
scikit-image==0.19.3
|
scikit-image==0.19.3
|
||||||
scipy==1.7.3
|
scipy==1.10.0
|
||||||
seaborn==0.10.1
|
seaborn==0.10.1
|
||||||
simpleitk==2.1.1.2
|
simpleitk==2.1.1.2
|
||||||
tifffile==2022.10.10
|
tifffile==2022.10.10
|
||||||
|
|
|
@ -143,7 +143,7 @@ def test_ssl_container_cifar10_resnet_simclr() -> None:
|
||||||
# Note: It is possible that after the PyTorch 1.10 upgrade, we can't get parity between local runs and runs on
|
# Note: It is possible that after the PyTorch 1.10 upgrade, we can't get parity between local runs and runs on
|
||||||
# the hosted build agents. If that suspicion is confirmed, we need to add branching for local and cloud results.
|
# the hosted build agents. If that suspicion is confirmed, we need to add branching for local and cloud results.
|
||||||
expected_metrics = {
|
expected_metrics = {
|
||||||
'simclr/val/loss': 2.8596301078796387,
|
'simclr/val/loss': 2.859630584716797,
|
||||||
'ssl_online_evaluator/val/loss': 2.2664988040924072,
|
'ssl_online_evaluator/val/loss': 2.2664988040924072,
|
||||||
'ssl_online_evaluator/val/AccuracyAtThreshold05': 0.20000000298023224,
|
'ssl_online_evaluator/val/AccuracyAtThreshold05': 0.20000000298023224,
|
||||||
'simclr/train/loss': 3.6261773109436035,
|
'simclr/train/loss': 3.6261773109436035,
|
||||||
|
|
|
@ -2,7 +2,7 @@ bump2version==1.0.1
|
||||||
coverage==6.3.2
|
coverage==6.3.2
|
||||||
flake8==5.0.2
|
flake8==5.0.2
|
||||||
ipykernel==6.15.0
|
ipykernel==6.15.0
|
||||||
ipython==7.34.0
|
ipython==8.11.0
|
||||||
mypy==0.931
|
mypy==0.931
|
||||||
papermill==2.3.4
|
papermill==2.3.4
|
||||||
pycobertura==2.0.1
|
pycobertura==2.0.1
|
||||||
|
|
|
@ -13,7 +13,7 @@ from pathlib import Path
|
||||||
from typing import Any, Dict, List, Optional, OrderedDict, Tuple
|
from typing import Any, Dict, List, Optional, OrderedDict, Tuple
|
||||||
|
|
||||||
import jinja2
|
import jinja2
|
||||||
import ruamel.yaml
|
from ruamel.yaml import YAML
|
||||||
import matplotlib.pyplot as plt
|
import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
|
@ -407,7 +407,8 @@ class HTMLReport:
|
||||||
# TODO: add option to overwrite report title with entry here
|
# TODO: add option to overwrite report title with entry here
|
||||||
assert report_config_path.suffix == ".yml", f"Expected a .yml file but found {report_config_path.suffix}"
|
assert report_config_path.suffix == ".yml", f"Expected a .yml file but found {report_config_path.suffix}"
|
||||||
with open(report_config_path, "r") as f_path:
|
with open(report_config_path, "r") as f_path:
|
||||||
yaml_contents = ruamel.yaml.load(f_path)
|
yaml = YAML(typ='safe', pure=True)
|
||||||
|
yaml_contents = yaml.load(f_path)
|
||||||
|
|
||||||
return yaml_contents
|
return yaml_contents
|
||||||
|
|
||||||
|
|
|
@ -11,7 +11,7 @@ import matplotlib.pyplot as plt
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
import pytest
|
import pytest
|
||||||
import ruamel.yaml
|
from ruamel.yaml import YAML
|
||||||
from ruamel.yaml.comments import CommentedMap as OrderedDict, CommentedSeq as OrderedList
|
from ruamel.yaml.comments import CommentedMap as OrderedDict, CommentedSeq as OrderedList
|
||||||
|
|
||||||
from health_ml.utils.reports import HTMLReport, IMAGE_KEY_HTML, TABLE_KEY_HTML, REPORT_CONTENTS_KEY, ReportComponentKey
|
from health_ml.utils.reports import HTMLReport, IMAGE_KEY_HTML, TABLE_KEY_HTML, REPORT_CONTENTS_KEY, ReportComponentKey
|
||||||
|
@ -226,28 +226,25 @@ def test_html_report_read_config(html_report: HTMLReport, dummy_df: pd.DataFrame
|
||||||
|
|
||||||
plt.plot(dummy_df[[dummy_df_cols[0]]], dummy_df[[dummy_df_cols[1]]])
|
plt.plot(dummy_df[[dummy_df_cols[0]]], dummy_df[[dummy_df_cols[1]]])
|
||||||
|
|
||||||
report_config_contents = OrderedDict(
|
report_config_contents = {
|
||||||
{
|
REPORT_CONTENTS_KEY: [
|
||||||
REPORT_CONTENTS_KEY: OrderedList(
|
{
|
||||||
[
|
ReportComponentKey.TYPE.value: ReportComponentKey.TABLE.value,
|
||||||
{
|
ReportComponentKey.VALUE.value: str(table_path),
|
||||||
ReportComponentKey.TYPE.value: ReportComponentKey.TABLE.value,
|
}
|
||||||
ReportComponentKey.VALUE.value: table_path,
|
]
|
||||||
}
|
}
|
||||||
]
|
|
||||||
)
|
|
||||||
}
|
|
||||||
)
|
|
||||||
report_config_path = tmp_path / "report_config.yml"
|
report_config_path = tmp_path / "report_config.yml"
|
||||||
with open(report_config_path, "w+") as f_path:
|
with open(report_config_path, "w+", encoding="utf-8") as f_path:
|
||||||
ruamel.yaml.dump(report_config_contents, f_path)
|
yaml = YAML(typ='safe', pure=True)
|
||||||
|
yaml.dump(report_config_contents, f_path)
|
||||||
|
|
||||||
report_config = html_report.read_config_yaml(report_config_path)
|
report_config = html_report.read_config_yaml(report_config_path)
|
||||||
assert list(report_config.keys()) == [REPORT_CONTENTS_KEY]
|
assert list(report_config.keys()) == [REPORT_CONTENTS_KEY]
|
||||||
assert len(report_config[REPORT_CONTENTS_KEY]) == 1
|
assert len(report_config[REPORT_CONTENTS_KEY]) == 1
|
||||||
report_contents_first_entry = report_config[REPORT_CONTENTS_KEY][0]
|
report_contents_first_entry = report_config[REPORT_CONTENTS_KEY][0]
|
||||||
assert report_contents_first_entry[ReportComponentKey.TYPE.value] == ReportComponentKey.TABLE.value
|
assert report_contents_first_entry[ReportComponentKey.TYPE.value] == ReportComponentKey.TABLE.value
|
||||||
assert report_contents_first_entry[ReportComponentKey.VALUE.value] == table_path
|
assert report_contents_first_entry[ReportComponentKey.VALUE.value] == str(table_path)
|
||||||
|
|
||||||
html_report.add_yaml_contents_to_report(report_config)
|
html_report.add_yaml_contents_to_report(report_config)
|
||||||
html_template_difference = html_report.template.replace(html_template_before, "")
|
html_template_difference = html_report.template.replace(html_template_before, "")
|
||||||
|
|
Загрузка…
Ссылка в новой задаче