Skip to content

[doctest] Provide definition of default_evaluator and other default objects #2436

@vfdev-5

Description

@vfdev-5

📚 Documentation

It was already discussed and also pointed out in the forum that it is unclear how default objects are defined inside doctest examples. For example: https://pytorch.org/ignite/generated/ignite.metrics.Accuracy.html#ignite.metrics.Accuracy

metric = Accuracy()
metric.attach(default_evaluator, "accuracy")
y_true = torch.Tensor([1, 0, 1, 1, 0, 1])
y_pred = torch.Tensor([1, 0, 1, 0, 1, 1])
state = default_evaluator.run([[y_pred, y_true]])
print(state.metrics["accuracy"])

We can think of different solutions:

    1. for all doctests, add a link on

      ignite/docs/source/conf.py

      Lines 334 to 378 in 111fc7a

      doctest_global_setup = """
      from collections import OrderedDict
      import torch
      from torch import nn, optim
      from ignite.engine import *
      from ignite.handlers import *
      from ignite.metrics import *
      from ignite.utils import *
      from ignite.contrib.metrics.regression import *
      from ignite.contrib.metrics import *
      # create default evaluator for doctests
      def eval_step(engine, batch):
      return batch
      default_evaluator = Engine(eval_step)
      # create default optimizer for doctests
      param_tensor = torch.zeros([1], requires_grad=True)
      default_optimizer = torch.optim.SGD([param_tensor], lr=0.1)
      # create default trainer for doctests
      # as handlers could be attached to the trainer,
      # each test must defined his own trainer using `.. testsetup:`
      def get_default_trainer():
      def train_step(engine, batch):
      return 0.0
      return Engine(train_step)
      # create default model for doctests
      default_model = nn.Sequential(OrderedDict([
      ('base', nn.Linear(4, 2)),
      ('fc', nn.Linear(2, 1))
      ]))
      manual_seed(666)
      """
    1. visible code is as above but if code is copied we add automatically all defaults (not good as a solution)
    1. other ideas ?

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions