tang_vect = [-norm_vect[1], norm_vect[0]]
vel1 = object1.vel
vel2 = object2.vel
vel1_norm = vel1[0] * norm_vect[0] + vel1[1] * norm_vect[1]
vel1_tang = vel1[0] * tang_vect[0] + vel1[1] * tang_vect[1]
vel2_norm = vel2[0] * norm_vect[0] + vel2[1] * norm_vect[1]
vel2_tang = vel2[0] * tang_vect[0] + vel2[1] * tang_vect[1]
new_vel1_norm = (vel1_norm * (object1.mass - object2.mass) + 2 * object2.
    mass * vel2_norm) / (object1.mass + object2.mass)
new_vel2_norm = (vel2_norm * (object2.mass - object1.mass) + 2 * object1.
    mass * vel1_norm) / (object1.mass + object2.mass)
object1.vel = [norm_vect[0] * new_vel1_norm + tang_vect[0] * vel1_tang, 
    norm_vect[1] * new_vel1_norm + tang_vect[1] * vel1_tang]
object2.vel = [norm_vect[0] * new_vel2_norm + tang_vect[0] * vel2_tang, 
    norm_vect[1] * new_vel2_norm + tang_vect[1] * vel2_tang]
I can't find what's wrong with this circle bounce calculation in python