"""`Factory` providers deep init injections example."""

from dependency_injector import providers


class Regularizer:
    def __init__(self, alpha):
        self.alpha = alpha


class Loss:
    def __init__(self, regularizer):
        self.regularizer = regularizer


class ClassificationTask:
    def __init__(self, loss):
        self.loss = loss


class Algorithm:
    def __init__(self, task):
        self.task = task


algorithm_factory = providers.Factory(
    Algorithm,
    task=providers.Factory(
        ClassificationTask,
        loss=providers.Factory(
            Loss,
            regularizer=providers.Factory(
                Regularizer,
            ),
        ),
    ),
)


if __name__ == '__main__':
    algorithm_1 = algorithm_factory(task__loss__regularizer__alpha=0.5)
    assert algorithm_1.task.loss.regularizer.alpha == 0.5

    algorithm_2 = algorithm_factory(task__loss__regularizer__alpha=0.7)
    assert algorithm_2.task.loss.regularizer.alpha == 0.7

    algorithm_3 = algorithm_factory(task__loss__regularizer=Regularizer(alpha=0.8))
    assert algorithm_3.task.loss.regularizer.alpha == 0.8

"""`Factory` providers - building a complex object graph with deep init injections example."""

from dependency_injector import providers


class Regularizer:
    def __init__(self, alpha):
        self.alpha = alpha


class Loss:
    def __init__(self, regularizer):
        self.regularizer = regularizer


class ClassificationTask:
    def __init__(self, loss):
        self.loss = loss


class Algorithm:
    def __init__(self, task):
        self.task = task


algorithm_factory = providers.Factory(
    Algorithm,
    task=providers.Factory(
        ClassificationTask,
        loss=providers.Factory(
            Loss,
            regularizer=providers.Factory(
                Regularizer,
            ),
        ),
    ),
)


if __name__ == '__main__':
    algorithm_1 = algorithm_factory(task__loss__regularizer__alpha=0.5)
    assert algorithm_1.task.loss.regularizer.alpha == 0.5

    algorithm_2 = algorithm_factory(task__loss__regularizer__alpha=0.7)
    assert algorithm_2.task.loss.regularizer.alpha == 0.7

    algorithm_3 = algorithm_factory(task__loss__regularizer=Regularizer(alpha=0.8))
    assert algorithm_3.task.loss.regularizer.alpha == 0.8

Update the docblock of the example
Update the docblock of the example

- """`Factory` providers deep init injections example."""
+ """`Factory` providers - building a complex object graph with deep init injections example."""
  
  from dependency_injector import providers
  
  
  class Regularizer:
      def __init__(self, alpha):
          self.alpha = alpha
  
  
  class Loss:
      def __init__(self, regularizer):
          self.regularizer = regularizer
  
  
  class ClassificationTask:
      def __init__(self, loss):
          self.loss = loss
  
  
  class Algorithm:
      def __init__(self, task):
          self.task = task
  
  
  algorithm_factory = providers.Factory(
      Algorithm,
      task=providers.Factory(
          ClassificationTask,
          loss=providers.Factory(
              Loss,
              regularizer=providers.Factory(
                  Regularizer,
              ),
          ),
      ),
  )
  
  
  if __name__ == '__main__':
      algorithm_1 = algorithm_factory(task__loss__regularizer__alpha=0.5)
      assert algorithm_1.task.loss.regularizer.alpha == 0.5
  
      algorithm_2 = algorithm_factory(task__loss__regularizer__alpha=0.7)
      assert algorithm_2.task.loss.regularizer.alpha == 0.7
  
      algorithm_3 = algorithm_factory(task__loss__regularizer=Regularizer(alpha=0.8))
      assert algorithm_3.task.loss.regularizer.alpha == 0.8
  
Update the docblock of the example
## Code Before:
"""`Factory` providers deep init injections example."""

from dependency_injector import providers


class Regularizer:
    def __init__(self, alpha):
        self.alpha = alpha


class Loss:
    def __init__(self, regularizer):
        self.regularizer = regularizer


class ClassificationTask:
    def __init__(self, loss):
        self.loss = loss


class Algorithm:
    def __init__(self, task):
        self.task = task


algorithm_factory = providers.Factory(
    Algorithm,
    task=providers.Factory(
        ClassificationTask,
        loss=providers.Factory(
            Loss,
            regularizer=providers.Factory(
                Regularizer,
            ),
        ),
    ),
)


if __name__ == '__main__':
    algorithm_1 = algorithm_factory(task__loss__regularizer__alpha=0.5)
    assert algorithm_1.task.loss.regularizer.alpha == 0.5

    algorithm_2 = algorithm_factory(task__loss__regularizer__alpha=0.7)
    assert algorithm_2.task.loss.regularizer.alpha == 0.7

    algorithm_3 = algorithm_factory(task__loss__regularizer=Regularizer(alpha=0.8))
    assert algorithm_3.task.loss.regularizer.alpha == 0.8

## Instruction:
Update the docblock of the example
## Code After:
"""`Factory` providers - building a complex object graph with deep init injections example."""

from dependency_injector import providers


class Regularizer:
    def __init__(self, alpha):
        self.alpha = alpha


class Loss:
    def __init__(self, regularizer):
        self.regularizer = regularizer


class ClassificationTask:
    def __init__(self, loss):
        self.loss = loss


class Algorithm:
    def __init__(self, task):
        self.task = task


algorithm_factory = providers.Factory(
    Algorithm,
    task=providers.Factory(
        ClassificationTask,
        loss=providers.Factory(
            Loss,
            regularizer=providers.Factory(
                Regularizer,
            ),
        ),
    ),
)


if __name__ == '__main__':
    algorithm_1 = algorithm_factory(task__loss__regularizer__alpha=0.5)
    assert algorithm_1.task.loss.regularizer.alpha == 0.5

    algorithm_2 = algorithm_factory(task__loss__regularizer__alpha=0.7)
    assert algorithm_2.task.loss.regularizer.alpha == 0.7

    algorithm_3 = algorithm_factory(task__loss__regularizer=Regularizer(alpha=0.8))
    assert algorithm_3.task.loss.regularizer.alpha == 0.8
