To solve the given optimization problem, we first need to identify the decision variables, objective function, and constraints.

- Decision Variables: Let \(D\) be the number of digital watches produced per day, and let \(A\) be the number of analog watches produced per day.
- Objective Function: The goal is to maximize profit. Given that the profit per digital watch is $15 and per analog watch is $10, the total profit \(P\) can be represented as \(P = 15D + 10A\).
- Constraints:
  1. Demand constraints for digital watches: \(D \geq 150\)
  2. Demand constraints for analog watches: \(A \geq 120\)
  3. Production capacity constraints for digital watches: \(D \leq 200\)
  4. Production capacity constraints for analog watches: \(A \leq 180\)
  5. Total shipment contract: \(D + A \geq 300\)

Given these elements, we can formulate the linear programming problem as follows:

Maximize: \(15D + 10A\)

Subject to:
- \(D \geq 150\)
- \(A \geq 120\)
- \(D \leq 200\)
- \(A \leq 180\)
- \(D + A \geq 300\)
- \(D, A \geq 0\) (non-negativity constraints, though implicitly satisfied by the above constraints)

To solve this problem using Gurobi in Python, we use the following code:

```python
from gurobipy import *

# Create a new model
m = Model("Watch_Production")

# Define variables
D = m.addVar(name="Digital_Watches", lb=150, ub=200)
A = m.addVar(name="Analog_Watches", lb=120, ub=180)

# Objective function: Maximize profit
m.setObjective(15*D + 10*A, GRB.MAXIMIZE)

# Constraint: Total shipment contract
m.addConstr(D + A >= 300, name="Total_Shipment")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print(f"Optimal Solution: Produce {D.x} digital watches and {A.x} analog watches.")
else:
    print("Model is infeasible or unbounded.")
```