[docs]defgetTFactorMag(value:Number,metric_md:MetricMetaData)->Tuple[float,Magnitude]:"""Get transformation factor and magnitude to improve string formating. Parameters ---------- value : Number Reference value metric_md : MetricMetaData Value description Returns ------- Tuple[float, Magnitude] Scaling factor and Magnitude Enum """if(metric_md.unit==Unit.WATTormetric_md.unit==Unit.JOULEormetric_md.unit==Unit.BYTE):transformFactor=1formaginreversed(Magnitude):ifvalue>mag.value:transformFactor=mag.valuebreaknewMag=Magnitude(metric_md.mag.value*transformFactor)returntransformFactor,newMagelifmetric_md.unit==Unit.PERCENT:return1.0,metric_md.magelifmetric_md.unit==Unit.SECOND:return1.0,Magnitude.ONEelse:return1.0,metric_md.mag
[docs]defvalue2ValueUnitStr(value:Number,metric_md:MetricMetaData)->str:"""Return a printable representation as [Value:.3f][mag][unit] (e.g. 3.05mV) of the value based on its metric metadata. Parameters ---------- value : Number Value to apply formating to. metric_md : MetricMetaData Value metadata. Returns ------- str String represenation """tfactor,new_mag=getTFactorMag(value,metric_md)returnf"{value/tfactor:.3f}{new_mag.symbol}{metric_md.unit.value}"
[docs]defvalue2MeanStdStr(stats:Stats)->str:"""Return a printable representation as [Value:.3f]±[std:.3f][mag][unit] (e.g. 3.05±0.1mV) of the value based on its metric metadata. Parameters ---------- stats : Stats obj Stats to apply formating to. metric_md : MetricMetaData Value metadata. Returns ------- str String represenation """tfactor,new_mag=getTFactorMag(stats.mean,stats.metric_md)returnf"{stats.mean/tfactor:.2f} ± {stats.std/tfactor:.2f}{new_mag.symbol}{stats.metric_md.unit.value}"
[docs]defdefault(self,obj:Any)->Any:""" Encode an object to a JSON-serializable format, handling NumPy types. Parameters ---------- obj : Any The object to encode. Returns ------- Any The JSON-serializable representation of the input object. Raises ------ TypeError If the object cannot be encoded to a supported format. Notes ----- This method specifically handles NumPy integer, floating, ndarray, and dtype objects, converting them to standard Python types or string representations. For other types, the superclass's default method is called. """ifisinstance(obj,np.integer):returnint(obj)elifisinstance(obj,np.floating):returnfloat(obj)elifisinstance(obj,np.ndarray):returnobj.tolist()elifisinstance(obj,np.dtype):returnstr(obj)else:returnsuper(NumpyEncoder,self).default(obj)