def make(self, row): building = row.group.building spv = row.group.database.spv cost = lambda year: building.costs.get(year=year).cost base = building.square_feet * sum(cost(year) * spv(year) for year in row.years) self.base = row.group.index(base, 'whitestone') self.save() parts = row.assemblies, row.components for attr in 'maintenance', 'repair', 'replacement', 'credit': setattr(self, attr, sum(getattr(part, attr) for part in parts)) residual = min(r.residual.cost for r in row.options) self.future = row.pv( row.energy.cost + self.base + self.maintenance + self.repair + self.replacement - self.credit - residual) self.investment = ( row.group.data.first - residual + self.replacement) self.lifecycle = (row.group.data.first + self.future) self.save()
def create(cls, component, parent): self = cls(parent=parent) period = parent.row.period group = parent.row.group mcost = component.maintenance_cost rcost = component.repair_cost rrate = component.repair_rate pcost = component.replacement_cost prate = component.replacement_rate year = parent.row.year pv = parent.row.pv self.maintenance = sum(pv(mcost, year) for year in parent.row.years) total = 0 * dollar replaced = 1 for year in parent.row.years: if (year - replaced) >= prate: replaced = year if (year - replaced) >= rrate: total += pv(rcost, year) self.repair = total times = int((period // prate).item()) self.replacement = sum(pv(pcost, prate * i) for i in range(1, times + 1)) if period < prate: self.credit = 0 * dollar else: leftover = period % prate total = (leftover / prate) * pcost self.credit = pv(total, year) self.save() return self
def make(self, group): self.save() for d in Direction.objects.all(): Window.create(data=self, direction=d) parts = list(self.parts()) self.cost = sum(p.cost for p in parts) self.delta = sum(p.delta for p in parts) self.save()
def make(self, row): self.save() parts = row.group.components.parts() totals = [ComponentTotals.create(p, parent=self) for p in parts] self.maintenance = sum(t.maintenance for t in totals) self.repair = sum(t.repair for t in totals) self.replacement = sum(t.replacement for t in totals) self.credit = sum(t.credit for t in totals) self.save()
def make(self, row): self.save() components = row.group.assemblies.components.all() parts = chain(*(c.parts.all() for c in components)) totals = [AssemblyPartTotals.create(p, parent=self) for p in parts] self.maintenance = sum(t.maintenance for t in totals) self.repair = sum(t.repair for t in totals) self.replacement = sum(t.replacement for t in totals) self.credit = sum(t.credit for t in totals) self.save()
def make(self, group): self.save() components = [AssemblyComponent.create(self, system) for system in filter(bool, ( group.building.heating_system, group.building.cooling_system, group.building.packaged_unit, group.building.energy_supply))] self.cost = sum(c.cost for c in components) self.delta = sum(c.delta for c in components) self.save()
def make(self, group): self.save() components = [ AssemblyComponent.create(self, system) for system in filter(bool, (group.building.heating_system, group.building.cooling_system, group.building.packaged_unit, group.building.energy_supply)) ] self.cost = sum(c.cost for c in components) self.delta = sum(c.delta for c in components) self.save()
def takefrom(self, group, sheets, size, *initial): sheets = list(sheets) index = lambda cost: group.index(cost, 'insulation') total = lambda attr: index(sum(getattr(sheet, attr) for sheet in sheets)) self.maintenance_cost = total('maintenance_cost') self.repair_cost = total('repair_cost') * size self.replacement_cost = total('replacement_cost') * size self.new = total('cost') * size self.old = index(sum(map(cost, initial))) * size rates = self.RateModel.rates(group.location.state.census_region) self.repair_rate = rates.repair self.replacement_rate = rates.replace
def takefrom(self, group, sheets, size, *initial): sheets = list(sheets) index = lambda cost: group.index(cost, 'insulation') total = lambda attr: index( sum(getattr(sheet, attr) for sheet in sheets)) self.maintenance_cost = total('maintenance_cost') self.repair_cost = total('repair_cost') * size self.replacement_cost = total('replacement_cost') * size self.new = total('cost') * size self.old = index(sum(map(cost, initial))) * size rates = self.RateModel.rates(group.location.state.census_region) self.repair_rate = rates.repair self.replacement_rate = rates.replace
def replacement(self, index=True): if not self.component: return 0 * dollar rate = self.rates(self.master.census_region).replace cost = self.replacement_cost times = int((self.year // rate).item()) return sum( self.adjust(cost, index, True, rate * i) for i in irange(1, times))
def cost(self, index=True): self.year.units = 'year' years = irange(1, int(self.year.item())) area = self.building.square_feet cost = lambda year: self.building.costs.get(year=year).cost total = area * sum(cost(year) * self.spv(year) for year in years) return self.index(total) if index else total
def total(self, state, usage): def totals(): for equivalence in self.equivalences.select_related('type'): type, eq = equivalence.emission, equivalence.equivalence yield type.total(state, usage) * eq return sum(totals(), Quantity(0, self.unit))
def total(self, state, usage): def totals(): for equivalence in self.equivalences.select_related("type"): type, eq = equivalence.emission, equivalence.equivalence yield type.total(state, usage) * eq return sum(totals(), Quantity(0, self.unit))
def makewith(self, data, location, building, standard, simulation): r = BlanketWallInsulation.r(standard, building, location.climate_zone(standard)) inner = tuple(BlanketWallInsulation.sheets(location, building, standard)) r -= sum((i.r for i in inner if i.r), 0) outer = RigidWallInsulation.sheets(location, building, standard, r) size = simulation.wall_area.into('ft**2') self.takefrom(data.group, chain(inner, outer), size, building.blanket_wall_insulation, building.rigid_wall_insulation) self.save()
def make(self, row): building = row.group.building spv = row.group.database.spv cost = lambda year: building.costs.get(year=year).cost base = building.square_feet * sum( cost(year) * spv(year) for year in row.years) self.base = row.group.index(base, 'whitestone') self.save() parts = row.assemblies, row.components for attr in 'maintenance', 'repair', 'replacement', 'credit': setattr(self, attr, sum(getattr(part, attr) for part in parts)) residual = min(r.residual.cost for r in row.options) self.future = row.pv(row.energy.cost + self.base + self.maintenance + self.repair + self.replacement - self.credit - residual) self.investment = (row.group.data.first - residual + self.replacement) self.lifecycle = (row.group.data.first + self.future) self.save()
def makewith(self, data, location, building, standard, simulation): r = BlanketWallInsulation.r(standard, building, location.climate_zone(standard)) inner = tuple( BlanketWallInsulation.sheets(location, building, standard)) r -= sum((i.r for i in inner if i.r), 0) outer = RigidWallInsulation.sheets(location, building, standard, r) size = simulation.wall_area.into('ft**2') self.takefrom(data.group, chain(inner, outer), size, building.blanket_wall_insulation, building.rigid_wall_insulation) self.save()
def replacement(self, index=True): return sum(item.replacement(index) for item in self)
def credit(self, index=True): return sum(item.credit(index) for item in self)
def maintenance(self, index=True): return sum(item.maintenance(index) for item in self)
def cost_for(self, building, mbh, tons): mbh = mbh.into(MBH) cost_per_mbh = sum(boiler.cost_per_mbh for boiler in self.boilers.all()) return (cost_per_mbh * mbh) + self.fixed_cost(building)
def make(self, row): self.save() fuels = [Fuel.create(data=self, fuel=fuel) for fuel in self.fuels] self.use = sum(f.use for f in fuels) self.cost = sum(f.cost for f in fuels) self.save()
def cost(self, index=True): return sum(getattr(item, self.field)(index) for item in self)
def replacement(self, index=True): if not self.component: return 0 * dollar rate = self.rates(self.master.census_region).replace cost = self.replacement_cost times = int((self.year // rate).item()) return sum(self.adjust(cost, index, True, rate * i) for i in irange(1, times))
def repair(self, index=True): return sum(item.repair(index) for item in self)
def cost(self, index=True): cost = sum(item.cost(index) for item in self) return self.adjust(cost, index)
def total(self, state, usage): emissions = self.emissions.filter(Q(state=state) | Q(state=None)) return sum(e.total(usage) for e in emissions)
def upv(self, t=None): t = t or self.year if isinstance(t, Quantity): t.units = "year" t = int(t.item()) return sum(self.spv(y) for y in range(t))
def delta(self, index=True): delta = sum(item.delta(index) for item in self) return self.adjust(delta, index)
def initial_fixed_cost(self): return self.cost - sum(c.average_cost(self.tons) for c in self.components)
def upv(self, t=None): t = t or self.year if isinstance(t, Quantity): t.units = 'year' t = int(t.item()) return sum(self.spv(y) for y in range(t))
def cost_for(self, building, mbh, tons): tons = tons.into(cooling) cost_per_ton = sum(c.marginal_cost(tons) for c in self.components) return (cost_per_ton * tons) + self.fixed_cost(building)
def use(self): return sum(i.use for i in self)