Skip to content

evaluation

openml._api.resources.evaluation #

EvaluationV1API #

EvaluationV1API(http: HTTPClient, minio: MinIOClient)

Bases: ResourceV1API, EvaluationAPI

V1 API implementation for evaluations. Fetches evaluations from the v1 XML API endpoint.

Source code in openml/_api/resources/base/base.py
def __init__(self, http: HTTPClient, minio: MinIOClient):
    self._http = http
    self._minio = minio

delete #

delete(resource_id: int) -> bool

Delete a resource using the V1 API.

PARAMETER DESCRIPTION
resource_id

Identifier of the resource to delete.

TYPE: int

RETURNS DESCRIPTION
bool

True if the server confirms successful deletion.

RAISES DESCRIPTION
ValueError

If the resource type is not supported for deletion.

OpenMLNotAuthorizedError

If the user is not permitted to delete the resource.

OpenMLServerError

If deletion fails for an unknown reason.

OpenMLServerException

For other server-side errors.

Source code in openml/_api/resources/base/versions.py
def delete(self, resource_id: int) -> bool:
    """
    Delete a resource using the V1 API.

    Parameters
    ----------
    resource_id : int
        Identifier of the resource to delete.

    Returns
    -------
    bool
        ``True`` if the server confirms successful deletion.

    Raises
    ------
    ValueError
        If the resource type is not supported for deletion.
    OpenMLNotAuthorizedError
        If the user is not permitted to delete the resource.
    OpenMLServerError
        If deletion fails for an unknown reason.
    OpenMLServerException
        For other server-side errors.
    """
    if self.resource_type not in _LEGAL_RESOURCES_DELETE:
        raise ValueError(f"Can't delete a {self.resource_type.value}")

    endpoint_name = self._get_endpoint_name()
    path = f"{endpoint_name}/{resource_id}"
    try:
        response = self._http.delete(path)
        result = xmltodict.parse(response.content)
        return f"oml:{endpoint_name}_delete" in result
    except OpenMLServerException as e:
        self._handle_delete_exception(endpoint_name, e)
        raise

list #

list(limit: int, offset: int, *, function: str, tasks: list | None = None, setups: list | None = None, flows: list | None = None, runs: list | None = None, uploaders: list | None = None, study: int | None = None, sort_order: str | None = None, **kwargs: Any) -> list[OpenMLEvaluation]

Retrieve evaluations from the OpenML v1 XML API.

This method builds an evaluation query URL based on the provided filters, sends a request to the OpenML v1 endpoint, parses the XML response into a dictionary, and enriches the result with uploader usernames.

PARAMETER DESCRIPTION
The

ones

limit

the number of evaluations to return

TYPE: int

offset

the number of evaluations to skip, starting from the first

TYPE: int

function

the evaluation function. e.g., predictive_accuracy

TYPE: str

tasks

the list of task IDs

TYPE: list[int, str] DEFAULT: None

setups

the list of setup IDs

TYPE: list | None DEFAULT: None

flows

the list of flow IDs

TYPE: list[int, str] DEFAULT: None

runs

the list of run IDs

TYPE: list | None DEFAULT: None

uploaders

the list of uploader IDs

TYPE: list[int, str] DEFAULT: None

study

TYPE: int DEFAULT: None

kwargs

Legal filter operators: tag, per_fold

TYPE: Any DEFAULT: {}

sort_order

order of sorting evaluations, ascending ("asc") or descending ("desc")

TYPE: str DEFAULT: None

RETURNS DESCRIPTION
list of OpenMLEvaluation objects
Notes

This method performs two API calls: 1. Fetches evaluation data from the specified endpoint 2. Fetches user information for all uploaders in the evaluation data

The user information is used to map uploader IDs to usernames.

