Example #1
0
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)
Example #2
0
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)
Example #3
0
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)