## Problem Description and Formulation

The problem is a classic example of a linear programming (LP) problem. The goal is to maximize the profit of a wood shop that produces bookcases and coffee tables, given certain constraints on production capacity and labor hours.

Let's define the decision variables:

* $x$: number of bookcases produced per week
* $y$: number of coffee tables produced per week

The objective function is to maximize the total profit:

* Profit per bookcase: $90
* Profit per coffee table: $65
* Total profit: $90x + 65y$

The constraints are:

* Maximum number of bookcases produced per week: $x \leq 40$
* Maximum number of coffee tables produced per week: $y \leq 60$
* Total labor hours per week: $7x + 5y \leq 150$
* Non-negativity constraints: $x \geq 0, y \geq 0$

## Gurobi Code

```python
import gurobi

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

    # Define the decision variables
    x = model.addVar(lb=0, ub=40, name="bookcases")
    y = model.addVar(lb=0, ub=60, name="coffee_tables")

    # Define the objective function
    model.setObjective(90 * x + 65 * y, gurobi.GRB.MAXIMIZE)

    # Add constraints
    model.addConstr(7 * x + 5 * y <= 150, name="labor_hours")

    # Optimize the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print("Optimal solution found.")
        print(f"Bookcases: {x.varValue}")
        print(f"Coffee tables: {y.varValue}")
        print(f"Maximum profit: ${model.objVal:.2f}")
    else:
        print("No optimal solution found.")

# Run the optimization
wood_shop_optimization()
```