Exemplo n.º 1
0
	def createFlash(self):
		'''
		Creates the Flash Card Frame
		'''

		cur = self.conn.cursor()
		cur.execute("SELECT * FROM photos WHERE course=?", (self.name,))
		rows = cur.fetchall()
		cur.close()

		if rows:
			# Hide this Frame
			self.master.withdraw()
			root = Tk()
			root.title("{} FlashPhotos".format(self.name))

			#Center frame to window.
			w=2000
			h=650
			ws = root.winfo_screenwidth() # width of the screen
			hs = root.winfo_screenheight()
			x = (ws/2) - (w/2)
			y = (hs/2) - (h/2)
			root.geometry("%dx%d+%d+%d" % (w, h, x, y))

			app = Flash(master=root, name=self.name)
			app.mainloop()
			root.destroy()
			self.master.deiconify()
		else:
    			messagebox.showerror("OOPS!","Link your course photos to practice with FlashPhotos!")
Exemplo n.º 2
0
def solve_point(point, molecules, pressure, temperature):
    i, j, k = point
    zcomp = normalize_list([j + 0.01, i + 0.01, k + 0.01])
    #print ('Solving zcomp:', zcomp)
    mix = Mixture(molecules, zcomp)
    Flash.flash_mixture(mix, pressure, temperature)
    return mix
Exemplo n.º 3
0
    def __init__(self, initScript=None):
        """Init the flash

        Init Info:
        nuLiqphases = 2
        nuStreamsIn = 2

        """
        super(LLStage, self).__init__(initScript)

        #Create a separator
        self.innerFlash = innerFlash = Flash.SimpleFlash()
        self.AddUnitOperation(innerFlash, FLASH)

        #Create a balance
        self.innerMixer = innerMixer = Balance.BalanceOp()
        self.AddUnitOperation(innerMixer, MIX)

        #Initialize params
        self.InitializeParameters()

        #Share the ports directly
        self.ports_mat_OUT = innerFlash.ports_mat_OUT
        self.ports_mat_IN = innerMixer.ports_mat_IN

        #Connect the balance to the separator
        self.ConnectPorts(MIX, OUT_PORT + str(0), FLASH, IN_PORT)
Exemplo n.º 4
0
    def __init__(self, parent, url):
        wx.Panel.__init__(self, parent, style=wx.TE_PROCESS_ENTER, size=parent.getSize())
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.flash = Flash(self, url)
        sizer.Add(self.flash, proportion=1, flag=wx.EXPAND) #On Maximise, expand TFM
        self.SetSizer(sizer)
        self.SetAutoLayout(True)
        ######BINDS FOR EACH HOTKEY SHORTCUT#######
        self.Bind(wx.EVT_MENU, self.genericF1, id=220)
        self.Bind(wx.EVT_MENU, self.onKeyDownTest, id=221)
        self.Bind(wx.EVT_MENU, self.genericF2, id=222)
        self.Bind(wx.EVT_MENU, self.genericF3, id=223)
        self.Bind(wx.EVT_MENU, self.genericF4, id=224)
        self.Bind(wx.EVT_MENU, self.genericF5, id=225)
        self.Bind(wx.EVT_MENU, self.genericF6, id=226)
        self.Bind(wx.EVT_MENU, self.genericF7, id=227)
        self.Bind(wx.EVT_MENU, self.genericF8, id=228)
        self.Bind(wx.EVT_MENU, self.genericF9, id=229)
        self.Bind(wx.EVT_SIZE, self.onResizeResetPans)
        self.Bind(wx.EVT_MENU, self.panUp, id=240)
        self.Bind(wx.EVT_MENU, self.panDown, id=241)
        self.Bind(wx.EVT_MENU, self.panLeft, id=242)
        self.Bind(wx.EVT_MENU, self.panRight, id=243)
        self.Bind(wx.EVT_MENU, self.panReset, id=244)
        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F1, 220),
                                         ((wx.ACCEL_NORMAL, ord('`'), 221)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F2, 222)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F3, 223)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F4, 224)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F5, 225)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F6, 226)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F7, 227)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F8, 228)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F9, 229)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_UP, 240)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_DOWN, 241)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_LEFT, 242)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_RIGHT, 243)),
                                         ((wx.ACCEL_CTRL, wx.WXK_SPACE, 244))
        ])
        self.Bind(wx.EVT_CHILD_FOCUS, self.focusTest)
        self.flash.SetAcceleratorTable(accel_tbl)
        #After Binds
        self.epoch = time.time()
        self.hotkeyId = 0
        self.isShaObj = False
        self.baseInitW = 0
        self.baseInitH = 0

        ###################################################
        #################Inherited Setting#################
        ###################################################
        self.getMSDelay = parent.proxyGetPictionaryDelay()
        self.getUsername = parent.proxyGetUsername()
        self.loadOffSetF1 = parent.proxyGetOffSetF1()
        self.loadOffSetF2 = parent.proxyGetOffSetF2()
        self.loadOffSetF3 = parent.proxyGetOffSetF3()
        self.loadOffSetF4 = parent.proxyGetOffSetF4()
