We found, implemented and tested algorithm for graph isomorphism and it appears to be polynomial time if the graph is rigid.
Q1 Is the algorithm below correct and polynomial time for rigid graphs?
A graph is rigid if its automorphism group is trivial.
Two graphs $G_1,G_2$ of order $n$ are isomorphic iff there exist permutation matrix $P$ such that $P A_1 P^{-1}=P A_1 P^T = A_2$ where $A_1,A_2$ are their adjacency matrices. We believe it is rigorous to multiply by $P$ and have $P A_1 = A_2 P$.
Let $P$ be $n$ by $n$ matrix with entries $n^2$ variables $x_{i,j}$.
Construct the following system of linear equations $J$.
For the rows $k$ of $P$ add the equations $\sum_{1 \le i \le n} x_{k,i} = 1$. For the columns $k$ of $P$ add the equations $\sum_{1 \le i \le n} x_{i,k} = 1$.
This is necessary condition $P$ to be permutation and if the variables are zero or one it is sufficient.
Let $M = P A_1 - A_2 P$. The entries of $M$ are linear equations in $x_{i,j}$.
For all $n^2$ entries of $M$ add to $J$ the constraints $M_{i,j}=0$.
$J$ has $n^2+2n$ linear equations in $n^2$ variables.
If we can find zero/one solution to $J$, we can solve GI.
Main idea for finding the unique zero/one solution.
Guess variable $x_{i,j}=1$. This forces all $x_{i,k}=0$ for the row and $x_{k,j}=0$ for the columns. These are $2n$ equations in $2n-1$ variables. Add these equation to $J$ and let the resulting system be $J'$. Experimentally, if we make the wrong guess in the unique solution, $J'$ doesn't have any solutions over the rationals and this can be found using linear algebra. If the guess is wrong, set $x_{i,j}=0$ and substitute in $J$. If the guess is correct, we might find zero/one solution over the rationals.
Repeat for all $n^2$ variables.
ADDED explaining the "guessing" part. $J$ has infinitely many integer solutions but single zero/one solution since the graph is rigid. Let $P'$ be the matrix of the unique zero/one solution. We are guessing $P'$ entry by entry. Assume $P'_{1,1}=1$. In $J'$ add $x_{1,1}=1,x_{1,i}=0,x_{i,1}=0,1 \le i \le n$. This reduces the number of variables by $2n-1$. Since the guess is correct, we keep the unique zero/one solution and $J'$ has integer solution. In practice the integer solution is zero/one over the integers.
Assume we make the wrong guess $P'_{1,2}=1$. Add the rows and columns constraints $x_{1,2}=1,x_{1,i}=0,x_{i,2}=0,1 \le i \le n$. Experimentally in the wrong guess $J'$ doesn't have any solutions over the integers and hence no zero/one solution. In $J$ replace $x_{1,2}=0$ in all equations, decreasing the variables by $1$
The complexity of the algorithm is polynomial in $n$, probably something like $O(n^6)$$O(n^8)$.
Our main pain is that guessing the wrong solution might not be detected over the rationals or integers.