## Problem Description and Formulation

The jewelry shop has two types of necklaces: diamond and gold. The production of each type of necklace requires a certain amount of time for designing and crafting. The shop has limited hours available for designing and crafting. The goal is to determine the number of diamond and gold necklaces the shop should produce to maximize profit.

Let's define the decision variables:
- \(D\): The number of diamond necklaces to produce.
- \(G\): The number of gold necklaces to produce.

The constraints based on the given information are:
1. Designing time constraint: \(3D + 5G \leq 30\)
2. Crafting time constraint: \(10D + 2G \leq 45\)
3. Non-negativity constraint: \(D \geq 0, G \geq 0\)

The objective function to maximize profit is:
\[ \text{Maximize:} \quad 1500D + 500G \]

## Gurobi Code

To solve this linear programming problem using Gurobi, we will use the Gurobi Python interface. First, ensure you have Gurobi installed in your Python environment. You can install it via pip:

```bash
pip install gurobi
```

Here's the Gurobi code for the problem:

```python
import gurobi as gp

# Create a new model
model = gp.Model("jewelry_shop")

# Define the decision variables
D = model.addVar(lb=0, name="diamond_necklaces", vtype=gp.GRB.INTEGER)
G = model.addVar(lb=0, name="gold_necklaces", vtype=gp.GRB.INTEGER)

# Objective function: Maximize profit
model.setObjective(1500*D + 500*G, gp.GRB.MAXIMIZE)

# Constraints
model.addConstr(3*D + 5*G <= 30, name="designing_time")
model.addConstr(10*D + 2*G <= 45, name="crafting_time")

# Solve the model
model.optimize()

# Print the results
if model.status == gp.GRB.OPTIMAL:
    print(f"Optimal Solution:")
    print(f"Diamond Necklaces: {D.varValue}")
    print(f"Gold Necklaces: {G.varValue}")
    print(f"Max Profit: {model.objVal}")
else:
    print("The model is infeasible or has no optimal solution.")
```