Exemplo n.º 5
0
def create_composition_data(points):
    ternary_cols = ['M', 'z', 'x', 'y']
    rows = len(points)
    comp_dfs = []
    for comp in range(len(molecules)):
        comp_df = pd.DataFrame([[0 for _ in range(rows)]
                                for _ in range(len(ternary_cols))],
                               ternary_cols)
        comp_dfs.append(comp_df)
    count = 0
    for i, j, k in points:
        zFracs = [i + 0.1, j + 0.1, k + 0.1]
        normalize_list(zFracs)
        mix = Mixture(molecules, zFracs)
        Flash.flash_mixture(mix, psi, rankine)
        for m in range(len(molecules)):
            comp_dfs[m][count] = mix.fluids[['molecule', 'z', 'x', 'y']].ix[m]
        count += 1
    return comp_dfs
Exemplo n.º 6
0
class MyPanel(wx.Panel):
    def __init__(self, parent, url):
        wx.Panel.__init__(self, parent, style=wx.TE_PROCESS_ENTER, size=parent.getSize())
        sizer = wx.BoxSizer(wx.VERTICAL)
        self.flash = Flash(self, url)
        sizer.Add(self.flash, proportion=1, flag=wx.EXPAND) #On Maximise, expand TFM
        self.SetSizer(sizer)
        self.SetAutoLayout(True)
        ######BINDS FOR EACH HOTKEY SHORTCUT#######
        self.Bind(wx.EVT_MENU, self.genericF1, id=220)
        self.Bind(wx.EVT_MENU, self.onKeyDownTest, id=221)
        self.Bind(wx.EVT_MENU, self.genericF2, id=222)
        self.Bind(wx.EVT_MENU, self.genericF3, id=223)
        self.Bind(wx.EVT_MENU, self.genericF4, id=224)
        self.Bind(wx.EVT_MENU, self.genericF5, id=225)
        self.Bind(wx.EVT_MENU, self.genericF6, id=226)
        self.Bind(wx.EVT_MENU, self.genericF7, id=227)
        self.Bind(wx.EVT_MENU, self.genericF8, id=228)
        self.Bind(wx.EVT_MENU, self.genericF9, id=229)
        self.Bind(wx.EVT_SIZE, self.onResizeResetPans)
        self.Bind(wx.EVT_MENU, self.panUp, id=240)
        self.Bind(wx.EVT_MENU, self.panDown, id=241)
        self.Bind(wx.EVT_MENU, self.panLeft, id=242)
        self.Bind(wx.EVT_MENU, self.panRight, id=243)
        self.Bind(wx.EVT_MENU, self.panReset, id=244)
        accel_tbl = wx.AcceleratorTable([(wx.ACCEL_NORMAL, wx.WXK_F1, 220),
                                         ((wx.ACCEL_NORMAL, ord('`'), 221)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F2, 222)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F3, 223)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F4, 224)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F5, 225)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F6, 226)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F7, 227)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F8, 228)),
                                         ((wx.ACCEL_NORMAL, wx.WXK_F9, 229)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_UP, 240)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_DOWN, 241)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_LEFT, 242)),
                                         ((wx.ACCEL_SHIFT, wx.WXK_RIGHT, 243)),
                                         ((wx.ACCEL_CTRL, wx.WXK_SPACE, 244))
        ])
        self.Bind(wx.EVT_CHILD_FOCUS, self.focusTest)
        self.flash.SetAcceleratorTable(accel_tbl)
        #After Binds
        self.epoch = time.time()
        self.hotkeyId = 0
        self.isShaObj = False
        self.baseInitW = 0
        self.baseInitH = 0

        ###################################################
        #################Inherited Setting#################
        ###################################################
        self.getMSDelay = parent.proxyGetPictionaryDelay()
        self.getUsername = parent.proxyGetUsername()
        self.loadOffSetF1 = parent.proxyGetOffSetF1()
        self.loadOffSetF2 = parent.proxyGetOffSetF2()
        self.loadOffSetF3 = parent.proxyGetOffSetF3()
        self.loadOffSetF4 = parent.proxyGetOffSetF4()


    def sizeDeterminerAndSend(self, correctionx, correctiony):
        x_val = self.getCorrectedX() + correctionx
        y_val = self.getCorrectedY() + correctiony
        s = SendKeys("", True, dest=(x_val,y_val))
        s.voidStart()

    #Bloew two methods correct the Coord. retrieval for all screen sizes, and center it to access Game Items.
    def getCorrectedX(self):
        tupleSize = self.GetSize()
        tuplePos = self.GetScreenPosition()
        x_val = int(tuplePos[0] + (tupleSize[0]/2))
        return x_val #Origin at center.

    def getCorrectedY(self):
        tupleSize = self.GetSize()
        tuplePos = self.GetScreenPosition()
        y_val = int(tuplePos[1] + (tupleSize[1]/2))
        return y_val #Likewise as X getter.


    def genericF1(self, event):
        if(self.hotkeyId == 0):
            t1 = time.time() - self.epoch
            if(t1 > self.getMSDelay):
                self.epoch = time.time()
                s = SendKeys("1", True)
                s.voidStart()

        elif(self.hotkeyId == 1):
            s = SendKeys("{enter}{!}off "+ self.loadOffSetF1+"{enter}", False)
            s.voidStart()

        elif(self.hotkeyId == 2):
            s = SendKeys("9ccc", False)
            s.voidStart()

        elif(self.hotkeyId == 3):
            if not self.isShaObj:
                self.sizeDeterminerAndSend(350,125)
                self.isShaObj = True
            else:
                self.isShaObj = False
                self.sizeDeterminerAndSend(300,125)
                #Resets mouse from Item globally using F1

        elif(self.hotkeyId == 4):
            s = SendKeys("{enter}/ch " +self.getUsername +"{enter}", False)
            s.voidStart()

        elif(self.hotkeyId == 5):
            s = SendKeys("{enter}voulez vous danser avec moi ce soir{enter}", False)
            s.voidStart()

    def genericF2(self, event):
        if(self.hotkeyId == 0):
            t1 = time.time() - self.epoch
            if(t1 > self.getMSDelay):
                self.epoch = time.time()
                s = SendKeys("1", True)
                s.voidStart()

        elif(self.hotkeyId == 1):
            s = SendKeys("{enter}{!}off "+ self.loadOffSetF2+"{enter}", False)
            s.voidStart()

        elif(self.hotkeyId == 2):
            s = SendKeys("9vv", False)
            s.voidStart()

        elif(self.hotkeyId == 3):
            if not self.isShaObj:
                self.sizeDeterminerAndSend(350,175)
                self.isShaObj = True
            else:
                self.isShaObj = False
                self.sizeDeterminerAndSend(300,125)

        elif(self.hotkeyId == 4):
            s = SendKeys("{enter}/sy{enter}", False)
            s.voidStart()

        elif(self.hotkeyId == 5):
            s = SendKeys("{enter}vous habitez chez vos parents{enter}", False)
            s.voidStart()

    def genericF3(self, event):
        if(self.hotkeyId == 1):
            s = SendKeys("{enter}{!}off "+self.loadOffSetF3+"{enter}", False)
            s.voidStart()

        elif(self.hotkeyId == 2):
            s = SendKeys("9cxxxxxx ", False)
            s.voidStart()

        elif(self.hotkeyId == 3):
            if not self.isShaObj:
                self.sizeDeterminerAndSend(300,175)
                self.isShaObj = True
            else:
                self.isShaObj = False
                self.sizeDeterminerAndSend(300,125)
                #Resets mouse from Item globally using F1

        elif(self.hotkeyId == 4):
            s = SendKeys("{enter}/np ", False)
            s.voidStart()

        elif(self.hotkeyId == 5):
            s = SendKeys("{enter}tu as de beaux yeux{enter}", False)
            s.voidStart()

    def genericF4(self, event):
        if(self.hotkeyId == 2):
            s = SendKeys("9cccxxxxxx ", False)
            s.voidStart()

        elif(self.hotkeyId == 1):
            s = SendKeys("{enter}{!}off "+self.loadOffSetF4+"{enter}", False)
            s.voidStart()

        elif(self.hotkeyId == 3):
            if not self.isShaObj:
                self.sizeDeterminerAndSend(300,125)
                self.isShaObj = True
            else:
                self.isShaObj = False
                self.sizeDeterminerAndSend(300,125)
                #Resets mouse from Item globally using F1

        elif(self.hotkeyId == 5):
            s = SendKeys("{enter}veux tu m'epouser{enter}", False)
            s.voidStart()

    def genericF5(self, event):
        if(self.hotkeyId == 2):
            s = SendKeys("7cc ", False)
            s.voidStart()

        elif(self.hotkeyId == 3):
            if not self.isShaObj:
                self.sizeDeterminerAndSend(300,225)
                self.isShaObj = True
            else:
                self.isShaObj = False
                self.sizeDeterminerAndSend(300,125)
                #Resets mouse from Item globally using F1

        elif(self.hotkeyId == 5):
            s = SendKeys("{enter}fais moi un bisous{enter}", False)
            s.voidStart()

    def genericF6(self, event):
        if(self.hotkeyId == 2):
            s = SendKeys("7ccc ", False)
            s.voidStart()

    def genericF7(self, event):
        if(self.hotkeyId == 2):
            s = SendKeys("4c4cccxxxxxx ", False)
            s.voidStart()

    def genericF8(self, event):
        if(self.hotkeyId == 2):
            s = SendKeys("5ccxxxxxx", False)
            s.voidStart()

    def genericF9(self, event):
        if(self.hotkeyId == 2):
            s = SendKeys("6ccxxxxxx ", False)
            s.voidStart()

    def onKeyDownTest(self, event):
        if(self.hotkeyId == 0):
            s = SendKeys("{ENTER}! ", False)
            s.voidStart()
        elif(self.hotkeyId != 2 and self.hotkeyId != -1):
            s = SendKeys("{ENTER}!", False)
            s.voidStart()
        elif self.hotkeyId == 2:
            s = SendKeys("{enter}Shaman it appears that I have found myself in a rather bothersome predicament, if you would be so kind as to assist me here I would appreciate that generosity of yours.{enter}", False)
            s.voidStart()
        else:
            pass

    def panUp(self, event):
        if(self.isMovingAlongBothAxes()): self.panReset(event)
        self.baseInitH += SHIFTER
        if self.flash.getHeight() + self.baseInitH < self.flash.getHeight():
            self.flash.SetDimensions(self.baseInitW,self.baseInitH,self.flash.getWidth() + self.baseInitW, self.flash.getHeight() - self.baseInitH)
        else:
            self.flash.SetDimensions(0,0,self.flash.getWidth() + self.baseInitW, self.flash.getHeight() + self.baseInitH)

    def panDown(self, event):
        if(self.isMovingAlongBothAxes()): self.panReset(event)
        self.baseInitH -= SHIFTER
        if not self.flash.getHeight() + self.baseInitH < self.flash.getHeight():
            self.flash.SetDimensions(0,0,self.flash.getWidth() + self.baseInitW, self.flash.getHeight() + self.baseInitH)
        else:
            self.flash.SetDimensions(self.baseInitW,self.baseInitH,self.flash.getWidth(), self.flash.getHeight() - self.baseInitH)

    def panLeft(self, event):
        if(self.isMovingAlongBothAxes()): self.panReset(event)
        self.baseInitW += SHIFTER
        if self.flash.getWidth() + self.baseInitW < self.flash.getWidth():
            self.flash.SetDimensions(self.baseInitW,self.baseInitH,self.flash.getWidth() - self.baseInitW, self.flash.getHeight() - self.baseInitH)
        else:
            self.flash.SetDimensions(0,0,self.flash.getWidth() + self.baseInitW, self.flash.getHeight() + self.baseInitH)


    def panRight(self,event):
        if(self.isMovingAlongBothAxes()): self.panReset(event)
        self.baseInitW -= SHIFTER
        if not self.flash.getWidth() + self.baseInitW < self.flash.getWidth():
            self.flash.SetDimensions(0,0,self.flash.getWidth() + self.baseInitW, self.flash.getHeight() + self.baseInitH)
        else:
            self.flash.SetDimensions(self.baseInitW,self.baseInitH,self.flash.getWidth() - self.baseInitW, self.flash.getHeight() - self.baseInitH)

    def onResizeResetPans(self, event):
        event.Skip()
        self.baseInitH = 0
        self.baseInitW = 0

    def panReset(self, event):
        self.baseInitH = 0
        self.baseInitW = 0
        self.flash.SetDimensions(0,0,self.flash.getWidth(), self.flash.getHeight())


    ##############################################
    #Getters, setters and test methods are below.#
    ##############################################
    #ToDo Remove this method and actually fix the negative axes movement, in 2 Dimensions
    def isMovingAlongBothAxes(self):
        if(self.baseInitH != 0 and self.baseInitW != 0):
            return True

    def getAbsolutePosX(self):
        return self.flash.GetPositionTuple()[0]

    def getAbsolutePosY(self):
        return self.flash.GetPositionTuple()[1]

    def setHotKeyId(self, id):
        self.hotkeyId = id

    def focusTest(self, event):
        pass
