m3dev / gokart

Gokart solves reproducibility, task dependencies, constraints of good code, and ease of use for Machine Learning Pipeline.
https://gokart.readthedocs.io/en/latest/
MIT License
305 stars 57 forks source link

Add TaskOnKart load type #391

Closed kitagry closed 6 days ago

kitagry commented 3 weeks ago

Add load type for TaskOnKart.

class SampleTask(gokart.TaskOnKart):
    str_task: gokart.TaskOnKart[str] = gokart.TaskInstanceParameter()
    int_task: gokart.TaskOnKart[int] = gokart.TaskInstanceParameter()

    def requires(self):
        return dict(str=self.str_task, int=self.int_task)

    def run(self):
        s = self.load(self.str_task)  # This type is inferred with "str"
        i = self.load(self.int_task)  # This type is inferred with "int"

SampleTask(
    str_task=StrTask(),  # mypy ok
    int_task=StrTask(),  # mypy error: Argument "int_task" to "StrTask" has incompatible type "StrTask"; expected "TaskOnKart[int]
)

TODO

mski-iksm commented 1 week ago

@kitagry Thank you for suggesting great feature!

How about adding new document about this feature as in https://github.com/m3dev/gokart/pull/391#issue-2497559110 ?