Skip to content

sympify_petab returns Integer for Python/numpy integers, but Float for numeric strings #553

Open

Description

@dweindl

sympify_petab converts numeric strings to sp.Float, but Python and numpy integers to sp.Integer:

import numpy as np
from petab.v1.math import sympify_petab

sympify_petab("2")          # Float: 2.00000000000000
sympify_petab(2.0)          # Float: 2.00000000000000
sympify_petab(2)            # Integer: 2
sympify_petab(np.int64(2))  # Integer: 2

Since sympy 1.13, sp.Integer(2) != sp.Float(2), so the type matters for comparisons. And integer arithmetic stays exact: sympify_petab(1) / sympify_petab(3) gives 1/3, while sympify_petab("1") / sympify_petab("3") gives 0.333333333333333.

In petab.v2, which parses all math fields with sympify_petab, this has the following effects:

  • For the same file content, the type depends on pandas' dtype inference for the whole column. A targetValue of 2 is parsed as Integer if all target values in the condition table are integers, and as Float if any other row contains a non-integer or an expression.
  • Objects created from Python integers, e.g. Change(target_id="k1", target_value=2), do not compare equal to the same objects after writing and reading them back, because the value is written as 2.0 and read back as Float.

PEtab numbers are floating point (the sympify_petab docstring also says "integer values are converted to floats", which currently only holds for strings). Converting integers to sp.Float in sympify_petab would make this consistent. However, this would change the return value for existing callers that pass Python integers.

🤖 Drafted with AI assistance.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions