@@ -119,6 +119,8 @@ def __new__(cls, data, units='', dtype=None, copy=True):
119119 if isinstance (data , cls ):
120120 if units :
121121 data = data .rescale (units )
122+ if isinstance (data , unit_registry ['UnitQuantity' ]):
123+ return 1 * data
122124 return np .array (data , dtype = dtype , copy = copy , subok = True )
123125
124126 ret = np .array (data , dtype = dtype , copy = copy ).view (cls )
@@ -343,17 +345,18 @@ def __str__(self):
343345
344346 @with_doc (np .ndarray .__getitem__ )
345347 def __getitem__ (self , key ):
346- if isinstance ( key , int ):
347- # This might be resolved by issue # 826
348- return Quantity ( self . magnitude [ key ], self . _dimensionality )
348+ ret = super ( Quantity , self ). __getitem__ ( key )
349+ if isinstance ( ret , Quantity ):
350+ return ret
349351 else :
350- return super ( Quantity , self ). __getitem__ ( key )
352+ return Quantity ( ret , self . _dimensionality )
351353
352354 @with_doc (np .ndarray .__setitem__ )
353355 def __setitem__ (self , key , value ):
354- if isinstance (value , Quantity ):
355- if self ._dimensionality != value ._dimensionality :
356- value = value .rescale (self ._dimensionality )
356+ if not isinstance (value , Quantity ):
357+ value = Quantity (value )
358+ if self ._dimensionality != value ._dimensionality :
359+ value = value .rescale (self ._dimensionality )
357360 self .magnitude [key ] = value
358361
359362 @with_doc (np .ndarray .__lt__ )
@@ -439,13 +442,11 @@ def put(self, indicies, values, mode='raise'):
439442 performs the equivalent of ndarray.put() but enforces units
440443 values - must be an Quantity with the same units as self
441444 """
442- if isinstance (values , Quantity ):
443- if values ._dimensionality == self ._dimensionality :
444- self .magnitude .put (indicies , values , mode )
445- else :
446- raise ValueError ("values must have the same units as self" )
447- else :
448- raise TypeError ("values must be a Quantity" )
445+ if not isinstance (values , Quantity ):
446+ values = Quantity (values )
447+ if values ._dimensionality != self ._dimensionality :
448+ values = values .rescale (self .units )
449+ self .magnitude .put (indicies , values , mode )
449450
450451 # choose does not function correctly, and it is not clear
451452 # how it would function, so for now it will not be implemented
0 commit comments