consistently use True/False for `return_tuple`
Author: stas00
Pull request: yes

…

consistently use True/False for `return_tuple` (currently it's sometimes None, sometimes False)

Comments:
Mmm, it should be `None` all the time except if the model doesn't have an inner config. The current behavior for all other flags (`output_hidden_states` and `output_attentions`) is that passing an argument supersedes the config. So for instance, passing `return_tuple=False` to the model even if `config.return_tuple = True` should end up with no `return_tuple`.

But why is there a need for a 3rd state, why not just default to `False`?

# [Codecov](https://codecov.io/gh/huggingface/transformers/pull/5945?src=pr&el=h1) Report
> Merging [#5945](https://codecov.io/gh/huggingface/transformers/pull/5945?src=pr&el=desc) into [master](https://codecov.io/gh/huggingface/transformers/commit/604a2355dc61f2888d68aab3adb0c5b648a4f42d&el=desc) will **decrease** coverage by `0.17%`.
> The diff coverage is `98.85%`.

[![Impacted file tree graph](https://codecov.io/gh/huggingface/transformers/pull/5945/graphs/tree.svg?width=650&height=150&src=pr&token=9qOlN6Hb1c)](https://codecov.io/gh/huggingface/transformers/pull/5945?src=pr&el=tree)

```diff
@@            Coverage Diff             @@
##           master    #5945      +/-   ##
==========================================
- Coverage   78.47%   78.29%   -0.18%     
==========================================
  Files         146      146              
  Lines       26214    26214              
==========================================
- Hits        20572    20525      -47     
- Misses       5642     5689      +47     
```


| [Impacted Files](https://codecov.io/gh/huggingface/transformers/pull/5945?src=pr&el=tree) | Coverage Δ | |
|---|---|---|
| [src/transformers/modeling\_camembert.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19jYW1lbWJlcnQucHk=) | `100.00% <ø> (ø)` | |
| [src/transformers/modeling\_mmbt.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19tbWJ0LnB5) | `24.10% <0.00%> (ø)` | |
| [src/transformers/modeling\_xlm\_roberta.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ194bG1fcm9iZXJ0YS5weQ==) | `100.00% <ø> (ø)` | |
| [src/transformers/modeling\_albert.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19hbGJlcnQucHk=) | `82.04% <100.00%> (ø)` | |
| [src/transformers/modeling\_bart.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19iYXJ0LnB5) | `95.74% <100.00%> (ø)` | |
| [src/transformers/modeling\_bert.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19iZXJ0LnB5) | `88.39% <100.00%> (ø)` | |
| [src/transformers/modeling\_ctrl.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19jdHJsLnB5) | `96.37% <100.00%> (ø)` | |
| [src/transformers/modeling\_distilbert.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19kaXN0aWxiZXJ0LnB5) | `97.82% <100.00%> (ø)` | |
| [src/transformers/modeling\_dpr.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19kcHIucHk=) | `97.83% <100.00%> (ø)` | |
| [src/transformers/modeling\_electra.py](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree#diff-c3JjL3RyYW5zZm9ybWVycy9tb2RlbGluZ19lbGVjdHJhLnB5) | `81.55% <100.00%> (ø)` | |
| ... and [18 more](https://codecov.io/gh/huggingface/transformers/pull/5945/diff?src=pr&el=tree-more) | |

------

[Continue to review full report at Codecov](https://codecov.io/gh/huggingface/transformers/pull/5945?src=pr&el=continue).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/huggingface/transformers/pull/5945?src=pr&el=footer). Last update [604a235...f5be8a4](https://codecov.io/gh/huggingface/transformers/pull/5945?src=pr&el=lastupdated). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments).


That is the way those flags are set and consistency with the others is less likely to surprise users:
`None` -> use the value in config (defaulting to `False`)
`False` -> force-use `return_tuple=False` even if the config says `True`
`True` -> force-use `return_tuple=True` even if the config says `False`

One can imagine the user has set the config a certain way but needs to bypass it. Returning a tuple for a punctual conversion to ONNX for instance, or not returning one on a model set for jit-tracing/ONNX just to get the documented output while doing a punctual test.

I agree that nullable boolean are a good API design 💯 

Thank you for your explanation, @sgugger!