From 99fdad023d96d235a88471e17909e3789ba48bd7 Mon Sep 17 00:00:00 2001 From: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Sun, 13 Mar 2022 16:48:12 -0400 Subject: [PATCH 1/7] Squashed commit of the following: commit 2449c03dca2f8203507b7673401d7ed12c24f636 Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Sun Mar 13 16:47:20 2022 -0400 Merging work commit 877a41de4a9634725004aefd4608d872c2c958cf Merge: 0cfbcdc 2301551 Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Sun Mar 13 10:14:24 2022 -0400 Merge branch 'towers-in-the-soup' of https://github.com/Unit26Y21/DesignAnarchy into towers-in-the-soup commit 0cfbcdcdd2b42f8167bac02d4afa621766cd8bd2 Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Sun Mar 13 10:14:08 2022 -0400 coordinating carpark code with other rates commit 2301551ed607b4c663c6fe6f47d9639309309b6a Merge: dd60c76 25ec2ed Author: kkenny000 <92530883+kkenny000@users.noreply.github.com> Date: Fri Mar 11 14:30:04 2022 -0500 Projected Proceeds updated code to combine all functions for commercial, residential and manufacturing proceeds commit dd60c7658ad4f14e5365bb62d55556c32e99a57f Author: kkenny000 <92530883+kkenny000@users.noreply.github.com> Date: Tue Mar 8 10:53:41 2022 -0500 Manufacturing Code and Coffee edits commit 25ec2ed2bc8e4b3df2dd5c96ea60e1f99ebb1d84 Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Mon Mar 7 20:41:19 2022 -0500 Other Rates Pro Forma Code commit ca6b5bc93701c22beb690cffec2b484bffe93610 Merge: 8717f74 4d4be3d Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Mon Mar 7 19:14:37 2022 -0500 Merge branch 'towers-in-the-soup' of https://github.com/Unit26Y21/DesignAnarchy into towers-in-the-soup commit 8717f74f71f0d63dd14ce582af85c674542eaf17 Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Mon Mar 7 19:13:55 2022 -0500 proforma updates commit 4d4be3da49b09de77712b5597b898717aadb656a Author: kkenny000 <92530883+kkenny000@users.noreply.github.com> Date: Mon Mar 7 14:03:34 2022 -0500 Manufacturing Py Files initial edits commit 56056be584066f59cea3d3e88da57dd4013aba3e Author: kkenny000 <92530883+kkenny000@users.noreply.github.com> Date: Mon Mar 7 11:13:26 2022 -0500 Manufacturing Constants commit 1c877017839faadb0e260ab62ead928a44cefdb8 Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Sun Feb 27 14:15:01 2022 -0500 proforma update commit c2346e3207f7083ff327fe744e3a7540d7f598bf Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Sat Feb 26 09:09:59 2022 -0500 Added conditional statements for user input commit e2d97792eb05f2005de860b4ffd29fd317580b39 Author: Kaminssj <92740287+Kaminssj@users.noreply.github.com> Date: Thu Feb 24 23:49:16 2022 -0500 creating environment for Pro Forma --- .../.idea/Towers in the Soup.iml | 10 ++ .../inspectionProfiles/profiles_settings.xml | 6 + .../Teams/Towers in the Soup/.idea/misc.xml | 4 + .../Towers in the Soup/.idea/modules.xml | 8 + Spring/Teams/Towers in the Soup/.idea/vcs.xml | 6 + .../Towers in the Soup/.idea/workspace.xml | 164 ++++++++++++++++++ .../ProForma/.idea/.gitignore | 3 + .../ProForma/.idea/ProForma.iml | 10 ++ .../inspectionProfiles/profiles_settings.xml | 6 + .../ProForma/.idea/misc.xml | 4 + .../ProForma/.idea/modules.xml | 8 + .../Towers in the Soup/ProForma/.idea/vcs.xml | 6 + .../ProForma/BuildUp_ProForma.py | 1 + .../ProForma/DevCosts_CapitalStruc.py | 159 +++++++++++++++++ .../ProForma/DevelopmentCostsInputs.py | 41 +++++ .../ProForma/Manufacturing_Constants.py | 9 + .../Towers in the Soup/ProForma/OtherRates.py | 30 ++++ .../ProForma/ProForma_ProfileInformation.py | 17 ++ .../ProForma/ProForma_ROI.py | 98 +++++++++++ .../ProForma/Proceeds_Constants.py | 31 ++++ .../ProForma/Projected_Proceeds.py | 119 +++++++++++++ .../ProForma/Starting_Assumptions.py | 21 +++ .../DevCosts_CapitalStruc.cpython-310.pyc | Bin 0 -> 3890 bytes .../DevelopmentCostsInputs.cpython-310.pyc | Bin 0 -> 1167 bytes .../Manufacturing_Constants.cpython-310.pyc | Bin 0 -> 463 bytes .../__pycache__/ProForma_ROI.cpython-310.pyc | Bin 0 -> 3540 bytes .../Proceeds_Constants.cpython-310.pyc | Bin 0 -> 950 bytes .../Starting_Assumptions.cpython-310.pyc | Bin 0 -> 649 bytes .../Teams/Towers in the Soup/ProForma/main.py | 9 + 29 files changed, 770 insertions(+) create mode 100644 Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml create mode 100644 Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 Spring/Teams/Towers in the Soup/.idea/misc.xml create mode 100644 Spring/Teams/Towers in the Soup/.idea/modules.xml create mode 100644 Spring/Teams/Towers in the Soup/.idea/vcs.xml create mode 100644 Spring/Teams/Towers in the Soup/.idea/workspace.xml create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml create mode 100644 Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml create mode 100644 Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/OtherRates.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/Proceeds_Constants.cpython-310.pyc create mode 100644 Spring/Teams/Towers in the Soup/ProForma/__pycache__/Starting_Assumptions.cpython-310.pyc create mode 100644 Spring/Teams/Towers in the Soup/ProForma/main.py diff --git a/Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml b/Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml new file mode 100644 index 0000000..74d515a --- /dev/null +++ b/Spring/Teams/Towers in the Soup/.idea/Towers in the Soup.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml b/Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/Spring/Teams/Towers in the Soup/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/.idea/misc.xml b/Spring/Teams/Towers in the Soup/.idea/misc.xml new file mode 100644 index 0000000..a662bc4 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/.idea/modules.xml b/Spring/Teams/Towers in the Soup/.idea/modules.xml new file mode 100644 index 0000000..4e6885f --- /dev/null +++ b/Spring/Teams/Towers in the Soup/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/.idea/vcs.xml b/Spring/Teams/Towers in the Soup/.idea/vcs.xml new file mode 100644 index 0000000..c2365ab --- /dev/null +++ b/Spring/Teams/Towers in the Soup/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/.idea/workspace.xml b/Spring/Teams/Towers in the Soup/.idea/workspace.xml new file mode 100644 index 0000000..0d7e2ba --- /dev/null +++ b/Spring/Teams/Towers in the Soup/.idea/workspace.xml @@ -0,0 +1,164 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1645762265428 + + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore b/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml b/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml new file mode 100644 index 0000000..74d515a --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/ProForma.iml @@ -0,0 +1,10 @@ + + + + + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..105ce2d --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml new file mode 100644 index 0000000..a4652f3 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/misc.xml @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml new file mode 100644 index 0000000..cb032cd --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/modules.xml @@ -0,0 +1,8 @@ + + + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml b/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml new file mode 100644 index 0000000..4fce1d8 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py b/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py new file mode 100644 index 0000000..1fcfaa3 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/BuildUp_ProForma.py @@ -0,0 +1 @@ +''' test ''' diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py new file mode 100644 index 0000000..92b8f69 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py @@ -0,0 +1,159 @@ +import DevelopmentCostsInputs as devCost + +#0.StartingAssumptions# + +def TotalGrossZoningFloorArea(residZFA, comZFA, manZFA): + totalGZFA = [residZFA,comZFA,manZFA] + sumGZFA = sum(totalGZFA) + #for i in totalGZFA: + print("Residential", residZFA,) + print("Commercial", comZFA) + print("Manufacturing", manZFA) + return sumGZFA + +def InacuracyFloorLoss(myTotalGZFA, InacFact): + floorLoss = myTotalGZFA * InacFact + print("Inaccuracy factor") + print(InacFact) + return floorLoss + +def TotalZoningFloorArea(myTotalGZFA, LossFact): + totalZFA = myTotalGZFA - (myTotalGZFA * LossFact) + print("Net loss factor") + print(LossFact) + return totalZFA + +myTotalGZFA = TotalGrossZoningFloorArea(residZFA= devCost.ResidentialZoningFloorArea, + comZFA= devCost.CommercialZoningFloorArea, + manZFA= devCost.ManufacturingZoningFloorArea) +print("My total gross zoning floor area") +print(myTotalGZFA) + +myFloorLoss = InacuracyFloorLoss(myTotalGZFA= myTotalGZFA, + InacFact= devCost.InacuracyFactor) +print("my total floor loss") +print(myFloorLoss) + +myTotalZFA = TotalZoningFloorArea(myTotalGZFA= myTotalGZFA, + LossFact= devCost.NetLossFactor) +print("My total zoning floor area") +print(myTotalZFA) + +#A.DevelopmentCosts# + +def LandPurchaseCost(landCost, lotArea): + totalPurchCost = landCost * lotArea + print(landCost) + print(lotArea) + return totalPurchCost + +def ResidentialCost(residZFA, residCost): + totalResidCost = residZFA * residCost + print(residCost) + return totalResidCost + +def CommercialCost(comZFA, comCost): + totalComCost = comZFA * comCost + print(comCost) + return totalComCost + +def ManufacturingCost(manZFA, manCost): + totalManCost = manZFA * manCost + print(manCost) + return totalManCost + +def HardCost(myTotalGZFA, hardCost): + totalHardCost = myTotalGZFA * hardCost + print(hardCost) + return totalHardCost + +def SoftCost(myTotalGZFA, softCost): + totalSoftCost = myTotalGZFA * softCost + print(softCost) + return totalSoftCost + +def TotalDevelopmentCost(BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost): + totalDevCost = [BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost] + sumDevCost: int = sum(totalDevCost) + print(BuildPurch) + return sumDevCost + +mytotalPurchCost = LandPurchaseCost(landCost= devCost.LandCostpsf, + lotArea= devCost.LotArea) +print("My total purchasing costs") +print(mytotalPurchCost) + +mytotalResidCost = ResidentialCost(residZFA= devCost.ResidentialZoningFloorArea, + residCost= devCost.ResidentialCostpsf) +print("My total residential Cost") +print(mytotalResidCost) + +mytotalComCost = CommercialCost(comZFA= devCost.CommercialZoningFloorArea, + comCost= devCost.CommercialCostpsf) +print("My total commercial cost") +print(mytotalComCost) + +mytotalManCost = ManufacturingCost(manZFA= devCost.ManufacturingZoningFloorArea, + manCost= devCost.ManufacturingCostpsf) +print("My total manufacturing cost") +print(mytotalManCost) + +mytotalHardCost = HardCost(myTotalGZFA= myTotalGZFA, + hardCost= devCost.HardCostpsf) +print("My total hard cost") +print(mytotalHardCost) + +mytotalSoftCost = SoftCost(myTotalGZFA= myTotalGZFA, + softCost= devCost.SoftCostpsf) +print("My total soft cost") +print(mytotalSoftCost) + +myTotalDevCost = TotalDevelopmentCost(BuildPurch= devCost.ExistingBuildingPurchase, + mytotalPurchCost= mytotalPurchCost, + mytotalResidCost= mytotalResidCost, + mytotalComCost= mytotalComCost, + mytotalManCost= mytotalManCost, + mytotalHardCost= mytotalHardCost, + mytotalSoftCost= mytotalSoftCost) +print("My total development cost") +print(myTotalDevCost) + +#B.CapitalStructure# + +def Equity(myTotalDevCost, EqPerc): + totalEq = myTotalDevCost * EqPerc + print(EqPerc) + return totalEq + +def Debt(myTotalDevCost, mytotalEq): + totalDebt = myTotalDevCost - mytotalEq + return totalDebt + +def DebtService(mytotalDebt, DebtServPerc): + totalDebtServ = mytotalDebt * DebtServPerc + print(DebtServPerc) + return totalDebtServ + +mytotalEq = Equity(myTotalDevCost= myTotalDevCost, + EqPerc= devCost.EquityPercentage) +print("My total equity") +print(mytotalEq) + +mytotalDebt = Debt(myTotalDevCost= myTotalDevCost, + mytotalEq= mytotalEq) +print("My total debt") +print(mytotalDebt) + +mytotalDebtServ = DebtService(mytotalDebt= mytotalDebt, + DebtServPerc= devCost.DebtServicePercentage) +print("My total debt servicing cost") +print(mytotalDebtServ) + +#C.ProjectedResidentialProceeds# + +#ResidentialExpenses# + +#Depreciation# + + + diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py b/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py new file mode 100644 index 0000000..440ffc2 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/DevelopmentCostsInputs.py @@ -0,0 +1,41 @@ +#0.StartingAssumptions# +DevelopmentTimeline = 11 +LotArea = 10375 +ExistingBuildingFloorArea = 132420.00 ##instead of hard coding can input from Built Area from Profile Information. whose code would that be?## +ResidentialFAR = 7.52 +CommercialFAR = 1.00 +ManufacturingFAR = 0.00 +ResidentialZoningFloorArea = 100000.00 +CommercialZoningFloorArea = 100000.00 +ManufacturingZoningFloorArea = 100000.00 +InacuracyFactor = 0.03 +NetLossFactor = 0.15 + +#A.DevelopmentCosts# +ResidentialCostpsf = 500.00 +CommercialCostpsf = 500.00 +ManufacturingCostpsf = 500.00 +HardCostpsf = 200.00 +SoftCostpsf = 200.00 +LandCostpsf = 50 +ExistingBuildingPurchase = 0 + +#B.CapitalStructure# +DebtPercentage = 0.65 +EquityPercentage = 0.35 +DebtServicePercentage = 0.0688 + +#C.ProjectedResidentialProceeds# +AverageMarketRateUnitSizepsf = 900.00 +MarketRateRentpyr = 12000.00 +ResidentialVacancyRate = 0.05 +IncomeExpenseEscalation = 0.02 + +#ResidentialExpenses# +OperationalExpensespsf = 6.50 +RealEstateTaxespsf = 2.50 +ReplacementReservepsf = 1.00 + +#Depreciation# +ResidentailDepreciationinyrs = 27.5 + diff --git a/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py b/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py new file mode 100644 index 0000000..752f422 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Manufacturing_Constants.py @@ -0,0 +1,9 @@ +#Manufacturing Constants + +marketRateRent = 12000 +manufacturingVacancyRate = .05 +manufacturingIncome = 100000 +operationalExpensesPerSqft = 3 +realEstateTaxesPerSqft = 1 +replacementReservesPerSqft = .50 +manufacturingDepreciationInYears = 39 \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py b/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py new file mode 100644 index 0000000..0255598 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/OtherRates.py @@ -0,0 +1,30 @@ +"""Attributes""" + +'''Import from Legacies py file''' +import DevCosts_CapitalStruc +DC = DevCosts_CapitalStruc + +annualIncreaseInExpenses = .02 +annualPublicSubsidiesIncrease = .02 +capRateAtSale = .06 +salesExpense = .05 +ordinaryIncomeTax = .35 +depreciationRecapture = .25 +capitalGainsTax = .2 +discountRate = 0 +interestRate = .05 + + +loanAmount = DC.myTotalDevCost #TODO: import from Car legacies -> DC.totalDevelopmentCost? + +debtService = DC.mytotalDebtServ #TODO: import from Car legacies -> CS.debtService? + +def constantLoanRate(loanAmount, debtService): + return debtService / loanAmount +constantRate = constantLoanRate(loanAmount, debtService) +print(constantRate) + + +'''print(constantLoanRate())''' +print(loanAmount) +print(debtService) \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py new file mode 100644 index 0000000..c9be1bc --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ProfileInformation.py @@ -0,0 +1,17 @@ +ProfileInformation = { + Date= + Team= + Portfolio= + Lot Area= + Lot Depth= + Land Use= + Easements= + BBL= + BIN= + Zoning District= + BuiltFAR= + ExistingBuildings= + YearBuilt= + BuiltArea= + BuildingUse= +} \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py new file mode 100644 index 0000000..1a0f7b9 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/ProForma_ROI.py @@ -0,0 +1,98 @@ +# Global Constants +constructionCostPerSqFt = 362 +studioSqFt = 400 +oneBedroomSqFt = 575 +twoBedroomSqFt = 775 +threeBedroomSqFt = 950 +numberStudios = 20 +numberOneBedrooms = 20 +numberTwoBedrooms = 40 +numberThreeBedrooms = 20 +affordableRentPerSqft = 1 +marketRentPerSqft = 3 +i = .03 +n = 1 + +def userInput(): + userInput = input("What percentage of housing would you like to be affordable? ") + try: + userInputNumber = int(userInput) + if 0 < userInputNumber < 101: + return tidsProforma(userInputNumber) + elif userInputNumber > 100: + print("You can't have more than 100% of anything. Who taught you math?") + elif userInputNumber == 0: + print("Why did you enter zero? Do you hate poor people?") + elif userInputNumber < 0: + print("You entered a negative number. That's not possible.") + except ValueError: + print("You didn't put and integer... Stop Trying to break my program!") + +def tidsProforma(userInputNumberAffordable): + print("Towers In The Soup") + print("Pro Forma") + + percentAffordable = userInputNumberAffordable + percentMarketRate = 100 - percentAffordable + + development_totalSqFt = totalSqft() + affordable_totalSqFt = totalAffordableSqft(development_totalSqFt, percentAffordable) + market_totalSqFt = totalMarketSqft(development_totalSqFt, percentMarketRate) + construction_expenses = totalConstructionExpense(development_totalSqFt, constructionCostPerSqFt) + affordable_rent = affordableRent(affordable_totalSqFt, affordableRentPerSqft) + market_rent = marketRent(market_totalSqFt, marketRentPerSqft) + total_rent_income = totalRentalIncome(affordable_rent, market_rent) + payment_output = annualFinancingPayment(construction_expenses, i, n) + profitability_output = profitability(total_rent_income, payment_output) + + print("######"*10) + print("Amount of percent affordable: " + str(percentAffordable) + "%") + print("Amount of market rate: {0}%".format(percentMarketRate)) + print("Amount of affordable -> {0}% | Amount of market rate -> {1}%".format(percentAffordable, percentMarketRate)) + print(development_totalSqFt) + print("######" * 10) + print("The profitability output of your development is: {0}".format(profitability_output)) + print("annual payments are: {0}" .format(payment_output)) + print(total_rent_income * 12) + +def totalSqft(): + #Python Collection + #{} or [] or () + return (studioSqFt * numberStudios) + (oneBedroomSqFt * numberOneBedrooms) + (twoBedroomSqFt * numberTwoBedrooms) + (threeBedroomSqFt * numberThreeBedrooms) + + +def numberOfUnits(): + return numberStudios + numberOneBedrooms + numberTwoBedrooms + numberThreeBedrooms + + +def totalAffordableSqft(total_sqft,percentAffordable): + return total_sqft * percentAffordable/100 + + +def totalMarketSqft(total_sqft,percentMarketRate): + return total_sqft * percentMarketRate/100 + + +def totalConstructionExpense(total_sqft, constructionCostPerSqFt): + return total_sqft * constructionCostPerSqFt + + +def annualFinancingPayment(construction_expenses, i, n): + return construction_expenses/(1 + pow((1 + i), -n) / i) + #annual financing payment for loan + principle + + +def affordableRent(affordable_sqft, affordableRentPerSqft): + return affordable_sqft * affordableRentPerSqft + + +def marketRent(market_sqft, marketRentPerSqft): + return market_sqft * marketRentPerSqft + + +def totalRentalIncome(affordable_rent, market_rent): + return affordable_rent + market_rent + + +def profitability(total_rental_income, payment_output): + return (total_rental_income * 12) - payment_output \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py b/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py new file mode 100644 index 0000000..66a6486 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Proceeds_Constants.py @@ -0,0 +1,31 @@ +#Proceeds_Constants + +'''Residential Constants''' +res_avgMarketRateUnitSize = 900 +res_marketRateRent = 12000 +res_vacancyRate = .05 +res_approxunits = 94 +res_incomeExpenseEscalation = .02 +res_operationalExpenses = 6.50 +res_realEstateTaxes = 2.50 +res_replacementReserve = 1.00 +res_depreciation = -1545455 + +'''Commercial Constants''' +com_marketRateRent = 12000 +com_vacancyRate = .10 +com_operationalExpenses = 6.50 +com_realEstateTaxes = 2.50 +com_replacementReserve = 1.00 +com_depreciation = -1089744 + +'''Manufacturing Constants''' + +manu_marketRateRent = 12000 +manu_vacancyRate = .05 +manu_income = 100000 +manu_operationalExpenses = 3 +manu_realEstateTaxes = 1 +manu_replacementReserves = .50 +manu_Depreciation = 39 + diff --git a/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py b/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py new file mode 100644 index 0000000..093c937 --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Projected_Proceeds.py @@ -0,0 +1,119 @@ + +import Starting_Assumptions as SA +import Proceeds_Constants as PC + + +def common_area_and_circulation (zoningFloorArea, netLossFactor): + return zoningFloorArea * netLossFactor + +resCommonAreaCirculation = common_area_and_circulation(SA.residentialZoningFloorArea, SA.netLossFactor) +comCommonAreaCirculation = common_area_and_circulation(SA.commercialZoningFloorArea, SA.netLossFactor) +manuCommonAreaCirculation = common_area_and_circulation(SA.manufacturingZoningFloorArea, SA.netLossFactor) + +print(resCommonAreaCirculation) +print(comCommonAreaCirculation) +print(manuCommonAreaCirculation) + + +def net_area (zoningFloorArea, common_area_and_circulation): + return zoningFloorArea - common_area_and_circulation + +resNetArea = net_area(SA.residentialZoningFloorArea, resCommonAreaCirculation) +comNetArea = net_area(SA.residentialZoningFloorArea, comCommonAreaCirculation) +manuNetArea = net_area(SA.residentialZoningFloorArea, manuCommonAreaCirculation) + +print(resNetArea) +print(comNetArea) +print(manuNetArea) + + +def approximate_units (resNetArea, avgmarketRateUnitSize): + return resNetArea / avgmarketRateUnitSize + +print(approximate_units) + + +def total_income (approxUnits, marketRateRent): + return approxUnits * marketRateRent + +resTotalIncome = total_income(PC.res_approxunits, PC.res_marketRateRent) +comTotalIncome = total_income(comNetArea, PC.com_marketRateRent) + +manuTotalIncome = SA.manufacturingZoningFloorArea + + +print(resTotalIncome) +print(comTotalIncome) +print(manuTotalIncome) + + +def total_vacancy (vacancyRate, total_income): + return vacancyRate * total_income + +resTotalVacancy = total_vacancy(PC.res_vacancyRate, resTotalIncome) +comTotalVacancy = total_vacancy(PC.com_vacancyRate, comTotalIncome) +manuTotalVacancy = total_vacancy(PC.manu_vacancyRate, manuTotalIncome) + +print(resTotalVacancy) +print(comTotalVacancy) +print(manuTotalVacancy) + + +def operational_expenses (operationalExpenses, net_area): + return operationalExpenses * net_area + +resOperationalExpenses = operational_expenses(PC.res_operationalExpenses, resNetArea) +comOperationalExpenses = operational_expenses(PC.com_operationalExpenses, comNetArea) +manuOperationalExpenses = operational_expenses(PC.manu_operationalExpenses, manuNetArea) + +print(resOperationalExpenses) +print(comOperationalExpenses) +print(manuOperationalExpenses) + + +def real_estate_taxes (realestateTaxes, net_area): + return realestateTaxes * net_area + +resRealEstateTaxes = real_estate_taxes(PC.res_realEstateTaxes, resNetArea) +comRealEstateTaxes = real_estate_taxes(PC.com_realEstateTaxes, comNetArea) +manuRealEstateTaxes = real_estate_taxes(PC.manu_realEstateTaxes, manuNetArea) + +print(resRealEstateTaxes) +print(comRealEstateTaxes) +print(manuRealEstateTaxes) + + +def replacement_reserve (zoningFloorArea, replacementReserve): + return zoningFloorArea * replacementReserve + +resReplacementReserve = replacement_reserve(SA.residentialZoningFloorArea, PC.res_replacementReserve) +comReplacementReserve = replacement_reserve(SA.commercialZoningFloorArea, PC.com_replacementReserve) +manuReplacementReserve = replacement_reserve(SA.manufacturingZoningFloorArea, PC.manu_replacementReserves) + +print(resReplacementReserve) +print(comReplacementReserve) +print(manuReplacementReserve) + + +def total_cost (net_area, devCost): + return (net_area * devCost) + +resTotalCost = replacement_reserve(resNetArea, SA.resDevCost) +comTotalCost = replacement_reserve(comNetArea, SA.comDevCost) +manuTotalCost = replacement_reserve(manuNetArea, SA.ManuDevCost) + +print (resTotalCost) +print(comTotalCost) +print(manuTotalCost) + + +def depreciation (total_cost, depreciation): + return (-1 * (total_cost / depreciation)) + +resDepreciation = replacement_reserve(resTotalCost, PC.res_depreciation) +comDepreciation = replacement_reserve(comTotalCost, PC.com_depreciation) +manuDepreciation = replacement_reserve(manuTotalCost, PC.manu_Depreciation) + +print(resDepreciation) +print(comDepreciation) +print(manuDepreciation) \ No newline at end of file diff --git a/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py b/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py new file mode 100644 index 0000000..ec61c7e --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/Starting_Assumptions.py @@ -0,0 +1,21 @@ +#Starting Assumptions Constants + +devTimeline = 11 +lotArea = 10375 +existingBuildingFloorArea = 0 +residentialFAR = 7.52 +commercialFAR = 1.00 +manufacturingFAR = 1.00 +residentialZoningFloorArea = 100000 +commercialZoningFloorArea = 100000 +manufacturingZoningFloorArea = 100000 +airRightsSqft = 0 +innacuracyFactor = .03 +inaccuracyFloorLoss = 9000 +netLossFactor = .15 + + +#Development Costs +resDevCost = 500 +comDevCost = 500 +ManuDevCost = 500 diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevCosts_CapitalStruc.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..210177a8f91bb067b855cfb43e8cc9f025fb4013 GIT binary patch literal 3890 zcmbVOTW=Fb6y9As-nAXaxk2t^0|a93P})irLQO*gs1TtheHmG*7S9k|*e^bE&JN1KJ&&y+waWIt}jWdQd>J`cE2-o&YbJ`rBcDb@8Qm^m%mRN#vk<3 z|I6d$YdpcYWfDczco!m zNiX4iOYnFeN7*VMC2*P>ZBi=DIEtoWS>>RhzKy4PTZ z4ZqnGvPSdLbFbBT<<-KDthe@#ttb<8n$bubZ((I5awM%|TkBD-<~J2>dM!|v5B<<< zJf^9QB{VrUqyrs4wl}`2ejf-KRD-a-FIv?{ey!7l@Sys*9zN;3tUki7d#&}BCu^?{ zsyifYuevL|W>DSrf5J+)-g3j&!rk#Z?dl8ZZ~3z6VcGtMAB4dV8(zB(={uq9)NZv8 zqPbnAjP!$m`7La=)$o0}E`>)H3`Q{&Ovfx(1+!pgO-XrLLlUMxGBUj@LoZ@NhMqQ# ztPsv27s1?$b}bmx+CH3k+VX0(j`V5=E}74l$EM6;VI>n4n+LHzWG{ypx4^;juSlt9 z&{3Hw9;hZnlfV37ym6aDhT+rSxG(}q_x^dWX&kA zGLrVz%BajfO__3E&J%tQ%Ri7abU@8wdZtG5JkSB@v@)_$1(fVjWe60K(oQkOnWYMctMJ*j-pO6sIf^y{$4odj4< z#V!9Iae@CTRHux^?daDN;u2sh6}Lj-$WqCVN(#NJT6P5!3aqZx&2+Qfk#26!KC)5G zY%~uiq}G81=sG*v*_0=hd{p?RQ*XqP9E~>*2BSXxl7?P1rg?Ngr0?2WQCZ`OwbBpC zc~~4!y27&pT8f?zn;@=007b)ZQ&%CgeG9c!1)5AMP=yX+$te&?*>yOVR*N>JuNRFVgx;G+d@(l?HOSyh_6whQ3qtp2gJq|DK2B&0T7++9OeJ z^UVv~ADFG;V)MgJ;T9?U`bf`WE%qxa?3rL1VfG66JOHY`)R= zjz{9&QYvLVb z#;3lE8Nz{1Ag^OMET>);%0LNtlfY66atH==o7UYSXmJ2?akbj7*OKt9++gR2vLSfd zYInkb+3-0BWYX za05y18NOr%9b0tQpdKlyEvZH!scuWErjlx$q>N@o>acXCcJPYX&*HYMa)3?tol0}4 zykHZ(BPHJ{RoL{vc@l^ch!vAU1u-g{STU(o^o3H3&2Ii&#|5{wr)ni=()eSKtJY5e zC@Buuc$^ayOsFZ|o{;2qa N$*x)O3~DfH{sYkvjVAyA literal 0 HcmV?d00001 diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/DevelopmentCostsInputs.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..a0bdbb38afae78e4c970b54f104dd5be97254cea GIT binary patch literal 1167 zcmZuxJ8Tm{5Itk(A185Q=SPSvDngM0x`41voS&40U?&u#Yc{u=%ffm0vbz`JP(Xud zC}}{5J`ECGdI}n7DO`a_6VXs1goMQ0aZa3wv1V`Q&AvB#b0f=iy4ylKYM)LXfI@F8U|?}4AFkb(gDcP3=Gpj7@Ik-d-46dyNPym)*K z1&>2j_tVGFjtcHpWS|BP;ehb7kSYvKi-s1#hWKL zimOwXV5rP?nJ4`k6K0*)n8yWcbSz6#QjEaZ+#c743-@-wJ&MnHPf8V~`YKFwiY!jN z`BDYav$9rW%8A2)6(WKy;+Q~%v{I!p-a-H=TE!Y;r{wdgi8Dgyv;9kgIDsNgeI9E` z)kv>0vn;ia!@-uKvr-#hZ#6Qf#hOs|Opzwqvq%&@3953-oCM26oMcANH)$zJhqFIx0ugrYK@Y{!iT-235u+$I^Z?yd0nVqpWkf&`N zrd=lNvUGw_P1_6HEC!o)8HdRgB|)%rb-U_^Lu0QqQq%Uje2C0E7kRVI@>Lo5_L`FO xQq>63PKG!9GE{0ku1be#YI literal 0 HcmV?d00001 diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Manufacturing_Constants.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..20883a59945d5c5634b8d4aec34ae75be13866cb GIT binary patch literal 463 zcmY*V%}xR_5bp9H6S$Zd!)Z?%EkFAKCFi#<{+h3h&Y!N+@wWh4B0^T;NPotsoAKtrq>n^O!Awc@H0aWeteN=96`#Dpq%;({x&NLhNg$F!Bu5zwlR!EhI9#i!Tv7?cIu0n?j}96d6CMeDG+ z&*$5E)j&Mu0wSE(1qQv* zNK#eHZbNsM3|R|o7^o}7jTkRjFHU!2ec+L0ef^4!eyDsm2EV71n01W4(I(>Te)k5? eO|5VVRISI0Rp~s^GMU0fdQMwGm-Du-XCf_ literal 0 HcmV?d00001 diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/ProForma_ROI.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8b0bcb178f34ca15b94dfe95d9f76220464a9135 GIT binary patch literal 3540 zcmbtW&2t+`74MnR$LPafu^c;blI`7Kf`By+S)d56ctf&bQ-Bj92Uk?0Tx0cE8Z1p~ zds=Ix9iI$$j+`hs?ms~7-!fNDhGTAfS$?laUpDc9Vy61_d#}6SSHIWYa&E53@IBbR zefY&ZWB(*#_On5Jj28U`K(IO!R^1YI-4;&W5t({MWb0Y9oXFMl=v|So7ld0cibA~v zyex{M^hZ{o6J;@neqPLr1@sGIQ7oZf6xYNu`Xx~jE9kF@>tYrCvRD&0&{xDwv5tO4 z+!D9ZUl(`8d+1jM7w@BA6Cc!A^=|Nci?QI(1a@F@kaqz70dQV{-RIvSfI)T+7HfTV z=THCs%~yZjX@Z!1;p>@o%7#DHR?L9G@7T&PhaEGuEF8d_p>44+tHD3B z_F0X^mdG4u)P{CM_RO-_K4NCL_OY$Dz|CFaGW9cX^HXlRBExiM@Jox)k8zjA-xygZ ztXkL|Ztu4}&3nFT`l0q(K9@(lE&EXrw)lzccLX2EKJNs_KG%{T`rJD@l1g}o9e;

