Ensure that this works:

```python
@setup
def mytask():
    print("I am a setup task")

with dag_maker() as dag:
    mytask.override(task_id='newtask')

assert len(dag.task_group.children) == 1
setup_task = dag.task_group.children["newtask"]
assert setup_task._is_setup
```
and teardown also works
"""Declaration of a @task-decorated callable for type-checking.
    An instance of this type inherits the call signature of the decorated
    function wrapped in it (not *exactly* since it actually returns an XComArg,
    but there's no way to express that right now), and provides two additional
    methods for task-mapping.
    This type is implemented by ``_TaskDecorator`` at runtime.
    """
    __call__: Callable[FParams, XComArg]
    function: Callable[FParams, FReturn]
    @property
    def __wrapped__(self) -> Callable[FParams, FReturn]:
        ...
    def partial(self, **kwargs: Any) -> Task[FParams, FReturn]:
        ...
    def expand(self, **kwargs: OperatorExpandArgument) -> XComArg:
        ...
    def expand_kwargs(self, kwargs: OperatorExpandKwargsArgument, *, strict: bool = True) -> XComArg:
        ...
    def override(self, **kwargs: Any) -> Task[FParams, FReturn]:
        ...
class TaskDecorator(Protocol):