def brute_force_t1():
    print "Now attempting to find \mathbb{G}_{T=1} by brute-force simulation..."
    num = 25
    (impossible,suboptimal,optimal) = ([],[],[])
    (basis0,basis1,basis2) = (np.array([0,1,1]), np.array([1,0,1]), np.array([1,1,0]))
    (c0,c1,c2) = np.meshgrid(np.linspace(0,1,num), np.linspace(0,1,num), np.linspace(0,1,num))
    (c0,c1,c2) = (c0.ravel(),c1.ravel(),c2.ravel())
    print "We must iterate through " + str(len(c0)) + " simulated points ... "
    # The case of i=0 is when all the components are zero.
    for i in range(1,len(c0)):
        if i % 100000 == 0:
            print "Now on point " + str(i)
        p = c0[i]*basis0 + c1[i]*basis1 + c2[i]*basis2
        w = np.array([c0[i], c1[i], c2[i]])
        w = w / np.sum(w)
        six_points = par.get_six_points(p, w, False)
        result = position_t0(six_points)
        if result == "Impossible":
            impossible.append(p)
        elif result == "Suboptimal":
            suboptimal.append(p)
        else:
            optimal.append(p)
    print "Number of impossible, suboptimal, and optimal points: {0}, {1}, {2}.".format(
        len(impossible),len(suboptimal),len(optimal))
    # Next step is to plot. There are several ways we can do this.
    plt3d = plt.figure().gca(projection='3d')
    x_coordinates = [point[0] for point in impossible]
    y_coordinates = [point[1] for point in impossible]
    z_coordinates = [point[2] for point in impossible]
    plt3d.plot_surface(x_coordinates, y_coordinates, z_coordinates)
    plt.xlabel('X axis')
    plt.ylabel('Y axis')
    plt.show()
            np.array([0,2,2]),np.array([2,0,2]),np.array([2,2,0]),
            np.array([1.5,1.5,1./3]),np.array([1./3,1.5,1.5]),np.array([1.5,1./3,1.5])]
 (basis0,basis1,basis2) = (np.array([0,2,2]), np.array([2,0,2]), np.array([2,2,0]))
 rationals = par.generate_rationals(30, 1)
 print "There are a total of " + str(len(rationals)) + " possible values for a single basis... "
 points_tested = 0
 for first in range(0, len(rationals)):
     for second in range(first, len(rationals)):
         for third in range(second, len(rationals)):
             (c0,c1,c2) = (rationals[first],rationals[second],rationals[third])
             p = c0*basis0 + c1*basis1 + c2*basis2
             if np.sum(p) < 2:
                 continue
             w = np.array([c0, c1, c2])
             w = w / np.sum(w)
             six_points = par.get_six_points(p, w, False)
             points_tested += 1
             if points_tested % 250000 == 0:
                 print "Points tested: {}.".format(points_tested)
             done = False
             for s in six_points:
                 if par.position_t1(s) == "Impossible":
                     done = True
                     break
             if not done:
                 for s in six_points:
                     if par.position_t1(s) == "Optimal":
                         symmetrical_points = replicate(p)
                         for pt in symmetrical_points:
                             optimal.append(pt)
                         done = True