code: def log_prob(self,observations_list, quantities): 
          
  
          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
docs: 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)