To solve this linear programming optimization problem, we first need to define our decision variables and constraints based on the given information. Let's denote:

- \(S\) as the number of scooters produced.
- \(B\) as the number of bikes produced.

The objective is to maximize profit. The profit per scooter is $100, and per bike is $50. So, the total profit can be represented as \(100S + 50B\).

Now, let's consider the constraints:

1. **Grinder Time Constraint**: Each scooter requires 2 hours of tooling on the grinder, and each bike requires 4 hours. The maximum time available per day on the grinder is 10 hours. This gives us the constraint \(2S + 4B \leq 10\).

2. **Polisher Time Constraint**: Both scooters and bikes require 3 hours of tooling on the polisher. With a maximum of 10 hours available per day, we have \(3S + 3B \leq 10\), which simplifies to \(S + B \leq \frac{10}{3}\).

Since we cannot produce negative units of scooters or bikes, we also have non-negativity constraints: \(S \geq 0\) and \(B \geq 0\).

To maximize profit, we set up our linear programming problem as follows:

Maximize: \(100S + 50B\)

Subject to:
- \(2S + 4B \leq 10\)
- \(S + B \leq \frac{10}{3}\)
- \(S \geq 0\)
- \(B \geq 0\)

Now, let's translate this into Gurobi code in Python:

```python
from gurobipy import *

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

# Define the decision variables
S = m.addVar(vtype=GRB.CONTINUOUS, name="scooters", lb=0)
B = m.addVar(vtype=GRB.CONTINUOUS, name="bikes", lb=0)

# Set the objective function
m.setObjective(100*S + 50*B, GRB.MAXIMIZE)

# Add constraints
m.addConstr(2*S + 4*B <= 10, "grinder_time")
m.addConstr(S + B <= 10/3, "polisher_time")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Scooters: {S.x}")
    print(f"Bikes: {B.x}")
    print(f"Maximum Profit: {m.objVal}")
else:
    print("No optimal solution found")
```