From 46a62e7a8fd7477006606495755eb70ee8b02158 Mon Sep 17 00:00:00 2001 From: Katherine Fleming <2205659+kflemin@users.noreply.github.com> Date: Thu, 5 Nov 2026 14:19:27 -0700 Subject: [PATCH 1/2] Support Python 3.11-3.14, allow lxml 5/6, regenerate for BuildingSync 2.7.0 - Regenerate bsync.py from the v2.7.0 release XSD (52 elements added, none removed) - requires-python >=3.11; lxml >=5.0 (lxml 4 has no wheels past cp312) - Move metadata to the PEP 621 [project] table (Poetry 2) and refresh poetry.lock - CI: test matrix 3.11-3.14, generator checks for BuildingSync 2.3-2.7 and the develop-v2/develop-v3 branches, current action versions - Add Dependabot config; bump black to 26.10.1 - Bump version to 0.4.0 and update README/CHANGELOG Co-Authored-By: Claude Opus 5.5 --- .github/dependabot.yml | 22 + .github/workflows/ci.yml | 88 +- .pre-commit-config.yaml | 3 +- CHANGELOG.md | 14 + README.md | 16 +- bsyncpy/bsync.py | 2530 ++++++++++++++++++++++++-------------- poetry.lock | 782 ++++++------ pyproject.toml | 34 +- tests/test_basic.py | 4 +- 9 files changed, 2089 insertions(+), 1404 deletions(-) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..13d5306 --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,22 @@ +version: 2 +updates: + - package-ecosystem: "pip" + directory: "/" + schedule: + interval: "weekly" + groups: + python-deps: + patterns: + - "*" + commit-message: + prefix: "deps" + - package-ecosystem: "github-actions" + directory: "/" + schedule: + interval: "weekly" + groups: + actions-deps: + patterns: + - "*" + commit-message: + prefix: "ci" diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54164a0..2fe6650 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,66 +1,66 @@ name: CI -on: [push] +on: + pull_request: + push: jobs: tests: - name: Run tests with Poetry + name: Tests (Python ${{ matrix.python-version }}) runs-on: ubuntu-latest strategy: + fail-fast: false matrix: - python-version: [3.7, 3.8] + python-version: ["3.11", "3.12", "3.13", "3.14"] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v7 - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 + uses: actions/setup-python@v6 with: python-version: ${{ matrix.python-version }} - - - name: Display Python version - run: python -c "import sys; print(sys.version)" - - - name: Install poetry - uses: abatilo/actions-poetry@v2.0.0 - - - name: Install poetry (and update) and pre-commit - run: | - poetry update - poetry run pre-commit install - + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + version: latest + - name: Install dependencies + run: poetry install --no-interaction - name: Run pre-commit run: poetry run pre-commit run --all-files - - name: Run tests run: poetry run pytest - - name: Run Generator (BuildingSync 2.3) - run: | - curl -L -o bsyncpy/BuildingSync-2.3.xsd https://github.com/BuildingSync/schema/releases/download/v2.3.0/BuildingSync.xsd - cd bsyncpy - poetry run python bsyncpy_generator.py BuildingSync-2.3.xsd - - - name: Run Generator (BuildingSync 2.4) - run: | - curl -L -o bsyncpy/BuildingSync-2.4.xsd https://github.com/BuildingSync/schema/releases/download/v2.4.0/BuildingSync.xsd - cd bsyncpy - poetry run python bsyncpy_generator.py BuildingSync-2.4.xsd - - - name: Run Generator (BuildingSync 2.5) - run: | - curl -L -o bsyncpy/BuildingSync-2.5.xsd https://github.com/BuildingSync/schema/releases/download/v2.5.0/BuildingSync.xsd - cd bsyncpy - poetry run python bsyncpy_generator.py BuildingSync-2.5.xsd + generator: + name: Generator (BuildingSync ${{ matrix.schema.name }}) + runs-on: ubuntu-latest - - name: Run Generator (BuildingSync Develop V2) - run: | - curl -L -o bsyncpy/BuildingSync-develop-v2.xsd https://raw.githubusercontent.com/BuildingSync/schema/develop-v2/BuildingSync.xsd - cd bsyncpy - poetry run python bsyncpy_generator.py BuildingSync-develop-v2.xsd + strategy: + fail-fast: false + matrix: + schema: + - { name: "2.3", url: "https://github.com/BuildingSync/schema/releases/download/v2.3.0/BuildingSync.xsd" } + - { name: "2.4", url: "https://github.com/BuildingSync/schema/releases/download/v2.4.0/BuildingSync.xsd" } + - { name: "2.5", url: "https://github.com/BuildingSync/schema/releases/download/v2.5.0/BuildingSync.xsd" } + - { name: "2.6", url: "https://github.com/BuildingSync/schema/releases/download/v2.6.0/BuildingSync.xsd" } + - { name: "2.7", url: "https://github.com/BuildingSync/schema/releases/download/v2.7.0/BuildingSync.xsd" } + - { name: "develop-v2", url: "https://raw.githubusercontent.com/BuildingSync/schema/develop-v2/BuildingSync.xsd" } + - { name: "develop-v3", url: "https://raw.githubusercontent.com/BuildingSync/schema/develop-v3/BuildingSync.xsd" } - - name: Run Generator (BuildingSync Develop V3) + steps: + - uses: actions/checkout@v7 + - uses: actions/setup-python@v6 + with: + python-version: "3.14" + - name: Install Poetry + uses: snok/install-poetry@v1 + with: + version: latest + - name: Install dependencies + run: poetry install --no-interaction + - name: Run generator + working-directory: bsyncpy run: | - curl -L -o bsyncpy/BuildingSync-develop-v3.xsd https://raw.githubusercontent.com/BuildingSync/schema/develop-v3/BuildingSync.xsd - cd bsyncpy - poetry run python bsyncpy_generator.py BuildingSync-develop-v3.xsd + curl -fsSL -o BuildingSync-test.xsd "${{ matrix.schema.url }}" + poetry run python bsyncpy_generator.py BuildingSync-test.xsd + poetry run python -c "import bsync; bsync.BuildingSync()" diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 45e519d..2545c77 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -1,6 +1,5 @@ repos: - repo: https://github.com/psf/black - rev: 22.3.0 + rev: 26.10.1 hooks: - id: black - language_version: python3 # Should be a command that runs python3.6+ \ No newline at end of file diff --git a/CHANGELOG.md b/CHANGELOG.md index 7a79594..b835240 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,17 @@ +# Version 0.4.0 + +* Generated for BuildingSync 2.7.0 (52 new elements, none removed), including: + * Condition elements for envelope, HVAC, lighting, and other systems + * Files / LinkedFiles and related file metadata elements + * Federal facility identifiers (FederalFacility, FacilityNumber, SubAgency, ...) + * Life-cycle savings elements (LifeCycleSavingsEnergy, LifeCycleSavingsWater, ...) + * AuditCycleStartDate / AuditCycleEndDate +* Require Python 3.11+ (tested on 3.11, 3.12, 3.13, and 3.14) +* Allow lxml 5 and 6 (previously limited to lxml 4, which has no wheels for Python 3.13+) +* Moved packaging metadata to the standard `[project]` table (Poetry 2) +* Updated CI (Python matrix, generator checks for BuildingSync 2.3 through 2.7 and develop branches) and added Dependabot +* Updated black to 26.10.1 + # Version 0.3.0 * Generated for BuildingSync 2.5 (which is currently develop-v2) diff --git a/README.md b/README.md index efe660d..5b1cac3 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@ ![Build Status](https://github.com/BuildingSync/bsyncpy/actions/workflows/ci.yml/badge.svg?branch=develop) -Current BuildingSync version: `2.5.0`. +Current BuildingSync version: `2.7.0`. + +Supported Python versions: 3.11, 3.12, 3.13, and 3.14. ## Installing @@ -12,9 +14,9 @@ Current BuildingSync version: `2.5.0`. - `poetry install` - `poetry run pre-commit install` - Download, copy, or curl a BuildingSync schema into `bsyncpy/bsyncpy` - - `curl -L -o bsyncpy/BuildingSync-2.5.xsd https://github.com/BuildingSync/schema/releases/download/v2.5.0/BuildingSync.xsd` + - `curl -L -o bsyncpy/BuildingSync-2.7.xsd https://github.com/BuildingSync/schema/releases/download/v2.7.0/BuildingSync.xsd` - cd into `bsyncpy/bsyncpy` -- Run generator: `poetry run python bsyncpy_generator.py BuildingSync-2.5.xsd` +- Run generator: `poetry run python bsyncpy_generator.py BuildingSync-2.7.xsd` - Go back to the root `bsyncpy` and run tests: `poetry run pytest` - Make sure formatting is good: `poetry run pre-commit run --all-files` - On commit, pre-commit should run again @@ -28,7 +30,7 @@ from bsyncpy import bsync # Create a root and set the version attribute root = bsync.BuildingSync() -root.set('version', '2.5.0') +root.set('version', '2.7.0') # Valid element attributes can also be passed in as kwargs f = bsync.Facilities(bsync.Facilities.Facility(ID='Facility-1')) @@ -45,7 +47,7 @@ with open('output.xml', 'wb+') as f: *Output* ```xml - + @@ -54,7 +56,7 @@ with open('output.xml', 'wb+') as f: ## Comprehensive example -Check out our example Jupyter Notebook [here](https://nbviewer.jupyter.org/github/BuildingSync/schema/blob/develop-v2/docs/notebooks/bsync_examples/Small-Office-Level-1.ipynb). +Check out the example Jupyter notebooks in the BuildingSync schema repository: [docs/notebooks](https://github.com/BuildingSync/schema/tree/develop-v2/docs/notebooks). # Updating Version @@ -62,7 +64,7 @@ Check out our example Jupyter Notebook [here](https://nbviewer.jupyter.org/githu * See the notes above on downloading and generating the new bsync.py file. * Bump version in `pyproject.toml` file * Add/update CHANGELOG entry -* Update (or add) generator test in `.github/ci.yml` +* Add the new release to the generator matrix in `.github/workflows/ci.yml` * Update this README with the latest version of testing. ## Releasing New Version diff --git a/bsyncpy/bsync.py b/bsyncpy/bsync.py index aa35729..8e5001d 100644 --- a/bsyncpy/bsync.py +++ b/bsyncpy/bsync.py @@ -302,6 +302,14 @@ class Tightness(BSElement): ] +# EquipmentCondition +class EquipmentCondition(BSElement): + """Assessed condition of equipment or system.""" + + element_type = "xs:string" + element_enumerations = ["Excellent", "Good", "Average", "Poor", "Other", "Unknown"] + + # BuildingSync.Facilities.Facility.Systems.AirInfiltrationSystems.AirInfiltrationSystem.AirInfiltrationNotes class AirInfiltrationNotes(BSElement): """Details about the the assessment. This might include methods used, criteria, evidence, or basis of evaluation.""" @@ -341,6 +349,86 @@ class AirInfiltrationTest(BSElement): element_enumerations = ["Blower door", "Tracer gas", "Checklist", "Other"] +# EquipmentID +class EquipmentID(BSElement): + """Identifier for the equipment.""" + + element_type = "xs:string" + + +# Location +class Location(BSElement): + """Location of system.""" + + element_type = "xs:string" + element_enumerations = [ + "Roof", + "Mechanical Room", + "Mechanical Floor", + "Penthouse", + "Interior", + "Exterior", + "Closet", + "Garage", + "Attic", + "Other", + "Unknown", + ] + + +# Manufacturer +class Manufacturer(BSElement): + """Company that manufactured the equipment.""" + + element_type = "xs:string" + + +# ModelNumber +class ModelNumber(BSElement): + """Model or catalog number that can be used to identify more detailed system characteristics.""" + + element_type = "xs:string" + + +# Quantity +class Quantity(BSElement): + """Number of systems of this type.""" + + element_type = "xs:integer" + + +# ThirdPartyCertification +class ThirdPartyCertification(BSElement): + """Independent organization has verified that product or appliance meets or exceeds the standard in question (ENERGY STAR, CEE, or other).""" + + element_type = "xs:string" + element_enumerations = [ + "ENERGY STAR", + "ENERGY STAR Most Efficient", + "FEMP Designated", + "CEE Tier 1", + "CEE Tier 2", + "CEE Tier 3", + "Other", + "None", + "Unknown", + ] + + +# YearInstalled +class YearInstalled(BSElement): + """Year the system was originally installed in the building. Equipment age may be used as a proxy.""" + + element_type = "xs:gYear" + + +# YearOfManufacture +class YearOfManufacture(BSElement): + """Year system was manufactured.""" + + element_type = "xs:gYear" + + # BuildingSync.Facilities.Facility.Systems.WaterInfiltrationSystems.WaterInfiltrationSystem.LocationsOfExteriorWaterIntrusionDamages.LocationsOfExteriorWaterIntrusionDamage class LocationsOfExteriorWaterIntrusionDamage(BSElement): """Location of observed moisture problems on the outside of the building.""" @@ -366,6 +454,11 @@ class LocationsOfInteriorWaterIntrusionDamage(BSElement): element_enumerations = ["Kitchen", "Bathroom", "Basement", "Other"] +# BuildingSync.Facilities.Facility.Systems.WaterInfiltrationSystems.WaterInfiltrationSystem.WaterInfiltrationSystemCondition +class WaterInfiltrationSystemCondition(EquipmentCondition): + pass + + # BuildingSync.Facilities.Facility.Systems.WaterInfiltrationSystems.WaterInfiltrationSystem.WaterInfiltrationNotes class WaterInfiltrationNotes(BSElement): """Details about the the assessment. This might include methods used, criteria, evidence, or basis of evaluation.""" @@ -679,6 +772,33 @@ class VerticalSurroundings(BSElement): ] +# PrincipalHVACSystemType +class PrincipalHVACSystemType(BSElement): + """Principal HVAC type.""" + + element_type = "xs:string" + element_enumerations = [ + "Packaged Terminal Air Conditioner", + "Four Pipe Fan Coil Unit", + "Packaged Terminal Heat Pump", + "Packaged Rooftop Air Conditioner", + "Packaged Rooftop Heat Pump", + "Packaged Rooftop VAV with Hot Water Reheat", + "Packaged Rooftop VAV with Electric Reheat", + "VAV with Hot Water Reheat", + "VAV with Electric Reheat", + "Warm Air Furnace", + "Ventilation Only", + "Dedicated Outdoor Air System", + "Water Loop Heat Pump", + "Ground Source Heat Pump", + "VRF Terminal Unit", + "Chilled Beam", + "Other", + "Unknown", + ] + + # YearOfConstruction class YearOfConstruction(BSElement): """Year in which construction was completed on the premise. (CCYY)""" @@ -686,6 +806,38 @@ class YearOfConstruction(BSElement): element_type = "xs:gYear" +# PrincipalLightingSystemType +class PrincipalLightingSystemType(BSElement): + """Principal Lighting type for a building or a section. The usage of this element is not recommended except for Audit Template use cases.""" + + element_type = "xs:string" + element_enumerations = [ + "Incandescent", + "Linear Fluorescent", + "Compact Fluorescent", + "Halogen", + "High Intensity Discharge", + "Solid State Lighting", + "LED", + "Mercury Vapor", + "Metal Halide", + "Sodium Vapor High Pressure", + "T5", + "T5HO", + "T8", + "Super T8", + "T12", + "T12HO", + "Induction", + "Neon", + "Plasma", + "Photoluminescent", + "Self Luminous", + "Other", + "Unknown", + ] + + # BuildingType.YearOccupied class YearOccupied(BSElement): """Year in which the premises was first occupied. (CCYY)""" @@ -764,6 +916,62 @@ class Agency(BSElement): element_type = "xs:string" +# BuildingType.FederalBuilding.SubAgency +class SubAgency(BSElement): + """Federal sub agency, according to organizational structure of the specified agency.""" + + element_type = "xs:string" + + +# BuildingType.FederalBuilding.SubAgencySubLevel1 +class SubAgencySubLevel1(BSElement): + """Federal sub agency sub level 1, according to organizational structure of the specified agency.""" + + element_type = "xs:string" + + +# BuildingType.FederalBuilding.SubAgencySubLevel2 +class SubAgencySubLevel2(BSElement): + """Federal sub agency sub level 2, according to organizational structure of the specified agency.""" + + element_type = "xs:string" + + +# BuildingType.FederalBuilding.FederalFacility +class FederalFacility(BSElement): + """Federal facility, according to organization structure of the specified agency.""" + + element_type = "xs:string" + + +# BuildingType.FederalBuilding.FacilitySubLevel1 +class FacilitySubLevel1(BSElement): + """Federal facility sub level 1, according to organization structure of the specified agency.""" + + element_type = "xs:string" + + +# BuildingType.FederalBuilding.FacilitySubLevel2 +class FacilitySubLevel2(BSElement): + """Federal facility sub level 2, according to organization structure of the specified agency.""" + + element_type = "xs:string" + + +# BuildingType.FederalBuilding.FacilityNumber +class FacilityNumber(BSElement): + """Federal facility number.""" + + element_type = "xs:string" + + +# BuildingType.FederalBuilding.PrimaryCategoryCode +class PrimaryCategoryCode(BSElement): + """Category code classification of the building.""" + + element_type = "xs:string" + + # BuildingType.FederalBuilding.DepartmentRegion class DepartmentRegion(BSElement): """Federal department/region, required to designate a building as a federal property in ENERGY STAR Portfolio Manager.""" @@ -875,12 +1083,9 @@ class SideLength(BSElement): element_type = "xs:decimal" -# EquipmentCondition -class EquipmentCondition(BSElement): - """Assessed condition of equipment or system.""" - - element_type = "xs:string" - element_enumerations = ["Excellent", "Good", "Average", "Poor", "Other", "Unknown"] +# BuildingType.Sections.Section.Roofs.Roof.RoofID.RoofCondition +class RoofCondition(EquipmentCondition): + """Description of the roof's condition.""" # BuildingType.Sections.Section.Roofs.Roof.RoofID.SkylightIDs.SkylightID.PercentSkylightArea @@ -1416,6 +1621,62 @@ class AuditCycleEndYear(BSElement): element_type = "xs:gYear" +# AuditCycleType.AuditCycleStartDate +class AuditCycleStartDate(BSElement): + """Date the Audit Cycle starts (CCYY-MM-DD)""" + + element_type = "xs:date" + + +# AuditCycleType.AuditCycleEndDate +class AuditCycleEndDate(BSElement): + """Date the Audit Cycle ends (CCYY-MM-DD)""" + + element_type = "xs:date" + + +# FileType.FileName +class FileName(BSElement): + """Name identifying the file other than the ID""" + + element_type = "xs:string" + + +# FileType.FileDescription +class FileDescription(BSElement): + """Details about the file""" + + element_type = "xs:string" + + +# FileType.FileContentType +class FileContentType(BSElement): + """MIME (media) type of the file, following the format as "type/[tree.]subtype[+suffix]", e.g. application/zip, application/vnd+json or image/png - only one suffix (+) allowd.""" + + element_type = "xs:string" + + +# FileType.FileSize +class FileSize(BSElement): + """Size of file in bytes (B)""" + + element_type = "xs:nonNegativeInteger" + + +# FileType.FileChecksum +class FileChecksum(BSElement): + """The digital fingerprint for file integrity and authenticity verification, if applicable, such as SHA-1, MD5, etc.""" + + element_type = "xs:string" + + +# FileType.FileURL +class FileURL(BSElement): + """The address (permanent link peferred) to the intenet location where the file is stored""" + + element_type = "xs:string" + + # ScenarioType.ScenarioName class ScenarioName(BSElement): """Name of the scenario for which energy use data is included. This may include benchmarks, baselines, and improved cases. For retrofits, each package represents a different scenario.""" @@ -1653,6 +1914,41 @@ class AnnualSavingsGHGEmissionIntensity(BSElement): element_type = "xs:decimal" +# LifeCycleSavingsEnergy +class LifeCycleSavingsEnergy(BSElement): + """Estimated total energy savings in the whole life cycle (MMBtu)""" + + element_type = "xs:decimal" + + +# LifeCycleSavingsEnergyCost +class LifeCycleSavingsEnergyCost(BSElement): + """Estimated present value of total savings in energy costs in the whole life cycle ($)""" + + element_type = "xs:decimal" + + +# LifeCycleSavingsWater +class LifeCycleSavingsWater(BSElement): + """Estimated total water savings in the whole life cycle (gal)""" + + element_type = "xs:decimal" + + +# LifeCycleSavingsWaterCost +class LifeCycleSavingsWaterCost(BSElement): + """Estimated present value of total savings in water costs in the whole life cycle ($)""" + + element_type = "xs:decimal" + + +# LifeCycleSavingsAncillaryCost +class LifeCycleSavingsAncillaryCost(BSElement): + """Estimated present value of total savings in ancillary/other costs in the whole life cycle ($)""" + + element_type = "xs:decimal" + + # SimplePayback class SimplePayback(BSElement): """The length of time required for the investment to pay for itself. (yrs)""" @@ -3036,20 +3332,6 @@ class ExistingSystemRemoved(BSElement): ] -# MeasureType.MeasureSavingsAnalysis.MeasureRank -class MeasureRank(BSElement): - """Sequence in which the measure was analyzed relative to other measures. Ranking should be 1 if it is analyzed first, 2 if analyzed after Measure 1 is applied, etc. This accounts for interactive effects between measures. Ranking may be 1 for all measures if they are not analyzed as a package.""" - - element_type = "xs:integer" - - -# MeasureType.MeasureSavingsAnalysis.OtherCostAnnualSavings -class OtherCostAnnualSavings(BSElement): - """Annual savings for other non-energy costs, or increased revenue caused by measure implementation. ($)""" - - element_type = "xs:decimal" - - # ReportType.AuditFilingStatus class AuditFilingStatus(BSElement): """The status of an audit filing, used to clarify whether or not this audit report is an initial submission (Initial filing) or an amendment to a previously submitted report (Amended filing).""" @@ -3188,7 +3470,54 @@ class CustomDateType(BSElement): element_type = "xs:string" -# ReportType.OtherEscalationRates.OtherEscalationRate.EscalationRate +# ReportType.FacilityEvaluationAuditDefinition.BasicOnsiteAudit +class BasicOnsiteAudit(BSElement): + """A basic onsite audit meets the minimum requirements for onsite facility evaluations""" + + element_type = "xs:string" + element_enumerations = [ + "ASHRAE Level 1 Audit", + "Industrial Assessment Center (IAC) Audit", + "Utility Incentive Program Audit", + ] + + +# ReportType.FacilityEvaluationAuditDefinition.DetailedOnsiteAudit +class DetailedOnsiteAudit(BSElement): + """A more in-depth facility evaluation that is performed when project development is the focus and a more precise LCCA is required""" + + element_type = "xs:string" + element_enumerations = [ + "ASHRAE Level 2 Audit", + "ASHRAE Level 3 Audit", + "Deep Energy Retrofit Audit", + "Preliminary Assessment (PA)", + "Investment Grade Audit (IGA)", + "Retrocommissioning Audit", + ] + + +# ReportType.FacilityEvaluationAuditDefinition.BasicRemoteAudit +class BasicRemoteAudit(BSElement): + """A facility evaluation performed without a site visit and analysis of datasets from specific building systems or operations to derive opportunities for energy efficiency, water efficiency, and renewable energy generation""" + + element_type = "xs:string" + element_enumerations = [ + "Rapid/Automated Audit", + "Continuous Monitoring of Building Systems", + "Portfolio Screening Analysis", + ] + + +# ReportType.FacilityEvaluationAuditDefinition.DetailedRemoteAudit +class DetailedRemoteAudit(BSElement): + """A facility evaluation performed without a site visit and rigorous analysis of building systems and operations to identify opportunities for energy efficiency, water efficiency, and renewable energy generation""" + + element_type = "xs:string" + element_enumerations = ["Desk Audit", "Remote Controls Audit"] + + +# ReportType.OtherEscalationRates.OtherEscalationRate.EscalationRate class EscalationRate(BSElement): """Assumed annual increase in price for the specified resource. (0-100) (%)""" @@ -3197,7 +3526,6 @@ class EscalationRate(BSElement): # AuditorQualificationType class AuditorQualificationType(BSElement): - element_type = "xs:string" element_enumerations = [ "AABC Commissioning Group (ACG) Commissioning Authority (CxA)", @@ -3273,7 +3601,7 @@ class AuditorQualificationType(BSElement): "Residential Energy Services Network (RESNET) Certification", "University of Wisconsin Accredited Commissioning Process Authority Professional (CxAP or CAP)", "University of Wisconsin Accredited Commissioning Process Manager (CxM)", - "University of Wisconsin Accredited Green Commissioning Process Provider (GCxP or GCP)" + "University of Wisconsin Accredited Green Commissioning Process Provider (GCxP or GCP)", "Other", "None", ] @@ -3389,6 +3717,7 @@ class CertifiedAuditTeamMemberContactID(BSElement): "IDref", # IDREF ] + # ReportType.Qualifications.Qualification.AuditorYearsOfExperience class AuditorYearsOfExperience(BSElement): """The number of years the energy auditor has been conducting audits professionally.""" @@ -3396,26 +3725,6 @@ class AuditorYearsOfExperience(BSElement): element_type = "xs:nonNegativeInteger" -# Location -class Location(BSElement): - """Location of system.""" - - element_type = "xs:string" - element_enumerations = [ - "Roof", - "Mechanical Room", - "Mechanical Floor", - "Penthouse", - "Interior", - "Exterior", - "Closet", - "Garage", - "Attic", - "Other", - "Unknown", - ] - - # Priority class Priority(BSElement): """Order of precedence relative to other applicable systems. Enter Primary if this is the only system.""" @@ -3469,37 +3778,9 @@ class PrimaryHVACSystemType(BSElement): ] -# PrincipalHVACSystemType -class PrincipalHVACSystemType(BSElement): - """Principal HVAC type.""" - - element_type = "xs:string" - element_enumerations = [ - "Packaged Terminal Air Conditioner", - "Four Pipe Fan Coil Unit", - "Packaged Terminal Heat Pump", - "Packaged Rooftop Air Conditioner", - "Packaged Rooftop Heat Pump", - "Packaged Rooftop VAV with Hot Water Reheat", - "Packaged Rooftop VAV with Electric Reheat", - "VAV with Hot Water Reheat", - "VAV with Electric Reheat", - "Warm Air Furnace", - "Ventilation Only", - "Dedicated Outdoor Air System", - "Water Loop Heat Pump", - "Ground Source Heat Pump", - "VRF Terminal Unit", - "Chilled Beam", - "Other", - ] - - -# Quantity -class Quantity(BSElement): - """Number of systems of this type.""" - - element_type = "xs:integer" +# HVACSystemType.HVACSystemCondition +class HVACSystemCondition(EquipmentCondition): + pass # HVACSystemType.HeatingAndCoolingSystems.HeatingSources.HeatingSource.HeatingSourceType.Furnace.FurnaceType @@ -3632,24 +3913,6 @@ class ThermalEfficiency(BSElement): element_type = "xs:decimal" -# ThirdPartyCertification -class ThirdPartyCertification(BSElement): - """Independent organization has verified that product or appliance meets or exceeds the standard in question (ENERGY STAR, CEE, or other).""" - - element_type = "xs:string" - element_enumerations = [ - "ENERGY STAR", - "ENERGY STAR Most Efficient", - "FEMP Designated", - "CEE Tier 1", - "CEE Tier 2", - "CEE Tier 3", - "Other", - "None", - "Unknown", - ] - - # FuelTypes class FuelTypes(BSElement): element_type = "xs:string" @@ -3876,46 +4139,6 @@ class NumberOfHeatingStages(BSElement): element_type = "xs:integer" -# PrimaryFuel -class PrimaryFuel(FuelTypes): - """Main fuel used by the system.""" - - -# YearInstalled -class YearInstalled(BSElement): - """Year the system was originally installed in the building. Equipment age may be used as a proxy.""" - - element_type = "xs:gYear" - - -# YearOfManufacture -class YearOfManufacture(BSElement): - """Year system was manufactured.""" - - element_type = "xs:gYear" - - -# Manufacturer -class Manufacturer(BSElement): - """Company that manufactured the equipment.""" - - element_type = "xs:string" - - -# EquipmentID -class EquipmentID(BSElement): - """Identifier for the equipment.""" - - element_type = "xs:string" - - -# ModelNumber -class ModelNumber(BSElement): - """Model or catalog number that can be used to identify more detailed system characteristics.""" - - element_type = "xs:string" - - # HVACSystemType.HeatingAndCoolingSystems.CoolingSources.CoolingSource.CoolingSourceType.DX.DXSystemType class DXSystemType(BSElement): """General type of heat pump used for space heating.""" @@ -4025,6 +4248,7 @@ class CoolingPlantID(BSElement): "IDref", # IDREF ] + # HVACSystemType.HeatingAndCoolingSystems.CoolingSources.CoolingSource.CoolingSourceCondition class CoolingSourceCondition(EquipmentCondition): pass @@ -4356,6 +4580,11 @@ class CoolingDeliveryID(BSElement): ] +# DuctSystemType.DuctSystemCondition +class DuctSystemCondition(EquipmentCondition): + pass + + # InsulationCondition class InsulationCondition(BSElement): """Assessed condition of installed insulation.""" @@ -4478,6 +4707,14 @@ class DistrictHeatingType(BSElement): ] +# CoolingPlantType.CondenserType +class CondenserType(BSElement): + """Type of condenser associated with the cooling plant. The usage of this element is not recommended except for Audit Template use cases. User is recommended to use CondenserPlant instead.""" + + element_type = "xs:string" + element_enumerations = ["Air Cooled", "Water Cooled", "Other", "Unknown"] + + # CoolingPlantType.CoolingPlantCondition class CoolingPlantCondition(EquipmentCondition): pass @@ -4667,14 +4904,6 @@ class WaterCooledCondenserType(BSElement): element_enumerations = ["Cooling tower", "Other", "Unknown"] -# CoolingPlant.CondenserType -class CondenserType(BSElement): - """condenser associated with the cooling plant. The usage of this element is not recommended except for Audit Template use cases. User is recommended to use CondenserPlant instead.""" - - element_type = "xs:string" - element_enumerations = ["Air Cooled", "Water Cooled", "Other", "Unknown"] - - # CondenserWaterTemperature class CondenserWaterTemperature(BSElement): """The temperature of water supplied to a water-cooled condenser under normal operating conditions. (°F)""" @@ -5106,6 +5335,11 @@ class RatedLampLife(BSElement): element_type = "xs:decimal" +# LightingSystemType.LightingSystemCondition +class LightingSystemCondition(EquipmentCondition): + pass + + # LightingSystemType.LampType.LinearFluorescent.LampLength class LampLength(BSElement): """Length of fluorescent lamps.""" @@ -5152,6 +5386,7 @@ class Induction(BSElement): ("FluorescentStartType", FluorescentStartType), ] + # NeonType class NeonType(BSElement): pass @@ -5493,6 +5728,16 @@ class DailyWaterUse(BSElement): element_type = "xs:decimal" +# CookingSystemType.CookingSystemCondition +class CookingSystemCondition(EquipmentCondition): + pass + + +# RefrigerationSystemType.RefrigerationSystemCondition +class RefrigerationSystemCondition(EquipmentCondition): + pass + + # RefrigerationSystemType.RefrigerationSystemCategory.CentralRefrigerationSystem.RefrigerationCompressor.CompressorUnloader.CompressorUnloaderStages class CompressorUnloaderStages(BSElement): """Number of stages available for unloading the compressor.""" @@ -5578,6 +5823,11 @@ class CaseReturnLineDiameter(BSElement): element_type = "xs:decimal" +# RefrigerationSystemType.RefrigerationSystemCategory.RefrigerationUnit.AntiSweatHeaters.AntiSweatHeaterCondition +class AntiSweatHeaterCondition(EquipmentCondition): + pass + + # RefrigerationSystemType.RefrigerationSystemCategory.RefrigerationUnit.AntiSweatHeaters.AntiSweatHeaterPower class AntiSweatHeaterPower(BSElement): """The total power associated with anti-sweat heaters for glass display doors for a refrigerated cases of this type. (W)""" @@ -5730,6 +5980,11 @@ class DishwasherHotWaterUse(BSElement): element_type = "xs:decimal" +# DishwasherSystemType.DishwasherSystemCondition +class DishwasherSystemCondition(EquipmentCondition): + pass + + # LaundrySystemType.QuantityOfLaundry class QuantityOfLaundry(BSElement): """Quantity of laundry processed onsite annually. (lb/yr)""" @@ -5744,6 +5999,11 @@ class LaundryEquipmentUsage(BSElement): element_type = "xs:decimal" +# LaundrySystemType.LaundrySystemCondition +class LaundrySystemCondition(EquipmentCondition): + pass + + # ClothesWasherClassification class ClothesWasherClassification(BSElement): """The sector where clothes washer is commonly used.""" @@ -5924,6 +6184,11 @@ class PumpApplication(BSElement): ] +# PumpSystemType.PumpSystemCondition +class PumpSystemCondition(EquipmentCondition): + pass + + # FanSystemType.FanEfficiency class FanEfficiency(BSElement): """Efficiency of the fan, excluding motor and drive. (0-1) (fraction)""" @@ -6054,6 +6319,11 @@ class NumberOfDiscreteFanSpeedsHeating(BSElement): element_type = "xs:integer" +# FanSystemType.FanSystemCondition +class FanSystemCondition(EquipmentCondition): + pass + + # MotorSystemType.MotorRPM class MotorRPM(BSElement): """The number of full revolutions in a unit of time and is used to assign MotorEfficiency. 2008 NR ACM table N2-20 has four speeds: 3600 rpm, 1800 rpm, 1200 rpm, 900 rpm.""" @@ -6128,6 +6398,11 @@ class MotorApplication(BSElement): ] +# MotorSystemType.MotorSystemCondition +class MotorSystemCondition(EquipmentCondition): + pass + + # HeatRecoverySystemType.HeatRecoveryEfficiency class HeatRecoveryEfficiency(BSElement): """Efficiency of sensible heat recovery as a percentage. (0-100) (%)""" @@ -6181,6 +6456,11 @@ class SystemIDProvidingHeat(BSElement): ] +# HeatRecoverySystemType.HeatRecoverySystemCondition +class HeatRecoverySystemCondition(EquipmentCondition): + pass + + # WallSystemType.WallRValue class WallRValue(BSElement): """(Also known as thermal resistance), quantity determined by the temperature difference, at steady state, between two defined surfaces of a material or construction that induces a unit heat flow rate through unit area (R = ΔT/q). R-value is the reciprocal of thermal conductance. A unit of thermal resistance used for comparing insulating values of different materials, for the specific thickness of the material. The higher the R-value number, a material, the greater its insulating properties and the slower the heat flow through it. This R-value does not include the interior and exterior air film coefficients. (hr-ft2-F/Btu)""" @@ -6248,6 +6528,11 @@ class InteriorVisibleAbsorptance(BSElement): element_type = "xs:decimal" +# WallSystemType.WallSystemCondition +class WallSystemCondition(EquipmentCondition): + pass + + # EnvelopeConstructionType class EnvelopeConstructionType(BSElement): element_type = "xs:string" @@ -6474,6 +6759,11 @@ class CeilingVisibleAbsorptance(BSElement): element_type = "xs:decimal" +# CeilingSystemType.CeilingSystemCondition +class CeilingSystemCondition(EquipmentCondition): + pass + + # CeilingSystemType.CeilingInsulations.CeilingInsulation.CeilingInsulationMaterial class CeilingInsulationMaterial(InsulationMaterialType): """Material used for the structural component of the surface.""" @@ -6816,6 +7106,11 @@ class VisibleTransmittance(BSElement): element_type = "xs:decimal" +# FenestrationSystemType.FenestrationSystemCondition +class FenestrationSystemCondition(EquipmentCondition): + pass + + # FenestrationSystemType.FenestrationType.Window.LightShelves.LightShelfDistanceFromTop class LightShelfDistanceFromTop(BSElement): """Vertical distance from top of window to the light shelf. (ft)""" @@ -7086,6 +7381,11 @@ class ExteriorFloorExteriorThermalAbsorptance(BSElement): element_type = "xs:decimal" +# ExteriorFloorSystemType.ExteriorFloorSystemCondition +class ExteriorFloorSystemCondition(EquipmentCondition): + pass + + # FoundationSystemType.FloorCovering class FloorCovering(BSElement): """Material covering the slab or floor over unconditioned space.""" @@ -7115,6 +7415,11 @@ class PlumbingPenetrationSealing(BSElement): element_enumerations = ["Flashing", "Fitting", "Other", "Unknown"] +# FoundationSystemType.FoundationSystemCondition +class FoundationSystemCondition(EquipmentCondition): + pass + + # SlabInsulationOrientation class SlabInsulationOrientation(BSElement): """The location and extent of slab-on-grade floor insulation.""" @@ -7335,6 +7640,11 @@ class ITNominalPower(BSElement): element_type = "xs:decimal" +# CriticalITSystemType.CriticalITSystemCondition +class CriticalITSystemCondition(EquipmentCondition): + pass + + # PlugElectricLoadType.PlugLoadType class PlugLoadType(BSElement): """General category of plug load, including non-critical IT systems, task lighting, and other small electronic loads.""" @@ -7386,6 +7696,11 @@ class WeightedAverageLoad(BSElement): element_type = "xs:decimal" +# PlugElectricLoadType.PlugElectricLoadCondition +class PlugElectricLoadCondition(EquipmentCondition): + pass + + # ProcessGasElectricLoadType.ProcessLoadType class ProcessLoadType(BSElement): """Type of gas or electric equipment not categorized elsewhere.""" @@ -7421,6 +7736,11 @@ class ProcessLoadStandbyPower(BSElement): element_type = "xs:decimal" +# ProcessGasElectricLoadType.ProcessGasElectricLoadCondition +class ProcessGasElectricLoadCondition(EquipmentCondition): + pass + + # ConveyanceSystemType.ConveyanceLoadType class ConveyanceLoadType(BSElement): """Type of load that the conveyance system usually transports.""" @@ -7469,6 +7789,11 @@ class DemandReduction(BSElement): element_type = "xs:boolean" +# OnsiteStorageTransmissionGenerationSystemType.OnsiteStorageTransmissionGenerationSystemCondition +class OnsiteStorageTransmissionGenerationSystemCondition(EquipmentCondition): + pass + + # OnsiteStorageTransmissionGenerationSystemType.EnergyConversionType.Storage.EnergyStorageTechnology class EnergyStorageTechnology(BSElement): """A few different forms of energy storage systems exist including: potential, kinetic, chemical and thermal. The critical factors of any storage device are application (type and size), costs, cycle efficiency and longevity.""" @@ -7665,6 +7990,11 @@ class PumpDutyCycle(BSElement): element_type = "xs:decimal" +# PoolType.PoolCondition +class PoolCondition(EquipmentCondition): + pass + + # PoolType.Heated.WaterTemperature class WaterTemperature(BSElement): """Set point for pool heating. (°F)""" @@ -7707,6 +8037,11 @@ class WaterFixtureCyclesPerDay(BSElement): element_type = "xs:decimal" +# WaterUseType.WaterSystemCondition +class WaterSystemCondition(EquipmentCondition): + pass + + # CalculationMethodType.Modeled.SoftwareProgramUsed class SoftwareProgramUsed(BSElement): """Building energy modeling software used to estimate energy savings.""" @@ -7759,6 +8094,7 @@ class UtilityBills(BSElement): ("UtilityBillpayer", UtilityBillpayer), ] + # CalculationMethodType.Measured.MeasuredEnergySource.DirectMeasurement class DirectMeasurement(BSElement): pass @@ -7827,6 +8163,17 @@ class LinkedSystemID(BSElement): "IDref", # IDREF ] + +# LinkedFiles.LinkedFileID +class LinkedFileID(BSElement): + """ID number of associated file(s).""" + + +LinkedFileID.element_attributes = [ + "IDref", # IDREF +] + + # Address.StreetAddressDetail.Simplified.StreetAddress class StreetAddress(BSElement): """Street Address. This address can be defined multiple times for situations where that is needed for one premises, such as a complex of buildings. This address represents a complete street address, including street number, street name, prefixes, suffixes, modifiers, and unit number. It is assumed that a street address is either represented in this way, as a complete address, or is broken up into it's various components, using the terms"Street Number", "Street Number Numeric", "Street Dir Prefix", "Street Name", "Street Additional Info", "Street Suffix", "Street Suffix Modifier", "Street Dir Suffix", and "Unit Number".""" @@ -8447,6 +8794,7 @@ class TenantID(BSElement): "IDref", # IDREF ] + # FloorAreas.FloorArea.ExcludedSectionIDs.ExcludedSectionID class ExcludedSectionID(BSElement): pass @@ -8456,6 +8804,7 @@ class ExcludedSectionID(BSElement): "IDref", # IDREF ] + # FloorAreas.FloorArea.FloorAreaType class FloorAreaType(BSElement): """Floor area can be defined and described in many different ways for different purposes. This type field allows multiple types of floor area definitions to exist in the same dataset.""" @@ -8998,6 +9347,7 @@ class eGRIDSubregionCode(BSElement): "FRCC", "HIMS", "HIOA", + "MORE", "MROE", "MROW", "NEWE", @@ -9061,6 +9411,7 @@ class MeasuredScenarioID(BSElement): "IDref", # IDREF ] + # DerivedModelType.Models.Model.DerivedModelInputs.ResponseVariable.ResponseVariableName class ResponseVariableName(FuelTypes): pass @@ -9269,6 +9620,7 @@ class BaselinePeriodModelID(BSElement): "IDref", # IDREF ] + # DerivedModelType.SavingsSummaries.SavingsSummary.ReportingPeriodModelID class ReportingPeriodModelID(BSElement): """Applicable when the NormalizationMethod is Backcast or Standard Conditions. Define a link to the ID of the Model considered as the reporting period Model. In the event it is Backcast, the baseline period and comparison period are considered synonymous.""" @@ -9278,6 +9630,7 @@ class ReportingPeriodModelID(BSElement): "IDref", # IDREF ] + # DerivedModelType.SavingsSummaries.SavingsSummary.NormalizationMethod class NormalizationMethod(BSElement): """'Forecast' is the most common normalization method. It implies creation of a single Model using data from a baseline period (i.e. preconditions). 'Standard Conditions' is used to compare building performance of, say, two particular years to a 'typical' year. In this event, two models are created, one for the baseline and one for the reporting period, and input data is fed into each for a 'typical year' (TMY3, etc.) and performance compared. 'Backcast' is not used often, but makes sense in the event that finer temporal data is available in the reporting period to train the Model. A single Model is also created in this case.""" @@ -9402,25 +9755,11 @@ class TemperatureUnitsBaseType(BSElement): element_enumerations = ["Fahrenheit, F"] -# WeatherStations.WeatherStation -class WeatherStation(BSElement): - pass +# AnnualSavingsByFuels.AnnualSavingsByFuel.AnnualSavingsNativeUnits +class AnnualSavingsNativeUnits(BSElement): + """Site energy savings per year for this resource type, in the original units. (units/yr)""" - -WeatherStation.element_attributes = [ - "ID", # ID -] -WeatherStation.element_children = [ - ("WeatherDataStationID", WeatherDataStationID), - ("WeatherStationName", WeatherStationName), - ("WeatherStationCategory", WeatherStationCategory), -] - -# AnnualSavingsByFuels.AnnualSavingsByFuel.AnnualSavingsNativeUnits -class AnnualSavingsNativeUnits(BSElement): - """Site energy savings per year for this resource type, in the original units. (units/yr)""" - - element_type = "xs:decimal" + element_type = "xs:decimal" # CondenserPlantIDs.CondenserPlantID @@ -9432,6 +9771,7 @@ class CondenserPlantID(BSElement): "IDref", # IDREF ] + # ElectricResistanceType class ElectricResistanceType(BSElement): pass @@ -9460,6 +9800,14 @@ class LinkedScheduleID(BSElement): "IDref", # IDREF ] + +# LinkedAuditCycle.IndexYearOfAuditCycle +class IndexYearOfAuditCycle(BSElement): + """Index number of the year when the audit is conducted from the start of the audit cycle. 1 corresponds to auc:AuditCycleStartYear.""" + + element_type = "xs:positiveInteger" + + # NoCoolingType class NoCoolingType(BSElement): pass @@ -9510,6 +9858,7 @@ class SpaceID(BSElement): "IDref", # IDREF ] + # ThermalZoneIDs.ThermalZoneID class ThermalZoneID(BSElement): """ID number of the zone type associated with this space or side of the section.""" @@ -9519,6 +9868,7 @@ class ThermalZoneID(BSElement): "IDref", # IDREF ] + # UnknownType class UnknownType(BSElement): pass @@ -9539,6 +9889,20 @@ class VentilationControlMethod(BSElement): ] +# MeasureSavingsAnalysis.MeasureRank +class MeasureRank(BSElement): + """Sequence in which the measure was analyzed relative to other measures. Ranking should be 1 if it is analyzed first, 2 if analyzed after Measure 1 is applied, etc. This accounts for interactive effects between measures. Ranking may be 1 for all measures if they are not analyzed as a package.""" + + element_type = "xs:integer" + + +# MeasureSavingsAnalysis.OtherCostAnnualSavings +class OtherCostAnnualSavings(BSElement): + """Annual savings for other non-energy costs, or increased revenue caused by measure implementation. ($)""" + + element_type = "xs:decimal" + + # BuildingSync.Programs.Program class Program(BSElement): """Authorized or supported program such as rebate or audit.""" @@ -9550,6 +9914,7 @@ class Program(BSElement): ("ProgramClassification", ProgramClassification), ] + # BuildingSync.Programs class Programs(BSElement): pass @@ -9559,6 +9924,27 @@ class Programs(BSElement): ("Program", Program), ] + +# BuildingSync.Facilities.Facility.Systems.AirInfiltrationSystems.AirInfiltrationSystem.AirInfiltrationSystemCondition +class AirInfiltrationSystemCondition(EquipmentCondition): + pass + + +# LinkedFiles +class LinkedFiles(BSElement): + """List of files linked to the premise, system, or report.""" + + +LinkedFiles.element_children = [ + ("LinkedFileID", LinkedFileID), +] + + +# PrimaryFuel +class PrimaryFuel(FuelTypes): + """Main fuel used by the system.""" + + # BuildingSync.Facilities.Facility.Systems.WaterInfiltrationSystems.WaterInfiltrationSystem.LocationsOfExteriorWaterIntrusionDamages class LocationsOfExteriorWaterIntrusionDamages(BSElement): pass @@ -9571,6 +9957,7 @@ class LocationsOfExteriorWaterIntrusionDamages(BSElement): ), ] + # BuildingSync.Facilities.Facility.Systems.WaterInfiltrationSystems.WaterInfiltrationSystem.LocationsOfInteriorWaterIntrusionDamages class LocationsOfInteriorWaterIntrusionDamages(BSElement): pass @@ -9583,6 +9970,7 @@ class LocationsOfInteriorWaterIntrusionDamages(BSElement): ), ] + # OccupancyClassification class OccupancyClassification(OccupancyClassificationType): """Classification of the space (complex, whole building, or section) tasks by building occupants.""" @@ -9597,14 +9985,6 @@ class eGRIDSubregionCodes(BSElement): ("eGRIDSubregionCode", eGRIDSubregionCode), ] -# WeatherStations -class WeatherStations(BSElement): - pass - - -WeatherStations.element_children = [ - ("WeatherStation", WeatherStation), -] # TenantIDs class TenantIDs(BSElement): @@ -9615,6 +9995,7 @@ class TenantIDs(BSElement): ("TenantID", TenantID), ] + # BuildingType.FederalBuilding class FederalBuilding(BSElement): """If exists then the building is owned by the federal government.""" @@ -9622,9 +10003,18 @@ class FederalBuilding(BSElement): FederalBuilding.element_children = [ ("Agency", Agency), + ("SubAgency", SubAgency), + ("SubAgencySubLevel1", SubAgencySubLevel1), + ("SubAgencySubLevel2", SubAgencySubLevel2), + ("FederalFacility", FederalFacility), + ("FacilitySubLevel1", FacilitySubLevel1), + ("FacilitySubLevel2", FacilitySubLevel2), + ("FacilityNumber", FacilityNumber), + ("PrimaryCategoryCode", PrimaryCategoryCode), ("DepartmentRegion", DepartmentRegion), ] + # BuildingType.TotalCommonConditionedAboveGradeWallArea class TotalCommonConditionedAboveGradeWallArea(nonNegativeDecimal): """Above grade demising wall area. (ft2)""" @@ -9648,6 +10038,7 @@ class Assessment(BSElement): ("AssessmentVersion", AssessmentVersion), ] + # WallID class WallID(BSElement): """ID number of the wall type associated with this side of the section.""" @@ -9660,6 +10051,7 @@ class WallID(BSElement): ("WallArea", WallArea), ] + # BuildingType.Sections.Section.Sides.Side.WallIDs class WallIDs(BSElement): pass @@ -9669,6 +10061,7 @@ class WallIDs(BSElement): ("WallID", WallID), ] + # DoorID class DoorID(BSElement): """ID number of the door type associated with this side of the section.""" @@ -9681,6 +10074,7 @@ class DoorID(BSElement): ("FenestrationArea", FenestrationArea), ] + # BuildingType.Sections.Section.Sides.Side.DoorIDs class DoorIDs(BSElement): pass @@ -9690,6 +10084,7 @@ class DoorIDs(BSElement): ("DoorID", DoorID), ] + # ThermalZoneIDs class ThermalZoneIDs(BSElement): pass @@ -9699,10 +10094,6 @@ class ThermalZoneIDs(BSElement): ("ThermalZoneID", ThermalZoneID), ] -# BuildingType.Sections.Section.Roofs.Roof.RoofID.RoofCondition -class RoofCondition(EquipmentCondition): - """Description of the roof's condition.""" - # BuildingType.Sections.Section.Roofs.Roof.RoofID.SkylightIDs.SkylightID class SkylightID(BSElement): @@ -9716,6 +10107,7 @@ class SkylightID(BSElement): ("PercentSkylightArea", PercentSkylightArea), ] + # BuildingType.Sections.Section.Roofs.Roof.RoofID.SkylightIDs class SkylightIDs(BSElement): """List of Skylight IDs.""" @@ -9725,6 +10117,7 @@ class SkylightIDs(BSElement): ("SkylightID", SkylightID), ] + # BuildingType.Sections.Section.Roofs.Roof.RoofID class RoofID(BSElement): """ID number of the roof type associated with this section.""" @@ -9740,6 +10133,7 @@ class RoofID(BSElement): ("SkylightIDs", SkylightIDs), ] + # BuildingType.Sections.Section.Roofs.Roof class Roof(BSElement): """A roof structure that forms the exterior upper covering of a premises.""" @@ -9749,6 +10143,7 @@ class Roof(BSElement): ("RoofID", RoofID), ] + # BuildingType.Sections.Section.Roofs class Roofs(BSElement): """List of roofs.""" @@ -9758,6 +10153,7 @@ class Roofs(BSElement): ("Roof", Roof), ] + # SpaceIDs class SpaceIDs(BSElement): pass @@ -9767,6 +10163,7 @@ class SpaceIDs(BSElement): ("SpaceID", SpaceID), ] + # BuildingType.Sections.Section.ExteriorFloors.ExteriorFloor.ExteriorFloorID class ExteriorFloorID(BSElement): """ID number of the exterior floor type associated with this section.""" @@ -9781,6 +10178,7 @@ class ExteriorFloorID(BSElement): ("SpaceIDs", SpaceIDs), ] + # BuildingType.Sections.Section.ExteriorFloors.ExteriorFloor class ExteriorFloor(BSElement): """A raised floor exposed to air. For example, the top floor of a multistory parking structure.""" @@ -9790,6 +10188,7 @@ class ExteriorFloor(BSElement): ("ExteriorFloorID", ExteriorFloorID), ] + # BuildingType.Sections.Section.ExteriorFloors class ExteriorFloors(BSElement): """List of exterior floors.""" @@ -9799,6 +10198,7 @@ class ExteriorFloors(BSElement): ("ExteriorFloor", ExteriorFloor), ] + # BuildingType.Sections.Section.Foundations.Foundation.FoundationID class FoundationID(BSElement): """ID number of the foundation type associated with this section.""" @@ -9813,6 +10213,7 @@ class FoundationID(BSElement): ("SpaceIDs", SpaceIDs), ] + # BuildingType.Sections.Section.Foundations.Foundation class Foundation(BSElement): """A construction element that supports the structure of the premises. In general it is made of masonry or concrete.""" @@ -9822,6 +10223,7 @@ class Foundation(BSElement): ("FoundationID", FoundationID), ] + # BuildingType.Sections.Section.Foundations class Foundations(BSElement): """List of foundations.""" @@ -9831,6 +10233,7 @@ class Foundations(BSElement): ("Foundation", Foundation), ] + # OriginalOccupancyClassification class OriginalOccupancyClassification(OccupancyClassificationType): """Original classification of the space (complex, whole building, or section) tasks by building occupants.""" @@ -9845,6 +10248,7 @@ class DeliveryIDs(BSElement): ("DeliveryID", DeliveryID), ] + # ThermalZoneType.HVACScheduleIDs class HVACScheduleIDs(BSElement): pass @@ -9854,6 +10258,7 @@ class HVACScheduleIDs(BSElement): ("HVACScheduleID", HVACScheduleID), ] + # SpaceType.OccupancyScheduleIDs class OccupancyScheduleIDs(BSElement): pass @@ -9863,6 +10268,7 @@ class OccupancyScheduleIDs(BSElement): ("OccupancyScheduleID", OccupancyScheduleID), ] + # ScheduleType.ScheduleDetails.ScheduleDetail class ScheduleDetail(BSElement): """Type of day for which the schedule will be specified.""" @@ -9876,6 +10282,7 @@ class ScheduleDetail(BSElement): ("PartialOperationPercentage", PartialOperationPercentage), ] + # ContactType.ContactRoles class ContactRoles(BSElement): """Container for the a list of roles that a contact can have.""" @@ -9885,6 +10292,7 @@ class ContactRoles(BSElement): ("ContactRole", ContactRole), ] + # ContactType.ContactTelephoneNumbers.ContactTelephoneNumber class ContactTelephoneNumber(BSElement): pass @@ -9895,6 +10303,7 @@ class ContactTelephoneNumber(BSElement): ("TelephoneNumber", TelephoneNumber), ] + # ContactType.ContactEmailAddresses.ContactEmailAddress class ContactEmailAddress(BSElement): pass @@ -9905,6 +10314,7 @@ class ContactEmailAddress(BSElement): ("EmailAddress", EmailAddress), ] + # TenantType.ContactIDs class ContactIDs(BSElement): pass @@ -9914,6 +10324,7 @@ class ContactIDs(BSElement): ("ContactID", ContactID), ] + # TenantType.TenantTelephoneNumbers.TenantTelephoneNumber class TenantTelephoneNumber(BSElement): pass @@ -9924,6 +10335,7 @@ class TenantTelephoneNumber(BSElement): ("TelephoneNumber", TelephoneNumber), ] + # TenantType.TenantEmailAddresses.TenantEmailAddress class TenantEmailAddress(BSElement): pass @@ -9934,6 +10346,7 @@ class TenantEmailAddress(BSElement): ("EmailAddress", EmailAddress), ] + # CBECSType class CBECSType(BSElement): class ClimateZone(BSElement): @@ -9967,6 +10380,7 @@ class Priority(LowMedHigh): ("Priority", SimpleImpactAnalysis.Priority), ] + # ScenarioType.WeatherType.Normalized class Normalized(BSElement): pass @@ -9978,6 +10392,7 @@ class Normalized(BSElement): ("WeatherDataSource", WeatherDataSource), ] + # ScenarioType.WeatherType.AdjustedToYear class AdjustedToYear(BSElement): pass @@ -9988,6 +10403,7 @@ class AdjustedToYear(BSElement): ("WeatherDataSource", WeatherDataSource), ] + # UtilityType.UtilityMeterNumbers class UtilityMeterNumbers(BSElement): pass @@ -9997,6 +10413,7 @@ class UtilityMeterNumbers(BSElement): ("UtilityMeterNumber", UtilityMeterNumber), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.FlatRate class FlatRate(BSElement): """A consumer will pay one flat rate no matter what the usage level is.""" @@ -10027,6 +10444,7 @@ class RatePeriod(BSElement): ("EnergySellRate", EnergySellRate), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.TimeOfUseRate.RatePeriods.RatePeriod.TimeOfUsePeriods.TimeOfUsePeriod class TimeOfUsePeriod(BSElement): pass @@ -10046,6 +10464,7 @@ class TimeOfUsePeriod(BSElement): ("DemandRatchetPercentage", DemandRatchetPercentage), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.TimeOfUseRate.RatePeriods.RatePeriod.TimeOfUsePeriods class TimeOfUsePeriods(BSElement): pass @@ -10055,6 +10474,7 @@ class TimeOfUsePeriods(BSElement): ("TimeOfUsePeriod", TimeOfUsePeriod), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.TimeOfUseRate class TimeOfUseRate(BSElement): """TOU rates vary by time of day and time of year.""" @@ -10080,6 +10500,7 @@ class RatePeriod(BSElement): ("EnergySellRate", EnergySellRate), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.TieredRates.TieredRate.RatePeriods.RatePeriod.RateTiers.RateTier class RateTier(BSElement): pass @@ -10097,6 +10518,7 @@ class RateTier(BSElement): ("DemandRatchetPercentage", DemandRatchetPercentage), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.TieredRates.TieredRate.RatePeriods.RatePeriod.RateTiers class RateTiers(BSElement): pass @@ -10106,6 +10528,7 @@ class RateTiers(BSElement): ("RateTier", RateTier), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.TieredRates.TieredRate class TieredRate(BSElement): """Tiered rates increase the per-unit price of a utility as usage increases.""" @@ -10132,6 +10555,7 @@ class RatePeriod(BSElement): ("EnergySellRate", EnergySellRate), ] + # UtilityType.RateSchedules.RateSchedule.TypeOfRateStructure.TieredRates class TieredRates(BSElement): pass @@ -10141,6 +10565,7 @@ class TieredRates(BSElement): ("TieredRate", TieredRate), ] + # Unknown class Unknown(UnknownType): pass @@ -10155,6 +10580,7 @@ class NetMetering(BSElement): ("AverageMarginalSellRate", AverageMarginalSellRate), ] + # EnergyResource class EnergyResource(FuelTypes): """Type of energy resource fuel. This can be applied at the premises or individual system or equipment level.""" @@ -10174,6 +10600,7 @@ class AnnualFuelUseLinkedTimeSeriesIDs(BSElement): ("LinkedTimeSeriesID", LinkedTimeSeriesID), ] + # ResourceUseType.UtilityIDs class UtilityIDs(BSElement): pass @@ -10183,6 +10610,7 @@ class UtilityIDs(BSElement): ("UtilityID", UtilityID), ] + # ResourceUseType.Emissions.Emission.EmissionsLinkedTimeSeriesIDs class EmissionsLinkedTimeSeriesIDs(BSElement): """Links to all time series data used to calculate the total GHG Emissions""" @@ -10192,6 +10620,7 @@ class EmissionsLinkedTimeSeriesIDs(BSElement): ("EmissionsLinkedTimeSeriesID", EmissionsLinkedTimeSeriesID), ] + # ResourceUseType.Emissions.Emission class Emission(BSElement): pass @@ -10208,6 +10637,7 @@ class Emission(BSElement): ("EmissionsLinkedTimeSeriesIDs", EmissionsLinkedTimeSeriesIDs), ] + # TimeSeriesType.IntervalDurationUnits class IntervalDurationUnits(IntervalFrequencyType): """The units of the time series IntervalDuration""" @@ -10230,6 +10660,7 @@ class Replacement(BSElement): ("ModifiedSchedule", ModifiedSchedule), ] + # MeasureType.TypeOfMeasure.Replacements class Replacements(BSElement): pass @@ -10239,6 +10670,7 @@ class Replacements(BSElement): ("Replacement", Replacement), ] + # MeasureType.TypeOfMeasure.ModificationRetrocommissions.ModificationRetrocommissioning class ModificationRetrocommissioning(BSElement): pass @@ -10251,6 +10683,7 @@ class ModificationRetrocommissioning(BSElement): ("ModifiedSchedule", ModifiedSchedule), ] + # MeasureType.TypeOfMeasure.ModificationRetrocommissions class ModificationRetrocommissions(BSElement): pass @@ -10260,6 +10693,7 @@ class ModificationRetrocommissions(BSElement): ("ModificationRetrocommissioning", ModificationRetrocommissioning), ] + # MeasureType.TypeOfMeasure.Additions.Addition class Addition(BSElement): pass @@ -10271,6 +10705,7 @@ class Addition(BSElement): ("ModifiedSchedule", ModifiedSchedule), ] + # MeasureType.TypeOfMeasure.Additions class Additions(BSElement): pass @@ -10280,6 +10715,7 @@ class Additions(BSElement): ("Addition", Addition), ] + # MeasureType.TypeOfMeasure.Removals.Removal class Removal(BSElement): pass @@ -10291,6 +10727,7 @@ class Removal(BSElement): ("ModifiedSchedule", ModifiedSchedule), ] + # MeasureType.TypeOfMeasure.Removals class Removals(BSElement): pass @@ -10300,6 +10737,7 @@ class Removals(BSElement): ("Removal", Removal), ] + # MeasureType.TechnologyCategories.TechnologyCategory.BoilerPlantImprovements class BoilerPlantImprovements(BSElement): """Boiler plant improvements.""" @@ -10335,6 +10773,7 @@ class MeasureName(BSElement): ("MeasureName", BoilerPlantImprovements.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.ChillerPlantImprovements class ChillerPlantImprovements(BSElement): """Chiller plant improvements.""" @@ -10368,6 +10807,7 @@ class MeasureName(BSElement): ("MeasureName", ChillerPlantImprovements.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.BuildingAutomationSystems class BuildingAutomationSystems(BSElement): """Building Automation Systems (BAS) or Energy Management Control Systems (EMCS).""" @@ -10390,6 +10830,7 @@ class MeasureName(BSElement): ("MeasureName", BuildingAutomationSystems.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.OtherHVAC class OtherHVAC(BSElement): """Other measure related to heating, ventilating, and air conditioning (HVAC).""" @@ -10443,6 +10884,7 @@ class MeasureName(BSElement): ("MeasureName", OtherHVAC.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.LightingImprovements class LightingImprovements(BSElement): """Lighting improvements.""" @@ -10476,6 +10918,7 @@ class MeasureName(BSElement): ("MeasureName", LightingImprovements.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.BuildingEnvelopeModifications class BuildingEnvelopeModifications(BSElement): """Building envelope modifications.""" @@ -10500,6 +10943,8 @@ class MeasureName(BSElement): "Replace windows", "Increase floor insulation", "Insulate foundation", + "Add secondary window systems/attachments", + "Install shading automation system", "Clean and/or repair", "Close elevator and/or stairwell shaft vents", "Other", @@ -10510,6 +10955,7 @@ class MeasureName(BSElement): ("MeasureName", BuildingEnvelopeModifications.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.ChilledWaterHotWaterAndSteamDistributionSystems class ChilledWaterHotWaterAndSteamDistributionSystems(BSElement): """Chilled water, hot water, and steam distribution systems.""" @@ -10545,6 +10991,7 @@ class MeasureName(BSElement): ("MeasureName", ChilledWaterHotWaterAndSteamDistributionSystems.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.OtherElectricMotorsAndDrives class OtherElectricMotorsAndDrives(BSElement): """Electric motors and drives other than those for conveyance systems.""" @@ -10568,6 +11015,7 @@ class MeasureName(BSElement): ("MeasureName", OtherElectricMotorsAndDrives.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.Refrigeration class Refrigeration(BSElement): """Refrigeration.""" @@ -10591,6 +11039,7 @@ class MeasureName(BSElement): ("MeasureName", Refrigeration.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.DistributedGeneration class DistributedGeneration(BSElement): """Distributed generation.""" @@ -10615,6 +11064,7 @@ class MeasureName(BSElement): ("MeasureName", DistributedGeneration.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.RenewableEnergySystems class RenewableEnergySystems(BSElement): """Renewable energy systems.""" @@ -10640,6 +11090,7 @@ class MeasureName(BSElement): ("MeasureName", RenewableEnergySystems.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.EnergyDistributionSystems class EnergyDistributionSystems(BSElement): """Energy and utility distribution systems.""" @@ -10664,6 +11115,7 @@ class MeasureName(BSElement): ("MeasureName", EnergyDistributionSystems.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.ServiceHotWaterSystems class ServiceHotWaterSystems(BSElement): """Service hot water (SHW) and domestic hot water (DHW) systems.""" @@ -10696,6 +11148,7 @@ class MeasureName(BSElement): ("MeasureName", ServiceHotWaterSystems.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.WaterAndSewerConservationSystems class WaterAndSewerConservationSystems(BSElement): """Water and sewer conservation systems.""" @@ -10729,6 +11182,7 @@ class MeasureName(BSElement): ("MeasureName", WaterAndSewerConservationSystems.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.ElectricalPeakShavingLoadShifting class ElectricalPeakShavingLoadShifting(BSElement): """Electrical peak shaving and load shifting.""" @@ -10749,6 +11203,7 @@ class MeasureName(BSElement): ("MeasureName", ElectricalPeakShavingLoadShifting.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.EnergyCostReductionThroughRateAdjustments class EnergyCostReductionThroughRateAdjustments(BSElement): """Energy cost reduction through rate adjustments.""" @@ -10770,6 +11225,7 @@ class MeasureName(BSElement): ("MeasureName", EnergyCostReductionThroughRateAdjustments.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.EnergyRelatedProcessImprovements class EnergyRelatedProcessImprovements(BSElement): """Energy related process improvements.""" @@ -10792,6 +11248,7 @@ class MeasureName(BSElement): ("MeasureName", EnergyRelatedProcessImprovements.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.AdvancedMeteringSystems class AdvancedMeteringSystems(BSElement): """Advanced metering systems.""" @@ -10813,6 +11270,7 @@ class MeasureName(BSElement): ("MeasureName", AdvancedMeteringSystems.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.PlugLoadReductions class PlugLoadReductions(BSElement): """Appliance and plug-load reductions.""" @@ -10839,6 +11297,7 @@ class MeasureName(BSElement): ("MeasureName", PlugLoadReductions.MeasureName), ] + # MeasureType.TechnologyCategories.TechnologyCategory.DataCenterImprovements class DataCenterImprovements(BSElement): """Data center energy conservation improvements.""" @@ -10870,7 +11329,7 @@ class MeasureName(BSElement): # MeasureType.TechnologyCategories.TechnologyCategory.AlternativeWaterSources class AlternativeWaterSources(BSElement): - """Measures reserved for future and other ECMs.Alternative water sources options for water saving.""" + """Alternative water sources options for water saving.""" class MeasureName(BSElement): """Short description of measure.""" @@ -11138,6 +11597,19 @@ class MeasureName(BSElement): ] +# ReportType.FacilityEvaluationAuditDefinition +class FacilityEvaluationAuditDefinition(BSElement): + """The facility audit terms used in the FEMP Facility Evaluation (Audit) resources that satisfy EISA 432 requirements""" + + +FacilityEvaluationAuditDefinition.element_children = [ + ("BasicOnsiteAudit", BasicOnsiteAudit), + ("DetailedOnsiteAudit", DetailedOnsiteAudit), + ("BasicRemoteAudit", BasicRemoteAudit), + ("DetailedRemoteAudit", DetailedRemoteAudit), +] + + # ReportType.AuditDates.AuditDate class AuditDate(BSElement): pass @@ -11828,38 +12300,6 @@ class CentralRefrigerationSystem(BSElement): ] -# RefrigerationSystemType.RefrigerationSystemCategory.RefrigerationUnit.AntiSweatHeaters -class AntiSweatHeaters(BSElement): - """If exists then refrigerated cases include anti-sweat heaters.""" - - -AntiSweatHeaters.element_children = [ - ("AntiSweatHeaterPower", AntiSweatHeaterPower), - ("AntiSweatHeaterControls", AntiSweatHeaterControls), - ("Manufacturer", Manufacturer), - ("ModelNumber", ModelNumber), - ("EquipmentID", EquipmentID), -] - - -# RefrigerationSystemType.RefrigerationSystemCategory.RefrigerationUnit -class RefrigerationUnit(BSElement): - pass - - -RefrigerationUnit.element_children = [ - ("RefrigerationUnitType", RefrigerationUnitType), - ("DoorConfiguration", DoorConfiguration), - ("RefrigeratedCaseDoors", RefrigeratedCaseDoors), - ("CaseDoorOrientation", CaseDoorOrientation), - ("DefrostingType", DefrostingType), - ("LampPower", LampPower), - ("RefrigerationUnitSize", RefrigerationUnitSize), - ("AntiSweatHeaters", AntiSweatHeaters), - ("RefrigerationEnergy", RefrigerationEnergy), -] - - # LaundrySystemType.LaundryType.Washer class Washer(BSElement): pass @@ -11913,6 +12353,7 @@ class LinkedSystemIDs(BSElement): ("LinkedSystemID", LinkedSystemID), ] + # FanSystemType.FanPowerMinimumRatio class FanPowerMinimumRatio(BoundedDecimalZeroToOneWithSourceAttribute): """The minimum power draw of the fan, expressed as a ratio of the full load fan power. (0-1) (fraction)""" @@ -12678,6 +13119,7 @@ class ClimateZone(BSElement): ("ClimateZone", ASHRAE.ClimateZone), ] + # ClimateZoneType.EnergyStar class EnergyStar(BSElement): class ClimateZone(BSElement): @@ -12919,6 +13361,22 @@ class DimensionlessUnitsType(BSElement): ] +# WeatherStations.WeatherStation +class WeatherStation(BSElement): + pass + + +WeatherStation.element_attributes = [ + "ID", # ID +] +WeatherStation.element_children = [ + ("WeatherDataStationID", WeatherDataStationID), + ("WeatherStationName", WeatherStationName), + ("WeatherStationCategory", WeatherStationCategory), + ("LinkedFiles", LinkedFiles), +] + + # AnnualSavingsByFuels.AnnualSavingsByFuel class AnnualSavingsByFuel(BSElement): pass @@ -12944,6 +13402,19 @@ class LinkedScheduleIDs(BSElement): ] +# LinkedAuditCycle +class LinkedAuditCycle(BSElement): + """ID number of the associated Audit Cycle for the report""" + + +LinkedAuditCycle.element_attributes = [ + "IDref", # IDREF +] +LinkedAuditCycle.element_children = [ + ("IndexYearOfAuditCycle", IndexYearOfAuditCycle), +] + + # SpatialUnits.SpatialUnit class SpatialUnit(SpatialUnitTypeType): pass @@ -12959,6 +13430,44 @@ class UserDefinedFields(BSElement): ] +# AuditCycleType +class AuditCycleType(BSElement): + """A period of time in which multiple audits may be conducted""" + + +AuditCycleType.element_attributes = [ + "ID", # ID +] +AuditCycleType.element_children = [ + ("AuditCycleName", AuditCycleName), + ("AuditCycleNotes", AuditCycleNotes), + ("AuditCycleStartYear", AuditCycleStartYear), + ("AuditCycleEndYear", AuditCycleEndYear), + ("AuditCycleStartDate", AuditCycleStartDate), + ("AuditCycleEndDate", AuditCycleEndDate), + ("UserDefinedFields", UserDefinedFields), +] + + +# FileType +class FileType(BSElement): + """File attachment associated with the audit report for supplemental information other than the general XML fields""" + + +FileType.element_attributes = [ + "ID", # ID +] +FileType.element_children = [ + ("FileName", FileName), + ("FileDescription", FileDescription), + ("FileContentType", FileContentType), + ("FileSize", FileSize), + ("FileChecksum", FileChecksum), + ("FileURL", FileURL), + ("UserDefinedFields", UserDefinedFields), +] + + # PremisesIdentifiers class PremisesIdentifiers(BSElement): """Identifier used in a specific program or dataset. There can be multiple instances of Identifier Types within a dataset.""" @@ -13015,6 +13524,16 @@ class ClimateZone(BSElement): ] +# WeatherStations +class WeatherStations(BSElement): + pass + + +WeatherStations.element_children = [ + ("WeatherStation", WeatherStation), +] + + # FloorAreas class FloorAreas(BSElement): pass @@ -13044,6 +13563,7 @@ class TypicalOccupantUsages(BSElement): ("TypicalOccupantUsage", TypicalOccupantUsage), ] + # SpatialUnits class SpatialUnits(BSElement): pass @@ -13200,6 +13720,7 @@ class SpaceType(BSElement): ("PercentageOfCommonSpace", PercentageOfCommonSpace), ("ConditionedVolume", ConditionedVolume), ("UserDefinedFields", UserDefinedFields), + ("LinkedFiles", LinkedFiles), ] @@ -13298,6 +13819,11 @@ class Target(BSElement): ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), + ("LifeCycleSavingsEnergy", LifeCycleSavingsEnergy), + ("LifeCycleSavingsEnergyCost", LifeCycleSavingsEnergyCost), + ("LifeCycleSavingsWater", LifeCycleSavingsWater), + ("LifeCycleSavingsWaterCost", LifeCycleSavingsWaterCost), + ("LifeCycleSavingsAncillaryCost", LifeCycleSavingsAncillaryCost), ("SimplePayback", SimplePayback), ("NetPresentValue", NetPresentValue), ("InternalRateOfReturn", InternalRateOfReturn), @@ -13518,6 +14044,16 @@ class Qualifications(BSElement): ] +# LinkedAuditCycles +class LinkedAuditCycles(BSElement): + pass + + +LinkedAuditCycles.element_children = [ + ("LinkedAuditCycle", LinkedAuditCycle), +] + + # HVACSystemType.HeatingAndCoolingSystems.HeatingSources.HeatingSource.HeatingSourceType class HeatingSourceType(BSElement): """Source of energy used for heating the zone.""" @@ -13844,17 +14380,6 @@ class DimmingCapability(BSElement): ] -# RefrigerationSystemType.RefrigerationSystemCategory -class RefrigerationSystemCategory(BSElement): - """Basic type of refrigeration equipment.""" - - -RefrigerationSystemCategory.element_children = [ - ("CentralRefrigerationSystem", CentralRefrigerationSystem), - ("RefrigerationUnit", RefrigerationUnit), -] - - # LaundrySystemType.LaundryType class LaundryType(BSElement): """Type of laundry system.""" @@ -14036,40 +14561,6 @@ class LinkedSpaceID(BSElement): ] -# LinkedAuditCycle.IndexYearOfAuditCycle -class IndexYearOfAuditCycle(BSElement): - """Index number of the year when the audit is conducted from the start of the audit cycle. 1 corresponds to auc:AuditCycleStartYear.""" - - element_type = "xs:integer" - - -# LinkedAuditCycles.LinkedAuditCycle -class LinkedAuditCycle(BSElement): - """ID number of the associated Audit Cycle for the report""" - - pass - - -LinkedAuditCycle.element_attributes = [ - "IDref", # IDREF -] -LinkedAuditCycle.element_children = [ - ("IndexYearOfAuditCycle", IndexYearOfAuditCycle), -] - - -# LinkedAuditCycles -class LinkedAuditCycles(BSElement): - """ID numbers of the associated zones.""" - - pass - - -LinkedAuditCycles.element_children = [ - ("LinkedAuditCycle", LinkedAuditCycle), -] - - # FanBasedDistributionTypeType class FanBasedDistributionTypeType(BSElement): pass @@ -14169,183 +14660,6 @@ class UnitsType(BSElement): ] -# WallSystemType -class WallSystemType(BSElement): - pass - - -WallSystemType.element_attributes = [ - "ID", # ID - "Status", # Status -] -WallSystemType.element_children = [ - ("ExteriorWallConstruction", ExteriorWallConstruction), - ("ExteriorWallFinish", ExteriorWallFinish), - ("ExteriorWallColor", ExteriorWallColor), - ("WallInsulations", WallInsulations), - ("WallRValue", WallRValue), - ("WallUFactor", WallUFactor), - ("WallFramingMaterial", WallFramingMaterial), - ("WallFramingSpacing", WallFramingSpacing), - ("WallFramingDepth", WallFramingDepth), - ("WallFramingFactor", WallFramingFactor), - ("CMUFill", CMUFill), - ("WallExteriorSolarAbsorptance", WallExteriorSolarAbsorptance), - ("WallExteriorThermalAbsorptance", WallExteriorThermalAbsorptance), - ("InteriorVisibleAbsorptance", InteriorVisibleAbsorptance), - ("ExteriorRoughness", ExteriorRoughness), - ("Quantity", Quantity), - ("YearInstalled", YearInstalled), - ("UserDefinedFields", UserDefinedFields), -] - - -# RoofSystemType -class RoofSystemType(BSElement): - pass - - -RoofSystemType.element_attributes = [ - "ID", # ID - "Status", # Status -] -RoofSystemType.element_children = [ - ("RoofConstruction", RoofConstruction), - ("BlueRoof", BlueRoof), - ("CoolRoof", CoolRoof), - ("GreenRoof", GreenRoof), - ("RoofFinish", RoofFinish), - ("RoofColor", RoofColor), - ("RoofInsulations", RoofInsulations), - ("DeckType", DeckType), - ("RoofRValue", RoofRValue), - ("RoofUFactor", RoofUFactor), - ("RoofFramingMaterial", RoofFramingMaterial), - ("RoofFramingSpacing", RoofFramingSpacing), - ("RoofFramingDepth", RoofFramingDepth), - ("RoofFramingFactor", RoofFramingFactor), - ("RoofSlope", RoofSlope), - ("RadiantBarrier", RadiantBarrier), - ("RoofExteriorSolarAbsorptance", RoofExteriorSolarAbsorptance), - ("RoofExteriorSolarReflectanceIndex", RoofExteriorSolarReflectanceIndex), - ("RoofExteriorThermalAbsorptance", RoofExteriorThermalAbsorptance), - ("Quantity", Quantity), - ("YearInstalled", YearInstalled), - ("UserDefinedFields", UserDefinedFields), -] - - -# CeilingSystemType -class CeilingSystemType(BSElement): - pass - - -CeilingSystemType.element_attributes = [ - "ID", # ID - "Status", # Status -] -CeilingSystemType.element_children = [ - ("CeilingConstruction", CeilingConstruction), - ("CeilingFinish", CeilingFinish), - ("CeilingColor", CeilingColor), - ("CeilingInsulations", CeilingInsulations), - ("CeilingRValue", CeilingRValue), - ("CeilingUFactor", CeilingUFactor), - ("CeilingFramingMaterial", CeilingFramingMaterial), - ("CeilingFramingSpacing", CeilingFramingSpacing), - ("CeilingFramingDepth", CeilingFramingDepth), - ("CeilingFramingFactor", CeilingFramingFactor), - ("CeilingVisibleAbsorptance", CeilingVisibleAbsorptance), - ("Quantity", Quantity), - ("YearInstalled", YearInstalled), - ("UserDefinedFields", UserDefinedFields), -] - - -# FenestrationSystemType -class FenestrationSystemType(BSElement): - pass - - -FenestrationSystemType.element_attributes = [ - "ID", # ID - "Status", # Status -] -FenestrationSystemType.element_children = [ - ("FenestrationType", FenestrationType), - ("FenestrationFrameMaterial", FenestrationFrameMaterial), - ("FenestrationOperation", FenestrationOperation), - ("Weatherstripped", Weatherstripped), - ("TightnessFitCondition", TightnessFitCondition), - ("GlassType", GlassType), - ("FenestrationGasFill", FenestrationGasFill), - ("FenestrationGlassLayers", FenestrationGlassLayers), - ("FenestrationRValue", FenestrationRValue), - ("FenestrationUFactor", FenestrationUFactor), - ("SolarHeatGainCoefficient", SolarHeatGainCoefficient), - ("VisibleTransmittance", VisibleTransmittance), - ("ThirdPartyCertification", ThirdPartyCertification), - ("Quantity", Quantity), - ("YearInstalled", YearInstalled), - ("Manufacturer", Manufacturer), - ("ModelNumber", ModelNumber), - ("UserDefinedFields", UserDefinedFields), - ("EquipmentID", EquipmentID), -] - - -# ExteriorFloorSystemType -class ExteriorFloorSystemType(BSElement): - pass - - -ExteriorFloorSystemType.element_attributes = [ - "ID", # ID - "Status", # Status -] -ExteriorFloorSystemType.element_children = [ - ("ExteriorFloorConstruction", ExteriorFloorConstruction), - ("ExteriorFloorFinish", ExteriorFloorFinish), - ("ExteriorFloorColor", ExteriorFloorColor), - ("ExteriorFloorRValue", ExteriorFloorRValue), - ("ExteriorFloorUFactor", ExteriorFloorUFactor), - ("ExteriorFloorFramingMaterial", ExteriorFloorFramingMaterial), - ("ExteriorFloorFramingSpacing", ExteriorFloorFramingSpacing), - ("ExteriorFloorFramingDepth", ExteriorFloorFramingDepth), - ("ExteriorFloorFramingFactor", ExteriorFloorFramingFactor), - ("ExteriorFloorExteriorSolarAbsorptance", ExteriorFloorExteriorSolarAbsorptance), - ( - "ExteriorFloorExteriorThermalAbsorptance", - ExteriorFloorExteriorThermalAbsorptance, - ), - ("InteriorVisibleAbsorptance", InteriorVisibleAbsorptance), - ("ExteriorRoughness", ExteriorRoughness), - ("Quantity", Quantity), - ("YearInstalled", YearInstalled), - ("UserDefinedFields", UserDefinedFields), -] - - -# FoundationSystemType -class FoundationSystemType(BSElement): - pass - - -FoundationSystemType.element_attributes = [ - "ID", # ID - "Status", # Status -] -FoundationSystemType.element_children = [ - ("GroundCouplings", GroundCouplings), - ("FloorCovering", FloorCovering), - ("FloorConstructionType", FloorConstructionType), - ("PlumbingPenetrationSealing", PlumbingPenetrationSealing), - ("YearInstalled", YearInstalled), - ("UserDefinedFields", UserDefinedFields), - ("Quantity", Quantity), -] - - # ContactType class ContactType(BSElement): pass @@ -14384,20 +14698,33 @@ class TenantType(BSElement): ] -# AuditCycleType -class AuditCycleType(BSElement): +# BuildingSync.Facilities.Facility.AuditCycles.AuditCycle +class AuditCycle(AuditCycleType): pass -AuditCycleType.element_attributes = [ - "ID", # ID +# BuildingSync.Facilities.Facility.AuditCycles +class AuditCycles(BSElement): + pass + + +AuditCycles.element_children = [ + ("AuditCycle", AuditCycle), ] -AuditCycleType.element_children = [ - ("AuditCycleName", AuditCycleName), - ("AuditCycleNotes", AuditCycleNotes), - ("AuditCycleStartYear", AuditCycleStartYear), - ("AuditCycleEndYear", AuditCycleEndYear), - ("UserDefinedFields", UserDefinedFields), + + +# BuildingSync.Facilities.Facility.Files.File +class File(FileType): + pass + + +# BuildingSync.Facilities.Facility.Files +class Files(BSElement): + pass + + +Files.element_children = [ + ("File", File), ] @@ -14507,86 +14834,12 @@ class Space(BSElement): ] -# CoolingPlantType -class CoolingPlantType(BSElement): - class OtherCombination(OtherCombination): - pass +# ControlGeneralType +class ControlGeneralType(BSElement): + """An instance of a general control technology.""" - class NoCooling(NoCooling): - pass - - class Unknown(Unknown): - pass - - class ControlSystemTypes(BSElement): - """CoolingPlant equipment control strategies.""" - - -CoolingPlantType.element_attributes = [ - "ID", # ID - "Status", # Status -] -CoolingPlantType.element_children = [ - ("Chiller", Chiller), - ("DistrictChilledWater", DistrictChilledWater), - ("OtherCombination", OtherCombination), - ("NoCooling", NoCooling), - ("Unknown", Unknown), - ("CondenserType", CondenserType), - ("CoolingPlantCondition", CoolingPlantCondition), - ("Location", Location), - ("YearInstalled", YearInstalled), - ("PrimaryFuel", PrimaryFuel), - ("BuildingAutomationSystem", BuildingAutomationSystem), - ("ControlSystemTypes", CoolingPlantType.ControlSystemTypes), - ("UserDefinedFields", UserDefinedFields), -] -CoolingPlantType.ControlSystemTypes.element_children = [ - ("ControlSystemType", ControlSystemType), -] - - -# CondenserPlantType -class CondenserPlantType(BSElement): - class Other(OtherType): - pass - - class Unknown(Unknown): - pass - - class ControlSystemTypes(BSElement): - """CondenserPlant equipment control strategies.""" - - -CondenserPlantType.element_attributes = [ - "ID", # ID -] -CondenserPlantType.element_children = [ - ("AirCooled", AirCooled), - ("WaterCooled", WaterCooled), - ("GroundSource", GroundSource), - ("GlycolCooledDryCooler", GlycolCooledDryCooler), - ("Other", CondenserPlantType.Other), - ("Unknown", Unknown), - ("CondenserPlantCondition", CondenserPlantCondition), - ("Location", Location), - ("YearInstalled", YearInstalled), - ("PrimaryFuel", PrimaryFuel), - ("BuildingAutomationSystem", BuildingAutomationSystem), - ("ControlSystemTypes", CondenserPlantType.ControlSystemTypes), - ("UserDefinedFields", UserDefinedFields), -] -CondenserPlantType.ControlSystemTypes.element_children = [ - ("ControlSystemType", ControlSystemType), -] - - -# ControlGeneralType -class ControlGeneralType(BSElement): - """An instance of a general control technology.""" - - class AdvancedPowerStrip(BSElement): - """Control by means of advanced power strip.""" + class AdvancedPowerStrip(BSElement): + """Control by means of advanced power strip.""" class ControlStrategy(ControlStrategyGeneralType): """Control strategy for advanced power strip.""" @@ -14641,58 +14894,6 @@ class ControlStrategy(ControlStrategyGeneralType): ] -# HVACSystemType.HeatingAndCoolingSystems.CoolingSources.CoolingSource -class CoolingSource(BSElement): - class Controls(BSElement): - """List of controls for CoolingSource.""" - - class Control(ControlGeneralType): - """CoolingSource control.""" - - -CoolingSource.element_attributes = [ - "ID", # ID - "Status", # Status -] -CoolingSource.element_children = [ - ("CoolingSourceType", CoolingSourceType), - ("CoolingMedium", CoolingMedium), - ("AnnualCoolingEfficiencyValue", AnnualCoolingEfficiencyValue), - ("AnnualCoolingEfficiencyUnits", AnnualCoolingEfficiencyUnits), - ("Capacity", Capacity), - ("CapacityUnits", CapacityUnits), - ("NumberOfDiscreteCoolingStages", NumberOfDiscreteCoolingStages), - ("CoolingStageCapacity", CoolingStageCapacity), - ("MinimumPartLoadRatio", MinimumPartLoadRatio), - ("RatedCoolingSensibleHeatRatio", RatedCoolingSensibleHeatRatio), - ("ThirdPartyCertification", ThirdPartyCertification), - ("PrimaryFuel", PrimaryFuel), - ("CoolingSourceCondition", CoolingSourceCondition), - ("Controls", CoolingSource.Controls), - ("Location", Location), - ("YearInstalled", YearInstalled), - ("YearOfManufacture", YearOfManufacture), - ("Manufacturer", Manufacturer), - ("ModelNumber", ModelNumber), - ("UserDefinedFields", UserDefinedFields), - ("Quantity", Quantity), - ("EquipmentID", EquipmentID), -] -CoolingSource.Controls.element_children = [ - ("Control", CoolingSource.Controls.Control), -] - - -# HVACSystemType.HeatingAndCoolingSystems.CoolingSources -class CoolingSources(BSElement): - pass - - -CoolingSources.element_children = [ - ("CoolingSource", CoolingSource), -] - - # OtherHVACSystemType.OtherHVACType class OtherHVACType(BSElement): """Type of space conditioning equipment that is not classified as heating, cooling, or air-distribution. This category includes ventilation, dehumidification, humidification, and air cleaning systems.""" @@ -15108,95 +15309,6 @@ class SavingsSummary(BSElement): ] -# BuildingSync.Facilities.Facility.Systems.WallSystems.WallSystem -class WallSystem(WallSystemType): - pass - - -# BuildingSync.Facilities.Facility.Systems.WallSystems -class WallSystems(BSElement): - pass - - -WallSystems.element_children = [ - ("WallSystem", WallSystem), -] - - -# BuildingSync.Facilities.Facility.Systems.RoofSystems.RoofSystem -class RoofSystem(RoofSystemType): - pass - - -# BuildingSync.Facilities.Facility.Systems.RoofSystems -class RoofSystems(BSElement): - pass - - -RoofSystems.element_children = [ - ("RoofSystem", RoofSystem), -] - - -# BuildingSync.Facilities.Facility.Systems.CeilingSystems.CeilingSystem -class CeilingSystem(CeilingSystemType): - pass - - -# BuildingSync.Facilities.Facility.Systems.CeilingSystems -class CeilingSystems(BSElement): - pass - - -CeilingSystems.element_children = [ - ("CeilingSystem", CeilingSystem), -] - - -# BuildingSync.Facilities.Facility.Systems.FenestrationSystems.FenestrationSystem -class FenestrationSystem(FenestrationSystemType): - pass - - -# BuildingSync.Facilities.Facility.Systems.FenestrationSystems -class FenestrationSystems(BSElement): - pass - - -FenestrationSystems.element_children = [ - ("FenestrationSystem", FenestrationSystem), -] - -# BuildingSync.Facilities.Facility.Systems.ExteriorFloorSystems.ExteriorFloorSystem -class ExteriorFloorSystem(ExteriorFloorSystemType): - pass - - -# BuildingSync.Facilities.Facility.Systems.ExteriorFloorSystems -class ExteriorFloorSystems(BSElement): - pass - - -ExteriorFloorSystems.element_children = [ - ("ExteriorFloorSystem", ExteriorFloorSystem), -] - - -# BuildingSync.Facilities.Facility.Systems.FoundationSystems.FoundationSystem -class FoundationSystem(FoundationSystemType): - pass - - -# BuildingSync.Facilities.Facility.Systems.FoundationSystems -class FoundationSystems(BSElement): - pass - - -FoundationSystems.element_children = [ - ("FoundationSystem", FoundationSystem), -] - - # LinkedPremises class LinkedPremises(BSElement): """Establishes whether the system applies to one or more entire buildings, sections, spaces, or zones within buildings. Power consuming system loads should be distributed in proportion to the floor areas of linked premises. Envelope systems should be distributed in proportion to the exterior surface areas of linked premises.""" @@ -15264,7 +15376,18 @@ class WaterInfiltrationSystem(BSElement): LocationsOfInteriorWaterIntrusionDamages, ), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), + ("WaterInfiltrationSystemCondition", WaterInfiltrationSystemCondition), + ("EquipmentID", EquipmentID), + ("Location", Location), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("PrimaryFuel", PrimaryFuel), + ("Quantity", Quantity), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), ] @@ -15326,21 +15449,6 @@ class Tenants(BSElement): ] -# BuildingSync.Facilities.Facility.AuditCycles.AuditCycle -class AuditCycle(AuditCycleType): - pass - - -# BuildingSync.Facilities.Facility.AuditCycles -class AuditCycles(BSElement): - pass - - -AuditCycles.element_children = [ - ("AuditCycle", AuditCycle), -] - - # ThermalZoneType.Spaces class Spaces(BSElement): """Areas of a building that share systems characteristics such as occupancy, plug loads, or lighting.""" @@ -15444,7 +15552,7 @@ class Benchmark(BSElement): ] -# MeasureType.MeasureSavingsAnalysis +# MeasureSavingsAnalysis class MeasureSavingsAnalysis(BSElement): """Energy and cost effectiveness data for an individual measure. In most cases, this data depends on the other measures included in the package, and should be entered at the package level under Scenarios.""" @@ -15466,6 +15574,11 @@ class MeasureSavingsAnalysis(BSElement): ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), + ("LifeCycleSavingsEnergy", LifeCycleSavingsEnergy), + ("LifeCycleSavingsEnergyCost", LifeCycleSavingsEnergyCost), + ("LifeCycleSavingsWater", LifeCycleSavingsWater), + ("LifeCycleSavingsWaterCost", LifeCycleSavingsWaterCost), + ("LifeCycleSavingsAncillaryCost", LifeCycleSavingsAncillaryCost), ("OMCostAnnualSavings", OMCostAnnualSavings), ("OtherCostAnnualSavings", OtherCostAnnualSavings), ("EquipmentDisposalAndSalvageCosts", EquipmentDisposalAndSalvageCosts), @@ -15479,88 +15592,14 @@ class MeasureSavingsAnalysis(BSElement): ] -# ScenarioType.ScenarioType.PackageOfMeasures.MeasureIDs.MeasureID -class MeasureID(BSElement): - """ID number of measure.""" +# ScenarioType.ResourceUses.ResourceUse +class ResourceUse(ResourceUseType): + pass -MeasureID.element_attributes = [ - "IDref", # IDREF -] -MeasureID.element_children = [ - ("MeasureSavingsAnalysis", MeasureSavingsAnalysis), -] - - -# ScenarioType.ScenarioType.PackageOfMeasures.MeasureIDs -class MeasureIDs(BSElement): - """ID numbers for measures included in the package. Multiple items may be selected.""" - - -MeasureIDs.element_children = [ - ("MeasureID", MeasureID), -] - - -# ScenarioType.ScenarioType.PackageOfMeasures -class PackageOfMeasures(BSElement): - pass - - -PackageOfMeasures.element_attributes = [ - "ID", # ID -] -PackageOfMeasures.element_children = [ - ("ReferenceCase", ReferenceCase), - ("MeasureIDs", MeasureIDs), - ("CostCategory", CostCategory), - ("SimpleImpactAnalysis", SimpleImpactAnalysis), - ("CalculationMethod", CalculationMethod), - ("AnnualSavingsSiteEnergy", AnnualSavingsSiteEnergy), - ("AnnualSavingsSourceEnergy", AnnualSavingsSourceEnergy), - ("AnnualSavingsCost", AnnualSavingsCost), - ("AnnualSavingsByFuels", AnnualSavingsByFuels), - ("SummerPeakElectricityReduction", SummerPeakElectricityReduction), - ("WinterPeakElectricityReduction", WinterPeakElectricityReduction), - ("AnnualPeakElectricityReduction", AnnualPeakElectricityReduction), - ("AnnualDemandSavingsCost", AnnualDemandSavingsCost), - ("AnnualWaterSavings", AnnualWaterSavings), - ("AnnualWaterCostSavings", AnnualWaterCostSavings), - ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), - ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), - ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), - ("ImplementationPeriod", ImplementationPeriod), - ("PackageFirstCost", PackageFirstCost), - ("MVCost", MVCost), - ("OMCostAnnualSavings", OMCostAnnualSavings), - ("EquipmentDisposalAndSalvageCosts", EquipmentDisposalAndSalvageCosts), - ("ImplementationPeriodCostSavings", ImplementationPeriodCostSavings), - ("PercentGuaranteedSavings", PercentGuaranteedSavings), - ("ProjectMarkup", ProjectMarkup), - ("FundingFromIncentives", FundingFromIncentives), - ("FundingFromTaxCredits", FundingFromTaxCredits), - ("OtherFinancialIncentives", OtherFinancialIncentives), - ("RecurringIncentives", RecurringIncentives), - ("NPVofTaxImplications", NPVofTaxImplications), - ("CostEffectivenessScreeningMethod", CostEffectivenessScreeningMethod), - ("SimplePayback", SimplePayback), - ("NetPresentValue", NetPresentValue), - ("InternalRateOfReturn", InternalRateOfReturn), - ("NonquantifiableFactors", NonquantifiableFactors), - ("AssetScore", AssetScore), - ("ENERGYSTARScore", ENERGYSTARScore), - ("UserDefinedFields", UserDefinedFields), -] - - -# ScenarioType.ResourceUses.ResourceUse -class ResourceUse(ResourceUseType): - pass - - -# UtilityType -class UtilityType(BSElement): - pass +# UtilityType +class UtilityType(BSElement): + pass UtilityType.element_attributes = [ @@ -15620,39 +15659,104 @@ class ControlSystemTypes(BSElement): ("BuildingAutomationSystem", BuildingAutomationSystem), ("ControlSystemTypes", HeatingPlantType.ControlSystemTypes), ("UserDefinedFields", UserDefinedFields), + ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("Quantity", Quantity), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), ] HeatingPlantType.ControlSystemTypes.element_children = [ ("ControlSystemType", ControlSystemType), ] -# HVACSystemType.Plants.CoolingPlants.CoolingPlant -class CoolingPlant(CoolingPlantType): - """Type of cooling plant. Zonal cooling is recorded in a separate data field. Use of fans or blowers by themselves without chilled air or water is not included in this definition of cooling. Stand-alone dehumidifiers are also not included.""" +# CoolingPlantType +class CoolingPlantType(BSElement): + class OtherCombination(OtherCombination): + pass + class NoCooling(NoCooling): + pass -# HVACSystemType.Plants.CoolingPlants -class CoolingPlants(BSElement): - pass + class Unknown(Unknown): + pass + class ControlSystemTypes(BSElement): + """CoolingPlant equipment control strategies.""" -CoolingPlants.element_children = [ - ("CoolingPlant", CoolingPlant), + +CoolingPlantType.element_attributes = [ + "ID", # ID + "Status", # Status +] +CoolingPlantType.element_children = [ + ("Chiller", Chiller), + ("DistrictChilledWater", DistrictChilledWater), + ("OtherCombination", OtherCombination), + ("NoCooling", NoCooling), + ("Unknown", Unknown), + ("CondenserType", CondenserType), + ("CoolingPlantCondition", CoolingPlantCondition), + ("Location", Location), + ("YearInstalled", YearInstalled), + ("PrimaryFuel", PrimaryFuel), + ("BuildingAutomationSystem", BuildingAutomationSystem), + ("ControlSystemTypes", CoolingPlantType.ControlSystemTypes), + ("UserDefinedFields", UserDefinedFields), + ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("Quantity", Quantity), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), +] +CoolingPlantType.ControlSystemTypes.element_children = [ + ("ControlSystemType", ControlSystemType), ] -# HVACSystemType.Plants.CondenserPlants.CondenserPlant -class CondenserPlant(CondenserPlantType): - """Type of condenser used for refrigerant-based systems.""" +# CondenserPlantType +class CondenserPlantType(BSElement): + class Other(OtherType): + pass + class Unknown(Unknown): + pass -# HVACSystemType.Plants.CondenserPlants -class CondenserPlants(BSElement): - pass + class ControlSystemTypes(BSElement): + """CondenserPlant equipment control strategies.""" -CondenserPlants.element_children = [ - ("CondenserPlant", CondenserPlant), +CondenserPlantType.element_attributes = [ + "ID", # ID +] +CondenserPlantType.element_children = [ + ("AirCooled", AirCooled), + ("WaterCooled", WaterCooled), + ("GroundSource", GroundSource), + ("GlycolCooledDryCooler", GlycolCooledDryCooler), + ("Other", CondenserPlantType.Other), + ("Unknown", Unknown), + ("CondenserPlantCondition", CondenserPlantCondition), + ("Location", Location), + ("YearInstalled", YearInstalled), + ("PrimaryFuel", PrimaryFuel), + ("BuildingAutomationSystem", BuildingAutomationSystem), + ("ControlSystemTypes", CondenserPlantType.ControlSystemTypes), + ("UserDefinedFields", UserDefinedFields), + ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("Quantity", Quantity), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), +] +CondenserPlantType.ControlSystemTypes.element_children = [ + ("ControlSystemType", ControlSystemType), ] @@ -15700,6 +15804,8 @@ class Control(ControlGeneralType): ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("ThirdPartyCertification", ThirdPartyCertification), ] HeatingSource.Controls.element_children = [ ("Control", HeatingSource.Controls.Control), @@ -15716,6 +15822,59 @@ class HeatingSources(BSElement): ] +# HVACSystemType.HeatingAndCoolingSystems.CoolingSources.CoolingSource +class CoolingSource(BSElement): + class Controls(BSElement): + """List of controls for CoolingSource.""" + + class Control(ControlGeneralType): + """CoolingSource control.""" + + +CoolingSource.element_attributes = [ + "ID", # ID + "Status", # Status +] +CoolingSource.element_children = [ + ("CoolingSourceType", CoolingSourceType), + ("CoolingMedium", CoolingMedium), + ("AnnualCoolingEfficiencyValue", AnnualCoolingEfficiencyValue), + ("AnnualCoolingEfficiencyUnits", AnnualCoolingEfficiencyUnits), + ("Capacity", Capacity), + ("CapacityUnits", CapacityUnits), + ("NumberOfDiscreteCoolingStages", NumberOfDiscreteCoolingStages), + ("CoolingStageCapacity", CoolingStageCapacity), + ("MinimumPartLoadRatio", MinimumPartLoadRatio), + ("RatedCoolingSensibleHeatRatio", RatedCoolingSensibleHeatRatio), + ("ThirdPartyCertification", ThirdPartyCertification), + ("PrimaryFuel", PrimaryFuel), + ("CoolingSourceCondition", CoolingSourceCondition), + ("Controls", CoolingSource.Controls), + ("Location", Location), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("UserDefinedFields", UserDefinedFields), + ("Quantity", Quantity), + ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), +] +CoolingSource.Controls.element_children = [ + ("Control", CoolingSource.Controls.Control), +] + + +# HVACSystemType.HeatingAndCoolingSystems.CoolingSources +class CoolingSources(BSElement): + pass + + +CoolingSources.element_children = [ + ("CoolingSource", CoolingSource), +] + + # FanBased class FanBased(FanBasedType): pass @@ -15771,8 +15930,12 @@ class DuctSystemType(BSElement): ("HeatingDeliveryID", HeatingDeliveryID), ("CoolingDeliveryID", CoolingDeliveryID), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), + ("DuctSystemCondition", DuctSystemCondition), ("EquipmentID", EquipmentID), + ("PrimaryFuel", PrimaryFuel), + ("ThirdPartyCertification", ThirdPartyCertification), ] @@ -15796,6 +15959,47 @@ class Unknown(Unknown): ] +# RefrigerationSystemType.RefrigerationSystemCategory.RefrigerationUnit.AntiSweatHeaters +class AntiSweatHeaters(BSElement): + """If exists then refrigerated cases include anti-sweat heaters.""" + + +AntiSweatHeaters.element_children = [ + ("AntiSweatHeaterPower", AntiSweatHeaterPower), + ("AntiSweatHeaterControls", AntiSweatHeaterControls), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("EquipmentID", EquipmentID), + ("AntiSweatHeaterCondition", AntiSweatHeaterCondition), + ("LinkedPremises", LinkedPremises), + ("Location", Location), + ("PrimaryFuel", PrimaryFuel), + ("Quantity", Quantity), + ("ThirdPartyCertification", ThirdPartyCertification), + ("UserDefinedFields", UserDefinedFields), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), +] + + +# RefrigerationSystemType.RefrigerationSystemCategory.RefrigerationUnit +class RefrigerationUnit(BSElement): + pass + + +RefrigerationUnit.element_children = [ + ("RefrigerationUnitType", RefrigerationUnitType), + ("DoorConfiguration", DoorConfiguration), + ("RefrigeratedCaseDoors", RefrigeratedCaseDoors), + ("CaseDoorOrientation", CaseDoorOrientation), + ("DefrostingType", DefrostingType), + ("LampPower", LampPower), + ("RefrigerationUnitSize", RefrigerationUnitSize), + ("AntiSweatHeaters", AntiSweatHeaters), + ("RefrigerationEnergy", RefrigerationEnergy), +] + + # PoolType.Heated class Heated(BSElement): """If exists then the pool is heated.""" @@ -15873,6 +16077,7 @@ class Control(ControlGeneralType): ("Location", Location), ("DomesticHotWaterSystemCondition", DomesticHotWaterSystemCondition), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), @@ -15906,34 +16111,11 @@ class CookingSystemType(BSElement): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), -] - - -# RefrigerationSystemType -class RefrigerationSystemType(BSElement): - pass - - -RefrigerationSystemType.element_attributes = [ - "ID", # ID - "Status", # Status -] -RefrigerationSystemType.element_children = [ - ("RefrigerationSystemCategory", RefrigerationSystemCategory), - ("ThirdPartyCertification", ThirdPartyCertification), - ("YearInstalled", YearInstalled), - ("YearOfManufacture", YearOfManufacture), - ("PrimaryFuel", PrimaryFuel), - ("Manufacturer", Manufacturer), - ("ModelNumber", ModelNumber), - ("Location", Location), - ("LinkedPremises", LinkedPremises), - ("UserDefinedFields", UserDefinedFields), - ("Quantity", Quantity), - ("EquipmentID", EquipmentID), + ("CookingSystemCondition", CookingSystemCondition), ] @@ -15966,9 +16148,11 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("DishwasherSystemCondition", DishwasherSystemCondition), ] DishwasherSystemType.Controls.element_children = [ ("Control", DishwasherSystemType.Controls.Control), @@ -16001,9 +16185,11 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("LaundrySystemCondition", LaundrySystemCondition), ] LaundrySystemType.Controls.element_children = [ ("Control", LaundrySystemType.Controls.Control), @@ -16045,6 +16231,8 @@ class Control(ControlGeneralType): ("LinkedSystemIDs", LinkedSystemIDs), ("UserDefinedFields", UserDefinedFields), ("EquipmentID", EquipmentID), + ("PumpSystemCondition", PumpSystemCondition), + ("LinkedPremises", LinkedPremises), ] PumpSystemType.Controls.element_children = [ ("Control", PumpSystemType.Controls.Control), @@ -16092,88 +16280,321 @@ class Control(ControlGeneralType): ("Location", Location), ("LinkedPremises", LinkedPremises), ("LinkedSystemIDs", LinkedSystemIDs), + ("LinkedFiles", LinkedFiles), + ("UserDefinedFields", UserDefinedFields), + ("EquipmentID", EquipmentID), + ("FanSystemCondition", FanSystemCondition), +] +FanSystemType.Controls.element_children = [ + ("Control", FanSystemType.Controls.Control), +] + + +# MotorSystemType +class MotorSystemType(BSElement): + class Controls(BSElement): + """List of controls for MotorSystem.""" + + class Control(ControlGeneralType): + """MotorSystem control.""" + + +MotorSystemType.element_attributes = [ + "ID", # ID + "Status", # Status +] +MotorSystemType.element_children = [ + ("MotorRPM", MotorRPM), + ("MotorBrakeHP", MotorBrakeHP), + ("MotorHP", MotorHP), + ("MotorEfficiency", MotorEfficiency), + ("DriveEfficiency", DriveEfficiency), + ("FullLoadAmps", FullLoadAmps), + ("MotorPoleCount", MotorPoleCount), + ("MotorEnclosureType", MotorEnclosureType), + ("MotorApplication", MotorApplication), + ("Controls", MotorSystemType.Controls), + ("ThirdPartyCertification", ThirdPartyCertification), + ("Quantity", Quantity), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), + ("PrimaryFuel", PrimaryFuel), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("Location", Location), + ("LinkedPremises", LinkedPremises), + ("LinkedSystemIDs", LinkedSystemIDs), + ("LinkedFiles", LinkedFiles), + ("UserDefinedFields", UserDefinedFields), + ("EquipmentID", EquipmentID), + ("MotorSystemCondition", MotorSystemCondition), +] +MotorSystemType.Controls.element_children = [ + ("Control", MotorSystemType.Controls.Control), +] + + +# HeatRecoverySystemType +class HeatRecoverySystemType(BSElement): + class Controls(BSElement): + """List of controls for heat recovery system.""" + + class Control(ControlGeneralType): + """Heat recovery system control.""" + + +HeatRecoverySystemType.element_attributes = [ + "ID", # ID + "Status", # Status +] +HeatRecoverySystemType.element_children = [ + ("HeatRecoveryEfficiency", HeatRecoveryEfficiency), + ("EnergyRecoveryEfficiency", EnergyRecoveryEfficiency), + ("HeatRecoveryType", HeatRecoveryType), + ("SystemIDReceivingHeat", SystemIDReceivingHeat), + ("SystemIDProvidingHeat", SystemIDProvidingHeat), + ("Controls", HeatRecoverySystemType.Controls), + ("ThirdPartyCertification", ThirdPartyCertification), + ("Quantity", Quantity), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("Location", Location), + ("UserDefinedFields", UserDefinedFields), + ("EquipmentID", EquipmentID), + ("HeatRecoverySystemCondition", HeatRecoverySystemCondition), + ("LinkedPremises", LinkedPremises), + ("PrimaryFuel", PrimaryFuel), +] +HeatRecoverySystemType.Controls.element_children = [ + ("Control", HeatRecoverySystemType.Controls.Control), +] + + +# WallSystemType +class WallSystemType(BSElement): + pass + + +WallSystemType.element_attributes = [ + "ID", # ID + "Status", # Status +] +WallSystemType.element_children = [ + ("ExteriorWallConstruction", ExteriorWallConstruction), + ("ExteriorWallFinish", ExteriorWallFinish), + ("ExteriorWallColor", ExteriorWallColor), + ("WallInsulations", WallInsulations), + ("WallRValue", WallRValue), + ("WallUFactor", WallUFactor), + ("WallFramingMaterial", WallFramingMaterial), + ("WallFramingSpacing", WallFramingSpacing), + ("WallFramingDepth", WallFramingDepth), + ("WallFramingFactor", WallFramingFactor), + ("CMUFill", CMUFill), + ("WallExteriorSolarAbsorptance", WallExteriorSolarAbsorptance), + ("WallExteriorThermalAbsorptance", WallExteriorThermalAbsorptance), + ("InteriorVisibleAbsorptance", InteriorVisibleAbsorptance), + ("ExteriorRoughness", ExteriorRoughness), + ("Quantity", Quantity), + ("YearInstalled", YearInstalled), + ("UserDefinedFields", UserDefinedFields), + ("WallSystemCondition", WallSystemCondition), + ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("Location", Location), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("PrimaryFuel", PrimaryFuel), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), +] + + +# RoofSystemType +class RoofSystemType(BSElement): + pass + + +RoofSystemType.element_attributes = [ + "ID", # ID + "Status", # Status +] +RoofSystemType.element_children = [ + ("RoofConstruction", RoofConstruction), + ("BlueRoof", BlueRoof), + ("CoolRoof", CoolRoof), + ("GreenRoof", GreenRoof), + ("RoofFinish", RoofFinish), + ("RoofColor", RoofColor), + ("RoofInsulations", RoofInsulations), + ("DeckType", DeckType), + ("RoofRValue", RoofRValue), + ("RoofUFactor", RoofUFactor), + ("RoofFramingMaterial", RoofFramingMaterial), + ("RoofFramingSpacing", RoofFramingSpacing), + ("RoofFramingDepth", RoofFramingDepth), + ("RoofFramingFactor", RoofFramingFactor), + ("RoofSlope", RoofSlope), + ("RadiantBarrier", RadiantBarrier), + ("RoofExteriorSolarAbsorptance", RoofExteriorSolarAbsorptance), + ("RoofExteriorSolarReflectanceIndex", RoofExteriorSolarReflectanceIndex), + ("RoofExteriorThermalAbsorptance", RoofExteriorThermalAbsorptance), + ("Quantity", Quantity), + ("YearInstalled", YearInstalled), + ("UserDefinedFields", UserDefinedFields), + ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("Location", Location), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("PrimaryFuel", PrimaryFuel), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), +] + + +# CeilingSystemType +class CeilingSystemType(BSElement): + pass + + +CeilingSystemType.element_attributes = [ + "ID", # ID + "Status", # Status +] +CeilingSystemType.element_children = [ + ("CeilingConstruction", CeilingConstruction), + ("CeilingFinish", CeilingFinish), + ("CeilingColor", CeilingColor), + ("CeilingInsulations", CeilingInsulations), + ("CeilingRValue", CeilingRValue), + ("CeilingUFactor", CeilingUFactor), + ("CeilingFramingMaterial", CeilingFramingMaterial), + ("CeilingFramingSpacing", CeilingFramingSpacing), + ("CeilingFramingDepth", CeilingFramingDepth), + ("CeilingFramingFactor", CeilingFramingFactor), + ("CeilingVisibleAbsorptance", CeilingVisibleAbsorptance), + ("Quantity", Quantity), + ("YearInstalled", YearInstalled), ("UserDefinedFields", UserDefinedFields), + ("CeilingSystemCondition", CeilingSystemCondition), ("EquipmentID", EquipmentID), -] -FanSystemType.Controls.element_children = [ - ("Control", FanSystemType.Controls.Control), + ("LinkedPremises", LinkedPremises), + ("Location", Location), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("PrimaryFuel", PrimaryFuel), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), ] -# MotorSystemType -class MotorSystemType(BSElement): - class Controls(BSElement): - """List of controls for MotorSystem.""" - - class Control(ControlGeneralType): - """MotorSystem control.""" +# FenestrationSystemType +class FenestrationSystemType(BSElement): + pass -MotorSystemType.element_attributes = [ +FenestrationSystemType.element_attributes = [ "ID", # ID "Status", # Status ] -MotorSystemType.element_children = [ - ("MotorRPM", MotorRPM), - ("MotorBrakeHP", MotorBrakeHP), - ("MotorHP", MotorHP), - ("MotorEfficiency", MotorEfficiency), - ("DriveEfficiency", DriveEfficiency), - ("FullLoadAmps", FullLoadAmps), - ("MotorPoleCount", MotorPoleCount), - ("MotorEnclosureType", MotorEnclosureType), - ("MotorApplication", MotorApplication), - ("Controls", MotorSystemType.Controls), +FenestrationSystemType.element_children = [ + ("FenestrationType", FenestrationType), + ("FenestrationFrameMaterial", FenestrationFrameMaterial), + ("FenestrationOperation", FenestrationOperation), + ("Weatherstripped", Weatherstripped), + ("TightnessFitCondition", TightnessFitCondition), + ("GlassType", GlassType), + ("FenestrationGasFill", FenestrationGasFill), + ("FenestrationGlassLayers", FenestrationGlassLayers), + ("FenestrationRValue", FenestrationRValue), + ("FenestrationUFactor", FenestrationUFactor), + ("SolarHeatGainCoefficient", SolarHeatGainCoefficient), + ("VisibleTransmittance", VisibleTransmittance), ("ThirdPartyCertification", ThirdPartyCertification), ("Quantity", Quantity), ("YearInstalled", YearInstalled), - ("YearOfManufacture", YearOfManufacture), - ("PrimaryFuel", PrimaryFuel), ("Manufacturer", Manufacturer), ("ModelNumber", ModelNumber), - ("Location", Location), - ("LinkedPremises", LinkedPremises), - ("LinkedSystemIDs", LinkedSystemIDs), ("UserDefinedFields", UserDefinedFields), ("EquipmentID", EquipmentID), -] -MotorSystemType.Controls.element_children = [ - ("Control", MotorSystemType.Controls.Control), + ("FenestrationSystemCondition", FenestrationSystemCondition), + ("LinkedPremises", LinkedPremises), + ("Location", Location), + ("PrimaryFuel", PrimaryFuel), + ("YearOfManufacture", YearOfManufacture), ] -# HeatRecoverySystemType -class HeatRecoverySystemType(BSElement): - class Controls(BSElement): - """List of controls for heat recovery system.""" - - class Control(ControlGeneralType): - """Heat recovery system control.""" +# ExteriorFloorSystemType +class ExteriorFloorSystemType(BSElement): + pass -HeatRecoverySystemType.element_attributes = [ +ExteriorFloorSystemType.element_attributes = [ "ID", # ID "Status", # Status ] -HeatRecoverySystemType.element_children = [ - ("HeatRecoveryEfficiency", HeatRecoveryEfficiency), - ("EnergyRecoveryEfficiency", EnergyRecoveryEfficiency), - ("HeatRecoveryType", HeatRecoveryType), - ("SystemIDReceivingHeat", SystemIDReceivingHeat), - ("SystemIDProvidingHeat", SystemIDProvidingHeat), - ("Controls", HeatRecoverySystemType.Controls), - ("ThirdPartyCertification", ThirdPartyCertification), +ExteriorFloorSystemType.element_children = [ + ("ExteriorFloorConstruction", ExteriorFloorConstruction), + ("ExteriorFloorFinish", ExteriorFloorFinish), + ("ExteriorFloorColor", ExteriorFloorColor), + ("ExteriorFloorRValue", ExteriorFloorRValue), + ("ExteriorFloorUFactor", ExteriorFloorUFactor), + ("ExteriorFloorFramingMaterial", ExteriorFloorFramingMaterial), + ("ExteriorFloorFramingSpacing", ExteriorFloorFramingSpacing), + ("ExteriorFloorFramingDepth", ExteriorFloorFramingDepth), + ("ExteriorFloorFramingFactor", ExteriorFloorFramingFactor), + ("ExteriorFloorExteriorSolarAbsorptance", ExteriorFloorExteriorSolarAbsorptance), + ( + "ExteriorFloorExteriorThermalAbsorptance", + ExteriorFloorExteriorThermalAbsorptance, + ), + ("InteriorVisibleAbsorptance", InteriorVisibleAbsorptance), + ("ExteriorRoughness", ExteriorRoughness), ("Quantity", Quantity), ("YearInstalled", YearInstalled), - ("YearOfManufacture", YearOfManufacture), + ("UserDefinedFields", UserDefinedFields), + ("ExteriorFloorSystemCondition", ExteriorFloorSystemCondition), + ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("Location", Location), ("Manufacturer", Manufacturer), ("ModelNumber", ModelNumber), - ("Location", Location), + ("PrimaryFuel", PrimaryFuel), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), +] + + +# FoundationSystemType +class FoundationSystemType(BSElement): + pass + + +FoundationSystemType.element_attributes = [ + "ID", # ID + "Status", # Status +] +FoundationSystemType.element_children = [ + ("GroundCouplings", GroundCouplings), + ("FloorCovering", FloorCovering), + ("FloorConstructionType", FloorConstructionType), + ("PlumbingPenetrationSealing", PlumbingPenetrationSealing), + ("YearInstalled", YearInstalled), ("UserDefinedFields", UserDefinedFields), + ("Quantity", Quantity), + ("FoundationSystemCondition", FoundationSystemCondition), ("EquipmentID", EquipmentID), -] -HeatRecoverySystemType.Controls.element_children = [ - ("Control", HeatRecoverySystemType.Controls.Control), + ("LinkedPremises", LinkedPremises), + ("Location", Location), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("PrimaryFuel", PrimaryFuel), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearOfManufacture", YearOfManufacture), ] @@ -16204,9 +16625,11 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("CriticalITSystemCondition", CriticalITSystemCondition), ] CriticalITSystemType.Controls.element_children = [ ("Control", CriticalITSystemType.Controls.Control), @@ -16242,9 +16665,11 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("PlugElectricLoadCondition", PlugElectricLoadCondition), ] PlugElectricLoadType.Controls.element_children = [ ("Control", PlugElectricLoadType.Controls.Control), @@ -16281,9 +16706,11 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("ProcessGasElectricLoadCondition", ProcessGasElectricLoadCondition), ] ProcessGasElectricLoadType.Controls.element_children = [ ("Control", ProcessGasElectricLoadType.Controls.Control), @@ -16332,6 +16759,7 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("EquipmentID", EquipmentID), ] @@ -16368,9 +16796,15 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ( + "OnsiteStorageTransmissionGenerationSystemCondition", + OnsiteStorageTransmissionGenerationSystemCondition, + ), + ("PrimaryFuel", PrimaryFuel), ] OnsiteStorageTransmissionGenerationSystemType.Controls.element_children = [ ("Control", OnsiteStorageTransmissionGenerationSystemType.Controls.Control), @@ -16404,8 +16838,12 @@ class PoolType(BSElement): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("EquipmentID", EquipmentID), + ("PoolCondition", PoolCondition), + ("PrimaryFuel", PrimaryFuel), + ("YearOfManufacture", YearOfManufacture), ] @@ -16467,9 +16905,12 @@ class Control(ControlGeneralType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("WaterSystemCondition", WaterSystemCondition), + ("PrimaryFuel", PrimaryFuel), ] WaterUseType.Controls.element_children = [ ("Control", WaterUseType.Controls.Control), @@ -16494,7 +16935,18 @@ class Tightness(Tightness): ("AirInfiltrationValueUnits", AirInfiltrationValueUnits), ("AirInfiltrationTest", AirInfiltrationTest), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), + ("AirInfiltrationSystemCondition", AirInfiltrationSystemCondition), + ("EquipmentID", EquipmentID), + ("Location", Location), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("PrimaryFuel", PrimaryFuel), + ("Quantity", Quantity), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), ] @@ -16535,6 +16987,7 @@ class MeasureType(BSElement): ("TypeOfMeasure", TypeOfMeasure), ("SystemCategoryAffected", SystemCategoryAffected), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("TechnologyCategories", TechnologyCategories), ("MeasureScaleOfApplication", MeasureScaleOfApplication), ("CustomMeasureName", CustomMeasureName), @@ -16602,6 +17055,85 @@ class CurrentBuilding(BSElement): ] +# ScenarioType.ScenarioType.PackageOfMeasures.MeasureIDs.MeasureID +class MeasureID(BSElement): + """ID number of measure.""" + + +MeasureID.element_attributes = [ + "IDref", # IDREF +] +MeasureID.element_children = [ + ("MeasureSavingsAnalysis", MeasureSavingsAnalysis), +] + + +# ScenarioType.ScenarioType.PackageOfMeasures.MeasureIDs +class MeasureIDs(BSElement): + """ID numbers for measures included in the package. Multiple items may be selected.""" + + +MeasureIDs.element_children = [ + ("MeasureID", MeasureID), +] + + +# ScenarioType.ScenarioType.PackageOfMeasures +class PackageOfMeasures(BSElement): + pass + + +PackageOfMeasures.element_attributes = [ + "ID", # ID +] +PackageOfMeasures.element_children = [ + ("ReferenceCase", ReferenceCase), + ("MeasureIDs", MeasureIDs), + ("CostCategory", CostCategory), + ("SimpleImpactAnalysis", SimpleImpactAnalysis), + ("CalculationMethod", CalculationMethod), + ("AnnualSavingsSiteEnergy", AnnualSavingsSiteEnergy), + ("AnnualSavingsSourceEnergy", AnnualSavingsSourceEnergy), + ("AnnualSavingsCost", AnnualSavingsCost), + ("AnnualSavingsByFuels", AnnualSavingsByFuels), + ("SummerPeakElectricityReduction", SummerPeakElectricityReduction), + ("WinterPeakElectricityReduction", WinterPeakElectricityReduction), + ("AnnualPeakElectricityReduction", AnnualPeakElectricityReduction), + ("AnnualDemandSavingsCost", AnnualDemandSavingsCost), + ("AnnualWaterSavings", AnnualWaterSavings), + ("AnnualWaterCostSavings", AnnualWaterCostSavings), + ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), + ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), + ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), + ("LifeCycleSavingsEnergy", LifeCycleSavingsEnergy), + ("LifeCycleSavingsEnergyCost", LifeCycleSavingsEnergyCost), + ("LifeCycleSavingsWater", LifeCycleSavingsWater), + ("LifeCycleSavingsWaterCost", LifeCycleSavingsWaterCost), + ("LifeCycleSavingsAncillaryCost", LifeCycleSavingsAncillaryCost), + ("ImplementationPeriod", ImplementationPeriod), + ("PackageFirstCost", PackageFirstCost), + ("MVCost", MVCost), + ("OMCostAnnualSavings", OMCostAnnualSavings), + ("EquipmentDisposalAndSalvageCosts", EquipmentDisposalAndSalvageCosts), + ("ImplementationPeriodCostSavings", ImplementationPeriodCostSavings), + ("PercentGuaranteedSavings", PercentGuaranteedSavings), + ("ProjectMarkup", ProjectMarkup), + ("FundingFromIncentives", FundingFromIncentives), + ("FundingFromTaxCredits", FundingFromTaxCredits), + ("OtherFinancialIncentives", OtherFinancialIncentives), + ("RecurringIncentives", RecurringIncentives), + ("NPVofTaxImplications", NPVofTaxImplications), + ("CostEffectivenessScreeningMethod", CostEffectivenessScreeningMethod), + ("SimplePayback", SimplePayback), + ("NetPresentValue", NetPresentValue), + ("InternalRateOfReturn", InternalRateOfReturn), + ("NonquantifiableFactors", NonquantifiableFactors), + ("AssetScore", AssetScore), + ("ENERGYSTARScore", ENERGYSTARScore), + ("UserDefinedFields", UserDefinedFields), +] + + # DerivedModelType class DerivedModelType(BSElement): """A derived model represents a supervised or unsupervised learning model derived from data presented in a scenario.""" @@ -16634,13 +17166,43 @@ class HeatingPlant(HeatingPlantType): """Type of central heating system, defined as any source of heating energy separate from the zone being heated. Local heating systems (such as packaged systems and fan-coils) are recorded in a separate data field.""" -# HVACSystemType.Plants.HeatingPlants -class HeatingPlants(BSElement): +# HVACSystemType.Plants.HeatingPlants +class HeatingPlants(BSElement): + pass + + +HeatingPlants.element_children = [ + ("HeatingPlant", HeatingPlant), +] + + +# HVACSystemType.Plants.CoolingPlants.CoolingPlant +class CoolingPlant(CoolingPlantType): + """Type of cooling plant. Zonal cooling is recorded in a separate data field. Use of fans or blowers by themselves without chilled air or water is not included in this definition of cooling. Stand-alone dehumidifiers are also not included.""" + + +# HVACSystemType.Plants.CoolingPlants +class CoolingPlants(BSElement): + pass + + +CoolingPlants.element_children = [ + ("CoolingPlant", CoolingPlant), +] + + +# HVACSystemType.Plants.CondenserPlants.CondenserPlant +class CondenserPlant(CondenserPlantType): + """Type of condenser used for refrigerant-based systems.""" + + +# HVACSystemType.Plants.CondenserPlants +class CondenserPlants(BSElement): pass -HeatingPlants.element_children = [ - ("HeatingPlant", HeatingPlant), +CondenserPlants.element_children = [ + ("CondenserPlant", CondenserPlant), ] @@ -16702,6 +17264,9 @@ class Control(ControlGeneralType): ("Quantity", Quantity), ("DeliveryCondition", DeliveryCondition), ("EquipmentID", EquipmentID), + ("LinkedPremises", LinkedPremises), + ("Location", Location), + ("UserDefinedFields", UserDefinedFields), ] Delivery.Controls.element_children = [ ("Control", Delivery.Controls.Control), @@ -16747,17 +17312,30 @@ class Control(ControlGeneralType): ("YearOfManufacture", YearOfManufacture), ("YearInstalled", YearInstalled), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("Integration", Integration), ("LinkedDeliveryIDs", LinkedDeliveryIDs), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("ThirdPartyCertification", ThirdPartyCertification), ] OtherHVACSystemType.Controls.element_children = [ ("Control", OtherHVACSystemType.Controls.Control), ] +# RefrigerationSystemType.RefrigerationSystemCategory +class RefrigerationSystemCategory(BSElement): + """Basic type of refrigeration equipment.""" + + +RefrigerationSystemCategory.element_children = [ + ("CentralRefrigerationSystem", CentralRefrigerationSystem), + ("RefrigerationUnit", RefrigerationUnit), +] + + # LightingSystemType class LightingSystemType(BSElement): class Controls(BSElement): @@ -16802,47 +17380,17 @@ class Control(ControlLightingType): ("ModelNumber", ModelNumber), ("Location", Location), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), ("EquipmentID", EquipmentID), + ("LightingSystemCondition", LightingSystemCondition), ] LightingSystemType.Controls.element_children = [ ("Control", LightingSystemType.Controls.Control), ] -# PrincipalLightingSystemType -class PrincipalLightingSystemType(BSElement): - """Principal Lighting type for a building or a section. The usage of this element is not recommended except for Audit Template use cases.""" - - element_type = "xs:string" - element_enumerations = [ - "Incandescent", - "Linear Fluorescent", - "Compact Fluorescent", - "Halogen", - "High Intensity Discharge", - "Solid State Lighting", - "LED", - "Mercury Vapor", - "Metal Halide", - "Sodium Vapor High Pressure", - "T5", - "T5HO", - "T8", - "Super T8", - "T12", - "T12HO", - "Induction", - "Neon", - "Plasma", - "Photoluminescent", - "Self Luminous", - "Other", - "Unknown", - ] - - # BuildingSync.Facilities.Facility.Systems.DomesticHotWaterSystems.DomesticHotWaterSystem class DomesticHotWaterSystem(DomesticHotWaterSystemType): pass @@ -16873,18 +17421,30 @@ class CookingSystems(BSElement): ] -# BuildingSync.Facilities.Facility.Systems.RefrigerationSystems.RefrigerationSystem -class RefrigerationSystem(RefrigerationSystemType): - pass - - -# BuildingSync.Facilities.Facility.Systems.RefrigerationSystems -class RefrigerationSystems(BSElement): +# RefrigerationSystemType +class RefrigerationSystemType(BSElement): pass -RefrigerationSystems.element_children = [ - ("RefrigerationSystem", RefrigerationSystem), +RefrigerationSystemType.element_attributes = [ + "ID", # ID + "Status", # Status +] +RefrigerationSystemType.element_children = [ + ("RefrigerationSystemCategory", RefrigerationSystemCategory), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), + ("PrimaryFuel", PrimaryFuel), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("Location", Location), + ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), + ("UserDefinedFields", UserDefinedFields), + ("Quantity", Quantity), + ("EquipmentID", EquipmentID), + ("RefrigerationSystemCondition", RefrigerationSystemCondition), ] @@ -16978,6 +17538,96 @@ class HeatRecoverySystems(BSElement): ] +# BuildingSync.Facilities.Facility.Systems.WallSystems.WallSystem +class WallSystem(WallSystemType): + pass + + +# BuildingSync.Facilities.Facility.Systems.WallSystems +class WallSystems(BSElement): + pass + + +WallSystems.element_children = [ + ("WallSystem", WallSystem), +] + + +# BuildingSync.Facilities.Facility.Systems.RoofSystems.RoofSystem +class RoofSystem(RoofSystemType): + pass + + +# BuildingSync.Facilities.Facility.Systems.RoofSystems +class RoofSystems(BSElement): + pass + + +RoofSystems.element_children = [ + ("RoofSystem", RoofSystem), +] + + +# BuildingSync.Facilities.Facility.Systems.CeilingSystems.CeilingSystem +class CeilingSystem(CeilingSystemType): + pass + + +# BuildingSync.Facilities.Facility.Systems.CeilingSystems +class CeilingSystems(BSElement): + pass + + +CeilingSystems.element_children = [ + ("CeilingSystem", CeilingSystem), +] + + +# BuildingSync.Facilities.Facility.Systems.FenestrationSystems.FenestrationSystem +class FenestrationSystem(FenestrationSystemType): + pass + + +# BuildingSync.Facilities.Facility.Systems.FenestrationSystems +class FenestrationSystems(BSElement): + pass + + +FenestrationSystems.element_children = [ + ("FenestrationSystem", FenestrationSystem), +] + + +# BuildingSync.Facilities.Facility.Systems.ExteriorFloorSystems.ExteriorFloorSystem +class ExteriorFloorSystem(ExteriorFloorSystemType): + pass + + +# BuildingSync.Facilities.Facility.Systems.ExteriorFloorSystems +class ExteriorFloorSystems(BSElement): + pass + + +ExteriorFloorSystems.element_children = [ + ("ExteriorFloorSystem", ExteriorFloorSystem), +] + + +# BuildingSync.Facilities.Facility.Systems.FoundationSystems.FoundationSystem +class FoundationSystem(FoundationSystemType): + pass + + +# BuildingSync.Facilities.Facility.Systems.FoundationSystems +class FoundationSystems(BSElement): + pass + + +FoundationSystems.element_children = [ + ("FoundationSystem", FoundationSystem), +] + + # BuildingSync.Facilities.Facility.Systems.CriticalITSystems.CriticalITSystem class CriticalITSystem(CriticalITSystemType): pass @@ -17162,6 +17812,21 @@ class LightingSystems(BSElement): ] +# BuildingSync.Facilities.Facility.Systems.RefrigerationSystems.RefrigerationSystem +class RefrigerationSystem(RefrigerationSystemType): + pass + + +# BuildingSync.Facilities.Facility.Systems.RefrigerationSystems +class RefrigerationSystems(BSElement): + pass + + +RefrigerationSystems.element_children = [ + ("RefrigerationSystem", RefrigerationSystem), +] + + # BuildingType.Sections class Sections(BSElement): class Section(BSElement): @@ -17209,6 +17874,7 @@ class Section(BSElement): ("FloorsPartiallyBelowGrade", FloorsPartiallyBelowGrade), ("FloorToFloorHeight", FloorToFloorHeight), ("FloorToCeilingHeight", FloorToCeilingHeight), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("ThermalZones", ThermalZones), ] @@ -17226,7 +17892,8 @@ class OtherHVACSystems(BSElement): # HVACSystemType class HVACSystemType(BSElement): - pass + class PrincipalHVACSystemType(PrincipalHVACSystemType): + pass HVACSystemType.element_attributes = [ @@ -17245,8 +17912,17 @@ class HVACSystemType(BSElement): ("PrincipalHVACSystemType", PrincipalHVACSystemType), ("HVACControlSystemTypes", HVACControlSystemTypes), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ("Quantity", Quantity), + ("HVACSystemCondition", HVACSystemCondition), + ("EquipmentID", EquipmentID), + ("Manufacturer", Manufacturer), + ("ModelNumber", ModelNumber), + ("PrimaryFuel", PrimaryFuel), + ("ThirdPartyCertification", ThirdPartyCertification), + ("YearInstalled", YearInstalled), + ("YearOfManufacture", YearOfManufacture), ] @@ -17327,8 +18003,8 @@ class WeatherStations(WeatherStations): ("HorizontalSurroundings", HorizontalSurroundings), ("VerticalSurroundings", VerticalSurroundings), ("Assessments", Assessments), - ("YearOfConstruction", YearOfConstruction), ("PrincipalHVACSystemType", PrincipalHVACSystemType), + ("YearOfConstruction", YearOfConstruction), ("PrincipalLightingSystemType", PrincipalLightingSystemType), ("YearOccupied", YearOccupied), ("YearOfLastEnergyAudit", YearOfLastEnergyAudit), @@ -17340,6 +18016,7 @@ class WeatherStations(WeatherStations): ("NumberOfFacilitiesOnSite", NumberOfFacilitiesOnSite), ("OperatorType", OperatorType), ("Sections", Sections), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ] @@ -17371,6 +18048,7 @@ class ScenarioType(BSElement): ("HDDBaseTemperature", HDDBaseTemperature), ("CDDBaseTemperature", CDDBaseTemperature), ("LinkedPremises", LinkedPremises), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ] ScenarioType.Other.element_children = [ @@ -17386,6 +18064,11 @@ class ScenarioType(BSElement): ("AnnualSavingsAverageGHGEmissions", AnnualSavingsAverageGHGEmissions), ("AnnualSavingsMarginalGHGEmissions", AnnualSavingsMarginalGHGEmissions), ("AnnualSavingsGHGEmissionIntensity", AnnualSavingsGHGEmissionIntensity), + ("LifeCycleSavingsEnergy", LifeCycleSavingsEnergy), + ("LifeCycleSavingsEnergyCost", LifeCycleSavingsEnergyCost), + ("LifeCycleSavingsWater", LifeCycleSavingsWater), + ("LifeCycleSavingsWaterCost", LifeCycleSavingsWaterCost), + ("LifeCycleSavingsAncillaryCost", LifeCycleSavingsAncillaryCost), ("SimplePayback", SimplePayback), ("NetPresentValue", NetPresentValue), ("InternalRateOfReturn", InternalRateOfReturn), @@ -17474,69 +18157,6 @@ class Scenarios(BSElement): ] -# BasicOnsiteAudit -class BasicOnsiteAudit(BSElement): - """Ignition mechanism in gas heating equipment. Either pilot light or an intermittent ignition device (IID).""" - - element_type = "xs:string" - element_enumerations = [ - "ASHRAE Level 1 Audit", - "Industrial Assessment Center (IAC) Audit", - "Utility Incentive Program Audit", - ] - - -# DetailedOnsiteAudit -class DetailedOnsiteAudit(BSElement): - """Ignition mechanism in gas heating equipment. Either pilot light or an intermittent ignition device (IID).""" - - element_type = "xs:string" - element_enumerations = [ - "ASHRAE Level 2 Audit", - "ASHRAE Level 3 Audit", - "Deep Energy Retrofit Audit", - "Preliminary Assessment (PA)", - "Investment Grade Audit (IGA)", - "Retrocommissioning Audit", - ] - - -# BasicRemoteAudit -class BasicRemoteAudit(BSElement): - """Ignition mechanism in gas heating equipment. Either pilot light or an intermittent ignition device (IID).""" - - element_type = "xs:string" - element_enumerations = [ - "Rapid/Automated Audit", - "Continuous Monitoring of Building Systems", - "Portfolio Screening Analysis", - ] - - -# DetailedRemoteAudit -class DetailedRemoteAudit(BSElement): - """Ignition mechanism in gas heating equipment. Either pilot light or an intermittent ignition device (IID).""" - - element_type = "xs:string" - element_enumerations = [ - "Desk Audit", - "Remote Controls Audit", - ] - - -# ReportType.FacilityEvaluationAuditDefinition -class FacilityEvaluationAuditDefinition(BSElement): - pass - - -FacilityEvaluationAuditDefinition.element_children = [ - ("BasicOnsiteAudit", BasicOnsiteAudit), - ("DetailedOnsiteAudit", DetailedOnsiteAudit), - ("BasicRemoteAudit", BasicRemoteAudit), - ("DetailedRemoteAudit", DetailedRemoteAudit), -] - - # ReportType class ReportType(BSElement): pass @@ -17555,6 +18175,7 @@ class ReportType(BSElement): ("RetrocommissioningAudit", RetrocommissioningAudit), ("AuditCost", AuditCost), ("DiscountFactor", DiscountFactor), + ("DiscountRate", DiscountRate), ("AnalysisPeriod", AnalysisPeriod), ("GasPriceEscalationRate", GasPriceEscalationRate), ("ElectricityPriceEscalationRate", ElectricityPriceEscalationRate), @@ -17566,6 +18187,7 @@ class ReportType(BSElement): ("Utilities", Utilities), ("AuditorContactID", AuditorContactID), ("LinkedPremisesOrSystem", LinkedPremisesOrSystem), + ("LinkedFiles", LinkedFiles), ("LinkedAuditCycles", LinkedAuditCycles), ("UserDefinedFields", UserDefinedFields), ] @@ -17626,6 +18248,7 @@ class WeatherStations(WeatherStations): ("OwnershipStatus", OwnershipStatus), ("PrimaryContactID", PrimaryContactID), ("Buildings", Buildings), + ("LinkedFiles", LinkedFiles), ("UserDefinedFields", UserDefinedFields), ] @@ -17677,6 +18300,7 @@ class Facility(BSElement): ("Contacts", Contacts), ("Tenants", Tenants), ("AuditCycles", AuditCycles), + ("Files", Files), ("UserDefinedFields", UserDefinedFields), ] diff --git a/poetry.lock b/poetry.lock index 6d4fd0b..9343c3d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,487 +1,499 @@ -[[package]] -name = "atomicwrites" -version = "1.4.0" -description = "Atomic file writes." -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" - -[[package]] -name = "attrs" -version = "21.4.0" -description = "Classes Without Boilerplate" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" - -[package.extras] -dev = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "furo", "sphinx", "sphinx-notfound-page", "pre-commit", "cloudpickle"] -docs = ["furo", "sphinx", "zope.interface", "sphinx-notfound-page"] -tests = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "zope.interface", "cloudpickle"] -tests_no_zope = ["coverage[toml] (>=5.0.2)", "hypothesis", "pympler", "pytest (>=4.3.0)", "six", "mypy", "pytest-mypy-plugins", "cloudpickle"] - -[[package]] -name = "backports.entry-points-selectable" -version = "1.1.1" -description = "Compatibility shim providing selectable entry points for older implementations" -category = "dev" -optional = false -python-versions = ">=2.7" - -[package.dependencies] -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest", "pytest-flake8", "pytest-cov", "pytest-black (>=0.3.7)", "pytest-mypy", "pytest-checkdocs (>=2.4)", "pytest-enabler (>=1.0.1)"] +# This file is automatically @generated by Poetry 2.3.2 and should not be changed by hand. [[package]] name = "cfgv" -version = "3.3.1" +version = "3.5.0" description = "Validate configuration and produce human readable error messages." -category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "cfgv-3.5.0-py2.py3-none-any.whl", hash = "sha256:a8dc6b26ad22ff227d2634a65cb388215ce6cc96bbcc5cfde7641ae87e8dacc0"}, + {file = "cfgv-3.5.0.tar.gz", hash = "sha256:d5b1034354820651caa73ede66a6294d6e95c1b00acc5e9b098e917404669132"}, +] [[package]] name = "colorama" -version = "0.4.4" +version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +groups = ["dev"] +markers = "sys_platform == \"win32\"" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] [[package]] name = "distlib" -version = "0.3.4" +version = "0.4.4" description = "Distribution utilities" -category = "dev" optional = false python-versions = "*" +groups = ["dev"] +files = [ + {file = "distlib-0.4.4-py2.py3-none-any.whl", hash = "sha256:cf09d55b1e85a89576b036aeb71550bfd68320f3f21761ca329eadadad918638"}, + {file = "distlib-0.4.4.tar.gz", hash = "sha256:ca4175b4ac7f71223cc30ed7248c45d2b38c2439d8ee6e498ab67ed63cf3508d"}, +] [[package]] name = "filelock" -version = "3.6.0" +version = "4.2.9" description = "A platform independent file lock." -category = "dev" optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["furo (>=2021.8.17b43)", "sphinx (>=4.1)", "sphinx-autodoc-typehints (>=1.12)"] -testing = ["covdefaults (>=1.2.0)", "coverage (>=4)", "pytest (>=4)", "pytest-cov", "pytest-timeout (>=1.4.2)"] +python-versions = ">=3.11" +groups = ["dev"] +files = [ + {file = "filelock-4.2.9-py3-none-any.whl", hash = "sha256:a379c50a729e5b68c8519a4d26489f755d9769960a236ecd838190e2a78db2e9"}, + {file = "filelock-4.2.9.tar.gz", hash = "sha256:96530b7c538d4ea08493ab067247aab7948c54d8cd622cce711c97cccc5d9896"}, +] [[package]] name = "identify" -version = "2.4.12" +version = "2.6.20" description = "File identification library for Python" -category = "dev" optional = false -python-versions = ">=3.7" +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "identify-2.6.20-py2.py3-none-any.whl", hash = "sha256:6a16b69b93187244e0548cbfd25b3e4a6f9a7a2ad784625c3bec2b8d27b81aaa"}, + {file = "identify-2.6.20.tar.gz", hash = "sha256:ad729860a923858d26917c2f4fb0a1d83d27a75b1e090c06440c573f048f3285"}, +] [package.extras] license = ["ukkonen"] -[[package]] -name = "importlib-metadata" -version = "4.11.3" -description = "Read metadata from Python packages" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.dependencies] -typing-extensions = {version = ">=3.6.4", markers = "python_version < \"3.8\""} -zipp = ">=0.5" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=9)", "rst.linker (>=1.9)"] -perf = ["ipython"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "packaging", "pyfakefs", "flufl.flake8", "pytest-perf (>=0.9.2)", "pytest-black (>=0.3.7)", "pytest-mypy (>=0.9.1)", "importlib-resources (>=1.3)"] - [[package]] name = "iniconfig" -version = "1.1.1" -description = "iniconfig: brain-dead simple config-ini parsing" -category = "dev" +version = "2.3.1" +description = "brain-dead simple config-ini parsing" optional = false -python-versions = "*" +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "iniconfig-2.3.1-py3-none-any.whl", hash = "sha256:9121e2c1fdb355232495be3194c8dfe87ccc2d5dee45947b78e68f499790d7a7"}, + {file = "iniconfig-2.3.1.tar.gz", hash = "sha256:67f4b9c50da0dedf52af349e7749a80a9057a5031199791b906c3bb3ae878960"}, +] [[package]] name = "lxml" -version = "4.8.0" +version = "6.1.3" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." -category = "main" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.8" +groups = ["main"] +files = [ + {file = "lxml-6.1.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:40bcbd9f94166ffe925811e730607385cec959f42fb1bb7dad83748680465221"}, + {file = "lxml-6.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:05f5bce9af14fd1506997594bd81cee6d9c6b58ea80a39c058327aa6371ed9e9"}, + {file = "lxml-6.1.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ff88a92cafde90888511242d1c54afcc1a8adbb6dc0a88fa7f87e29e92400d4a"}, + {file = "lxml-6.1.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c00e26288784460885fe76e4d4b293573e0f791f52e6d60e27b42edf005922eb"}, + {file = "lxml-6.1.3-cp310-cp310-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:773062aec2f2e56b2b22d37054123f0de8a22a4688a0c3376c3fe42685f975cf"}, + {file = "lxml-6.1.3-cp310-cp310-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f6449672f9c93316deb5e2839e18931f468670e44d5bd9b1301a5a9655d45c07"}, + {file = "lxml-6.1.3-cp310-cp310-manylinux_2_28_i686.whl", hash = "sha256:ec295280f4b37769256da025acf5890370355ac589c27e89caae0b5e9eedc702"}, + {file = "lxml-6.1.3-cp310-cp310-manylinux_2_31_armv7l.whl", hash = "sha256:5929d9df5e7e3379183be0e21f7d559618a5b61cb63280df6164019242e337ed"}, + {file = "lxml-6.1.3-cp310-cp310-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:6e1eb8a4cbffd5553680ad96be6680e364710656eced73d1dc90ec489df599a3"}, + {file = "lxml-6.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:16148acd77ed1d8836a56db883af2f5eed720f9723088110b16a0d08582130a6"}, + {file = "lxml-6.1.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:23c366231259cd75ad06495174701afb3fcb36a92917fa47de2d1f1bd9d95739"}, + {file = "lxml-6.1.3-cp310-cp310-musllinux_1_2_riscv64.whl", hash = "sha256:da85db328e507da922d586c3c7416ec360ec22e9cd9e0700691afacde0c81f53"}, + {file = "lxml-6.1.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0f17d83c48ee9dfd96abae3ac3e2108c76d2fc86ce96355e37b8da9f7f4ecc08"}, + {file = "lxml-6.1.3-cp310-cp310-win32.whl", hash = "sha256:7dd624c1eaa629ad44b59a1a0145fdf2d67895592dce94c9358b938b3d075e65"}, + {file = "lxml-6.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:18a4db52b5a7b53a3540b0b0f4123319334621ee8083d496de314d0bf06ff59a"}, + {file = "lxml-6.1.3-cp310-cp310-win_arm64.whl", hash = "sha256:0feebef8d0521188d0157f758356072e840173aa61ca45b8b3f87959ac283dd5"}, + {file = "lxml-6.1.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c66f858b82497173f73366795fc6ee8171620e75a338506d6b2e7bc16f5fca11"}, + {file = "lxml-6.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:032a0a97eed428bd143c75a11118238546424ceb2fa311cca5f073aa44658dc4"}, + {file = "lxml-6.1.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4a579dfb9c835f8ab47f4b8ed33440cbc75b806b73297208e6ec2a33e903740b"}, + {file = "lxml-6.1.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:49fbc2682a9306135b7ec49e93f97f9c26689b9b7f96ed2742d8d6497e994d13"}, + {file = "lxml-6.1.3-cp311-cp311-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ea2c01cdb16dc12156e455007c406dfaaece0c89aa4ba0e3b47586779f951d41"}, + {file = "lxml-6.1.3-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:527195c188d7d0af748cd48d220ab8cdc5cb99be3d49ac4d9be7324d8abf9bc0"}, + {file = "lxml-6.1.3-cp311-cp311-manylinux_2_28_i686.whl", hash = "sha256:20384c2bbcbf87180c8c61eb60869699c1ec0cd09b62cfd13804022d860b0867"}, + {file = "lxml-6.1.3-cp311-cp311-manylinux_2_31_armv7l.whl", hash = "sha256:424aa5657141d306ba9ad1baab4b2c0a0719040075ee6c66aee9bb2dea2b5054"}, + {file = "lxml-6.1.3-cp311-cp311-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:4736e6c87e603146d8949d8501da621ad20c31015060d3fcf95ace2859f3e3e6"}, + {file = "lxml-6.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6374e9e382e5a98c9c5e66d41b357b470da1c54bce30f17f9dc4bcc58436cc1c"}, + {file = "lxml-6.1.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:22eec57e26c418cde02c051ce9914a365e52a7f135a565c6f0480242aeebab48"}, + {file = "lxml-6.1.3-cp311-cp311-musllinux_1_2_riscv64.whl", hash = "sha256:8753b8d51dbc86fd335ee31fcf7f3658e9f5c016d4edfb23f76ad295f4b8c9d0"}, + {file = "lxml-6.1.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:207dfc3d47cf0e575e643bbc140dacc8863b39abaa1e5307cd64c7f2365b8a12"}, + {file = "lxml-6.1.3-cp311-cp311-win32.whl", hash = "sha256:18293f8a8d8b6a8e71ef37706b659e3846a4261232158167b1ddf35f6994f633"}, + {file = "lxml-6.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:7ae4949f212a53b007dbc355884fda122545c5764a54256c9217e419a62a6559"}, + {file = "lxml-6.1.3-cp311-cp311-win_arm64.whl", hash = "sha256:2123e5aa075ac20d23c7af489255efd129cbfe190dbe88fd42598cc9df3199b6"}, + {file = "lxml-6.1.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0c0710ac085a157b593c38fbcacd950f15c4afa8e2057527185875ab302752bc"}, + {file = "lxml-6.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:623c8799c17128753c65699f1c3aa32402657393a9ad6db09ed8b98ddf76611d"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f683dc6300317700025e41d89a43e0276692ded16113a3c43eab704d605c58e5"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:379f8a75cf6eb7eef0af074b55f49ab73b868388a98de14646abcdfa4564bb11"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b37772102d44bb6628186accca3a121b1fa3a6b3d97518a8c29a5229ca4c0d0a"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ddcf547bea2aee967d6a77779376a45e77e610e8465147a1f3d7e20d539d6e32"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:909f4e927bb051f7740d6367285fc60cdcfdaf0258c2dba4ff5ba7eadadc250c"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux_2_28_i686.whl", hash = "sha256:a5c18810318303ce9afb3f95e2ddb54834f96fa699a8600433fd5a93dcf44c56"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux_2_31_armv7l.whl", hash = "sha256:3e42265103fb385d8642a78672edf376c6f7e1d3598a7a4f9cb1278f2f6b5f6f"}, + {file = "lxml-6.1.3-cp312-cp312-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:21402998e4b78e7cce237d2788841aaa21ac9a4d1574d04dc2d12ee41ae807b5"}, + {file = "lxml-6.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:38fc4e4e4e084e0bd491949482527d406788045c546d4f8789e93fc527b91385"}, + {file = "lxml-6.1.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:5609efdb0d3c95499c00046bc53648b3482ec2175b5503d6e611b3f0555dc71d"}, + {file = "lxml-6.1.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:97ce49699d87ebf8aad631b55d65b33219a4f1bfefbbf5bff19dc9af160aeaf9"}, + {file = "lxml-6.1.3-cp312-cp312-musllinux_1_2_riscv64.whl", hash = "sha256:48542c9acba9ff9450bd18d871d2c2c8787fdb283572b623d206f1b927cd7d9e"}, + {file = "lxml-6.1.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c55e71a9b1db1f107efb60da49c093689b74c5c31a708e5379e2fd9439d4fbb5"}, + {file = "lxml-6.1.3-cp312-cp312-win32.whl", hash = "sha256:b3ff39654f0ce6ebd4db154211136dbe7e8157bcc3bed2344c87f32c7c6ecb6c"}, + {file = "lxml-6.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:3e9a00d1c2c30936f7add097c41afc5da6556c580909104aafd382cac92a855c"}, + {file = "lxml-6.1.3-cp312-cp312-win_arm64.whl", hash = "sha256:1aeca87830c4fe649dcf93fe2b059525b71c72587f21be4ae4af7103082a79fa"}, + {file = "lxml-6.1.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3a48093cdb058a93af842ede9703520e810b05dcd0fc6d7190a06376c3bfb6bd"}, + {file = "lxml-6.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:887c021d9a977cff89cb273047c1352997b772a8908a25c21836861f69b92be1"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:611a51e61c92f62345a50b0035df6fc0d678f9299f33728826d831598862f59d"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:b477912f42c5c33405a10c759d22f80cf5af043ae02d95b9d8e5e5bc555739ed"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5cffe18571ccc51d742cd08cbb3f8b756de9311d18c7ea98f5d92f37b8fb60c2"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:75cc6569e86be5785b6188ef1642670c6adbc984e81ec35e224842ecd9eefcc8"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d85dfab42dd672f87a7f76e9de7172962aee69fa12044f0d6e1a23cbd53fb80e"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux_2_28_i686.whl", hash = "sha256:42632b4024ab24a6b488f559ac851312509888b6b80ae2aa11cf29a646a0d245"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:febd35ef45f603c2d74b74655efdbf45e14f55fc0aef4ac82b663ca829b283e0"}, + {file = "lxml-6.1.3-cp313-cp313-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:a43b3bdf11e477dc7770609d3477316f974354dfc8425d596f64f471cc8daf6e"}, + {file = "lxml-6.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5d582042c69857c364e8153de6e18e0da9b7b515a6a8113caf69a6ec8e0520f2"}, + {file = "lxml-6.1.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:8e49a646acfab83c68974f4aa1d0a2acca9e88d7d627ae0fc13201b14b76d310"}, + {file = "lxml-6.1.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0dee106e9aa97fb00541b1ed7827070564d0549c3d3fba8920e6b20fd980f748"}, + {file = "lxml-6.1.3-cp313-cp313-musllinux_1_2_riscv64.whl", hash = "sha256:dd5e90f34cffcfed97f36cf066325773d2b6021c60c29942e53a18b028501b1d"}, + {file = "lxml-6.1.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:d9b3e7d71bf6acff341233417abbdface29c647e3113892d9aaedc02eb4aa2bc"}, + {file = "lxml-6.1.3-cp313-cp313-win32.whl", hash = "sha256:160fcf381f76c3aeac28a756bec44f48942a8f7245a87aa28e3a523b4d90cd87"}, + {file = "lxml-6.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:e477aca0bc0d19f3b4ae9e4f2a1cfd687c31bf772d78734910658186b40b2477"}, + {file = "lxml-6.1.3-cp313-cp313-win_arm64.whl", hash = "sha256:b1cc980905221a5d8b3c476330730b3adb40ff80add71ffbdb6215ba055656f1"}, + {file = "lxml-6.1.3-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:2bec13085dc8ef48a3fe62f7dfcacfeda2c785cdf19cc8eeda2bb9ed081da165"}, + {file = "lxml-6.1.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:4f4db7c7e954d289d71878938348b3d91b904a3e8210a11939359fb758a58e7d"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2cae5d5c90a62d9139c512a0cb1aad1d182b022b5740daea2617eb5bf7fc658e"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c6c0c13128a32eb04a51357e56a094e13aa8e6d3d1884de2e9ae923f6915e1a8"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2221e88679d1351e9a40aaee54bc65679b9795bbd0160bc3d5e36b163344eb75"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cfb398886a7eb4c719161c3efcff2a1248febc53a4d8e5072d2d8a87fed84ac9"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a7eb78ba28b187e1e9203a55c60fcf70df2d22cb205fe6d51b9383d6097419f0"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux_2_28_i686.whl", hash = "sha256:ea6b1e9105b4b24a34c722432d9fb578f9ed83af21fa1abda639011e0f22bbb6"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux_2_31_armv7l.whl", hash = "sha256:e8b17e23df3e827a69d25af70990ca2420e92668aaffaeeb3cd2351d7916a023"}, + {file = "lxml-6.1.3-cp314-cp314-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:1b7c37339d7e75cab9a123a04248e243cefefb302ad6db566ea0c77cbcde421e"}, + {file = "lxml-6.1.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:83e3a51e7933db700a0da0db31849db3a24022d9970da9bb73001e1d0326fd92"}, + {file = "lxml-6.1.3-cp314-cp314-musllinux_1_2_armv7l.whl", hash = "sha256:9bde9ae026a55b9a192078dfa6e27dd0ca4a050171ab6272e92f97b757dfdf48"}, + {file = "lxml-6.1.3-cp314-cp314-musllinux_1_2_ppc64le.whl", hash = "sha256:1a635e837b50a1819bebfedaac5916498ea024120969da8790500148fb0a894d"}, + {file = "lxml-6.1.3-cp314-cp314-musllinux_1_2_riscv64.whl", hash = "sha256:d0c5c362bc94f1929dc7e96e715bbe7bd17037f802e6d8f0d1545df9133c0559"}, + {file = "lxml-6.1.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c59e4265608da6a041f54646ecc0c9ecdbb19aaf14c4c684bb6c2114998cc415"}, + {file = "lxml-6.1.3-cp314-cp314-win32.whl", hash = "sha256:2e62c569ec7531b679b184cbfe335c501c1d13c4b363560013019962eb630e6d"}, + {file = "lxml-6.1.3-cp314-cp314-win_amd64.whl", hash = "sha256:66299564c046bc7e0cc5de5106601eae907e9fa5904cd68a323380a8502f7861"}, + {file = "lxml-6.1.3-cp314-cp314-win_arm64.whl", hash = "sha256:ebd054ad1737a68fb7c5c073d405cef2b88bb824e294de3b4a4e995b47f0e376"}, + {file = "lxml-6.1.3-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:5a143e6207579de8baeded4eaac9134413200359f1969d636f0bfb98ee8c3c8f"}, + {file = "lxml-6.1.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:a1cec0f99b9b914d39176347a93b7610dc09324491aee1cbc57cd291a41a1d55"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f6b9d2aad499c769ee8287609ab0e6de99d8bcea99c6e6c2e64945259fd52fb2"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:28a23fefdb345b2d4d0ff2860571b5ff9a89a28b6a120f720e8fb0324d346626"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:545ccc14fb05485f48b4439ec35beb16d5b5280eb6c81c658bd4707a2a119414"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:93476b6514b373fc6ca67d26c442784f7807c86f00635bfe79f935c3eab2af17"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:8db38ff3fb7aee7d6a82ae4da2eef1178656fe1216841fbd24870062a9d60473"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux_2_28_i686.whl", hash = "sha256:25f4118c438f96bb466e83108506d03d5c31b1bd2387e83e5b070bda6ded9c37"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux_2_31_armv7l.whl", hash = "sha256:1beb0f9909b26cee938df9ba56b15252a84429b1fc30ce6fca161390b9789a70"}, + {file = "lxml-6.1.3-cp314-cp314t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:3a27ac6c780c8b8a1cd231b58407634cafc1c4cc28cd6c7141362df0f36351e7"}, + {file = "lxml-6.1.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:a1932d7ce78a561367512c594fe66eac2b2ec9b9264cfd9b5f950622f4a116e2"}, + {file = "lxml-6.1.3-cp314-cp314t-musllinux_1_2_armv7l.whl", hash = "sha256:7d0f5976aa2701996f759b30172925829867547bb073af0ae67d1307a0f0262c"}, + {file = "lxml-6.1.3-cp314-cp314t-musllinux_1_2_ppc64le.whl", hash = "sha256:c5e7ce578aa8a80910a72a8ca0bbea3baae10100827249001999726a788456d8"}, + {file = "lxml-6.1.3-cp314-cp314t-musllinux_1_2_riscv64.whl", hash = "sha256:d97c5227621af74b111882a290b10f371780a38eef9d9e730408fba2259b52fb"}, + {file = "lxml-6.1.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:da707f14ea3c35ee463d50acd596d6488e4b2b4ae7cf77a5bf93f55c023d63e8"}, + {file = "lxml-6.1.3-cp314-cp314t-win32.whl", hash = "sha256:9efe56a68179f3adc4de41861c9358931db03837c48dd5e1c78077b84dd07f3a"}, + {file = "lxml-6.1.3-cp314-cp314t-win_amd64.whl", hash = "sha256:c9389b3784b56c58d933b5e0aecdf28f901b073ff385358d8a7d40907f6e14b2"}, + {file = "lxml-6.1.3-cp314-cp314t-win_arm64.whl", hash = "sha256:32a409be3190b088f960ac92bfedfbef2f86c49ff940765e1548177592d20026"}, + {file = "lxml-6.1.3-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:6ea2f13dce778ca072ccee598bca46a092ce192e8fd907b6c1f0e52c800529a0"}, + {file = "lxml-6.1.3-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:c581b1d68b3845fb86c6b2983e755b29bf001461c59fa411d2c26a911b6559a9"}, + {file = "lxml-6.1.3-cp315-cp315-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2e01125896585139453cab8cb235893644d8815d7509520da95ae3ee8d1c1f79"}, + {file = "lxml-6.1.3-cp315-cp315-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:290f66b97ede0e552e1cb44a0fd8a74f9753ee635b50830a0b122fb72788d015"}, + {file = "lxml-6.1.3-cp315-cp315-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:73fc05988ed20809450474ba760a87c8ad4e455fc09783c02195e56ec634b41a"}, + {file = "lxml-6.1.3-cp315-cp315-manylinux_2_31_armv7l.whl", hash = "sha256:dc3a44689eea43eab836e5c98a8ab015dc2419987d1ea6eafc7c590cdff86bed"}, + {file = "lxml-6.1.3-cp315-cp315-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:209c3ccbfe35a04ac6d24f0611f9d1cbf8025d49991b14acd935236234d6c156"}, + {file = "lxml-6.1.3-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:2f5b2a2b9811b853b39bfa41367c6d78747b8e3e80e07fc5a24aae295c1a4d7d"}, + {file = "lxml-6.1.3-cp315-cp315-musllinux_1_2_armv7l.whl", hash = "sha256:6a406d0b3cb207b0fa460ed4dc93e866f44f105da0169361cb18ff998a44c7f0"}, + {file = "lxml-6.1.3-cp315-cp315-musllinux_1_2_ppc64le.whl", hash = "sha256:53258656846f5c48996b882fb4b135885e088a3ad3d96b4bc0530f95124d1f69"}, + {file = "lxml-6.1.3-cp315-cp315-musllinux_1_2_riscv64.whl", hash = "sha256:aa633613ff907ea91b9b0489a1f0da1b8725d8c6ccec6b77e8a1c9c235044bb0"}, + {file = "lxml-6.1.3-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:90f709b9accab6b2e4d14f5c8718203877a0486bcb3afd74d8b539ecd1e961d4"}, + {file = "lxml-6.1.3-cp315-cp315-win32.whl", hash = "sha256:b4fc6b03b9d9d90557274f571ab30e7fbbfc527955536935d96f98b6817a86e4"}, + {file = "lxml-6.1.3-cp315-cp315-win_amd64.whl", hash = "sha256:33cadd956b667997e4de1635fce9541f2e8ede2038fcde8cf55aa14d571d1bad"}, + {file = "lxml-6.1.3-cp315-cp315-win_arm64.whl", hash = "sha256:8a330c0ee5fa318c7b5cbbaad882baeca3f570357e7eb25ab34bf31008150758"}, + {file = "lxml-6.1.3-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:0bf5a3e397df2ec4258eb5eea4c1ac6cf013ca1abd04a176903bff20a70021fe"}, + {file = "lxml-6.1.3-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:13d22c0d57355366b393936acf6b98a5e0edeadddd3fccbc6a846c50a76b8741"}, + {file = "lxml-6.1.3-cp315-cp315t-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:cad7617727a96d189bd6f979d0fadf765198c7934e85f4edaba9bf3ad919a300"}, + {file = "lxml-6.1.3-cp315-cp315t-manylinux_2_26_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:cae82b5ca24b0c2beedb269f6e2a96f466acd926879ab00ae19f1a65cbf9ffb0"}, + {file = "lxml-6.1.3-cp315-cp315t-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:69cafd61aea04ebb3502c93c2aaa568b12931ca0802231e0b5de76bf8b6e74bd"}, + {file = "lxml-6.1.3-cp315-cp315t-manylinux_2_31_armv7l.whl", hash = "sha256:dc205732d593118cf701d986f40e9de7801bb2e371cb189ddbda9b7348f4d97e"}, + {file = "lxml-6.1.3-cp315-cp315t-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:88e719b9437f148f7e1465df845c758dd1598618cbea3a2fd1e61a715542f2b2"}, + {file = "lxml-6.1.3-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:40983eabefd13da003e68170928c7acc011f0d095eefce5871a3c71c9385fb9a"}, + {file = "lxml-6.1.3-cp315-cp315t-musllinux_1_2_armv7l.whl", hash = "sha256:fad67b12ffe0f71e02b4932b04883cbc76a9072bbd30731409d3523cf058b011"}, + {file = "lxml-6.1.3-cp315-cp315t-musllinux_1_2_ppc64le.whl", hash = "sha256:6cd11e7550d89e551a87dcec30f04b1fca32e86b68708aa01a4daa455d8605e5"}, + {file = "lxml-6.1.3-cp315-cp315t-musllinux_1_2_riscv64.whl", hash = "sha256:ca0ec532ad2f5ba1e5ec120ac157769c57f01855b3d8bf37213f5d88abd9ba0a"}, + {file = "lxml-6.1.3-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:e99e09ab7741f1281e2677f4c0058c7f5267d182530b09c87e4f6aa26adf3887"}, + {file = "lxml-6.1.3-cp315-cp315t-win32.whl", hash = "sha256:ace1d2c83b2bd24db5940600541140e87a325e119cb32d5fa9ad720d7e76648e"}, + {file = "lxml-6.1.3-cp315-cp315t-win_amd64.whl", hash = "sha256:b49638355ea3bebba70da783ccbc630fd72afa16bc46c54474bfa1f9a915bbc6"}, + {file = "lxml-6.1.3-cp315-cp315t-win_arm64.whl", hash = "sha256:5a721a98c649855963811b59b55755b30566e7f7fc40bdc9803d66dee9f811cf"}, + {file = "lxml-6.1.3-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:13a620a3fcc20023f9e6ed5c383e00e826f1c2d5db554df2f67240760f9118e8"}, + {file = "lxml-6.1.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:fbfb70ba01355251faf6b293171df49f73a88a1b6494db109ffea85442574458"}, + {file = "lxml-6.1.3-cp38-cp38-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:302f72413251c03f671e063c9414bed5dc8c927069e5abb69245521e51a4e81b"}, + {file = "lxml-6.1.3-cp38-cp38-manylinux_2_28_i686.whl", hash = "sha256:ce1f220114959941170e22b8ad44279f6dee2dcef7591814d01ae805dc058889"}, + {file = "lxml-6.1.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:170773d8a3cdc76259065523ddd978c44f9806e28605f08812e8f86783e44ac6"}, + {file = "lxml-6.1.3-cp38-cp38-win32.whl", hash = "sha256:92d96586376fb79a33474797186bf993250152ee5c32650b67db78d54b92e6f3"}, + {file = "lxml-6.1.3-cp38-cp38-win_amd64.whl", hash = "sha256:d44442effeb8781f392340c5dc8c6716fba41dbeacb82fd4c0f09026fb5ff682"}, + {file = "lxml-6.1.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:869dfcd4d381cb0ea87085cc4f011b9171b494ef21e76ad8665f6d5e2d1dc8a1"}, + {file = "lxml-6.1.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6ba4fe5bfbef6811a8e49b3719cde373ad399006c0c1ac184b7297116ecbba5d"}, + {file = "lxml-6.1.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:61116cec57ed69aebc70f37a545eec095339bb829efbdabcfb97c51e9536e158"}, + {file = "lxml-6.1.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4e11e885e0704be185867fcf71b904d8f65d7d6877bc121f69870b0d0479ba7b"}, + {file = "lxml-6.1.3-cp39-cp39-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:41e2d428110b408e963b6fb18f9bbf1f5c027b56bd4b498d54556476c0aeb1c3"}, + {file = "lxml-6.1.3-cp39-cp39-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:aa9fd1ee2a5dacfc41039ed49ffeeacfa75bafbd255b69f3b578e11897a0e623"}, + {file = "lxml-6.1.3-cp39-cp39-manylinux_2_28_i686.whl", hash = "sha256:7f75b9b9fec2a9c6b18095c81865580e795b1441c429e42d22fcc82a77f40039"}, + {file = "lxml-6.1.3-cp39-cp39-manylinux_2_31_armv7l.whl", hash = "sha256:cc669256d28736f7f3a149df5c380c50ace2692ba3e62203d10656fade4a2145"}, + {file = "lxml-6.1.3-cp39-cp39-manylinux_2_38_riscv64.manylinux_2_39_riscv64.whl", hash = "sha256:d077f21f4b16f0471353883748f126f62038760397c107bb9fad2ca94dc0dfb7"}, + {file = "lxml-6.1.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d9a0d12846d6ce434fb3857918eef4315ec9b4769deb020c75828798614bfcfd"}, + {file = "lxml-6.1.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:2b9b1325ca1c2a9a2dbb6eb913ae563313f2082ae60b03210f7e83ee80712274"}, + {file = "lxml-6.1.3-cp39-cp39-musllinux_1_2_riscv64.whl", hash = "sha256:a2e3f70673a1d5b82f38255f777d26cd855bf2092b1436c4867464a7892f9238"}, + {file = "lxml-6.1.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c34ca1dc41bd86d9ff830d5bdf4e4a752bba6c54f7d2707027ce0eabd36084c9"}, + {file = "lxml-6.1.3-cp39-cp39-win32.whl", hash = "sha256:b50343241eb69fd85f7791cf8bcc7b1c4729826b7d59ba2f6b27db29638fa745"}, + {file = "lxml-6.1.3-cp39-cp39-win_amd64.whl", hash = "sha256:0794e04ba343852c6d78e996c58ef4b8e579b4ecc72f8df0d4058bf843b4c96e"}, + {file = "lxml-6.1.3-cp39-cp39-win_arm64.whl", hash = "sha256:0ab2467e405e748d93495fb5568e74044802b8d3ff2b2a1607c3f78c6e982de5"}, + {file = "lxml-6.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4b061064b4a2fe8598a466d723d43dbcd5a610a5d5cfe02fb6226f5c17349f75"}, + {file = "lxml-6.1.3-pp310-pypy310_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8499d464de86fab0f102313cce32a9bed9ab1f06ec813cf025cb790964fbb765"}, + {file = "lxml-6.1.3-pp310-pypy310_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9e67324961ac9bbe616cce5100514d2e34d88665aeb07071e8b16eac55d06d94"}, + {file = "lxml-6.1.3-pp310-pypy310_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5d12669a2c419b0e8dc423d23dea24bb82f6f9cb829f32e04674b0ba40322a7c"}, + {file = "lxml-6.1.3-pp310-pypy310_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:97acecb11cbc411473f15b8d780df06d7a9f3a2aad9aca78364f56640c8fb70e"}, + {file = "lxml-6.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f8b9c8ceebae6387d0dc77f7f4dbbfbfc962dba2efbfe6877486075a480726b4"}, + {file = "lxml-6.1.3-pp311-pypy311_pp73-macosx_10_15_x86_64.whl", hash = "sha256:d2765c18ce303149ee804b1f3dad11232726dd0a702d73a15cf19179ac8cc962"}, + {file = "lxml-6.1.3-pp311-pypy311_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7d5a748d12dd9b535e0a130f60dae9ddf0adafbabe61e7864f55c7436c84547a"}, + {file = "lxml-6.1.3-pp311-pypy311_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:41096ec0740a58dad03d3ae0c7486d306d20becefb13ceb1649835ab3eb64167"}, + {file = "lxml-6.1.3-pp311-pypy311_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:415e3a115c0d510e329020012834d1c0aa1c581ee53a218603e38abbc1dea70a"}, + {file = "lxml-6.1.3-pp311-pypy311_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20428910dae17a1a93152a3ff2c0441d2f4932992c0797d65651dd0561f1792f"}, + {file = "lxml-6.1.3-pp311-pypy311_pp73-win_amd64.whl", hash = "sha256:bc8dd3d9c93e70c3df974a201ac2958b6d77b465d813c51d1f15fa8e645763ae"}, + {file = "lxml-6.1.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:3847e71a78cbbc1aff955dbbbaf2fff12153f611d3162c5beaa3395636cbc2f9"}, + {file = "lxml-6.1.3-pp39-pypy39_pp73-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fe91993149523aa59941b9e3c90e2eb45f57ad014697aef6c8b13339a59c019e"}, + {file = "lxml-6.1.3-pp39-pypy39_pp73-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:71532ebf30be0048a45559b4fab15333fbaaf9042f658e878d918ecd0cf09805"}, + {file = "lxml-6.1.3-pp39-pypy39_pp73-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1b50797ac246bb2942a04b6c0f69af0667aba7cf7535f39bbb1b3208fd5d128"}, + {file = "lxml-6.1.3-pp39-pypy39_pp73-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2bb7d703bed7ac893bf7f40d97b5d9279d35d2ce460624ca28929eab0d5a3d"}, + {file = "lxml-6.1.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:be5346653c0b0e34be96869ff9dbeba23860156f89a2896a64c64fb419260cb6"}, + {file = "lxml-6.1.3.tar.gz", hash = "sha256:45222d94ddd511536f3b2f7d9deae3b2339b4ce0f075f1ca25703b07cad9dd21"}, +] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml_html_clean"] html5 = ["html5lib"] -htmlsoup = ["beautifulsoup4"] -source = ["Cython (>=0.29.7)"] +htmlsoup = ["BeautifulSoup4"] [[package]] name = "nodeenv" -version = "1.6.0" +version = "1.12.0" description = "Node.js virtual environment builder" -category = "dev" optional = false -python-versions = "*" +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "nodeenv-1.12.0-py3-none-any.whl", hash = "sha256:80644d65c10cc2be12e3e4b54b3367ff288c7ad24ae75c2dcc65454fc7449d4d"}, + {file = "nodeenv-1.12.0.tar.gz", hash = "sha256:4ea7f88339310afebc3253f2c7a91b94bacf97d73a36a5c108962abdfaca501e"}, +] + +[package.extras] +certifi = ["certifi"] +completion = ["shtab (>=1.11)"] [[package]] name = "packaging" -version = "21.3" +version = "26.3" description = "Core utilities for Python packages" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -pyparsing = ">=2.0.2,<3.0.5 || >3.0.5" +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "packaging-26.3-py3-none-any.whl", hash = "sha256:d7193f7c8e4e93f444fde0262bf90af30e16fa0ad0ad44cb553c87339b23cd1c"}, + {file = "packaging-26.3.tar.gz", hash = "sha256:94edc256424af38762eb31306eed28beb9f0efc50a8837492c9d6fd6004aed79"}, +] [[package]] name = "platformdirs" -version = "2.5.1" -description = "A small Python module for determining appropriate platform-specific dirs, e.g. a \"user data dir\"." -category = "dev" +version = "4.14.5" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["Sphinx (>=4)", "furo (>=2021.7.5b38)", "proselint (>=0.10.2)", "sphinx-autodoc-typehints (>=1.12)"] -test = ["appdirs (==1.4.4)", "pytest (>=6)", "pytest-cov (>=2.7)", "pytest-mock (>=3.6)"] +python-versions = ">=3.11" +groups = ["dev"] +files = [ + {file = "platformdirs-4.14.5-py3-none-any.whl", hash = "sha256:8e778c6fa421516f4d3369449f8df3b0e1b72c0e0005fe88e3ec772d0a14e750"}, + {file = "platformdirs-4.14.5.tar.gz", hash = "sha256:32e9921db7385aa8169bee4fe9501923e5715ba9fb7ea3b9c69b0d8e0639f7a1"}, +] [[package]] name = "pluggy" -version = "1.0.0" +version = "1.7.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false -python-versions = ">=3.6" - -[package.dependencies] -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "pluggy-1.7.0-py3-none-any.whl", hash = "sha256:7dd7b0d8832ba3cb632c306926ded123429211b83641b35dc5c41ad2d34f9bec"}, + {file = "pluggy-1.7.0.tar.gz", hash = "sha256:d1eaa46ebb595891b860ab086b4d09c8588af65ebd4361b8e8f4bb8920b90ba8"}, +] [[package]] name = "pre-commit" -version = "2.17.0" +version = "4.7.0" description = "A framework for managing and maintaining multi-language pre-commit hooks." -category = "dev" optional = false -python-versions = ">=3.6.1" +python-versions = ">=3.11" +groups = ["dev"] +files = [ + {file = "pre_commit-4.7.0-py2.py3-none-any.whl", hash = "sha256:2e229038ad3656081b70c27913157e4b636ef306f643f024a8a8e3f0f7b2f877"}, + {file = "pre_commit-4.7.0.tar.gz", hash = "sha256:1f3deee12b914c8fa184bd2b5953391c2e4f36763e403d4a23dc9983fa7c6e86"}, +] [package.dependencies] cfgv = ">=2.0.0" identify = ">=1.0.0" -importlib-metadata = {version = "*", markers = "python_version < \"3.8\""} nodeenv = ">=0.11.1" pyyaml = ">=5.1" -toml = "*" -virtualenv = ">=20.0.8" - -[[package]] -name = "py" -version = "1.11.0" -description = "library with cross-python path, ini-parsing, io, code, log facilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +virtualenv = ">=20.10.0" [[package]] -name = "pyparsing" -version = "3.0.7" -description = "Python parsing module" -category = "dev" +name = "pygments" +version = "2.21.0" +description = "Pygments is a syntax highlighting package written in Python." optional = false -python-versions = ">=3.6" +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "pygments-2.21.0-py3-none-any.whl", hash = "sha256:2363c69b61c4a97c838da3b130dcd6468f4848992b21a82f2a63ec34377137d9"}, + {file = "pygments-2.21.0.tar.gz", hash = "sha256:610ca751c9bc2492b38eb9a38a7fbc93edbbb2d7182edaf34e66ae493dee5c8c"}, +] [package.extras] -diagrams = ["jinja2", "railroad-diagrams"] +windows-terminal = ["colorama (>=0.4.6)"] [[package]] name = "pytest" -version = "6.2.5" +version = "9.2.0" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false -python-versions = ">=3.6" +python-versions = ">=3.10" +groups = ["dev"] +files = [ + {file = "pytest-9.2.0-py3-none-any.whl", hash = "sha256:07acdcf88ec174f907dc01af70bf52d49b014bbab03faeeade31c96b18c2e588"}, + {file = "pytest-9.2.0.tar.gz", hash = "sha256:97c4f3b1f3c7414aa36465e09b8220f1d03627993bd51b1282e193753c80557b"}, +] [package.dependencies] -atomicwrites = {version = ">=1.0", markers = "sys_platform == \"win32\""} -attrs = ">=19.2.0" -colorama = {version = "*", markers = "sys_platform == \"win32\""} -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -py = ">=1.8.2" -toml = "*" +colorama = {version = ">=0.4", markers = "sys_platform == \"win32\""} +iniconfig = ">=2" +packaging = ">=24" +pluggy = ">=1.6,<2" +pygments = ">=2.15" [package.extras] -testing = ["argcomplete", "hypothesis (>=3.56)", "mock", "nose", "requests", "xmlschema"] +dev = ["argcomplete", "asynctest ; python_version < \"3.11\"", "attrs (>=23.1)", "coverage (>=7.5)", "hypothesis (>=6.75)", "mock", "numpy (>=1.26)", "pexpect (>=4.9)", "pytest-xdist (>=3.5)", "pyyaml", "requests", "setuptools", "xmlschema"] [[package]] -name = "pyyaml" -version = "6.0" -description = "YAML parser and emitter for Python" -category = "dev" +name = "python-discovery" +version = "1.9.4" +description = "Python interpreter discovery" optional = false -python-versions = ">=3.6" - -[[package]] -name = "six" -version = "1.16.0" -description = "Python 2 and 3 compatibility utilities" -category = "dev" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "python_discovery-1.9.4-py3-none-any.whl", hash = "sha256:b468f365040b40f4cb39918b0766d3e5a2f340968e07df752fbc96f1bb4641ab"}, + {file = "python_discovery-1.9.4.tar.gz", hash = "sha256:c01b45fe515c1d268b57c57d554bb0e1d320b8e9eb5490bb2f4f577be26e4380"}, +] -[[package]] -name = "toml" -version = "0.10.2" -description = "Python Library for Tom's Obvious, Minimal Language" -category = "dev" -optional = false -python-versions = ">=2.6, !=3.0.*, !=3.1.*, !=3.2.*" +[package.dependencies] +filelock = ">=3.16.1" [[package]] -name = "typing-extensions" -version = "4.1.1" -description = "Backported and Experimental Type Hints for Python 3.6+" -category = "dev" +name = "pyyaml" +version = "6.0.3" +description = "YAML parser and emitter for Python" optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" +groups = ["dev"] +files = [ + {file = "PyYAML-6.0.3-cp38-cp38-macosx_10_13_x86_64.whl", hash = "sha256:c2514fceb77bc5e7a2f7adfaa1feb2fb311607c9cb518dbc378688ec73d8292f"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9c57bb8c96f6d1808c030b1687b9b5fb476abaa47f0db9c0101f5e9f394e97f4"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:efd7b85f94a6f21e4932043973a7ba2613b059c4a000551892ac9f1d11f5baf3"}, + {file = "PyYAML-6.0.3-cp38-cp38-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:22ba7cfcad58ef3ecddc7ed1db3409af68d023b7f940da23c6c2a1890976eda6"}, + {file = "PyYAML-6.0.3-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:6344df0d5755a2c9a276d4473ae6b90647e216ab4757f8426893b5dd2ac3f369"}, + {file = "PyYAML-6.0.3-cp38-cp38-win32.whl", hash = "sha256:3ff07ec89bae51176c0549bc4c63aa6202991da2d9a6129d7aef7f1407d3f295"}, + {file = "PyYAML-6.0.3-cp38-cp38-win_amd64.whl", hash = "sha256:5cf4e27da7e3fbed4d6c3d8e797387aaad68102272f8f9752883bc32d61cb87b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:214ed4befebe12df36bcc8bc2b64b396ca31be9304b8f59e25c11cf94a4c033b"}, + {file = "pyyaml-6.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:02ea2dfa234451bbb8772601d7b8e426c2bfa197136796224e50e35a78777956"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:b30236e45cf30d2b8e7b3e85881719e98507abed1011bf463a8fa23e9c3e98a8"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:66291b10affd76d76f54fad28e22e51719ef9ba22b29e1d7d03d6777a9174198"}, + {file = "pyyaml-6.0.3-cp310-cp310-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:9c7708761fccb9397fe64bbc0395abcae8c4bf7b0eac081e12b809bf47700d0b"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:418cf3f2111bc80e0933b2cd8cd04f286338bb88bdc7bc8e6dd775ebde60b5e0"}, + {file = "pyyaml-6.0.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:5e0b74767e5f8c593e8c9b5912019159ed0533c70051e9cce3e8b6aa699fcd69"}, + {file = "pyyaml-6.0.3-cp310-cp310-win32.whl", hash = "sha256:28c8d926f98f432f88adc23edf2e6d4921ac26fb084b028c733d01868d19007e"}, + {file = "pyyaml-6.0.3-cp310-cp310-win_amd64.whl", hash = "sha256:bdb2c67c6c1390b63c6ff89f210c8fd09d9a1217a465701eac7316313c915e4c"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:44edc647873928551a01e7a563d7452ccdebee747728c1080d881d68af7b997e"}, + {file = "pyyaml-6.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:652cb6edd41e718550aad172851962662ff2681490a8a711af6a4d288dd96824"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:10892704fc220243f5305762e276552a0395f7beb4dbf9b14ec8fd43b57f126c"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:850774a7879607d3a6f50d36d04f00ee69e7fc816450e5f7e58d7f17f1ae5c00"}, + {file = "pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1d37d57ad971609cf3c53ba6a7e365e40660e3be0e5175fa9f2365a379d6095a"}, + {file = "pyyaml-6.0.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:37503bfbfc9d2c40b344d06b2199cf0e96e97957ab1c1b546fd4f87e53e5d3e4"}, + {file = "pyyaml-6.0.3-cp311-cp311-win32.whl", hash = "sha256:8098f252adfa6c80ab48096053f512f2321f0b998f98150cea9bd23d83e1467b"}, + {file = "pyyaml-6.0.3-cp311-cp311-win_amd64.whl", hash = "sha256:9f3bfb4965eb874431221a3ff3fdcddc7e74e3b07799e0e84ca4a0f867d449bf"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7f047e29dcae44602496db43be01ad42fc6f1cc0d8cd6c83d342306c32270196"}, + {file = "pyyaml-6.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:fc09d0aa354569bc501d4e787133afc08552722d3ab34836a80547331bb5d4a0"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9149cad251584d5fb4981be1ecde53a1ca46c891a79788c0df828d2f166bda28"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5fdec68f91a0c6739b380c83b951e2c72ac0197ace422360e6d5a959d8d97b2c"}, + {file = "pyyaml-6.0.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:ba1cc08a7ccde2d2ec775841541641e4548226580ab850948cbfda66a1befcdc"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8dc52c23056b9ddd46818a57b78404882310fb473d63f17b07d5c40421e47f8e"}, + {file = "pyyaml-6.0.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:41715c910c881bc081f1e8872880d3c650acf13dfa8214bad49ed4cede7c34ea"}, + {file = "pyyaml-6.0.3-cp312-cp312-win32.whl", hash = "sha256:96b533f0e99f6579b3d4d4995707cf36df9100d67e0c8303a0c55b27b5f99bc5"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_amd64.whl", hash = "sha256:5fcd34e47f6e0b794d17de1b4ff496c00986e1c83f7ab2fb8fcfe9616ff7477b"}, + {file = "pyyaml-6.0.3-cp312-cp312-win_arm64.whl", hash = "sha256:64386e5e707d03a7e172c0701abfb7e10f0fb753ee1d773128192742712a98fd"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8da9669d359f02c0b91ccc01cac4a67f16afec0dac22c2ad09f46bee0697eba8"}, + {file = "pyyaml-6.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:2283a07e2c21a2aa78d9c4442724ec1eb15f5e42a723b99cb3d822d48f5f7ad1"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:ee2922902c45ae8ccada2c5b501ab86c36525b883eff4255313a253a3160861c"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a33284e20b78bd4a18c8c2282d549d10bc8408a2a7ff57653c0cf0b9be0afce5"}, + {file = "pyyaml-6.0.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0f29edc409a6392443abf94b9cf89ce99889a1dd5376d94316ae5145dfedd5d6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f7057c9a337546edc7973c0d3ba84ddcdf0daa14533c2065749c9075001090e6"}, + {file = "pyyaml-6.0.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:eda16858a3cab07b80edaf74336ece1f986ba330fdb8ee0d6c0d68fe82bc96be"}, + {file = "pyyaml-6.0.3-cp313-cp313-win32.whl", hash = "sha256:d0eae10f8159e8fdad514efdc92d74fd8d682c933a6dd088030f3834bc8e6b26"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_amd64.whl", hash = "sha256:79005a0d97d5ddabfeeea4cf676af11e647e41d81c9a7722a193022accdb6b7c"}, + {file = "pyyaml-6.0.3-cp313-cp313-win_arm64.whl", hash = "sha256:5498cd1645aa724a7c71c8f378eb29ebe23da2fc0d7a08071d89469bf1d2defb"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_10_13_x86_64.whl", hash = "sha256:8d1fab6bb153a416f9aeb4b8763bc0f22a5586065f86f7664fc23339fc1c1fac"}, + {file = "pyyaml-6.0.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:34d5fcd24b8445fadc33f9cf348c1047101756fd760b4dacb5c3e99755703310"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:501a031947e3a9025ed4405a168e6ef5ae3126c59f90ce0cd6f2bfc477be31b7"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:b3bc83488de33889877a0f2543ade9f70c67d66d9ebb4ac959502e12de895788"}, + {file = "pyyaml-6.0.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:c458b6d084f9b935061bc36216e8a69a7e293a2f1e68bf956dcd9e6cbcd143f5"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7c6610def4f163542a622a73fb39f534f8c101d690126992300bf3207eab9764"}, + {file = "pyyaml-6.0.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:5190d403f121660ce8d1d2c1bb2ef1bd05b5f68533fc5c2ea899bd15f4399b35"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_amd64.whl", hash = "sha256:4a2e8cebe2ff6ab7d1050ecd59c25d4c8bd7e6f400f5f82b96557ac0abafd0ac"}, + {file = "pyyaml-6.0.3-cp314-cp314-win_arm64.whl", hash = "sha256:93dda82c9c22deb0a405ea4dc5f2d0cda384168e466364dec6255b293923b2f3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_10_13_x86_64.whl", hash = "sha256:02893d100e99e03eda1c8fd5c441d8c60103fd175728e23e431db1b589cf5ab3"}, + {file = "pyyaml-6.0.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c1ff362665ae507275af2853520967820d9124984e0f7466736aea23d8611fba"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6adc77889b628398debc7b65c073bcb99c4a0237b248cacaf3fe8a557563ef6c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:a80cb027f6b349846a3bf6d73b5e95e782175e52f22108cfa17876aaeff93702"}, + {file = "pyyaml-6.0.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:00c4bdeba853cc34e7dd471f16b4114f4162dc03e6b7afcc2128711f0eca823c"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:66e1674c3ef6f541c35191caae2d429b967b99e02040f5ba928632d9a7f0f065"}, + {file = "pyyaml-6.0.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:16249ee61e95f858e83976573de0f5b2893b3677ba71c9dd36b9cf8be9ac6d65"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_amd64.whl", hash = "sha256:4ad1906908f2f5ae4e5a8ddfce73c320c2a1429ec52eafd27138b7f1cbe341c9"}, + {file = "pyyaml-6.0.3-cp314-cp314t-win_arm64.whl", hash = "sha256:ebc55a14a21cb14062aa4162f906cd962b28e2e9ea38f9b4391244cd8de4ae0b"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_10_13_x86_64.whl", hash = "sha256:b865addae83924361678b652338317d1bd7e79b1f4596f96b96c77a5a34b34da"}, + {file = "pyyaml-6.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c3355370a2c156cffb25e876646f149d5d68f5e0a3ce86a5084dd0b64a994917"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:3c5677e12444c15717b902a5798264fa7909e41153cdf9ef7ad571b704a63dd9"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_s390x.manylinux_2_17_s390x.manylinux_2_28_s390x.whl", hash = "sha256:5ed875a24292240029e4483f9d4a4b8a1ae08843b9c54f43fcc11e404532a8a5"}, + {file = "pyyaml-6.0.3-cp39-cp39-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0150219816b6a1fa26fb4699fb7daa9caf09eb1999f3b70fb6e786805e80375a"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fa160448684b4e94d80416c0fa4aac48967a969efe22931448d853ada8baf926"}, + {file = "pyyaml-6.0.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:27c0abcb4a5dac13684a37f76e701e054692a9b2d3064b70f5e4eb54810553d7"}, + {file = "pyyaml-6.0.3-cp39-cp39-win32.whl", hash = "sha256:1ebe39cb5fc479422b83de611d14e2c0d3bb2a18bbcb01f229ab3cfbd8fee7a0"}, + {file = "pyyaml-6.0.3-cp39-cp39-win_amd64.whl", hash = "sha256:2e71d11abed7344e42a8849600193d15b6def118602c4c176f748e4583246007"}, + {file = "pyyaml-6.0.3.tar.gz", hash = "sha256:d76623373421df22fb4cf8817020cbb7ef15c725b9d5e45f17e189bfc384190f"}, +] [[package]] name = "virtualenv" -version = "20.9.0" +version = "21.15.5" description = "Virtual Python Environment builder" -category = "dev" optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,>=2.7" +python-versions = ">=3.9" +groups = ["dev"] +files = [ + {file = "virtualenv-21.15.5-py3-none-any.whl", hash = "sha256:bcf98c32139cf3df7f0cc2c8c48ca150645c20e66f8c4fe6c1e5e40bcae73947"}, + {file = "virtualenv-21.15.5.tar.gz", hash = "sha256:fb869ea32930530ccc87549877b53268c2a4d4a7d7f2c384042eca05170350e6"}, +] [package.dependencies] -"backports.entry-points-selectable" = ">=1.0.4" -distlib = ">=0.3.1,<1" -filelock = ">=3.2,<4" -importlib-metadata = {version = ">=0.12", markers = "python_version < \"3.8\""} -platformdirs = ">=2,<3" -six = ">=1.9.0,<2" - -[package.extras] -docs = ["proselint (>=0.10.2)", "sphinx (>=3)", "sphinx-argparse (>=0.2.5)", "sphinx-rtd-theme (>=0.4.3)", "towncrier (>=19.9.0rc1)"] -testing = ["coverage (>=4)", "coverage-enable-subprocess (>=1)", "flaky (>=3)", "pytest (>=4)", "pytest-env (>=0.6.2)", "pytest-freezegun (>=0.4.1)", "pytest-mock (>=2)", "pytest-randomly (>=1)", "pytest-timeout (>=1)", "packaging (>=20.0)"] - -[[package]] -name = "zipp" -version = "3.7.0" -description = "Backport of pathlib-compatible object wrapper for zip files" -category = "dev" -optional = false -python-versions = ">=3.7" - -[package.extras] -docs = ["sphinx", "jaraco.packaging (>=8.2)", "rst.linker (>=1.9)"] -testing = ["pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-flake8", "pytest-cov", "pytest-enabler (>=1.0.1)", "jaraco.itertools", "func-timeout", "pytest-black (>=0.3.7)", "pytest-mypy"] +distlib = ">=0.4.3,<1" +filelock = {version = ">=3.24.2,<5", markers = "python_version >= \"3.10\""} +packaging = ">=26.3" +platformdirs = ">=4.4,<5" +python-discovery = ">=1.6.1" [metadata] -lock-version = "1.1" -python-versions = "^3.7.9" -content-hash = "b6b97ee97601d17fe039159fa87909d6dfbf02830c87edf0f5b762ed2d94717b" - -[metadata.files] -atomicwrites = [ - {file = "atomicwrites-1.4.0-py2.py3-none-any.whl", hash = "sha256:6d1784dea7c0c8d4a5172b6c620f40b6e4cbfdf96d783691f2e1302a7b88e197"}, - {file = "atomicwrites-1.4.0.tar.gz", hash = "sha256:ae70396ad1a434f9c7046fd2dd196fc04b12f9e91ffb859164193be8b6168a7a"}, -] -attrs = [ - {file = "attrs-21.4.0-py2.py3-none-any.whl", hash = "sha256:2d27e3784d7a565d36ab851fe94887c5eccd6a463168875832a1be79c82828b4"}, - {file = "attrs-21.4.0.tar.gz", hash = "sha256:626ba8234211db98e869df76230a137c4c40a12d72445c45d5f5b716f076e2fd"}, -] -"backports.entry-points-selectable" = [ - {file = "backports.entry_points_selectable-1.1.1-py2.py3-none-any.whl", hash = "sha256:7fceed9532a7aa2bd888654a7314f864a3c16a4e710b34a58cfc0f08114c663b"}, - {file = "backports.entry_points_selectable-1.1.1.tar.gz", hash = "sha256:914b21a479fde881635f7af5adc7f6e38d6b274be32269070c53b698c60d5386"}, -] -cfgv = [ - {file = "cfgv-3.3.1-py2.py3-none-any.whl", hash = "sha256:c6a0883f3917a037485059700b9e75da2464e6c27051014ad85ba6aaa5884426"}, - {file = "cfgv-3.3.1.tar.gz", hash = "sha256:f5a830efb9ce7a445376bb66ec94c638a9787422f96264c98edc6bdeed8ab736"}, -] -colorama = [ - {file = "colorama-0.4.4-py2.py3-none-any.whl", hash = "sha256:9f47eda37229f68eee03b24b9748937c7dc3868f906e8ba69fbcbdd3bc5dc3e2"}, - {file = "colorama-0.4.4.tar.gz", hash = "sha256:5941b2b48a20143d2267e95b1c2a7603ce057ee39fd88e7329b0c292aa16869b"}, -] -distlib = [ - {file = "distlib-0.3.4-py2.py3-none-any.whl", hash = "sha256:6564fe0a8f51e734df6333d08b8b94d4ea8ee6b99b5ed50613f731fd4089f34b"}, - {file = "distlib-0.3.4.zip", hash = "sha256:e4b58818180336dc9c529bfb9a0b58728ffc09ad92027a3f30b7cd91e3458579"}, -] -filelock = [ - {file = "filelock-3.6.0-py3-none-any.whl", hash = "sha256:f8314284bfffbdcfa0ff3d7992b023d4c628ced6feb957351d4c48d059f56bc0"}, - {file = "filelock-3.6.0.tar.gz", hash = "sha256:9cd540a9352e432c7246a48fe4e8712b10acb1df2ad1f30e8c070b82ae1fed85"}, -] -identify = [ - {file = "identify-2.4.12-py2.py3-none-any.whl", hash = "sha256:5f06b14366bd1facb88b00540a1de05b69b310cbc2654db3c7e07fa3a4339323"}, - {file = "identify-2.4.12.tar.gz", hash = "sha256:3f3244a559290e7d3deb9e9adc7b33594c1bc85a9dd82e0f1be519bf12a1ec17"}, -] -importlib-metadata = [ - {file = "importlib_metadata-4.11.3-py3-none-any.whl", hash = "sha256:1208431ca90a8cca1a6b8af391bb53c1a2db74e5d1cef6ddced95d4b2062edc6"}, - {file = "importlib_metadata-4.11.3.tar.gz", hash = "sha256:ea4c597ebf37142f827b8f39299579e31685c31d3a438b59f469406afd0f2539"}, -] -iniconfig = [ - {file = "iniconfig-1.1.1-py2.py3-none-any.whl", hash = "sha256:011e24c64b7f47f6ebd835bb12a743f2fbe9a26d4cecaa7f53bc4f35ee9da8b3"}, - {file = "iniconfig-1.1.1.tar.gz", hash = "sha256:bc3af051d7d14b2ee5ef9969666def0cd1a000e121eaea580d4a313df4b37f32"}, -] -lxml = [ - {file = "lxml-4.8.0-cp27-cp27m-macosx_10_14_x86_64.whl", hash = "sha256:e1ab2fac607842ac36864e358c42feb0960ae62c34aa4caaf12ada0a1fb5d99b"}, - {file = "lxml-4.8.0-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:28d1af847786f68bec57961f31221125c29d6f52d9187c01cd34dc14e2b29430"}, - {file = "lxml-4.8.0-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b92d40121dcbd74831b690a75533da703750f7041b4bf951befc657c37e5695a"}, - {file = "lxml-4.8.0-cp27-cp27m-win32.whl", hash = "sha256:e01f9531ba5420838c801c21c1b0f45dbc9607cb22ea2cf132844453bec863a5"}, - {file = "lxml-4.8.0-cp27-cp27m-win_amd64.whl", hash = "sha256:6259b511b0f2527e6d55ad87acc1c07b3cbffc3d5e050d7e7bcfa151b8202df9"}, - {file = "lxml-4.8.0-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1010042bfcac2b2dc6098260a2ed022968dbdfaf285fc65a3acf8e4eb1ffd1bc"}, - {file = "lxml-4.8.0-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:fa56bb08b3dd8eac3a8c5b7d075c94e74f755fd9d8a04543ae8d37b1612dd170"}, - {file = "lxml-4.8.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:31ba2cbc64516dcdd6c24418daa7abff989ddf3ba6d3ea6f6ce6f2ed6e754ec9"}, - {file = "lxml-4.8.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:31499847fc5f73ee17dbe1b8e24c6dafc4e8d5b48803d17d22988976b0171f03"}, - {file = "lxml-4.8.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:5f7d7d9afc7b293147e2d506a4596641d60181a35279ef3aa5778d0d9d9123fe"}, - {file = "lxml-4.8.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a3c5f1a719aa11866ffc530d54ad965063a8cbbecae6515acbd5f0fae8f48eaa"}, - {file = "lxml-4.8.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:6268e27873a3d191849204d00d03f65c0e343b3bcb518a6eaae05677c95621d1"}, - {file = "lxml-4.8.0-cp310-cp310-win32.whl", hash = "sha256:330bff92c26d4aee79c5bc4d9967858bdbe73fdbdbacb5daf623a03a914fe05b"}, - {file = "lxml-4.8.0-cp310-cp310-win_amd64.whl", hash = "sha256:b2582b238e1658c4061ebe1b4df53c435190d22457642377fd0cb30685cdfb76"}, - {file = "lxml-4.8.0-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a2bfc7e2a0601b475477c954bf167dee6d0f55cb167e3f3e7cefad906e7759f6"}, - {file = "lxml-4.8.0-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:a1547ff4b8a833511eeaceacbcd17b043214fcdb385148f9c1bc5556ca9623e2"}, - {file = "lxml-4.8.0-cp35-cp35m-win32.whl", hash = "sha256:a9f1c3489736ff8e1c7652e9dc39f80cff820f23624f23d9eab6e122ac99b150"}, - {file = "lxml-4.8.0-cp35-cp35m-win_amd64.whl", hash = "sha256:530f278849031b0eb12f46cca0e5db01cfe5177ab13bd6878c6e739319bae654"}, - {file = "lxml-4.8.0-cp36-cp36m-macosx_10_14_x86_64.whl", hash = "sha256:078306d19a33920004addeb5f4630781aaeabb6a8d01398045fcde085091a169"}, - {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:86545e351e879d0b72b620db6a3b96346921fa87b3d366d6c074e5a9a0b8dadb"}, - {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:24f5c5ae618395ed871b3d8ebfcbb36e3f1091fd847bf54c4de623f9107942f3"}, - {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bbab6faf6568484707acc052f4dfc3802bdb0cafe079383fbaa23f1cdae9ecd4"}, - {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7993232bd4044392c47779a3c7e8889fea6883be46281d45a81451acfd704d7e"}, - {file = "lxml-4.8.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:6d6483b1229470e1d8835e52e0ff3c6973b9b97b24cd1c116dca90b57a2cc613"}, - {file = "lxml-4.8.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:ad4332a532e2d5acb231a2e5d33f943750091ee435daffca3fec0a53224e7e33"}, - {file = "lxml-4.8.0-cp36-cp36m-win32.whl", hash = "sha256:db3535733f59e5605a88a706824dfcb9bd06725e709ecb017e165fc1d6e7d429"}, - {file = "lxml-4.8.0-cp36-cp36m-win_amd64.whl", hash = "sha256:5f148b0c6133fb928503cfcdfdba395010f997aa44bcf6474fcdd0c5398d9b63"}, - {file = "lxml-4.8.0-cp37-cp37m-macosx_10_14_x86_64.whl", hash = "sha256:8a31f24e2a0b6317f33aafbb2f0895c0bce772980ae60c2c640d82caac49628a"}, - {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:719544565c2937c21a6f76d520e6e52b726d132815adb3447ccffbe9f44203c4"}, - {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:c0b88ed1ae66777a798dc54f627e32d3b81c8009967c63993c450ee4cbcbec15"}, - {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:fa9b7c450be85bfc6cd39f6df8c5b8cbd76b5d6fc1f69efec80203f9894b885f"}, - {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e9f84ed9f4d50b74fbc77298ee5c870f67cb7e91dcdc1a6915cb1ff6a317476c"}, - {file = "lxml-4.8.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:1d650812b52d98679ed6c6b3b55cbb8fe5a5460a0aef29aeb08dc0b44577df85"}, - {file = "lxml-4.8.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:80bbaddf2baab7e6de4bc47405e34948e694a9efe0861c61cdc23aa774fcb141"}, - {file = "lxml-4.8.0-cp37-cp37m-win32.whl", hash = "sha256:6f7b82934c08e28a2d537d870293236b1000d94d0b4583825ab9649aef7ddf63"}, - {file = "lxml-4.8.0-cp37-cp37m-win_amd64.whl", hash = "sha256:e1fd7d2fe11f1cb63d3336d147c852f6d07de0d0020d704c6031b46a30b02ca8"}, - {file = "lxml-4.8.0-cp38-cp38-macosx_10_14_x86_64.whl", hash = "sha256:5045ee1ccd45a89c4daec1160217d363fcd23811e26734688007c26f28c9e9e7"}, - {file = "lxml-4.8.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0c1978ff1fd81ed9dcbba4f91cf09faf1f8082c9d72eb122e92294716c605428"}, - {file = "lxml-4.8.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:52cbf2ff155b19dc4d4100f7442f6a697938bf4493f8d3b0c51d45568d5666b5"}, - {file = "lxml-4.8.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ce13d6291a5f47c1c8dbd375baa78551053bc6b5e5c0e9bb8e39c0a8359fd52f"}, - {file = "lxml-4.8.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e11527dc23d5ef44d76fef11213215c34f36af1608074561fcc561d983aeb870"}, - {file = "lxml-4.8.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:60d2f60bd5a2a979df28ab309352cdcf8181bda0cca4529769a945f09aba06f9"}, - {file = "lxml-4.8.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:62f93eac69ec0f4be98d1b96f4d6b964855b8255c345c17ff12c20b93f247b68"}, - {file = "lxml-4.8.0-cp38-cp38-win32.whl", hash = "sha256:20b8a746a026017acf07da39fdb10aa80ad9877046c9182442bf80c84a1c4696"}, - {file = "lxml-4.8.0-cp38-cp38-win_amd64.whl", hash = "sha256:891dc8f522d7059ff0024cd3ae79fd224752676447f9c678f2a5c14b84d9a939"}, - {file = "lxml-4.8.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:b6fc2e2fb6f532cf48b5fed57567ef286addcef38c28874458a41b7837a57807"}, - {file = "lxml-4.8.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:74eb65ec61e3c7c019d7169387d1b6ffcfea1b9ec5894d116a9a903636e4a0b1"}, - {file = "lxml-4.8.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:627e79894770783c129cc5e89b947e52aa26e8e0557c7e205368a809da4b7939"}, - {file = "lxml-4.8.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:545bd39c9481f2e3f2727c78c169425efbfb3fbba6e7db4f46a80ebb249819ca"}, - {file = "lxml-4.8.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5a58d0b12f5053e270510bf12f753a76aaf3d74c453c00942ed7d2c804ca845c"}, - {file = "lxml-4.8.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec4b4e75fc68da9dc0ed73dcdb431c25c57775383fec325d23a770a64e7ebc87"}, - {file = "lxml-4.8.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5804e04feb4e61babf3911c2a974a5b86f66ee227cc5006230b00ac6d285b3a9"}, - {file = "lxml-4.8.0-cp39-cp39-win32.whl", hash = "sha256:aa0cf4922da7a3c905d000b35065df6184c0dc1d866dd3b86fd961905bbad2ea"}, - {file = "lxml-4.8.0-cp39-cp39-win_amd64.whl", hash = "sha256:dd10383f1d6b7edf247d0960a3db274c07e96cf3a3fc7c41c8448f93eac3fb1c"}, - {file = "lxml-4.8.0-pp37-pypy37_pp73-macosx_10_14_x86_64.whl", hash = "sha256:2403a6d6fb61c285969b71f4a3527873fe93fd0abe0832d858a17fe68c8fa507"}, - {file = "lxml-4.8.0-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:986b7a96228c9b4942ec420eff37556c5777bfba6758edcb95421e4a614b57f9"}, - {file = "lxml-4.8.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6fe4ef4402df0250b75ba876c3795510d782def5c1e63890bde02d622570d39e"}, - {file = "lxml-4.8.0-pp38-pypy38_pp73-macosx_10_14_x86_64.whl", hash = "sha256:f10ce66fcdeb3543df51d423ede7e238be98412232fca5daec3e54bcd16b8da0"}, - {file = "lxml-4.8.0-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:730766072fd5dcb219dd2b95c4c49752a54f00157f322bc6d71f7d2a31fecd79"}, - {file = "lxml-4.8.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:8b99ec73073b37f9ebe8caf399001848fced9c08064effdbfc4da2b5a8d07b93"}, - {file = "lxml-4.8.0.tar.gz", hash = "sha256:f63f62fc60e6228a4ca9abae28228f35e1bd3ce675013d1dfb828688d50c6e23"}, -] -nodeenv = [ - {file = "nodeenv-1.6.0-py2.py3-none-any.whl", hash = "sha256:621e6b7076565ddcacd2db0294c0381e01fd28945ab36bcf00f41c5daf63bef7"}, - {file = "nodeenv-1.6.0.tar.gz", hash = "sha256:3ef13ff90291ba2a4a7a4ff9a979b63ffdd00a464dbe04acf0ea6471517a4c2b"}, -] -packaging = [ - {file = "packaging-21.3-py3-none-any.whl", hash = "sha256:ef103e05f519cdc783ae24ea4e2e0f508a9c99b2d4969652eed6a2e1ea5bd522"}, - {file = "packaging-21.3.tar.gz", hash = "sha256:dd47c42927d89ab911e606518907cc2d3a1f38bbd026385970643f9c5b8ecfeb"}, -] -platformdirs = [ - {file = "platformdirs-2.5.1-py3-none-any.whl", hash = "sha256:bcae7cab893c2d310a711b70b24efb93334febe65f8de776ee320b517471e227"}, - {file = "platformdirs-2.5.1.tar.gz", hash = "sha256:7535e70dfa32e84d4b34996ea99c5e432fa29a708d0f4e394bbcb2a8faa4f16d"}, -] -pluggy = [ - {file = "pluggy-1.0.0-py2.py3-none-any.whl", hash = "sha256:74134bbf457f031a36d68416e1509f34bd5ccc019f0bcc952c7b909d06b37bd3"}, - {file = "pluggy-1.0.0.tar.gz", hash = "sha256:4224373bacce55f955a878bf9cfa763c1e360858e330072059e10bad68531159"}, -] -pre-commit = [ - {file = "pre_commit-2.17.0-py2.py3-none-any.whl", hash = "sha256:725fa7459782d7bec5ead072810e47351de01709be838c2ce1726b9591dad616"}, - {file = "pre_commit-2.17.0.tar.gz", hash = "sha256:c1a8040ff15ad3d648c70cc3e55b93e4d2d5b687320955505587fd79bbaed06a"}, -] -py = [ - {file = "py-1.11.0-py2.py3-none-any.whl", hash = "sha256:607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378"}, - {file = "py-1.11.0.tar.gz", hash = "sha256:51c75c4126074b472f746a24399ad32f6053d1b34b68d2fa41e558e6f4a98719"}, -] -pyparsing = [ - {file = "pyparsing-3.0.7-py3-none-any.whl", hash = "sha256:a6c06a88f252e6c322f65faf8f418b16213b51bdfaece0524c1c1bc30c63c484"}, - {file = "pyparsing-3.0.7.tar.gz", hash = "sha256:18ee9022775d270c55187733956460083db60b37d0d0fb357445f3094eed3eea"}, -] -pytest = [ - {file = "pytest-6.2.5-py3-none-any.whl", hash = "sha256:7310f8d27bc79ced999e760ca304d69f6ba6c6649c0b60fb0e04a4a77cacc134"}, - {file = "pytest-6.2.5.tar.gz", hash = "sha256:131b36680866a76e6781d13f101efb86cf674ebb9762eb70d3082b6f29889e89"}, -] -pyyaml = [ - {file = "PyYAML-6.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d4db7c7aef085872ef65a8fd7d6d09a14ae91f691dec3e87ee5ee0539d516f53"}, - {file = "PyYAML-6.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9df7ed3b3d2e0ecfe09e14741b857df43adb5a3ddadc919a2d94fbdf78fea53c"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f396e6ef4c73fdc33a9157446466f1cff553d979bd00ecb64385760c6babdc"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a80a78046a72361de73f8f395f1f1e49f956c6be882eed58505a15f3e430962b"}, - {file = "PyYAML-6.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f84fbc98b019fef2ee9a1cb3ce93e3187a6df0b2538a651bfb890254ba9f90b5"}, - {file = "PyYAML-6.0-cp310-cp310-win32.whl", hash = "sha256:2cd5df3de48857ed0544b34e2d40e9fac445930039f3cfe4bcc592a1f836d513"}, - {file = "PyYAML-6.0-cp310-cp310-win_amd64.whl", hash = "sha256:daf496c58a8c52083df09b80c860005194014c3698698d1a57cbcfa182142a3a"}, - {file = "PyYAML-6.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:897b80890765f037df3403d22bab41627ca8811ae55e9a722fd0392850ec4d86"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50602afada6d6cbfad699b0c7bb50d5ccffa7e46a3d738092afddc1f9758427f"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:48c346915c114f5fdb3ead70312bd042a953a8ce5c7106d5bfb1a5254e47da92"}, - {file = "PyYAML-6.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:98c4d36e99714e55cfbaaee6dd5badbc9a1ec339ebfc3b1f52e293aee6bb71a4"}, - {file = "PyYAML-6.0-cp36-cp36m-win32.whl", hash = "sha256:0283c35a6a9fbf047493e3a0ce8d79ef5030852c51e9d911a27badfde0605293"}, - {file = "PyYAML-6.0-cp36-cp36m-win_amd64.whl", hash = "sha256:07751360502caac1c067a8132d150cf3d61339af5691fe9e87803040dbc5db57"}, - {file = "PyYAML-6.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:819b3830a1543db06c4d4b865e70ded25be52a2e0631ccd2f6a47a2822f2fd7c"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:473f9edb243cb1935ab5a084eb238d842fb8f404ed2193a915d1784b5a6b5fc0"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0ce82d761c532fe4ec3f87fc45688bdd3a4c1dc5e0b4a19814b9009a29baefd4"}, - {file = "PyYAML-6.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:231710d57adfd809ef5d34183b8ed1eeae3f76459c18fb4a0b373ad56bedcdd9"}, - {file = "PyYAML-6.0-cp37-cp37m-win32.whl", hash = "sha256:c5687b8d43cf58545ade1fe3e055f70eac7a5a1a0bf42824308d868289a95737"}, - {file = "PyYAML-6.0-cp37-cp37m-win_amd64.whl", hash = "sha256:d15a181d1ecd0d4270dc32edb46f7cb7733c7c508857278d3d378d14d606db2d"}, - {file = "PyYAML-6.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0b4624f379dab24d3725ffde76559cff63d9ec94e1736b556dacdfebe5ab6d4b"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:213c60cd50106436cc818accf5baa1aba61c0189ff610f64f4a3e8c6726218ba"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9fa600030013c4de8165339db93d182b9431076eb98eb40ee068700c9c813e34"}, - {file = "PyYAML-6.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:277a0ef2981ca40581a47093e9e2d13b3f1fbbeffae064c1d21bfceba2030287"}, - {file = "PyYAML-6.0-cp38-cp38-win32.whl", hash = "sha256:d4eccecf9adf6fbcc6861a38015c2a64f38b9d94838ac1810a9023a0609e1b78"}, - {file = "PyYAML-6.0-cp38-cp38-win_amd64.whl", hash = "sha256:1e4747bc279b4f613a09eb64bba2ba602d8a6664c6ce6396a4d0cd413a50ce07"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:055d937d65826939cb044fc8c9b08889e8c743fdc6a32b33e2390f66013e449b"}, - {file = "PyYAML-6.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e61ceaab6f49fb8bdfaa0f92c4b57bcfbea54c09277b1b4f7ac376bfb7a7c174"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d67d839ede4ed1b28a4e8909735fc992a923cdb84e618544973d7dfc71540803"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba8c411ef271aa037d7357a2bc8f9ee8b58b9965831d9e51baf703280dc73d3"}, - {file = "PyYAML-6.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:40527857252b61eacd1d9af500c3337ba8deb8fc298940291486c465c8b46ec0"}, - {file = "PyYAML-6.0-cp39-cp39-win32.whl", hash = "sha256:b5b9eccad747aabaaffbc6064800670f0c297e52c12754eb1d976c57e4f74dcb"}, - {file = "PyYAML-6.0-cp39-cp39-win_amd64.whl", hash = "sha256:b3d267842bf12586ba6c734f89d1f5b871df0273157918b0ccefa29deb05c21c"}, - {file = "PyYAML-6.0.tar.gz", hash = "sha256:68fb519c14306fec9720a2a5b45bc9f0c8d1b9c72adf45c37baedfcd949c35a2"}, -] -six = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, -] -toml = [ - {file = "toml-0.10.2-py2.py3-none-any.whl", hash = "sha256:806143ae5bfb6a3c6e736a764057db0e6a0e05e338b5630894a5f779cabb4f9b"}, - {file = "toml-0.10.2.tar.gz", hash = "sha256:b3bda1d108d5dd99f4a20d24d9c348e91c4db7ab1b749200bded2f839ccbe68f"}, -] -typing-extensions = [ - {file = "typing_extensions-4.1.1-py3-none-any.whl", hash = "sha256:21c85e0fe4b9a155d0799430b0ad741cdce7e359660ccbd8b530613e8df88ce2"}, - {file = "typing_extensions-4.1.1.tar.gz", hash = "sha256:1a9462dcc3347a79b1f1c0271fbe79e844580bb598bafa1ed208b94da3cdcd42"}, -] -virtualenv = [ - {file = "virtualenv-20.9.0-py2.py3-none-any.whl", hash = "sha256:1d145deec2da86b29026be49c775cc5a9aab434f85f7efef98307fb3965165de"}, - {file = "virtualenv-20.9.0.tar.gz", hash = "sha256:bb55ace18de14593947354e5e6cd1be75fb32c3329651da62e92bf5d0aab7213"}, -] -zipp = [ - {file = "zipp-3.7.0-py3-none-any.whl", hash = "sha256:b47250dd24f92b7dd6a0a8fc5244da14608f3ca90a5efcd37a3b1642fac9a375"}, - {file = "zipp-3.7.0.tar.gz", hash = "sha256:9f50f446828eb9d45b267433fd3e9da8d801f614129124863f9c51ebceafb87d"}, -] +lock-version = "2.1" +python-versions = ">=3.11" +content-hash = "98cb0ab94bffd1825ac36f432e7eb75695a9e7ce52e833bcd8fc63a501520e3e" diff --git a/pyproject.toml b/pyproject.toml index d799277..37ab5b3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,18 +1,30 @@ -[tool.poetry] +[project] name = "bsyncpy" -version = "0.3.0" +version = "0.4.0" description = "Tools to autogenerate a Python SDK for BuildingSync given an XSD" -authors = ["Joel Bender ", "Nicholas Long ", "Jie Xiong "] +authors = [ + { name = "Joel Bender", email = "joel@carrickbender.com" }, + { name = "Nicholas Long", email = "nicholas.lee.long@gmail.com" }, + { name = "Jie Xiong", email = "jiexiong9119@gmail.com" }, +] +readme = "README.md" +requires-python = ">=3.11" +dependencies = ["lxml>=5.0"] +classifiers = [ + "Programming Language :: Python :: 3", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", + "Programming Language :: Python :: 3.13", + "Programming Language :: Python :: 3.14", +] -[tool.poetry.dependencies] -python = "^3.7.9" -lxml = "^4.6.3" +[project.urls] +Repository = "https://github.com/BuildingSync/bsyncpy" -[tool.poetry.dev-dependencies] -pytest = "^6.2.5" -pre-commit = "^2.15.0" -virtualenv = "20.09.0" +[tool.poetry.group.dev.dependencies] +pytest = "^9.0" +pre-commit = "^4.0" [build-system] -requires = ["poetry-core>=1.0.0"] +requires = ["poetry-core>=2.0.0"] build-backend = "poetry.core.masonry.api" diff --git a/tests/test_basic.py b/tests/test_basic.py index 4742fb2..da48099 100644 --- a/tests/test_basic.py +++ b/tests/test_basic.py @@ -11,7 +11,7 @@ def test_writefile(): # Create a root and set the version attribute root = bsync.BuildingSync() - root.set("version", "2.5.0") + root.set("version", "2.7.0") # Valid element attributes can also be passed in as kwargs f = bsync.Facilities(bsync.Facilities.Facility(ID="Facility-42")) @@ -32,7 +32,7 @@ def test_writefile(): assert os.path.exists("output.xml") == True with open("output.xml") as f: - if '' in f.read(): + if '' in f.read(): assert True else: assert False, "Could not find correct BuildingSync version in file" From 57d8321b8cffd5189f966bb6032dceb431178780 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Fri, 6 Nov 2026 17:40:40 +0000 Subject: [PATCH 2/2] Handle positive integer elements Co-authored-by: kflemin <2205659+kflemin@users.noreply.github.com> --- bsyncpy/bsync.py | 9 +++++++++ bsyncpy/bsyncpy_header.py | 9 +++++++++ tests/test_bsyncpy.py | 14 ++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/bsyncpy/bsync.py b/bsyncpy/bsync.py index 8e5001d..9a8b805 100644 --- a/bsyncpy/bsync.py +++ b/bsyncpy/bsync.py @@ -60,6 +60,15 @@ def __init__(self, *args, **kwargs): raise TypeError("integer expected") self._text = f"{arg_value:d}" + elif self.element_type == "xs:positiveInteger": + if len(args) > 1: + raise RuntimeError("too many arguments") + if not isinstance(arg_value, int): + raise TypeError("integer expected") + if arg_value < 1: + raise ValueError("positive integer expected") + self._text = f"{arg_value:d}" + elif self.element_type == "xs:nonNegativeInteger": if len(args) > 1: raise RuntimeError("too many arguments") diff --git a/bsyncpy/bsyncpy_header.py b/bsyncpy/bsyncpy_header.py index 018f53d..4d678cd 100644 --- a/bsyncpy/bsyncpy_header.py +++ b/bsyncpy/bsyncpy_header.py @@ -60,6 +60,15 @@ def __init__(self, *args, **kwargs): raise TypeError("integer expected") self._text = f"{arg_value:d}" + elif self.element_type == "xs:positiveInteger": + if len(args) > 1: + raise RuntimeError("too many arguments") + if not isinstance(arg_value, int): + raise TypeError("integer expected") + if arg_value < 1: + raise ValueError("positive integer expected") + self._text = f"{arg_value:d}" + elif self.element_type == "xs:nonNegativeInteger": if len(args) > 1: raise RuntimeError("too many arguments") diff --git a/tests/test_bsyncpy.py b/tests/test_bsyncpy.py index 9fbbd39..937f81e 100644 --- a/tests/test_bsyncpy.py +++ b/tests/test_bsyncpy.py @@ -1,6 +1,7 @@ import datetime from bsyncpy import bsync from lxml import etree +import pytest def test_initialize(): @@ -13,6 +14,19 @@ def test_int_datatype(): assert b is not None +def test_positive_integer_datatype(): + linked_audit_cycle = bsync.LinkedAuditCycle(bsync.IndexYearOfAuditCycle(1)) + assert etree.tostring(linked_audit_cycle.toxml()) == ( + b"1" + b"" + ) + + with pytest.raises(ValueError, match="positive integer expected"): + bsync.IndexYearOfAuditCycle(0) + with pytest.raises(ValueError, match="positive integer expected"): + bsync.IndexYearOfAuditCycle(-1) + + def test_weather_data_station_id(): """ Added to ensure 'strange formulations', as described in https://github.com/BuildingSync/bsyncpy/issues/2