## Problem Description and Symbolic Representation

The problem involves a company that produces two types of phones: large size and small size. The goal is to maximize profit given the constraints on manufacturing belt time and testing time.

### Symbolic Variables:
- $x_1$ = Number of large size phones
- $x_2$ = Number of small size phones

### Objective Function:
The profit per large phone is $400, and the profit per small phone is $300. The objective function to maximize profit ($P$) is:
\[ P = 400x_1 + 300x_2 \]

### Constraints:
1. Manufacturing belt time: $20x_1 + 15x_2 \leq 1500$
2. Testing time: $12x_1 + 10x_2 \leq 1000$
3. Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$

## Symbolic Representation in JSON Format

```json
{
    'sym_variables': [('x1', 'large size phones'), ('x2', 'small size phones')],
    'objective_function': '400*x1 + 300*x2',
    'constraints': [
        '20*x1 + 15*x2 <= 1500',
        '12*x1 + 10*x2 <= 1000',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

## Gurobi Code in Python

```python
import gurobipy as gp

# Create a new model
m = gp.Model("phone_production")

# Define variables
x1 = m.addVar(name="large_phones", lb=0, vtype=gp.GRB.INTEGER)  # Number of large size phones
x2 = m.addVar(name="small_phones", lb=0, vtype=gp.GRB.INTEGER)  # Number of small size phones

# Objective function: Maximize profit
m.setObjective(400*x1 + 300*x2, gp.GRB.MAXIMIZE)

# Constraints
m.addConstr(20*x1 + 15*x2 <= 1500, name="manufacturing_belt_constraint")
m.addConstr(12*x1 + 10*x2 <= 1000, name="testing_constraint")

# Solve the model
m.optimize()

# Print the results
if m.status == gp.GRB.OPTIMAL:
    print(f"Optimal solution: Large phones = {x1.varValue}, Small phones = {x2.varValue}")
    print(f"Max Profit: ${400*x1.varValue + 300*x2.varValue}")
else:
    print("The model is infeasible.")
```