def test_safe_log(self): """safe_log: should handle pos/neg/zero/empty arrays as expected """ #normal valid array a = array([[4,0,8],[2,16,4]]) self.assertEqual(safe_log(a),array([[2,0,3],[1,4,2]])) #input integers, output floats self.assertFloatEqual(safe_log(array([1,2,3])),array([0,1,1.5849625])) #just zeros a = array([[0,0],[0,0]]) self.assertEqual(safe_log(a),array([[0,0],[0,0]])) #negative number try: self.assertFloatEqual(safe_log(array([0,3,-4]))[0:2], \ array([0,1.5849625007])) except ValueError: #platform-dependent pass try: self.assertNotEqual(safe_log(array([0,3,-4]))[2],\ safe_log(array([0,3,-4]))[2]) except ValueError: #platform-dependent pass #empty array self.assertEqual(safe_log(array([])),array([])) #double empty array self.assertEqual(safe_log(array([[]])),array([[]]))
def toLogOddsMatrix(self, symbol_freqs=None): """Returns the LogOddsMatrix of a profile as a new Profile/ symbol_freqs: per character array of background frequencies e.g. [.25,.25,.25,.25] for equal frequencies for each of the four bases. See toOddsMatrix for more information. """ odds = self.toOddsMatrix(symbol_freqs) log_odds = safe_log(odds.Data) return Profile(log_odds, self.Alphabet, self.CharOrder)