def main():
    startStateProbabilities = {"A" : 0.25, "B" : 0.4, "C" : 0.35}

    markovChain = MarkovChain()
    
    markovChain.addState("A", {"A" : 0.1, "B" : 0.8, "C" : 0.1})
    markovChain.addState("B", {"A" : 0.1, "B" : 0.1, "C" : 0.8})
    markovChain.addState("C", {"A" : 0.8, "B" : 0.1, "C" : 0.1})
    
    markovChain.setStartStateProbabilities(startStateProbabilities)

    print markovChain

    for i in range(0, 10):
        print markovChain.generateData(30)

    f = open("my_new_pickle.pickle", 'w')
    pickle.dump(markovChain, f)
    f.close()
def buildMarkovChain(counts):
    markovChain = MarkovChain()

    print "Counts: " + str(counts)

    for origin in counts.keys():
 
        # Get sum of outgoing edges from current origin to determine denominator of probability calculation
        totalOutSum = 0
        for count in counts[origin].values():
            totalOutSum += count

        # Calculate transition probabilities from current origin
        transitionProbabilities = {}
        for destination, count in counts[origin].iteritems():
            transitionProbabilities[destination] = count / float(totalOutSum)

        markovChain.addState(origin, transitionProbabilities)
    
    print "Built Markov chain:\n" + str(markovChain)
    return markovChain