To solve the given optimization problem, we first need to convert the natural language description into a symbolic representation. This involves defining variables and formulating the objective function and constraints in terms of these variables.

Let's define:
- $x_1$ as the number of packages of fish meat.
- $x_2$ as the number of packages of shrimp meat.

The objective is to maximize profit. Given that a package of fish meat generates a profit of $7 and a package of shrimp generates a profit of $3, the objective function can be written as:
\[ \text{Maximize: } 7x_1 + 3x_2 \]

The constraints are based on the availability of the machines. Each machine is available for at most 1200 minutes per week.

- The weight checking machine constraint: Given that a package of fish meat requires 3 minutes and a package of shrimp requires 1.5 minutes, we have:
\[ 3x_1 + 1.5x_2 \leq 1200 \]
- The packaging inspection machine constraint: Since a package of fish meat requires 15 minutes and a package of shrimp requires 7 minutes, we get:
\[ 15x_1 + 7x_2 \leq 1200 \]

Additionally, $x_1$ and $x_2$ must be non-negative since they represent the number of packages.

Thus, the symbolic representation of the problem is:

```json
{
    'sym_variables': [('x1', 'number of packages of fish meat'), ('x2', 'number of packages of shrimp meat')],
    'objective_function': '7*x1 + 3*x2',
    'constraints': [
        '3*x1 + 1.5*x2 <= 1200',
        '15*x1 + 7*x2 <= 1200',
        'x1 >= 0',
        'x2 >= 0'
    ]
}
```

To solve this problem using Gurobi in Python, we can use the following code:

```python
from gurobipy import *

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

# Define variables
x1 = m.addVar(vtype=GRB.CONTINUOUS, name="fish_meat_packages")
x2 = m.addVar(vtype=GRB.CONTINUOUS, name="shrimp_meat_packages")

# Set the objective function
m.setObjective(7*x1 + 3*x2, GRB.MAXIMIZE)

# Add constraints
m.addConstr(3*x1 + 1.5*x2 <= 1200, "weight_checking_machine")
m.addConstr(15*x1 + 7*x2 <= 1200, "packaging_inspection_machine")

# Optimize the model
m.optimize()

# Print the results
for v in m.getVars():
    print(f"{v.varName}: {v.x}")
print(f"Objective: {m.objVal}")
```

This code sets up the optimization problem as described and solves it using Gurobi's Python interface, providing the optimal number of packages for fish and shrimp meat that maximizes profit while not exceeding the machine availability constraints.