import os
import subprocess
def sudo_write ( val : str , path : str ) - > None :
try :
with open ( path , ' w ' ) as f :
f . write ( str ( val ) )
except PermissionError :
os . system ( f " sudo chmod a+w { path } " )
try :
with open ( path , ' w ' ) as f :
f . write ( str ( val ) )
except PermissionError :
# fallback for debugfs files
os . system ( f " sudo su -c ' echo { val } > { path } ' " )
def sudo_read ( path : str ) - > str :
try :
return subprocess . check_output ( f " sudo cat { path } " , shell = True , encoding = ' utf8 ' ) . strip ( )
except Exception :
return " "
class MovingAverage :
def __init__ ( self , window_size : int ) :
self . window_size : int = window_size
self . buffer : list [ float ] = [ 0.0 ] * window_size
self . index : int = 0
self . count : int = 0
self . sum : float = 0.0
def add_value ( self , new_value : float ) :
# Update the sum: subtract the value being replaced and add the new value
self . sum - = self . buffer [ self . index ]
self . buffer [ self . index ] = new_value
self . sum + = new_value
# Update the index in a circular manner
self . index = ( self . index + 1 ) % self . window_size
# Track the number of added values (for partial windows)
self . count = min ( self . count + 1 , self . window_size )
def get_average ( self ) - > float :
if self . count == 0 :
return float ( ' nan ' )
return self . sum / self . count