To solve this optimization problem, we first need to translate the natural language description into a symbolic representation. Let's denote the number of doors as $x_1$ and the number of bumpers as $x_2$. The objective function is to maximize profit, which can be represented algebraically as $200x_1 + 150x_2$, since each door contributes $200 to the profit and each bumper contributes $150.

The constraints are:
1. Machine time constraint: Each door takes 20 minutes of machine time, and each bumper takes 10 minutes. The total available machine time per week is 3000 minutes. Therefore, this constraint can be represented as $20x_1 + 10x_2 \leq 3000$.
2. Production limit for doors: The plant can make at most 100 doors per week, which translates to $x_1 \leq 100$.
3. Production limit for bumpers: The plant can make at most 200 bumpers per week, which translates to $x_2 \leq 200$.
4. Non-negativity constraints: Since the number of doors and bumpers cannot be negative, we have $x_1 \geq 0$ and $x_2 \geq 0$.

Here is the symbolic representation in JSON format:
```json
{
    'sym_variables': [('x1', 'number of doors'), ('x2', 'number of bumpers')],
    'objective_function': '200*x1 + 150*x2',
    'constraints': ['20*x1 + 10*x2 <= 3000', 'x1 <= 100', 'x2 <= 200', 'x1 >= 0', 'x2 >= 0']
}
```

Now, let's write the Gurobi code to solve this linear programming problem:
```python
from gurobipy import *

# Create a model
m = Model("Auto_Manufacturing")

# Define variables
x1 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="doors")
x2 = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="bumpers")

# Set the objective function
m.setObjective(200*x1 + 150*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(20*x1 + 10*x2 <= 3000, "machine_time")
m.addConstr(x1 <= 100, "door_limit")
m.addConstr(x2 <= 200, "bumper_limit")

# Optimize the model
m.optimize()

# Print results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Doors: {x1.x}")
    print(f"Bumpers: {x2.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")
```