This problem could be solved with a SAT/SMT solver,
but alas -- OR-tools model counting much faster

And there are ~7M solutions, OR-tools can count it fast, several minutes.
(I wouldn't write exact count of solutions,
because this is a Project Euler problem after all, supposed to be solved as a task.)

#!/usr/bin/python3
# See also: https://oeis.org/A093199
from ortools.constraint_solver import pywrapcp
def main():
solver = pywrapcp.Solver("...")
cells=[[solver.IntVar(0, 9, "%d_%d" % (r, c)) for r in range(4)] for c in range(4)]
sum_=solver.IntVar(0, 9*4, "sum_")
#print (cells)
for r in range(4):
solver.Add(cells[r][0]+cells[r][1]+cells[r][2]+cells[r][3]==sum_)
for c in range(4):
solver.Add(cells[0][c]+cells[1][c]+cells[2][c]+cells[3][c]==sum_)
solver.Add(cells[0][0]+cells[1][1]+cells[2][2]+cells[3][3]==sum_)
solver.Add(cells[3][0]+cells[2][1]+cells[1][2]+cells[0][3]==sum_)
solution = solver.Assignment()
# flatten
x=[]
for r in range(4):
for c in range(4):
x.append(cells[r][c])
db = solver.Phase(x, solver.CHOOSE_MIN_SIZE_LOWEST_MAX,
solver.ASSIGN_MIN_VALUE)
solver.NewSearch(db)
solutions = 0
while solver.NextSolution():
#for r in range(4):
# for c in range(4):
# print ("%d " % cells[r][c].Value(), end="")
# print ("")
#print ("")
solutions+=1
solver.EndSearch()
return solutions
solutions = main()
print (f"{solutions=}")

Yes, I know about these lousy Disqus ads.
Please use adblocker.
I would consider to subscribe to 'pro' version of Disqus if the signal/noise ratio in comments would be good enough.