yt-project / unyt

Handle, manipulate, and convert data with units in Python
https://unyt.readthedocs.io
BSD 3-Clause "New" or "Revised" License
364 stars 48 forks source link

Concatenating arrays when units differ by dimensionless factor #477

Closed robjmcgibbon closed 9 months ago

robjmcgibbon commented 10 months ago

Description

I am trying to concatenate two arrays. They both have the same units, but one has been multiplied by a dimensionless array. Example code below. As a temporary fix I can just divide my second array by unyt.dimensionless

What I Did

a = unyt.unyt_array(np.ones(1), units=unyt.Mpc)
b = unyt.unyt_array(np.ones(1), units=unyt.dimensionless)
c = a + (a*b)
d = np.concatenate([a, a*b])

Traceback (most recent call last):
  File "/cosma/home/dp004/dc-mcgi1/clean/SOAP/test.py", line 7, in <module>
    d = np.concatenate([a, a*b])
  File "<__array_function__ internals>", line 5, in concatenate
  File "/cosma/home/dp004/dc-mcgi1/.local/lib/python3.10/site-packages/unyt/array.py", line 2034, in __array_function__
    return _HANDLED_FUNCTIONS[func](*args, **kwargs)
  File "/cosma/home/dp004/dc-mcgi1/.local/lib/python3.10/site-packages/unyt/_array_functions.py", line 244, in concatenate
    ret_units = _validate_units_consistency(arrs)
  File "/cosma/home/dp004/dc-mcgi1/.local/lib/python3.10/site-packages/unyt/_array_functions.py", line 227, in _validate_units_consistency
    raise UnitInconsistencyError(*units)
unyt.exceptions.UnitInconsistencyError: Expected all unyt_array arguments to have identical units. Received mixed units (Mpc, Mpc*dimensionless)
neutrinoceros commented 10 months ago

Hi @robjmcgibbon, thank you for reporting. I'm working on a fix in #478