Skip to content

Commit

Permalink
Replace almost_equal_floats with math.isclose
Browse files Browse the repository at this point in the history
  • Loading branch information
eumiro committed Aug 10, 2023
1 parent efc8a69 commit 0db14da
Show file tree
Hide file tree
Showing 5 changed files with 6 additions and 19 deletions.
5 changes: 0 additions & 5 deletions pydantic/_internal/_utils.py
Expand Up @@ -114,11 +114,6 @@ def update_not_none(mapping: dict[Any, Any], **update: Any) -> None:
mapping.update({k: v for k, v in update.items() if v is not None})


def almost_equal_floats(value_1: float, value_2: float, *, delta: float = 1e-8) -> bool:
"""Return True if two floats are almost equal."""
return abs(value_1 - value_2) <= delta


T = TypeVar('T')


Expand Down
4 changes: 2 additions & 2 deletions pydantic/color.py
Expand Up @@ -19,7 +19,7 @@
from pydantic_core import CoreSchema, PydanticCustomError, core_schema
from typing_extensions import deprecated

from ._internal import _repr, _utils
from ._internal import _repr
from ._internal._schema_generation_shared import GetJsonSchemaHandler as _GetJsonSchemaHandler
from .json_schema import JsonSchemaValue
from .warnings import PydanticDeprecatedSince20
Expand Down Expand Up @@ -399,7 +399,7 @@ def parse_float_alpha(value: Union[None, str, float, int]) -> Optional[float]:
except ValueError:
raise PydanticCustomError('color_error', 'value is not a valid color: alpha values must be a valid float')

if _utils.almost_equal_floats(alpha, 1):
if math.isclose(alpha, 1):
return None
elif 0 <= alpha <= 1:
return alpha
Expand Down
4 changes: 2 additions & 2 deletions pydantic/v1/color.py
Expand Up @@ -13,7 +13,7 @@
from typing import TYPE_CHECKING, Any, Dict, Optional, Tuple, Union, cast

from .errors import ColorError
from .utils import Representation, almost_equal_floats
from .utils import Representation

if TYPE_CHECKING:
from .typing import CallableGenerator, ReprArgs
Expand Down Expand Up @@ -310,7 +310,7 @@ def parse_float_alpha(value: Union[None, str, float, int]) -> Optional[float]:
except ValueError:
raise ColorError(reason='alpha values must be a valid float')

if almost_equal_floats(alpha, 1):
if math.isclose(alpha, 1):
return None
elif 0 <= alpha <= 1:
return alpha
Expand Down
8 changes: 0 additions & 8 deletions pydantic/v1/utils.py
Expand Up @@ -63,7 +63,6 @@
'is_valid_identifier',
'deep_update',
'update_not_none',
'almost_equal_floats',
'get_model',
'to_camel',
'is_valid_field',
Expand Down Expand Up @@ -225,13 +224,6 @@ def update_not_none(mapping: Dict[Any, Any], **update: Any) -> None:
mapping.update({k: v for k, v in update.items() if v is not None})


def almost_equal_floats(value_1: float, value_2: float, *, delta: float = 1e-8) -> bool:
"""
Return True if two floats are almost equal
"""
return abs(value_1 - value_2) <= delta


def generate_model_signature(
init: Callable[..., None], fields: Dict[str, 'ModelField'], config: Type['BaseConfig']
) -> 'Signature':
Expand Down
4 changes: 2 additions & 2 deletions pydantic/v1/validators.py
Expand Up @@ -41,7 +41,7 @@
is_none_type,
is_typeddict,
)
from .utils import almost_equal_floats, lenient_issubclass, sequence_like
from .utils import lenient_issubclass, sequence_like

if TYPE_CHECKING:
from typing_extensions import Literal, TypedDict
Expand Down Expand Up @@ -179,7 +179,7 @@ def number_multiple_validator(v: 'Number', field: 'ModelField') -> 'Number':
field_type: ConstrainedNumber = field.type_
if field_type.multiple_of is not None:
mod = float(v) / float(field_type.multiple_of) % 1
if not almost_equal_floats(mod, 0.0) and not almost_equal_floats(mod, 1.0):
if not math.isclose(mod, 0.0) and not math.isclose(mod, 1.0):
raise errors.NumberNotMultipleError(multiple_of=field_type.multiple_of)
return v

Expand Down

0 comments on commit 0db14da

Please sign in to comment.