def log_prob(self,observations_list, quantities): 
        """ Finds Weighted log probability of a list of observation sequences

        **Arguments**:

        :param observation_list: A nested list, or a list of lists  
        :type observation_list: Contains a list  multiple observation sequences.

        :param quantities: Number of times, each corresponding item in  'observation_list' occurs.
        :type quantities: A list of integers

        :return: Weighted log probability of multiple observations. 
        :rtype: float
            
        **Features**:

        Scaling applied here. This ensures that no underflow error occurs.

        **Example**:

        >>> states = ('s', 't')
        >>> possible_observation = ('A','B' )
        >>> # Numpy arrays of the data
        >>> start_probability = np.matrix( '0.5 0.5 ')
        >>> transition_probability = np.matrix('0.6 0.4 ;  0.3 0.7 ')
        >>> emission_probability = np.matrix( '0.3 0.7 ; 0.4 0.6 ' )
        >>> # Initialize class object
        >>> test = hmm(states,possible_observation,start_probability,transition_probability,emission_probability)
        >>> observations = ('A', 'B','B','A')
        >>> obs4 = ('B', 'A','B')
        >>> observation_tuple = []
        >>> observation_tuple.extend( [observations,obs4] )
        >>> quantities_observations = [10, 20]
        >>>
        >>> prob = test.log_prob(observation_tuple, quantities_observations)

        """

        prob = 0
        for q,obs in enumerate(observations_list):
            temp,c_scale = self._alpha_cal(obs)
            prob = prob +  -1 *  quantities[q] * np.sum(np.log(c_scale))
        return prob
Finds Weighted log probability of a list of observation sequences

        **Arguments**:

        :param observation_list: A nested list, or a list of lists  
        :type observation_list: Contains a list  multiple observation sequences.

        :param quantities: Number of times, each corresponding item in  'observation_list' occurs.
        :type quantities: A list of integers

        :return: Weighted log probability of multiple observations. 
        :rtype: float
            
        **Features**:

        Scaling applied here. This ensures that no underflow error occurs.

        **Example**:

        >>> states = ('s', 't')
        >>> possible_observation = ('A','B' )
        >>> # Numpy arrays of the data
        >>> start_probability = np.matrix( '0.5 0.5 ')
        >>> transition_probability = np.matrix('0.6 0.4 ;  0.3 0.7 ')
        >>> emission_probability = np.matrix( '0.3 0.7 ; 0.4 0.6 ' )
        >>> # Initialize class object
        >>> test = hmm(states,possible_observation,start_probability,transition_probability,emission_probability)
        >>> observations = ('A', 'B','B','A')
        >>> obs4 = ('B', 'A','B')
        >>> observation_tuple = []
        >>> observation_tuple.extend( [observations,obs4] )
        >>> quantities_observations = [10, 20]
        >>>
        >>> prob = test.log_prob(observation_tuple, quantities_observations)