#!/usr/bin/env sage from pseudowalls import * def plot(): O = Chern_Char(1,0) O1 = exponential_chern(1,1) O1inv = exponential_chern(-1,1) O2 = O1 * O1 O_x = Chern_Char(0,1) def plot_central_charge(chern, name, argument = None, radius = None): Z = stability.Mumford().central_charge(chern) x = Z.real() y = Z.imag() if not argument: argument = arctan(y/x) if x != 0 else pi / 2 if argument <= 0: argument += pi if not radius: radius = (pi-argument/2)/pi return point( Z, marker = "o", size = 600, rgbcolor = "white", #markeredgecolor = "purple", zorder = 100 ) + point( Z, marker = name, size = 500, rgbcolor = "red", zorder = 101 ) + line( (0, Z), rgbcolor = "red", linestyle = "dashed", zorder = 99 ) + disk( (0,0), float(radius), (0, float(argument)), alpha=.2, fill=False, thickness=1, rgbcolor="purple" ) p = sum( plot_central_charge(chern, name) for chern, name in [ (O1, r"$\mathcal{O}(1)$"), (O, r"$\mathcal{O}_X$"), (O1inv, r"$\mathcal{O}(-1)$"), (O2, r"$\mathcal{O}(2)$"), (O_x, r"$\mathcal{O}_p$") ] ) xmax = (2.5) xmin = (-2.5) ymin = (-0.25) ymax = (1.5) aspect_ratio = (1) p += polygon( [ (xmax + 1,0), (xmin - 1,0), (xmin - 1,ymax + 1), (xmax + 1,ymax + 1) ], rgbcolor = "yellow", alpha = 0.2, zorder = 102 ) p.xmax(xmax) p.xmin(xmin) p.ymin(ymin) p.ymax(ymax) p.set_aspect_ratio(aspect_ratio) p.axes_labels([r"$\mathcal{R}$",r"$\mathcal{I}$"]) return p