def report_equivalents(emission, state_emission, Elements): # Equivalencies and CO2 emission equivalents per_house = Paragraph('<font face="times" size=12>% of CO<sub rise = -10 size = 8>2</sub> per US house/day:</font>'.format(emission), style = styles["Normal"]) emissions_data = [ ['Miles driven:', "{:.2e} miles".format(convert.carbon_to_miles(emission))], ['Min. of 32-in. LCD TV:', "{:.2e} minutes".format(convert.carbon_to_tv(emission))], [per_house, \ "{:.2e}%".format(convert.carbon_to_home(emission))]] coal_para = Paragraph('<font face="times" size=12>996 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style = styles["Normal"]) oil_para = Paragraph('<font face="times" size=12>817 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style = styles["Normal"]) gas_para = Paragraph('<font face="times" size=12>744 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style = styles["Normal"]) low_para = Paragraph('<font face="times" size=12>0 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style = styles["Normal"]) if state_emission: equivs_data = [['Coal:', coal_para], ['Oil:', oil_para], ['Natural gas:', gas_para], ['Low carbon:', low_para]] else: equivs_data = [['Coal:', coal_para], ['Petroleum:', oil_para], ['Natural gas:', gas_para], ['Low carbon:', low_para]] equivs_and_emission_equivs(equivs_data, emissions_data, Elements)
def generate(location, watt_averages, breakdown, kwh_and_emissions, func_info, \ comparison_values, default_emissions, default_location): # TODO: remove state_emission and just use location """ Generates pdf report Parameters: location (str): user's location, locations=["Romania", "Brazil"] watt_averages (list): list of baseline, total, process wattage, process duration breakdown (list): [% coal, % oil/petroleum, % natural gas, % low carbon] kwh_and_emissions (list): [kwh used, emission in kg CO2, state emission > 0 for US states] func_info (list): [user func name, user func args (0 or more)] """ kwh, emission, state_emission = kwh_and_emissions baseline_average, process_average, difference_average, process_duration = watt_averages # Initializing document doc = SimpleDocTemplate("energy-usage-report.pdf", pagesize=landscape(letter), topMargin=.3 * inch) title("Energy Usage Report") # Handling header with function name and arguments func_name, *func_args = func_info info_text = " for the function " + func_name if len(func_args) > 0: if len(func_args) == 1: info_text += " with the input " + str(func_args[0]) + "." else: info_text += " with the inputs " for arg in func_args: info_text += arg + "," info_text = info_text[len(info_text) - 1] + "." else: info_text += "." subtitle("Energy usage and carbon emissions" + info_text, spaceBefore=True) # Energy Usage Readings and Energy Mix Data readings_data = [ ['Energy Usage Readings', ''], ['Average baseline wattage:', "{:.2f} watts".format(baseline_average)], ['Average total wattage:', "{:.2f} watts".format(process_average)], [ 'Average process wattage:', "{:.2f} watts".format(difference_average) ], ['Process duration:', process_duration], ['', ''] ] #hack for the alignment coal_para = Paragraph( '<font face="times" size=12>996 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style=styles["Normal"]) oil_para = Paragraph( '<font face="times" size=12>817 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style=styles["Normal"]) gas_para = Paragraph( '<font face="times" size=12>744 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style=styles["Normal"]) low_para = Paragraph( '<font face="times" size=12>0 kg CO<sub rise = -10 size = 8>2 </sub>/MWh</font>', style=styles["Normal"]) if state_emission: coal, oil, natural_gas, low_carbon = breakdown mix_data = [['Energy Mix Data', ''], ['Coal', "{:.2f}%".format(coal)], ['Oil', "{:.2f}%".format(oil)], ['Natural gas', "{:.2f}%".format(natural_gas)], ['Low carbon', "{:.2f}%".format(low_carbon)]] equivs_data = [['Coal:', coal_para], ['Oil:', oil_para], ['Natural gas:', gas_para], ['Low carbon:', low_para]] else: coal, petroleum, natural_gas, low_carbon = breakdown mix_data = [['Energy Mix Data', ''], ['Coal', "{:.2f}%".format(coal)], ['Petroleum', "{:.2f}%".format(petroleum)], ['Natural gas', "{:.2f}%".format(natural_gas)], ['Low carbon', "{:.2f}%".format(low_carbon)]] equivs_data = [['Coal:', coal_para], ['Petroleum:', oil_para], ['Natural gas:', gas_para], ['Low carbon:', low_para]] readings_and_mix_table(readings_data, mix_data, breakdown, state_emission, location) effective_emission = Paragraph( '<font face="times" size=12>{:.2e} kg CO<sub rise = -10 size = 8>2 </sub></font>' .format(emission), style=styles["Normal"]) # Total kWhs used and effective emissions kwh_and_emissions_data = [[ "Total kilowatt hours used:", "{:.2e} kWh".format(kwh) ], ["Effective emissions:", effective_emission]] kwh_and_emissions_table(kwh_and_emissions_data) # Equivalencies and CO2 emission equivalents per_house = Paragraph( '<font face="times" size=12>% of CO<sub rise = -10 size = 8>2</sub> per US house/day:</font>' .format(emission), style=styles["Normal"]) emissions_data = [ ['Miles driven:', "{:.2e} miles".format(convert.carbon_to_miles(emission))], ['Min. of 32-in. LCD TV:', "{:.2e} minutes".format(convert.carbon_to_tv(emission))], [per_house, \ "{:.2e}%".format(convert.carbon_to_home(emission))]] equivs_and_emission_equivs(equivs_data, emissions_data) comparison_graphs(comparison_values, location, emission, default_emissions, default_location) doc.build(Elements)
def log(*args): if (re.search("Package|CPU.*|GPU|DRAM", args[0])): measurement = args[1] sys.stdout.write("\r{:<24} {:>49.2f} {:5<}".format( args[0] + ":", measurement, "watts")) if args[0] == "Baseline wattage": measurement = args[1] sys.stdout.write("\r{:<24} {:>49.2f} {:5<}".format( args[0] + ":", measurement, "watts")) elif args[0] == "Process wattage": measurement = args[1] sys.stdout.write("\r{:<17} {:>56.2f} {:5<}".format( args[0] + ":", measurement, "watts")) elif args[0] == "Final Readings": newline() baseline_average, process_average, difference_average, timedelta = args[ 1], args[2], args[3], args[4] delete_last_lines() log_header(args[0]) sys.stdout.write("{:<25} {:>48.2f} {:5<}\n".format( "Average baseline wattage:", baseline_average, "watts")) sys.stdout.write("{:<25} {:>48.2f} {:5<}\n".format( "Average total wattage:", process_average, "watts")) sys.stdout.write("{:<25} {:>48.2f} {:5<}\n".format( "Average process wattage:", difference_average, "watts")) sys.stdout.write("{:<17} {:>62}\n".format("Process duration:", timedelta)) elif args[0] == "Energy Data": location = args[2] log_header('Energy Data') if location == "Unknown" or locate.in_US(location): coal, oil, gas, low_carbon = args[1] if location == "Unknown": location = "United States" sys.stdout.write( "{:^80}\n{:<13}{:>66.2f}%\n{:<13}{:>66.2f}%\n{:<13}{:>66.2f}%\n" "{:<13}{:>66.2f}%\n".format( "Location unknown, default energy mix in " + location + ":", "Coal:", coal, "Oil:", oil, "Natural Gas:", gas, "Low Carbon:", low_carbon)) elif locate.in_US(location): sys.stdout.write( "{:^80}\n{:<13}{:>66.2f}%\n{:<13}{:>66.2f}%\n{:<13}{:>66.2f}%\n" "{:<13}{:>66.2f}%\n".format("Energy mix in " + location, "Coal:", coal, "Oil:", oil, "Natural Gas:", gas, "Low Carbon:", low_carbon)) else: coal, natural_gas, petroleum, low_carbon = args[1] sys.stdout.write( "{:^80}\n{:<13}{:>66.2f}%\n{:<13}{:>66.2f}%\n{:<13}{:>66.2f}%\n" "{:<13}{:>66.2f}%\n".format("Energy mix in " + location, "Coal:", coal, "Petroleum:", petroleum, "Natural Gas:", natural_gas, "Low Carbon:", low_carbon)) elif args[0] == "Emissions": emission = args[1] log_header('Emissions') sys.stdout.write("{:<19}{:>54.2e} kg CO2\n".format("Effective emission:", \ emission)) sys.stdout.write("{:<24}{:>50.2e} miles\n".format("Equivalent miles driven:", \ convert.carbon_to_miles(emission))) sys.stdout.write("{:<45}{:>27.2e} minutes\n".format("Equivalent minutes of 32-inch LCD TV watched:", \ convert.carbon_to_tv(emission))) sys.stdout.write("{:<45}{:>34.2e}%\n".format( "Percentage of CO2 used in a US" " household/day:", convert.carbon_to_home(emission))) elif args[0] == "Assumed Carbon Equivalencies": log_header('Assumed Carbon Equivalencies') sys.stdout.write("{:<14} {:>65}\n".format("Coal:", "995.725971 kg CO2/MWh")) sys.stdout.write("{:<14} {:>65}\n".format("Petroleum:", "816.6885263 kg CO2/MWh")) sys.stdout.write("{:<14} {:>65}\n".format("Natural gas:", "743.8415916 kg CO2/MWh")) sys.stdout.write("{:<14} {:>65}\n".format("Low carbon:", "0 kg CO2/MWh")) elif args[0] == "Emissions Comparison": log_header('Emissions Comparison') emissions = args[1] for location, emission in emissions: sys.stdout.write("{:<19}{:>54.2e} kg CO2\n".format( location + ":", emission)) #OLD VERSION: US, EU, Rest comparison elif args[0] == "Emissions Comparison default": log_header('Emissions Comparison') (max_global, median_global, min_global, max_europe, median_europe, min_europe, max_us, median_us, min_us) = args[1:] sys.stdout.write( "{:^80}\n".format("Quantities below expressed in kg CO2")) sys.stdout.write("{:8}{:<23} {:<23} {:<22}\n".format("", "US", "Europe", \ "Global minus US/Europe")) sys.stdout.write("{:<7} {:<13}{:>10.2e} {:<13}{:>10.2e} {:<14}{:>10.2e}\n".format("Max:", max_us[0], max_us[1], \ max_europe[0], max_europe[1], max_global[0], max_global[1])) sys.stdout.write("{:<7} {:<13}{:>10.2e} {:<13}{:>10.2e} {:<14}{:>10.2e}\n".format("Median:", median_us[0], median_us[1], \ median_europe[0], median_europe[1], median_global[0], median_global[1])) sys.stdout.write("{:<7} {:<13}{:>10.2e} {:<13}{:>10.2e} {:<14}{:>10.2e}\n".format("Min:", min_us[0], min_us[1], \ min_europe[0], min_europe[1], min_global[0], min_global[1])) elif args[0] == "Process Energy": energy = args[1] sys.stdout.write("-" * 80 + "\n" + "-" * 80 + "\n") sys.stdout.write("{:<13} {:51} {:>10.2e} {:>3}\n".format( "Process used:", "", energy, "kWh")) else: sys.stdout.write(args[0])
def generate(location, watt_averages, breakdown, emission, state_emission): """ Generates pdf report Parameters: location (str): user's location watt_averages (list): list of baseline, total, process wattage averages breakdown (list): [% coal, % oil/petroleum, % natural gas, % low carbon] emission (float): kgs of CO2 emitted """ # Initializing document doc = SimpleDocTemplate("energy-usage-report.pdf", pagesize=letter, rightMargin=1 * inch, leftMargin=1 * inch, topMargin=1 * inch, bottomMargin=1 * inch) title("Energy Usage Report") header("Final Readings") descriptor("Readings shown are averages of wattage over the time period", spaceAfter=True) baseline_average, process_average, difference_average = watt_averages readings = [['Measurement', 'Wattage'], ['Baseline', "{:.2f} watts".format(baseline_average)], ['Total', "{:.2f} watts".format(process_average)], ['Process', "{:.2f} watts".format(difference_average)]] ''' readings = [['Component', 'Baseline', 'Total', 'Process']] for file in raplfiles: line = ["{}".format(file.name), "{:.2f} watts".format(file.baseline_average), "{:.2f} watts".format(file.process_average), "{:.2f} watts".format(file.process_average-file.baseline_average)] if "Package" in file.name: readings.insert(1, line) else: readings.append(line) ''' if state_emission: coal, oil, natural_gas, low_carbon = breakdown energy_mix = [['Energy Source', 'Percentage'], ['Coal', "{}%".format(coal)], ['Oil', "{}%".format(oil)], ['Natural gas', "{}%".format(natural_gas)], ['Low carbon', "{}%".format(low_carbon)]] source = "eGRID" equivs = [['Carbon Equivalency', str(state_emission) + ' lbs/MWh']] else: coal, petroleum, natural_gas, low_carbon = breakdown energy_mix = [['Energy Source', 'Percentage'], ['Coal', "{:.2f}%".format(coal)], ['Petroleum', "{:.2f}%".format(petroleum)], ['Natural gas', "{:.2f}%".format(natural_gas)], ['Low carbon', "{:.2f}%".format(low_carbon)]] source = "US EIA" equivs = [['Coal', '995.725971 kg CO2/MWh'], ['Petroleum', '816.6885263 kg CO2/MWh'], ['Natural gas', '743.8415916 kg CO2/MWh']] table(readings) header("Energy Data") descriptor("Energy mix in {} based on {} {} data".format( location, year, source)) table(energy_mix) emissions = [['Emission', 'Amount'], ['Effective emission', "{:.2e} kg CO2".format(emission)], ['Equivalent miles driven', "{:.2e} miles".format(convert.carbon_to_miles(emission))], ['Equivalent minutes of 32-inch LCD TV watched', "{:.2e} minutes".format(convert.carbon_to_tv(emission))], ['Percentage of CO2 used in a US household/day', \ "{:.2e}%".format(convert.carbon_to_home(emission))]] header("Emissions", spaceAfter=True) table(emissions) header("Assumed Carbon Equivalencies", spaceAfter=True) # descriptor("Formulas used for determining amount of carbon emissions") table(equivs, header=False) doc.build(Elements)