Source code in openml/_api/resources/evaluation.py
def list(  # noqa: PLR0913
    self,
    limit: int,
    offset: int,
    *,
    function: str,
    tasks: builtins.list | None = None,
    setups: builtins.list | None = None,
    flows: builtins.list | None = None,
    runs: builtins.list | None = None,
    uploaders: builtins.list | None = None,
    study: int | None = None,
    sort_order: str | None = None,
    **kwargs: Any,
) -> builtins.list[OpenMLEvaluation]:
    """Retrieve evaluations from the OpenML v1 XML API.

    This method builds an evaluation query URL based on the provided
    filters, sends a request to the OpenML v1 endpoint, parses the XML
    response into a dictionary, and enriches the result with uploader
    usernames.

    Parameters
    ----------
    The arguments that are lists are separated from the single value
    ones which are put into the kwargs.

    limit : int
        the number of evaluations to return
    offset : int
        the number of evaluations to skip, starting from the first
    function : str
        the evaluation function. e.g., predictive_accuracy

    tasks : list[int,str], optional
        the list of task IDs
    setups: list[int,str], optional
        the list of setup IDs
    flows : list[int,str], optional
        the list of flow IDs
    runs :list[int,str], optional
        the list of run IDs
    uploaders : list[int,str], optional
        the list of uploader IDs

    study : int, optional

    kwargs: dict, optional
        Legal filter operators: tag, per_fold

    sort_order : str, optional
        order of sorting evaluations, ascending ("asc") or descending ("desc")

    Returns
    -------
    list of OpenMLEvaluation objects

    Notes
    -----
    This method performs two API calls:
    1. Fetches evaluation data from the specified endpoint
    2. Fetches user information for all uploaders in the evaluation data

    The user information is used to map uploader IDs to usernames.
    """
    api_call = self._build_url(
        limit,
        offset,
        function=function,
        tasks=tasks,
        setups=setups,
        flows=flows,
        runs=runs,
        uploaders=uploaders,
        study=study,
        sort_order=sort_order,
        **kwargs,
    )

    eval_response = self._http.get(api_call)
    xml_content = eval_response.text

    return self._parse_list_xml(xml_content)

publish #

publish(path: str, files: Mapping[str, Any] | None) -> int

Publish a new resource using the V1 API.

PARAMETER DESCRIPTION
path

API endpoint path for the upload.

TYPE: str

files

Files to upload as part of the request payload.

TYPE: Mapping of str to Any or None

RETURNS DESCRIPTION
int

Identifier of the newly created resource.

RAISES DESCRIPTION
ValueError

If the server response does not contain a valid resource ID.

OpenMLServerException

If the server returns an error during upload.

Source code in openml/_api/resources/base/versions.py
def publish(self, path: str, files: Mapping[str, Any] | None) -> int:
    """
    Publish a new resource using the V1 API.

    Parameters
    ----------
    path : str
        API endpoint path for the upload.
    files : Mapping of str to Any or None
        Files to upload as part of the request payload.

    Returns
    -------
    int
        Identifier of the newly created resource.

    Raises
    ------
    ValueError
        If the server response does not contain a valid resource ID.
    OpenMLServerException
        If the server returns an error during upload.
    """
    response = self._http.post(path, files=files)
    parsed_response = xmltodict.parse(response.content)
    return self._extract_id_from_upload(parsed_response)

tag #

tag(resource_id: int, tag: str) -> list[str]

Add a tag to a resource using the V1 API.

PARAMETER DESCRIPTION
resource_id

Identifier of the resource to tag.

TYPE: int

tag

Tag to associate with the resource.

TYPE: str

RETURNS DESCRIPTION
list of str

Updated list of tags assigned to the resource.

RAISES DESCRIPTION
ValueError

If the resource type does not support tagging.

OpenMLServerException

If the server returns an error.

