# Python Gurobipy Maximum Flow: How to model “source” and “sink” in constraints

I am attempting to capture the nature of a "source" node as well as a "sink" node where the net flow for each node aside from the source and sink is zero. Here is my code so far:

import gurobipy as gp
from gurobipy import GRB
import pandas
import os

# writes constraints and objective to model file for easier inspection
def write_to_file(model, filestring):
directory = os.getcwd()
filename = directory+filestring
if model.write(filename):
return 0
else:
print("failed to write to file")
return -1

# nodes
# for my example, SOURCE s = 2 and SINK t = 7
vertices = [1,2,3,4,5,6,7]

# arcs = edges, each arc has a fixed capacity
arcs, capacity = gp.multidict({
(2,1) : 100,
(2,3) : 50,
(3,4) : 25,
(4,7) : 25,
(3,6) : 200,
(1,6) : 500,
(3,7) : 25,
(6,5) : 500,
(6,7) : 50,
(5,7) : 200
})

# create model
m = gp.Model("Maximum Flow Problem")

# define variables
flow = m.addVars(arcs, name = "flow")

# flow capacity
(flow.sum(i,j) <= capacity[i,j] for i,j in arcs), "cap")

# flow conservation ISSUE HERE!
(flow.sum('*',j) - flow.sum(j,'*') == 0 for j in vertices), "node")

obj = (flow.sum('*', 7) - flow.sum(7,'*'))
m.setObjective(obj, GRB.MAXIMIZE)

#write_to_file(m, "\\rec2_model_simple.lp")

m.optimize()


The issue has to do with the flow conservation constraint. I want to ensure all flow going in and out of all nodes that aren't s=2 and t=7 to equal zero; however, I do not know how to capture this in my constraint.

I would like to have something like:

m.addConstrs(
(flow.sum('*',j) - flow.sum(j,'*') == 0 for j != 2 or j != 7 in vertices), "node")


This throws an error, but I am curious if there is something similar in nature to capture this notion of a "source" and a "sink" in my flow conservation constraint. This may be a question more geared towards the python language instead of gurobipy, but since it is a question specific to modeling, I felt as though it is appropriate here.

m.addConstrs(