# Functions quickstart
### What are deepmux functions
DeepMux functions are serverless functions like AWS Lambda, Google Cloud Functions but with GPU support.
### What are we going to do
We are going to create a demo python funciton step-by-step with DeepMux platform.
## Make sure deepmux-cli is installed
Check out the [Installation guide](https://hackmd.io/uB5Z3Kt9QwiXtPZ1aTf98g)
## Setup project
We recommend creating your project in a separate directory. For example:
```bash
mkdir -p myproject
cd myproject
```
List function environments and choose:
```bash
deepmux env
```
We are going to use `python3.7` environment
Than initialize your project
```bash
deepmux init --name yourproject --env python3.7
```
Will create an empty function named `myproject` and `deepmux.yaml` file at your working directory.
```yaml=
name: myproject
env: python3.7
python:
call: <required, module:function to call>
requirements: <optional, path to requirements.txt>
```
We are going to fill those sections later.
## Implement function
Now it's time to implement the function itself.
In this example we will implement a functions that simply reverses it's input.
Create `main.py` file in project directory and fill it with following code:
Functions accept `bytes` and should return `bytes`
```python
def reverse_function(data):
return data[::-1]
```
Let's save this function to a file `main.py` and add it as an entrypoint.
You need to open `deepmux.yaml` and add `main:reverse_function` to the `call:` section.
At this point `deepmux.yaml` would look like:
```yaml=
name: myproject
env: python3.7
python:
call: main:reverse_function
requirements: <optional, path to requirements.txt>
```
And the project structure should look like:
```
myproject/
myproject/deepmux.yaml
myproject/main.py
```
## Add requirements (Optional)
You can add requirements for your function. Let's say we need `numpy` package somewhere.
Write`requirements.txt` file
```txt
numpy==1.19.4
```
And add path to the file in your `deepmux.yaml`:
```yaml=
name: yourproject
env: python3.7
python:
call: main:reverse_function
requirements: requirements.txt
```
## Upload function
Once we've finished with function, requirements and `deepmux.yaml` we are able to upload function to the platform via cli.
```bash
deepmux upload
```
## Run the function
You can use `deepmux list` command to get your functions and their statuses or simply check your functions via Web UI.
Once your function has finished processing and is in `READY` state you can call it with an HTTP request.
Here's an example using curl:
```
curl -X POST \
-H "X-Token: <YOUR API TOKEN>" \
http://api.deepmux.com/v1/function/myproject/run \
--data "Hello!"
```
You should see the following on the screen:
```
!olleH
```