import Flash
from Mixture import Mixture

psi = 3000
rankine = 160 + 460
molecules = ['C1', 'C4', 'C10']
zFracs = [0.6301, 0.1055, 0.2644]

mix = Mixture()
mix.initialize_fluids(molecules, zFracs)

Flash.flash_mixture(mix, psi, rankine)

print
print '-----Results-----'
print mix.zFactors
print mix.xFracs
print mix.yFracs
Exemplo n.º 8
0
def create_ternary(molecules,
                   pressure,
                   temperature,
                   amt=30,
                   heatmap=False,
                   tie_lines=False,
                   specific_zFracs=[],
                   finish_curve=False):
    scale = 2
    points = len(list(ternary.helpers.simplex_iterator(scale)))
    while points <= amt:
        scale += 1
        points = len(list(ternary.helpers.simplex_iterator(scale)))
    scale -= 1
    points = list(ternary.helpers.simplex_iterator(scale))
    rows = len(points)
    print('using number of points:', rows)
    print('scale set to:', scale)
    cmap = plt.cm.get_cmap('summer')
    f, ax = plt.subplots(1, 1, figsize=(10, 8))
    figure, tax = ternary.figure(ax=ax, scale=scale)
    style = 'h'
    # can be changed for colorized axes on composition (b: bottom, l: left, r: right)
    axes_colors = {'b': 'black', 'l': 'black', 'r': 'black'}
    mixed_data = []
    if heatmap:
        mixed_data = create_composition_data(molecules, pressure, temperature,
                                             points, scale)
        values = mixed_data[0]
        tax.heatmap(dict(zip(points, values)),
                    scale=scale,
                    cmap=cmap,
                    vmax=1,
                    style=style,
                    colorbar=True)

    tax.boundary(linewidth=2.0, axes_colors=axes_colors)

    tax.left_axis_label("C3", offset=0.16, color=axes_colors['l'])
    tax.right_axis_label("C1", offset=0.16, color=axes_colors['r'])
    tax.bottom_axis_label("C2", offset=-0.06, color=axes_colors['b'])

    tax.gridlines(multiple=1,
                  linewidth=1,
                  horizontal_kwargs={'color': axes_colors['b']},
                  left_kwargs={'color': axes_colors['l']},
                  right_kwargs={'color': axes_colors['r']},
                  alpha=0.6)

    ticks = [round(i / float(scale), 1) for i in reversed(range(scale + 1))]
    tax.ticks(ticks=ticks,
              axis='lbr',
              linewidth=1,
              clockwise=True,
              axes_colors=axes_colors,
              offset=0.03)
    tax.clear_matplotlib_ticks()
    tax._redraw_labels()
    #tie-lines
    prev_xs = []
    prev_ys = []
    max_phases = [0.64, 0.21, 0.15]
    print('max phases:', max_phases)
    cnt = 0
    while max_phases[1] > 0 and cnt < 10 and tie_lines:
        pnt = (max_phases[0], max_phases[1], max_phases[2])
        tie_mix = Mixture(molecules, max_phases)
        Flash.flash_mixture(tie_mix, pressure, temperature)
        diff = 0.05
        max_phases[1] -= diff
        max_phases[2] += diff
        if tie_mix.vapor == 0 or tie_mix.vapor == 1:
            print('not in two-phase', pnt)
            continue
        cnt += 1
        fluids = tie_mix.fluids
        xs = [
            fluids['x'][1] * scale, fluids['x'][0] * scale,
            fluids['x'][2] * scale
        ]
        ys = [
            fluids['y'][1] * scale, fluids['y'][0] * scale,
            fluids['y'][2] * scale
        ]
        if len(prev_xs) > 0 and len(prev_ys) > 0:
            tax.plot([xs, prev_xs],
                     linewidth=1.0,
                     label="Two-Phase Curve",
                     color='b')
            tax.plot([ys, prev_ys],
                     linewidth=1.0,
                     label="Two-Phase Curve",
                     color='b')
        prev_xs = xs
        prev_ys = ys
        tax.plot([xs, ys], linewidth=1, label="Tie-Line", color='b')
    if len(specific_zFracs) > 0:
        z1 = specific_zFracs[1]
        z2 = specific_zFracs[0]
        z3 = specific_zFracs[2]
        specific_mix = Mixture(molecules, [z1, z2, z3])
        Flash.flash_mixture(specific_mix, pressure, temperature)
        fluids = specific_mix.fluids
        zss = [
            fluids['z'][1] * scale, fluids['z'][0] * scale,
            fluids['z'][2] * scale
        ]
        xss = [
            fluids['x'][1] * scale, fluids['x'][0] * scale,
            fluids['x'][2] * scale
        ]
        yss = [
            fluids['y'][1] * scale, fluids['y'][0] * scale,
            fluids['y'][2] * scale
        ]
        tax.plot([xss, zss], linewidth=2.5, label="Specific-Line", color='r')
        tax.plot([zss, yss],
                 linewidth=2.5,
                 label="Specific-Line",
                 color='pink')
    if tie_lines and heatmap and finish_curve:
        prev_xs = []
        prev_ys = []
        final_mixes = mixed_data[2]
        for f_mix in final_mixes:
            print f_mix
            fluids = f_mix.fluids
            xs = [
                fluids['x'][1] * scale, fluids['x'][0] * scale,
                fluids['x'][2] * scale
            ]
            ys = [
                fluids['y'][1] * scale, fluids['y'][0] * scale,
                fluids['y'][2] * scale
            ]
            if len(prev_xs) > 0 and len(prev_ys) > 0:
                tax.plot([xs, prev_xs],
                         linewidth=1.0,
                         label="Two-Phase Curve",
                         color='b')
                tax.plot([ys, prev_ys],
                         linewidth=1.0,
                         label="Two-Phase Curve",
                         color='b')
            prev_xs = xs
            prev_ys = ys
            tax.plot([xs, ys], linewidth=1, label="Tie-Line", color='b')
    tax.show()
    return tax