Source code in openml/_api/resources/base/versions.py
def tag(self, resource_id: int, tag: str) -> list[str]:
    """
    Add a tag to a resource using the V1 API.

    Parameters
    ----------
    resource_id : int
        Identifier of the resource to tag.
    tag : str
        Tag to associate with the resource.

    Returns
    -------
    list of str
        Updated list of tags assigned to the resource.

    Raises
    ------
    ValueError
        If the resource type does not support tagging.
    OpenMLServerException
        If the server returns an error.
    """
    if self.resource_type not in _LEGAL_RESOURCES_TAG:
        raise ValueError(f"Can't tag a {self.resource_type.value}")

    endpoint_name = self._get_endpoint_name()
    path = f"{endpoint_name}/tag"
    data = {f"{endpoint_name}_id": resource_id, "tag": tag}
    response = self._http.post(path, data=data)

    parsed_response = xmltodict.parse(response.content, force_list={"oml:tag"})
    result = parsed_response[f"oml:{endpoint_name}_tag"]
    tags: list[str] = result.get("oml:tag", [])

    return tags

untag #

untag(resource_id: int, tag: str) -> list[str]

Remove a tag from a resource using the V1 API.

PARAMETER DESCRIPTION
resource_id

Identifier of the resource to untag.

TYPE: int

tag

Tag to remove from the resource.

TYPE: str

RETURNS DESCRIPTION
list of str

Updated list of tags assigned to the resource.

RAISES DESCRIPTION
ValueError

If the resource type does not support tagging.

OpenMLServerException

If the server returns an error.

Source code in openml/_api/resources/base/versions.py
def untag(self, resource_id: int, tag: str) -> list[str]:
    """
    Remove a tag from a resource using the V1 API.

    Parameters
    ----------
    resource_id : int
        Identifier of the resource to untag.
    tag : str
        Tag to remove from the resource.

    Returns
    -------
    list of str
        Updated list of tags assigned to the resource.

    Raises
    ------
    ValueError
        If the resource type does not support tagging.
    OpenMLServerException
        If the server returns an error.
    """
    if self.resource_type not in _LEGAL_RESOURCES_TAG:
        raise ValueError(f"Can't untag a {self.resource_type.value}")

    endpoint_name = self._get_endpoint_name()
    path = f"{endpoint_name}/untag"
    data = {f"{endpoint_name}_id": resource_id, "tag": tag}
    response = self._http.post(path, data=data)

    parsed_response = xmltodict.parse(response.content, force_list={"oml:tag"})
    result = parsed_response[f"oml:{endpoint_name}_untag"]
    tags: list[str] = result.get("oml:tag", [])

    return tags

EvaluationV2API #

EvaluationV2API(http: HTTPClient, minio: MinIOClient)

Bases: ResourceV2API, EvaluationAPI

V2 API implementation for evaluations. Fetches evaluations from the v2 json API endpoint.

Source code in openml/_api/resources/base/base.py
def __init__(self, http: HTTPClient, minio: MinIOClient):
    self._http = http
    self._minio = minio

list #

list(limit: int, offset: int, *, function: str, tasks: list | None = None, setups: list | None = None, flows: list | None = None, runs: list | None = None, uploaders: list | None = None, study: int | None = None, sort_order: str | None = None, **kwargs: Any) -> list[OpenMLEvaluation]

Retrieve evaluation results from the OpenML v2 JSON API.

Notes

This method is not yet implemented.

Source code in openml/_api/resources/evaluation.py
def list(  # noqa: PLR0913
    self,
    limit: int,  # noqa: ARG002
    offset: int,  # noqa: ARG002
    *,
    function: str,  # noqa: ARG002
    tasks: builtins.list | None = None,  # noqa: ARG002
    setups: builtins.list | None = None,  # noqa: ARG002
    flows: builtins.list | None = None,  # noqa: ARG002
    runs: builtins.list | None = None,  # noqa: ARG002
    uploaders: builtins.list | None = None,  # noqa: ARG002
    study: int | None = None,  # noqa: ARG002
    sort_order: str | None = None,  # noqa: ARG002
    **kwargs: Any,  # noqa: ARG002
) -> builtins.list[OpenMLEvaluation]:
    """
    Retrieve evaluation results from the OpenML v2 JSON API.

    Notes
    -----
    This method is not yet implemented.
    """
    self._not_supported(method="list")