## Problem Description and Formulation

The problem is a classic example of a linear programming problem. The goal is to maximize the company's profit by determining the optimal number of regular tables and standing tables to produce.

Let's define the decision variables:

* $x$: number of regular tables produced per day
* $y$: number of standing tables produced per day

The objective function is to maximize the total profit:

* Profit per regular table: $150
* Profit per standing table: $180
* Total profit: $150x + 180y

The constraints are:

* Team A can produce at most 25 regular tables per day: $x \leq 25$
* Team B can produce at most 50 standing tables per day: $y \leq 50$
* The woodworking machine can make at most 60 total tables: $x + y \leq 60$
* Non-negativity constraints: $x \geq 0, y \geq 0$

## Gurobi Code

```python
import gurobi

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

# Define the decision variables
x = model.addVar(lb=0, ub=25, name="regular_tables")
y = model.addVar(lb=0, ub=50, name="standing_tables")

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

# Add constraints
model.addConstr(x + y <= 60, name="woodworking_machine_constraint")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Regular tables: {x.varValue}")
    print(f"Standing tables: {y.varValue}")
    print(f"Max profit: {model.objVal}")
else:
    print("No optimal solution found.")
```

However, to make this code fully executable and capture the constraints properly, we need to adjust it slightly:

```python
import gurobi

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

# Define the decision variables
x = model.addVar(lb=0, ub=25, name="regular_tables")
y = model.addVar(lb=0, ub=50, name="standing_tables")

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

# Add constraints
model.addConstr(x <= 25, name="team_A_constraint")
model.addConstr(y <= 50, name="team_B_constraint")
model.addConstr(x + y <= 60, name="woodworking_machine_constraint")

# Optimize the model
model.optimize()

# Print the solution
if model.status == gurobi.GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Regular tables: {x.varValue}")
    print(f"Standing tables: {y.varValue}")
    print(f"Max profit: {model.objVal}")
else:
    print("No optimal solution found.")
```