## Step 1: Define the symbolic representation of the problem
Let's denote the number of oval rocks as $x_1$ and the number of rectangular rocks as $x_2$. The profit per oval rock is $7 and per rectangular rock is $9. The time required for washing oval rocks is 10 minutes and for rectangular rocks is 15 minutes, with 2000 minutes available for washing. The time required for polishing both types of rocks is 12 minutes, with 2500 minutes available for polishing.

## Step 2: Formulate the objective function
The objective is to maximize profit. The profit from $x_1$ oval rocks is $7x_1$ and from $x_2$ rectangular rocks is $9x_2$. Therefore, the objective function to maximize is $7x_1 + 9x_2$.

## 3: Define the constraints
1. Washing time constraint: $10x_1 + 15x_2 \leq 2000$
2. Polishing time constraint: $12x_1 + 12x_2 \leq 2500$
3. Non-negativity constraints: $x_1 \geq 0, x_2 \geq 0$

## 4: Symbolic representation in the required format
```json
{
'sym_variables': [('x1', 'oval rocks'), ('x2', 'rectangular rocks')],
'objective_function': '7*x1 + 9*x2',
'constraints': [
    '10*x1 + 15*x2 <= 2000',
    '12*x1 + 12*x2 <= 2500',
    'x1 >= 0',
    'x2 >= 0'
]
}
```

## 5: Convert the problem into Gurobi code
```python
import gurobi

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

    # Define variables
    x1 = model.addVar(name="oval_rocks", lb=0, ub=gurobi.GRB.INFINITY)
    x2 = model.addVar(name="rectangular_rocks", lb=0, ub=gurobi.GRB.INFINITY)

    # Objective function
    model.setObjective(7 * x1 + 9 * x2, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(10 * x1 + 15 * x2 <= 2000, name="washing_time")
    model.addConstr(12 * x1 + 12 * x2 <= 2500, name="polishing_time")

    # Optimize
    model.optimize()

    # Print solution
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Number of oval rocks: {x1.varValue}")
        print(f"Number of rectangular rocks: {x2.varValue}")
        print(f"Max Profit: {model.objVal}")
    else:
        print("No optimal solution found.")

solve_problem()
```