To solve this problem, we need to define variables and constraints based on the given information. Let's denote the number of rubber ducks as $x$ and the number of toy boats as $y$. The profit per rubber duck is $2, and per toy boat is $4. The time taken for preparation and testing for each item and the total available time for these activities will define our constraints.

1. **Objective Function**: Maximize profit $P = 2x + 4y$
2. **Constraints**:
   - Preparation time constraint: $5x + 8y \leq 1000$ (since each rubber duck takes 5 minutes of preparation and each toy boat takes 8 minutes, with a total of 1000 minutes available)
   - Testing time constraint: $3x + 2y \leq 700$ (since each rubber duck takes 3 minutes of testing and each toy boat takes 2 minutes, with a total of 700 minutes available)
   - Non-negativity constraints: $x \geq 0$, $y \geq 0$ (since we cannot produce a negative number of items)

We will use Gurobi in Python to solve this linear programming problem. First, ensure you have Gurobi installed and configured properly with your Python environment.

```python
from gurobipy import *

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

# Define variables
x = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="rubber_ducks")
y = m.addVar(lb=0, vtype=GRB.CONTINUOUS, name="toy_boats")

# Objective function: Maximize profit
m.setObjective(2*x + 4*y, GRB.MAXIMIZE)

# Constraints
m.addConstr(5*x + 8*y <= 1000, "preparation_time")
m.addConstr(3*x + 2*y <= 700, "testing_time")

# Optimize model
m.optimize()

# Print solution
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Number of rubber ducks: {x.x}")
    print(f"Number of toy boats: {y.x}")
    print(f"Maximum profit: ${2*x.x + 4*y.x:.2f}")
else:
    print("No optimal solution found")
```