@@ -224,34 +224,32 @@ def encode(self, variable: Variable, name: T_Name = None):
224
224
fv = encoding .get ("_FillValue" )
225
225
mv = encoding .get ("missing_value" )
226
226
227
- if fv is not None or mv is not None :
228
- if (
229
- fv is not None
230
- and mv is not None
231
- and not duck_array_ops .allclose_or_equiv (fv , mv )
232
- ):
233
- raise ValueError (
234
- f"Variable { name !r} has conflicting _FillValue ({ fv } ) and missing_value ({ mv } ). Cannot encode data."
235
- )
227
+ fv_exists = fv is not None
228
+ mv_exists = mv is not None
236
229
237
- if fv is not None :
238
- # Ensure _FillValue is cast to same dtype as data's
239
- encoding ["_FillValue" ] = dtype .type (fv )
240
- fill_value = pop_to (encoding , attrs , "_FillValue" , name = name )
241
- if not pd .isnull (fill_value ):
242
- data = duck_array_ops .fillna (data , fill_value )
230
+ if not fv_exists and not mv_exists :
231
+ return variable
243
232
244
- if mv is not None :
245
- # Ensure missing_value is cast to same dtype as data's
246
- encoding ["missing_value" ] = dtype .type (mv )
247
- fill_value = pop_to (encoding , attrs , "missing_value" , name = name )
248
- if not pd .isnull (fill_value ) and fv is None :
249
- data = duck_array_ops .fillna (data , fill_value )
233
+ if fv_exists and mv_exists and not duck_array_ops .allclose_or_equiv (fv , mv ):
234
+ raise ValueError (
235
+ f"Variable { name !r} has conflicting _FillValue ({ fv } ) and missing_value ({ mv } ). Cannot encode data."
236
+ )
250
237
251
- return Variable (dims , data , attrs , encoding , fastpath = True )
238
+ if fv_exists :
239
+ # Ensure _FillValue is cast to same dtype as data's
240
+ encoding ["_FillValue" ] = dtype .type (fv )
241
+ fill_value = pop_to (encoding , attrs , "_FillValue" , name = name )
242
+ if not pd .isnull (fill_value ):
243
+ data = duck_array_ops .fillna (data , fill_value )
252
244
253
- else :
254
- return variable
245
+ if mv_exists :
246
+ # Ensure missing_value is cast to same dtype as data's
247
+ encoding ["missing_value" ] = dtype .type (mv )
248
+ fill_value = pop_to (encoding , attrs , "missing_value" , name = name )
249
+ if not pd .isnull (fill_value ) and fv_exists :
250
+ data = duck_array_ops .fillna (data , fill_value )
251
+
252
+ return Variable (dims , data , attrs , encoding , fastpath = True )
255
253
256
254
def decode (self , variable : Variable , name : T_Name = None ):
257
255
dims , data , attrs , encoding = unpack_for_decoding (variable )
0 commit comments