Introduction
============

Mypy is a static type checker for Python 3 and Python 2.7. If you sprinkle
your code with type annotations, mypy can type check your code and find common
bugs. As mypy is a static analyzer, or a lint-like tool, the type
annotations are just hints for mypy and don't interfere when running your program.
You run your program with a standard Python interpreter, and the annotations
are treated effectively as comments.

Using the Python 3 function annotation syntax (using the
`PEP 484 <https://www.python.org/dev/peps/pep-0484/>`_ notation) or
a comment-based annotation syntax for Python 2 code, you will be able to
efficiently annotate your code and use mypy to check the code for common
errors. Mypy has a powerful and easy-to-use type system with modern features
such as type inference, generics, callable types, tuple types,
union types, and structural subtyping.

As a developer, you decide how to use mypy in your workflow. You can always
escape to dynamic typing as mypy's approach to static typing doesn't restrict
what you can do in your programs. Using mypy will make your programs easier to
understand, debug, and maintain.

This documentation provides a short introduction to mypy. It will help you
get started writing statically typed code. Knowledge of Python and a
statically typed object-oriented language, such as Java, are assumed.

.. note::

   Mypy is used in production by many companies and projects, but mypy is
   officially beta software. There will be occasional changes
   that break backward compatibility. The mypy development team tries to
   minimize the impact of changes to user code.
