-One exception to removing trailing commas is tuple expressions with
-just one element. In this case *Black* won't touch the single trailing
-comma as this would unexpectedly change the underlying data type. Note
-that this is also the case when commas are used while indexing. This is
-a tuple in disguise: ```numpy_array[3, ]```.
-
-One exception to adding trailing commas is function signatures
-containing `*`, `*args`, or `**kwargs`. In this case a trailing comma
-is only safe to use on Python 3.6. *Black* will detect if your file is
-already 3.6+ only and use trailing commas in this situation. If you
-wonder how it knows, it looks for f-strings and existing use of trailing
-commas in function signatures that have stars in them. In other words,
-if you'd like a trailing comma in this situation and *Black* didn't
-recognize it was safe to do so, put it there manually and *Black* will
-keep it.
-
-
-### Strings
-
-*Black* prefers double quotes (`"` and `"""`) over single quotes (`'`
-and `'''`). It will replace the latter with the former as long as it
-does not result in more backslash escapes than before.
-
-*Black* also standardizes string prefixes, making them always lowercase.
-On top of that, if your code is already Python 3.6+ only or it's using
-the `unicode_literals` future import, *Black* will remove `u` from the
-string prefix as it is meaningless in those scenarios.
-
-The main reason to standardize on a single form of quotes is aesthetics.
-Having one kind of quotes everywhere reduces reader distraction.
-It will also enable a future version of *Black* to merge consecutive
-string literals that ended up on the same line (see
-[#26](https://github.com/ambv/black/issues/26) for details).
-
-Why settle on double quotes? They anticipate apostrophes in English
-text. They match the docstring standard described in [PEP 257](https://www.python.org/dev/peps/pep-0257/#what-is-a-docstring).
-An empty string in double quotes (`""`) is impossible to confuse with
-a one double-quote regardless of fonts and syntax highlighting used.
-On top of this, double quotes for strings are consistent with C which
-Python interacts a lot with.
-
-On certain keyboard layouts like US English, typing single quotes is
-a bit easier than double quotes. The latter requires use of the Shift
-key. My recommendation here is to keep using whatever is faster to type
-and let *Black* handle the transformation.
-
-If you are adopting *Black* in a large project with pre-existing string
-conventions (like the popular ["single quotes for data, double quotes for
-human-readable strings"](https://stackoverflow.com/a/56190)), you can
-pass `--skip-string-normalization` on the command line. This is meant as
-an adoption helper, avoid using this for new projects.
-
-### Numeric literals
-
-*Black* standardizes most numeric literals to use lowercase letters for the
-syntactic parts and uppercase letters for the digits themselves: `0xAB`
-instead of `0XAB` and `1e10` instead of `1E10`. Python 2 long literals are
-styled as `2L` instead of `2l` to avoid confusion between `l` and `1`.
-
-
-### Line breaks & binary operators
-
-*Black* will break a line before a binary operator when splitting a block
-of code over multiple lines. This is so that *Black* is compliant with the
-recent changes in the [PEP 8](https://www.python.org/dev/peps/pep-0008/#should-a-line-break-before-or-after-a-binary-operator)
-style guide, which emphasizes that this approach improves readability.
-
-This behaviour may raise ``W503 line break before binary operator`` warnings in
-style guide enforcement tools like Flake8. Since ``W503`` is not PEP 8 compliant,
-you should tell Flake8 to ignore these warnings.
-
-
-### Slices
-
-PEP 8 [recommends](https://www.python.org/dev/peps/pep-0008/#whitespace-in-expressions-and-statements)
-to treat ``:`` in slices as a binary operator with the lowest priority, and to
-leave an equal amount of space on either side, except if a parameter is omitted
-(e.g. ``ham[1 + 1 :]``). It also states that for extended slices, both ``:``
-operators have to have the same amount of spacing, except if a parameter is
-omitted (``ham[1 + 1 ::]``). *Black* enforces these rules consistently.
-
-This behaviour may raise ``E203 whitespace before ':'`` warnings in style guide
-enforcement tools like Flake8. Since ``E203`` is not PEP 8 compliant, you should
-tell Flake8 to ignore these warnings.
-
-
-### Parentheses
-
-Some parentheses are optional in the Python grammar. Any expression can
-be wrapped in a pair of parentheses to form an atom. There are a few
-interesting cases:
-
-- `if (...):`
-- `while (...):`
-- `for (...) in (...):`
-- `assert (...), (...)`
-- `from X import (...)`
-- assignments like:
- - `target = (...)`
- - `target: type = (...)`
- - `some, *un, packing = (...)`
- - `augmented += (...)`
-
-In those cases, parentheses are removed when the entire statement fits
-in one line, or if the inner expression doesn't have any delimiters to
-further split on. If there is only a single delimiter and the expression
-starts or ends with a bracket, the parenthesis can also be successfully
-omitted since the existing bracket pair will organize the expression
-neatly anyway. Otherwise, the parentheses are added.
-
-Please note that *Black* does not add or remove any additional nested
-parentheses that you might want to have for clarity or further
-code organization. For example those parentheses are not going to be
-removed:
-```py3
-return not (this or that)
-decision = (maybe.this() and values > 0) or (maybe.that() and values < 0)
-```
-
-
-### Call chains
-
-Some popular APIs, like ORMs, use call chaining. This API style is known
-as a [fluent interface](https://en.wikipedia.org/wiki/Fluent_interface).
-*Black* formats those by treating dots that follow a call or an indexing
-operation like a very low priority delimiter. It's easier to show the
-behavior than to explain it. Look at the example:
-```py3
-def example(session):
- result = (
- session.query(models.Customer.id)
- .filter(
- models.Customer.account_id == account_id,
- models.Customer.email == email_address,
- )
- .order_by(models.Customer.id.asc())
- .all()
- )
-```
-
-
-### Typing stub files
-
-PEP 484 describes the syntax for type hints in Python. One of the
-use cases for typing is providing type annotations for modules which
-cannot contain them directly (they might be written in C, or they might
-be third-party, or their implementation may be overly dynamic, and so on).
-
-To solve this, [stub files with the `.pyi` file
-extension](https://www.python.org/dev/peps/pep-0484/#stub-files) can be
-used to describe typing information for an external module. Those stub
-files omit the implementation of classes and functions they
-describe, instead they only contain the structure of the file (listing
-globals, functions, and classes with their members). The recommended
-code style for those files is more terse than PEP 8:
-
-* prefer `...` on the same line as the class/function signature;
-* avoid vertical whitespace between consecutive module-level functions,
- names, or methods and fields within a single class;
-* use a single blank line between top-level class definitions, or none
- if the classes are very small.
-
-*Black* enforces the above rules. There are additional guidelines for
-formatting `.pyi` file that are not enforced yet but might be in
-a future version of the formatter:
-
-* all function bodies should be empty (contain `...` instead of the body);
-* do not use docstrings;
-* prefer `...` over `pass`;
-* for arguments with a default, use `...` instead of the actual default;
-* avoid using string literals in type annotations, stub files support
- forward references natively (like Python 3.7 code with `from __future__
- import annotations`);
-* use variable annotations instead of type comments, even for stubs that
- target older versions of Python;
-* for arguments that default to `None`, use `Optional[]` explicitly;
-* use `float` instead of `Union[int, float]`.
-
-
-## pyproject.toml
-
-*Black* is able to read project-specific default values for its
-command line options from a `pyproject.toml` file. This is
-especially useful for specifying custom `--include` and `--exclude`
-patterns for your project.
-
-**Pro-tip**: If you're asking yourself "Do I need to configure anything?"
-the answer is "No". *Black* is all about sensible defaults.
-
-
-### What on Earth is a `pyproject.toml` file?
-
-[PEP 518](https://www.python.org/dev/peps/pep-0518/) defines
-`pyproject.toml` as a configuration file to store build system
-requirements for Python projects. With the help of tools
-like [Poetry](https://poetry.eustace.io/) or
-[Flit](https://flit.readthedocs.io/en/latest/) it can fully replace the
-need for `setup.py` and `setup.cfg` files.
-
-
-### Where *Black* looks for the file
-
-By default *Black* looks for `pyproject.toml` starting from the common
-base directory of all files and directories passed on the command line.
-If it's not there, it looks in parent directories. It stops looking
-when it finds the file, or a `.git` directory, or a `.hg` directory,
-or the root of the file system, whichever comes first.
-
-If you're formatting standard input, *Black* will look for configuration
-starting from the current working directory.
-
-You can also explicitly specify the path to a particular file that you
-want with `--config`. In this situation *Black* will not look for any
-other file.
-
-If you're running with `--verbose`, you will see a blue message if
-a file was found and used.
-
-Please note `blackd` will not use `pyproject.toml` configuration.
-
-
-### Configuration format
-
-As the file extension suggests, `pyproject.toml` is a [TOML](https://github.com/toml-lang/toml) file. It contains separate
-sections for different tools. *Black* is using the `[tool.black]`
-section. The option keys are the same as long names of options on
-the command line.
-
-Note that you have to use single-quoted strings in TOML for regular
-expressions. It's the equivalent of r-strings in Python. Multiline
-strings are treated as verbose regular expressions by Black. Use `[ ]`
-to denote a significant space character.
-
-<details>
-<summary>Example `pyproject.toml`</summary>
-
-```toml
-[tool.black]
-line-length = 88
-target_version = ['py37']
-include = '\.pyi?$'
-exclude = '''
-
-(
- /(
- \.eggs # exclude a few common directories in the
- | \.git # root of the project
- | \.hg
- | \.mypy_cache
- | \.tox
- | \.venv
- | _build
- | buck-out
- | build
- | dist
- )/
- | foo.py # also separately exclude a file named foo.py in
- # the root of the project
-)
-'''
-```