def test_not_defence_heal(self): #revisa que la defenza no cure a la unidad graphics = null_graphics() cc = combat_core(graphics) first_unit = units(ataque=1, defence=1, hp=1) second_unit = units(ataque=0, defence=0, hp=1) cc.turn_combat_control(ataquer=first_unit, defender=second_unit) self.assertEqual(first_unit.hp, 1)
def test_control(self): graphics = null_graphics() cc = combat_core(graphics) first_unit = units(ataque=1, defence=1, hp=1) second_unit = units(ataque=0, defence=0, hp=1) cc.turn_combat_control(ataquer=first_unit, defender=second_unit) self.assertTrue(second_unit.is_dead())
def test_subtraction(self): #revisa que este restando graphics = null_graphics() cc = combat_core(graphics) first_unit = units(ataque=1, defence=1, hp=1) second_unit = units(ataque=0, defence=0, hp=1) cc.turn_combat_control(ataquer=first_unit, defender=second_unit) self.assertEqual(second_unit.hp, 0)
def test_min_0(self): #se acegura que la vida no baje de 0 (importante?) graphics = null_graphics() cc = combat_core(graphics) first_unit = units(ataque=1, defence=1, hp=1) second_unit = units(ataque=0, defence=0, hp=1) cc.turn_combat_control(ataquer=first_unit, defender=second_unit) self.assertEqual(second_unit.hp, 0)
def make_planet_menu(self, planet): screen_width, screen_height = self.window.get_size() self.widget = menu.Widget(PADDING, PADDING, self.event, self.render) self.widget.setrect(MENU_WIDTH, screen_height-40) build_mine = menu.Menu("build mine", MENU_WIDTH, 40, self.event, self.render, "MINE", ("build_mine", (planet,),), True) build_menu = menu.Menu("build menu",MENU_WIDTH, 40,self.event, self.render, "BUILD", None, True) unit_menu = menu.Menu("unit menu", MENU_WIDTH, 40,self.event, self.render, "UNIT",None, True) self.transport_menu = menu.Menu("transport menu", MENU_WIDTH, 40, self.event, self.render, "TRANSPORT", None, True) childColor = pygame.Color("grey") for b in buildings.buildings(): title = b[1].name comment = Input.build_comments[str(b[0])] newmenu = menu.Menu(str(b[0]), SUBMENU_WIDTH, 40, self.event, self.render, title, ("build", (planet, b[1])),comment=comment) newmenu.colour = childColor; newmenu.originalColour = childColor; build_menu.add(newmenu) for u in units.units(): title = str(u[1].name) #str(u[0])[:6] comment = Input.unit_comments[str(u[0])] newmenu = menu.Menu(str(u[0]), SUBMENU_WIDTH, 40, self.event, self.render, title, ("build_unit",(planet, u[1])), comment=comment) newmenu.colour = childColor; newmenu.originalColour = childColor; unit_menu.add(newmenu) for u in planet.colony.units(): newmenu = menu.Menu(u, SUBMENU_WIDTH, 40, self.event, self.render, u.name, ("select_unit", (u,))) newmenu.colour = childColor; newmenu.originalColour = childColor; self.transport_menu.add(newmenu) self.widget.add(self.widget, build_mine) self.widget.add(self.widget, build_menu) self.widget.add(self.widget, unit_menu) self.widget.add(self.widget, self.transport_menu)
def __init__(self, occ, layout_path="layouts/default.yaml"): ## @var l # System logger handle self.l = logging.getLogger('system') self.occ = occ ## @var ble_scanner # ble_Scanner instance handle self.ble_scanner = occ.ble_scanner self.uc = units() self.screen = occ.screen self.editor_name = '' self.colorkey = [0, 0, 0] self.alpha = 255 self.font_list = {} self.page_list = {} self.page_index = {} self.function_rect_list = {} self.current_function_list = [] self.current_image_list = {} self.layout_path = layout_path self.load_layout(layout_path) self.render_button = None
def __init__(self, occ, simulate=False): ## @var occ # OCC Handle self.occ = occ ## @var l # System logger handle self.l = logging.getLogger('system') ## @var r # Ride logger handle self.r = self.setup_ridelog() ## @var uc # Units converter self.uc = units() self.l.info("[RP] Initialising sensors") ## @var sensors # Handle of sensors instance self.sensors = occ.sensors ## @var ble_sc # Handle of BLE speed and cadence sensor self.ble_sc = self.sensors.get_sensor('ble_sc') ## @var ble_hr # Handle of BLE heart rate sensor self.ble_hr = self.sensors.get_sensor('ble_hr') ## @var gps # Handle of GPS sensor self.gps = self.sensors.get_sensor('gps') ## @var bmp183 # Handle of bmp183 sensor self.bmp183 = self.sensors.get_sensor('bmp183') self.suffixes = ("_digits", "_tenths", "_hms") self.p_raw = dict( time_stamp=time.time(), # Time delta since last p_raw update dtime=1, time_adjustment_delta=0.0, altitude=0.0, altitude_gps=0.0, altitude_home=0.0, altitude_max=INF_MIN, altitude_min=INF, altitude_previous=0.0, pressure=0.0, pressure_at_sea_level=0.0, climb=0.0, daltitude=0.0, daltitude_cumulative=0.0, odometer=0.0, ddistance=0.0, ddistance_cumulative=0.0, distance=0.0, eps=0.0, ept=0.0, epv=0.0, epx=0.0, gps_strength=0, fix_mode_gps='', fix_time_gps=0.0, latitude=0.0, longitude=0.0, satellites=0.0, satellitesused=0.0, ble_state=0, ble_hr_ts=0, heart_rate=0.0, heart_rate_min=INF, heart_rate_avg=0.0, heart_rate_max=INF_MIN, cadence=0.0, cadence_avg=0.0, cadence_max=INF_MIN, cadence_time_stamp=time.time(), ble_data_expiry_time=1.5, time_of_ride_reset=0.0001, ble_hr_name='', ble_hr_addr='', ble_sc_name='', ble_sc_addr='', rider_weight=0.0, ridetime=0.0, ridetime_total=0.0, slope=0.0, speed=0.0, speed_avg=0.0, speed_gps=0.0, speed_max=0.0, speed_gps_low=2.5, speed_gps_noise=1.0, speed_low=1.0, temperature=0.0, temperature_avg=0.0, temperature_max=INF_MIN, temperature_min=INF, track_gps=0, timeon=0.0001, utc='', rtc='') # Internal units self.p_raw_units = dict(altitude='m', cadence='RPM', climb='m/s', distance='m', eps='', ept='', epv='', epx='', dtime='s', fix_gps='', latitude='', longitude='', odometer='m', pressure='Pa', rider_weight='kg', wheel_size='', ridetime='s', ridetime_total='s', satellites='', satellitesused='', slope='m/m', speed='m/s', temperature='C', timeon='s', time_of_ride_reset='s', heart_rate='BPM', track_gps='') # Params of the ride ready for rendering. self.params = dict( altitude='-', altitude_gps='-', altitude_home='-', altitude_max='-', altitude_min='-', cadence='-', cadence_avg='-', cadence_max='-', heart_rate='-', heart_rate_min='-', heart_rate_avg='-', heart_rate_max='-', climb='-', distance=0, eps='-', ept='-', epv='-', epx='-', dtime=0, fix_gps='-', fix_gps_time='-', latitude='-', longitude='-', odometer=0.0, pressure='-', pressure_at_sea_level='-', rider_weight=0.0, wheel_size='', wheel_circ='', ridetime='', ridetime_hms='', ridetime_total='', ridetime_total_hms='', rtc='', satellites='-', satellitesused='-', slope='-', speed='-', speed_avg='-', speed_avg_digits='-', speed_avg_tenths='-', speed_digits='-', speed_max='-', speed_max_digits='-', speed_max_tenths='-', speed_tenths='-', temperature='', temperature_avg='', temperature_max='', temperature_min='', timeon='', timeon_hms='', time_of_ride_reset='', track_gps='-', utc='', ble_hr_name='', ble_hr_addr='', ble_sc_name='', ble_sc_addr='', # Editor params editor_index=0, variable=None, variable_description=None, variable_raw_value=None, variable_unit=None, variable_value=None, # System params debug_level='') # Formatting strings for params. self.p_format = dict(altitude='%.0f', altitude_gps='%.0f', altitude_home='%.0f', altitude_max='%.0f', altitude_min='%.0f', cadence='%.0f', cadence_avg='%.0f', cadence_max='%.0f', climb='%.1f', distance='%.1f', eps='%.4f', epx='%.4f', epv='%.4f', ept='%.4f', dtime='%.2f', fix_gps='', fix_gps_time='', heart_rate='%.0f', heart_rate_min='%.0f', heart_rate_avg='%.0f', heart_rate_max='%.0f', latitude='%.4f', longitude='%.4f', odometer='%.0f', pressure='%.0f', pressure_at_sea_level='%.0f', rider_weight='%.1f', ridetime='%.0f', ridetime_hms='', ridetime_total='.0f', ridetime_total_hms='', rtc='', satellites='%.0f', satellitesused='%.0f', slope='%.0f', speed='%.1f', speed_avg='%.1f', speed_avg_digits='%.0f', speed_avg_tenths='%.0f', speed_digits='%.0f', speed_max='%.1f', speed_max_digits='%.0f', speed_max_tenths='%.0f', speed_tenths='%.0f', temperature='%.0f', temperature_avg='%.1f', temperature_max='%.0f', temperature_min='%.0f', timeon='%.0f', timeon_hms='', time_of_ride_reset='%.0f', track_gps='%.1f', utc='') # Units - name has to be identical as in params self.units = dict(altitude='m', cadence='RPM', climb='m/s', distance='km', eps='', epx='', epv='', ept='', dtime='s', fix_gps='', fix_gps_time='', heart_rate='BPM', latitude='', longitude='', odometer='km', pressure='hPa', rider_weight='kg', wheel_size='', ridetime='s', ridetime_hms='', ridetime_total='s', ridetime_total_hms='', satellites='', satellitesused='', slope='%', speed='km/h', temperature='C', timeon='s', timeon_hms='', time_of_ride_reset='s', track_gps='') # Allowed units - user can switch between those when editing value # FIXME switch to mi when mi/h are set for speed # FIXME switch to mi/h when mi are set for odometer self.units_allowed = dict( odometer=['km', 'mi'], rider_weight=['kg', 'st', 'lb'], # slope=['%', 'C'], wheel_size=[''], speed=['km/h', 'm/s', 'mi/h'], temperature=['C', 'F', 'K']) # Params description FIXME localisation self.p_desc = dict(altitude_home='Home altitude', odometer='Odometer', odometer_units='Odometer units', rider_weight='Rider weight', rider_weight_units='Rider weight units', wheel_size='Wheel size', speed_units='Speed units', temperature_units='Temp. unit') # Params that can be changed in Settings by user self.editors = dict(editor_units=('odometer_units', 'rider_weight_units', 'speed_units', 'temperature_units'), editor_numbers=('altitude_home', 'odometer', 'rider_weight'), editor_string=('wheel_size', ), ble_selector=('ble_hr_name', 'ble_sc_name')) self.p_resettable = dict(distance=1, odometer=1, ridetime=1, speed_max=1, cadence=1, cadence_avg=1, cadence_max=1, heart_rate_min=1, heart_rate_avg=1, heart_rate_max=1) # FIXME Use set_nav_speed_threshold(self, treshold=0) from gps module self.l.info( "[RP] GPS low speed treshold preset to {} [NOT USED]".format( self.p_raw['speed_gps_low'])) self.l.info("[RP] GPS speed noise level treshold preset to {}".format( self.p_raw['speed_gps_noise'])) self.l.info( "[RP] Speed below {} m/a treshold won't be recorded".format( self.p_raw['speed_low'])) self.update_param("speed_max") self.split_speed("speed_max") self.update_param("altitude_home") self.l.info("[RP] altitude_home set to {}".format( self.params["altitude_home"]))
def fahrenheit_to_celsius(degf, difference=False): if difference: return (5. / 9.) * degf else: return (5. / 9.) * (degf - 32.) def celsius_to_fahrenheit(degc, difference=False): if difference: return (9. / 5.) * degc else: return (9. / 5.) * degc + 32 if __name__ == '__main__': config = json.load(open('/Users/bobwilson/beer/bin/homebrew.json', 'r')) unit = units() unit.parseUnitFile(config['files']['units']) config['unit'] = unit parser = argparse.ArgumentParser() parser.add_argument('recipe', type=str, help='Recipe JSON') parser.add_argument('-o', '--output', type=str, help='Output file') args = parser.parse_args() recipe_config = json.load(open(args.recipe, 'r')) if args.output: config['Output'] = args.output execute(config, recipe_config)
def test_unit_get_hurt_not_default(self): first_unit = units(1, 1, 1) first_unit.get_hurt(1) self.assertEqual(first_unit.hp, 1)
def test_unit_get_hurt(self): first_unit = units() self.assertEqual(first_unit.get_hurt(1), -1)
def test_init_not_default(self): first_unit = units(1, 1, 1) self.assertEqual(first_unit.def_defence(), 1) self.assertEqual(first_unit.get_damage(), 1) self.assertTrue(first_unit.can_conter())
def test_init(self): first_unit = units() self.assertEqual(first_unit.def_defence(), 0) self.assertEqual(first_unit.get_damage(), 0) self.assertTrue(first_unit.can_conter())
theta function : returns 0 if x<=0, and 1 if x>0 """ x = np.asarray(x) y = np.zeros(x.shape) y[x > 0] = 1.0 return y def square_barrier(x, width, height): return height * (theta(x) - theta(x - width)) ###################################################################### # Create the animation unit_sys = units.units(10**-12, mode = "abs") _T = unit_sys.get_T() _T.set_format("{:1.3e}") # specify time steps and duration dt = 0.00001 N_steps = 50 t_max = 1000000 ylim = (0, 1.0) frames = 100 # specify constants m = 1.0 # particle mass # specify range in x coordinate fac = 1
def phys(string): string = string.strip() mantissa_str = None exponent_str = None numerical_str = None unit_str = None first_sig_fig = -1 last_sig_fig = -1 exponent_start = -1 decimal_position = -1 i = 0 for c in string: #find the part that contains the number and pull out sigfigs and exponent location if c not in "-+0123456789eE.": break #we are done here so move on to extraction and conversions #look for the exponent if c in "eE": assert exponent_start == -1 #only one exponent allowed exponent_start = i #look for the decimal if c in ".": assert decimal_position == -1 #only one decimal allowed decimal_position = i #look for sigfigs if c in "123456789" and exponent_start == -1: if first_sig_fig == -1: first_sig_fig = i last_sig_fig = i elif c == "0" and decimal_position != -1 and exponent_start == -1: last_sig_fig = i #print "Last sig fig now", c i += 1 #check if the e was supposed to be part of the units if exponent_start == -1: exponent_start = i #need to make sure we get all of the units mantissa_str = string[0:exponent_start].strip() exponent_str = string[exponent_start:i].strip() numerical_str = string[0:i].strip() unit_str = string[i:].strip() if decimal_position == -1: decimal_position = len(mantissa_str) base = float(mantissa_str) exponent = 0 if len(exponent_str) <= 1 else int(exponent_str[1:]) #trim off the 'e' if it is there #we want to know the rounding error which will be 0.5 times the exponent of the last significant figure last_sigfig_exponent = 0 sigfigs = 0 #make sure we have at least one if first_sig_fig != -1: #no need to take care of a minus sign or such because that can't be in the middle and still have a valid number #adjust for the decimal place if it was in the middle if first_sig_fig <= decimal_position and decimal_position <= last_sig_fig: #print "in middle" last_sigfig_exponent = decimal_position-last_sig_fig+exponent sigfigs = last_sig_fig - first_sig_fig else: #print "not in middle" last_sigfig_exponent = decimal_position-last_sig_fig+exponent-1 sigfigs = 1 + last_sig_fig - first_sig_fig unit_str = unit_str.replace(" ","") unit_list = unit_str.split("/") if "" in unit_list: unit_list.remove("") assert len(unit_list) <= 2 #make sure there was only one "/" pos_units = unit_list[0].split("*") if len(unit_list) >= 1 else [] neg_units = unit_list[1].split("*") if len(unit_list) >= 2 else [] unit_map = {} unit_exponent_delta = 0 for u in pos_units: unit_exponent_delta += update_unit(unit_map, u, 1) for u in neg_units: unit_exponent_delta += update_unit(unit_map, u, -1) exponent += unit_exponent_delta last_sigfig_exponent += unit_exponent_delta #print "base = %f" % float(mantissa_str) #print "exponent = %d" % exponent #print "sigfigs = %d" % sigfigs #print "error = 0.5*10**%d" % last_sigfig_exponent #print "pos units = %s" % str(pos_units) #print "neg units = %s" % str(neg_units) #print "unit map = %s" % str(unit_map) num_val = float(numerical_str)*10**unit_exponent_delta error = None if sigfigs == 0: error = 0 else: error = 0.5*10**last_sigfig_exponent return units(interval(num_val-error,num_val+error), unit_map)
def initialize(): pm = Parameter.Parameter( ) #Parameter werden initialisiert (in Parameter.py) us = units.units(pm) #noch units initialiseren return (pm, us)