## Problem Description and Formulation

The clothing company wants to maximize profit by determining the optimal number of grey and black pants to produce. The production process involves two factories, Wimo and Webo, with limited processing times.

### Decision Variables

* `G`: Number of grey pants to produce
* `B`: Number of black pants to produce

### Objective Function

Maximize profit: `25G + 15B`

### Constraints

* Wimo factory constraint: `40G + 20B <= 2100`
* Webo factory constraint: `30G + 15B <= 3000`
* Non-negativity constraints: `G >= 0`, `B >= 0`

## Gurobi Code

```python
import gurobi

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

    # Define decision variables
    G = model.addVar(name="Grey_Pants", lb=0, vtype=gurobi.GRB.CONTINUOUS)
    B = model.addVar(name="Black_Pants", lb=0, vtype=gurobi.GRB.CONTINUOUS)

    # Define objective function
    model.setObjective(25 * G + 15 * B, gurobi.GRB.MAXIMIZE)

    # Define constraints
    model.addConstr(40 * G + 20 * B <= 2100, name="Wimo_Constraint")
    model.addConstr(30 * G + 15 * B <= 3000, name="Webo_Constraint")

    # Optimize the model
    model.optimize()

    # Print the solution
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal solution: Grey Pants = {G.varValue:.2f}, Black Pants = {B.varValue:.2f}")
        print(f"Max Profit: ${model.objVal:.2f}")
    else:
        print("No optimal solution found")

solve_pant_production_problem()
```

This code defines a Gurobi model with the decision variables `G` and `B`, sets the objective function to maximize profit, and adds the constraints for the Wimo and Webo factories. The model is then optimized, and the solution is printed. If no optimal solution is found, a message indicating this is printed.