Source code for openfisca_core.commons.misc

from typing import TypeVar

from openfisca_core.types import Array

T = TypeVar("T")


[docs]def empty_clone(original: T) -> T: """Creates an empty instance of the same class of the original object. Args: original: An object to clone. Returns: The cloned, empty, object. Examples: >>> Foo = type("Foo", (list,), {}) >>> foo = Foo([1, 2, 3]) >>> foo [1, 2, 3] >>> bar = empty_clone(foo) >>> bar [] >>> isinstance(bar, Foo) True """ Dummy: object new: T Dummy = type( "Dummy", (original.__class__,), {"__init__": lambda self: None}, ) new = Dummy() new.__class__ = original.__class__ return new
[docs]def stringify_array(array: Array) -> str: """Generates a clean string representation of a numpy array. Args: array: An array. Returns: :obj:`str`: "None" if the ``array`` is None, the stringified ``array`` otherwise. Examples: >>> import numpy >>> stringify_array(None) 'None' >>> array = numpy.array([10, 20.]) >>> stringify_array(array) '[10.0, 20.0]' >>> array = numpy.array(["10", "Twenty"]) >>> stringify_array(array) '[10, Twenty]' >>> array = numpy.array([list, dict(), stringify_array]) >>> stringify_array(array) "[<class 'list'>, {}, <function stringify_array...]" """ if array is None: return "None" return f"[{', '.join(str(cell) for cell in array)}]"