# Features

Adding Python support to the Flipper Zero platform was only possible by rigorously sorting unnecessary language features.
So here is a detailed list of all supported and unsupported Python language features.

## Supported

The following features are enabled and supported by the interpreter:

* Garbage collector is enabled.
* The `__file__` constant.
* Import of external files from the SD card.
* Read and write files from and to the SD card.
* The `time` module.
* The `random` module.
* The `float` data type.
* Support for [decorator](https://docs.python.org/3/glossary.html#term-decorator) functions.
* The `setattr` function.
* The `filter` function.
* The `reversed` function.
* The `min` and `max` function.
* Module-level `__init__` imports.

## Unsupported

The following features are disabled and _not_ supported by the interpreter:

* Finaliser calls in the garbage collector (e.g. `__del__`).
* The `__doc__` constants.
* Source code line numbers in exceptions.
* Support for a [REPL](https://en.wikipedia.org/wiki/Read%E2%80%93eval%E2%80%93print_loop).
* The `cmath` module.
* The `complex` data type.
* Support for multiple inheritance.
* Module-level `__getattr__` support according to [PEP 562](https://peps.python.org/pep-0562/).
* Support for the descriptors `__get__`, `__set__` and  `__delete__`.
* Coroutines with `async` and `await` functions.
* The `:=` assign expression.
* Non-standard `.pend_throw()` method for generators.
* Support for `bytes.hex` and `bytes.fromhex`.
* Support for unicode characters.
* The string functions `.center`, `.count`, `.partition`, `.rpartition` and `.splitlines`.
* The `%` string formatting operator (use `.format` instead).
* The `bytearray` data type.
* The `memoryview` data type.
* The `slice` object.
* The `frozenset` object.
* The `property` decorator.
* The `range` function with `start`, `stop` and `step` attributes.
* The `next` function with a second argument.
* The `round` function with integers.
* All special methods for user classes (e.g. `__imul__`).
* The `enumerate` function.
* The `compile` function.
* Support for `eval`, `exec` and `execfile` functions.
* The `NotImplemented` special constant.
* The `input` function.
* The `pow` function with 3 integer arguments.
* The `help` function.
* The `micropython` module.
* The `array` module.
* The `collections` module.
* The `struct` module.
* The `gc` module.
* The `sys` module.
* The `select` module.
* The `json` module.

This list of unsupported features is not set in stone. 
If you miss support for one particular feature, feel free to [open an issue](https://github.com/ofabel/mp-flipper/issues) or make a pull request.
