## Problem Description and Formulation

The jewelry company produces two types of rings: sapphire and ruby. The production of these rings is limited by two main constraints:

1. The production capacity of each type of ring: The team making sapphire rings can produce at most 10 rings per day, and the team making ruby rings can produce at most 15 rings per day.
2. The approval capacity of the master jeweler: The master jeweler can approve at most 15 rings of either type per day.

The profit per sapphire ring is $500, and the profit per ruby ring is $400. The goal is to determine the number of sapphire and ruby rings the company should produce daily to maximize profit.

## Mathematical Formulation

Let's denote:
- \(S\) as the number of sapphire rings produced per day,
- \(R\) as the number of ruby rings produced per day.

The problem can be formulated as the following linear programming problem:

Maximize:
\[ 500S + 400R \]

Subject to:
\[ S \leq 10 \]
\[ R \leq 15 \]
\[ S + R \leq 15 \]
\[ S, R \geq 0 \]

## Gurobi Code

```python
import gurobi

def solve_jewelry_rings_problem():
    # Create a new model
    model = gurobi.Model()

    # Define the variables
    S = model.addVar(lb=0, ub=10, name="Sapphire_Rings")
    R = model.addVar(lb=0, ub=15, name="Ruby_Rings")

    # Objective function: Maximize profit
    model.setObjective(500 * S + 400 * R, gurobi.GRB.MAXIMIZE)

    # Constraints
    model.addConstr(S <= 10, name="Sapphire_Production_Limit")
    model.addConstr(R <= 15, name="Ruby_Production_Limit")
    model.addConstr(S + R <= 15, name="Master_Jeweler_Approval_Limit")

    # Optimize the model
    model.optimize()

    # Print the results
    if model.status == gurobi.GRB.OPTIMAL:
        print(f"Optimal Solution: Sapphire Rings = {S.varValue}, Ruby Rings = {R.varValue}")
        print(f"Maximum Profit: ${500 * S.varValue + 400 * R.varValue}")
    else:
        print("No optimal solution found.")

if __name__ == "__main__":
    solve_jewelry_rings_problem()
```