## Problem Description and Formulation

The pottery artist has two products: mugs and bowls. Each mug takes 20 minutes to make, and each bowl takes 30 minutes to make. The artist has a limited amount of time available per week, which is 1200 minutes, and a limited amount of clay, which can make a total of 50 items. The profit per mug is $10, and the profit per bowl is $15. The goal is to maximize the profit by determining the optimal number of mugs and bowls to produce.

## Mathematical Formulation

Let's denote the number of mugs to be produced as \(M\) and the number of bowls to be produced as \(B\). The problem can be formulated as follows:

### Objective Function

Maximize the total profit: \(10M + 15B\)

### Constraints

1. Time constraint: \(20M + 30B \leq 1200\)
2. Clay constraint (total items): \(M + B \leq 50\)
3. Non-negativity constraints: \(M \geq 0, B \geq 0\)
4. Integer constraints: \(M, B\) are integers (though Gurobi can handle this, we will initially solve it as an LP and then consider integer solutions if necessary)

## Gurobi Code

```python
import gurobi

def solve_pottery_problem():
    # Create a new model
    model = gurobi.Model()

    # Define variables
    M = model.addVar(name="Mugs", vtype=gurobi.GRB.INTEGER, lb=0)
    B = model.addVar(name="Bowls", vtype=gurobi.GRB.INTEGER, lb=0)

    # Objective function: Maximize profit
    model.setObjective(10*M + 15*B, gurobi.GRB.MAXIMIZE)

    # Time constraint
    model.addConstr(20*M + 30*B <= 1200, name="Time_Constraint")

    # Clay constraint
    model.addConstr(M + B <= 50, name="Clay_Constraint")

    # Solve the model
    model.optimize()

    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: Mugs = {M.varValue}, Bowls = {B.varValue}")
        print(f"Max Profit: ${model.objVal:.2f}")
    else:
        print("No optimal solution found")

solve_pottery_problem()
```

This code defines the optimization problem using Gurobi's Python interface, solves it, and prints out the optimal number of mugs and bowls to produce in order to maximize profit, along with the maximum profit achievable. Note that we directly use integer variables for \(M\) and \(B\) to reflect the practical requirement that the artist can only produce whole numbers of mugs and bowls.