To solve this problem, we first need to define the decision variables and the objective function. Let's denote the area allocated to sunflowers as \(x\) square feet and the area allocated to roses as \(y\) square feet.

The objective is to maximize profit. The profit per square foot from sunflowers is $450, and from roses is $100. Therefore, the total profit can be represented as \(450x + 100y\).

We have two main constraints:
1. **Budget Constraint**: The cost of seeds for sunflowers is $67 per square foot, and for roses is $52 per square foot. The gardener has a budget of $6500. This gives us the constraint \(67x + 52y \leq 6500\).
2. **Space Constraint**: The total area available is 100 square feet. Therefore, \(x + y \leq 100\).

Additionally, we have non-negativity constraints since the areas cannot be negative: \(x \geq 0\) and \(y \geq 0\).

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

```python
from gurobipy import *

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

# Define the decision variables
x = m.addVar(name="sunflowers", lb=0)  # Area for sunflowers
y = m.addVar(name="roses", lb=0)       # Area for roses

# Set the objective function: Maximize profit
m.setObjective(450*x + 100*y, GRB.MAXIMIZE)

# Add constraints
m.addConstr(67*x + 52*y <= 6500, name="budget")  # Budget constraint
m.addConstr(x + y <= 100, name="space")          # Space constraint

# Optimize the model
m.optimize()

# Print the results
if m.status == GRB.OPTIMAL:
    print("Optimal solution found:")
    print(f"Area for sunflowers: {x.x} square feet")
    print(f"Area for roses: {y.x} square feet")
    print(f"Maximum profit: ${m.objVal}")
else:
    print("No optimal solution found")

```