Пример #1
0
def test_resolve_requirements_arg():
    requirements = Requirements([
        InstallableRequirement('dumb', '0.4.1'),
        InstallableRequirement('art', '4.0')
    ])
    actual_reqs = resolve_requirements(requirements)
    assert actual_reqs == requirements
Пример #2
0
def test_resolve_requirement_list_arg():
    req = [
        InstallableRequirement('dumb', '0.4.1'),
        InstallableRequirement('art', '4.0')
    ]
    actual_reqs = resolve_requirements(req)
    assert len(actual_reqs.installable) == 2
    assert actual_reqs.installable == req
Пример #3
0
    def create(cls,
               model_object,
               input_data,
               model_name: str = None,
               additional_artifacts: ArtifactCollection = None,
               additional_requirements: AnyRequirements = None,
               custom_wrapper: ModelWrapper = None,
               custom_artifact: ArtifactCollection = None,
               custom_input_meta: DatasetType = None,
               custom_output_meta: DatasetType = None,
               custom_prediction=None,
               custom_requirements: AnyRequirements = None) -> 'Model':
        """
        Creates Model instance from arbitrary model objects and sample of input data

        :param model_object: The model object to analyze.
        :param input_data: The image to run.
        :param model_name: The model name.
        :param additional_artifacts: Additional artifact.
        :param additional_requirements: Additional requirements.
        :param custom_wrapper: Custom model wrapper.
        :param custom_artifact: Custom artifact collection to replace all other.
        :param custom_input_meta: Custom input DatasetType.
        :param custom_output_meta: Custom output DatasetType.
        :param custom_prediction: Custom prediction output.
        :param custom_requirements: Custom requirements to replace all other.
        :returns: :py:class:`Model`
        """
        wrapper: ModelWrapper = custom_wrapper or ModelAnalyzer.analyze(
            model_object)
        name = model_name or _generate_model_name(wrapper)

        artifact = custom_artifact or WrapperArtifactCollection(wrapper)
        if additional_artifacts is not None:
            artifact += additional_artifacts

        input_meta = custom_input_meta or DatasetAnalyzer.analyze(input_data)
        prediction = custom_prediction or wrapper.predict(input_data)
        output_meta = custom_output_meta or DatasetAnalyzer.analyze(prediction)

        if custom_requirements is not None:
            requirements = resolve_requirements(custom_requirements)
        else:
            requirements = get_object_requirements(model_object)
            requirements += get_object_requirements(input_data)
            requirements += get_object_requirements(prediction)

        if additional_requirements is not None:
            requirements += additional_requirements
        model = Model(name, wrapper, None, input_meta, output_meta,
                      requirements)
        model._unpersisted_artifacts = artifact
        return model
Пример #4
0
    def create(cls,
               model_object,
               input_data,
               model_name: str = None,
               params: Dict[str, Any] = None,
               description: str = None,
               additional_artifacts: ArtifactCollection = None,
               additional_requirements: AnyRequirements = None,
               custom_wrapper: ModelWrapper = None,
               custom_artifact: ArtifactCollection = None,
               custom_requirements: AnyRequirements = None) -> 'Model':
        """
        Creates Model instance from arbitrary model objects and sample of input data

        :param model_object: The model object to analyze.
        :param input_data: Input data sample to determine structure of inputs and outputs for given model object.
        :param model_name: The model name.
        :param params: dict with arbitrary parameters. Must be json-serializable
        :param description: text description of this model
        :param additional_artifacts: Additional artifact.
        :param additional_requirements: Additional requirements.
        :param custom_wrapper: Custom model wrapper.
        :param custom_artifact: Custom artifact collection to replace all other.
        :param custom_requirements: Custom requirements to replace all other.
        :returns: :py:class:`Model`
        """
        wrapper: ModelWrapper = custom_wrapper or ModelAnalyzer.analyze(
            model_object, input_data=input_data)
        name = model_name or _generate_model_name(wrapper)

        artifact = custom_artifact or WrapperArtifactCollection(wrapper)
        if additional_artifacts is not None:
            artifact += additional_artifacts

        if custom_requirements is not None:
            requirements = resolve_requirements(custom_requirements)
        else:
            requirements = wrapper.requirements

        if additional_requirements is not None:
            requirements += additional_requirements

        requirements = RequirementAnalyzer.analyze(requirements)
        params = params or {}
        params[cls.PYTHON_VERSION] = params.get(cls.PYTHON_VERSION,
                                                get_python_version())
        model = Model(name, wrapper, None, requirements, params, description)
        model._unpersisted_artifacts = artifact
        return model
Пример #5
0
    def analyze(cls, obj: AnyRequirements) -> Requirements:
        """
        Run RequirementHook hooks to analyze obj

        :param obj: objects to analyze
        :return: Instance of Requirements
        """
        obj = resolve_requirements(obj)
        to_process = list(obj.requirements)
        result = []
        for hook in cls.hooks:
            while len(to_process) > 0:
                req = to_process.pop()
                if hook.can_process(req):
                    result += hook.process(req).requirements
                else:
                    result.append(req)
            to_process = result
            result = []

        return Requirements(to_process)
Пример #6
0
def test_resolve_str_list_arg():
    req = ["dumb==0.4.1", "art==4.0"]
    actual_reqs = resolve_requirements(req)
    assert len(actual_reqs.installable) == 2
    assert req == [r.to_str() for r in actual_reqs.installable]
Пример #7
0
def test_resolve_str_arg():
    req = "dumb==0.4.1"
    actual_reqs = resolve_requirements(req)
    assert actual_reqs.installable[0].to_str() == req
Пример #8
0
def test_resolve_requirement_arg():
    req = InstallableRequirement('dumb', '0.4.1')
    actual_reqs = resolve_requirements(req)
    assert actual_reqs.installable[0] == req