这个爱心代码到底哪里出错了

这个爱心代码到底哪里出错了
import random
from math import sin,cos,pi,log
from tkinter import*
CANVAS_WIDTH=640
CANVAS_HEIGHT=480
CANVAS_CENITER_X=CANVAS_WIDTH/2
CANVAS_CENITER_Y=CANVAS_HEIGHT/2
IMAGE_ENLARGE=11
HEART_COLOR="#ff2121"
def heart_function(t,shrink_ratio:float=IMAGE_ENLARGE):
    """
    "爱心函数生成器"
    :param shrink_ratio:放大比例
    :param t:参数
    :return:坐标
    """
    x=16*(sin(t)**3)
    y=-(13*cos(t)-5*cos(2*t)-2*cos(3*t)-cos(4*t))
    x*=shrink_ratio
    y*=shrink_ratio
    X+=CANVAS_CENTER_X
    Y+=CANVAS_CENTER_Y
    return int(x),int(y)
def scatter_inside(x,y,beta=0.15):
    """"
    随机内部扩散
    :param x:原x
    :param y:原y
    :param beta:强度
    :return:新坐标
    """
    ratio_x=-beta*log(random.random())
    ratio_y=-beta*log(random.random())
    dx=ratio_x*(x-CANVAS_CENTER_X)
    dx=ratio_y*(x-CANVAS_CENTER_Y)
    return x-dx,y-dy
def shrink(x,y,ratio):
    """
    抖动
    :param x:原x
    :param y:原y
    :param ratio:比例
    :return:新坐标
    """
    force=-1/(((x-CANVAS_CENTER_x)**2+(y-CANVAS_CENTER_Y)**2)**0.6)
    dx=ratio*force*(x-CANVAS_CENTER_X)
    dy=ratio*force*(x-CANVAS_CENTER_Y)
    return x-dx,y-dy
def curve(p):
    """
    自定义曲线函数,调整跳动周期
    :param p:参数
    :return:正弦
    """
    return 2*(2*sin(4*p))/(2*pi)
class Heart:
    """
    爱心类
    """
    def _init_(self,generate_frame=20):
        self._pionts=set()
        self._edge_diffusion_points=set()
        self._center_diffusion_points=set()
        self.all_points={}
        self.build(2000)
        
        self.random_halo=1000
        
        self.generate_frame=generate_frame
        for frame in range(generate_frame):
            self.calc(frame)
    def build(self,number):
        #爱心
        for _ in range(number):
            t=random.uniform(0,2*pi)
            x,y=heart_function(t)
            self._points.add((x,y))
        #爱心内扩散
        for _x,_y in list(self._points):
            for _ in range(3):
                x,y=scatter_inside(_x,_y,0.05)
                self._edge_diffusion_points,add((x,y))
        #爱心内再次扩散
        point_list=list(self._points)
        for _ in range(4000):
            x,y=random.choice(point_list)
            x,y=scatter_inside(x,y,0.17)
            self._center_diffusion_points.add((x,y))
        @staticmethod
        def calc_position(x,y,ratio):
            force=1/(((x-CANVAS_CENTER_X)**2+((x-CANVAS_CENTER_X)**0.520))
            
            dx=ratio*force*(x-CANVAS_CENTER_X)+random.randint(-1, 1)
            dy=ratio*force*(y-CANVAS_CENTER_Y)+random.randint(-1, 1)
            return x-dx,y-dy
        def calc(self,generate_frame):
            radio=10*curve(generate_frame/10*pi)
            halo_radius=int(4+6*(1+curve(generate_frame/10*pi)))
            halo_number=int(3000+4000*abs(curve(generate_frame/10*pi)**2))
            all_points=[]
            # 光环
            heart_halo_point=set()
            for _ in range(halo_number):
                t=random.uniform(0,2*pi)
                x,y=heart_function(t,shrink_ratio=11.6)
                x,y=shrink(x,y,halo_radius)
                if(x,y)not in heart_halo_point:
                     #处理新的点
                     heart_halo_point.add((x,y))
                     x+=random.randint(-14,14)
                     y+=random.randint(-14,14)
                     size=random.choice((1,2,2))
                     all_points.append((x,y,size))
                #轮廓
                for x,y in self._points:
                    x,y=self.calc_position(x,y,ratio)
                    size=random.randint(1,3)
                    all_points.append((x,y,size))
                #内容
                for x,y in self._edge_diffusion_points:
                    x,y=self.calc_position(x,y,ratio)
                    size=random.randint(1,2)
                    all_points.append((x,y,size))
                for x,y in self._center_diffusion_points:
                    x,y=self.calc_position(x,y,ratio)
                    size=random.randint(1,2)
                    all_points.append((x,y,size))
                self.all_points[generate_frame]=all_points
            def render(self,render_canvas,render_frame):
                for x,y,size in self.all_points[render_frame%self.generate_frame]:
                    render_canvas.create_rectangle(x,y,x+size,y+size,width=0,fill=HEART_COLOR)
            def draw(main:Tk,render_canvas:Canvas,render_heart:Heart,render_frame=0):
               render_canvas.delete('all')
               render_heart.render(render_canvas,render_frame)
               main.after(160,draw,main,render_canvas,dender_heart,render_frame+1)
            if _name_=='-main_':
                root=Tk()
                canvas=Canvas(root,bg='black',height=CANVAS_HEIGHT,width=CANVAS_WIDTH)
                canvas.pack()
                heart=Heart()
                draw(root,canvas,heart)
                root.mainloop()

运行结果及报错内容
File "", line 93
    dx=ratio*force*(x-CANVAS_CENTER_X)+random.randint(-1, 1)
     ^
SyntaxError: invalid syntax

我的解答思路和尝试过的方法

查了random.randnit()中两个参数这能是大于零的整数,但不知道怎么改

我想要达到的结果

怎么让他运行成功啊!

缩进格式问题:

img