def check_countspace()

in lisa/search_space.py [0:0]


def check_countspace(requirement: CountSpace, capability: CountSpace) -> ResultReason:
    result = ResultReason()
    if requirement is not None:
        if capability is None:
            result.add_reason(
                "if requirements isn't None, capability shouldn't be None"
            )
        else:
            if isinstance(requirement, int):
                if isinstance(capability, int):
                    if requirement != capability:
                        result.add_reason(
                            "requirement is a number, capability should be exact "
                            f"much, but requirement: {requirement}, "
                            f"capability: {capability}"
                        )
                elif isinstance(capability, IntRange):
                    temp_result = capability.check(requirement)
                    if not temp_result.result:
                        result.add_reason(
                            "requirement is a number, capability should include it, "
                            f"but requirement: {requirement}, capability: {capability}"
                        )
                else:
                    assert isinstance(capability, list), f"actual: {type(capability)}"
                    temp_requirement = IntRange(min=requirement, max=requirement)
                    temp_result = _one_of_matched(temp_requirement, capability)
                    if not temp_result.result:
                        result.add_reason(
                            f"requirement is a number, no capability matched, "
                            f"requirement: {requirement}, capability: {capability}"
                        )
            elif isinstance(requirement, IntRange):
                result.merge(requirement.check(capability))
            else:
                assert isinstance(requirement, list), f"actual: {type(requirement)}"

                supported = False
                for req_item in requirement:
                    temp_result = req_item.check(capability)
                    if temp_result.result:
                        supported = True
                if not supported:
                    result.add_reason(
                        "no capability matches requirement, "
                        f"requirement: {requirement}, capability: {capability}"
                    )
    return result