1E>!B-9uk( z@;xlM7x7TSNf|`}?A{zcqD4?chW7dzRtX+JTMH{TH+fCV9^X>~iUB#TeD9cd2fU|b zOL^V*tJx$Qgjkq3Se2A@AflH_A}(Do$@Ua6i@)_ceg6}sq^jCUp&$9`IW4I#Owe6p z;+IUJT-evGCl4F1F)M0Bag&{NI!piv_|t;U}3 zb)&|fJi$u%fN1-?Ci}ex40=WeO^}0EFP?Aq25Ju47SW__$vd+qM6+O7mzf!ky}jIlv^=Fb~~}P#!hW*ov~8~ISu;EKFw$cm<=qe zGqIzyz;ZelXLKG|Ub}Ht7l66C80TXbSV5QKoG$CRGv~CZ=i@?L1h)iT8PbJ5s~4zZ zR+-4HqOuGx|F^~1{yVsaazR<3jdhyE&WJyjP{4R;GP?+>IHux)C{>J9s=aD?cX(|S z=;t94D-HCpfJk!_YL!PohTC`lk8gPAaaZ<3O|>#A%9)CL$iKEWhU?QQT~8hRnk$sW zL;l6q>Bew-IykLV{^27t%40qqo>^2x%dQA7$plc%M}Hy zG+IeSJ&nNu;Rit)gZa_^9;7KzuUznY#5IRm3Kp>IiXH{;p+(;ZaB;$9Y}d-!MVvU} zzf7l(UBUUYh;cfH2s0}$+^Z0PD|2-Aa3Gp#tHQLcoeEpUJ*Ts#&*?n%HTI>oTXmCS zr28U}CO_uVYoTU1Q8F(>|L49?Qg+SoQab!%!o?JQBHuA(Z^Dg|Mcr2Z1v$&9oV^)- zG!qy)@0E$pHDC|XB6>4$M-lyBKGT>vZ|T$~pW&;G=8%tyUL@6w`Yt*}F;<%dwg?zK zQ$QM%Q3PHby$%B%eGHb-jd{H_ZhyYPn zN_|U@vebuB+%8DJP694QORa$SD>P%ZYZDJS$%p7^<3^2uLYQ&_p$vd%Eakslt^gI3|dc8$dPZ{f~-?iNZciqjonbDu6zMT0F__{W2 literal 0 HcmV?d00001 diff --git a/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Proceeds_Constants.cpython-310.pyc b/Spring/Teams/Towers in the Soup/ProForma/__pycache__/Proceeds_Constants.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..70790fc9f889f100003252196cca9b84a45d1de9 GIT binary patch literal 950 zcmZuvJ#Q015Z$w#*iPd3D_=n44n>h7M2Qd%ibH5X$WAC$Cr+E&k+ZUI_q2N#?9d{9 z0S#1X)6nx*t_slL3Tm1#dp41=GpAeadv9jn+}x^CX^CLGzSueWo+0Fi1=Ham*u&Rw zTsWbGJJjJBn&DZR>|LpyEob7{%w9YMYZ?ydQ$eaDIR#guEoU%hm7z@GP2(|skv&7 z?jw4+y_w`ak1OBv=p7BlV`tqLO!pvavj~o*h&tjNlA4u*8@`P_CuPf>F`r3)Xp_eT z3q!32F%}wn&t?ees{jrLAxHxU#%FyN2_=(FE2ZT=bHMhc?`IwwHxBRp@tp`lTv+k9Y zoU*6ODKnl-vXz3{npsPg*>1-98fM!uNj1%HO-!s>GG$)|HwVYu^G4511a5> z@?$$o;~t9Wd3@rw@H%$oQ^~Y{I&?ds7P9Le0SkAmS6!)dqCcSVa5?zW=6^W%45(^tbq(`H)10cwS#j=FlvwN|6wu3(kVW<5s zP*;}D9oUfgBW^=X6$=9s6VD-tP>E;#p5M2hpRLn0K|mkR?i_rM5c(RFMFJbz0oXn; zhA?6gj#vXX*b-i1F^&PtY#FZrnt&GgR@n+pSQEEd3twZaI0dW$uCpXZ+wIFXloF>~ z2wj4J%JuWTFK^d3cgmn4^t~s}P9juZY`**U{NjC2Y~6;Sdo%jf6F;D%r`sJU&W}ez z@=7RzfM+SgXZi^~T@itFBxB6uRQYDHUcY%CWQgt3!u7LMd8!LyPGE&ejIs5MY>F zLhp~YwRNhv3&QW1I)Tpm{CHPeS0~WPAG!Sm?l4zAAQN78#(t{Z`{ae?#*(8Wt`zC( z!b=#1C40i{`vcO4*_0|%)D+_>$tPh3WW=eoWTan1VppiH8}n|i{e(O-dZ3M@BzM$= nX}`>@^>X5bR`%{>TDKlZ&3wflhVNs$z~V+6{b$8-)QWxqS?$T) literal 0 HcmV?d00001 diff --git a/Spring/Teams/Towers in the Soup/ProForma/main.py b/Spring/Teams/Towers in the Soup/ProForma/main.py new file mode 100644 index 0000000..25dac2b --- /dev/null +++ b/Spring/Teams/Towers in the Soup/ProForma/main.py @@ -0,0 +1,9 @@ +import Projected_Proceeds +import Proceeds_Constants +import Starting_Assumptions +import DevelopmentCostsInputs +import DevelopmentCostsInputs + +if __name__ == "__main__": + + From 4d3902b1e397ed09b214de1f2be516b56a5ae879 Mon Sep 17 00:00:00 2001 From: RebeccaHager Date: Sun, 13 Mar 2022 16:54:46 -0400 Subject: [PATCH 2/7] TestUpload tested pushing --- .../Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py | 1 + 1 file changed, 1 insertion(+) diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py index 92b8f69..9329bdb 100644 --- a/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py +++ b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py @@ -1,4 +1,5 @@ import DevelopmentCostsInputs as devCost +##push attempt## #0.StartingAssumptions# From e86eea1658c6044b7991ca0d5cbb791fd730a16d Mon Sep 17 00:00:00 2001 From: RebeccaHager Date: Sun, 13 Mar 2022 20:56:18 -0400 Subject: [PATCH 3/7] Redid Labels Updated what the components are named --- .../ProForma/DevCosts_CapitalStruc.py | 52 ++++++++++++------- 1 file changed, 32 insertions(+), 20 deletions(-) diff --git a/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py index 9329bdb..c7410f6 100644 --- a/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py +++ b/Spring/Teams/Towers in the Soup/ProForma/DevCosts_CapitalStruc.py @@ -1,112 +1,122 @@ import DevelopmentCostsInputs as devCost -##push attempt## #0.StartingAssumptions# def TotalGrossZoningFloorArea(residZFA, comZFA, manZFA): totalGZFA = [residZFA,comZFA,manZFA] sumGZFA = sum(totalGZFA) - #for i in totalGZFA: - print("Residential", residZFA,) - print("Commercial", comZFA) - print("Manufacturing", manZFA) +##for i in totalGZFA- how would we be able to it that way but print what each one is only one time## + print("ResidentialZoningFloorArea") + print(residZFA) + print("CommercialZoningFloorArea") + print(comZFA) + print("ManufacturingZoningFloorArea") + print(manZFA) return sumGZFA def InacuracyFloorLoss(myTotalGZFA, InacFact): floorLoss = myTotalGZFA * InacFact - print("Inaccuracy factor") + print("InaccuracyFactor") print(InacFact) return floorLoss def TotalZoningFloorArea(myTotalGZFA, LossFact): totalZFA = myTotalGZFA - (myTotalGZFA * LossFact) - print("Net loss factor") + print("NetLossFactor") print(LossFact) return totalZFA myTotalGZFA = TotalGrossZoningFloorArea(residZFA= devCost.ResidentialZoningFloorArea, comZFA= devCost.CommercialZoningFloorArea, manZFA= devCost.ManufacturingZoningFloorArea) -print("My total gross zoning floor area") +print("InitialTotalGrossZoningFloorArea") print(myTotalGZFA) myFloorLoss = InacuracyFloorLoss(myTotalGZFA= myTotalGZFA, InacFact= devCost.InacuracyFactor) -print("my total floor loss") +print("Inacuracy+/-FloorLoss") print(myFloorLoss) myTotalZFA = TotalZoningFloorArea(myTotalGZFA= myTotalGZFA, LossFact= devCost.NetLossFactor) -print("My total zoning floor area") +print("FinalTotalZoningFloorArea") print(myTotalZFA) #A.DevelopmentCosts# def LandPurchaseCost(landCost, lotArea): totalPurchCost = landCost * lotArea + print("LandCost") print(landCost) + print("LotArea") print(lotArea) return totalPurchCost def ResidentialCost(residZFA, residCost): totalResidCost = residZFA * residCost + print("ResidentialCostpsf") print(residCost) return totalResidCost def CommercialCost(comZFA, comCost): totalComCost = comZFA * comCost + print("CommercialCostpsf") print(comCost) return totalComCost def ManufacturingCost(manZFA, manCost): totalManCost = manZFA * manCost + print("ManufacturingCostpsf") print(manCost) return totalManCost def HardCost(myTotalGZFA, hardCost): totalHardCost = myTotalGZFA * hardCost + print("HardCostpsf") print(hardCost) return totalHardCost def SoftCost(myTotalGZFA, softCost): totalSoftCost = myTotalGZFA * softCost + print("SoftCostpsf") print(softCost) return totalSoftCost def TotalDevelopmentCost(BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost): totalDevCost = [BuildPurch, mytotalPurchCost, mytotalResidCost, mytotalComCost, mytotalManCost, mytotalHardCost, mytotalSoftCost] sumDevCost: int = sum(totalDevCost) + print("ExistingBuildingPurchase") print(BuildPurch) return sumDevCost mytotalPurchCost = LandPurchaseCost(landCost= devCost.LandCostpsf, lotArea= devCost.LotArea) -print("My total purchasing costs") +print("TotalLandPurchaseCost") print(mytotalPurchCost) mytotalResidCost = ResidentialCost(residZFA= devCost.ResidentialZoningFloorArea, residCost= devCost.ResidentialCostpsf) -print("My total residential Cost") +print("TotalResidentialCost") print(mytotalResidCost) mytotalComCost = CommercialCost(comZFA= devCost.CommercialZoningFloorArea, comCost= devCost.CommercialCostpsf) -print("My total commercial cost") +print("TotalCommercialCost") print(mytotalComCost) mytotalManCost = ManufacturingCost(manZFA= devCost.ManufacturingZoningFloorArea, manCost= devCost.ManufacturingCostpsf) -print("My total manufacturing cost") +print("TotalManufacturingCost") print(mytotalManCost) mytotalHardCost = HardCost(myTotalGZFA= myTotalGZFA, hardCost= devCost.HardCostpsf) -print("My total hard cost") +print("TotalHardCost") print(mytotalHardCost) mytotalSoftCost = SoftCost(myTotalGZFA= myTotalGZFA, softCost= devCost.SoftCostpsf) -print("My total soft cost") +print("TotalSoftCost") print(mytotalSoftCost) myTotalDevCost = TotalDevelopmentCost(BuildPurch= devCost.ExistingBuildingPurchase, @@ -116,13 +126,14 @@ def TotalDevelopmentCost(BuildPurch, mytotalPurchCost, mytotalResidCost, mytotal mytotalManCost= mytotalManCost, mytotalHardCost= mytotalHardCost, mytotalSoftCost= mytotalSoftCost) -print("My total development cost") +print("TotalDevelopmentCost") print(myTotalDevCost) #B.CapitalStructure# def Equity(myTotalDevCost, EqPerc): totalEq = myTotalDevCost * EqPerc + print("EquityPercentage") print(EqPerc) return totalEq @@ -132,22 +143,23 @@ def Debt(myTotalDevCost, mytotalEq): def DebtService(mytotalDebt, DebtServPerc): totalDebtServ = mytotalDebt * DebtServPerc + print("DebtServicePercentage") print(DebtServPerc) return totalDebtServ mytotalEq = Equity(myTotalDevCost= myTotalDevCost, EqPerc= devCost.EquityPercentage) -print("My total equity") +print("TotalEquity") print(mytotalEq) mytotalDebt = Debt(myTotalDevCost= myTotalDevCost, mytotalEq= mytotalEq) -print("My total debt") +print("TotalDebt") print(mytotalDebt) mytotalDebtServ = DebtService(mytotalDebt= mytotalDebt, DebtServPerc= devCost.DebtServicePercentage) -print("My total debt servicing cost") +print("TotalDebtServicingCost") print(mytotalDebtServ) #C.ProjectedResidentialProceeds# From 3819e652be13e9e9db244487258064218348ae8e Mon Sep 17 00:00:00 2001 From: RebeccaHager Date: Thu, 14 Apr 2022 12:31:35 -0400 Subject: [PATCH 4/7] Create workspace.xml I didnt want to lose this but I dont know what it is --- Spring/.idea/workspace.xml | 70 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 Spring/.idea/workspace.xml diff --git a/Spring/.idea/workspace.xml b/Spring/.idea/workspace.xml new file mode 100644 index 0000000..15a2c32 --- /dev/null +++ b/Spring/.idea/workspace.xml @@ -0,0 +1,70 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1647358095293 + + + + \ No newline at end of file From 20a598481e93d132a04fb1d17cf642efd5059888 Mon Sep 17 00:00:00 2001 From: RebeccaHager Date: Tue, 10 May 2022 12:51:57 -0400 Subject: [PATCH 5/7] test to push to the right branch --- Spring/.idea/vcs.xml | 6 + Spring/.idea/workspace.xml | 47 +-- .../PyCharm/ProForma/OpenSpaceProforma.py | 322 ++++++++++++++++++ 3 files changed, 343 insertions(+), 32 deletions(-) create mode 100644 Spring/.idea/vcs.xml create mode 100644 Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py diff --git a/Spring/.idea/vcs.xml b/Spring/.idea/vcs.xml new file mode 100644 index 0000000..6c0b863 --- /dev/null +++ b/Spring/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/Spring/.idea/workspace.xml b/Spring/.idea/workspace.xml index 15a2c32..e34a77b 100644 --- a/Spring/.idea/workspace.xml +++ b/Spring/.idea/workspace.xml @@ -1,9 +1,9 @@ - - - + + + - - - - - - - - - - - + 1647358095293 + + + \ No newline at end of file diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py new file mode 100644 index 0000000..84de637 --- /dev/null +++ b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py @@ -0,0 +1,322 @@ +import proforma.ProFormaForm as ProFormaForm +from statistics import mean + +myAMI_1P1 = {'Affordable 1': ['Studio', 0.04, 400, 1150], + 'Affordable 2': ['1-Bed', 0.14, 600, 1250], + 'Affordable 3': ['2-Bed', 0.12, 800, 1500], + 'Market 1': ['Studio', 0.10, 400, 3200], + 'Market 2': ['1-Bed', 0.32, 600, 4000], + 'Market 3': ['2-Bed', 0.28, 800, 5700], + } + +myProFormaP1 = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 7, + start_year = 2025, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 400700, + commercial_gross_sqft= 76944, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P1) + +myAMI_1P1rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], + 'Affordable 2': ['1-Bed', 0.14, 600, 1250], + 'Affordable 3': ['2-Bed', 0.12, 800, 1500], + 'Market 1': ['Studio', 0.10, 400, 3200], + 'Market 2': ['1-Bed', 0.32, 600, 4000], + 'Market 3': ['2-Bed', 0.28, 800, 5700], + } + +myProFormaP1rep = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 7, + start_year = 2025, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 400700, + commercial_gross_sqft= 76944, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P1rep) + +myAMI_1P2 = {'Affordable 1': ['Studio', 0.06, 400, 1150], + 'Affordable 2': ['1-Bed', 0.18, 600, 1250], + 'Affordable 3': ['2-Bed', 0.16, 800, 1500], + 'Market 1': ['Studio', 0.08, 400, 3200], + 'Market 2': ['1-Bed', 0.28, 600, 4000], + 'Market 3': ['2-Bed', 0.24, 800, 5700], + } + +myProFormaP2 = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 3, + start_year = 2034, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 188000, + commercial_gross_sqft= 49210, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P2) + +myAMI_1P2rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], + 'Affordable 2': ['1-Bed', 0.14, 600, 1250], + 'Affordable 3': ['2-Bed', 0.12, 800, 1500], + 'Market 1': ['Studio', 0.10, 400, 3200], + 'Market 2': ['1-Bed', 0.32, 600, 4000], + 'Market 3': ['2-Bed', 0.28, 800, 5700], + } + +myProFormaP2rep = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 7, + start_year = 2025, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 400700, + commercial_gross_sqft= 76944, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P2rep) + +myAMI_1P3 = {'Affordable 1': ['Studio', 0.08, 400, 1150], + 'Affordable 2': ['1-Bed', 0.28, 600, 1250], + 'Affordable 3': ['2-Bed', 0.24, 800, 1500], + 'Market 1': ['Studio', 0.06, 400, 3200], + 'Market 2': ['1-Bed', 0.18, 600, 4000], + 'Market 3': ['2-Bed', 0.16, 800, 5700], + } + +myProFormaP3 = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 7, + start_year = 2025, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 400700, + commercial_gross_sqft= 76944, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P3) + +myAMI_1P3rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], + 'Affordable 2': ['1-Bed', 0.14, 600, 1250], + 'Affordable 3': ['2-Bed', 0.12, 800, 1500], + 'Market 1': ['Studio', 0.10, 400, 3200], + 'Market 2': ['1-Bed', 0.32, 600, 4000], + 'Market 3': ['2-Bed', 0.28, 800, 5700], + } + +myProFormaP3rep = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 7, + start_year = 2025, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 400700, + commercial_gross_sqft= 76944, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P3rep) + +myAMI_1P4 = {'Affordable 1': ['Studio', 0.10, 400, 1150], + 'Affordable 2': ['1-Bed', 0.32, 600, 1250], + 'Affordable 3': ['2-Bed', 0.28, 800, 1500], + 'Market 1': ['Studio', 0.04, 400, 3200], + 'Market 2': ['1-Bed', 0.14, 600, 4000], + 'Market 3': ['2-Bed', 0.12, 800, 5700], + } + +myProFormaP4 = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 7, + start_year = 2025, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 400700, + commercial_gross_sqft= 76944, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P4) + +myAMI_1P4rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], + 'Affordable 2': ['1-Bed', 0.14, 600, 1250], + 'Affordable 3': ['2-Bed', 0.12, 800, 1500], + 'Market 1': ['Studio', 0.10, 400, 3200], + 'Market 2': ['1-Bed', 0.32, 600, 4000], + 'Market 3': ['2-Bed', 0.28, 800, 5700], + } + +myProFormaP4rep = ProFormaForm.ProForma(verbose= False, + exportToExcel= False, + yrs = 7, + start_year = 2025, + lot_area= 839831, + equity = 0.70, + net_loss_factor= 0.15, + landscape_gross_sqft= 0, + existingBuildingFloorArea=0, + existingBuildingPurchase=0, + residential_gross_sqft= 400700, + commercial_gross_sqft= 76944, + manufacturing_gross_sqft=0, + community_gross_sqft= 8100, + avgUnitSize_residential= 600, + avgUnitSize_commercial= 2000, + avgUnitSize_manufacturing=0, + avgUnitSize_community= 1500, + residential_cost= 375, + residential_rent= 2800, + commercial_cost= 275, + commercial_rent= 120000, + manufacturing_cost=0, + manufacturing_rent=0, + community_cost= 275, + community_rent= 60000, + hard_cost=250, + soft_cost=107, + land_cost=1, + landscape_cost=0, + residential_AMI=myAMI_1P4rep) \ No newline at end of file From fe7ed913f81857262b85aca00a1bfe4b58bc2eaa Mon Sep 17 00:00:00 2001 From: RebeccaHager Date: Wed, 11 May 2022 19:24:46 -0400 Subject: [PATCH 6/7] Update OpenSpaceProforma.py practice on my branch --- .../PyCharm/ProForma/OpenSpaceProforma.py | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py index 84de637..9db63f9 100644 --- a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py +++ b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py @@ -1,13 +1,13 @@ import proforma.ProFormaForm as ProFormaForm from statistics import mean -myAMI_1P1 = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } +##myAMI_1P1 = {'Affordable 1': ['Studio', 0.04, 400, 1150], +## 'Affordable 2': ['1-Bed', 0.14, 600, 1250], +## 'Affordable 3': ['2-Bed', 0.12, 800, 1500], +## 'Market 1': ['Studio', 0.10, 400, 3200], +## 'Market 2': ['1-Bed', 0.32, 600, 4000], +## 'Market 3': ['2-Bed', 0.28, 800, 5700], +## } myProFormaP1 = ProFormaForm.ProForma(verbose= False, exportToExcel= False, From 32c3b00f4b9065332b31db99254313e6ae0cc673 Mon Sep 17 00:00:00 2001 From: RebeccaHager Date: Sun, 15 May 2022 19:39:18 -0400 Subject: [PATCH 7/7] Only ran one proforma at a time rather than make all the other lines into comments --- .../PyCharm/ProForma/OpenSpaceProforma.py | 291 +----------------- .../CapitalStructure.cpython-310.pyc | Bin 977 -> 977 bytes .../CapitalStructureHelper.cpython-310.pyc | Bin 937 -> 937 bytes .../__pycache__/CostHelper.cpython-310.pyc | Bin 1421 -> 1421 bytes .../Inputs/__pycache__/Costs.cpython-310.pyc | Bin 2196 -> 2196 bytes .../Inputs/__pycache__/Inputs.cpython-310.pyc | Bin 830 -> 830 bytes .../InputsAssumptions.cpython-310.pyc | Bin 4023 -> 4023 bytes .../__pycache__/OtherRates.cpython-310.pyc | Bin 708 -> 708 bytes .../__pycache__/Proceeds.cpython-310.pyc | Bin 2780 -> 2780 bytes .../ProceedsHelper.cpython-310.pyc | Bin 1560 -> 1560 bytes .../Inputs/__pycache__/Totals.cpython-310.pyc | Bin 2468 -> 2468 bytes .../__pycache__/Results.cpython-310.pyc | Bin 2422 -> 2422 bytes .../__pycache__/ResultsHelper.cpython-310.pyc | Bin 2612 -> 2612 bytes .../ResultsMetricHelper.cpython-310.pyc | Bin 1513 -> 1513 bytes .../ScheduleDataFrame.cpython-310.pyc | Bin 4617 -> 4617 bytes .../__pycache__/ProFormaForm.cpython-310.pyc | Bin 4534 -> 4534 bytes 16 files changed, 7 insertions(+), 284 deletions(-) diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py index 9db63f9..c99b1f8 100644 --- a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py +++ b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/OpenSpaceProforma.py @@ -1,85 +1,7 @@ import proforma.ProFormaForm as ProFormaForm from statistics import mean -##myAMI_1P1 = {'Affordable 1': ['Studio', 0.04, 400, 1150], -## 'Affordable 2': ['1-Bed', 0.14, 600, 1250], -## 'Affordable 3': ['2-Bed', 0.12, 800, 1500], -## 'Market 1': ['Studio', 0.10, 400, 3200], -## 'Market 2': ['1-Bed', 0.32, 600, 4000], -## 'Market 3': ['2-Bed', 0.28, 800, 5700], -## } -myProFormaP1 = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P1) - -myAMI_1P1rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP1rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P1rep) myAMI_1P2 = {'Affordable 1': ['Studio', 0.06, 400, 1150], 'Affordable 2': ['1-Bed', 0.18, 600, 1250], @@ -92,17 +14,17 @@ myProFormaP2 = ProFormaForm.ProForma(verbose= False, exportToExcel= False, yrs = 3, - start_year = 2034, + start_year = 2032, lot_area= 839831, - equity = 0.70, + equity = 0.75, net_loss_factor= 0.15, - landscape_gross_sqft= 0, + landscape_gross_sqft= 47000, existingBuildingFloorArea=0, existingBuildingPurchase=0, residential_gross_sqft= 188000, commercial_gross_sqft= 49210, manufacturing_gross_sqft=0, - community_gross_sqft= 8100, + community_gross_sqft= 24335, avgUnitSize_residential= 600, avgUnitSize_commercial= 2000, avgUnitSize_manufacturing=0, @@ -115,208 +37,9 @@ manufacturing_rent=0, community_cost= 275, community_rent= 60000, - hard_cost=250, - soft_cost=107, + hard_cost= 206, + soft_cost= 88, land_cost=1, - landscape_cost=0, + landscape_cost= 50, residential_AMI=myAMI_1P2) -myAMI_1P2rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP2rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P2rep) - -myAMI_1P3 = {'Affordable 1': ['Studio', 0.08, 400, 1150], - 'Affordable 2': ['1-Bed', 0.28, 600, 1250], - 'Affordable 3': ['2-Bed', 0.24, 800, 1500], - 'Market 1': ['Studio', 0.06, 400, 3200], - 'Market 2': ['1-Bed', 0.18, 600, 4000], - 'Market 3': ['2-Bed', 0.16, 800, 5700], - } - -myProFormaP3 = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P3) - -myAMI_1P3rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP3rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P3rep) - -myAMI_1P4 = {'Affordable 1': ['Studio', 0.10, 400, 1150], - 'Affordable 2': ['1-Bed', 0.32, 600, 1250], - 'Affordable 3': ['2-Bed', 0.28, 800, 1500], - 'Market 1': ['Studio', 0.04, 400, 3200], - 'Market 2': ['1-Bed', 0.14, 600, 4000], - 'Market 3': ['2-Bed', 0.12, 800, 5700], - } - -myProFormaP4 = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P4) - -myAMI_1P4rep = {'Affordable 1': ['Studio', 0.04, 400, 1150], - 'Affordable 2': ['1-Bed', 0.14, 600, 1250], - 'Affordable 3': ['2-Bed', 0.12, 800, 1500], - 'Market 1': ['Studio', 0.10, 400, 3200], - 'Market 2': ['1-Bed', 0.32, 600, 4000], - 'Market 3': ['2-Bed', 0.28, 800, 5700], - } - -myProFormaP4rep = ProFormaForm.ProForma(verbose= False, - exportToExcel= False, - yrs = 7, - start_year = 2025, - lot_area= 839831, - equity = 0.70, - net_loss_factor= 0.15, - landscape_gross_sqft= 0, - existingBuildingFloorArea=0, - existingBuildingPurchase=0, - residential_gross_sqft= 400700, - commercial_gross_sqft= 76944, - manufacturing_gross_sqft=0, - community_gross_sqft= 8100, - avgUnitSize_residential= 600, - avgUnitSize_commercial= 2000, - avgUnitSize_manufacturing=0, - avgUnitSize_community= 1500, - residential_cost= 375, - residential_rent= 2800, - commercial_cost= 275, - commercial_rent= 120000, - manufacturing_cost=0, - manufacturing_rent=0, - community_cost= 275, - community_rent= 60000, - hard_cost=250, - soft_cost=107, - land_cost=1, - landscape_cost=0, - residential_AMI=myAMI_1P4rep) \ No newline at end of file diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructure.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructure.cpython-310.pyc index 54d3583971a3ab46ca2db3f1bcdc2ff765b8b1cb..84ec1195001df31c1b3f7bd1b912f7a0f2711cd4 100644 GIT binary patch delta 20 acmcb}evzF!pO=@50SH)KYc_HpV+H^*zXX~9 delta 20 acmcb}evzF!pO=@50SK~uA~td#V+H^-_ypnr diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructureHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Inputs/__pycache__/CapitalStructureHelper.cpython-310.pyc index 77924bb5b1a3d4b3a1700df6773d189a43eb9000..92b72f099a71aacee913b2d03dcaff01341ae4cf 100644 GIT binary patch delta 20 acmZ3?&apr=jG*M00LImnvL8|tN?&apr=jG*M00QQch>hG$tNT383d&O delta 20 acmew+^i7C6pO=@50SK~uA~teoa{>T5QUvV) diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsHelper.cpython-310.pyc index 1ff2751c3bed91b31d234fc025f5e945eb89330f..cfe0f328e5cbce8bec6fae611c34a34729d24406 100644 GIT binary patch delta 20 acmdlYvPFbDpO=@50SH)KYc_IgasdD?5(DG_ delta 20 acmdlYvPFbDpO=@50SK~uA~tesasdD^O9U(c diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsMetricHelper.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Results/__pycache__/ResultsMetricHelper.cpython-310.pyc index 82e1769176a46a09665f1286e9401b8f70770c1d..7b16576cedb962722fc5c63d8fe6f0927a7eda4c 100644 GIT binary patch delta 20 acmaFK{gRtIpO=@50SH)KYc_JN(D3k diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Schedule/__pycache__/ScheduleDataFrame.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/Schedule/__pycache__/ScheduleDataFrame.cpython-310.pyc index b778332ca74509e97283835568d74fc5495b10fd..4cdbd9c558487527636ec9e5eee70bc0d0399dc4 100644 GIT binary patch delta 20 ZcmeBF=~Us)=jG*M00LImnvLB51OY3d1d0Fv delta 20 ZcmeBF=~Us)=jG*M00QQch>hI;1OY4g1d{*& diff --git a/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/__pycache__/ProFormaForm.cpython-310.pyc b/Spring/Coffee and Code/Workshops/PyCharm/ProForma/proforma/__pycache__/ProFormaForm.cpython-310.pyc index 226f5c53342148802b6810942cd9e83929f9e28f..d485554b00243d3b90ba8b814906fd8c00c6852a 100644 GIT binary patch delta 20 acmdm{yiJ)qpO=@50SH)KYc_JP76bq>g#?cP delta 20 acmdm{yiJ)qpO=@50SI0h7jEQUEeHTNB?VUi