To solve this linear programming optimization problem, we first need to define the decision variables and the objective function. Let's denote:

- \(x_s\) as the number of scientific calculators produced.
- \(x_g\) as the number of graphing calculators produced.

The objective is to maximize profit. Given that the profit per scientific calculator is $6 and per graphing calculator is $8, the objective function can be written as:

\[ \text{Maximize:} \quad 6x_s + 8x_g \]

Next, we need to define the constraints based on the availability of materials (silicon, plastic, and silver) and the requirements for each type of calculator.

1. **Silicon Constraint**: Each scientific calculator requires 2 grams of silicon, and each graphing calculator requires 4 grams of silicon. With only 100 grams of silicon available, we have:

\[ 2x_s + 4x_g \leq 100 \]

2. **Plastic Constraint**: Each scientific calculator requires 4 grams of plastic, and each graphing calculator requires 6 grams of plastic. With only 200 grams of plastic available, we have:

\[ 4x_s + 6x_g \leq 200 \]

3. **Silver Constraint**: Each scientific calculator requires 1 gram of silver, and each graphing calculator requires 2 grams of silver. With only 50 grams of silver available, we have:

\[ x_s + 2x_g \leq 50 \]

4. **Non-Negativity Constraints**: Since the number of calculators cannot be negative, we also have:

\[ x_s \geq 0 \]
\[ x_g \geq 0 \]

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

```python
from gurobipy import *

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

# Define the decision variables
x_s = m.addVar(name="scientific_calculators", lb=0)
x_g = m.addVar(name="graphing_calculators", lb=0)

# Set the objective function
m.setObjective(6*x_s + 8*x_g, GRB.MAXIMIZE)

# Add constraints
m.addConstr(2*x_s + 4*x_g <= 100, name="silicon_constraint")
m.addConstr(4*x_s + 6*x_g <= 200, name="plastic_constraint")
m.addConstr(x_s + 2*x_g <= 50, name="silver_constraint")

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found.")
    print(f"Scientific Calculators: {x_s.x}")
    print(f"Graphing Calculators: {x_g.x}")
    print(f"Maximum Profit: ${6*x_s.x + 8*x_g.x:.2f}")
else:
    print("No optimal solution found.")

```