+++ /dev/null
-# Copyright 2000 by Jeffrey Chang. All rights reserved.
-# This code is part of the Biopython distribution and governed by its
-# license. Please see the LICENSE file that should have been included
-# as part of this package.
-
-"""This provides useful general math tools (DEPRECATED).
-
-This module and its C code equivalent are considered to be deprecated, and
-are likely to be removed in a future release of Biopython. Please get in
-touch via the mailing list if this will affect you.
-
-Functions:
-fcmp Compare two floating point numbers, up to a specified precision.
-intd Represent a floating point number as an integer.
-safe_log log, but returns an arbitrarily small number for log(0).
-safe_exp exp, but returns a large or small number instead of overflows.
-
-"""
-import warnings
-warnings.warn("Bio.mathfns and its C code equivalent Bio.cmathfns are" \
- +" deprecated, and will be removed in a future release of"\
- +" Biopython. If you want to continue to use this code,"\
- +" please get in contact with the Biopython developers via"\
- +" the mailing lists to avoid its permanent removal from"\
- +" Biopython.", \
- DeprecationWarning)
-
-import math
-
-def fcmp(x, y, precision):
- """fcmp(x, y, precision) -> -1, 0, or 1"""
- if math.fabs(x-y) < precision:
- return 0
- elif x < y:
- return -1
- return 1
-
-def intd(x, digits_after_decimal=0):
- """intd(x[, digits_after_decimal]) -> int x, rounded
-
- Represent a floating point number with some digits after the
- decimal point as an integer. This is useful when floating point
- comparisons are failing due to precision problems. e.g.
- intd(5.35, 1) -> 54.
-
- """
- precision = 10.**digits_after_decimal
- if x >= 0:
- x = int(x * precision + 0.5)
- else:
- x = int(x * precision - 0.5)
- return x
-
-def safe_log(n, zero=None, neg=None):
- """safe_log(n, zero=None, neg=None) -> log(n)
-
- Calculate the log of n. If n is 0, returns the value of zero. If n is
- negative, returns the value of neg.
-
- """
- if n < 0:
- return neg
- elif n < 1E-100:
- return zero
- return math.log(n)
-
-LOG2 = math.log(2)
-def safe_log2(n, zero=None, neg=None):
- """safe_log2(n, zero=None, neg=None) -> log(n)
-
- Calculate the log base 2 of n. If n is 0, returns the value of
- zero. If n is negative, returns the value of neg.
-
- """
- l = safe_log(n, zero=zero, neg=neg)
- if l is None:
- return l
- return l/LOG2
-
-def safe_exp(n, under=None, over=None):
- """safe_exp(n, under=None, over=None) -> e**n
-
- Guaranteed not to overflow. Instead of overflowing, it returns
- the values of 'under' for underflows or 'over' for overflows.
-
- """
- try:
- return math.exp(n)
- except OverflowError:
- if n < 0:
- return under
- return over
- raise "How did I get here?"
-
-# Try and load C implementations of functions. If I can't,
-# then just ignore and use the pure python implementations.
-try:
- from cmathfns import *
-except ImportError:
- pass