>> It would be good to see a simple test case and understand why the boolean
>> multiplied by the scalar double is becoming a float16. In other words,
>> why does
>> (1-test)*t
>> return a float16 array
>> This does not sound right at all and it would be good to understand why
>> this occurs, now. How are you handling scalars multiplied by arrays in
>> general?
>
> The reason it's float16 is that the first function in the multiply function
> list for which both types can be safely cast to the output type,
Except that float64 cannot be safely cast to float16.