Showing preview only (2,866K chars total). Download the full file or copy to clipboard to get everything.
Repository: openeemeter/eemeter
Branch: master
Commit: 43cf8da4d786
Files: 218
Total size: 13.3 MB
Directory structure:
gitextract_3_jyodj_/
├── .coveragerc
├── .dockerignore
├── .gitattributes
├── .gitignore
├── CHANGELOG.md
├── CHARTER.md
├── CODE_OF_CONDUCT.md
├── CONTRIBUTING.md
├── Dockerfile
├── LICENSE
├── MAINTAINERS.md
├── MANIFEST.in
├── README.md
├── bump_version.sh
├── data/
│ ├── attribution.txt
│ ├── features.csv
│ ├── hourly_data_2.parquet
│ ├── month_loadshape.csv
│ ├── seasonal_day_of_week_loadshape.csv
│ └── seasonal_hourly_day_of_week_loadshape.csv
├── docker-compose.yml
├── docs/
│ └── gridmeter/
│ ├── gridmeter.__version__.rst
│ ├── gridmeter.bin_selection.rst
│ ├── gridmeter.bins.rst
│ ├── gridmeter.diagnostics.rst
│ ├── gridmeter.distance_calc_selection.rst
│ ├── gridmeter.equivalence.rst
│ ├── gridmeter.model.rst
│ ├── gridmeter.param_selection.rst
│ ├── gridmeter.rst
│ └── gridmeter.synthetic_data.rst
├── opendsm/
│ ├── __init__.py
│ ├── common/
│ │ ├── __init__.py
│ │ ├── base_settings.py
│ │ ├── clustering/
│ │ │ ├── __init__.py
│ │ │ ├── algorithms/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── birch.py
│ │ │ │ ├── bisect_k_means.py
│ │ │ │ ├── dbscan.py
│ │ │ │ ├── hdbscan.py
│ │ │ │ ├── sklearn_bisect_k_means.py
│ │ │ │ └── spectral.py
│ │ │ ├── cluster.py
│ │ │ ├── metrics/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── cluster_metrics.py
│ │ │ │ └── density_based_clustering_validation.py
│ │ │ ├── scoring.py
│ │ │ ├── settings.py
│ │ │ ├── transform.py
│ │ │ └── voting.py
│ │ ├── const.py
│ │ ├── hourly_interpolation.py
│ │ ├── metrics.py
│ │ ├── pydantic_utils.py
│ │ ├── stats/
│ │ │ ├── __init__.py
│ │ │ ├── adaptive_loss.py
│ │ │ ├── adaptive_loss_Z.py
│ │ │ ├── basic.py
│ │ │ ├── distribution_transform/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── bisymlog.py
│ │ │ │ ├── mu_sigma.py
│ │ │ │ ├── raymaekers_robust_yeo_johnson.py
│ │ │ │ ├── scipy_yeo_johnson.py
│ │ │ │ └── standardize.py
│ │ │ ├── outliers.py
│ │ │ └── outliers_transformed.py
│ │ ├── test_data.py
│ │ └── utils.py
│ ├── comparison_groups/
│ │ ├── __init__.py
│ │ ├── archived_gridmeter_changelog.md
│ │ ├── cg_clustering/
│ │ │ ├── __init__.py
│ │ │ ├── bounds.py
│ │ │ ├── create_comparison_groups.py
│ │ │ ├── settings.py
│ │ │ └── treatment_fit.py
│ │ ├── common/
│ │ │ ├── __init__.py
│ │ │ ├── base_comparison_group.py
│ │ │ ├── const.py
│ │ │ ├── data.py
│ │ │ ├── data_settings.py
│ │ │ └── tutorial_data.py
│ │ ├── individual_meter_matching/
│ │ │ ├── __init__.py
│ │ │ ├── create_comparison_groups.py
│ │ │ ├── distance_calc_selection.py
│ │ │ ├── highs_settings.py
│ │ │ └── settings.py
│ │ ├── random_sampling/
│ │ │ ├── __init__.py
│ │ │ ├── create_comparison_groups.py
│ │ │ └── settings.py
│ │ ├── savings/
│ │ │ ├── __init__.py
│ │ │ ├── archived_dev.py
│ │ │ ├── cg_correction_testing.py
│ │ │ ├── model_correction.py
│ │ │ ├── scratch.ipynb
│ │ │ └── settings.py
│ │ └── stratified_sampling/
│ │ ├── __init__.py
│ │ ├── bin_selection.py
│ │ ├── bins.py
│ │ ├── const.py
│ │ ├── create_comparison_groups.py
│ │ ├── diagnostics.py
│ │ ├── equivalence.py
│ │ ├── model.py
│ │ ├── param_selection.py
│ │ └── settings.py
│ ├── drmeter/
│ │ ├── __init__.py
│ │ └── models/
│ │ ├── __init__.py
│ │ └── caltrack/
│ │ ├── __init__.py
│ │ ├── data.py
│ │ └── model.py
│ └── eemeter/
│ ├── __init__.py
│ ├── common/
│ │ ├── __init__.py
│ │ ├── data_processor_utilities.py
│ │ ├── data_settings.py
│ │ ├── exceptions.py
│ │ ├── features.py
│ │ ├── sufficiency_criteria.py
│ │ ├── transform.py
│ │ └── warnings.py
│ ├── models/
│ │ ├── __init__.py
│ │ ├── billing/
│ │ │ ├── __init__.py
│ │ │ ├── data.py
│ │ │ ├── model.py
│ │ │ ├── plot.py
│ │ │ ├── settings.py
│ │ │ └── weighted_model.py
│ │ ├── daily/
│ │ │ ├── __init__.py
│ │ │ ├── base_models/
│ │ │ │ ├── __init__.py
│ │ │ │ ├── c_hdd_tidd.py
│ │ │ │ ├── full_model.py
│ │ │ │ ├── hdd_tidd_cdd.py
│ │ │ │ └── tidd.py
│ │ │ ├── data.py
│ │ │ ├── fit_base_models.py
│ │ │ ├── model.py
│ │ │ ├── objective_function.py
│ │ │ ├── optimize.py
│ │ │ ├── optimize_results.py
│ │ │ ├── parameters.py
│ │ │ ├── plot.py
│ │ │ └── utilities/
│ │ │ ├── __init__.py
│ │ │ ├── base_model.py
│ │ │ ├── const.py
│ │ │ ├── ellipsoid_test.py
│ │ │ ├── opt_settings.py
│ │ │ ├── selection_criteria.py
│ │ │ └── settings.py
│ │ ├── hourly/
│ │ │ ├── __init__.py
│ │ │ ├── data.py
│ │ │ ├── model.py
│ │ │ └── settings.py
│ │ └── hourly_caltrack/
│ │ ├── __init__.py
│ │ ├── data.py
│ │ ├── derivatives.py
│ │ ├── design_matrices.py
│ │ ├── metrics.py
│ │ ├── model.py
│ │ ├── segmentation.py
│ │ ├── usage_per_day.py
│ │ └── wrapper.py
│ ├── samples/
│ │ ├── __init__.py
│ │ ├── load.py
│ │ └── metadata.json
│ └── utilities/
│ ├── __init__.py
│ └── io.py
├── pyproject.toml
├── pytest.ini
├── setup.cfg
├── tests/
│ ├── common/
│ │ ├── clustering/
│ │ │ ├── test_bisect_k_means.py
│ │ │ ├── test_cluster.py
│ │ │ ├── test_cluster_transform.py
│ │ │ ├── test_spectral.py
│ │ │ └── test_voting.py
│ │ ├── metrics.py
│ │ ├── test_basic_stats.py
│ │ └── test_utils.py
│ ├── comparison_groups/
│ │ ├── conftest.py
│ │ ├── imm/
│ │ │ └── test_distance_calc_selection.py
│ │ └── stratified_sampling/
│ │ ├── test_bin.py
│ │ ├── test_bin_selection.py
│ │ ├── test_diagnostics.py
│ │ ├── test_equivalence.py
│ │ └── test_model.py
│ ├── conftest.py
│ ├── eemeter/
│ │ ├── daily_model/
│ │ │ ├── base_models/
│ │ │ │ ├── test_c_hdd_tidd_smooth.py
│ │ │ │ └── test_full_model_finder.py
│ │ │ ├── test_billing_data.py
│ │ │ ├── test_daily_data.py
│ │ │ ├── test_daily_model.py
│ │ │ ├── test_data.csv
│ │ │ ├── test_fit_base_models.py
│ │ │ ├── test_fit_model.py
│ │ │ ├── test_objective_function.py
│ │ │ ├── test_optimize.py
│ │ │ ├── test_optimize_results.py
│ │ │ └── utilities/
│ │ │ ├── test_adaptive_loss.py
│ │ │ ├── test_base_model.py
│ │ │ ├── test_config.py
│ │ │ ├── test_ellipsoid_test.py
│ │ │ └── test_selection_criteria.py
│ │ └── hourly_model/
│ │ ├── conftest.py
│ │ └── test_hourly_model.py
│ ├── legacy_hourly.json
│ ├── snapshots/
│ │ ├── __init__.py
│ │ └── snap_test_features.py
│ ├── test_caltrack_design_matrices.py
│ ├── test_caltrack_hourly.py
│ ├── test_derivatives.py
│ ├── test_exceptions.py
│ ├── test_features.py
│ ├── test_io.py
│ ├── test_json_serialization.py
│ ├── test_samples.py
│ ├── test_segmentation.py
│ ├── test_transform.py
│ ├── test_version.py
│ └── test_warnings.py
└── tox.ini
================================================
FILE CONTENTS
================================================
================================================
FILE: .coveragerc
================================================
[run]
omit =
.tox/*
setup.py
================================================
FILE: .dockerignore
================================================
**/*.pyc
**/*.pyo
**/*.pyd
.git
.tox
**/__pycache__
**/.DS_Store
**/*.egg-info
================================================
FILE: .gitattributes
================================================
scripts/* linguist-documentation
================================================
FILE: .gitignore
================================================
*.py[cod]
__pycache__/
*.egg-info
_build
build/
dist/
prof/
venv/
uv.lock
.ipynb_checkpoints/
.*
!.github/
!.travis.yml
!.coveragerc
!.gitignore
!.gitattributes
!.dockerignore
!.pyup.yml
================================================
FILE: CHANGELOG.md
================================================
Changelog
=========
Development
-----------
opendsm-1.2.7
-----------
* Switch build to use pyproject.toml and uv
* Change pyproject.toml build system to hatchling
* Update to example data to include GHI
* Update `load_test_data` function to always pull from GitHub.
* Add comparison groups. This feature is still in development. Final API is unfinished.
* Consolidate clustering for hourly model and CG clustering
* Add cluster voting
* Include new indices and update `ClusteringMetrics` class
* Implemented Numba and revised functions in adaptive_loss and stats.basic
* Update dependencies
opendsm-1.2.6
-----------
* Fixed bug in `from_series` instantiation of daily data class
opendsm-1.2.5
-----------
* Expose SpectralClustering's assign_labels options. `discretize` and `cluster_qr` are not always deterministic with seed
* Added more metrics to BaselineMetrics
opendsm-1.2.4
-----
* Bug fix of metrics that squeaked through
opendsm-1.2.3
-----
* Spectral clustering is now seeded appropriately
* Fixed bug making seed in main hourly settings not be passed to clustering settings
* Including new metrics in baseline_metrics
opendsm-1.2.2
-----
* Change daily model to use CVRMSE_adj and PNRMSE_adj as intended
* Autocorrelation function is now consistent
opendsm-1.2.1
-----
* Revert how autocorr is calculated prior to 1.2.0
opendsm-1.2.0
-----
* Add hourly model uncertainty
* Daily model uses BaselineMetrics natively now, accessible from model.baseline_metrics
* Data classes now accept dictionaries to modify DQ criteria. This is an R&D feature
* Migrate to modern Python logger interface to solve deprecation warnings
opendsm-1.1.0
-----
* Updated the Hourly model
* Performed new optimization for Hourly model configuration
* Developed adaptive robust weighting per hour-of-day for the hourly model
* Updated adaptive loss function. Previously it assumed too large of a range of outliers and made choosing alphas < 0 unlikely
* Altered clustering methodology, it now uses spectral clustering
* Changed temperature binning to be fixed bins
* Made temporal bins/temperature bins act together on temperature
* Disallow negative CVRMSE in Hourly model
* Added daily CVRMSE >= 0 and PNRMSE sufficiency requirements
* Partially updated Daily model to use baseline_metrics
* Changed extreme values warning flag to check using IQR rule instead of median +- IQR which is incorrect
* Fix warning data on `high_frequency_temperature_data` warning.
* Squash numpy divide-by-zero warnings in caltrack Hourly metrics.
opendsm-1.0.0
-----
* Initial OpenDSM release
eemeter-4.1.1
-----
* Add GHI sufficiency check requiring 90% coverage for each month
* Add weights propogation from data class to daily model via "weights" column
* Converted daily model settings from attrs to pydantic
* Refactored daily model initial guess optimization to use consolidated optimize function
* Add experimental daily weighting for hourly model fitting (if one day is crazy, it will be down weighted in the fit)
eemeter-4.1.0
-----
* Add new hourly model to support solar meters and improve nonsolar results
eemeter-4.0.8
-----
* Add github action to publish to pypi
* Bump to latest packages and remove all deprecation/future warnings as of 2024-12-20.
* Allow identical observations to not raise exception for daily model in `linear_fit`.
* Handle ambiguous and nonexistent local times when creating billing dataclass
* Fix serialization and deserialization of hourly CalTRACK metrics.
* Rename HourlyBaselineData.sufficiency_warnings -> HourlyBaselineData.warnings
* Add disqualification field to HourlyBaselineData and HourlyReportingData
* Fix bug where HourlyBaselineData and HourlyReportingData wasn't actually NaNning zero rows when `is_electricity=True`.
* Constrain eemeter daily model balance points to T_min_seg and T_max_seg rather than T_min and T_max.
* Fix bug in `linear_fit` due to SciPy's `theilslopes(y, x)` not following the same order as `linregress(x, y)`
eemeter-4.0.7
-----
* Handle ambiguous and nonexistent local times when creating daily dataclass
eemeter-4.0.6
-----
* Update docs.
* Update typehints on core daily and utility functions.
* Minor change to loading test data to ensure the reporting period is a year ahead of the baseline period.
eemeter-4.0.5
-----
* Flip slope when deserializing legacy hdd_only models
eemeter-4.0.4
-----
* Add support for deserializing legacy hourly models
* Fix legacy daily model deserialization
eemeter-4.0.3
-----
* Move masking behavior for rows with missing temperature from reporting dataclass to prediction output
* Add disqualification check to billing model predict()
eemeter-4.0.2
-----
* Force index to use nanosecond precision
* Compute coverage using same offset as initial reads to fix issues when downsampling hourly data
* Update test data location
* Fix bug in daily plotting to remove NaN values if input
* Refactor sufficiency criteria to be more explicit and easier to manage
eemeter-4.0.1
-----
* Correct dataframe input behavior and final row temperature aggregation
* Remove unnecessary datetime normalization in order to respect hour of day
* Convert timestamps in certain warnings to strings to allow serialization
* Allow configuration of segment_type in HourlyModel wrapper
eemeter-4.0.0
-----
* Update daily model methods, API, and serialization
* Provide new API for hourly model to match daily syntax and prepare for future additions
* Add baseline and reporting dataclasses to support compliant initialization of meter and temperature data
eemeter-3.2.0
-----
* Addition of modules and amendments in support of international facility for EEMeter, including principally:
* Addition of quickstart.py; updating setup.py and __init__/py accordingly.
* Inclusion of temperature conversion amendments to design_matrices; features; and derivatives.
* Addition of new tests and samples.
* Amendments to tutorial.ipynb.
* Addition of eemeter international.ipynb.
* Change .iteritems() to .items() in accordance with pandas>=2.0.0
* .get_loc(x, method=...) to .get_indexer([x],method=...)[0] in accordance with pandas>=2.0.0
* Updated mean() to mean(numeric_only=True) in accordance to pandas>=2.0.0
* Updated tests to work with pandas>=2.0.0
* Update python version in Dockerfile.
* Update other dependencies (including adding rust) in Dockerfile.
* Remove pinned dependencies in Pipfile.
* Relock Pipfile (and do so inside of the docker image).
* Update pytests to account for changes in newer pandas where categorical variables are no longer included in `df.sum().sum()`.
* Clarify the functioning of start, end and max_days parameters to `get_reporting_data()` and `get_baseline_data()`.
eemeter-3.1.1
-----
* Update observed_mean calculation to account for solar (negative usage) to provide
sensible cvrmse calculations.
eemeter-3.1.0
-----
* Remove missing hour_of_week categories in the CalTrack hourly methods so they predict null for those hours.
eemeter-3.0.0
-----
* Remove python27 support.
* Update Pipfile lock.
* Update `fit_temperature_bins` to potentially take an `occupancy_lookup` in order to
fit different temperature bins for occupied/unoccupied modes. *This changes the args passed to eemeter.create_caltrack_hourly_segmented_design_matrices, where it now requires a set of bins for occupied and unoccupied temperatures separately.*
* Update CalTRACK hourly model formula to use different bins for occupied and
unoccupied mode.
eemeter-2.10.11
-------
* Fix tests and make changes to ensure tests pass on pandas version 1.2.1.
* Fix bug in segmentation.py causing a section of tutorial to fail.
eemeter-2.10.0
------
* Add additional terms into ModelMetrics() class which can be used in fractional savings uncertainy computations.
eemeter-2.9.2
-----
* Remove fixing of versions of libraries in setup.py to avoid unforeseen issues with library updates.
eemeter-2.9.1
-----
* Fix versions of libraries in setup.py to avoid unforeseen issues with library updates.
eemeter-2.9.0
-----
* Clarify blackout period.
eemeter-2.8.6
-----
* Fix issue with `get_reporting_data` and `get_baseline_data` when passing data with non-UTC timezones.
eemeter-2.8.5
-----
* Add functions to clean billing/daily data according to caltrack rules.
eemeter-2.8.4
-----
* Further limit segments used in hourly `totals_metrics` to only calculate when weight=1.
eemeter-2.8.3
-----
* Update hourly `totals_metrics` calculation to properly use only the segment of the model.
eemeter-2.8.2
-----
* Add `totals_metrics` to hourly models.
eemeter-2.8.1
-----
* Fix bug with `get_baseline_data` in regards to recent addition of `n_days_billing_period_overshoot` kwarg.
eemeter-2.8.0
-----
* Update `get_baseline_data` to allow for limit to billing overshoot using `n_days_billing_period_overshoot` kwarg.
eemeter-2.7.7
-----
* Add function to clean billing data to fit caltrack specifications (`clean_caltrack_billing_data`).
eemeter-2.7.6
-----
* Update io functions to support latest pandas (>=0.24.x).
* Update documentation for CalTRACK Hourly methods.
* Add tutorial.
eemeter-2.7.5
-----
* Fix completeness check for `get_terms` for last term.
eemeter-2.7.4
-----
* Make more usable outputs for the `get_terms` function (list of eemeter.Term objects).
eemeter-2.7.3
-----
* Update `as_freq` so it has an optional `include_coverage` parameter where it returns a dataframe with one column including the percent coverage of data used to create each sample.
eemeter-2.7.2
-----
* Fixes the columns that are given in an empty prediction result called with the
` with_design_matrix=True` flag set for caltrack usage per day methods.
* Update bug report github issue template.
* Add test for `as_freq`.
eemeter-2.7.1
-----
* Change `as_freq` to handle all Null series.
eemeter-2.7.0
-----
* Add `get_terms` method to allow splitting reporting data into any number
of terms specified by day length.
eemeter-2.6.0
-----
* Change `fit_caltrack_hourly_model` so it returns a `CalTRACKHourlyModelResults` object rather than a `CalTRACKHourlyModel`, in order to bring it in line with the `caltrack_usage_per_day` model outputs.
eemeter-2.5.4-post1
-----------
* Update MANIFEST.in to fix release and update `./bump_version.sh` script
to remove build directories.
eemeter-2.5.4
-----
* Add data fields to the `DataSufficiency` even if there are no warnings when calculating sufficiency.
eemeter-2.5.3-post2
-----------
* Attempt 2 to fix release .whl file by removing local build and dist
directories before running `python setup.py upload`.
eemeter-2.5.3-post1
-----------
* Fix release .whl file which had some extra directories.
* Add draft MAINTAINERS.md.
eemeter-2.5.3
-----
* Fix `metered_savings` behavior so that it does not fail to compute error bands when there is 0 variance in the baseline.
eemeter-2.5.2
-----
* Fix `as_freq` behavior to preserve sum and add a null last index at the target
frequency if necessary.
eemeter-2.5.1
-----
* Capture an additional exception type (`KeyError`) in recently adjusted
`get_baseline_data` and `get_reporting_data` methods.
eemeter-2.5.0
-----
* Add parameters to `get_baseline_data` and `get_reporting_data` to help make
these methods a bit more correct for billing data.
* Preserve nulls properly in `as_freq`.
* Update jupyter version to be compatible with latest tornado version.
eemeter-2.4.0
-----
* Fix for bug that occasionally leads to `LinAlgError: SVD did not converge` error when fitting caltrack hourly models by addressing multi-collinearity when only a single occupancy mode is detected
eemeter-2.3.1
-----
* Hot fix for bug that occasionally leads to `LinAlgError: SVD did not converge` error when fitting caltrack hourly models by converting the weights from `np.float64` ton `np.float32`.
eemeter-2.3.0
-----
* Fix bug where the model prediction includes features in the last row that should be null.
* Fix in `transform.get_baseline_data` and `transform.get_reporting_data` to enable pulling a full year of data even with irregular billing periods
eemeter-2.2.10
------
* Added option in `transform.as_freq` to handle instantaneous data such as temperature and other weather variables.
eemeter-2.2.9
-----
* Predict with empty formula now returns NaNs.
eemeter-2.2.8
-----
* Update `compute_occupancy_feature` so it can handle instances where there are less than 168 values in the data.
eemeter-2.2.7
-----
* SegmentModel becomes CalTRACKSegmentModel, which includes a hard-coded check that the same hours of week are in the model fit parameters and the prediction design matrix.
eemeter-2.2.6
-----
* Reverts small data bug fix.
eemeter-2.2.5
-----
* Fix bug with small data (1<week) for hourly occupancy feature calculation.
* Bump dev eeweather version.
* Add `bump_version` script.
* Filter two specific warnings when running tests:
statsmodels pandas .ix warning, and eemeter model fitting warning.
eemeter-2.2.4
-----
* Add `json()` serialization for `SegmentModel` and `SegmentedModel`.
eemeter-2.2.3
-----
* Change `max_value` to float so that it can be json serialized even if the input is int64s.
eemeter-2.2.2
-----
* Add warning to `caltrack_sufficiency_criteria` regarding extreme values.
eemeter-2.2.1
-----
* Fix bug in fractional savings uncertainty calculations using billing data.
eemeter-2.2.0
-----
* Add fractional savings uncertainty to modeled savings derivatives.
eemeter-2.1.8
-----
* Update so that models built with empty temperature data won't result in error.
eemeter-2.1.7
-----
* Update so that models built from a single record won't result in error.
eemeter-2.1.6
-----
* Update multiple places where `df.empty` is used and replaced with `df.dropna().empty`.
* Update documentation for running CalTRACK hourly methods.
eemeter-2.1.5
-----
* Fix zero division error in metrics calculation for several metrics that
would otherwise cause division by zero errors in fsu_error_band calculation.
eemeter-2.1.4
-----
* Fix zero division error in metrics calculation for series of length 1.
eemeter-2.1.3
-----
* Fix bug related to caltrack billing design matrix creation during empty temperature traces.
eemeter-2.1.2
-----
* Add automatic t-stat computation for metered savings error bands, the
implementation of which requires expicitly adding scipy to setup.py
requirements.
* Don't compute error bands if reporting period data is empty for metered
savings.
eemeter-2.1.1
-----
* Fix degree day ranges (30-90) for prefab caltrack design matrix creation
methods.
* Fix the warning for total degree days to use total degree days instead of
average degree days.
eemeter-2.1.0
-----
* Update the `use_billing_presets` option in `fit_caltrack_usage_per_day_model`
to use a minimum data sufficiency requirement for qualifying CandidateModels
(similar to daily methods).
* Add an error when attempting to use billing presets without passing a weights
column to facilitate weighted least squares.
eemeter-2.0.5
-----
* Give better error for duplicated meter index in compute temperature features.
eemeter-2.0.4
-----
* Change metrics input length error to warning.
eemeter-2.0.3
-----
* Apply black code style for easy opinionated PEP 008 formatting
* Apply JSON-safe float conversion to all metrics.
eemeter-2.0.2
-----
* Cont. fixing JSON representation of NaN values
eemeter-2.0.1
-----
* Fixed JSON representation of model classes
eemeter-2.0.0
-----
* Initial release of 2.x.x series
================================================
FILE: CHARTER.md
================================================
# Technical Charter (the "Charter") for OpenDSM, a Series of LF Projects, LLC
Adopted August 28, 2024
This charter (the “Charter”) sets forth the responsibilities and procedures for
technical contribution to, and oversight of, OpenDSM, which has been
established as OpenDSM a Series of LF Projects, LLC (the “Project”).
LF Projects, LLC (“LF Projects”) is a Delaware series limited liability company.
All Contributors to the Project must comply with the terms of this Charter.
## 1) Mission and Scope of the Project
-----------------------------------
a) The mission of the Project is to develop an open source project with the
following goals:
- i) Build an open source library for predicting energy consumption of utility meters
based on their historical usage and additional covariate data;
- ii) Maintain a production-ready library to act as a measurement system for
distributed energy resources that can be replicated by all parties in markets and
expand capabilities over time;
- iii) Ensure transparency and trust by providing open source code that enables
reliable validation and mutual accountability in energy markets;
- iv) Provide reusable components with documented APIs and consistent security
practices; and
- v) Develop an ecosystem of developers, suppliers, OEMs, systems integrators,
and customers all using this common platform as the basis to define common
transactional units for distributed energy resources in the market.
b) The scope of the Project includes methods and software development under OSI-approved
open source licenses supporting the mission, documentation, testing, integration, and
the creation of other artifacts that aid the development, deployment, operation, or
adoption of the open source software project.
## 2) Technical Steering Committee
-------------------------------
a) The Technical Steering Committee (the "TSC") will be responsible for all
technical oversight of the open source Project.
b) The TSC voting members are initially the Project’s Committers. At the inception of
the project, the Committers of the Project will be as set forth within the
[MAINTAINERS](MAINTAINERS.md) file within the Project’s code repository. The TSC may
choose an alternative approach for determining the voting members of the TSC, and any
such alternative approach will be documented in the [MAINTAINERS](MAINTAINERS.md) file.
Any meetings of the Technical Steering Committee are intended to be open to the public,
and can be conducted electronically, via teleconference, or in person.
c) TSC projects generally will involve Contributors and Committers. The TSC may adopt or
modify roles so long as the roles are documented in the CONTRIBUTING file. Unless
otherwise documented:
- i) Contributors include anyone in the technical community that contributes code,
documentation, or other technical artifacts to the Project;
- ii) "Committers are Contributors to whom the Project has granted the privilege of
modifying (“committing”) source code, documentation or other technical artifacts
directly in a Project repository; and
- iii) A Contributor may become a Committer by a three-quarter majority of the existing
Committers. A Committer may be removed by a majority approval of the other existing
Committers.
d) Participation in the Project through becoming a Contributor and Committer is open to
anyone so long as they abide by the terms of this Charter.
e) The TSC may (1) establish work flow procedures for the prioritization, submission,
approval, and closure/archiving of projects, (2) set requirements for the promotion of
Contributors to Committer status, as applicable, and (3) amend, adjust, refine and/or
eliminate the roles of Contributors, and Committers, and create new roles, and publicly
document any TSC roles, as it sees fit.
f) The TSC may elect a TSC Chair, who will preside over meetings of the TSC and will
serve until their resignation or replacement by the TSC. The TSC Chair, or any other
TSC member so designated by the TSC, will serve as the primary communication contact
between the Project and LF Energy Foundation of The Linux Foundation.
g) Responsibilities: The TSC will be responsible for all aspects of oversight relating to
the Project, which may include:
- i) Coordinating the technical direction of the Project;
- ii) Approving project or system proposals (including, but not limited to, incubation,
deprecation, and changes to a sub-project’s scope);
- iii) organizing sub-projects and removing sub-projects;
- iv) creating sub-committees or working groups to focus on cross-project technical
issues and requirements;
- v) appointing representatives to work with other open source or open standards
communities;
- vi) coordinate with other LF Energy technical projects, including selecting a
representative to participate in the LF Energy Technical Advisory Council (TAC);
- vii) establishing community norms, workflows, issuing releases, and security issue
reporting policies;
- viii) approving and implementing policies and processes for contributing (to be
published in the project repository) and coordinating with the Series Manager to
resolve matters or concerns that may arise as set forth in Section 7 of this Charter;
- ix) discussions, seeking consensus, and where necessary, voting on technical matters
relating to the code base that affect multiple projects; and
- x) coordinating any marketing, events, or communications regarding the Project with the
LF Projects Manager or their designee.
## 3) TSC Voting
-------------
a) While the Project aims to operate as a consensus-based community, if any TSC
decision requires a vote to move the Project forward, the voting members of
the TSC will vote using the Approval Voting method.
b) Quorum for TSC meetings requires at least fifty percent of all voting members
of the TSC to be present. The TSC may continue to meet if quorum is not met,
but will be prevented from making any decisions at the meeting.
c) Except as provided in Section 7.c. and 8.a, decisions by vote at a meeting require a
majority vote of those in attendance, provided quorum is met. Decisions made by
electronic vote without a meeting require a majority vote of all voting members of the
TSC.
d) In the event a vote cannot be resolved by the TSC, any voting member of the
TSC may refer the matter to the Series Manager for assistance in reaching a
resolution.
## 4) Compliance with Policies
---------------------------
a) This Charter is subject to the Series Agreement for the Project and the
Operating Agreement of LF Projects. Contributors will comply with the policies
of LF Projects as may be adopted and amended by LF Projects, including, without
limitation the policies listed at
[https://lfprojects.org/policies/](https://lfprojects.org/policies/).
b) The TSC may adopt a code of conduct ("CoC") for the Project, which is
subject to approval by the Series Manager. Contributors to the Project will
comply with the CoC or, in the event that a Project-specific CoC has not been
approved, the LF Projects [Code of Conduct](CODE_OF_CONDUCT.md) listed at
[https://lfprojects.org/policies/](https://lfprojects.org/policies/).
c) When amending or adopting any policy applicable to the Project, LF Projects
will publish such policy, as to be amended or adopted, on its web site at least
30 days prior to such policy taking effect; provided, however, that in the case
of any amendment of the Trademark Policy or Terms of Use of LF Projects, any
such amendment is effective upon publication on LF Project’s web site.
d) All participants must allow open participation from any individual or
organization meeting the requirements for contributing under this Charter and
any policies adopted for all participants by the TSC, regardless of competitive
interests. Put another way, the Project community must not seek to exclude any
participant based on any criteria, requirement, or reason other than those that
are reasonable and applied on a non-discriminatory basis to all participants in
the Project community.
e) The Project will operate in a transparent, open, collaborative, and ethical
manner at all times. All official Project discussions, proposals, timelines,
decisions, and status should be made open and easily accessible to all; while
private discussions may happen, the basis for decisions should be publicly
documented and accessible. Any violations or potential violations of these
requirements should be reported immediately to the LF Projects Manager.
## 5) Community Assets
-------------------
a) LF Projects will hold title to all trade or service marks used by the
Project ("Project Trademarks"), whether based on common law or registered
rights. Project Trademarks will be transferred and assigned to LF Projects to
hold on behalf of the Project. Any use of any Project Trademarks by
participants in the Project will be in accordance with the license from LF
Projects and inure to the benefit of LF Projects.
b) The Project will, as permitted and in accordance with such license from LF
Projects, develop and own all Project-related online service accounts and
domain name registrations created by the Project community.
c) Under no circumstances will LF Projects be expected or required to undertake
any action on behalf of the Project that is inconsistent with the tax-exempt
status or purpose, as applicable, of LFP, Inc. or LF Projects, LLC.
## 6) General Rules and Operations
-------------------------------
a) The Project will:
- i) engage in the work of the project in a professional manner consistent with
maintaining a cohesive community, while also maintaining the goodwill and
esteem of LF Projects, LFP, Inc. and other partner organizations in the open
source software community; and
- ii) respect the rights of all trademark owners, including any branding and
trademark usage guidelines.
## 7) Intellectual Property Policy
-------------------------------
a) Participants acknowledge that the copyright in all new contributions will be
retained by the copyright holder as independent works of authorship and that no
contributor or copyright holder will be required to assign copyrights to the
Project.
b) Except as described in Section 7.c., all contributions to the Project are
subject to the following:
- i) All new inbound code contributions to the Project must be made using an
OSI-approved open source license specified for the Project within the
["LICENSE"](LICENSE) file within the Project’s code repository (the "Project
License").
- ii) All new inbound code contributions must also be accompanied by a Developer
Certificate of Origin ([http://developercertificate.org](http://developercertificate.org))
sign-off in the source code system that is submitted through a TSC-approved
contribution process which will bind the authorized contributor, and, if not
self-employed, their employer to the applicable license(s);
- iii) All outbound code will be made available under the Project License.
- iv) Documentation will be received and made available by the Project under
the Creative Commons Attribution 4.0 International License (available at
[http://creativecommons.org/licenses/by/4.0/](http://creativecommons.org/licenses/by/4.0/)).
- v) To the extent a contribution includes or consists of data sets, any rights in such
data will be made available under the CDLA-Permissive 1.0 License.
- vi) The Project may seek to integrate and contribute back to other open
source projects ("Upstream Projects"). In such cases, the Project will
conform to all license requirements of the Upstream Projects, including
dependencies, leveraged by the Project. Upstream Project code contributions
will comply with the contribution process and license terms for the
applicable Upstream Project.
c) The TSC may approve the use of an alternative license or licenses for inbound or
outbound contributions on an exception basis. To request an exception, please describe
the contribution, the alternative open source license(s), and the justification for using
an alternative open source license in the Project. License exceptions must be approved by
a two-thirds vote of the entire TSC.
d) Contributed files should contain license information, such as SPDX short
form identifiers, indicating the open source license or licenses pertaining
to the file.
## 8) Amendments
-------------
This charter may be amended by a two-thirds vote of the entire TSC and is
subject to approval by LF Projects.
================================================
FILE: CODE_OF_CONDUCT.md
================================================
# Contributor Covenant Code of Conduct
## Our Pledge
In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation.
## Our Standards
Examples of behavior that contributes to creating a positive environment include:
* Using welcoming and inclusive language
* Being respectful of differing viewpoints and experiences
* Gracefully accepting constructive criticism
* Focusing on what is best for the community
* Showing empathy towards other community members
Examples of unacceptable behavior by participants include:
* The use of sexualized language or imagery and unwelcome sexual attention or advances
* Trolling, insulting/derogatory comments, and personal or political attacks
* Public or private harassment
* Publishing others' private information, such as a physical or electronic address, without explicit permission
* Other conduct which could reasonably be considered inappropriate in a professional setting
## Our Responsibilities
Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior.
Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful.
## Scope
This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers.
## Enforcement
Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at admin@openee.io. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately.
Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership.
## Attribution
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version]
[homepage]: http://contributor-covenant.org
[version]: http://contributor-covenant.org/version/1/4/
================================================
FILE: CONTRIBUTING.md
================================================
Contributing
============
Guidelines
----------
* Make sure you follow PEP 008 style guide conventions. You can check PEP 008
compliance with the included script: `docker-compose run --rm blacken`
* Commit messages should start with a capital letter ("Updated models", not "updated models").
* Write new tests and run old tests! Make sure that % test coverage does not decrease.
* Contributions are reviewed by a maintainer before acceptance. To facilitate
review, please make a [pull request](https://github.com/opendsm/opendsm/pulls/new)
and provide a description and follow the checklist in the pull request template.
Tests will be automatically run using GitHub Actions after a pull request is created.
* Prefix new feature branches with `feature/` and bug fix branches with `fix/`
and make pull requests directly against `master`.
* Contributions that add new required dependencies to the library will be
given a more thorough review to ensure that those dependency additions
1) do not pose a security risk and 2) are absolutely necessary.
* Contributions that allow for data exfiltration by making external HTTP or TCP
requests will not be accepted.
Contributor maintenance responsibility
--------------------------------------
Contributions of all kinds are encouraged, and we do not require contributors
to be responsible for ongoing support of patches they make. However, because
we accept "toss over the wall" contributions, contributions deemed by the
maintainers to be too difficult to maintain will not be accepted.
Testing
-------
Please write unit tests for all new features. At time of writing, this
package has 100% test coverage. We would like to maintain that coverage level,
because 100% coverage is easier than 99% coverage. This does not necessarily
mean that all line are tested. For lines that are sufficiently inconvenient to
test, we maintain 100% test coverage by adding `# pragma: no cover` comments
after the difficult to test lines or blocks.
This helps us stay on top of un-covered sections without sacrificing the
convenience of 100% coverage and without being too overbearing about tests.
Tests are run using the following commands (flags are passed to the py.test
executable):
```
docker-compose run --rm test # run all tests
# cheat sheet of variations
docker-compose run --rm test --no-cov # no coverage
docker-compose run --rm test tests/test_features.py # run a specific suite
docker-compose run --rm test -k compute # filter for tests with `compute` in the name
```
Test configuration can be found in `tox.ini`, `pytest.ini`, and `tests/conftest.py`.
When writing tests using py.test fixtures, place fixtures as close as possible
to the test functions or classes that call them.
General Discussion
------------------
Discussions for this project take place on the
[opendsm@lists.lfenergy.org](https://lists.lfenergy.org/g/opendsm/)
mailing list.
License
-------
This project is licensed under [Apache 2.0](LICENSE).
All source files must apply the following SPDX header:
``` python
# Copyright 2014-2025 OpenDSM contributors
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# http://www.apache.org/licenses/LICENSE-2.0
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
```
Developer Certificate of Origin
-------------------------------
This project uses the
[Developer Certificate of Origin](https://developercertificate.org/),
the text of which is copied below:
```
Developer Certificate of Origin
Version 1.1
Copyright (C) 2004, 2006 The Linux Foundation and its contributors.
1 Letterman Drive
Suite D4700
San Francisco, CA, 94129
Everyone is permitted to copy and distribute verbatim copies of this
license document, but changing it is not allowed.
Developer's Certificate of Origin 1.1
By making a contribution to this project, I certify that:
(a) The contribution was created in whole or in part by me and I
have the right to submit it under the open source license
indicated in the file; or
(b) The contribution is based upon previous work that, to the best
of my knowledge, is covered under an appropriate open source
license and I have the right under that license to submit that
work with modifications, whether created in whole or in part
by me, under the same open source license (unless I am
permitted to submit under a different license), as indicated
in the file; or
(c) The contribution was provided directly to me by some other
person who certified (a), (b) or (c) and I have not modified
it.
(d) I understand and agree that this project and the contribution
are public and that a record of the contribution (including all
personal information I submit with it, including my sign-off) is
maintained indefinitely and may be redistributed consistent with
this project or the open source license(s) involved.
```
Charter
-------
The charter for the open source project can be find in [CHARTER](CHARTER) and
contains the following sections:
1. Mission and Scope of the Project
2. Techincal Steering Committee
3. TSC Voting
4. Compliance with Policies
5. Community Assets
6. General Rules and Operations
7. Intellectual Property Policy
8. Amendments
Release process
---------------
Pre-release
1. create branch off of master named `feature/<examplefeature>` or `fix/<>` and make desired changes.
2. edit CHANGELOG.md with changes under a new section called `Development`
3. create, review, and merge PR for feature/examplefeature
4. repeat steps 1-3 if desired for other features as convenient, though preference is for frequent version bumps
Releasing
5. bump version - edit `__version__.py` with the new version
6. Rename `Development` section with the new version in CHANGELOG.md
7. commit changes
8. push branch and create PR
9. merge release branch to master after tests pass and an approved review
10. create GitHub release describing changes, creating tag `vX.Y.Z` to match new `__version__.py`
11. approve the resulting pypi-publish action
You can use `bump_version.sh` to print out commands that rotate the changelog and bump the package version:
```
./bump_version.sh X.X.X Y.Y.Y
```
Other resources
---------------
- [README](README.rst): basic project information written in RST for PyPI preview.
Copied and lightly modified for formatting from [docs/index.rst](docs/index.rst)
- [MAINTAINERS](MAINTAINERS.md): an ordered list of project maintainers.
- [LICENSE](LICENSE): Apache 2.0.
- [CHARTER](CHARTER): open source project charter.
- [CODE_OF_CONDUCT](CODE_OF_CONDUCT.md): code of conduct for contributors.
================================================
FILE: Dockerfile
================================================
# syntax=docker/dockerfile:1.7
FROM python:3.10-slim AS app
# System deps (you had libenchant-2-dev)
RUN apt-get update && apt-get install -y --no-install-recommends \
build-essential ca-certificates \
&& rm -rf /var/lib/apt/lists/*
# Add uv (fast installer)
COPY --from=ghcr.io/astral-sh/uv:latest /uv /uvx /bin/
# Helpful uv settings: compile bytecode & avoid hardlinks
ENV UV_COMPILE_BYTECODE=1 UV_LINK_MODE=copy \
PYTHONUNBUFFERED=1 PIP_DISABLE_PIP_VERSION_CHECK=1
WORKDIR /app
# ---- deps layer (cacheable) ----
# Copy only metadata first to maximize Docker layer caching
COPY pyproject.toml README.md /app/
# If you keep a lockfile, copy it too for reproducible installs
# (safe if missing)
COPY uv.lock /app/uv.lock
# Resolve & install *only dependencies* into the system Python
# Using uv pip compile -> requirements.txt for a stable, cacheable layer
RUN --mount=type=cache,target=/root/.cache/uv \
uv pip compile pyproject.toml -o /tmp/requirements.txt && \
uv pip install --system -r /tmp/requirements.txt
# ---- project install ----
# Now add your source and install the project itself
COPY opendsm/ /app/opendsm/
RUN --mount=type=cache,target=/root/.cache/uv \
uv pip install --system -e .[dev]
ENV PYTHONPATH=/usr/local/bin:/app
WORKDIR /app
================================================
FILE: LICENSE
================================================
Apache License
Version 2.0, January 2004
http://www.apache.org/licenses/
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
1. Definitions.
"License" shall mean the terms and conditions for use, reproduction,
and distribution as defined by Sections 1 through 9 of this document.
"Licensor" shall mean the copyright owner or entity authorized by
the copyright owner that is granting the License.
"Legal Entity" shall mean the union of the acting entity and all
other entities that control, are controlled by, or are under common
control with that entity. For the purposes of this definition,
"control" means (i) the power, direct or indirect, to cause the
direction or management of such entity, whether by contract or
otherwise, or (ii) ownership of fifty percent (50%) or more of the
outstanding shares, or (iii) beneficial ownership of such entity.
"You" (or "Your") shall mean an individual or Legal Entity
exercising permissions granted by this License.
"Source" form shall mean the preferred form for making modifications,
including but not limited to software source code, documentation
source, and configuration files.
"Object" form shall mean any form resulting from mechanical
transformation or translation of a Source form, including but
not limited to compiled object code, generated documentation,
and conversions to other media types.
"Work" shall mean the work of authorship, whether in Source or
Object form, made available under the License, as indicated by a
copyright notice that is included in or attached to the work
(an example is provided in the Appendix below).
"Derivative Works" shall mean any work, whether in Source or Object
form, that is based on (or derived from) the Work and for which the
editorial revisions, annotations, elaborations, or other modifications
represent, as a whole, an original work of authorship. For the purposes
of this License, Derivative Works shall not include works that remain
separable from, or merely link (or bind by name) to the interfaces of,
the Work and Derivative Works thereof.
"Contribution" shall mean any work of authorship, including
the original version of the Work and any modifications or additions
to that Work or Derivative Works thereof, that is intentionally
submitted to Licensor for inclusion in the Work by the copyright owner
or by an individual or Legal Entity authorized to submit on behalf of
the copyright owner. For the purposes of this definition, "submitted"
means any form of electronic, verbal, or written communication sent
to the Licensor or its representatives, including but not limited to
communication on electronic mailing lists, source code control systems,
and issue tracking systems that are managed by, or on behalf of, the
Licensor for the purpose of discussing and improving the Work, but
excluding communication that is conspicuously marked or otherwise
designated in writing by the copyright owner as "Not a Contribution."
"Contributor" shall mean Licensor and any individual or Legal Entity
on behalf of whom a Contribution has been received by Licensor and
subsequently incorporated within the Work.
2. Grant of Copyright License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
copyright license to reproduce, prepare Derivative Works of,
publicly display, publicly perform, sublicense, and distribute the
Work and such Derivative Works in Source or Object form.
3. Grant of Patent License. Subject to the terms and conditions of
this License, each Contributor hereby grants to You a perpetual,
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
(except as stated in this section) patent license to make, have made,
use, offer to sell, sell, import, and otherwise transfer the Work,
where such license applies only to those patent claims licensable
by such Contributor that are necessarily infringed by their
Contribution(s) alone or by combination of their Contribution(s)
with the Work to which such Contribution(s) was submitted. If You
institute patent litigation against any entity (including a
cross-claim or counterclaim in a lawsuit) alleging that the Work
or a Contribution incorporated within the Work constitutes direct
or contributory patent infringement, then any patent licenses
granted to You under this License for that Work shall terminate
as of the date such litigation is filed.
4. Redistribution. You may reproduce and distribute copies of the
Work or Derivative Works thereof in any medium, with or without
modifications, and in Source or Object form, provided that You
meet the following conditions:
(a) You must give any other recipients of the Work or
Derivative Works a copy of this License; and
(b) You must cause any modified files to carry prominent notices
stating that You changed the files; and
(c) You must retain, in the Source form of any Derivative Works
that You distribute, all copyright, patent, trademark, and
attribution notices from the Source form of the Work,
excluding those notices that do not pertain to any part of
the Derivative Works; and
(d) If the Work includes a "NOTICE" text file as part of its
distribution, then any Derivative Works that You distribute must
include a readable copy of the attribution notices contained
within such NOTICE file, excluding those notices that do not
pertain to any part of the Derivative Works, in at least one
of the following places: within a NOTICE text file distributed
as part of the Derivative Works; within the Source form or
documentation, if provided along with the Derivative Works; or,
within a display generated by the Derivative Works, if and
wherever such third-party notices normally appear. The contents
of the NOTICE file are for informational purposes only and
do not modify the License. You may add Your own attribution
notices within Derivative Works that You distribute, alongside
or as an addendum to the NOTICE text from the Work, provided
that such additional attribution notices cannot be construed
as modifying the License.
You may add Your own copyright statement to Your modifications and
may provide additional or different license terms and conditions
for use, reproduction, or distribution of Your modifications, or
for any such Derivative Works as a whole, provided Your use,
reproduction, and distribution of the Work otherwise complies with
the conditions stated in this License.
5. Submission of Contributions. Unless You explicitly state otherwise,
any Contribution intentionally submitted for inclusion in the Work
by You to the Licensor shall be under the terms and conditions of
this License, without any additional terms or conditions.
Notwithstanding the above, nothing herein shall supersede or modify
the terms of any separate license agreement you may have executed
with Licensor regarding such Contributions.
6. Trademarks. This License does not grant permission to use the trade
names, trademarks, service marks, or product names of the Licensor,
except as required for reasonable and customary use in describing the
origin of the Work and reproducing the content of the NOTICE file.
7. Disclaimer of Warranty. Unless required by applicable law or
agreed to in writing, Licensor provides the Work (and each
Contributor provides its Contributions) on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
implied, including, without limitation, any warranties or conditions
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
PARTICULAR PURPOSE. You are solely responsible for determining the
appropriateness of using or redistributing the Work and assume any
risks associated with Your exercise of permissions under this License.
8. Limitation of Liability. In no event and under no legal theory,
whether in tort (including negligence), contract, or otherwise,
unless required by applicable law (such as deliberate and grossly
negligent acts) or agreed to in writing, shall any Contributor be
liable to You for damages, including any direct, indirect, special,
incidental, or consequential damages of any character arising as a
result of this License or out of the use or inability to use the
Work (including but not limited to damages for loss of goodwill,
work stoppage, computer failure or malfunction, or any and all
other commercial damages or losses), even if such Contributor
has been advised of the possibility of such damages.
9. Accepting Warranty or Additional Liability. While redistributing
the Work or Derivative Works thereof, You may choose to offer,
and charge a fee for, acceptance of support, warranty, indemnity,
or other liability obligations and/or rights consistent with this
License. However, in accepting such obligations, You may act only
on Your own behalf and on Your sole responsibility, not on behalf
of any other Contributor, and only if You agree to indemnify,
defend, and hold each Contributor harmless for any liability
incurred by, or claims asserted against, such Contributor by reason
of your accepting any such warranty or additional liability.
END OF TERMS AND CONDITIONS
APPENDIX: How to apply the Apache License to your work.
To apply the Apache License to your work, attach the following
boilerplate notice, with the fields enclosed by brackets "[]"
replaced with your own identifying information. (Don't include
the brackets!) The text should be enclosed in the appropriate
comment syntax for the file format. We also recommend that a
file or class name and description of purpose be included on the
same "printed page" as the copyright notice for easier
identification within third-party archives.
Copyright 2014-2025 OpenDSM contributors
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
================================================
FILE: MAINTAINERS.md
================================================
# Maintainers
The OpenEEmeter was originally created in late 2014 by Phil Ngo and later
developed and incubated at Recurve Analytics, Inc (formerly Open Energy Efficiency, Inc) and The Impact Lab.
Development was funded partially by grants from the California Energy
Commission.
## Committers - Technical Steering Committee (TSC).
- Travis Sikes (TSC chair)
- Brian Gerke
- Adam Scheer
- Steve Suffian
- McGee Young
## Contributors (alphabetical)
We express great thanks to all contributors to OpenDSM. This is an
incomplete list of those who have contributed code, documentation, or technical
artifacts to the project.
- Alyssia Byers
- Armin Aligholian
- Arpan Kotecha
- Brandon Willard
- Caleb Canchola
- Carmen Best
- Cathy Deng
- Dave Yeager
- Eric Dill
- Hassan Shaban
- Jason Chulock
- Joe Glass
- Joydeep Nag
- Juan-Pablo Velez
- kfogel
- Marc Pare
- Matt Golden
- mdrpheus
- opentaps
- Peter Olson
- Reetu Mutti
- Tom Plagge
- tsennott
================================================
FILE: MANIFEST.in
================================================
include README.md LICENSE pytest.ini
include opendsm/eemeter/samples/*.json opendsm/eemeter/samples/*.csv.gz
recursive-include tests *.py
================================================
FILE: README.md
================================================
# OpenDSM: Tools for calculating metered energy savings
[](https://pypi.python.org/pypi/opendsm)
[](https://github.com/opendsm/opendsm)
[](https://github.com/opendsm/opendsm)
[](https://github.com/ambv/black)
---------------
**OpenDSM (formerly OpenEEmeter)** — an open-source library used to measure the impacts
of demand-side programs by using historical data to fit models and then create
predictions (counterfactuals) to compare to post-intervention, observed energy usage.
## Background - Why use OpenDSM
Energy efficiency programs have traditionally focused on addressing long-term load growth
and reducing customer energy bills rather than serving as reliable grid resources.
However, as utilities work to decarbonize power generation, buildings, and transportation,
demand-side programs (e.g. energy efficiency, load shifting, electrification, and demand
response programs) must evolve into dependable, scalable grid assets. Ultimately,
decarbonizing the power grid will require both supply and demand-side solutions. While
supply-side production is easily quantified, measuring the impacts of demand-side programs
has historically been challenging due to inconsistent and opaque measurement methodologies.
OpenDSM solves these problems with accurate, efficient, and transparent models designed to
measure demand-side program impacts. OpenDSM gives all stakeholders full visibility and
confidence in the results.
OpenDSM builds upon the shoulders of OpenEEmeter and the [CalTRACK Methods](https://caltrack.org/) which themselves
are built upon the foundational work of the Princeton Scorekeeping Method ([PRISM 1986](https://www.marean.mycpanel.princeton.edu/images/prism_intro.pdf))
for the daily and billing models and Lawrence Berkeley National Laboratory's Time-of-Week
and Temperature Model ([TOWT 2011](https://eta-publications.lbl.gov/sites/default/files/LBNL-4944E.pdf)) for the hourly energy efficiency and demand response models.
OpenDSM models have been proven to meet or exceed the predictive capablity of the
aforementioned models. These models adhere to a statistical approach, as opposed to an
engineering approach, so that these models can be efficiently run on millions of meters at
a time, while still providing accurate predictions.
Using default settings in OpenDSM will provide accurate and stable model predictions
suitable for savings measurements from demand side interventions. Settings can be modified
and sufficiency requirements can be bypassed for research and development purposes; however,
the outputs of such models are no longer OpenDSM compliant measurements as the modifications
mean that these models are no longer verified and approved by the OpenDSM Working Group.
## Installation
OpenDSM is a python package and can be installed with pip.
~~~~~~~~~~~~~~~
$ pip install opendsm
~~~~~~~~~~~~~~~
## Features
- Models:
- Energy Efficiency Daily Model
- Energy Efficiency Billing (Monthly) Model
- Energy Efficiency Non-Solar Hourly Model
- Energy Efficiency Solar Hourly Model
- Demand Response Hourly Model
- Flexible sources of temperature data. See [EEweather](https://github.com/opendsm/eeweather).
- Data sufficiency checking
- Model serialization
- First-class warnings reporting
## [Documentation](https://opendsm.energy/)
Documenation for this library can be found [here](https://opendsm.energy/).
## Future Development
The OpenDSM project growth goals fall into two categories:
1. Community goals - we want help our community thrive and continue to grow.
2. Technical goals - we want to keep building the library in new ways that make it
as easy as possible to use.
### Community goals
1. Improve repository structure, architecture, and API
The first step of being able to contribute to a project is to understand how the repository
is laid out and how OpenDSM is architected. We have made giant steps in this area as of late,
but there is additional organizational work to be done. This will continue to be an ongoing
area of work.
2. Make it easier to contribute
As our user base grows, the need and desire for users to contribute back to the library
also grows, and we want to make this as seamless as possible. This means writing and
maintaining contribution guides, and creating checklists to guide users through the
process.
### Technical goals
1. Update the Demand Response (DR) model
In the most recent release, the hourly energy efficiency (EE) model has been entirely
changed and updated. Much like the billing model is to the daily model, the DR model is a
subset of the EE hourly model. Many of the improvements seen in the EE hourly model could
be realized in the DR model if it were finalized. It is currently in a functional state
within a branch, but its parameters have not been optimized rendering it unusable for
measurements. In the meantime, the existing DR model is still available.
2. Reassess existing sufficiency and disqualification criteria
The existing sufficiency and disqualification criteria exist as conservative estimates
from OpenEEmeter and CalTRACK recommendations. There is almost certainly room for these
criteria to be revisited so that more meters would pass and be approved for measurement.
3. Determine the sufficiency requirements of PV installation date in the hourly model
The hourly EE model currently has the capability of ingesting a PV installation date and
generating an additional feature that can much better represent a meter who installs a
solar PV system mid-baseline year. However, this feature currently is classified as
experimental and not allowed for official measurement because we have not quantified how
much data is required post-installation to be able to accurately predict the meter's
behavior in the reporting year.
4. Improve the daily model
There are two potential areas of improvement of the daily model. First it could be extended
to allow additional sources of information, but this must carefully be considered as the
primary usage of the daily model is to be able to disaggregate heating and cooling usage.
The second area of improvement would be to allow an additional break point within both the
cooling and heating regions such that the model would be able to change slope. This should
likely still be limited such that the model's slope in each region is appropriately
constrained. A new smoothing function would also need to be developed.
5. Integrate EEweather
EEweather is commonly used to obtain weather information to be used within OpenDSM. If it
were more tightly coupled, it would streamline the most standard use of OpenDSM. As an
example this could simplify several of the data classes such that the aggregation of
weather data would be done within EEweather instead of within data classes where it is a
more complex procedure
6. Integrate GRIDmeter
GRIDmeter is frequently used after DR/EEmeter in order to correct models for external
population-level effects by using non-participant meters. Similarly to EEweather, this
process could be streamlines and made more cohesive by fully integrating it into OpenDSM.
7. Organize and revise existing test suite
The existing testing suite is the last remaining vestige of the library prior to the
extensive reorganization and API changes made. It would be well served to update the
testing suite to make it easier for future contributors to know how and where they
should develop their tests for any new features or bugs found.
8. Greater weather coverage
The weather station coverage in the EEweather package includes full coverage of US and
Australia, but with some technical work, it could be expanded to include greater, or
even worldwide coverage.
## License
This project is licensed under [Apache 2.0](LICENSE).
## Other resources
- [CONTRIBUTING](https://github.com/opendsm/opendsm/blob/master/CONTRIBUTING.md): How to contribute to the project.
- [MAINTAINERS](https://github.com/opendsm/opendsm/blob/master/MAINTAINERS.md): An ordered list of project maintainers.
- [CHARTER](https://github.com/opendsm/opendsm/blob/master/CHARTER.md): Open source project charter.
- [CODE OF CONDUCT](https://github.com/opendsm/opendsm/blob/master/CODE_OF_CONDUCT.md): Code of conduct for contributors.
================================================
FILE: bump_version.sh
================================================
#!/bin/bash
set -e # fail script on any error, show commands
OLD_VERSION=$1 # e.g., 0.0.0
NEW_VERSION=$2 # e.g., 0.0.1
NEW_VERSION_LENGTH=$(printf "%s" "$NEW_VERSION" | wc -c)
DASHES=$(printf "%${NEW_VERSION_LENGTH}s" | sed 's/ /-/g')
echo "git checkout master"
echo "git pull"
echo "git checkout -b release/v${NEW_VERSION}"
echo ""
echo "sed -i -e 's/${OLD_VERSION}/${NEW_VERSION}/g' opendsm/__version__.py"
echo "sed -i -e '/Development/,/-----------/ c\\
Development\\
-----------\\
\\
* Placeholder\\
\\
${NEW_VERSION}\\
${DASHES}\\
' CHANGELOG.md"
echo "rm -f opendsm/__version__.py-e"
echo "rm -f CHANGELOG.md-e"
echo ""
echo "git commit -am \"Bump version\" -s"
echo "git push -u origin release/v${NEW_VERSION}"
================================================
FILE: data/attribution.txt
================================================
This data is derived from NREL's ComStock datasets (2023/comstock_amy2018_release_2)
The ComStock database, part of the Open Energy Data Initiative, carries with it a Creative Commons Attribution 3.0 United States License
Data includes information from the ComStock™ dataset developed by the National Renewable Energy Laboratory (NREL) with funding from the U.S. Department of Energy (DOE).
Citation:
Parker, Andrew, et al. 2023. ComStock Reference Documentation. Golden, CO: National Renewable Energy Laboratory. NREL/TP-5500-83819. https://www.nrel.gov/docs/fy23osti/83819.pdf
================================================
FILE: data/features.csv
================================================
id,summer_usage,winter_usage,annual_usage
108585,28424.455657276467,51265.146636654434,110748.6876074653
108587,17291.77416917098,56050.39252082105,102265.57253033188
108596,45599.89343243372,71591.15134416716,161796.56455473122
108597,27858.563654001788,82835.7574326724,155789.54100966017
108603,97793.92145670383,276022.5002888874,528779.375284755
108651,26160.530202715727,65061.904466105465,129230.03731760167
108652,17552.40115501821,37869.85146561201,77774.65212119538
108655,75288.9697483809,170230.63370364887,326396.2163047299
108657,30980.13281801004,107870.74777130758,192407.84824440558
108686,204864.9369271906,636312.814306768,1217549.5227783667
108693,87931.49171389916,133539.41024547044,311735.0087644528
108704,70104.62995720006,332442.1135049312,583015.7190204449
108710,928444.8606734825,1401593.2730090427,3409275.840730432
108755,4578.994754768554,11293.42045303014,22698.127519789177
108762,77702.74459206148,196618.16560514158,385986.2084317622
108774,296544.8136611258,597320.1174702568,1275838.6052017317
108775,253317.3316363064,267008.93643020507,731209.7498958404
108789,751423.2701812203,753035.205485595,2228706.855953003
108791,229352.75901112528,315200.2131346425,747272.6587924648
108794,4566435.61970002,5031306.731039737,13493030.335085198
108802,6456.829795661001,16088.638750352176,31543.307951441275
108813,2164826.0496044573,2485732.390407298,6443783.41046498
108819,96738.45226799279,238236.79392594352,458941.65329019574
108826,175792.146601842,392430.40497245453,798595.0522383602
108838,88345.54081954804,81888.2212437981,245419.94884663622
108841,756493.9058922682,2625463.4448502515,4882942.8515290115
108845,80193.80045846401,146492.99803848972,304747.75451275456
108860,2891331.789714103,4489880.26975092,10627990.863640891
108880,1529881.781145284,2755883.4423649716,6145479.0333141815
108881,12036.3093042342,43865.57711884676,79839.00373574029
108894,763718.0397815474,1075727.8790622756,2627020.3550714934
108900,9982.317573662625,75082.3869098902,121112.89423403774
108909,16414.576951083276,46416.42373200657,87554.8672887863
108910,37372.410668344615,50905.52998611898,124846.6515128921
108918,302428.0249960874,830313.6328558978,1675215.1820036839
108935,16156.707215387223,79035.373745478,133559.96341950464
108936,61445.73792056389,125102.7427156253,254706.56644278282
108971,11437.283863123388,53333.77118995469,88699.17991168608
108977,11151.606930669763,26491.374536162482,53087.79290406818
108986,58682.64759426187,82932.34868510069,198890.87919706744
108995,26619.22424145556,103069.21611792114,181269.21946519392
109042,434614.2535863034,787655.885022473,1747936.877742305
109045,304580.5049353946,641980.4499847923,1358028.8142834431
109071,187694.34615476077,561413.1607904257,1062617.5019655507
109092,71036.92448869723,152159.29360684875,307504.62535771384
109095,22310.88375471595,49137.64120994376,95810.01786983013
109110,60074.40292020607,217167.0225529279,385414.7769141169
109115,15735.139682764182,39068.07624005466,74715.2986222392
109116,31762.331595920183,69894.74133948928,138200.95159939904
109121,11286.936338302492,40035.352541114386,69168.12009995454
109141,243694.6172802105,680282.7759652381,1284251.8732881937
109146,423542.8075956412,525223.3007873202,1347276.5443359194
109147,36431.37610492465,80668.8537418069,161575.41089002092
109156,86794.51309663536,132988.46722084488,301801.9244147117
109157,57193.28142244244,151181.74791478834,280480.7917514395
109164,58426.109148332194,78207.48254947808,190807.82403267146
109165,73537.33311098159,127520.85423452435,276756.77500059805
109191,17077.632311320547,137198.73289311072,216129.76532859076
109197,245274.18543939633,647378.841969841,1230584.6290563946
109204,30900.81391869883,71011.80002638175,143656.80035822548
109223,409490.0883282482,1080398.1599387976,2095000.2793083421
109227,755047.573482862,1150228.4608183617,2663810.6889429083
109233,25513.780322368915,44005.402951011965,96447.13701977482
109239,583968.9867058506,1586847.8904296295,2959754.9023031695
109272,5695.427619677451,19138.11776681321,35291.78906359293
109307,26594.213863059023,48538.21988840076,103925.07171656172
109313,15749.127886598299,33715.40393945337,67963.1175337252
109315,1716478.7218046603,3715491.511817724,7792067.509881166
109323,3830.9334131309392,17254.046871847335,30186.16179792244
109339,9799.340090536245,32240.039322096807,58398.94295280102
109349,970547.2213669692,1366529.8733000734,3273283.400869062
109382,56824.25237535828,115431.10136221701,240864.54289703898
109391,39590.111199957435,95103.3965919478,188011.6375191657
109399,70152.40984649709,110673.80633547135,246026.63559706975
109401,3455736.2359923096,5216362.598000214,12219075.629654864
109423,25656.37906509535,28907.55108554573,71762.44576007321
109429,98480.9154553615,141659.8295606337,332920.37947642285
109435,69128.3654216813,159679.77246504772,318771.8309556672
109436,103139.11791720455,192519.08848764532,414106.8997169414
109442,43359.94431738937,103849.8878685267,205244.8344006705
109460,12307.16838968357,35819.052538083204,68205.4226424396
109466,673895.9801360178,1877963.7237054573,3786397.527951601
109485,668660.8508147063,2171777.1925018146,4006412.4569959133
109487,19800.76797205962,74051.8484055479,136739.00990953733
109496,155049.85461633038,311898.6793311906,654732.276571237
109505,73860.31117305795,122739.4150254291,264775.32797184907
109507,23869.99150737605,47129.520574426744,97808.12258815706
109510,13856.19729096719,26705.27559237736,55636.37104486032
109525,2336167.247165519,1241697.861994978,4894787.990245841
109536,26992.674559205443,27138.197189776645,70725.706440575
109548,105142.43978074087,222831.28099693923,444604.8356986926
109555,10535.022260011949,44953.78946891175,77726.60101625822
109557,34288.96159086555,41622.27936767878,108438.5579744472
109563,340811.6429228909,792652.1780628187,1620661.17308453
109582,87269.63756213585,93895.78635911668,249444.24081210146
109614,240599.47478949552,890225.3754690214,1601883.4573801653
109624,25661.797306788692,65867.40412495454,130878.41398509966
109639,10954.38038739349,29890.15344602007,57998.36204012297
109642,78584.96996832202,131875.77797237426,290454.7844857356
109684,23587.3188082779,121241.54501360582,205952.49211596762
109706,30358.000430104094,69297.43956387136,138941.6789405493
109711,11189.770807313815,26334.292168421613,51869.571615127454
109722,26080.27626451635,71318.43304303032,135289.36044660505
109725,66994.32072934101,124785.70111374487,265178.3762755822
109736,29130.64776446218,93790.0196481206,175911.52609930845
109751,292536.15758783696,686683.9405579577,1378884.804452448
109754,508220.0525213966,666509.9022386434,1709262.2512774887
109756,35584.11581950422,55603.39915300441,126952.39150268698
109761,5265.674417434389,24762.492580383696,41882.9683470156
109773,202492.03540065375,804976.8934805684,1455303.2181775598
109784,575800.4724498701,1392435.9849551367,2767356.7715669777
109791,9783.81939838401,18757.071754255612,40467.28937055511
109802,82048.2491070004,193420.37798852412,385261.6411201933
109820,29029.71276803281,192175.3397550924,309884.58347554656
109824,105792.76645980746,237558.63040659693,480309.8999190554
109842,100139.98970948963,188595.61634942016,405331.8247959583
109852,361535.9513174802,806945.4782259733,1633115.2332891012
109904,551731.210922437,1563319.6544400838,3000610.9925168473
109908,670447.3309562012,711181.7697402253,1983592.1538174802
109909,323458.5081197222,476859.8735356384,1114551.33974711
109910,346222.33012437826,916191.0424487699,1755320.661840558
109911,560053.9243353424,823254.4279016029,1935636.9343242464
109919,50728.89259956678,152912.46974169064,282414.3552747856
109932,558637.0474154386,1067563.9298259404,2343455.0735655758
109940,294243.04554658633,414048.23639617406,1032372.8267706224
109954,90044.55222101921,133180.61678245143,312583.944572065
109961,36424.12958942056,44698.12660073071,112782.9179429349
109984,34107.79721751108,100293.47649559965,191233.46072087053
109985,8907.46887030376,15605.538190305577,34616.086138354534
109989,76476.59719438956,118085.41378354725,270584.482760269
109993,532325.7664545825,1377773.453172427,2784628.261163854
110013,36375.71159903216,92446.2220853534,186672.47966372033
110015,28248.35688911519,105718.12065523748,181809.62330008642
110026,15583.83265919984,40932.38234870323,79244.64071729332
110045,30491.03298352555,73951.44534566389,138756.15067484396
110054,92738.52221405825,154311.7062306218,340297.4184239004
110061,54442.11899377964,97060.54696864125,209767.60812669288
110100,383040.8188285828,479404.1637704654,1227026.9965745122
110174,30230.75607768168,72386.85090191642,137752.78144193068
110201,84914.66690886009,149142.9144303539,318872.995047395
110207,517949.56789658533,1301463.574858435,2546585.513058053
110210,5110.684314971875,16413.051559766485,29131.08271906451
110276,11753.007993439673,32378.078662080818,62004.6394302097
110285,524503.9370868615,811152.2650682701,1965709.2867120313
110298,20399.787992415007,77405.11922151176,139214.8486459565
110306,20468.986260878668,64729.56287322833,117883.95827478485
110320,79342.84040450842,177441.3298930096,360879.99515555834
110337,94471.78159735083,249061.4301485885,485230.5040969614
110341,34534.669215650545,68674.62448968357,143748.1933456712
110347,89623.77630826482,278272.5281454649,536832.5729610744
110369,284746.7612462691,967647.7746448761,1733551.2763582494
110405,152550.1491070675,335559.91963363934,675194.7868459879
110407,364817.8922956823,758103.722184105,1571185.1534312647
110412,220544.94772166578,247030.43467318028,645673.7847356452
110420,30637.06019118702,55857.003046563404,120290.05435621277
110423,75102.79974373739,233932.6215720956,446869.5106070981
110430,1889286.854275218,1302858.3835225396,4480945.092347421
110464,617098.8000944471,776754.2409303589,1955497.6919738376
110479,21485.148320530316,39345.225135032764,86409.29427336587
110482,489735.5653727088,1228612.2150427394,2492741.4571270654
110501,72437.50258495432,97936.154867367,240656.93078306055
110518,13118.975080968714,31649.345377455895,62799.112187044266
110526,36841.167418686295,111947.59565917306,208552.13823977776
110531,27962.290604397043,74304.29961191995,142330.0641124844
110544,5173.531478869909,27843.909881848747,46534.252779124676
110572,712662.9998589829,2267358.891224124,4236473.133063468
110593,11937.19218596727,59030.713219658835,98145.01215322239
110602,74927.29857677293,172724.7581601253,342175.35418456607
110607,953438.5513859702,3297661.153131462,6262351.444412022
110635,183562.59226941824,234601.61999496506,601552.050961664
110655,189505.4925081774,388487.61509072105,849713.2713734366
110661,119329.97896271403,119649.59417708343,338862.05809151183
110674,56086.70062215068,89254.0901302451,203696.19861983182
110700,304580.168501417,484169.8935653748,1092523.3983917297
110734,42965.708543707005,79650.67311863053,172271.11321235326
110736,9802.531774794126,51570.75603164245,88483.06203533156
110747,100028.47528693151,201223.52348102594,422428.3319839319
110749,2522852.7367831203,5664422.868418666,12031770.865676697
110755,8814.216023447792,47995.70175386554,77394.32476640174
110759,20010.520087434208,81732.75157639604,141472.24969867812
110760,17362.592355269542,43851.476657769155,87010.31654709778
110767,71335.21563228121,175850.69893782545,343335.9787734037
110770,20863.47280936251,46030.98166682045,92751.65254639764
110776,2095427.329363593,1934667.7848874857,5731023.165555406
110786,130366.89653812838,264536.7716323912,553380.4975434691
110806,5668.315135877892,17831.089301665776,33320.6336616209
110811,2813323.561633772,3253551.8911795258,8892869.09756994
110819,585111.7052975297,1705187.710199005,3266418.1197835845
110843,298015.73167628684,1071945.5215950618,1940300.336690293
110855,355282.4067141081,407712.90539134294,1062328.8494881475
110858,422888.3465659715,462164.3382850601,1266121.119755021
110866,15279.09799559048,62473.07538082051,108335.37310408297
110879,279648.9242639902,295527.8056433971,830932.5932352988
110896,1336830.762110125,2986251.057895063,6179835.92490392
110916,76269.44739899004,202022.83043911736,391818.5344349639
110923,6028.783758711779,18189.37806434113,33239.06129098698
110926,19167.202502570646,98880.94157994307,166513.13968675392
110941,18154.498095969644,43100.26422646143,83095.96940547602
110953,539802.5577255497,1402521.3189941589,2794459.487446213
110960,56743.74018267591,99642.36164880775,217749.57012295135
110961,10941.844405752596,29524.330123595177,57406.45912654209
110979,26041.27940796158,59591.28840657948,116661.48701753834
110987,57699.4762801046,153559.35104009995,291610.462122672
111005,12884.229174070613,31780.34954128141,61064.4235835546
111010,200784.23965535432,438083.5968551758,870532.1123546408
111025,90129.79118725288,115147.69644202694,291566.4354261071
111032,32419.424007988873,98081.00433518052,184487.66946431925
111039,35317.91459122786,64400.32817481204,135265.822219945
111045,13497.296456924638,29162.78715628362,59510.77131447202
111058,80596.34685886477,191915.49644962835,375600.184114142
111086,26412.18009706588,98788.259926076,171813.32423010457
111104,345634.51585793175,1006252.8157856314,1951632.3123276285
111124,26527.390086960815,34827.537842767015,87003.03773756308
111141,418873.34721236466,803386.569726896,1792545.4116305215
111144,170533.80759572104,400033.43126611615,814727.7817054617
111154,32871.2605307436,75051.1275681339,152848.8683234495
111173,173287.07846811556,248864.7632139494,578343.4958544201
111178,35910.32142093095,82981.12591516614,165488.47736297973
111215,497025.8340097769,1326426.9032200237,2584909.1275081593
111216,503075.27660192386,1263034.8388707137,2484764.042686949
111221,168759.7788449644,245663.55578691728,578966.9528507788
111229,3850.4512301615164,20914.829223969344,34588.152605327065
111240,59399.22068416753,146851.82714069056,286860.05005838873
111246,132714.48521682987,405989.2206000731,748409.0505340759
111259,22506.58565912663,70330.61668645518,128372.83327774024
111275,892436.4661145017,1812701.7633754977,3765556.718710012
111276,23644.024940528805,50560.5528655665,102359.88036184068
111287,182995.70994377547,230169.1711207894,583639.9298599799
111294,1304757.99732442,3416376.6476700674,6775889.211359421
111295,5084.644962281408,18159.00857975745,33102.9049627304
111316,162484.50307331127,351530.38657656766,726386.2966236182
111343,117111.29003077964,307488.72827454715,560345.7846546848
111359,19118.93115204286,34168.313118065686,74760.59046896908
111366,164241.5523428373,210113.4500176746,524820.6264213927
111367,10304.942723484866,44211.10007453441,77964.43380141209
111388,2002353.286828448,5864363.421049746,11145181.319192998
111396,67807.36294414499,165592.6622990459,325289.2987650689
111405,17501.95665509452,53605.078881288144,103295.82585985793
111410,29914.7656918735,135642.14744050105,226611.55751617588
111421,346777.61914073525,499118.05437244114,1212571.532852346
111433,4848.588631289309,10882.661958202054,22514.120417771264
111435,876652.7680232688,1876413.877705445,4052198.617559261
111441,113285.61672730769,217058.60344694438,467916.72420008556
111442,30584.186122115116,99611.18258691524,179757.39324343775
111463,22456.2799573561,31720.856564317488,75077.35846544779
111473,19788.8298873669,35354.66618785411,76340.63432793497
111482,30797.105014000565,70546.98928813198,142133.0623538295
111497,450911.71062040725,972822.5799561235,2117532.525031495
111498,29913.319213144438,96020.14264476205,178788.51959313924
111500,400703.6802814891,680276.000712048,1541822.302270629
111511,991422.8341799468,2084749.0834999357,4501415.280986286
111524,39403.69975923851,202639.34162570897,349789.0988625699
111529,3350.69990366796,12195.792408456166,21751.795669101113
111541,35977.97701967293,121161.29488062132,215692.5036464156
111542,175661.96572441366,264971.3301601198,610057.7748392848
111548,8700.913218660347,23746.86649606908,45418.92171194243
111587,20515.057857954387,60089.040503820084,115483.44166337274
111591,38507.32034261938,122146.52581876879,230935.30995684737
111598,319280.6836213173,478244.11904296704,1156717.2576331832
111605,106442.10640165502,165214.28825483244,380664.37571382243
111617,125745.21462790422,330437.8808772595,658876.6676591157
111618,2470564.965981888,2547232.2684425637,7192255.721788004
111622,482995.3532154501,627441.2952775286,1570855.3044816775
111629,25998.669966966612,62825.271205994424,123479.03025784745
111634,263120.4210975702,435193.4758903056,985471.9629143046
111640,4109.493547192861,11325.991056242148,22060.31318010378
111642,12570.816374741267,52227.89791616331,91273.38560743374
111644,6599.440839407982,19420.335429257044,36627.355398599735
111649,108677.6531766686,216123.05425841577,456476.6646574858
111652,39545.052165668625,61014.992724809315,140170.27918600323
111658,3553.3509977409753,15654.225159850208,26914.55144835026
111666,11828.734379583588,26718.257841697625,53572.79658407054
111667,41818.09831847896,55828.03825669244,134877.20910026558
111679,10458.557058829147,45917.88444242998,82473.43893609353
111688,477588.5928734846,1970411.4084508687,3229697.568202638
111702,13276.123365053658,54983.64888117858,97545.67654151365
111705,103985.47567326522,143552.7492059367,350916.5127242091
111710,13813.892346334573,53672.02327493114,95801.5543197516
111715,130332.48716810292,149913.47134966915,394499.3175268114
111717,430797.3279213949,580461.4341053859,1484491.0714287446
111729,39109.50968443736,146315.85837437626,263290.3625645276
111747,406977.2744278562,1175962.9894084884,2276578.6080523757
111751,31177.54832018691,53578.69433241313,116853.0149212386
111752,107750.80819095294,195163.2913704763,423774.7541290566
111759,48940.96673883625,281252.9955535073,464517.4565628191
111776,693870.6099562737,1659229.139798476,3343705.917489353
111785,51801.38048010441,213198.72268038106,372468.63077485963
111786,59309.22060147371,73359.43607460508,178279.8266770923
111803,67120.38653327063,138875.94950140826,280679.3589975111
111814,82587.46856323587,80997.79182977458,236122.7287531448
111830,513897.6985957042,1355681.4776460903,2681258.7327787485
111832,527779.5554865289,793209.2334681348,1874856.0397961452
111833,14375.511683307297,23320.378164718302,53598.07388509589
111835,45440.367363093545,93747.51741074954,191820.843111485
111851,1439196.1101493808,1770371.7571443524,4569735.083958983
111855,47349.33964111599,103582.30531909484,208693.4300160326
111864,75310.1191883706,124256.24101637185,274151.9882834706
111873,5341.042350579448,19161.463348306108,35987.240120315546
111875,30154.994966032253,123629.17400068263,213231.03668991206
111896,252739.0166226114,709683.2130254998,1345208.64882726
111898,38714.234134170954,46110.82266402302,119809.79404532342
111900,19754.848900335204,39629.723543878135,84359.2242135414
111901,44326.68253626542,133273.6959077171,243796.9909593555
111924,1170809.8186767288,2283596.0457740584,4916057.963905942
111925,2628.3002039505886,13510.212347430797,23576.200555712585
111926,619122.4612610543,1997286.8550329115,3591704.0288278116
111927,18579.95983109279,29008.835920299945,66950.52425957429
111942,37617.01293933301,67340.15238497617,144703.4503517694
111943,27030.66453644585,37046.24087597697,90165.62557822594
111957,175840.00972852387,442215.5041986842,898817.9768708372
111966,12049.99377720108,36963.752247711214,68321.69305916394
111995,218338.6368451753,840817.2580345063,1476027.4039820388
111996,10702.009001786986,75913.99523288193,122213.71998292455
111998,117310.92805119578,216123.8151270684,454568.1785051327
111999,79388.03277900319,197872.4829543546,388971.0399256173
112011,13561.637091878816,45651.526592765935,79985.20466641121
112012,87358.51738332844,152740.7359643424,336212.08535585285
112022,24800.14058760492,62053.579113834625,120937.49146303689
112028,40366.33063257207,60469.58063888785,141744.9125214439
112048,5567.277641730956,16118.37285619574,30189.488531007148
112073,367106.06865410105,943630.5766531556,1852681.1656441875
112090,4991.537506682168,17051.966223732932,31558.104180373142
112092,63675.04661882535,114297.58634963383,248700.70005442365
112093,17517.738853185878,35481.59502067117,74315.01647052988
112104,33358.047830794225,34573.61563941735,96245.31009928152
112107,38291.5378216192,102467.46787270707,198117.8477531593
112111,30184.904949721065,67827.66686881987,139167.6160115375
112122,23646.27162544345,82882.97966945788,150600.22592655904
112130,25533.635179175057,62406.455264873206,122897.4365894357
112135,15510.977626687614,39969.75593224391,76101.9806930237
112141,69575.3182541423,215551.01203261167,382389.70507928776
112146,2162139.3033410013,3910749.8070338313,8765277.500770226
112159,63157.43545363745,108317.1011484848,235722.14687957102
112189,565155.8249302659,1623920.2423410828,3123632.5093467683
112193,394918.0986766618,783453.9389088909,1645784.8117441782
112217,34529.98036162312,76725.94324789428,154350.5017645678
112219,365187.7336651416,731704.958947959,1558909.6173903127
112244,74519.98006020073,177053.59969274735,338921.0384805568
112253,604854.5127073673,671125.2038290737,1809850.1198671302
112261,52176.20437635328,75645.2129369367,177496.37252233704
112263,577562.762012336,890641.3312422383,2061062.567310146
112265,174408.1391585591,419218.56329641695,837802.0414393013
112272,220219.48625518536,555826.3211977483,1041387.6801486795
112289,498391.52923377487,609607.5851981124,1573560.8465014505
112293,11766.558180000191,30921.001395887917,59543.382816768295
112298,74178.48692031758,219500.51442832814,417532.9544794017
112299,57344.61009014785,79700.69664916539,191313.0395153574
112305,138831.50776026788,281283.9168955533,577221.0171863064
112330,53545.97275468988,156865.9528312194,294650.46167336777
112334,22361.577285127787,51600.13436663577,103971.52502271796
112347,1638443.8070121456,2074486.278820531,5213515.2467879355
112352,18023.50835218129,111653.28925221699,177550.54669210978
112366,17715.2113921926,49433.76927477629,92069.41127847692
112370,278912.6623628346,656007.0214709713,1347535.3979550437
112378,351213.6517729347,621346.4254780734,1371267.0734597174
112390,14928.867132621639,26233.70206763512,56494.18950597548
112412,12720.734036940912,35538.26830432132,68191.96911596536
112419,34361.06458524287,82766.6107101874,160594.97892736678
112420,1649783.2575514652,2366603.1877525337,5783167.901836886
112426,19959.163198738614,106165.7306700591,177951.9309561926
112427,69571.75813977089,90563.50136399512,227929.0388103302
112431,191638.26822974934,347240.793849402,743906.6235398473
112456,10465.171732840183,31208.74180519711,58465.105878853996
112463,16170.501622562399,47983.490141808754,91159.61590704862
112470,64162.883947878705,140201.73816671944,281308.2278263124
112483,14797.277432560879,29561.92979523865,62172.608371733964
112491,34531.31648948359,81212.00749849518,165091.78363254777
112498,269948.6789597357,526227.2115129272,1088718.2825500853
112505,93894.05852802882,175783.86724262577,372152.1373077112
112508,213020.596096017,485038.7346112244,1004442.5541354212
112547,17553.07884115726,43225.838380602734,82277.14640678649
112570,380670.7480317859,510047.20875040506,1258591.0016129692
112571,69461.08437970799,151174.38551276023,296833.0452821262
112585,21762.293694946264,130439.53998242175,212974.1821843383
112613,221828.87382579525,323572.8956992301,774883.0549232597
112614,65483.67384382545,331790.56550635427,557893.5637201652
112616,21636.32566626148,56576.120784784885,107827.36800355616
112623,10756.22411305592,26359.679639324266,49690.47920494591
112624,22925.112865753883,109365.3157040597,190559.57114957453
112625,59460.33690291659,158770.20665447318,300180.61451250606
112629,25834.259783266036,38830.195765787445,89847.7613586917
112630,90911.62205601917,158823.36999979147,355655.5728994832
112650,281920.1523116252,553835.1670405237,1164181.2366016426
112654,393123.1123374717,1065625.564573598,2081561.6609154432
112675,13129.17883813403,62061.450953731095,111837.52183402912
112677,85907.2242017839,157564.72536902002,340412.5468202107
112685,521256.2212712633,543721.8290922284,1464823.6240824685
112700,63334.42007849467,179147.2133451052,341047.7129808259
112703,20764.637948719163,85523.7582946885,155029.7690094593
112705,31913.399609998705,69735.63057029588,142097.17495426998
112718,64412.67467348633,87568.94322620786,215796.15236484716
112720,3949.629406366759,11450.836690503484,20944.961117654762
112721,4816.137260708506,14796.239329468843,27495.529478736367
112722,246349.57105715314,598351.4158009703,1188500.664858813
112723,15982.125444459018,40793.91054691546,78266.68580411168
112745,231145.70239373407,904141.3005179419,1668799.3740362893
112757,14308.46422105328,37208.429330323954,70633.19037095048
112769,70831.35732894189,106864.237358303,252187.76155900845
112772,627993.205614924,1802819.6832279323,3432063.2014698917
112780,53514.54789361286,135282.3198540381,275668.6334110627
112781,16800.812169903587,84264.46232770164,140595.6625418855
112792,31674.26819224571,82724.85567468968,165284.69533380182
112816,362313.5020324643,296800.62921826215,950478.7955543229
112832,29438.25607765984,59548.326815915636,123497.80617768424
112833,148974.39317633832,190176.80983515413,480068.2196691965
112836,311509.3284409301,1787070.502528639,2972650.599411234
112841,242575.227606159,317604.8256844084,781321.2245256815
112848,15212.790931572492,31407.776193044985,65755.152003797
112849,16906.338123646958,52313.01998245885,96573.70516150763
112875,263138.5079411826,581063.3551765559,1183083.2899416266
112882,1429746.4738386397,1859426.764391258,4682234.191626798
112896,163328.42908902335,375739.4666584308,752183.855728377
112900,450219.7702837388,1608434.3427129192,2838622.7871817765
112901,47008.372879490926,73053.50384661683,168086.3943975852
112928,7031.3599835821715,16216.983555917532,31991.190051671518
112940,112166.36501448113,210421.2414082404,447108.363530433
112947,59313.38931012596,71576.1772997279,187355.1079720317
112954,241446.909406415,511825.08797703614,1065229.410330006
112955,20028.519354272023,78035.34709142482,147746.8444682298
112958,1182392.4542561474,3976048.061888167,7642586.853905294
112967,15411.437036872747,36934.158087390286,74300.08218062662
112988,19259.912895648562,39013.79564724616,82138.79481187338
113001,47714.51987952168,78545.66209800098,169348.36185945134
113013,94564.78042397655,189177.96980543397,407341.63024201733
113015,18256.120294194272,34611.948651025756,75592.53311544436
113021,20908.758050007826,55287.89954196506,98894.0054734747
113029,327736.65267346863,433413.3028546866,1084097.8957481324
113032,10975.269452813305,36099.640117463256,65333.20781509167
113063,1152552.5338178014,3177673.4775392385,6230696.016158069
113073,1234890.5425897406,2878495.8805879736,5940427.875315274
113078,15527.597266010085,36440.79621276029,73066.87736364579
113092,1365691.4620961086,7698097.972680621,12811429.249182196
113103,24209.859352456548,49232.62494932343,102192.8037991659
113104,95640.74058191448,143463.03452767545,327131.5150251058
113120,910915.7975054459,2612567.014641752,5162779.648097359
113123,22763.947007220017,47533.938017632805,98343.6587037317
113133,37650.89887470613,132059.2745597106,241142.86432036938
113139,53963.77912519317,88316.63362429281,198027.22481930698
113150,24626.396759649204,54533.4327089037,110589.20599307804
113152,34758.14591979751,70172.77052126179,143615.771905965
113159,8902.869118625866,30330.949712032212,54730.865101686955
113180,1769156.356058764,3549048.615908933,7525742.893284405
113204,58889.168359610114,145476.95470890196,278112.4099643131
113229,71999.86422189657,140879.7947294617,298675.89064384275
113235,143504.29028953047,399279.2626357004,785984.5115182763
113248,36141.59729663083,70684.22600654181,145698.05373701887
113278,71684.48416551671,114372.38132989382,255287.13699944393
113300,250002.3495535182,257641.55765397372,708099.2438079225
113302,13267.531230015578,46540.69968947608,82767.87399455905
113325,40934.15219905191,97030.17395398716,186934.1874600735
113328,66754.61164862258,157464.0111869535,316582.7365230017
113340,30775.969145587795,109278.00054648049,191821.03796443064
113364,541184.5926600297,1186502.1457374145,2396837.975507085
113392,97239.48044710864,225886.81429290213,448821.71247247735
113404,855939.3571822259,1138097.9248832962,2852955.2585536777
113417,167511.4088781392,218971.1083190468,532338.8941830462
113419,60182.19957314455,59268.04365918716,173409.0310777181
113423,43426.47148077114,97462.3234618948,194567.8238444156
113430,309004.8487623828,613830.5809828228,1308423.5385225448
113442,65577.65647064839,182019.14450453888,339292.24501777766
113463,24906.655072438585,64301.067727200774,122788.85731464151
113464,3170461.836940632,5063389.352498017,11752876.290431112
113466,77993.86101783291,144555.35754976916,309656.4115484103
113480,22408.840680806188,49417.729301370615,99426.00247939109
113497,117536.08019329993,400768.6037125032,735322.523540128
113503,7719.029975780027,26729.41442541965,47677.507545267465
113507,34507.777697182,68776.13735311961,144543.01067980894
113521,388197.9574259587,918378.3937628889,1859986.8973656711
113524,641285.7597288662,1646569.25544649,3373897.940408975
113532,45358.069721922875,44110.70413116533,127544.62929426091
113536,8868.607995055683,36118.933932741194,63888.49964285784
113556,23990.934943423068,96835.63624882666,169537.61426253317
113571,12353.151366674347,29990.33479570481,57902.30037083778
113581,3262319.436696916,3447241.344196444,9306419.99425135
113593,200215.8123761746,350687.14452960243,746342.0975995869
113595,70043.3749418223,114092.10444472608,262673.28524750937
113601,1170540.8431648186,2844749.9555417066,5991646.475012867
113602,28042.65833684377,44121.45179905679,98753.77290964831
113611,15879.17173341325,39506.34830344063,77567.02366353164
113613,2065467.4063543743,4740310.15842399,9662451.207545284
113632,47328.633776226765,75047.59839597617,170737.0261246871
113636,30913.156682656165,115885.40439516603,201845.0059126083
113646,40708.169689418384,62265.53198459036,142745.9030368167
113652,6208.874501109413,25417.38158331932,44801.72477587125
113653,7457.682961128948,12135.51305751549,27421.993908351862
113660,87959.19420893595,149142.13405386516,329912.8759646117
113665,41950.7790199502,88785.02036744067,179828.99524476397
113675,117300.50918633415,213546.044544032,459908.0263507706
113678,17187.665622025594,32991.961335125394,68678.9412124587
113687,202865.688499409,518997.4836589845,1027403.7576585091
113711,3887416.519570188,4756434.793040834,12075770.56456612
113718,49986.34457827348,91871.73140090499,197649.73534567474
113728,12162.246398226027,34816.86776189784,65671.66504207026
113738,671635.6052886498,1768211.6187560898,3280569.5661604516
113774,14986.914045257232,21055.77335107928,51616.07766208256
113776,2296142.060568533,2876995.784099602,7300310.728111315
113806,4579.136503323682,20592.978409884276,35859.68263258144
113815,41077.11042280205,120383.50484516764,224982.99719135422
113822,352235.3551735311,391076.6363189328,1038784.0449141392
113858,527466.5903488669,1081467.5540878777,2275785.041408584
113883,580797.1984588414,1641531.5488630733,3139626.960899942
113887,35338.337426829705,72803.52950000757,152628.4858073564
113888,29489.536911534913,134401.29695515573,232893.9619868069
113909,33198.7645109693,79857.90533418318,157070.5762238006
113931,8996.462516490106,21196.870649594548,41501.1049687046
113942,511178.7079080558,1398606.8625522503,2744256.4362643147
113955,62248.2364250463,162796.87134571522,318437.4451338439
113960,258108.27818088682,390845.0821167001,929985.633466564
113965,439921.1486114927,1039237.6777495985,2113430.317217298
113967,5013.127754905106,27205.597185750146,45350.983955053
113969,125090.07584809199,155098.62363429175,401526.3890571522
113970,10598.979844784726,31400.209617715147,57898.11195372343
113973,211825.9993939437,548111.5702065866,1063619.520466626
114003,58955.240875230025,161029.02139184033,297261.2735937282
114007,16428.065387759005,96853.47281073117,158575.27396492253
114033,18589.355639229587,50235.30432468235,97308.68971956693
114068,424689.7947217885,855963.7518347078,1817719.823882029
114073,54067.97629863947,41716.179700234105,135909.22398076148
114082,37659.1625467223,76712.50876092518,161432.24078124666
114083,36572.33863221118,63100.44680899638,140187.17767009424
114085,655451.3942534241,1274958.0967425746,2727894.912751532
114087,103455.61722926889,234358.3757714745,473649.8487822521
114092,27725.286977889587,57626.12980767349,127848.90585171126
114113,18772.15901727437,54271.71978358635,101302.61140639153
114120,38865.25001221386,91107.80097448215,186778.51480312741
114130,122970.06736857614,258943.92902263542,519111.2345090627
114131,41409.218886108545,141357.62124769078,250008.34217802214
114134,9663.772388101017,35128.81750454614,63750.99833950703
114138,27215.830923486392,61258.96106897447,123667.1448887613
114149,364247.740784788,793361.5409054945,1596244.7475780773
114158,156150.90163481617,287431.3143135069,634088.2384994689
114159,214726.5704329236,570670.5554231651,1098673.8024830143
114190,78869.84614122934,149333.01850014526,314017.99600721744
114205,16429.640709519852,31938.188343924496,68060.10495889935
114216,39984.86980627051,115386.27759315087,220957.96831187553
114218,10941.819223366505,32172.940304870514,61348.88506084496
114221,331980.9788898376,566637.2419590021,1292877.693060437
114246,262153.9392901698,462432.12847326865,1032537.1393012332
114256,63650.36583880453,96582.3458678381,225078.265032675
114270,288968.5644870249,637684.0854922008,1302033.8968858188
114277,40652.3960458404,73151.36585227707,157795.75684228796
114283,32986.064519680614,59805.9917936823,124587.35022360351
114286,14882.084675915165,62680.38521676696,108586.3603506005
114288,645345.663191946,634402.7890829772,1763369.3009714682
114301,83185.5949964008,175943.01633245315,358817.31803121825
114306,239725.57475353772,809382.417102372,1542720.2997929263
114310,10897.435706331387,33259.51801305185,62445.85491990867
114333,29945.78308746388,54815.853700451065,117659.66216878075
114341,749320.7050699176,1988527.1751212953,3981971.4584421893
114353,39787.51343946377,96232.8413899655,188348.94654872426
114367,76890.37182854707,195704.89226009187,390157.6076878134
114389,417253.7550788466,1726086.8459438107,3104100.094893324
114390,357509.14552780613,1546915.2210387336,2741426.060534397
114398,766125.9747557058,810844.8812921355,2167115.615702707
114415,47575.75839035692,78318.249197169,172559.10601992902
114420,30036.16419370774,119784.93612280439,202974.8427568468
114425,37188.05166189091,146671.21158722916,254963.60217217475
114434,52989.34165699008,248638.28102062416,409194.8180903945
114444,109634.79309874098,327300.01532573526,656713.3347781247
114449,13501.6392166789,37167.955803085,70227.69750849993
114466,49122.977344894556,109939.23289487373,224787.53100933327
114467,35251.73484382628,67102.41955199534,142858.40467337528
114468,46656.72918374311,50444.73176435935,140218.18532652612
114469,15719.53681973057,29793.589101502508,63373.333357012205
114473,19952.691179214627,29175.377818707268,66961.0527879301
114475,34729.07089532851,76337.92773713832,152310.99277089874
114476,3493962.615619672,3841152.423295976,10815835.842248203
114493,28537.96926804202,43858.89163438149,99871.37301073452
114494,49314.2318029429,63486.16753195109,158706.20624131127
114499,174636.12724953098,235280.17658621108,579436.5616606018
114507,20762.015134999987,100942.5699180147,173452.1058916544
114517,10926.976902571698,43130.52546287937,75459.66482515115
114523,105430.6823999882,175701.91984500233,406402.4608333007
114533,31759.851364971993,86020.27082720592,162241.12421724334
114544,84873.1435730543,143543.45617103254,322268.8980294648
114554,386528.2810666642,1184899.3523565251,2212510.6730941418
114564,38163.414734967955,98774.68863887458,193497.30551280116
114565,3005287.542208833,3097840.1610493795,8875097.49013644
114567,20789.395793130607,90574.78992133295,158527.49166381813
114603,21504.752445715763,52336.63462184784,100511.12160139489
114604,105573.50716505933,240776.12658084664,493370.4847076058
114606,129007.88442977682,277185.13898566435,591942.6254566393
114612,93388.37225860858,263180.6521755785,511054.94329207344
114623,353670.5652153279,752711.1653927052,1582350.179194384
114629,2582547.698733086,4328083.75831336,9974208.737731494
114630,71726.60776532641,182245.24595872467,362647.78584169963
114635,137454.92321105002,234534.58696444274,498876.4906841876
114639,289826.72400327335,899511.0831301628,1670345.3870404898
114641,88683.89541267385,113802.62308518999,285607.56748487044
114660,15254.187378177814,66812.86470797013,114077.87435750038
114665,10924.890725409974,17497.29468853874,39825.0157944892
114680,44495.95501060537,78820.86024257937,172115.06985917143
114681,59992.96428338195,103435.89529510005,227714.26327706256
114717,29878.242300268077,51940.485388468114,113650.47276112202
114724,3444257.207666212,3551849.9300913205,10218196.376350682
114726,102717.21827187235,225166.89346749766,455078.91387209145
114730,255779.53956544882,238181.26755664684,693670.1424014193
114739,343866.1368334677,1031355.1278534827,1974082.4109826363
114745,39404.31586969948,65373.05037485104,144757.71192853045
114747,347475.2164494998,641270.710278328,1370955.1063040642
114761,53730.12000413841,264575.87286876363,422062.4735727721
114780,53967.35247784642,170415.13402772864,318027.178986641
114787,470924.7691920668,724294.1521755575,1682891.3577305684
114809,16814.50125265199,29950.079937903865,64557.819447309026
114810,13861.347824727642,43760.1656038877,83049.40958337454
114821,345491.79095599963,463833.1116362799,1108011.350665915
114824,11470.208497742333,37667.29616068836,70345.25123582233
114832,76359.91402703007,163539.54628875075,332728.8191601919
114842,264321.15344583883,700351.6260950334,1400521.7962587026
114848,293529.25082625536,407857.75989517337,969361.7555964559
114859,23024.928049884355,32066.1437221302,76694.63238942833
114875,29752.570515932257,94628.2914168743,179185.23210001743
114883,81710.13119356036,202600.07973472154,389444.06865774246
114887,16839.96112248694,65027.67713935425,112956.25711901311
114926,102215.71884700512,247730.5017016019,495647.83875321766
114927,44044.757474708815,59999.22990415297,144260.7736456383
114947,243444.4559692494,535999.2952580925,1094869.32784124
114967,22940.15225714591,43783.91425634264,92566.6952465864
114988,3028059.06522358,3724057.3874897356,9716768.574865388
114996,449601.80726625916,555117.8699754621,1443939.2998995187
114998,79691.07252908024,119981.8802776584,286310.191124575
115030,19040.784194444153,63505.89822086827,116789.84017432536
115045,60335.84789380208,133921.46765786334,271712.03374460764
115048,72083.48789399884,238760.28546518218,436689.4999011357
115055,24148.893046913607,36369.52701789313,84016.48220350119
115067,43849.32463663303,82207.29338754126,173375.73890350232
115079,32450.261949992073,97114.3052081489,182505.45025979122
115083,77954.65101269646,407713.72724731057,708045.1579752164
115107,35478.70450193004,95323.25600537739,183646.95807066723
115120,6219.781461942532,22416.711324987125,39923.31967559545
115125,25077.18752720122,52480.013038688696,105190.26637696163
115143,375599.93104720145,1007269.1966718455,1993780.3955527022
115156,1242612.0980417228,3186779.0994119053,6456899.055040679
115163,37728.94101561148,74914.6609005184,156945.96426600503
115164,444089.225258564,942263.5991214123,1937841.1809364418
115180,484508.5758901382,1160236.1415210844,2455188.5259896116
115185,24345.821919242473,63680.53974527797,121595.25064059848
115188,79749.69566100632,162968.76796106598,341721.28815933387
115221,36532.099970235155,50593.274434336156,121039.437922392
115240,30496.093301088622,67623.08053461525,135280.4625862004
115265,15042.08074719214,40356.358543628674,77506.68223448592
115309,4038.9111190415815,23281.532854383135,38277.497809923334
115311,15481.487949725208,48205.94781810621,88263.93373769891
115335,120570.80269727045,118476.56671075783,344310.5100878075
115336,53716.33204235331,189732.6517659393,337444.87322011136
115343,27882.606889303293,75131.37250018703,141625.8587245514
115363,250229.8471925134,578961.253694123,1151511.9110307922
115377,108533.1659552162,158482.60572038125,371771.968895843
115392,23081.945294256682,90987.22587622449,158515.0728317401
115394,83556.87081347014,108916.68633741216,274141.3135964881
115409,15704.563255343708,38268.666845082225,73782.03259375227
115412,38367.98227170951,65467.12632879253,143213.12371443352
115424,32255.490446392218,45063.3297600498,104683.1761188473
115432,425041.66791047604,989866.9122583006,1987160.995585341
115434,111031.28718114467,136838.68602224003,354045.8780492026
115453,37894.64802551324,94990.10147116723,185117.3139580593
115468,187939.18754669194,246544.9142910233,619840.7530490265
115482,52990.24258518645,116026.29913201375,251718.51058492254
115505,35119.46147396441,58765.46375315684,132548.8135582693
115512,43893.83692695324,99190.00410636378,211864.20451269235
115513,27217.150987299563,58161.80384534891,119411.91612262292
115514,37895.80872014427,70418.08342239322,153186.19590087165
115535,285872.4188350542,793044.1576450786,1575960.0941722533
115541,66469.74399191882,148744.6426175449,292203.24675431964
115545,52463.04834924408,136732.97306935428,268719.6716545045
115548,783350.4049110487,2205929.7226760406,4323116.934361301
115549,17075.120942198606,50401.23642924349,97239.1080744873
115562,163622.7026029438,181335.3592586125,479894.89384665084
115567,47933.94717904216,48715.049902990024,136573.97266956407
115593,48135.5736355219,62922.962306526075,155498.28360584684
115603,31708.623656304102,91862.96407534703,172606.25990236906
115629,316140.7133425535,702222.5951812064,1453272.8230357193
115659,28068.413115968982,95254.40976867192,174009.86557067442
115662,26684.093266025036,70930.22109122078,138320.9125049227
115675,1568993.7590255933,3333130.6958145783,6975231.106269034
115738,3105705.176303411,4368603.91639195,10368836.80838648
115739,39082.417720037854,64143.46941577526,141484.77922541523
115757,13632.029425924138,45660.38918856103,85925.66902041389
115762,69538.19916891347,108693.1740907679,250012.7475290831
115806,52505.77907454699,102077.91809392262,215873.45265200455
115827,25206.63611453284,62354.30634115176,123012.14751383296
115834,679242.6401107885,1368617.5791114855,2883406.4079259373
115863,57629.74576776024,107094.49764747168,232255.93565753807
115888,40237.85483108881,112738.77334892256,211269.58021241188
115895,502279.4784074278,1864235.9915082797,3289298.1284484062
115931,39453.6193846622,55192.23046063478,132415.45195379358
115934,14387.842257403614,29821.53841295086,60080.2646844315
115952,15212.88085230243,57192.518615371984,102076.48058415588
115958,492211.1927664596,1023878.4344155493,2173752.837025146
115965,323067.99620558636,736042.1450964537,1445768.8022944315
115976,38478.94129356891,78329.32332672637,163079.68385396246
115979,106429.26787130619,267322.4629340573,530101.2049291383
115983,378367.4310513531,1037839.4464688668,1982915.8339604863
115984,18209.702194781526,29377.807915064823,67536.09712461388
115986,20781.44032066496,94416.22315854092,159082.0641080279
115995,293874.91376645997,669917.0990416443,1348359.5268520399
116023,54041.0218717128,80092.92873447259,187911.24310496694
116024,37603.00401216632,85718.54756913733,170055.19403594575
116029,3291.7690046026482,13911.41705366147,23382.40274855306
116039,3722.8447735487507,14241.694034293865,25106.569457225065
116045,29140.330161963917,129192.39000041195,217552.05994730222
116050,55628.72876154454,55326.42043639839,152474.86293963797
116053,73685.97498512334,181151.02544137093,362402.256091296
116060,43671.90930777114,73011.61648776781,165991.99747319258
116071,36363.8070532489,61532.11065608061,133234.17178255174
116082,35479.18267652636,77953.79368350572,160234.40027186513
116095,28594.65423154426,100135.50766501234,184156.6390190187
116133,31784.704792948545,76461.78914026672,154527.33501318237
116138,62136.73570140362,185300.68059206556,342767.13626054005
116142,17069.567042706436,38391.90502939453,80005.82637226405
116145,428140.2812776008,968197.3625843767,2070693.7203639776
116155,114649.2171428736,164835.63291413418,392709.4291374461
116159,416856.9372453639,460578.97456471995,1223705.1333268748
116183,770764.9573081353,1902741.6669166286,3942846.6510222405
116213,252629.08914926442,806860.5458317719,1517067.0960292644
116215,48194.48789554212,85923.22742543467,187863.04295020428
116221,367953.8409078946,377270.228785595,1037729.7889314143
116225,235358.1100051695,455113.1307109588,998935.0373841221
116246,24127.913560181467,77038.80725239946,144190.58659235574
116254,58683.14444746128,75447.67827654704,185694.95803665143
116260,18131.624496357115,49098.09305222943,95098.86339466072
116279,16508.593962732037,29711.666109663438,63790.42803778837
116295,39249.79689110782,125479.78769022331,235910.322992381
116296,64056.243496647076,130976.09482096128,266100.2580326644
116314,6863.458691195537,27739.196605286237,49732.91733344768
116315,145403.14117903454,338195.82763000595,662724.5458428866
116317,965387.8317525797,2259042.3289862936,4541458.120207125
116322,12170.974748760875,27248.133390115916,54847.95386192309
116323,11735.294633372863,42935.404855211746,76758.40091120653
116328,84537.40098121409,211017.82114319105,422202.92131716723
116339,39648.08957427163,61605.90970249211,143967.67630636203
116346,2050727.2238817844,3495598.8273093184,8476624.092751203
116396,1570898.8546728762,3669632.6561698103,7733008.159126512
116400,11871.692007562924,28940.6689168875,58423.48530906585
116415,108377.9309455957,148003.9933205083,344448.3118355859
116420,4707.775278550557,22312.14415050905,38056.66836117946
116425,37525.985377198245,72141.75582361667,151002.64016641912
116445,92158.66288386828,191938.5788882705,388744.785062863
116458,123129.46609317327,302434.7331942404,615708.1006278337
116460,22202.830603314327,104707.62882471125,180161.55613726142
116469,19060.907889590955,83620.31501155766,146378.41054257902
116471,29188.098445717835,84073.00275785702,158109.93512199342
116478,883836.0468667867,833575.8466305902,2458530.4197783424
116485,355447.5300521577,774278.972673272,1607834.711311391
116496,31861.86097714286,55716.790580987436,119988.4324354151
116497,43501.169645951035,78685.64008818123,169676.8280065081
116503,8582.609738432655,71589.32425749692,113854.7946358723
116504,10818.823693057288,64735.12780797626,105994.6595252981
116515,10262.35710903959,31264.85106009484,57732.260504754086
116539,28769.54329937068,127357.61388154766,213324.94841090543
116540,3095253.48782974,3530714.1267966,9755020.337739877
116543,27054.932100091322,62569.45186517456,123857.05904671336
116544,53391.54791009656,122377.66010535865,243738.2379428266
116561,38917.81787731192,58871.863080691684,134102.4507633133
116583,10859.254057792747,40867.77386697314,70564.29127205836
116605,41682.697797589244,71266.98443801595,161765.8565252052
116615,128064.00014461571,243015.4383178266,517487.93385481794
116629,40904.00765404888,116095.08261254724,214925.27646465146
116649,19448.791187727147,22119.553928106863,53786.283369216115
116655,352585.08984768856,397329.8229954773,1040256.127128731
116658,97186.86396832445,157120.8985782975,349024.2308764827
116663,12073.392294090118,25868.529309995425,52170.49174345596
116679,9874.554683305756,37525.69262796944,69138.31678963616
116683,164071.8631058241,272686.0813308624,606425.3734210874
116687,4430.207438209474,18142.988038163036,32415.86869103273
116694,12121.640119927533,46680.436020513036,82824.28176260214
116724,14058.018382735376,43132.13545136942,77503.51425256461
116748,446322.7525617149,448510.56659087195,1231117.210487205
116750,33834.9063444742,158550.23836034007,271299.9232790347
116772,106618.77908426497,129077.90193468911,327528.9218492983
116777,510597.7378630341,1764137.6742197024,3404816.662018564
116779,14698.937428231015,52851.30685875353,90131.66949666454
116787,33086.40089183318,48913.03048151301,117649.59139161128
116791,590258.822303472,940905.8296752227,2190927.671559562
116795,132235.38697055329,434318.91212116415,812717.7567507646
116818,318693.09945602255,593092.2128524566,1286086.5348658052
116819,35129.44946668679,61677.67334875237,138173.06901593663
116822,670969.7730583221,1779233.174600565,3508217.01642977
116829,17318.8049066899,25097.51203703379,57812.020575540875
116833,6223.716220126347,15243.768673756695,29856.158065777938
116839,17122.014874623368,40117.50624345156,79559.34081578741
116852,24839.24237982584,58448.85128731359,118476.72884107527
116859,209291.01376820842,934510.064461999,1679890.8943574529
116889,66940.90277353127,121889.5580764691,266760.4718481568
116897,388707.46637194796,924233.2701573279,1889594.851383616
116934,79553.60793525675,156448.94223481786,337756.20761691383
116954,59020.17959260583,284020.8991269446,485875.28063393896
116956,60174.385286033765,104618.31541290303,228479.14344194866
116964,55608.77679775217,84344.49620637631,194047.66974549124
116971,34793.35472102881,60506.235801365314,130831.40747519484
116979,11777.31759403369,54405.842929464925,91455.0462852334
116981,60549.50398602005,112366.9107963853,239153.84066581755
116984,271219.12173825584,455931.60754882125,1009780.3284019771
116986,5171.623317197125,8148.042768961046,17709.170070347594
116992,74986.7071588967,189909.4328474711,355430.14597458916
117001,44854.99776889046,70859.85918706722,160680.15751939637
117002,443665.9911955773,1053422.572479336,2135269.939899598
117015,104694.48374416957,147596.23086482394,357237.3147466306
117032,58666.149875999785,221062.7546577375,395486.76836916944
117038,110779.42764962783,242791.87579491243,491878.1161161815
117049,76911.50343570368,264770.6377349372,480752.81140496966
117082,16100.568667835145,53343.16271175121,94491.02082878808
117106,185215.75552019602,355772.7064474518,763645.4827600489
117107,1736912.7313835612,2029496.4819990753,5348371.295166626
117120,89137.96256044722,104899.89195039764,273394.42952482525
117121,365973.2496739139,694061.2572720222,1525308.0333944117
117133,29803.524484309437,71842.57287624828,137706.8730618843
117139,126781.8898176475,444370.4921202184,829692.5752151457
117152,21433.066126869388,56568.652235455724,108966.27299657962
117160,76186.4633797337,125279.50071662263,273755.1756086529
117162,75020.98822328202,133259.50089599704,284193.8288648797
117165,30387.459332615235,79128.34576218882,150441.94247366043
117169,98938.3951626843,283065.7199380915,544498.0824795107
117173,11273.565145058408,51388.03221111995,88213.1684572451
117177,232538.46661971658,495285.2912755972,1080777.5112346914
117180,68110.987724869,119773.03217950574,267863.18537858233
117218,1696000.4022639082,5144079.38574241,9749378.278650515
117229,41943.84458559717,100211.04296007445,194967.12404501054
117230,262644.0121355028,551528.1672894829,1170564.3983383803
117256,38322.169799763884,73050.78695285427,156987.06137942517
117266,2882.21203707536,15265.604774692285,25555.732964951603
117273,313654.703255574,752040.2052551426,1483015.2884071027
117274,4853384.7732268935,5761354.77727558,15365716.364577249
117280,30210.124495848315,95099.84419042205,177419.82081175383
117287,148492.80500616843,435126.0826222068,829860.737047083
117310,169920.40241110467,517495.73407066625,973887.7717887915
117332,399225.8328745774,889590.1952697025,1810001.4924533723
117357,22915.68887825649,49321.05716951146,99275.27668532298
117373,11708.465550381017,22825.19216915753,47702.01868219522
117379,436473.1898028604,748288.3634910473,1682191.7876417253
117384,95087.10359094322,89548.45700495713,260073.90005842404
117413,4995.346083310625,23331.317590050283,40750.92506630502
117418,244981.24240824874,287537.53906896594,737445.236483708
117429,12881.224073877494,18473.543509882496,43546.044406896566
117431,429934.6262301503,529191.916354316,1325183.8571913086
117436,81580.81826462265,164028.8788774144,342670.05485855194
117466,236409.9493985797,538049.5862703361,1094220.3824477862
117467,580710.1432162867,1357448.9845894428,2694671.952589077
117473,89068.12974367409,88827.92846923908,258762.37112286867
117477,363533.97383919556,653898.1365380927,1453454.5022664892
117490,20156.315593055006,37685.745147950096,80807.83962977
117504,800911.7658935612,1966867.8194112196,4039079.30820382
117516,58013.3177657294,255440.41466495843,449490.0153081092
117521,41345.12384090319,142200.2224063985,261064.78827961427
117546,163938.02458102859,490402.3467529736,919900.8987997189
117554,48517.61757264195,159811.07993908483,309634.8739796326
117573,12154.293368785568,32341.493609912202,61737.85231930211
117577,42922.62275191272,102875.08132426105,204988.71589054097
117578,285355.16038231004,867588.470042805,1653762.1399154738
117583,17876.095515814628,58976.63249869335,107810.06513064173
117586,37958.13033879376,85424.2814013058,168205.14661796682
117589,18585.35678214513,55059.29401981546,102837.73300327036
117592,20351.657863293192,30505.25210154354,70097.22624757326
117597,439956.23338198185,768205.386083217,1780338.5666163615
117605,219508.5157720938,470867.1549014672,966692.9061572503
117623,38216.45134960121,142319.4084577111,259070.63582213057
117640,1425989.9957638604,4300600.316256196,8253709.058079285
117657,1371495.0473258952,3023736.6206714837,6317583.134163052
117661,10870.619170547374,60932.42479384507,99701.85879521981
117678,18441.418537374655,63136.18981903298,113371.87993218206
117679,397762.97837151034,557122.6755702489,1320103.6218367307
117723,75135.01569435754,72567.52241891973,213035.49686817115
117742,586282.813795793,1362803.0795676135,2824595.3327109087
117749,140069.4539071428,449098.0525789808,849832.4712275486
117750,12862.958841094698,53427.092973836654,92751.16289932482
117751,19342.18737186315,84884.29303844772,145266.1565703479
117775,56219.412958828114,93872.22878907245,210687.07627494945
117777,677415.4964568692,1439888.171380253,2963700.02684121
117783,267938.1702652004,834008.9474991813,1561565.4682642263
117793,21404.44708724475,41239.43050599685,86105.76395157329
117796,30472.812082281118,87585.79058392016,160605.52660644328
117803,47228.47651554851,118391.47027527817,221632.8446839715
117815,27552.053797741944,160657.6555065257,260905.48479766506
117837,96747.70477615381,107587.22374189722,297886.6719248288
117858,56681.640262237015,105133.34839212781,224880.44635631845
117870,161761.30325061668,505407.14088883204,965423.8873744224
117881,7551.533082302644,24966.924716541314,46521.19012056131
117890,9948.513629963709,29604.28241383054,54124.317132959026
117922,66282.05478101327,175526.35201043272,332025.38535995653
117923,73330.61787650193,263287.58827281883,462037.53391116986
117927,67335.46771664143,98360.8011062968,233382.48071660488
117940,16857.823399337107,68130.22236448222,118539.42835816598
117950,6974.387344477821,30425.758073283887,52605.798617119144
117967,271231.83189390437,641642.9957344395,1292180.7380973762
117982,5006284.082231659,5545188.508781849,15548128.282174602
117992,161170.3371383797,369798.55755390076,741469.0276157964
117993,14200.288950174547,86517.99273065866,141383.2930743175
117998,41748.026168806755,128275.96771651834,252348.5639541351
118008,392585.17779567285,309747.68825004285,936564.2952037529
118010,281803.7715061732,526001.264879802,1121609.7961090554
118023,27987.853626758966,121134.76626129904,206291.06421464897
118028,276553.7278961778,937796.4120157377,1733597.0182947498
118033,44184.8408761242,107894.46169673586,212791.82614828623
118034,27446.892151062133,48006.86651174356,106441.56749358294
118039,14771.045525614962,26725.33044509841,57385.162030459935
118040,72708.95782731057,146276.4668271805,302067.9075302768
118046,43120.21735966017,84822.68467377541,175238.32261793833
118067,56153.57024537039,142008.5005077422,279831.7251264164
118085,18560.633438533452,48484.327035602306,91004.36048638247
118104,29151.464603895885,69442.13914878838,136672.57202663523
118125,805863.3137711863,664926.3840360285,2095812.5608624152
118127,13040.25155673423,50545.77626593649,87673.45874503386
118129,32175.601080471573,75355.18404608566,149416.60104126867
118146,62651.65697629009,77170.36948235832,196463.80737656797
118156,19567.04469180988,39819.83758117648,81777.69400824267
118158,25841.96878943311,62850.83761426964,124794.77899401015
118163,45870.64045632698,73483.00956223598,166075.09681877494
118175,39838.71791626817,102288.03711200548,204867.2431737536
118220,152351.5229827428,264969.76067208336,570399.6128240363
118247,496158.3801261639,622931.740005816,1626682.1858435175
118256,23190.23094085263,69743.31902996374,128814.82467826353
118261,101409.60464489584,222401.80588559745,468701.1969089339
118274,15907.058841302078,49117.967335602334,92359.57773608767
118282,195460.8391666715,522779.8381159753,1029236.4016394857
118293,109482.66346609924,123661.03134028357,319460.14436956815
118307,347201.2194628429,956478.7166595679,1864980.8365874756
118329,1503686.8876232735,2558877.5000783186,5768016.326334888
118337,571489.2300695239,2242008.3949313117,3930709.5597648164
118340,172815.5043432494,188769.15277444865,507793.9250269141
118345,66181.23886017223,255721.511968315,446487.8510052461
118346,28234.847006337503,100763.42253942453,174511.77355156335
118353,15899.860175865728,29100.78300460779,61633.80732414109
118354,7042.50308697354,25858.04480748868,46458.859500104525
118356,90339.8765320416,154322.44545892437,339367.98441406386
118379,29317.809612648496,36241.060982897696,92307.94761973873
118380,757812.4906955119,1019139.576359531,2531339.754808139
118381,27360.01094569765,40173.360062364125,96311.58517122692
118421,7512.9346499929725,35795.77923660132,60201.88436879067
118434,59251.51882458163,243615.55685654507,471390.4544762042
118449,1788965.2054079534,5023531.608705243,9863616.27865926
118454,60267.73886984578,127563.49228677627,256676.52392278647
118459,63762.51193195763,98781.44572794672,225543.61795332836
118464,927948.3011513151,2362434.207933617,4638600.755709934
118472,9912.288397366556,23980.615792403267,46270.09947823512
118482,60901.78634587283,156688.52046194984,320442.4153026387
118484,1063058.3502620563,3916979.757806301,7098353.767228568
118485,39046.16831204058,88863.68385244168,176300.00204568915
118514,608753.9083700327,1413226.3192831264,2861527.1962763458
118517,87483.52277148006,191528.1363516509,388540.26036133035
118525,37828.03076662539,86886.1955503889,174733.97611935547
118526,3031594.2980380454,3970553.426734645,10005861.370692682
118533,10357.802184065908,19312.00205716737,42184.94990141653
118554,32335.022094689753,114494.51353474482,205291.20034189348
118576,90901.57173256538,118233.40012854003,302940.9905455819
118579,94794.07149314471,170876.97158878247,369733.1976234688
118591,143338.7016348781,208794.40072075513,503935.78511535865
118594,42742.27466135858,105364.3235145258,205174.68628997117
118596,52228.40990258647,93157.4747643562,200151.29584783793
118604,18017.122301639298,72972.6542819641,121301.48978653864
118610,108974.98290331791,230625.79157228384,483302.8073292209
118619,1144891.712204565,3256240.833990283,6744903.350162538
118636,648698.7495324628,1017814.8166446739,2368105.8085631654
118642,6908.406913798848,26404.692420973908,47695.45549943327
118648,85211.252030183,130211.2429095481,294559.5597355692
118653,52704.62348734502,193780.20651717426,372235.5824452322
118657,23714.333598507343,47450.376965807896,98799.65045945937
118661,40103.89176361155,100417.40539552543,201531.8610958457
118666,34676.10232335244,72909.69578416168,148786.1656565215
118676,1228165.2178207058,1083495.5433610987,3256528.9416514765
118698,14270.02422418485,16943.70397398627,42945.32022419589
118709,158848.1030523681,333198.8783627741,672457.2881954534
118718,5215.11018512159,29511.940891723803,49886.84121293235
118727,9726.525425431286,23839.104243534173,45809.28719486023
118733,5570.295339637193,11367.214764887483,23493.114348399606
118736,712394.3367366878,1315731.4243346553,3026388.870400222
118739,332060.58023770165,923683.7152767262,1802215.7445220305
118740,10239.101599072961,23724.04104100477,47312.442008166
118770,61459.23910722583,176019.4549899948,322894.4924864864
118818,8242100.543649058,8829594.477438148,24076595.95737516
118820,14865.124482073506,28315.856282099277,59686.82662777293
118821,1681454.2585815443,2466525.2638067105,6016921.740652664
118829,406236.02968110365,852974.1137028985,1739365.0649944227
118839,6071.548306767515,20697.244268979448,37902.91782281028
118845,1086699.7736115109,2935655.9649618855,5730302.0456201695
118846,6976.767418635654,31141.230395868628,53164.15513259257
118850,15532.557681839111,56546.68260914167,102090.9596060857
118859,34950.979873334676,54459.78213364413,122569.42708530501
118865,168422.67411111068,662899.9203549568,1216356.1201102831
118872,578440.7555808364,1035679.7449182771,2268231.830066246
118919,41485.362318841646,45732.069799917575,122902.75078961466
118927,38720.02489491079,97012.22627543742,194530.48649930992
118931,36620.447876769074,106943.77085578423,203034.73104584333
118940,63787.70933460406,231353.77910939595,427513.2311801486
118942,25415.686298020577,84330.18698647857,158426.17066918346
118975,19073.606955986947,70050.22663961616,124472.96853439433
118976,69269.28527377716,261039.95679334053,457384.61793123203
118977,286569.7488286942,672265.331256681,1362307.1204512045
118981,23634.203238831746,108630.89600466486,188405.12122794575
119034,24822.423878815094,43971.553995953516,97836.93172164154
119039,9294.76679862474,14518.25542210734,33761.71776657118
119048,42663.18824875375,77073.51606714613,163926.55792988912
119055,53494.45878759924,169789.60555044285,309231.1888900599
119059,42879.942986047856,88677.84694197783,179087.8486449669
119060,49732.970015102175,96435.33892019362,199475.85166915716
119067,39019.49769127023,61110.65622631788,138698.08912133973
119068,17110.202528468824,40699.31394203821,78611.61646616578
119078,336273.1607606859,1030903.0095016249,2004330.8792193239
119105,77367.88915977236,109839.75555723038,266516.86558946164
119121,18830.701603108708,64118.268281530705,117775.17343866029
119135,13301.185443059796,54403.84288683167,92916.26111016601
119137,10014.366041506768,53176.90618327603,88832.43504892144
119152,41554.675328024,83841.77396953589,178173.78148139897
119172,139088.41533823454,433142.7169656851,842223.9334755093
119177,51629.335907158005,103217.657853048,212311.12902982038
119187,1414206.9147511774,3581405.213775077,7219799.556100465
119195,14235.820459181048,22838.54992102209,51443.25248223639
119202,457084.71727260516,462718.3853929506,1309201.1412337148
119204,107474.2311144864,100077.62186285776,303676.9213505285
119210,985484.9112422955,2728737.3555630525,5169007.067843007
119212,70973.9170974022,141623.97214604277,303226.5164050085
119214,123098.53386327933,367556.1877000671,730647.2580394843
119226,21693.661469620998,43490.58513285947,90883.02059952787
119237,22374.12091720363,60191.117892365466,112857.9749083678
119273,52676.47989069812,90575.14155813759,197612.96296539705
119275,1845264.1325190791,2500577.9852800504,6227518.938498687
119298,3157317.2356132767,3450964.1131362515,9732375.168295842
119305,53744.38874561677,58664.0816823926,160558.4365641821
119310,14431.432431233281,26738.188015007345,57796.82189595264
119333,84291.27108766697,271304.3664012891,494825.5731309134
119353,43419.06116747588,51872.66384212729,134302.53811049453
119359,91606.35187045537,160480.32260782737,351334.13071868254
119360,4213.9771293893045,20284.333561244606,34796.376459569554
119361,307279.43074703787,438600.94168951595,1086532.3450191263
119395,58888.61757445448,92632.39330305682,214134.1179826397
119408,46720.79092268051,123797.45385264653,241428.55534570868
119418,291395.54682400357,938284.6857762533,1730370.2558939233
119435,698988.5426357188,1524477.2910917571,3161530.8638870106
119446,25150.814169741843,73636.77070099708,136690.61146563405
119449,90646.5636026015,214799.71196021663,429808.071467252
119452,43200.91951622735,80473.35364472707,173666.611750293
119473,23065.177114393435,38160.157271873475,85365.80491589083
119474,358974.5170639174,918403.7564843879,1838730.2085679478
119476,4497.760175108449,16829.95690150579,30482.444021281415
119477,6960.2495647367095,22653.63359983634,40958.3123146179
119491,458795.79298320983,1591981.8358742418,2808035.3571961103
119498,163758.59167253837,428876.6850989738,825683.4058780469
119505,603705.2479142292,576523.7973993687,1682642.5019746362
119512,693330.2713795218,1795932.3941945834,3563144.647989953
119531,27958.65830284809,91117.4369432949,172035.525957215
119532,135972.9781475961,337995.68901383516,680816.8238984684
119543,1412846.7486691365,2528174.1930014864,5750055.71335779
119549,3634970.0491938917,2313264.249133639,8150066.238237847
119561,366072.7818397998,647281.6005993868,1392279.1521506272
119569,644678.9562859199,1792768.5208293796,3568248.0354792876
119584,79976.2985765985,162621.24409223607,341107.09345143137
119586,873303.3412292475,1580150.3760859368,3545771.3112095743
119593,13348.980264937181,41623.596044656595,79046.74669849288
119611,68474.48433818022,125495.87134124832,270001.5873670937
119614,372404.9744534981,780615.8483253628,1645822.5331085161
119616,1773520.5901285498,3063144.8505715583,6910456.45258175
119619,314558.0019703788,413578.7725615556,1024156.3399137283
119623,158793.67635771743,516180.34355887177,926184.5005723605
119627,226944.84732726778,541723.4091301021,1080578.2583942316
119629,333854.43074059946,571366.9162658892,1270695.7517559486
119630,375597.0303446304,579609.9847685891,1328321.071927453
119643,691641.0805283712,1844934.493473471,3611928.4470249107
119650,347027.5933574433,655052.0463380411,1419912.4376055533
119651,16331.535764000362,52154.11528694555,97445.51113549361
119655,513615.6834166381,1200161.0682484733,2451353.496249599
119665,191226.85258929856,279913.4727739228,665533.5022894773
119672,27266.6447499634,79201.97676401219,158337.31423273223
119673,221309.56227211325,446028.24079706345,986936.9357724495
119676,205924.57962340003,634054.4960893767,1242867.6849238402
119677,6419.147012139234,16881.512796008526,32920.28234782057
119678,222111.7340152119,451203.31799629156,928229.2146070891
119682,17009.754556446416,40721.55338735328,80235.34498587438
119697,411611.0312212292,1607326.2325548925,2819182.773783819
119709,49281.83482995964,164659.87918825724,301179.2866683117
119712,30659.705592807702,67129.57360798401,134937.56025543832
119729,313204.2574904174,491091.0096335559,1135806.5036238758
119731,24730.140021212184,69142.23136153795,128226.88693350194
119733,96568.19154059351,325497.6925430901,589088.2052005328
119748,287005.79661396553,594633.8534307532,1235041.4850446847
119760,94152.57542559659,228479.9323339843,445191.6737300495
119763,32417.54369226322,76188.42694970718,150663.57211149653
119766,12349.598453835959,46258.61735903757,79059.4579671466
119787,10358.89766533901,65768.16851468945,106019.63566763689
119789,278680.0137965755,916638.9588338481,1612303.8843192672
119795,123848.5614177686,136582.74314708175,364581.4989894682
119811,2192881.0682082805,3509220.2927232236,7840566.006514523
119813,3096384.4206636595,3023668.829656366,9111127.262139756
119817,290212.04595571116,900166.8377626546,1678140.4229514194
119820,190724.04081272578,443363.4891214761,885668.8271289143
119825,23959.812829701455,52737.15910126784,107940.73758481035
119835,20283.329237123693,35742.72398191002,79089.00004842327
119840,21782.408757950077,28052.28196150814,70095.21640249016
119858,19790.89474711518,27730.75570508562,64282.03136055862
119876,30014.068274703717,92537.51009096373,165857.15577845054
119892,67519.01511882036,125128.57553196409,258614.1531847007
119893,57931.52319537348,151931.5882826479,292604.74341664824
119919,53788.611481058746,108292.0557608085,231016.77329284872
119928,34955.247511389476,97043.07865714074,180121.62004458363
119940,20813.294246536894,77123.75011634802,137733.28015067684
119963,83925.84075266881,158745.99717071952,336955.53413807915
119968,32519.433805360597,84072.43364975724,160792.87961156998
119969,3811.1883230054464,21400.03362568015,35953.57498623378
119975,27443.32038634672,52795.225918790224,107685.89962614252
119994,54051.15241082046,98576.23048564991,215374.65348188917
119997,31883.535753967433,82126.46873612827,156019.01718716003
120000,31785.104540788532,51536.12085147938,114796.1229406682
120005,125289.16123995498,369839.3139642939,712916.0111372669
120009,322665.1741460468,253008.6932456189,828634.5866351423
120011,34808.222258381014,102042.80237234618,191165.7266062617
120012,3977048.1382103865,4117596.4985265746,11114620.410301788
120019,40700.35892331102,57886.79584169908,134030.93264384146
120051,30712.77905161411,76798.00153468178,151633.42656808335
120053,615584.5066770063,1461890.5149395866,3033381.392612338
120054,73027.33007398571,204996.01931970817,382426.4338084245
120062,43212.705448820896,69066.10593246706,156143.38979694125
120077,232411.01333496187,427738.14069708576,917144.1894426208
120078,418491.33361760963,538726.3510137709,1382753.5018424
120094,89428.95535597451,93624.22782931132,254186.6481303476
120112,49044.46881748361,117462.88275649426,225915.70466960347
120116,251208.72462741853,494514.3254182089,1058210.2879731902
120127,995618.6310892544,2334651.879124587,5046321.087582439
120134,7300.541959934777,20975.982191683685,40637.33108015875
120145,273802.3256356762,639647.6157122902,1279249.6041415136
120162,33410.490133286155,113320.04239227888,202504.09296679532
120169,114771.09726215359,229183.78130488054,480110.0499632441
120170,92272.65572876776,92806.60611825211,263151.86104440235
120175,20075.11542493879,52077.9001422543,101502.6101046777
120188,16734.397706478605,40476.3030249313,80587.05154380883
120195,266967.68538958416,550597.8583073446,1165671.4831942334
120204,69088.29556374099,243351.8114604967,434485.74005231576
120207,81193.38397879469,139381.8130895358,306721.5606094892
120232,584813.2835002627,2357290.109467329,4270557.058215292
120236,24383.025901110454,56620.84695942119,115396.4891305994
120241,43650.14589718192,94817.88964625982,196341.65854980715
120259,23747.965231579397,48699.11970486398,100150.33206109138
120260,17763.301165549485,41952.628235995704,84218.82234739847
120280,73013.20194578743,188941.39289253758,361778.585768923
120282,17832.467825360407,40198.75285451988,78601.09873119686
120291,41135.51018092782,76751.46364971889,166264.52739236155
120293,428768.95399744145,750747.9807504322,1689362.0194921056
120306,436314.79918163334,467323.7177695596,1260057.9246726208
120347,4541.61765803043,20525.622086173684,35870.223741375085
120356,5978.538515534582,17885.246961361645,33225.450984212686
120358,705970.711191042,910940.0256063105,2276119.3419539034
120376,12937.066096320403,38770.498582065055,73129.48807815564
120385,44827.94308749061,79838.09742976663,174402.78772177984
120400,18646.073035925183,52121.46442842043,100355.15337005854
120405,112941.42248626532,295615.27396168053,579760.6090940554
120416,17408.227973037654,26513.74441510092,59708.835723770164
120423,86771.67414679358,146967.2067629914,328538.5379273278
120432,106034.79442790797,120577.03055635167,317882.5148454417
120439,22400.24986335348,84943.13642240438,147636.53918250336
120457,172092.27130872483,451078.30327235523,889567.8147807815
120463,60868.61136581419,154046.04111189308,309186.19202053174
120468,128851.30814892412,258310.8860532187,543130.8894768077
120491,6176.792819872522,24357.33288321203,42771.22783063559
120497,78926.04650887095,224301.8483805028,420235.3278344365
120505,516398.48241827334,802104.3213008357,1924880.2028773753
120519,320579.3584443663,813081.3932024629,1642477.1115619931
120531,11324.139469378644,38942.54426911911,69694.52977399927
120533,27646.37578787039,133987.5665697706,229794.67850183515
120536,81898.09892975165,148112.3972913163,322478.67107496865
120543,8281.01533124414,68970.45218797184,106983.92977974119
120554,151444.57018132135,309232.0975532367,670657.7753961222
120559,45001.66582960176,117314.23001122136,225002.90237912937
120572,54877.14291201224,108937.84604677658,230080.86753022537
120589,688194.105709531,2028600.5644309314,3973782.6051139394
120594,47894.83499498869,110703.23667894847,219370.54146979726
120604,4125077.000823737,5881874.768551871,13825216.590496399
120605,3935356.5499479985,7157388.665087123,15525690.72303461
120622,511078.9976555785,431124.6000493323,1368038.9328595619
120625,9689.470845460912,21935.69943778982,44228.022458361724
120626,273581.3043221118,518126.51596218377,1208623.5224256413
120641,18499.043914736314,53917.87575476884,101749.7837041977
120650,62096.28178946365,213569.72919398945,389206.92386613257
120653,115364.50901445247,225612.76211368982,483088.04286456027
120677,11215.947014479572,42839.738981096605,76555.78497851019
120682,856190.329581329,743694.8596017831,2259086.4211058207
120688,29907.536273629597,89512.99010316233,168474.9638819571
120693,20691.22542634982,119533.49868672615,197067.69312279677
120694,97172.63970974881,191616.27630261972,399284.64542949287
120695,48822.15389547036,159036.5105115691,293716.5123476049
120700,104822.89609040217,175299.18343623498,380495.0549824524
120711,402739.5055119016,1325656.6951408416,2428084.1400755667
120729,9401.21496087133,37540.381997962795,66831.32232062574
120743,476475.8638956163,451330.3027469464,1334255.0899476046
120765,14360.652567946974,43618.15537159933,81608.45898332848
120766,56157.97641570163,183825.69598829834,328865.8309673909
120768,29456.81502231525,116769.88591856367,210422.0960491583
120792,28339.78621725597,106090.25070875515,190244.8803674428
120797,41101.46433091583,75914.03008570232,162955.1500921655
120804,100428.0880149833,163369.9459089519,374057.04298015137
120809,11288.896089106142,38917.07921259075,71080.0457630016
120831,14417.58369777078,56803.72809568443,100834.96751312044
120836,269094.37448379345,489257.47010418976,1062462.8737854906
120846,25730.339869628104,52890.52445764077,110291.55290906779
120855,57910.699443056845,112401.53793053947,234845.750348421
120859,202468.7274894278,272722.4003704954,666793.6161201051
120894,99285.28522167078,240029.43186908984,466248.9253526672
120910,62574.53554133475,207467.45848874783,386369.388345108
120923,50876.70639865878,114115.67401767315,226789.50220359437
120925,99961.01430277461,224398.1467682371,450803.31063309143
120928,24133.67822204774,63697.56339826902,121701.12208470746
120929,1716814.4595135113,6446686.749749257,11845063.158158176
120934,16718.36031794079,50600.65398744241,89820.98504944748
120947,750433.5776405917,974666.6123765846,2521685.3693608386
================================================
FILE: data/month_loadshape.csv
================================================
id,1,2,3,4,5,6,7,8,9,10,11,12
108585,178.96607321422954,156.2157615515202,109.81367662374429,96.78573476528025,63.69382278253658,65.04275238545634,53.43386545628892,56.690940887562434,63.39514100167378,61.0215462299067,120.66127955775407,126.63265024304529
108587,45.26015310479342,35.81842707333236,25.759601879539815,19.360345079301688,7.464581094642364,8.987339995038587,9.260272346848954,9.491315130413001,8.319603079937785,10.691725291766012,26.97049369197886,29.067160705115022
108596,15.892253754250216,13.022825847897925,9.631313194707861,8.563864824918113,3.4799873024671144,2.9106983768529386,3.5674868268306175,3.658949657810009,3.0438900169364955,4.082820165350333,9.667833103480646,10.205378907379709
108597,15.427013673706822,13.130643792476492,9.659251213328709,8.427097808154256,4.086910875966775,4.114092566892657,4.542721759393891,4.6281731083476245,4.0770022321923785,4.8902039763390155,10.25387612696432,10.556433724630283
108603,249.681020822873,214.8480189626379,157.241478201407,143.01226624289558,100.35588641574111,102.994771658663,116.55260360667859,117.12868174933817,98.16387160681766,107.09670912269227,176.87412751707294,182.26114624335202
108651,130.83588840801025,101.25703430795514,65.65553949535212,61.52439805062091,44.04467598827515,44.74636124976597,51.86710026713611,51.1586779538316,41.61520647782832,41.923475287929456,79.1953075414117,79.13530569251535
108652,543.7675219285371,453.59574953112417,325.8701489480818,279.66237711394666,175.8507836041784,169.67677744268622,172.78435289726707,172.00641330049183,172.75509276674606,193.570755206167,377.5469137497105,378.79258195050414
108655,69.87420629574278,57.50177605566508,39.36673767106564,37.90632996884626,34.002568972143095,35.31714254782649,39.863896654603174,39.64347316497806,33.26575024307318,30.748488575442146,45.92868371501271,46.75584738189856
108657,41.968679388483494,29.74165909666744,23.79534588739902,21.238904110310607,21.683511839339154,21.98169742273194,22.029826502695826,22.797852183810832,21.158416092164426,19.739587845478674,24.575532654946265,25.08530556001923
108686,45.07142291752183,30.388696810574807,22.810471445327885,16.272581896298867,9.469338469573454,10.472118285313314,10.486878589089947,10.879957174917042,9.772168206158796,9.159255911586357,21.807181313506327,24.099834853297164
108693,13.251558189518068,11.434878859969249,7.267053363527069,6.786008690026881,4.98181391310713,5.435615594136687,5.95197853572163,6.011706815582664,5.130512268865592,4.799844697254966,8.228486504612924,8.392147768066339
108704,46.452053769008074,39.23003738480325,28.25582099716143,26.175950097927288,18.36283427233849,19.174664232153834,20.419747794549803,20.73467365331337,18.340413838054566,18.818183671089436,31.3060532455212,31.762400784901377
108710,41.432275761567894,34.75547796565035,26.21300098209253,23.554831973463028,13.953079488505422,14.193945667730341,15.578649102864446,15.856769904005677,13.94799066014542,14.82604854213329,27.181258107049533,28.314636357070707
108755,5.022839793522658,4.15694482982086,3.4438346010010537,2.7868727591592357,1.3482466004029847,1.5151347320139485,1.5884384653106964,1.597466156476849,1.5524787626508019,1.6852896660634793,3.1439241959599986,3.3593216396753562
108762,41.959829376724855,36.87353133581682,27.852005152197684,23.832109413906437,10.357396516557055,8.873309364191543,10.519274176431058,10.490470953162797,9.131418212372948,13.225219761956927,29.10089241147699,31.163627708060098
108774,42.37359919343361,37.365416922268935,29.59799556805179,25.11668033726992,13.200847352799162,12.949570336740834,14.346157918566359,14.570654945912722,12.869572708313493,14.898138388119982,28.88486864219093,30.893524195522357
108775,43.21790228006449,35.81638541577673,25.120609101877623,24.567792126153595,21.40745382294679,22.027424680442863,24.084467284789568,24.406121112472626,21.3871169154993,20.672745627374592,28.517886507473502,29.0392372649811
108789,227.00097826385866,184.99142716712657,148.3303319062691,126.86655722412495,157.76723988692763,159.04747405195664,129.5057810699606,132.34361173901138,151.61278340323022,143.08508413375174,167.34210364723043,168.06057728917347
108791,38.821696363020386,31.65356541286105,22.35410641883391,18.81939243988925,6.177445495835048,5.724945033883314,7.342751990164167,7.431478362370447,5.8724993960852965,8.416987874735282,22.871260024968038,24.546300764705563
108794,28.31487436469394,23.97551660046474,16.76663357039204,13.721816823589949,7.5026457527699035,8.342580254525823,8.409529637804162,8.607560908806331,7.592090377931859,7.975575987867535,17.852183992189588,18.36851779710743
108802,341.88704043471904,256.5887242200901,214.98361560951017,167.32518467955572,158.77761219827505,172.08874307764484,134.9571828095784,129.24931487120327,158.5287837443021,170.85249015491408,249.57952949567638,243.50409008905183
108813,822.4007690957357,744.4094962163736,565.5114971624004,506.59608164290336,273.50290946498336,263.4127880003464,207.43077568210222,207.7904354966048,263.3504406004495,360.2312334137273,627.6964250438074,624.3948719553221
108819,12.315276260195898,9.051160421375798,6.7645711600857865,5.191508534917699,3.733364252985234,4.130625112308846,4.227008046795126,4.200734165173223,3.9293083437823575,3.6024462996032702,7.123492668841995,7.385308128600682
108826,61.4265938438641,52.58548323961705,38.88442184092506,34.009383211965634,13.836847060330483,12.509265519409192,13.40776744996435,13.761811581893541,12.493907466561556,19.923919408157104,41.09586496437113,42.596176245304214
108838,289.8684735127909,238.15392394415292,170.59681265887696,154.7065209261971,92.16881149763988,94.52638788693395,108.79054136161841,105.88559645262696,91.80120549176243,104.41020780191563,198.11085224800237,203.73078526760125
108841,93.57794216267217,78.65157855374726,49.18364943192709,44.218123905758,22.54355153338599,24.496513112414625,26.07629717019728,26.296482040801983,22.81179569453296,25.807792586548345,55.59616414042189,57.111466910562044
108845,21.275937171369304,18.793447301942056,13.977816218081614,12.667539604292637,5.862147622717496,5.619057175355693,5.983157905737322,6.081693598861576,5.6293753562790645,7.904824046236533,14.811721284849973,15.159009760413552
108860,46.91003621408396,40.382784019805484,30.341451782907708,24.46137729265566,8.949498173795627,9.737946504422762,10.063112213510783,9.952051787780166,8.940531551543213,12.056700299640243,30.035742197780866,30.142766830329535
108880,70.1380750417333,54.387774352186746,37.49907574568266,35.400053473037126,26.348640704190696,26.81568685817371,29.121751457966912,29.98739803634775,25.852218289022883,26.179348541140044,40.82516193029071,40.3050651959515
108881,202.97786869871143,175.92000253407028,123.76160058710506,112.083347900251,98.41820849936553,107.9809423194591,115.5556499167397,115.75574855177831,102.24520720713089,91.70856134843336,137.29871821467802,146.19760807302916
108894,929.3883085640599,837.3727864649109,752.7055767443018,684.6827903239482,370.5156069464358,341.76962751735584,320.93168490290225,341.45645586777994,356.566281310237,520.7021608460298,751.100000564676,725.3769686047575
108900,31.748749744794946,28.095111728871384,22.801166780235587,19.099228910397873,7.684404778134029,6.014029078706148,7.208222156848042,7.4698551790458225,6.319690968730774,8.674305748677892,20.581938232964315,22.48906987350079
108909,49.4876913230803,41.9182237672553,30.007523169870105,30.361763981029547,29.199909945720176,29.68605459017065,32.19120325846197,32.52117612853163,28.624752247787196,27.389983188826374,33.99600289652981,34.519738764191096
108910,67.54564726573719,53.09973363829653,32.09370785088437,31.291281112031857,30.451497768518923,32.138635062644944,33.92228550892898,33.96143412394171,30.549216569381006,25.489764158624766,37.95665837606838,40.58771226648184
108918,423.8229043396233,368.47122733912846,265.51904130246936,249.2297926043129,212.65454083778843,222.61264680969413,223.6660442360941,225.44653793622211,214.27483707399966,223.63662177227377,307.6084583402569,313.70943688053086
108935,206.9996979192357,142.20603558014844,106.21314578679437,79.14240028627698,65.4558789822619,75.7283697060417,67.77128958372792,65.59493134660724,65.32686818727073,63.11827044329758,129.32736217070197,128.22266791733773
108936,131.1945784928851,95.46011909359184,60.286272875068576,43.438476020615596,15.224609251971653,18.770841846009244,19.090472167707787,19.391762508082746,16.089348994754996,21.909518363587246,68.37222343241638,72.02944296750482
108971,608.6053912894009,453.2940727124098,366.790015103764,287.75179083280904,189.7924346629373,208.8236290438621,192.68132719959027,190.38855385690113,195.06037226702745,239.03451899989628,427.1418439863816,440.1583727189356
108977,40.23490481553482,34.49234018044263,26.790956163202644,23.05668604924733,9.804531347374354,9.178078017326914,10.606683483235956,10.77480318151037,9.186952101966021,12.315862934675161,26.861059142294764,28.67800441082394
108986,111.5940288225223,100.06593726097357,80.61453481939533,71.90117171308312,47.52401461576482,45.22835062672804,43.217183092972,42.98157672451101,44.87721482545178,51.943115091423664,85.70567843944431,87.64352584130862
108995,35.01823224804117,28.53525626704645,20.01574512441656,19.462182643499222,17.587528911788578,18.56723863610576,20.59422344101644,20.820469986967765,18.282869946849242,16.50285670670446,23.31987655418737,23.76495769644171
109042,126.24729010636085,103.13390013862951,67.66167331927248,59.85671684334409,27.79887336707474,28.085582585178454,29.728857476144533,30.57650899106419,26.670081909354444,33.75060857541302,72.37055842847487,75.21989193615018
109045,6.981630922138259,6.016334496616799,4.315416015538102,4.423192695041058,3.836750674753954,4.239308293997808,5.372929864048441,5.398976948574024,4.449199422104603,3.3355931021746175,5.175580916271314,5.349429471066629
109071,179.42635057084627,164.23884788686726,126.6563845045771,104.00588199241047,51.65712961043103,50.19149536342755,45.920826148796806,46.33806809657614,49.015222120718775,71.39176774909049,140.20198055000353,140.17596233641646
109092,40.764093204063954,30.342106447971567,23.84956571811187,19.14685316735726,9.655261733005666,10.859308427040263,12.019599560287691,10.69568430834371,9.707986653574098,13.87277724003933,27.582552821670916,28.609066084520823
109095,27.1294733113215,22.543099431680993,16.266819565131865,14.852143371295709,11.67164718959367,12.646779168220547,14.243203898911894,14.503576452420177,12.571898032164958,10.928053498221212,17.000504294140473,18.066315418434613
109110,105.33124161519522,87.62324022263036,61.93106584059978,53.91167760013331,23.40197283224884,23.69491809940283,25.698245377784616,26.00673835884627,22.992554114410314,31.64185201244525,68.98196439045773,69.68280902249967
109115,1019.4354658037824,765.4742214350595,631.331848608608,480.9627911059916,255.28737262644458,268.361159847209,232.38655314896522,226.6913666816789,247.0680450208238,336.7114674531828,680.3389871464352,678.3012864466618
109116,241.96946875311355,191.20923193521654,123.93221179224078,105.01464816240413,93.02317906879325,102.97081382657575,85.97249814446046,87.31101706445536,92.8982745682886,74.61967016113198,141.85171945085128,155.34420012840354
109121,12.38391763353423,9.377734228432319,6.795933197645812,5.3964207118965675,4.3330792397063185,4.780924526452641,4.897888059697689,4.795512765634928,4.447279747046973,3.910604832742288,7.4416752829342965,7.838437187914891
109141,44.233454203349226,38.3309536035477,30.958861321200793,26.155286426241627,13.109061765580757,12.625275054311174,14.30554608858451,14.632432121003268,12.80370012393169,14.949122502715733,28.82161903261853,30.737070779091738
109146,1198.814440240996,982.8884696844015,675.880824299714,563.7031592964239,337.9643095465832,345.4956130131,330.61626452401185,328.5911898579386,342.05239418429505,395.99159511100623,784.4188850387508,821.958015010663
109147,1512.114384296411,1267.1556686157326,905.401681751937,806.6628942176804,632.4794616287669,630.8354701016231,567.6525269026912,597.1964126788088,622.6488979679993,648.5982080708786,1065.7487425724344,1082.2147984280625
109156,479.9394531695234,332.7510781499916,265.1747074087778,205.6552999887147,135.0393206692196,142.18755337277753,119.39531179764121,120.12490018692745,135.81854848115862,162.4703004816692,305.3200829834208,318.98563043801624
109157,19.19482954465636,16.24885006515705,11.1152796959126,9.805449925357001,3.5138578810234105,3.360373061378091,3.9670073866965176,4.104783246864928,3.4751334264024396,4.648064726078829,11.98327207804241,12.503211211934092
109164,21.410292799916434,15.06441925175937,10.88156301445294,9.755341729733512,8.58906692269508,9.89695330684497,10.171543279884176,9.911814168902213,8.986312423911896,8.016824448474132,12.58193881994804,11.757188311423091
109165,344.7565421444574,288.6247828784521,220.25325229303863,196.6071943514019,119.03489909001487,104.93947927624174,84.24304728390113,90.72801595902759,111.30211486586276,138.51606603510646,230.2173021968222,237.67873469565924
109191,32.15855399453603,26.41169752078135,21.375792331876557,17.556314922628516,10.37324290068966,11.382494513800765,11.189441773981967,11.58910783584722,10.734199404297412,11.646036649529833,22.04463092436284,23.52737687727525
109197,32.32332549134983,27.282809169591367,19.064245476499238,18.018324041634717,13.717990948320294,14.678111984276544,16.56156279357358,16.738933738654712,14.620597788430581,12.578319341625306,20.625710416117347,21.8412582461046
109204,762.0792192380007,662.8327120209343,507.2403183117557,477.4796630665131,468.0750081623933,492.8020944147596,496.15821027407475,497.78914808777165,465.8779600538877,435.001334801404,571.2932411269087,585.5982650386335
109223,172.0712538703042,148.51877319581757,135.7296009721906,119.07448865815044,98.14304936517651,105.14197733590889,107.28811396485709,105.69579451174592,101.551637720265,108.75952808831056,143.61079475700842,144.3219637061481
109227,9.84538577609473,8.106539911286852,5.917129523649598,5.190733276088817,1.5156790648657787,1.068900522637582,1.401869104875662,1.4900643583418658,1.2360853473229818,1.98254770014623,5.6936398213322015,6.086090210378659
109233,92.34308153760779,78.34450979714063,55.81099397043124,46.85875777383708,16.80319446616752,16.781474013283553,18.79442634039984,18.734941045028616,16.384541466363153,26.485572339223083,61.348728228071025,64.08182138240755
109239,241.8342376751688,219.33673687397342,155.9584673723448,135.909136538777,88.86151364118388,89.88101176624858,103.71563973494848,106.99888884630606,90.99980399696277,98.65751454029736,175.6571184310285,189.30345181556052
109272,36.08058319911061,29.946804252846164,19.80839563647121,18.02462141564175,5.329440817114314,5.260306031957895,5.683098588047012,5.863553617061324,5.248024488579078,8.98871601869586,22.11760281145389,21.696899681693928
109307,16.815630006237697,13.691909494224268,9.78480359271,8.754807603444826,3.662034117641264,3.5221473096782248,4.5509364052563726,4.634151486344946,3.722697670668581,4.032309547405957,10.148523646592652,10.678794781458262
109313,81.95738655803069,64.82718997837078,44.81160271374328,39.639118477773636,21.954256474965167,22.817729933285342,25.94396913505608,26.577116075228115,21.987170394255994,24.107660837232377,48.38026950089115,49.027873162021265
109315,50.941079870458395,41.51620402621311,28.884763595505465,26.424618368151652,14.183120208576394,14.516788227563067,16.402896312674528,16.285463221280384,14.20755390624153,15.616634090053964,34.753425961519625,35.608482244208304
109323,270.0490672199972,232.34636075671642,175.30150670540147,152.84512240562879,85.09793492965007,75.45275214295489,61.54956913264398,64.48846313966304,78.84258246342591,97.56196080090993,187.56613216557247,193.8332509507588
109339,51.01363061999207,35.4043099271529,28.507860993001152,21.74419903260909,13.432006909056646,14.90843856414479,14.801808802472625,15.486713016268801,14.015567108418749,15.021394075463563,27.85242296835013,29.637507901873338
109349,24.10918969444418,19.509821249653605,14.344207169113197,11.75293946594563,6.412939272094867,6.6415176922757295,7.001583034474043,7.159348941324706,6.607624022924996,7.317420927076562,13.639592976469428,15.06660777790675
109382,13.415136020212959,10.418906415537792,8.137845323824585,6.267560271490825,5.018954228723029,5.8241180376102495,5.969392244061868,5.799169611669325,5.368508673484169,4.693462357774674,8.66095751235579,9.048150831623465
109391,40.38100935034795,31.825075119847085,25.179677000753845,20.2364272757016,15.347100619802847,17.371829404814797,17.64383927314346,17.337357024052448,15.906413002351481,14.878372551474351,27.03367120156129,28.195654164764427
109399,208.128476921902,173.52953707973742,109.58227413693145,101.80970193190866,104.26203145629417,114.41106233699263,125.61631842542516,125.67517704957119,105.77076866662173,89.09045607701809,128.60891175695596,134.10653148359268
109401,51.08240204862408,41.073923302618994,28.02201596545221,25.222738690445976,17.153336231054862,18.441695330139755,21.242365877620955,21.413973168575083,17.91161465970329,17.154138553094498,31.47888813913674,32.43246624573218
109423,192.06331301648387,157.85371122362884,130.5075877179912,123.49019663431427,138.49835566692332,146.14497585121,145.6126173457063,147.46641203855899,138.35161957112075,123.6761713022941,142.7305715770218,148.42140849873897
109429,329.37097811865135,304.7163452901351,248.53628455724976,242.10153169280053,272.4504833061156,287.3968460023817,318.94066254227494,321.8075796593046,278.0467021487452,240.84847872554468,259.5546298070024,264.6170986751357
109435,39.845965559577905,35.41136442850187,23.322981596082954,21.568674712519563,12.260579385048088,12.651167976435413,13.608671514908519,13.515012842284863,11.952480445455372,13.748587766671012,27.845784293923472,28.896910628041812
109436,197.56404571584724,171.17617001636998,105.10679345777197,107.51847629624875,140.29449427597658,156.44148894737276,161.70860012517912,157.23280427956834,133.87843839232556,102.54305151533633,123.03662293109939,131.5943035173245
109442,117.25402946097543,103.08595260045063,80.49407703320819,73.35639670530773,49.51057548195555,50.673639223621095,55.91973593959683,55.919336697961704,50.63557132147978,55.061768080702166,87.56550707891898,91.22767627717299
109460,70.76392697292428,56.3074870060711,38.44151648273874,36.08270542867454,27.15713211645847,30.018885587267167,33.78780811552674,33.82006375982651,28.92314988328204,24.81484880748912,43.15894937527962,44.01917976409282
109466,1518.8890245869102,1292.9794601872486,876.0584718470129,784.3480024752608,653.3463645241546,729.7860206742567,786.4830006921294,801.0199035739633,675.4624618733924,585.8291472321005,1012.1208785305685,1050.4806836595726
109485,38.21626338143168,29.489581182767044,19.20286822508125,17.98389181589844,9.760855315799148,10.10687747701168,11.81294884312359,11.825651104761366,9.749257790684188,10.096236929035546,23.01787235533712,23.25766415279694
109487,835.3559975900869,758.336282821699,611.8813510470635,527.5544262880056,377.72648050586844,351.9205656174529,310.2531825065441,325.9479632638262,367.647742336424,415.50530874147586,635.821205641092,666.4663591063751
109496,71.57814400929371,59.69281036207438,41.609647527914625,38.28315608233371,25.33687235080674,25.59787034964425,30.13003878829489,30.287887143964902,25.27696488788542,26.462734606809075,47.58998429909929,48.91986891913226
109505,16.47320738613747,14.140429916499432,10.648445249721885,9.131231105215608,3.9884281212562325,3.6845601236820693,4.024119522681747,4.179546295229136,3.7691636668965924,5.031487088210602,10.406849168809774,11.31173327953149
109507,584.9632000431567,492.4122527735873,369.79893079388756,318.5940896165986,197.10025730741614,189.51605099788418,154.61279462187196,165.18331666216292,193.77477094709118,215.75109686240967,396.4932814646571,408.72669394566935
109510,558.0322847713899,489.41626060015886,386.61209885224815,339.6482362614625,208.6040801021996,184.40090433537233,180.1685213064971,175.01047500895305,187.92214177002703,251.5342396323695,427.59269216474235,437.9609782534836
109525,320.5035106608027,255.07184497233106,204.6364482872942,174.7464961737302,161.31599072822837,164.85962096420465,131.1087722376105,133.81033981628352,156.9030660209957,150.21370009623294,232.21114104949214,233.45842398085247
109536,17.18873826172539,14.80526746666961,11.29363934630211,10.250627633912025,6.6383816294521685,6.909632814195546,7.6488302134088855,7.836254017438695,6.929597259109615,6.528286714280859,10.909352914911905,11.764690903186185
109548,105.00588156233165,88.93719489132384,62.340328509682635,57.02695396092033,38.8329014945319,40.57462756791083,47.073576502337524,47.1599057368864,39.91744098574628,40.425007281421216,69.91531589032395,73.63741939173251
109555,129.748412145243,112.93970614270367,80.80646626923983,72.9277823741887,48.295500588764654,52.668748857817455,55.8149881909171,55.990109527763394,47.14633713333823,52.72026340315174,92.80945716507111,97.64458200051308
109557,30.21050917215564,28.4477383150106,24.61124534950408,21.24738954254324,9.279528965704722,6.615135955506931,7.101098411311273,7.267775899074403,6.354415249139011,12.32543207175601,24.114886274738108,25.643991937960298
109563,5.222544324980028,3.840190968356763,3.2029151878650377,2.3683009227905374,1.5640984891751633,1.8901975065916394,1.9957398474019181,1.9549274058326471,1.7639676367843,1.7523782308438627,3.20676556043047,3.484089049538521
109582,28.97658416913791,25.387810529912393,16.245418659695176,15.103629485425895,11.939025904036635,13.11480926377549,13.791761636399958,13.60461949082113,11.86446117102592,10.126579474473603,17.569454817129863,19.083241347472168
109614,32.45211104011086,25.55764056484339,18.869464916016046,14.356182599290651,9.246509812207963,9.837108052928532,10.08515142495364,10.418974625392595,9.46344031156909,9.172354307342784,18.34274942486553,20.0487291525107
109624,648.9441031553869,597.7713660968194,441.21628955032827,375.5062947315892,198.19795675572607,209.6815465342212,193.28730630081256,175.7930466939639,193.8740677743235,253.31681534539075,503.05331988586414,506.9960769604707
109639,62.23480238385686,44.944381391017735,32.273793297417335,28.000188003045373,25.726505857996667,27.060199135974532,27.27206018985194,27.8928551685523,25.081846616343906,22.421611036584114,36.57248134211139,39.029938357124514
109642,28.55703246423471,23.635248656928905,16.224078514034595,14.733351213095307,11.09461299601657,12.136120623104173,14.617872125521384,14.51178158221634,12.04437293450831,9.846468726741177,17.816493778445782,19.067573446837972
109684,16.963262965789372,14.610738191091121,10.83920424311502,9.86997649761377,6.282706623793417,6.582228625343323,6.941287923582608,7.125043993159004,6.319851866711465,6.894579309228841,11.691737523439375,11.791114000055458
109706,70.73242308645409,58.99416255676532,41.16224249887515,37.69525658049311,26.37749827840852,28.500149378099078,30.270640770710944,31.002526501646905,27.499833609608782,26.277480340259018,44.161329694665724,45.02630104085022
109711,59.70909147892588,46.6031460232431,30.555324517239,27.757445082114646,21.316281475980023,22.16727359150383,23.636328079423567,24.242318541779763,21.40579257955969,19.920052573143543,32.66661842059474,34.30760438572104
109722,18.36470550381819,14.553788549038158,9.43602078923481,9.044122802831582,4.664221019427409,4.786884699755536,5.698884329133212,5.7938031040379325,4.880362767478192,4.8641113043128215,11.200989369656813,11.373060196635262
109725,24.041935359764363,19.664697908932958,13.45730000256133,12.550008052878697,10.440348289260763,11.619987165335765,13.093054637091377,13.402871087871056,11.739917321974106,9.54060133149515,12.70857143240184,13.899497446961279
109736,49.38960521616385,40.16656576943252,29.99717642507998,26.40127044070669,8.737690633434864,7.6275901531193036,8.029392200754582,8.233763183419876,7.407583819003036,14.034256412522971,31.651056286866382,30.69725362853676
109751,86.53442153762393,58.35045315250828,44.80294367240861,36.452916865517295,31.098227354283633,32.69425007109793,32.47894717653796,33.68617840523169,30.593552790441088,28.690299938857752,44.8761450789125,47.00676477081682
109754,232.06730602453754,202.59921530533535,145.60512009216464,131.54121834065873,115.5996569475732,120.61970122304928,139.40263197886645,136.7849482365807,115.64900803297539,112.99465791854053,180.4946524445107,189.31328849610236
109756,41.21399713598289,31.805013721400865,23.184293278072865,19.068142496020126,17.310989193299818,18.428883529185796,18.668760226796277,19.143312979281877,17.4483340539684,15.980187249980183,24.22838357600013,25.317223601639878
109761,1784.1075456778385,1571.6815712813093,1274.3159416249596,1194.6393257692266,937.3489810888524,974.3665964641106,1019.0628749821883,1009.7205723468817,944.9624381209941,996.1825095738559,1435.769966525652,1441.6396021063163
109773,12.040709054289007,9.112456894122435,7.951498114106926,6.0991289451462425,2.224016507466894,2.4097053360787655,2.6244862617479487,2.710188783925687,2.5660375088121503,2.7429793047864766,6.513568889901805,6.982925465820858
109784,466.759245588175,282.60319911194875,218.28518706781534,147.0506387421428,93.41126092698194,103.4095203467489,95.61996955133237,91.49309202878024,90.29589073793402,106.46007323437028,255.60730317737273,262.6659570232634
109791,14.5595584563126,12.758142995027491,8.218062258686539,7.2508879262427826,3.131966885922173,3.1142872332407743,3.5172664987869524,3.5542567514602927,3.1886666450263004,3.6216432119412345,8.30342304338527,9.214773046645657
109802,19.08762919270261,16.27147802005083,11.535318720179337,9.87323110955815,3.7016895858085754,3.706684368032847,4.180916106879958,4.3161940490922515,3.8119887949248468,4.8960226398992654,11.752594347629424,12.55095104310976
109820,69.08834674350834,57.92793109529831,45.354992274071755,41.3987089845188,27.976783105917317,29.321031103195146,32.63174030993021,33.30330560620519,28.812229861269337,28.97132996250961,46.27432722042665,47.28031549445376
109824,93.22731653432187,83.81109647024549,55.98982269078286,48.93185248699885,20.55294619541506,19.908249497126473,20.281587482056132,20.613917523547137,19.313825713749853,31.692352141749677,64.15049249953013,66.11857490394539
109842,57.76338764848125,47.05858326112149,31.274188286116622,31.365404323622897,33.27808191991519,35.414430812021195,38.2065511919344,38.087728057769326,33.82978491365295,28.524543930172133,36.723952171327895,37.684580657781375
109852,31.045806789871172,26.718946343936626,18.331620981455746,15.373761013683946,6.138367631855401,6.533062776532333,6.8390743023167495,6.703399413220787,5.9641684896163065,8.16445629117647,19.613418335872097,19.993754358869193
109904,7.3535772285719005,6.249562255951309,4.660620717838557,4.150389138179382,2.0748583710213433,1.9839724852772065,2.3471736207290594,2.3729397356156343,2.0540590078044354,2.177615481279423,4.7639431001439005,5.081594717537828
109908,185.43399129893606,163.3165723444619,107.12612157690526,96.18897958778834,68.89257253676176,68.31667364936894,63.431473926622786,63.70886090655442,65.19948148513377,69.04210143943085,130.4203990547044,136.75964470457265
109909,53.82039181699313,42.58009798239294,29.731040829232757,26.237744283352313,10.619332439491677,10.295974837715976,11.730774623699402,12.04026041559039,10.05037519764256,12.83576762972347,30.729588234393173,31.872328830605912
109910,80.93493055693672,63.43657658375791,42.61090139333928,37.08279020304251,15.996537493164336,17.340286534310085,19.092373264081864,20.006861154695375,16.555030660174605,21.026318648210353,45.82976906800092,45.627962396284865
109911,1230.3237564883443,1072.628062022672,817.1052247254162,751.9459106608384,589.3421109227828,599.3007755848565,607.1217690673403,646.9369921391999,568.0615463469269,653.2165839833036,966.858658843516,982.3114028194395
109919,1437.6445528385962,1337.7799469763324,1217.6800406172945,1172.9522001927166,1161.6401636575463,1199.9209283408009,1195.9605579572903,1211.901932715805,1164.6803529909891,1163.9529398028471,1291.5777122193797,1266.963439271521
109932,22.956411461518098,17.16768696999552,11.078706917729072,8.478584844732133,3.7284691285629528,4.123582269927842,4.378163992611942,4.39614916094719,3.961847546166554,4.475970547882624,11.481124727443774,12.602085731279029
109940,43.518828692997204,35.70682979351017,23.995751019561833,22.81859478654034,20.064260608701588,20.979244272293496,22.891106353220394,22.847935211877505,20.31612379371317,18.53444004796639,28.41236149573483,29.504767852404413
109954,10.07055315371737,8.458794384137613,5.735919763271935,5.074570560314403,1.6162065612993033,1.5136203087727391,1.6841004405440643,1.7131341120644945,1.5144807626297458,2.5713389021673017,6.208683571784588,6.2702830730079935
109961,802.7858403752871,631.7929997662628,478.8790956613784,374.8203693426334,218.74101559738847,230.98150395921067,198.52722980412113,209.9214372410357,219.16765900374384,285.4170482847004,537.549971469978,529.4975036121045
109984,32.26255209361728,27.234932193208216,16.685094412353454,15.30415964558181,10.761312684903066,11.856314851519892,13.089668927599842,13.11969381154782,11.257339896681462,9.990737377242567,18.678097906239717,20.068255809895213
109985,483.3337759370385,396.6060038552752,280.72600188332655,244.3947749046863,148.68849186358085,144.330055300239,131.198358731216,135.52132029717097,148.79584349299472,147.39705613202023,300.8146792342042,319.4785309170281
109989,45.98273327406304,39.643769343687346,28.412491045548915,26.26192453024936,21.93427625097244,22.593842852487093,25.475489516896996,25.093720360442504,21.73213911997525,20.71880878899233,31.812215212938618,33.51695239595605
109993,191.87571846485068,166.68532520083198,117.85154901459168,102.92234772638041,62.94394699309654,71.33403058666778,81.58090147793999,81.80229299245696,68.32518792616081,62.22879462751565,129.1577542623388,139.03449174005326
110013,173.86424393082498,144.973379071877,104.28577818777042,90.40849635323684,45.88780237032487,41.02942107112625,40.0430072575968,36.52442940164633,43.09545020501686,54.024970866628266,116.6751903633087,120.94806240602932
110015,20.658572565343817,17.464569427172258,13.185282747736725,11.721389946862274,5.386979321987256,5.086356288311474,5.921727121294374,5.9220327973129745,5.134121827130931,6.382339248739226,13.940625003258475,14.569988569606318
110026,21.534904387882868,16.293198060200833,12.681192605169846,9.943145993720476,6.303832281680209,6.986050131803418,7.090331914855048,7.45197584499501,6.963944084910562,6.1468742458595305,12.139669300675921,13.870190603889746
110045,84.65092837756524,71.66518167662377,52.71507816144537,46.35176184757836,24.64878825251811,24.978223733335664,29.287577799191737,29.409310896939473,24.629481251499847,27.928143884427765,57.56324183646621,60.87050542002583
110054,69.60703915315156,57.27991013225499,44.312416288019,38.72937807928599,36.99552283063524,39.96771976439133,39.79112382719208,40.7317904683642,36.060292606413846,33.39559161165809,48.88947330718422,52.89714434696427
110061,28.622284019476304,25.71782494051643,16.861106510616715,16.154941260320463,10.924985832293569,11.662585807724504,12.548801229565548,12.612940325147807,11.297690757719307,11.021290143814085,18.91817122141536,20.032229303842563
110100,122.4997871240597,96.40014273761442,64.48220207333503,58.077309469213105,22.03868427304656,21.797843146141027,25.194167362058316,25.80477849205288,21.7105867959679,28.075502156684138,71.16961477381216,72.41545244115387
110174,64.90727621263274,47.72574243823865,35.35236726493478,28.172093253440572,20.285517263858786,22.217930467156965,22.164972662736364,22.865528534493034,20.365668223315303,20.5176243008261,39.366102220779645,42.3325700901384
110201,320.7390983910637,268.20084209443917,171.63386909939456,150.80360924133342,97.46533606498117,107.17321280154246,118.97636461150582,117.160341389845,97.52440794926498,104.66431948432238,211.0650729251564,222.06241599452503
110207,646.916808907908,564.8380727932878,433.09279954051226,389.37279941857344,332.823950559378,308.1032781791193,271.5070624345937,284.99594555236104,329.7649208305379,325.43967236384253,486.41663102574705,496.0391276919705
110210,2448.405917511004,1581.28984753854,1318.3978071827044,1291.119422341008,1375.0577405831568,1514.386897428908,1646.8926456771674,1625.3067388317272,1446.6120992730398,1292.6761730135945,1473.5738799072938,1459.80209318871
110276,688.9416713803521,558.3924597145304,407.58729916542717,382.86181569171816,180.0940229571993,180.98062068592117,199.02111081489087,198.82734551875336,174.20265627269785,232.0762314476547,464.49717840401627,458.42654509952365
110285,30.248870117535485,25.172905638714013,15.857551140903103,15.00623792234696,9.586804224982398,10.201764659176549,11.006135203432365,10.985734710508831,9.656227530872691,9.96396419131446,18.76569930885951,19.0818792324502
110298,1013.9499216558685,722.2595673681142,415.3189279834071,315.92676776482773,159.90056995715594,189.476590503979,145.44722813227827,153.26858595300854,165.16789170995327,169.7136930374062,476.3314095443638,521.1231486499837
110306,118.61864267918567,97.45701332917324,66.28662836491448,61.53969064135254,53.70648878402494,57.394583364168476,63.6127448362905,64.23473465972111,54.47130688497182,48.17341738463245,74.99018197303097,76.92878498524051
110320,6.411346875738037,5.672401899218195,3.8982006042632924,3.274876367907807,1.1364755959529287,1.208248536230305,1.3007442770834134,1.3287681529866338,1.2452063604039112,1.3955921660322033,3.647175726598143,4.07773032166596
110337,29.7911991810571,26.38346089118859,20.776489248765294,18.33890726130773,13.295635199879307,13.581752619202433,14.804143603311708,15.138513109213415,13.370137941173336,13.79368342965972,20.863226207959944,21.977316745563936
110341,31.031686141949077,26.11714288149486,16.83513438220797,15.403658731087047,10.15348817183007,11.297281457859778,12.6670118070324,12.618940755046614,10.849103561044007,10.100384406342386,19.795650642634516,20.539795097567566
110347,1328.6916556919687,1257.2177414950756,1108.3355339099282,1073.7161086534154,1036.5305975685746,1066.9084213190022,1067.8767835744593,1072.1541685278742,1020.6894390498925,1021.7697890632702,1160.5566352272078,1158.2210152063103
110369,16.798082228668257,12.482774873866529,9.77051630567958,7.396027002759407,2.277820315950735,2.5289338451216037,2.5441451342158103,2.6964558935058074,2.490409884556298,3.5000921958557165,9.869992114023583,10.488154598302211
110405,9.464003652415236,6.2187066934832815,4.664979432601014,4.001225805437777,3.978677427835204,4.34484188778058,4.469676663807049,4.547644717592964,4.227848342935927,3.8703138965817616,4.779918241915045,5.123404247696186
110407,94.49027341202316,84.99776070767973,66.0289238019953,56.27840619497072,22.60852385478751,20.93730111897898,22.244688554439897,22.866144871771876,21.042211749774495,34.818587660111895,69.58464041993989,72.35696154964141
110412,24.593767586950744,20.066039651598306,13.95533424247577,12.59617973969539,6.117042090487706,5.813637340069312,6.883786016212347,6.89901502732453,5.7571304456997066,6.975786017478848,15.667488241238624,16.124409617685803
110420,72.07681244807961,55.17235194333654,34.988428049603975,28.347424220615387,21.172259281541315,23.843705192473955,24.532218316181865,25.017186277787275,21.428971698907908,18.822417441455357,39.64470038407329,42.915634770072714
110423,188.7072732302646,166.1082473256905,121.48166709653721,118.07133371092667,122.19356976967941,139.01261497280524,149.24637811098154,149.05393365432266,131.7116979327192,107.47780244147668,141.01278746205472,143.85324476594042
110430,36.11457292636581,30.717274008884537,20.7149865171262,19.271473964509525,14.081635474139627,14.648846569441313,15.782594081590283,16.22890356422217,14.533637929178337,13.404031167438124,21.095337977494562,23.03522001987093
110464,118.7617256957827,103.31843111178192,77.42928132861766,71.0281159345561,58.933256047693376,65.77436962055052,67.27785458944187,68.26638473490317,59.75610056276317,56.18172801801104,82.10163474645002,84.69299211249867
110479,94.65157098616817,73.68585179842944,59.08990196086852,48.498765220275146,34.27618605490376,37.798190854318825,38.31570901429602,37.48353365400307,34.81711002270071,36.683436532350505,65.17672717163624,66.20719015132254
110482,72.05202643565009,63.025172525320016,41.14684193037313,38.90932576183484,26.649807767055755,26.867183603787478,28.251541807630904,28.536654696680213,25.5298724759223,26.95447427310295,44.634882951171036,46.403904250341675
110501,18.40860351294464,15.167603479406777,10.590655591560283,9.07577162621167,4.7880429855784,4.9371931347009905,5.230865524174648,5.383188733669514,4.98672961440468,5.553676923926798,10.748297469125273,11.732464803852569
110518,78.98847127336575,65.46369538405513,47.715412342602995,42.165782825725564,24.225640353428762,25.279211210283616,29.472017531705635,29.277990038115135,24.21083708494105,27.167094109771888,46.92064585429585,54.972364183397055
110526,29.204534145388216,25.17914131217686,18.66247127057796,16.752119494544537,10.296167136897111,10.89745065508744,12.662510307147816,12.710598929345164,10.811138824400368,10.285406744991683,19.939003813577585,21.198250324451713
110531,31.96323066887562,26.445546072730735,20.85494842472427,16.107833141545306,10.248740557001165,11.881113641882868,12.008315381402387,12.441581672705851,10.81229879334851,11.230905498298497,23.04580909416973,24.974341561254768
110544,19.433405351887668,16.511004175390934,13.023353737338649,10.536708233280196,3.726740100268928,3.8079112997923517,4.217353261376555,4.417023121860054,3.9869960267439852,5.226636518168742,11.946672836156868,13.051242324121892
110572,34.16692624319309,26.62935053388384,21.750609037788315,17.2592537894315,9.286713540362015,10.652599000161976,10.79241297150924,10.806242769741024,9.685427638899014,11.56480545060877,22.750087211155673,22.987664057720554
110593,57.69013164264826,48.02464104278873,33.63946057851585,32.40556937248161,28.558464428968975,29.45967313177216,32.555930072785095,32.61782785931085,28.255988423144263,26.54772770811684,39.171491108911255,40.03108395315992
110602,36.15583535392542,28.657732359333625,19.493189080307868,18.333670138106385,12.387440352594629,12.472085602322581,13.861039287664157,13.987390638250822,12.194177493077644,12.569876930310672,21.77730792834237,22.166295657966604
110607,111.23546319388743,90.35546869338874,60.40734506062655,52.84398219785956,22.260770982792952,22.817022985741055,24.509666885562115,25.172098490444036,21.801118853137286,30.232375684563227,67.91279999611898,68.51684930790535
110635,569.4325225247393,492.57444430512857,371.04268800058367,329.75981906904366,235.83528844280937,214.60482459840952,175.40347596245687,187.13165136963966,225.05722965258093,250.7596171289064,411.83354471759657,418.8375054294242
110655,365.31016442138747,303.1615405423161,220.30540667416818,189.44753967377187,102.04948511880826,93.60056580184306,86.62365518204778,89.11874828205353,96.93529820914166,112.07537962466984,239.62138864482048,249.9546103507552
110661,25.645425167393675,23.304465769032976,16.001706334620373,15.851730792112209,11.81764744004532,11.645922309207602,12.336727580257197,12.588103174677066,11.389321281091977,12.43965164223847,18.06317245024136,18.724989063504754
110674,427.422908047152,375.8742577019933,275.42502691890894,241.90078554168727,136.3667643241504,127.71393816331143,105.1189130547653,110.05569317348547,127.53082544731234,159.031569920477,312.3508663301547,317.0327410389123
110700,58.40226322365256,47.12165618005962,29.049001309692787,27.916198073976556,18.457929569802015,20.381635541136642,21.657491125483983,21.373156560632424,18.858554724662213,18.01138921849081,36.187165361410706,35.47271026231585
110734,37.80064225786659,32.4183924945869,24.334164470230643,22.09531291300492,13.843989240440756,13.17132294864052,13.72695920893214,13.694423099106304,12.472762572239,16.79071526657036,27.857911407386954,28.415681673317742
110736,1525.4003117232833,1346.0528439885134,957.5995888024161,871.953357141201,640.6836044573264,608.8516083773258,546.2713245651424,575.6047383523409,615.8746846699697,730.0647356611139,1128.611680759199,1160.5453744471736
110747,70.47073350503959,59.322487607425685,41.59056650183438,35.326525789053264,11.563916694564387,10.976598702656858,12.018009323277418,12.411275290942207,10.772732674419254,18.72680713438353,44.16998829217929,46.30767391133264
110749,16.202232729831834,14.277005688637097,10.047424602600382,8.930967198802112,3.246548754565825,2.9581235857191706,3.3515200736498274,3.399772327101175,3.122783934714973,4.796656990487154,10.440313138682281,11.256381134882448
110755,274.4270434559156,232.04276040850013,150.35698229280044,129.51217658518297,86.63908329232763,89.87287779665046,81.03269004493097,79.15890303775794,85.2544002392881,91.87871197646533,194.07998691784826,198.299457074297
110759,2602.877820086111,2153.6541494183343,1473.7342145159291,1310.7928499066736,745.0180816394945,728.3709925648768,636.0420568025389,654.2817442799002,719.3406446894475,919.276950325758,1704.845894023248,1684.2442080642738
110760,14.738943041568646,12.752568352078402,9.133940817687927,9.226001747496575,8.31129902464399,8.580813964231554,9.395210954368618,9.58664192675466,8.648202068275522,8.099637240514479,10.28555161799888,10.600055271887182
110767,275.4132088794049,262.03667517630106,193.33070357080035,168.19237428243275,115.89260735725817,112.7145990590176,99.48984466631285,102.2607944942914,117.89406456190457,112.56567432544657,215.29816257702115,223.4030174744618
110770,55.99268176546599,43.750195875682,31.565675865606188,23.81521497644125,10.456490665956284,12.305899243782678,12.608156289338407,12.940326642191284,11.26341425429349,13.631431537098322,33.18730242614772,35.225470795470386
110776,49.54032299414971,40.82614662216459,27.255580824192943,25.15849768648254,14.602432410610449,15.681623692220011,17.182116788295463,17.439229563050564,15.063589237762272,15.478480665186792,31.71184966342139,31.690233983256817
110786,123.37306015852361,96.87842936111075,78.4562818657128,63.88850687339729,33.91378289082818,34.78254782247621,32.5447600381098,32.715084382081486,35.19671733594321,44.20821807933103,85.13993860883902,87.1950307138702
110806,308.48205706715896,309.61694740995233,243.52791802304856,218.47290221713678,119.83443905711141,109.78277916411106,94.017437375265,98.965166114089,110.84078750256677,154.34333452650708,265.1721648023484,271.2586493020869
110811,33.0466081263027,27.574901177563095,20.219897512618505,17.009578494864744,12.689662121305641,14.094099101739877,14.360190846574058,14.631525288595464,13.033161351523596,12.376406977963944,21.59502636946526,23.18360357848889
110819,25.32643363653677,18.22668603829008,14.920268181465191,11.6860197050885,7.76413480227917,8.150090777168408,8.200898092764758,8.459680682169209,7.911495641096287,8.000854363268196,14.143388350665386,15.406881512734511
110843,48.021139556906256,38.23477234289354,27.563783180862774,22.63413362678372,12.970270258942127,14.672486375818345,14.832192353025935,15.27080991427144,13.585348310972396,14.266365784392057,29.369391688136663,30.640949804172944
110855,8.619471599947829,7.542254125657249,5.457135468298443,5.017779345707563,3.238727580077239,3.285360618006219,3.692332446486158,3.8209517674702083,3.33674872766374,3.269653794734268,5.0984362038901985,5.591191327370393
110858,40.23628276238755,36.593048666476356,31.3866683111192,31.517713781859584,34.66806120194729,35.39033807633947,37.754286024305515,38.603088864038554,34.976806642491674,32.644617866295604,31.281428623094673,30.95251367626498
110866,19.00487921539529,16.069604549688556,12.569549392227241,10.381461447376855,5.412494093601674,5.846332516448513,6.017652159296008,6.191488042020393,5.652267546732234,6.643756637756781,12.366289079144561,13.453419525726165
110879,396.03062783959086,355.4285755276713,253.79043263012997,220.11325775215724,135.3945998247786,136.46252322417914,105.55174135717473,105.07073919293246,128.11816279465862,152.23883163583287,287.1714959642343,290.61888400278036
110896,42.11617060262276,29.23105084374319,23.10194447743454,15.723772476235323,6.915589444853302,7.726645858226839,7.7354327543925505,8.009189163971003,7.115369636343991,8.923375639346657,22.362916273356994,24.010940336344873
110916,6.875388865431513,5.178207360075857,3.565471020617578,2.689586044160411,0.9403573786176894,1.0890691587270236,1.1392677370231572,1.1913830847087319,1.0744930540981468,1.1967451740086137,3.4825578941169946,3.7754445000607686
110923,185.46209538248928,124.91538844866649,105.17232302035784,82.62016415035647,60.41959095076126,67.2384896884125,55.942754901008506,54.67847568840696,62.608664538416505,64.09354634582571,113.97828053519126,118.86976207666793
110926,40.537714121269005,36.14078680116816,27.023094343468856,22.292818819591655,9.485988763227532,10.219976448921512,10.667460886432291,10.496475132424914,9.456899683182204,12.958965529226706,27.83067692696822,28.945412931096484
110941,160.34927004715027,125.83036678824655,95.06736741857397,85.1870489055063,50.82598129902324,55.46383644511719,56.83862945419325,58.051017908358794,51.489782215400254,57.113011177261406,101.34836853666202,100.40550784057731
110953,145.83224266723843,123.23200610286597,81.68323713339542,73.13093774011205,30.161317343782045,32.314285284786656,34.645576246834146,34.6821051383898,30.16959886797293,41.875937382995325,91.75919974950567,91.55910225523482
110960,71.28434878619673,60.3786114614881,42.23441654400512,36.42921689914364,22.805972580048763,24.85051952169241,27.4765873511658,27.84925588093486,24.034878620456464,24.47617361388661,46.74779800195854,48.75154479608901
110961,33.47341118371243,26.908846635956813,18.618218253735158,15.389064861255623,8.091317568177196,8.67823471851335,9.027366442086212,9.397206344432941,8.505645991689569,9.32611530571442,18.808905908327212,19.877766033588305
110979,21.204379210598812,15.77650513478261,12.272310876164097,11.582026249603192,12.242328109014561,13.273247326895863,13.940531683093505,13.422731597746099,12.221150247029534,11.299444815110526,13.227769692794128,13.721718954236318
110987,104.12446555936876,84.42703793728549,56.705654357462656,50.878080976338595,31.899841168473124,33.9602902454765,36.55566376156549,37.27113139736992,32.41482457900185,33.11840747105035,61.703780624798455,62.549192940344845
111005,170.71851345803603,149.70065053954028,117.1802234393107,112.18189466996026,111.28035017575982,107.92318550705629,88.840667806538,96.91416214949277,108.80105346419293,98.56977674177169,127.89890831753188,126.81130541962533
111010,44.762833306824874,40.97415807958326,33.335719947166595,32.18188061949593,31.275991216367192,31.948730805245653,33.77279227610324,34.69653911134858,31.67143895015664,29.9861239987521,31.313661929105628,32.531189439762784
111025,33.617322799392326,28.690566878700082,20.43061595141213,17.620422280485787,13.495270138913707,14.865726231566978,15.30503161524332,15.399296836618072,13.82475887644158,12.852762068848973,22.282769738087378,24.664915015489203
111032,30.442023447721514,18.75473218469376,10.775967804857508,8.689528825728846,6.144595605482759,7.237842984806934,7.507344698119621,7.340855258938084,6.458958795688754,5.177403158177264,13.97145567888007,13.409147822516665
111039,253.82772976415546,218.98013926266108,157.35215372186127,136.7980059891574,77.2371156366281,80.13248455789645,89.40925768408717,89.17252665415606,77.48518698307603,95.12190495400556,175.0441830387087,183.2219347904034
111045,8.427368135382489,5.735614681834072,4.262445784741538,2.9231520984333206,1.5120332534138445,1.6954940114547599,1.7257858839175826,1.8496638498755795,1.7080472566421327,1.6215926465948325,3.960870315583472,4.619529534448009
111058,31.821634586312992,26.869421205817822,19.674674529392757,18.8160692650901,14.251997180602945,14.264474728810589,15.547515836964294,15.806231441093724,13.992082677989366,14.139056524935437,21.06731761969492,21.655377176157284
111086,5.957001810157928,5.146784250169852,4.069784643293283,3.591140279601928,1.1334129927066916,0.7706553996830185,0.9400271365232007,0.9903009885997379,0.8850891542879842,1.3183977981637491,3.6442417093865718,4.026491873388206
111104,13.818522037376292,9.329473383819776,7.6435562156731125,5.579811860919121,4.74570200235105,5.025979947892314,5.2586771928012475,5.259083100035044,4.751673974612278,4.396200550441395,7.695269943274964,8.366768028503298
111124,1596.2376192144618,1383.9011469421148,1075.1441687259673,986.7012564181905,734.4457296523481,760.8740366189392,728.0218617544988,736.3079413952685,728.9564214332476,854.339517984986,1223.2923077633313,1226.3400349510373
111141,33.91061631263039,30.55168910674166,21.642859250178653,19.212704336419534,13.676768369036198,14.641112480067171,15.228302643169908,15.285595611991752,13.829136428803768,13.28143618067294,22.7677731799234,24.62409050921347
111144,29.03915750150027,24.009811445271662,15.83841111328699,14.186332387826903,5.601507692942879,6.119148734986675,6.531115288673398,6.597991042897833,5.927189357632293,7.565608420301102,17.475797879705375,17.22296891573435
111154,181.8249501914654,152.2561084579604,120.67416929166448,109.17946001431027,112.27341402904842,120.98883730143648,105.29108612484406,104.5666715076031,117.34794185818569,95.46468685357976,132.6089972939274,134.86687765706887
111173,178.91207767244106,156.74773091052157,106.97207649996543,99.74449354043395,57.308897677034814,51.87894639103791,47.046488134242324,48.634695752189906,55.490503879327164,70.16232430363853,133.3765207253726,135.2821595964676
111178,90.84481136509672,74.19271685109996,56.653623865222755,47.50537764117684,50.56421994791687,59.38654532612995,58.92363563250559,59.97676036063195,50.40444670059904,42.852727536608874,67.02927527251292,71.59137734309995
111215,342.72086485993447,263.70543932493433,213.83193400200614,170.4965564806239,142.10962450323532,143.06579655476125,113.04759008494172,116.38106976943635,137.0870527811288,141.42966416089553,235.66785389302538,240.2427618820396
111216,510.8724908626031,438.8704298262535,334.80994154848474,291.24616290907727,183.10414291614362,187.70503512086754,163.9831310495609,164.01755185802492,186.7160417310689,191.6013823229414,353.6954996009896,363.56215926174974
111221,110.18612930996333,92.96622295491267,68.8107674999948,60.13145858804237,21.073820745067284,19.0023337275691,20.443434439109406,20.61938365732707,19.140140025181818,34.76814387057084,75.58298970981862,76.03344091609542
111229,48.91559301478215,39.46349397444578,26.69424123754592,23.62820817527211,10.08055497061838,9.733569517822056,11.535784296318225,11.49963981472157,9.491121148006318,12.344367459701362,30.212675169698944,31.189452278627495
111240,42.772794723656645,35.36659032992562,26.21351966154886,23.211136466880646,10.199915375410603,10.055211535467944,12.083748620365906,12.177316968695619,9.944828953046361,12.281275776879504,27.906249916396,28.8071200164425
111246,2176.71882277322,1828.2145398098676,1413.1179230337316,1180.7828074266565,575.9935216946067,566.7142372821827,592.2566544406392,596.766997903227,560.1841028845836,778.5429494880643,1582.0361971031464,1555.073049640642
111259,21.037292733309112,17.846013527306496,13.821918928931176,12.008833342714347,4.33400238965887,3.3371112703377706,3.6493718948879335,3.8483333055122584,3.4410337154002906,5.299236514850922,11.8657447940807,13.078335089731093
111275,214.21731608677217,210.74074469078394,154.9417525613781,134.5180951626037,94.69901347647796,92.96631839392451,85.02395813503051,88.69802880285418,98.3094137002393,88.06475947320557,165.04129139663127,175.7697108884472
111276,85.9655078747677,70.60397403961501,52.01613085047055,44.32216291149297,34.185977610125384,37.05173405290556,37.60743809221109,38.37919929620401,34.0826409109446,33.35259217294227,55.57927710873742,58.79301537464638
111287,35.6377287830571,31.727991707715702,26.327187826898403,26.68731278667603,28.91765512806925,29.406670504213743,31.209996877615385,31.933568953891754,29.05071389166511,27.620006108942004,28.275187052529756,27.73402305005137
111294,51.63325836911331,41.52402657860232,33.38191092014025,29.254967337584322,32.53231582882725,37.18495079398905,37.912036222579644,36.30989797552771,33.3895983511722,28.450172952808483,36.84002416991235,37.27543422926576
111295,1121.1529046435835,926.5126141098774,737.7816082216358,589.4416281120373,289.3073489499402,266.8949242855615,231.48842516457628,242.91745049220896,293.5716512750218,419.9372908738879,794.2171936117861,802.2484243455666
111316,63.01043581174602,57.085729920127086,49.54222557729125,41.36197525539929,17.779590090768906,16.643942011017266,15.99991388034372,16.81982954673606,16.827903076336344,28.81468202551297,50.44887149743882,51.40660982616186
111343,25.104916579413672,19.97858426501217,13.275926945496137,11.747353119809386,4.057166761733298,3.5677740129457245,4.431853831895605,4.4295873523941145,3.6327889772239113,5.266088437222229,15.043587765868615,15.417732764606951
111359,202.90060700979956,182.8990280135886,139.11953894218988,131.42071095411725,112.9336175942414,117.35326343511817,121.36452581847983,122.3320046291753,112.46257057554824,113.60940724341442,151.7909933899201,155.86336114418853
111366,42.18007813131159,36.28809363708033,27.539765425954464,22.110806182789187,9.42167099477015,10.490912493155014,10.67757403706024,10.679633403511058,9.398479395821752,11.681133033408791,26.74164834373079,26.98693592623936
111367,15.669234530893519,13.619963533518856,9.703082057354369,8.58408012822977,4.125059448822023,3.9917197126687944,4.34369825271169,4.478670872559945,3.9851216213332497,4.852858523860437,9.834773190005889,10.655228300765474
111388,18.689796202450687,16.11116880270686,11.862855842546281,10.0509766844928,3.6029494751116387,3.6094001455013704,3.992826929685615,4.080035248802984,3.6263464568375934,5.0495115776366895,11.947312097171471,12.776559759530677
111396,85.85780813456485,70.57345688842257,48.19151221849806,40.877259647270016,16.405326172520926,17.368708683611636,19.496357361678857,19.615119007933853,16.822115793279266,22.183084278046017,52.68749613261213,54.427529931884905
111405,37.1258312021978,30.222513820924217,20.260462560477926,19.20665571988997,11.760336926426607,11.424313135310214,13.208942632772862,13.225879109307764,11.135150815832798,12.022531035356021,23.408877834750218,24.45643302694858
111410,286.677737875715,234.9961515442569,185.47636234428674,177.13565876430437,195.59992836800416,209.61698112672144,208.5981985601955,211.94486333788313,195.8975670054963,165.06985044414736,200.4448228795127,209.1388179281612
111421,34.855213425774295,29.1393160436472,17.662196639546927,17.122319943132883,13.00298974355738,14.376911629861915,15.235627522014985,15.21836584929649,13.408390009718662,12.159791110085962,21.34187406331774,21.765413402487056
111433,71.25103040377083,56.635036631406784,31.156533190260213,29.44437456056083,23.471802761457752,26.18099481833541,29.424365505174258,29.436412970588783,24.3764791712428,21.79774782811676,37.530988182373726,38.17362272912606
111435,42.100237805626854,32.455825499272954,24.557259835423853,24.434300916757127,30.42296707776421,32.03143500762792,32.31233369035923,32.25557938629161,29.404854436454762,26.30996466922779,27.31424516035789,26.891744542871805
111441,115.76395462341775,99.06101210309319,68.32350441988231,60.031564015331845,24.67760901815347,25.680981653782545,27.291623270949017,27.486432943193254,24.53655947452555,35.82676847498821,76.11910257369995,76.9724482644782
111442,251.674458088101,185.21550685955359,141.61442660510093,113.84974838465708,97.32764689949684,102.44434228301245,94.01902778677622,91.38325797105136,97.52906286671178,92.31343511440839,163.92330266865,166.8007684031298
111463,4.868301074404901,3.88763719207221,3.2182675864496906,2.6756638942744178,1.570197893900968,1.6125184164037552,1.6418501277750208,1.7461546836211672,1.6206941552775573,1.73894288578149,3.0165992356865794,3.328228919459605
111473,7.768393383162369,6.625697773468888,4.957131825894779,4.5109281089163416,1.834315395706885,1.5670184809340109,1.851833974439795,1.8688462886440556,1.6502854726035214,2.0948204965055597,5.251468518108454,5.572308690692834
111482,29.764467147308178,25.154544978824042,18.255743517308744,15.993070102280708,9.854994344704682,10.148836611723185,11.823203284758868,11.72682856777219,9.840296598992925,10.777883509402274,20.554484407095295,21.35454840567235
111497,664.3807961872391,557.4655952448554,410.79987785912346,364.34797062426,245.43441436596694,237.41817371194728,231.2110225302751,241.3611574178992,245.0746606689933,252.01099179381757,442.33853020158114,453.06096368114265
111498,36.44359486046962,32.331188460137994,25.074758661388884,21.5395552966843,8.672447097060012,6.29443119434754,7.586900758825474,7.8613233156139595,6.5821788575083255,10.920661113108844,24.059349618884614,26.02208783291592
111500,11.836160236365863,9.987886258725977,7.03742586406652,6.6128495992286025,4.497928175055441,4.658374809096277,5.1532402280138845,5.205521087100148,4.681227986443226,4.413503135968661,7.44590641818871,7.875232005633619
111511,22.960284758794234,18.38861958457289,11.924335086711048,11.002477431426552,7.416606626072473,7.839363430619127,8.264968703105268,8.637330568031466,7.678212366399854,7.247046693158517,12.77523923900946,13.523310794894186
111524,346.01127686450207,288.5164823317688,236.9291843126741,190.2330465911876,138.6467523924335,147.63967336944998,150.63430564514704,138.90567515324096,143.01595025247752,162.19084256892148,276.31830175919424,276.4772963090723
111529,36.45028896457534,30.692171154197283,22.184890085344662,19.423972012394398,9.238676066033381,8.733734003747713,10.175415487459048,10.285901093455402,8.815355048754279,10.39089631375907,23.17018420053594,24.743374735244487
111541,1205.3881843851902,1053.0911235888352,815.8260396946121,718.3955980370532,462.96717100862406,457.1246447603705,380.7554866595817,390.54215633373474,460.9935444100645,481.6861193382711,858.32202414547,881.7445953883824
111542,242.82898597418583,177.3747960100276,141.01157940097121,112.80109690712796,85.01225901109129,89.07707371644453,78.9057453581985,72.1609672076552,83.16780857464511,94.59989412253192,161.201044039785,164.14543827709426
111548,462.1085270608114,415.1948532667606,316.55337759297424,283.4847057042977,216.88086264955274,227.09967654157015,284.72077642527603,290.9468300993187,226.72098210921257,211.76154811041653,352.5021431133635,367.75165624762514
111587,1008.7820000975452,917.474508857132,759.0437160724583,728.3801531576613,770.9446006830394,829.1793748285143,870.9835735211972,869.9383408606906,803.208210840602,687.7869212687451,797.3822911668947,814.5703505078407
111591,163.717185623155,140.93114246031826,110.89788494338717,99.28338607022168,84.24132746693684,89.07917273342385,87.94816688437655,89.42343399348708,86.12055938845987,86.51164135098976,116.33276017214976,121.73949053197732
111598,11.85070737154754,7.763371416865544,6.2605821364886625,4.459532421250555,2.7058389449761275,3.3182644737405464,3.4900686648665022,3.430187308263021,3.039867444902398,3.1744313144953935,6.477415823284641,6.910555072855131
111605,717.5842719643153,629.6801213279424,516.3676560067203,471.2859586815449,214.23777374944686,181.20881115135643,165.88047823584023,175.34167970515702,175.35848378604936,332.23779562705255,551.1438622301181,551.4601526077815
111617,23.82359382858886,19.06217899509356,13.336597095936442,11.921783772900428,4.0687562937501776,3.4962446228176614,4.086994968092622,4.211917106061382,3.5859422686932128,5.400946051951066,14.036123288698958,14.445544825381335
111618,54.51339981773734,44.4572007429747,30.437953495077753,27.18583225507827,6.477341318024307,6.8933821786300555,7.599975994468102,7.647620904697747,6.088580784384433,13.177675329457692,34.64096729403688,32.47149713890326
111622,17.47071594262846,13.186937702355836,10.414630875795254,8.54756113955773,7.023962800688487,7.9612948299159285,8.130462493297976,8.069021886326738,7.334206192240525,6.73644195408393,11.067252196591632,11.198791522888177
111629,187.17194093393047,161.87356358738253,123.15790277374403,107.9563507978032,72.24587016514198,65.36087060747181,53.1075866778296,56.75797708414836,65.33361590587855,77.49124099822515,129.2091882499582,135.9542068187486
111634,266.16741819721193,206.1546585118868,171.99490489882118,156.19297729232392,187.18500471241796,191.27790866379658,154.09205226028803,149.33038223648796,184.29443697587365,171.9129963848151,200.83137016719402,190.54927933699284
111640,547.6799287522664,508.53340146458754,413.1656671762755,386.02114229889025,317.7804971439671,322.034343870899,309.00035243461866,315.54011837350146,322.11392056276924,346.07330421834035,438.5292776338318,452.47833378601433
111642,53.74860452519608,36.06454979324337,26.814268481933347,18.685536668559564,8.926318017435042,9.64426250278036,9.705750538548239,10.072846632705463,9.151682766250799,10.481939514570957,26.72894336422319,29.90449221127869
111644,23.8836461063575
gitextract_3_jyodj_/ ├── .coveragerc ├── .dockerignore ├── .gitattributes ├── .gitignore ├── CHANGELOG.md ├── CHARTER.md ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Dockerfile ├── LICENSE ├── MAINTAINERS.md ├── MANIFEST.in ├── README.md ├── bump_version.sh ├── data/ │ ├── attribution.txt │ ├── features.csv │ ├── hourly_data_2.parquet │ ├── month_loadshape.csv │ ├── seasonal_day_of_week_loadshape.csv │ └── seasonal_hourly_day_of_week_loadshape.csv ├── docker-compose.yml ├── docs/ │ └── gridmeter/ │ ├── gridmeter.__version__.rst │ ├── gridmeter.bin_selection.rst │ ├── gridmeter.bins.rst │ ├── gridmeter.diagnostics.rst │ ├── gridmeter.distance_calc_selection.rst │ ├── gridmeter.equivalence.rst │ ├── gridmeter.model.rst │ ├── gridmeter.param_selection.rst │ ├── gridmeter.rst │ └── gridmeter.synthetic_data.rst ├── opendsm/ │ ├── __init__.py │ ├── common/ │ │ ├── __init__.py │ │ ├── base_settings.py │ │ ├── clustering/ │ │ │ ├── __init__.py │ │ │ ├── algorithms/ │ │ │ │ ├── __init__.py │ │ │ │ ├── birch.py │ │ │ │ ├── bisect_k_means.py │ │ │ │ ├── dbscan.py │ │ │ │ ├── hdbscan.py │ │ │ │ ├── sklearn_bisect_k_means.py │ │ │ │ └── spectral.py │ │ │ ├── cluster.py │ │ │ ├── metrics/ │ │ │ │ ├── __init__.py │ │ │ │ ├── cluster_metrics.py │ │ │ │ └── density_based_clustering_validation.py │ │ │ ├── scoring.py │ │ │ ├── settings.py │ │ │ ├── transform.py │ │ │ └── voting.py │ │ ├── const.py │ │ ├── hourly_interpolation.py │ │ ├── metrics.py │ │ ├── pydantic_utils.py │ │ ├── stats/ │ │ │ ├── __init__.py │ │ │ ├── adaptive_loss.py │ │ │ ├── adaptive_loss_Z.py │ │ │ ├── basic.py │ │ │ ├── distribution_transform/ │ │ │ │ ├── __init__.py │ │ │ │ ├── bisymlog.py │ │ │ │ ├── mu_sigma.py │ │ │ │ ├── raymaekers_robust_yeo_johnson.py │ │ │ │ ├── scipy_yeo_johnson.py │ │ │ │ └── standardize.py │ │ │ ├── outliers.py │ │ │ └── outliers_transformed.py │ │ ├── test_data.py │ │ └── utils.py │ ├── comparison_groups/ │ │ ├── __init__.py │ │ ├── archived_gridmeter_changelog.md │ │ ├── cg_clustering/ │ │ │ ├── __init__.py │ │ │ ├── bounds.py │ │ │ ├── create_comparison_groups.py │ │ │ ├── settings.py │ │ │ └── treatment_fit.py │ │ ├── common/ │ │ │ ├── __init__.py │ │ │ ├── base_comparison_group.py │ │ │ ├── const.py │ │ │ ├── data.py │ │ │ ├── data_settings.py │ │ │ └── tutorial_data.py │ │ ├── individual_meter_matching/ │ │ │ ├── __init__.py │ │ │ ├── create_comparison_groups.py │ │ │ ├── distance_calc_selection.py │ │ │ ├── highs_settings.py │ │ │ └── settings.py │ │ ├── random_sampling/ │ │ │ ├── __init__.py │ │ │ ├── create_comparison_groups.py │ │ │ └── settings.py │ │ ├── savings/ │ │ │ ├── __init__.py │ │ │ ├── archived_dev.py │ │ │ ├── cg_correction_testing.py │ │ │ ├── model_correction.py │ │ │ ├── scratch.ipynb │ │ │ └── settings.py │ │ └── stratified_sampling/ │ │ ├── __init__.py │ │ ├── bin_selection.py │ │ ├── bins.py │ │ ├── const.py │ │ ├── create_comparison_groups.py │ │ ├── diagnostics.py │ │ ├── equivalence.py │ │ ├── model.py │ │ ├── param_selection.py │ │ └── settings.py │ ├── drmeter/ │ │ ├── __init__.py │ │ └── models/ │ │ ├── __init__.py │ │ └── caltrack/ │ │ ├── __init__.py │ │ ├── data.py │ │ └── model.py │ └── eemeter/ │ ├── __init__.py │ ├── common/ │ │ ├── __init__.py │ │ ├── data_processor_utilities.py │ │ ├── data_settings.py │ │ ├── exceptions.py │ │ ├── features.py │ │ ├── sufficiency_criteria.py │ │ ├── transform.py │ │ └── warnings.py │ ├── models/ │ │ ├── __init__.py │ │ ├── billing/ │ │ │ ├── __init__.py │ │ │ ├── data.py │ │ │ ├── model.py │ │ │ ├── plot.py │ │ │ ├── settings.py │ │ │ └── weighted_model.py │ │ ├── daily/ │ │ │ ├── __init__.py │ │ │ ├── base_models/ │ │ │ │ ├── __init__.py │ │ │ │ ├── c_hdd_tidd.py │ │ │ │ ├── full_model.py │ │ │ │ ├── hdd_tidd_cdd.py │ │ │ │ └── tidd.py │ │ │ ├── data.py │ │ │ ├── fit_base_models.py │ │ │ ├── model.py │ │ │ ├── objective_function.py │ │ │ ├── optimize.py │ │ │ ├── optimize_results.py │ │ │ ├── parameters.py │ │ │ ├── plot.py │ │ │ └── utilities/ │ │ │ ├── __init__.py │ │ │ ├── base_model.py │ │ │ ├── const.py │ │ │ ├── ellipsoid_test.py │ │ │ ├── opt_settings.py │ │ │ ├── selection_criteria.py │ │ │ └── settings.py │ │ ├── hourly/ │ │ │ ├── __init__.py │ │ │ ├── data.py │ │ │ ├── model.py │ │ │ └── settings.py │ │ └── hourly_caltrack/ │ │ ├── __init__.py │ │ ├── data.py │ │ ├── derivatives.py │ │ ├── design_matrices.py │ │ ├── metrics.py │ │ ├── model.py │ │ ├── segmentation.py │ │ ├── usage_per_day.py │ │ └── wrapper.py │ ├── samples/ │ │ ├── __init__.py │ │ ├── load.py │ │ └── metadata.json │ └── utilities/ │ ├── __init__.py │ └── io.py ├── pyproject.toml ├── pytest.ini ├── setup.cfg ├── tests/ │ ├── common/ │ │ ├── clustering/ │ │ │ ├── test_bisect_k_means.py │ │ │ ├── test_cluster.py │ │ │ ├── test_cluster_transform.py │ │ │ ├── test_spectral.py │ │ │ └── test_voting.py │ │ ├── metrics.py │ │ ├── test_basic_stats.py │ │ └── test_utils.py │ ├── comparison_groups/ │ │ ├── conftest.py │ │ ├── imm/ │ │ │ └── test_distance_calc_selection.py │ │ └── stratified_sampling/ │ │ ├── test_bin.py │ │ ├── test_bin_selection.py │ │ ├── test_diagnostics.py │ │ ├── test_equivalence.py │ │ └── test_model.py │ ├── conftest.py │ ├── eemeter/ │ │ ├── daily_model/ │ │ │ ├── base_models/ │ │ │ │ ├── test_c_hdd_tidd_smooth.py │ │ │ │ └── test_full_model_finder.py │ │ │ ├── test_billing_data.py │ │ │ ├── test_daily_data.py │ │ │ ├── test_daily_model.py │ │ │ ├── test_data.csv │ │ │ ├── test_fit_base_models.py │ │ │ ├── test_fit_model.py │ │ │ ├── test_objective_function.py │ │ │ ├── test_optimize.py │ │ │ ├── test_optimize_results.py │ │ │ └── utilities/ │ │ │ ├── test_adaptive_loss.py │ │ │ ├── test_base_model.py │ │ │ ├── test_config.py │ │ │ ├── test_ellipsoid_test.py │ │ │ └── test_selection_criteria.py │ │ └── hourly_model/ │ │ ├── conftest.py │ │ └── test_hourly_model.py │ ├── legacy_hourly.json │ ├── snapshots/ │ │ ├── __init__.py │ │ └── snap_test_features.py │ ├── test_caltrack_design_matrices.py │ ├── test_caltrack_hourly.py │ ├── test_derivatives.py │ ├── test_exceptions.py │ ├── test_features.py │ ├── test_io.py │ ├── test_json_serialization.py │ ├── test_samples.py │ ├── test_segmentation.py │ ├── test_transform.py │ ├── test_version.py │ └── test_warnings.py └── tox.ini
SYMBOL INDEX (1711 symbols across 146 files)
FILE: opendsm/__init__.py
function __dir__ (line 77) | def __dir__():
FILE: opendsm/common/base_settings.py
class BaseSettings (line 22) | class BaseSettings(pydantic.BaseModel):
method __lowercase_property_keys__ (line 32) | def __lowercase_property_keys__(cls, values: Any) -> Any:
method lowercase_values (line 42) | def lowercase_values(cls, v):
class MutableBaseSettings (line 48) | class MutableBaseSettings(BaseSettings):
function CustomField (line 58) | def CustomField(developer=False, *args, **kwargs):
FILE: opendsm/common/clustering/algorithms/birch.py
function birch (line 29) | def birch(
FILE: opendsm/common/clustering/algorithms/bisect_k_means.py
function bisect_k_means (line 28) | def bisect_k_means(
FILE: opendsm/common/clustering/algorithms/dbscan.py
function dbscan (line 25) | def dbscan(
FILE: opendsm/common/clustering/algorithms/hdbscan.py
function hdbscan (line 25) | def hdbscan(
FILE: opendsm/common/clustering/algorithms/sklearn_bisect_k_means.py
class BisectingKMeans (line 49) | class BisectingKMeans(_sklearn_BisectingKMeans):
method fit (line 65) | def fit(self, X, y=None, sample_weight=None):
FILE: opendsm/common/clustering/algorithms/spectral.py
function eigenDecomposition (line 36) | def eigenDecomposition(A, topK = 5):
function eigendecomp_cluster_count (line 72) | def eigendecomp_cluster_count(
function _affinity_matrix (line 91) | def _affinity_matrix(
function _single_spectral_clustering (line 113) | def _single_spectral_clustering(
function _local_affinity_matrix (line 191) | def _local_affinity_matrix(X):
class RobustSpectralClustering (line 220) | class RobustSpectralClustering:
method __init__ (line 238) | def __init__(self, k, nn=15, theta=20, m=0.5, laplacian=1, n_iter=50, ...
method __affinity_matrix (line 271) | def __affinity_matrix(self, X):
method __local_affinity_matrix (line 278) | def __local_affinity_matrix(self, X):
method __latent_decomposition (line 305) | def __latent_decomposition(self, X):
method fit_predict (line 383) | def fit_predict(self, X):
function spectral (line 406) | def spectral(
FILE: opendsm/common/clustering/cluster.py
function _cluster_merge (line 38) | def _cluster_merge(
function cluster_reorder (line 96) | def cluster_reorder(
function _cluster_features (line 176) | def _cluster_features(
function cluster_features (line 215) | def cluster_features(
FILE: opendsm/common/clustering/metrics/cluster_metrics.py
class DistanceMetric (line 39) | class DistanceMetric(str, Enum):
class ClusterPairDistanceMetrics (line 50) | class ClusterPairDistanceMetrics(ArbitraryPydanticModel):
method n (line 66) | def n(self) -> int:
method sum_of_squares (line 70) | def sum_of_squares(self) -> float:
method mean (line 74) | def mean(self) -> float:
method median (line 78) | def median(self) -> float:
method var (line 82) | def var(self) -> float:
method std (line 86) | def std(self) -> float:
method mad (line 90) | def mad(self) -> float:
method lower_quantile (line 94) | def lower_quantile(self) -> float:
method upper_quantile (line 98) | def upper_quantile(self) -> float:
method min (line 102) | def min(self) -> float:
method max (line 106) | def max(self) -> float:
class SingleClusterMetrics (line 110) | class SingleClusterMetrics(ArbitraryPydanticModel):
method var_norm (line 159) | def var_norm(self) -> float | None:
method within_pairwise_distances (line 167) | def within_pairwise_distances(self) -> np.ndarray | None:
method between_pairwise_distances (line 176) | def between_pairwise_distances(self) -> np.ndarray | None:
method mean_silhouette_coefficient (line 189) | def mean_silhouette_coefficient(self) -> np.ndarray:
method median_silhouette_coefficient (line 199) | def median_silhouette_coefficient(self) -> np.ndarray:
class ClusterMetrics (line 209) | class ClusterMetrics(ArbitraryPydanticModel):
method _validate_data (line 235) | def _validate_data(self) -> 'ClusterMetrics':
method n_total (line 259) | def n_total(self) -> int:
method unique_labels (line 263) | def unique_labels(self) -> np.ndarray:
method label_count (line 267) | def label_count(self) -> int:
method _label_indices (line 271) | def _label_indices(self) -> dict[int, np.ndarray]:
method _n (line 276) | def _n(self) -> np.ndarray:
method _mean (line 281) | def _mean(self) -> np.ndarray:
method _median (line 289) | def _median(self) -> np.ndarray:
method _var (line 297) | def _var(self) -> np.ndarray:
method _distance (line 305) | def _distance(self) -> np.ndarray:
method _distance_to_mean (line 309) | def _distance_to_mean(self) -> np.ndarray:
method _distance_to_median (line 313) | def _distance_to_median(self) -> np.ndarray:
method _labeled_distance (line 317) | def _labeled_distance(self) -> dict[tuple[int, int], np.ndarray]:
method _labeled_distance_to_centroid (line 328) | def _labeled_distance_to_centroid(self, distance_matrix: np.ndarray) -...
method _labeled_distance_to_mean (line 342) | def _labeled_distance_to_mean(self) -> dict[tuple[int, int], np.ndarray]:
method _labeled_distance_to_median (line 346) | def _labeled_distance_to_median(self) -> dict[tuple[int, int], np.ndar...
method _labeled_distance_to_nearest_cluster (line 349) | def _labeled_distance_to_nearest_cluster(self, agg: str = "mean") -> d...
method _labeled_mean_distance_to_nearest_cluster (line 370) | def _labeled_mean_distance_to_nearest_cluster(self) -> dict[int, np.nd...
method _labeled_median_distance_to_nearest_cluster (line 374) | def _labeled_median_distance_to_nearest_cluster(self) -> dict[int, np....
method _labeled_distance_intra_cluster (line 377) | def _labeled_distance_intra_cluster(self, agg: str = "mean") -> dict[i...
method _labeled_mean_distance_intra_cluster (line 395) | def _labeled_mean_distance_intra_cluster(self) -> dict[int, np.ndarray]:
method _labeled_median_distance_intra_cluster (line 399) | def _labeled_median_distance_intra_cluster(self) -> dict[int, np.ndarr...
method all (line 403) | def all(self) -> SingleClusterMetrics:
method cluster (line 430) | def cluster(self) -> dict[int, SingleClusterMetrics]:
method _WCSM (line 495) | def _WCSM(self) -> dict[int, np.ndarray]:
method _sum_WCSM (line 513) | def _sum_WCSM(self) -> np.ndarray:
method _TSM (line 521) | def _TSM(self) -> np.ndarray:
method _WCSS (line 529) | def _WCSS(self) -> float:
method _BCSS (line 537) | def _BCSS(self) -> float:
method _WC_pairwise_distances (line 548) | def _WC_pairwise_distances(self) -> np.ndarray:
method _BC_pairwise_distances (line 558) | def _BC_pairwise_distances(self) -> np.ndarray:
method _mean_scatter (line 568) | def _mean_scatter(self) -> float:
method sum_of_squared_errors_index (line 585) | def sum_of_squared_errors_index(self) -> float:
method mean_squared_error_index (line 600) | def mean_squared_error_index(self) -> float:
method ball_hall_index (line 618) | def ball_hall_index(self) -> float:
method banfeld_raftery_index (line 633) | def banfeld_raftery_index(self) -> float:
method scott_symons_index (line 653) | def scott_symons_index(self) -> float:
method trace_w_index (line 679) | def trace_w_index(self) -> float:
method _silhouette_coefficients (line 697) | def _silhouette_coefficients(self, variant: str = "mean") -> np.ndarray:
method silhouette_index (line 718) | def silhouette_index(self) -> float:
method silhouette_median_index (line 728) | def silhouette_median_index(self) -> float:
method davies_bouldin_index (line 738) | def davies_bouldin_index(self) -> float:
method calinski_harabasz_index (line 765) | def calinski_harabasz_index(self) -> float:
method variance_ratio_criterion (line 784) | def variance_ratio_criterion(self) -> float:
method dunn_index (line 788) | def dunn_index(self) -> float:
method xie_beni_index (line 835) | def xie_beni_index(self) -> float:
method duda_hart_index (line 885) | def duda_hart_index(self) -> float:
method c_index (line 907) | def c_index(self) -> float:
method mcclain_rao_index (line 942) | def mcclain_rao_index(self) -> float:
method i_index (line 967) | def i_index(self) -> float:
method log_ss_ratio_index (line 1005) | def log_ss_ratio_index(self) -> float:
method gamma_index (line 1034) | def gamma_index(self) -> float:
method point_biserial_index (line 1069) | def point_biserial_index(self) -> float:
method _det_ratio (line 1109) | def _det_ratio(self) -> float:
method ksq_detw_index (line 1126) | def ksq_detw_index(self) -> float:
method det_ratio_index (line 1162) | def det_ratio_index(self) -> float:
method log_det_ratio_index (line 1177) | def log_det_ratio_index(self) -> float:
method trace_wb_index (line 1194) | def trace_wb_index(self) -> float:
method s_dbw_index (line 1220) | def s_dbw_index(self) -> float:
method sd_validity_index (line 1295) | def sd_validity_index(self) -> float:
method density_based_clustering_validation_index (line 1340) | def density_based_clustering_validation_index(self) -> float:
FILE: opendsm/common/clustering/metrics/density_based_clustering_validation.py
function prim_mst (line 45) | def prim_mst(
function compute_pair_to_pair_dists (line 103) | def compute_pair_to_pair_dists(
function get_subarray (line 113) | def get_subarray(
function get_internal_objects (line 127) | def get_internal_objects(
function compute_cluster_core_distance (line 160) | def compute_cluster_core_distance(
function compute_mutual_reach_dists (line 182) | def compute_mutual_reach_dists(
function fn_density_sparseness (line 196) | def fn_density_sparseness(
function fn_density_separation (line 216) | def fn_density_separation(
function _check_duplicated_samples (line 230) | def _check_duplicated_samples(X: npt.NDArray[np.float64], threshold: flo...
function _convert_singleton_clusters_to_noise (line 242) | def _convert_singleton_clusters_to_noise(
function dbcv (line 255) | def dbcv(
FILE: opendsm/common/clustering/scoring.py
function get_max_score_from_system_size (line 29) | def get_max_score_from_system_size() -> float:
function renumber_clusters (line 42) | def renumber_clusters(clusters: np.ndarray, reorder: bool):
function merge_small_clusters (line 74) | def merge_small_clusters(clusters: np.ndarray, min_cluster_size: int):
class LabelResult (line 99) | class LabelResult(BaseModel):
function _score_clusters (line 122) | def _score_clusters(
function score_council (line 203) | def score_council(settings: _settings.ClusteringSettings):
function score_clusters (line 224) | def score_clusters(
FILE: opendsm/common/clustering/settings.py
class NormalizeChoice (line 15) | class NormalizeChoice(str, Enum):
class NormalizeSettings (line 21) | class NormalizeSettings(BaseSettings):
method _check_quantile (line 46) | def _check_quantile(self):
method _check_enable (line 61) | def _check_enable(self):
class TransformChoice (line 76) | class TransformChoice(str, Enum):
class fPCATransformSettings (line 81) | class fPCATransformSettings(BaseSettings):
class PCASelection (line 90) | class PCASelection(str, Enum):
class WaveletSelection (line 95) | class WaveletSelection(str, Enum):
class WaveletTransformSettings (line 108) | class WaveletTransformSettings(BaseSettings):
method _check_seed (line 156) | def _check_seed(self):
method _check_wavelet (line 165) | def _check_wavelet(self):
method _check_pca_settings (line 181) | def _check_pca_settings(self):
class DistanceMetric (line 212) | class DistanceMetric(str, Enum):
class ScoreSettings (line 221) | class ScoreSettings(BaseSettings):
method _check_weights (line 281) | def _check_weights(self):
class ClusterRangeSettings (line 298) | class ClusterRangeSettings(BaseSettings):
method _check_n_cluster_range (line 312) | def _check_n_cluster_range(self):
class BiKmeansInnerAlgorithms (line 321) | class BiKmeansInnerAlgorithms(str, Enum):
class BiKmeansBisectingStrategies (line 326) | class BiKmeansBisectingStrategies(str, Enum):
class BisectingKMeansSettings (line 331) | class BisectingKMeansSettings(BaseSettings):
class BirchSettings (line 363) | class BirchSettings(BaseSettings):
class DbscanDistanceAlgorithm (line 385) | class DbscanDistanceAlgorithm(str, Enum):
class DBSCANSettings (line 391) | class DBSCANSettings(BaseSettings):
class HdbscanClusterSelectionMethod (line 426) | class HdbscanClusterSelectionMethod(str, Enum):
class HDBSCANSettings (line 431) | class HDBSCANSettings(BaseSettings):
class SpectralEigenSolver (line 486) | class SpectralEigenSolver(str, Enum):
class AffinityMatrixOptions (line 491) | class AffinityMatrixOptions(str, Enum):
class SpectralAssignLabels (line 504) | class SpectralAssignLabels(str, Enum):
class SpectralSettings (line 509) | class SpectralSettings(BaseSettings):
method _check_eigen_tol (line 562) | def _check_eigen_tol(self):
class SortMethod (line 572) | class SortMethod(str, Enum):
class AggregateMethod (line 578) | class AggregateMethod(str, Enum):
class ClusterSortSettings (line 583) | class ClusterSortSettings(BaseSettings):
class ClusterAlgorithms (line 605) | class ClusterAlgorithms(str, Enum):
class ClusteringSettings (line 613) | class ClusteringSettings(BaseSettings):
method _check_seed (line 680) | def _check_seed(self):
method _remove_unselected_algorithms (line 694) | def _remove_unselected_algorithms(self):
method _remove_unselected_transform (line 714) | def _remove_unselected_transform(self):
FILE: opendsm/common/clustering/transform.py
function _safe_standardize (line 36) | def _safe_standardize(
function normalize (line 92) | def normalize(
class FpcaError (line 159) | class FpcaError(Exception):
function _fpca_base (line 162) | def _fpca_base(
function fpca_transform (line 217) | def fpca_transform(
function wavelet_transform (line 236) | def wavelet_transform(
function transform_features (line 338) | def transform_features(
FILE: opendsm/common/clustering/voting.py
function construct_voting_df (line 29) | def construct_voting_df(results):
function _shulze_pairwise_preference (line 60) | def _shulze_pairwise_preference(df, voter_weights=None):
function _shulze_path_strength (line 107) | def _shulze_path_strength(Pd, pred):
function _shulze_rank_strength (line 142) | def _shulze_rank_strength(Pd, pred):
function shulze_voting (line 160) | def shulze_voting(df, voter_weights=None, window_size=0, return_preferen...
FILE: opendsm/common/const.py
class CAlgoChoice (line 49) | class CAlgoChoice(str, Enum):
class TutorialDataChoice (line 56) | class TutorialDataChoice(str, Enum):
FILE: opendsm/common/hourly_interpolation.py
function autocorr_fcn (line 30) | def autocorr_fcn(x, lags, exclude_0=True):
function autocorr_fcn2 (line 55) | def autocorr_fcn2(x, lags):
function autocorr_fcn3 (line 68) | def autocorr_fcn3(x, lags):
function multiple_imputation (line 91) | def multiple_imputation(df, columns=None, **kwargs):
function shift_array (line 130) | def shift_array(arr, num, fill_value=np.nan):
function _interpolate_col (line 155) | def _interpolate_col(x, lags):
function interpolate (line 221) | def interpolate(df, columns=None):
FILE: opendsm/common/metrics.py
class ColumnMetrics (line 41) | class ColumnMetrics(ArbitraryPydanticModel):
method sum (line 58) | def sum(self) -> float:
method mean (line 69) | def mean(self) -> float:
method variance (line 83) | def variance(self) -> float:
method std (line 96) | def std(self) -> float:
method cvstd (line 107) | def cvstd(self) -> float:
method sum_squared (line 122) | def sum_squared(self) -> float:
method median (line 135) | def median(self) -> float:
method MAD_scaled (line 148) | def MAD_scaled(self) -> float:
method iqr (line 163) | def iqr(self) -> float:
method skew (line 177) | def skew(self) -> float:
method kurtosis (line 191) | def kurtosis(self) -> float:
function A_n (line 205) | def A_n(x: np.ndarray, n: float) -> float:
class BaselineMetrics (line 222) | class BaselineMetrics(ArbitraryPydanticModel):
method _df (line 357) | def _df(self) -> pd.DataFrame:
method n (line 390) | def n(self) -> float:
method n_prime (line 403) | def n_prime(self) -> float:
method ddof (line 431) | def ddof(self) -> float:
method ddof_autocorr (line 451) | def ddof_autocorr(self) -> float:
method observed (line 471) | def observed(self) -> ColumnMetrics:
method predicted (line 482) | def predicted(self) -> ColumnMetrics:
method residuals (line 493) | def residuals(self) -> ColumnMetrics:
method max_error (line 504) | def max_error(self) -> float:
method mae (line 518) | def mae(self) -> float:
method nmae (line 532) | def nmae(self) -> float:
method pnmae (line 547) | def pnmae(self) -> float:
method medae (line 561) | def medae(self) -> float:
method mbe (line 575) | def mbe(self) -> float:
method nmbe (line 590) | def nmbe(self) -> float:
method pnmbe (line 606) | def pnmbe(self) -> float:
method sse (line 621) | def sse(self) -> float:
method mse (line 635) | def mse(self) -> float:
method rmse (line 649) | def rmse(self) -> float:
method rmse_autocorr (line 663) | def rmse_autocorr(self) -> float:
method rmse_adj (line 677) | def rmse_adj(self) -> float:
method rmse_autocorr_adj (line 691) | def rmse_autocorr_adj(self) -> float:
method cvrmse (line 705) | def cvrmse(self) -> float:
method cvrmse_autocorr (line 721) | def cvrmse_autocorr(self) -> float:
method cvrmse_adj (line 735) | def cvrmse_adj(self) -> float:
method cvrmse_autocorr_adj (line 749) | def cvrmse_autocorr_adj(self) -> float:
method pnrmse (line 765) | def pnrmse(self) -> float:
method pnrmse_autocorr (line 780) | def pnrmse_autocorr(self) -> float:
method pnrmse_adj (line 794) | def pnrmse_adj(self) -> float:
method pnrmse_autocorr_adj (line 808) | def pnrmse_autocorr_adj(self) -> float:
method r_squared (line 824) | def r_squared(self) -> float:
method r_squared_adj (line 839) | def r_squared_adj(self) -> float:
method mape (line 862) | def mape(self) -> float:
method smape (line 884) | def smape(self) -> float:
method wape (line 908) | def wape(self) -> float:
method swape (line 927) | def swape(self) -> float:
method maape (line 949) | def maape(self) -> float:
method nse (line 972) | def nse(self) -> float:
method nnse (line 993) | def nnse(self) -> float:
method kge (line 1008) | def kge(self) -> Optional[float]:
method _relative_errors (line 1036) | def _relative_errors(self) -> np.ndarray:
method a10 (line 1044) | def a10(self) -> float:
method a20 (line 1058) | def a20(self) -> float:
method a30 (line 1072) | def a30(self) -> float:
method wi (line 1086) | def wi(self) -> float:
method index_of_agreement (line 1109) | def index_of_agreement(self) -> float:
method pearson_r (line 1134) | def pearson_r(self) -> float:
method pi (line 1149) | def pi(self) -> float:
method pi_rating (line 1166) | def pi_rating(self) -> str:
method explained_variance_score (line 1196) | def explained_variance_score(self) -> float:
function BaselineMetricsFromDict (line 1214) | def BaselineMetricsFromDict(input_dict: dict) -> BaselineMetrics:
class ModelChoice (line 1235) | class ModelChoice(str, Enum):
class ReportingMetrics (line 1258) | class ReportingMetrics(pydantic.BaseModel):
method _baseline (line 1299) | def _baseline(self) -> BaselineMetrics:
method _df (line 1304) | def _df(self) -> pd.DataFrame:
method n (line 1334) | def n(self) -> float:
method observed_sum (line 1347) | def observed_sum(self) -> float:
method predicted_sum (line 1360) | def predicted_sum(self) -> float:
method t_stat (line 1373) | def t_stat(self) -> float:
method savings (line 1387) | def savings(self) -> float:
method total_savings_uncertainty (line 1401) | def total_savings_uncertainty(self) -> Optional[float]:
method fsu (line 1451) | def fsu(self) -> float:
method predicted_data_point_unc (line 1465) | def predicted_data_point_unc(self) -> Optional[float]:
class AutocorrelationMethod (line 1482) | class AutocorrelationMethod(Enum):
function acf (line 1499) | def acf(
FILE: opendsm/common/pydantic_utils.py
class PydanticDf (line 25) | class PydanticDf(pydantic.BaseModel):
method _check_columns (line 34) | def _check_columns(self):
class ArbitraryPydanticModel (line 59) | class ArbitraryPydanticModel(pydantic.BaseModel):
method _serialize_special_floats (line 63) | def _serialize_special_floats(self, serializer, info):
method _convert_special_floats_to_str (line 73) | def _convert_special_floats_to_str(obj):
method _parse_special_floats (line 88) | def _parse_special_floats(cls, data):
method _convert_str_to_special_floats (line 97) | def _convert_str_to_special_floats(obj):
function PydanticFromDict (line 115) | def PydanticFromDict(input_dict, name="PydanticModel"):
function computed_field_cached_property (line 135) | def computed_field_cached_property():
FILE: opendsm/common/stats/adaptive_loss.py
function sliding_window (line 35) | def sliding_window(
function rolling_IQR_outlier (line 83) | def rolling_IQR_outlier(
function get_C (line 146) | def get_C(
function rolling_C (line 199) | def rolling_C(
function generalized_loss_fcn (line 229) | def generalized_loss_fcn(
function generalized_loss_derivative (line 276) | def generalized_loss_derivative(
function generalized_loss_weights (line 319) | def generalized_loss_weights(
function penalized_loss_fcn (line 362) | def penalized_loss_fcn(
function alpha_scaled (line 400) | def alpha_scaled(
function adaptive_loss_fcn (line 452) | def adaptive_loss_fcn(
function adaptive_weights (line 504) | def adaptive_weights(
FILE: opendsm/common/stats/adaptive_loss_Z.py
function ln_Z (line 225) | def ln_Z(alpha, alpha_min=-100):
FILE: opendsm/common/stats/basic.py
function t_stat (line 40) | def t_stat(alpha: float, n: int, tail: Union[int, str] = 2) -> float:
function z_stat (line 65) | def z_stat(alpha: float, tail: Union[int, str] = 2) -> float:
function unc_factor (line 88) | def unc_factor(
function weighted_std (line 113) | def weighted_std(
function fast_std (line 144) | def fast_std(
function _weighted_quantile (line 180) | def _weighted_quantile(
function weighted_quantile (line 232) | def weighted_quantile(
function _median_absolute_deviation (line 278) | def _median_absolute_deviation(
function median_absolute_deviation (line 314) | def median_absolute_deviation(
FILE: opendsm/common/stats/distribution_transform/bisymlog.py
class Bisymlog (line 32) | class Bisymlog:
method __init__ (line 33) | def __init__(self, C=C_base, heuristic_scaling_factor=0.5, base=10, re...
method set_C_heuristically (line 45) | def set_C_heuristically(self, y, scaling_factor=None): # scaling facto...
method transform (line 86) | def transform(self, y):
method invTransform (line 117) | def invTransform(self, y):
function bisymlog (line 133) | def bisymlog(x, rescale_quantile=None):
FILE: opendsm/common/stats/distribution_transform/mu_sigma.py
function adaptive_weighted_mu_sigma (line 27) | def adaptive_weighted_mu_sigma(x, use_mean=False, rel_err=1E-4, abs_err=...
function ransac_mu_sigma (line 55) | def ransac_mu_sigma(x, n_iter=100, n_sample=100, seed=None):
function robust_mu_sigma (line 74) | def robust_mu_sigma(x, robust_type="huber_m_estimate", **kwargs):
FILE: opendsm/common/stats/distribution_transform/raymaekers_robust_yeo_johnson.py
function _yeo_johnson_base (line 42) | def _yeo_johnson_base(x, lam, deriv):
function _box_cox_base (line 69) | def _box_cox_base(x, lam, deriv):
function rectified_transform (line 88) | def rectified_transform(x, lam, Q, tr_type="Yeo-Johnson"):
function unrectified_transform (line 111) | def unrectified_transform(x, lam, tr_type="Yeo-Johnson"):
function loss_fcn (line 124) | def loss_fcn(x, mu=0, c=1, loss_type="adaptive"):
function _robust_standardize (line 136) | def _robust_standardize(x, robust_type, c_huber):
function initial_lam_obj_fcn_dec (line 143) | def initial_lam_obj_fcn_dec(x, Q, transform_type="Yeo-Johnson", c=0.5, r...
function lam_obj_fcn_dec (line 162) | def lam_obj_fcn_dec(
function normal_transformation (line 197) | def normal_transformation(
function raymaekers_robust_YJ (line 242) | def raymaekers_robust_YJ(x, Q_perc=0.25, c=0.5, outlier_alpha=0.005, c_h...
FILE: opendsm/common/stats/distribution_transform/scipy_yeo_johnson.py
function scipy_YJ (line 24) | def scipy_YJ(x, robust_type="huber_m_estimate"):
function obj_fcn_dec (line 31) | def obj_fcn_dec(x):
function robust_scipy_YJ (line 42) | def robust_scipy_YJ(x, robust_type="huber_m_estimate", method="trim", **...
FILE: opendsm/common/stats/distribution_transform/standardize.py
function robust_standardize (line 18) | def robust_standardize(x, robust_type="iqr", **kwargs):
FILE: opendsm/common/stats/outliers.py
function IQR_outlier (line 28) | def IQR_outlier(data, weights=None, sigma_threshold=3, quantile=0.25):
function _IQR_outlier (line 38) | def _IQR_outlier(data, weights=None, sigma_threshold=3, quantile=0.25):
function remove_outliers (line 56) | def remove_outliers(x, weights=None, sigma_threshold=3, quantile=0.25):
FILE: opendsm/common/stats/outliers_transformed.py
function remove_outliers (line 31) | def remove_outliers(x, weights=None, sigma_threshold=3, quantile=0.25, t...
FILE: opendsm/common/test_data.py
function load_test_data (line 51) | def load_test_data(data_type: str):
function _load_time_series_data (line 87) | def _load_time_series_data(data_type):
function _aggregate_hourly_data (line 125) | def _aggregate_hourly_data(df, agg):
function _load_other_data (line 139) | def _load_other_data(data_type):
function _load_file (line 157) | def _load_file(file: Path | str):
FILE: opendsm/common/utils.py
function np_clip (line 30) | def np_clip(a, a_min, a_max):
function to_np_array (line 90) | def to_np_array(x):
function safe_divide (line 116) | def safe_divide(num, den, min_denominator=1e-3, return_all=True):
function OoM (line 186) | def OoM(x, method="round"):
function OoM_numba (line 194) | def OoM_numba(x, method="round"):
function RoundToSigFigs (line 230) | def RoundToSigFigs(x, p):
function sigmoid (line 248) | def sigmoid(x, x0=0, k=1):
function log_cosh (line 283) | def log_cosh(x):
FILE: opendsm/comparison_groups/cg_clustering/bounds.py
function _get_num_cluster_min (line 20) | def _get_num_cluster_min(
function _get_num_cluster_max (line 50) | def _get_num_cluster_max(
function get_cluster_bounds (line 94) | def get_cluster_bounds(
FILE: opendsm/comparison_groups/cg_clustering/create_comparison_groups.py
class CG_Clustering (line 27) | class CG_Clustering(Comparison_Group_Algorithm):
method __init__ (line 32) | def __init__(self, settings: Optional[_settings.CG_Clustering_Settings...
method get_labels (line 38) | def get_labels(self, comparison_pool_data):
method match_treatment_to_clusters (line 72) | def match_treatment_to_clusters(self, treatment_data):
method get_comparison_group (line 91) | def get_comparison_group(self, treatment_data, comparison_pool_data):
FILE: opendsm/comparison_groups/cg_clustering/settings.py
class AdaptiveLossChoice (line 30) | class AdaptiveLossChoice(str, Enum):
class TreatmentMatchSettings (line 38) | class TreatmentMatchSettings(BaseSettings):
method _check_treatment_match_loss (line 65) | def _check_treatment_match_loss(self):
class _CG_Clustering_Settings (line 91) | class _CG_Clustering_Settings(_settings.ClusteringSettings):
class ClusteringSettings (line 97) | class ClusteringSettings(BaseSettings):
function CG_Clustering_Settings (line 101) | def CG_Clustering_Settings(**kwargs) -> _CG_Clustering_Settings:
FILE: opendsm/comparison_groups/cg_clustering/treatment_fit.py
function _get_cluster_ls (line 33) | def _get_cluster_ls(df_cp_ls: pd.DataFrame, cluster_df: pd.DataFrame, ag...
function fit_to_clusters (line 49) | def fit_to_clusters(
class ClusterTreatmentMatchError (line 128) | class ClusterTreatmentMatchError(Exception):
function _match_treatment_to_cluster (line 132) | def _match_treatment_to_cluster(
function match_treatment_to_clusters (line 190) | def match_treatment_to_clusters(
FILE: opendsm/comparison_groups/common/base_comparison_group.py
class Comparison_Group_Algorithm (line 22) | class Comparison_Group_Algorithm:
method _get_treatment_loadshape (line 35) | def _get_treatment_loadshape(self, id):
method _set_treatment_match_loadshape (line 47) | def _set_treatment_match_loadshape(self):
method _get_treatment_match_loadshape (line 57) | def _get_treatment_match_loadshape(self, id):
method get_comparison_pool_loadshape (line 68) | def get_comparison_pool_loadshape(self):
method get_loadshapes (line 76) | def get_loadshapes(self, id=None):
method _validate_ls_weights (line 92) | def _validate_ls_weights(self, weights):
method plot_loadshapes (line 108) | def plot_loadshapes(self, id=None):
FILE: opendsm/comparison_groups/common/const.py
class DistanceMetric (line 25) | class DistanceMetric(str, Enum):
class AggType (line 36) | class AggType(str, Enum):
class LoadshapeType (line 44) | class LoadshapeType(str, Enum):
class TimePeriod (line 51) | class TimePeriod(str, Enum):
FILE: opendsm/comparison_groups/common/data.py
function is_datetime (line 24) | def is_datetime(x: pd.Series) -> bool:
class Data (line 35) | class Data:
method __init__ (line 36) | def __init__(self,
method extend (line 77) | def extend(self, other):
method _find_groupby_columns (line 97) | def _find_groupby_columns(self) -> list:
method _add_index_columns_from_datetime (line 118) | def _add_index_columns_from_datetime(self, df: pd.DataFrame) -> pd.Dat...
method _create_values_for_interpolation (line 155) | def _create_values_for_interpolation(self, df: pd.DataFrame) -> pd.Dat...
method _validate_unstacked_loadshape (line 190) | def _validate_unstacked_loadshape(self, df: pd.DataFrame) -> pd.DataFr...
method _validate_format_loadshape (line 216) | def _validate_format_loadshape(self, df: pd.DataFrame) -> pd.DataFrame:
method _validate_format_features (line 344) | def _validate_format_features(self, df: pd.DataFrame) -> pd.DataFrame:
method _convert_timeseries_to_loadshape (line 379) | def _convert_timeseries_to_loadshape(
method _trim_data (line 481) | def _trim_data(self) -> None:
method _set_data (line 510) | def _set_data(
method settings (line 583) | def settings(self):
method loadshape (line 587) | def loadshape(self):
method features (line 594) | def features(self):
method ids (line 601) | def ids(self):
method excluded_ids (line 610) | def excluded_ids(self):
FILE: opendsm/comparison_groups/common/data_settings.py
class Season_Definition (line 29) | class Season_Definition(BaseSettings):
method set_numeric_dict (line 47) | def set_numeric_dict(self) -> Season_Definition:
class Weekday_Weekend_Definition (line 62) | class Weekday_Weekend_Definition(BaseSettings):
method set_numeric_dict (line 75) | def set_numeric_dict(self) -> Weekday_Weekend_Definition:
class Data_Settings (line 90) | class Data_Settings(BaseSettings):
method validate_min_data_pct_required (line 130) | def validate_min_data_pct_required(cls, value):
method _set_nested_classes (line 151) | def _set_nested_classes(self):
method _validate_loadshape_time_series_settings (line 166) | def _validate_loadshape_time_series_settings(self):
method _set_min_data_pct_on_interpolate (line 178) | def _set_min_data_pct_on_interpolate(self):
FILE: opendsm/comparison_groups/common/tutorial_data.py
function load_tutorial_data (line 22) | def load_tutorial_data(data_type: str):
FILE: opendsm/comparison_groups/individual_meter_matching/create_comparison_groups.py
class Individual_Meter_Matching (line 28) | class Individual_Meter_Matching(Comparison_Group_Algorithm):
method __init__ (line 29) | def __init__(self, settings: Optional[Settings] = None):
method _create_clusters_df (line 35) | def _create_clusters_df(self, df_raw):
method _create_treatment_weights_df (line 62) | def _create_treatment_weights_df(self, ids):
method get_comparison_group (line 71) | def get_comparison_group(self, treatment_data, comparison_pool_data, w...
method add_treatment_meters (line 100) | def add_treatment_meters(self, treatment_data):
FILE: opendsm/comparison_groups/individual_meter_matching/distance_calc_selection.py
function cp_chunks (line 30) | def cp_chunks(lst, n):
function _distances (line 35) | def _distances(ls_t, ls_cp, weights=None, dist_metric="euclidean", n_met...
function highs_fit_comparison_group_loadshape (line 59) | def highs_fit_comparison_group_loadshape(t_ls, cp_ls, coef_sum=1, solver...
class DistanceMatchingError (line 100) | class DistanceMatchingError(Exception):
class DistanceMatching (line 104) | class DistanceMatching:
method __init__ (line 118) | def __init__(
method _closest_idx_duplicates_allowed (line 135) | def _closest_idx_duplicates_allowed(self, distances, n_match=None):
method _closest_idx_duplicates_not_allowed (line 148) | def _closest_idx_duplicates_not_allowed(self, ls_t, ls_cp, distances):
method get_comparison_group (line 196) | def get_comparison_group(
FILE: opendsm/comparison_groups/individual_meter_matching/highs_settings.py
class HiGHS_Settings (line 30) | class HiGHS_Settings(BaseSettings):
method _random_seed (line 478) | def _random_seed(self):
FILE: opendsm/comparison_groups/individual_meter_matching/settings.py
class SelectionMethod (line 26) | class SelectionMethod(str, Enum):
class Settings (line 31) | class Settings(BaseSettings):
method _check_allow_duplicates (line 75) | def _check_allow_duplicates(self):
FILE: opendsm/comparison_groups/random_sampling/create_comparison_groups.py
class Random_Sampling (line 26) | class Random_Sampling(Comparison_Group_Algorithm):
method __init__ (line 27) | def __init__(self, settings: Optional[Settings] = None):
method _create_clusters_df (line 33) | def _create_clusters_df(self, df_raw):
method _create_treatment_weights_df (line 45) | def _create_treatment_weights_df(self, ids):
method get_comparison_group (line 54) | def get_comparison_group(self, treatment_data, comparison_pool_data, w...
FILE: opendsm/comparison_groups/random_sampling/settings.py
class Settings (line 23) | class Settings(BaseSettings):
method _check_n_meters_choice (line 45) | def _check_n_meters_choice(self):
FILE: opendsm/comparison_groups/savings/cg_correction_testing.py
function get_t_cg_df (line 29) | def get_t_cg_df(data, num_treatment=None, num_control=None, seed=21):
function get_comparison_groups (line 67) | def get_comparison_groups(df_t, df_cp, agg, cg_type="cluster", multiproc...
function add_datetime_loadshape_mapping_col (line 92) | def add_datetime_loadshape_mapping_col(df, data_settings):
class Savings (line 117) | class Savings:
method __init__ (line 118) | def __init__(self, df_t, df_cp, df_cluster_id, df_t_coeffs, agg_type="...
method _initialize_df (line 138) | def _initialize_df(self, df, is_treatment=False):
method _agg_cluster_data (line 173) | def _agg_cluster_data(self):
method _get_treatment_cg_data (line 225) | def _get_treatment_cg_data(self):
method add_pct_did (line 271) | def add_pct_did(self, simplified_eqn=False):
method add_abs_pct_did (line 284) | def add_abs_pct_did(self, simplified_eqn=False):
method add_sig_pct_did (line 301) | def add_sig_pct_did(self, k=0.01, m_0=0.1):
method add_scaled_ordinary_did (line 324) | def add_scaled_ordinary_did(self):
method add_modeled_scaled_ordinary_did (line 359) | def add_modeled_scaled_ordinary_did(self):
method _get_did_cols (line 393) | def _get_did_cols(self):
method df (line 400) | def df(self):
method df_agg (line 418) | def df_agg(self, period="reporting"):
method df_stats (line 441) | def df_stats(self, period="reporting"):
FILE: opendsm/comparison_groups/savings/model_correction.py
function _unit_correction_unc (line 28) | def _unit_correction_unc(
function _unit_correction (line 96) | def _unit_correction(
function _update_mask (line 171) | def _update_mask(global_mask, mask=None, idx_valid=None, idx_invalid=None):
function _apply_mask (line 189) | def _apply_mask(mask, *arrays):
function _effective_sample_size (line 207) | def _effective_sample_size(weight):
function _cluster_correction (line 214) | def _cluster_correction(
function model_correction (line 321) | def model_correction(
FILE: opendsm/comparison_groups/savings/settings.py
class TransformChoice (line 26) | class TransformChoice(str, Enum):
class OutlierRejectionSettings (line 34) | class OutlierRejectionSettings(BaseSettings):
class CorrectionCapChoice (line 61) | class CorrectionCapChoice(str, Enum):
class CorrectionCapSettings (line 66) | class CorrectionCapSettings(BaseSettings):
method _check_solar_cap (line 90) | def _check_solar_cap(self):
class CorrectionAlgorithm (line 105) | class CorrectionAlgorithm(str, Enum):
class WeightClusterAggChoice (line 111) | class WeightClusterAggChoice(str, Enum):
class CGCorrectionSettings (line 115) | class CGCorrectionSettings(BaseSettings):
FILE: opendsm/comparison_groups/stratified_sampling/bin_selection.py
class StratifiedSamplingBinSelector (line 28) | class StratifiedSamplingBinSelector(object):
method __init__ (line 29) | def __init__(
method kwargs_as_json (line 331) | def kwargs_as_json(self):
method results_as_json (line 343) | def results_as_json(self):
method plot_records_based_equiv_average (line 372) | def plot_records_based_equiv_average(self, plot=True):
FILE: opendsm/comparison_groups/stratified_sampling/bins.py
class ModelSamplingException (line 24) | class ModelSamplingException(Exception):
class BinnedData (line 28) | class BinnedData:
method __init__ (line 29) | def __init__(self, df, binning, min_n_treatment_per_bin=0):
method _map_bins (line 36) | def _map_bins(self, df):
method count_bins_1d (line 45) | def count_bins_1d(self, column):
method count_bins (line 64) | def count_bins(self, skip_outliers=False):
method _outlier_bins (line 77) | def _outlier_bins(self):
method _flag_outliers (line 86) | def _flag_outliers(self):
class Binning (line 94) | class Binning(object):
method __init__ (line 97) | def __init__(self):
method edges (line 102) | def edges(self):
method edges_xy (line 105) | def edges_xy(self, col_x, col_y):
method bin (line 117) | def bin(self, values, column_name, n_bins, fixed_width):
method _add_column (line 130) | def _add_column(self, column, edges):
method _update_multibins (line 140) | def _update_multibins(self):
class Bin (line 146) | class Bin:
method __init__ (line 149) | def __init__(self, column, min, max, index):
method filter_expr (line 155) | def filter_expr(self):
method __str__ (line 160) | def __str__(self):
method __repr__ (line 163) | def __repr__(self):
class MultiBin (line 167) | class MultiBin:
method __init__ (line 170) | def __init__(self, bins):
method filter_expr (line 176) | def filter_expr(self):
method get_max_n_target (line 181) | def get_max_n_target(self, df):
method sample (line 184) | def sample(self, df, n_target, min_n_treatment_per_bin, random_seed=1):
method edges (line 201) | def edges(self):
method __str__ (line 215) | def __str__(self):
method __repr__ (line 218) | def __repr__(self):
function sample_bins (line 222) | def sample_bins(
function get_counts_and_update_n_samples_approx (line 251) | def get_counts_and_update_n_samples_approx(
FILE: opendsm/comparison_groups/stratified_sampling/const.py
class DistanceMetric (line 20) | class DistanceMetric(str, Enum):
FILE: opendsm/comparison_groups/stratified_sampling/create_comparison_groups.py
class Stratified_Sampling (line 31) | class Stratified_Sampling(Comparison_Group_Algorithm):
method __init__ (line 32) | def __init__(self, settings: Optional[Settings] = None):
method _create_clusters_df (line 55) | def _create_clusters_df(self, ids):
method _create_treatment_weights_df (line 66) | def _create_treatment_weights_df(self, ids):
method _create_output_dfs (line 74) | def _create_output_dfs(self, t_ids):
method get_comparison_group (line 92) | def get_comparison_group(self, treatment_data, comparison_pool_data):
method diagnostics (line 150) | def diagnostics(self):
FILE: opendsm/comparison_groups/stratified_sampling/diagnostics.py
function t_and_ks_test (line 33) | def t_and_ks_test(x, y, thresh=0.05):
class DiagnosticPlotter (line 56) | class DiagnosticPlotter:
method quantile (line 57) | def quantile(self, df, df_equiv, cols=None):
method scatter (line 124) | def scatter(self, df, cols=None):
method _scatter (line 132) | def _scatter(self, df, col_x, col_y):
method histogram (line 173) | def histogram(self, df, cols=None):
method _histogram (line 179) | def _histogram(self, df, col):
class StratifiedSamplingDiagnostics (line 210) | class StratifiedSamplingDiagnostics(DiagnosticPlotter):
method __init__ (line 242) | def __init__(self, model):
method histogram (line 285) | def histogram(self, cols=None):
method scatter (line 288) | def scatter(self, cols=None):
method quantile_equivalence (line 291) | def quantile_equivalence(self, cols=None):
method _check_equiv_labels (line 295) | def _check_equiv_labels(self, equiv_label_x, equiv_label_y):
method equivalence (line 318) | def equivalence(self, cols=None, equiv_label_x=None, equiv_label_y=None):
method equivalence_passed (line 365) | def equivalence_passed(self, cols=None):
method count_bins (line 369) | def count_bins(self):
method n_sampled_to_n_treatment_ratio (line 394) | def n_sampled_to_n_treatment_ratio(self):
FILE: opendsm/comparison_groups/stratified_sampling/equivalence.py
function ids_to_index (line 21) | def ids_to_index(subset_ids, all_ids):
class Equivalence (line 35) | class Equivalence:
method __init__ (line 55) | def __init__(self, ix_x, ix_y, features_matrix, n_quantiles=1, how='eu...
method compute (line 73) | def compute(self):
function reshape_outputs (line 82) | def reshape_outputs(means, quantiles):
function get_quantile_indexes (line 93) | def get_quantile_indexes(n_quantiles):
function get_quantiles (line 96) | def get_quantiles(col, n_quantiles):
function cut_column (line 99) | def cut_column(col, q_this, q_next):
function quantile_means_array (line 105) | def quantile_means_array(col, n_quantiles):
function quantile_means_population (line 116) | def quantile_means_population(X, Y, n_quantiles):
function chisquare_dist (line 135) | def chisquare_dist(X,Y):
function get_distance_func (line 141) | def get_distance_func(how="euclidean"):
function sum_column_distance (line 150) | def sum_column_distance(means_x, means_y, how="euclidean"):
FILE: opendsm/comparison_groups/stratified_sampling/model.py
class StratifiedSampling (line 34) | class StratifiedSampling(object):
method __init__ (line 71) | def __init__(
method _chop_outliers (line 84) | def _chop_outliers(self, df):
method _perturb (line 92) | def _perturb(self, df_orig, col_names=None, random_seed=1):
method add_column (line 104) | def add_column(
method _check_columns_present (line 149) | def _check_columns_present(self, df):
method fit_and_sample (line 160) | def fit_and_sample(
method print_n_bins (line 264) | def print_n_bins(self):
method get_all_n_bins_as_str (line 267) | def get_all_n_bins_as_str(self):
method get_n_bins (line 272) | def get_n_bins(self, col_name):
method set_n_bins (line 276) | def set_n_bins(self, col_name, n_bins):
method fit (line 281) | def fit(self, df_treatment, min_n_treatment_per_bin=0, random_seed=1):
method diagnostics (line 327) | def diagnostics(self):
method sample (line 330) | def sample(
FILE: opendsm/comparison_groups/stratified_sampling/param_selection.py
function get_prob_bins (line 19) | def get_prob_bins(df, df_comparison, col, bins=20, fixed_count=True):
function get_kl_divs (line 38) | def get_kl_divs(df_treat, df_compare, **kwargs):
function choose_params (line 64) | def choose_params(difs, corr_matrix, thresh=0.75, num_params=3):
function get_params (line 78) | def get_params(treatment, comparison, thresh=0.75, num_params=3, **kwargs):
FILE: opendsm/comparison_groups/stratified_sampling/settings.py
class StratificationColumnSettings (line 25) | class StratificationColumnSettings(BaseSettings):
class DSS_StratificationColumnSettings (line 59) | class DSS_StratificationColumnSettings(StratificationColumnSettings):
class Settings (line 67) | class Settings(BaseSettings):
class StratifiedSamplingSettings (line 88) | class StratifiedSamplingSettings(Settings):
method _set_nested_classes (line 138) | def _set_nested_classes(self):
class DistanceStratifiedSamplingSettings (line 161) | class DistanceStratifiedSamplingSettings(Settings):
method _set_nested_classes (line 225) | def _set_nested_classes(self):
FILE: opendsm/drmeter/models/caltrack/model.py
class Model (line 18) | class Model(HourlyModel):
method __init__ (line 19) | def __init__(self, settings=None):
FILE: opendsm/eemeter/common/data_processor_utilities.py
function remove_duplicates (line 26) | def remove_duplicates(df_or_series):
function day_counts (line 43) | def day_counts(index):
function clean_billing_data (line 69) | def clean_billing_data(data, source_interval, warnings):
function as_freq (line 179) | def as_freq(
function downsample_and_clean_daily_data (line 298) | def downsample_and_clean_daily_data(dataset, warnings):
function clean_billing_daily_data (line 323) | def clean_billing_daily_data(data, source_interval, warnings):
function compute_minimum_granularity (line 338) | def compute_minimum_granularity(index: pd.Series, default_granularity: O...
FILE: opendsm/eemeter/common/data_settings.py
class ColumnSufficiencySettings (line 29) | class ColumnSufficiencySettings(MutableBaseSettings):
class TemperatureSufficiencySettings (line 59) | class TemperatureSufficiencySettings(ColumnSufficiencySettings):
class GhiSufficiencySettings (line 63) | class GhiSufficiencySettings(MutableBaseSettings):
class ObservedSufficiencySettings (line 72) | class ObservedSufficiencySettings(MutableBaseSettings):
class JointSufficiencySettings (line 95) | class JointSufficiencySettings(MutableBaseSettings):
class BaseSufficiencySettings (line 104) | class BaseSufficiencySettings(MutableBaseSettings):
method convert_float_to_int (line 145) | def convert_float_to_int(cls, v):
method check_baseline_lengths (line 151) | def check_baseline_lengths(self):
class DailyDataSufficiencySettings (line 162) | class DailyDataSufficiencySettings(BaseSufficiencySettings):
class BillingDataSufficiencySettings (line 166) | class BillingDataSufficiencySettings(BaseSufficiencySettings):
method convert_float_to_int (line 189) | def convert_float_to_int(cls, v):
class HourlyTemperatureSufficiencySettings (line 195) | class HourlyTemperatureSufficiencySettings(TemperatureSufficiencySettings):
method convert_float_to_int (line 204) | def convert_float_to_int(cls, v):
class HourlyDataSufficiencySettings (line 209) | class HourlyDataSufficiencySettings(BaseSufficiencySettings):
class BaseDataSettings (line 215) | class BaseDataSettings(MutableBaseSettings):
class DailyDataSettings (line 227) | class DailyDataSettings(BaseDataSettings):
class BillingDataSettings (line 232) | class BillingDataSettings(BaseDataSettings):
class HourlyDataSettings (line 237) | class HourlyDataSettings(BaseDataSettings):
FILE: opendsm/eemeter/common/exceptions.py
class EEMeterError (line 26) | class EEMeterError(Exception):
class NoBaselineDataError (line 32) | class NoBaselineDataError(EEMeterError):
class NoReportingDataError (line 38) | class NoReportingDataError(EEMeterError):
class MissingModelParameterError (line 44) | class MissingModelParameterError(EEMeterError):
class UnrecognizedModelTypeError (line 50) | class UnrecognizedModelTypeError(EEMeterError):
class DataSufficiencyError (line 56) | class DataSufficiencyError(EEMeterError):
class DisqualifiedModelError (line 62) | class DisqualifiedModelError(EEMeterError):
FILE: opendsm/eemeter/common/features.py
function merge_features (line 36) | def merge_features(features, keep_partial_nan_rows=False):
function compute_usage_per_day_feature (line 67) | def compute_usage_per_day_feature(meter_data, series_name="usage_per_day"):
function get_missing_hours_of_week_warning (line 88) | def get_missing_hours_of_week_warning(hours_of_week):
function compute_time_features (line 114) | def compute_time_features(index, hour_of_week=True, day_of_week=True, ho...
function _matching_groups (line 168) | def _matching_groups(index, df, tolerance):
function _degree_day_columns (line 183) | def _degree_day_columns(
function compute_temperature_features (line 294) | def compute_temperature_features(
function _estimate_hour_of_week_occupancy (line 546) | def _estimate_hour_of_week_occupancy(model_data, threshold):
function estimate_hour_of_week_occupancy (line 582) | def estimate_hour_of_week_occupancy(data, segmentation=None, threshold=0...
function _fit_temperature_bins (line 624) | def _fit_temperature_bins(temperature_data, default_bins, min_temperatur...
function fit_temperature_bins (line 681) | def fit_temperature_bins(
function compute_temperature_bin_features (line 813) | def compute_temperature_bin_features(temperatures, bin_endpoints):
function compute_occupancy_feature (line 865) | def compute_occupancy_feature(hour_of_week, occupancy):
FILE: opendsm/eemeter/common/sufficiency_criteria.py
class SufficiencyCriteria (line 38) | class SufficiencyCriteria(BaseSettings):
method _has_ghi (line 59) | def _has_ghi(self) -> bool:
method n_days_total (line 63) | def n_days_total(self) -> int:
method _compute_valid_day_counts (line 91) | def _compute_valid_day_counts(self):
method n_valid_temperature_days (line 117) | def n_valid_temperature_days(self) -> int:
method n_valid_observed_days (line 124) | def n_valid_observed_days(self) -> int:
method n_valid_days (line 131) | def n_valid_days(self) -> int:
method _check_no_data (line 137) | def _check_no_data(self):
method _check_n_days_boundary_gap (line 149) | def _check_n_days_boundary_gap(self, gap_type: Literal["start", "end"]):
method _check_baseline_day_length (line 183) | def _check_baseline_day_length(self):
method _check_negative_observed_values (line 203) | def _check_negative_observed_values(self):
method _check_valid_days_percentage (line 223) | def _check_valid_days_percentage(self, col: Literal["temperature", "gh...
method _check_valid_monthly_coverage (line 270) | def _check_valid_monthly_coverage(self, col: Literal["temperature", "g...
method _check_season_weekday_weekend_availability (line 309) | def _check_season_weekday_weekend_availability(self):
method _check_extreme_values (line 314) | def _check_extreme_values(self):
method _check_high_frequency_temperature_values (line 356) | def _check_high_frequency_temperature_values(self):
method _check_high_frequency_observed_values (line 392) | def _check_high_frequency_observed_values(self):
method check_sufficiency_baseline (line 411) | def check_sufficiency_baseline(self):
method check_sufficiency_reporting (line 423) | def check_sufficiency_reporting(self):
class DailySufficiencyCriteria (line 432) | class DailySufficiencyCriteria(SufficiencyCriteria):
method __init__ (line 437) | def __init__(self, *args, **kwargs):
method check_sufficiency_baseline (line 440) | def check_sufficiency_baseline(self):
method check_sufficiency_reporting (line 449) | def check_sufficiency_reporting(self):
class BillingSufficiencyCriteria (line 453) | class BillingSufficiencyCriteria(SufficiencyCriteria):
method __init__ (line 458) | def __init__(self, *args, **kwargs):
method _check_observed_data_billing_monthly (line 461) | def _check_observed_data_billing_monthly(self):
method _check_observed_data_billing_bimonthly (line 488) | def _check_observed_data_billing_bimonthly(self):
method _check_estimated_observed_values (line 514) | def _check_estimated_observed_values(self):
method check_sufficiency_baseline (line 569) | def check_sufficiency_baseline(self):
method check_sufficiency_reporting (line 581) | def check_sufficiency_reporting(self):
class HourlySufficiencyCriteria (line 585) | class HourlySufficiencyCriteria(SufficiencyCriteria):
method __init__ (line 590) | def __init__(self, *args, **kwargs):
method _check_baseline_length_hourly_model (line 593) | def _check_baseline_length_hourly_model(self):
method _check_hourly_consecutive_temperature_data (line 596) | def _check_hourly_consecutive_temperature_data(self):
method check_sufficiency_baseline (line 615) | def check_sufficiency_baseline(self):
method check_sufficiency_reporting (line 628) | def check_sufficiency_reporting(self):
FILE: opendsm/eemeter/common/transform.py
function overwrite_partial_rows_with_nan (line 43) | def overwrite_partial_rows_with_nan(df):
function remove_duplicates (line 47) | def remove_duplicates(df_or_series):
function as_freq (line 64) | def as_freq(
function day_counts (line 161) | def day_counts(index):
function _make_baseline_warnings (line 187) | def _make_baseline_warnings(
function get_baseline_data (line 222) | def get_baseline_data(
function _make_reporting_warnings (line 353) | def _make_reporting_warnings(
function get_reporting_data (line 388) | def get_reporting_data(
class Term (line 507) | class Term(object):
method __init__ (line 537) | def __init__(
method __repr__ (line 559) | def __repr__(self):
function get_terms (line 571) | def get_terms(index, term_lengths, term_labels=None, start=None, method=...
function clean_caltrack_billing_data (line 683) | def clean_caltrack_billing_data(data, source_interval):
function downsample_and_clean_caltrack_daily_data (line 765) | def downsample_and_clean_caltrack_daily_data(data):
function clean_caltrack_billing_daily_data (line 777) | def clean_caltrack_billing_daily_data(data, source_interval):
function add_freq (line 791) | def add_freq(idx, freq=None):
function trim (line 829) | def trim(*args, freq="h", tz="UTC"):
function _check_input_formatting (line 887) | def _check_input_formatting(input, tz="UTC"):
function _format_data_for_caltrack_hourly (line 915) | def _format_data_for_caltrack_hourly(df, tz="UTC"):
function format_energy_data_for_caltrack (line 925) | def format_energy_data_for_caltrack(*args, method="hourly", tz="UTC"):
function format_temperature_data_for_caltrack (line 975) | def format_temperature_data_for_caltrack(temperature_data, tz="UTC"):
FILE: opendsm/eemeter/common/warnings.py
class EEMeterWarning (line 22) | class EEMeterWarning(pydantic.BaseModel):
method __repr__ (line 40) | def __repr__(self):
method __str__ (line 43) | def __str__(self):
method json (line 46) | def json(self) -> dict:
method warn (line 58) | def warn(self):
FILE: opendsm/eemeter/models/billing/data.py
class _BillingData (line 45) | class _BillingData(_DailyData):
method _compute_meter_value_df (line 57) | def _compute_meter_value_df(self, df: pd.DataFrame):
method _compute_temperature_features (line 139) | def _compute_temperature_features(
method billing_df (line 285) | def billing_df(self) -> pd.DataFrame | None:
class BillingBaselineData (line 339) | class BillingBaselineData(_BillingData):
method _check_data_sufficiency (line 361) | def _check_data_sufficiency(self, sufficiency_df):
class BillingReportingData (line 393) | class BillingReportingData(_BillingData):
method __init__ (line 414) | def __init__(
method from_series (line 427) | def from_series(
method _check_data_sufficiency (line 466) | def _check_data_sufficiency(self, sufficiency_df):
FILE: opendsm/eemeter/models/billing/model.py
class BillingModel (line 32) | class BillingModel(DailyModel):
method __init__ (line 58) | def __init__(self, settings=None, verbose: bool = False,):
method fit (line 61) | def fit(
method predict (line 68) | def predict(
method plot (line 149) | def plot(
method to_dict (line 169) | def to_dict(self) -> dict:
FILE: opendsm/eemeter/models/billing/plot.py
function adjust_lightness (line 28) | def adjust_lightness(color, amount=1.0):
function plot (line 39) | def plot(
FILE: opendsm/eemeter/models/billing/settings.py
class BillingSettings (line 23) | class BillingSettings(DailyLegacySettings):
FILE: opendsm/eemeter/models/billing/weighted_model.py
class BillingWeightedModel (line 33) | class BillingWeightedModel(DailyModel):
method __init__ (line 61) | def __init__(
method _initialize_settings (line 70) | def _initialize_settings(
method fit (line 84) | def fit(
method predict (line 91) | def predict(
method plot (line 172) | def plot(
method to_dict (line 192) | def to_dict(self) -> dict:
FILE: opendsm/eemeter/models/daily/base_models/c_hdd_tidd.py
function fit_c_hdd_tidd (line 37) | def fit_c_hdd_tidd(
function set_full_model_coeffs_smooth (line 151) | def set_full_model_coeffs_smooth(c_hdd_bp, c_hdd_beta, c_hdd_k, intercept):
function set_full_model_coeffs (line 178) | def set_full_model_coeffs(c_hdd_bp, c_hdd_beta, intercept):
function _c_hdd_tidd_update_bnds (line 192) | def _c_hdd_tidd_update_bnds(new_bnds, bnds, smooth):
function _tdd_coefficients (line 225) | def _tdd_coefficients(
function _c_hdd_tidd_x0 (line 267) | def _c_hdd_tidd_x0(T, obs, alpha, settings, smooth):
function _c_hdd_tidd_x0_final (line 307) | def _c_hdd_tidd_x0_final(T, obs, x0, alpha, settings):
function _c_hdd_tidd_bp0 (line 331) | def _c_hdd_tidd_bp0(T, obs, alpha, settings, min_weight=0.0):
function _c_hdd_tidd (line 403) | def _c_hdd_tidd(
function _c_hdd_tidd_smooth (line 410) | def _c_hdd_tidd_smooth(
function _c_hdd_tidd_weight (line 417) | def _c_hdd_tidd_weight(
function _c_hdd_tidd_smooth_weight (line 434) | def _c_hdd_tidd_smooth_weight(
function _c_hdd_tidd_total_sum_of_squares (line 469) | def _c_hdd_tidd_total_sum_of_squares(c_hdd_bp, c_hdd_beta, intercept, T,...
FILE: opendsm/eemeter/models/daily/base_models/full_model.py
function full_model (line 23) | def full_model(
function get_full_model_x (line 102) | def get_full_model_x(model_key, x, T_min, T_max, T_min_seg, T_max_seg):
function fix_full_model_x (line 165) | def fix_full_model_x(x, T_min_seg, T_max_seg):
function full_model_weight (line 204) | def full_model_weight(
FILE: opendsm/eemeter/models/daily/base_models/hdd_tidd_cdd.py
function fit_hdd_tidd_cdd (line 37) | def fit_hdd_tidd_cdd(
function _hdd_tidd_cdd (line 129) | def _hdd_tidd_cdd(
function _hdd_tidd_cdd_smooth (line 146) | def _hdd_tidd_cdd_smooth(*args):
function evaluate_hdd_tidd_cdd_smooth (line 150) | def evaluate_hdd_tidd_cdd_smooth(
function _hdd_tidd_cdd_smooth_x0 (line 170) | def _hdd_tidd_cdd_smooth_x0(T, obs, alpha, settings, smooth, min_weight=...
function estimate_betas_and_intercept (line 302) | def estimate_betas_and_intercept(T, obs, hdd_bp, cdd_bp, min_T_idx, alpha):
function _hdd_tidd_cdd_smooth_update_bnds (line 333) | def _hdd_tidd_cdd_smooth_update_bnds(new_bnds, bnds, smooth):
function _hdd_tidd_cdd_weight (line 365) | def _hdd_tidd_cdd_weight(
function _hdd_tidd_cdd_smooth_weight (line 386) | def _hdd_tidd_cdd_smooth_weight(
function _hdd_tidd_cdd_total_sum_of_squares (line 408) | def _hdd_tidd_cdd_total_sum_of_squares(
FILE: opendsm/eemeter/models/daily/base_models/tidd.py
function fit_tidd (line 30) | def fit_tidd(
function _tidd_x0 (line 72) | def _tidd_x0(T, obs):
function set_full_model_coeffs (line 78) | def set_full_model_coeffs(intercept):
function _tidd (line 84) | def _tidd(intercept, T_fit_bnds=np.array([]), T=np.array([])):
function _tidd_total_sum_of_squares (line 90) | def _tidd_total_sum_of_squares(intercept, T, obs):
function _tidd_update_bnds (line 96) | def _tidd_update_bnds(new_bnds, bnds):
function _tidd_weight (line 105) | def _tidd_weight(
FILE: opendsm/eemeter/models/daily/data.py
class _DailyData (line 37) | class _DailyData:
method __init__ (line 50) | def __init__(
method df (line 85) | def df(self) -> pd.DataFrame | None:
method from_series (line 94) | def from_series(
method log_warnings (line 225) | def log_warnings(self) -> None:
method _compute_meter_value_df (line 236) | def _compute_meter_value_df(self, df: pd.DataFrame):
method _compute_temperature_features (line 299) | def _compute_temperature_features(
method _merge_meter_temp (line 434) | def _merge_meter_temp(self, meter, temp):
method _check_data_sufficiency (line 468) | def _check_data_sufficiency(self, sufficiency_df):
method _set_data (line 473) | def _set_data(self, data: pd.DataFrame):
class DailyBaselineData (line 553) | class DailyBaselineData(_DailyData):
method _check_data_sufficiency (line 573) | def _check_data_sufficiency(self, sufficiency_df):
class DailyReportingData (line 601) | class DailyReportingData(_DailyData):
method __init__ (line 622) | def __init__(
method from_series (line 635) | def from_series(
method _check_data_sufficiency (line 678) | def _check_data_sufficiency(self, sufficiency_df):
FILE: opendsm/eemeter/models/daily/fit_base_models.py
function _get_opt_settings (line 27) | def _get_opt_settings(settings):
function fit_initial_models_from_full_model (line 47) | def fit_initial_models_from_full_model(df_meter, settings, print_res=Fal...
function fit_model (line 93) | def fit_model(model_key, fit_input, x0: ModelCoefficients, bnds):
function fit_final_model (line 133) | def fit_final_model(df_meter, HoF: OptimizedResult, settings, print_res=...
FILE: opendsm/eemeter/models/daily/model.py
class DailyModel (line 52) | class DailyModel:
method __init__ (line 78) | def __init__(
method _initialize_settings (line 117) | def _initialize_settings(
method fit (line 138) | def fit(
method _fit (line 170) | def _fit(self, meter_data):
method predict (line 194) | def predict(
method _predict (line 241) | def _predict(self, df_eval, mask_observed_with_missing_temperature=True):
method _check_model_fit (line 295) | def _check_model_fit(self):
method to_dict (line 329) | def to_dict(self) -> dict:
method to_json (line 337) | def to_json(self) -> str:
method from_dict (line 346) | def from_dict(cls, data) -> DailyModel:
method from_json (line 400) | def from_json(cls, str_data: str) -> DailyModel:
method from_2_0_dict (line 413) | def from_2_0_dict(cls, data) -> DailyModel:
method from_2_0_json (line 432) | def from_2_0_json(cls, str_data: str) -> DailyModel:
method plot (line 444) | def plot(
method _create_params_from_fit_model (line 462) | def _create_params_from_fit_model(self):
method _initialize_data (line 489) | def _initialize_data(self, meter_data):
method _combinations (line 545) | def _combinations(self):
method _meter_segment (line 770) | def _meter_segment(self, component, meter=None):
method _components (line 797) | def _components(self):
method _fit_components (line 809) | def _fit_components(self):
method _combination_selection_criteria (line 844) | def _combination_selection_criteria(self, combination):
method _best_combination (line 880) | def _best_combination(self, print_out=False):
method _final_fit (line 907) | def _final_fit(self, combination):
method _get_error_metrics (line 952) | def _get_error_metrics(self, combination):
method _predict_submodel (line 999) | def _predict_submodel(self, submodel, T):
FILE: opendsm/eemeter/models/daily/objective_function.py
function get_idx (line 21) | def get_idx(A, B):
function no_weights_obj_fcn (line 45) | def no_weights_obj_fcn(X, aux_inputs):
function model_fcn_dec (line 71) | def model_fcn_dec(model_fcn_full, T_fit_bnds, T):
function obj_fcn_decorator (line 94) | def obj_fcn_decorator(
FILE: opendsm/eemeter/models/daily/optimize.py
function obj_fcn_dec (line 81) | def obj_fcn_dec(obj_fcn, x0, bnds):
class BaseOptimizedResult (line 107) | class BaseOptimizedResult:
class BaseOptimizer (line 124) | class BaseOptimizer:
method __init__ (line 125) | def __init__(self, obj_fcn, x0, bnds, settings):
class SciPyOptimizer (line 147) | class SciPyOptimizer(BaseOptimizer):
method run (line 148) | def run(self):
class NLoptOptimizer (line 210) | class NLoptOptimizer(BaseOptimizer):
method run (line 211) | def run(self):
class InitialGuessOptimizer (line 314) | class InitialGuessOptimizer:
method __init__ (line 315) | def __init__(self, obj_fcn, x0, bnds, settings):
method run (line 332) | def run(self):
class Optimizer (line 363) | class Optimizer:
method __init__ (line 378) | def __init__(self, obj_fcn, x0, bnds, coef_id, settings, opt_settings):
method run (line 399) | def run(self):
FILE: opendsm/eemeter/models/daily/optimize_results.py
function get_k (line 32) | def get_k(X, T_min_seg, T_max_seg):
function reduce_model (line 72) | def reduce_model(
class OptimizedResult (line 189) | class OptimizedResult:
method __init__ (line 190) | def __init__(
method _prediction_uncertainty (line 316) | def _prediction_uncertainty(self): # based on std
method _set_model_key (line 329) | def _set_model_key(self):
method _refine_model (line 362) | def _refine_model(self):
method eval (line 384) | def eval(self, T):
FILE: opendsm/eemeter/models/daily/parameters.py
class ModelType (line 22) | class ModelType(str, Enum):
class ModelCoefficients (line 39) | class ModelCoefficients(BaseModel):
method is_smooth (line 113) | def is_smooth(self):
method model_key (line 121) | def model_key(self):
method from_np_arrays (line 135) | def from_np_arrays(cls, coefficients, coefficient_ids):
method to_np_array (line 267) | def to_np_array(self):
class DailySubmodelParameters (line 318) | class DailySubmodelParameters(BaseModel):
method model_type (line 324) | def model_type(self):
class DailyModelParameters (line 328) | class DailyModelParameters(BaseModel):
method from_2_0_params (line 334) | def from_2_0_params(cls, data):
FILE: opendsm/eemeter/models/daily/plot.py
function adjust_lightness (line 32) | def adjust_lightness(color, amount=1.0):
function plot (line 43) | def plot(
FILE: opendsm/eemeter/models/daily/utilities/base_model.py
function get_intercept (line 24) | def get_intercept(y, alpha=2):
function get_slope (line 49) | def get_slope(x, y, x_bp, intercept, alpha=2):
function linear_fit (line 72) | def linear_fit(x, y, alpha):
function get_smooth_coeffs (line 89) | def get_smooth_coeffs(hdd_bp, pct_hdd_k, cdd_bp, pct_cdd_k, min_pct_k=0....
function fix_identical_bnds (line 117) | def fix_identical_bnds(bnds):
function get_T_bnds (line 126) | def get_T_bnds(T, settings):
FILE: opendsm/eemeter/models/daily/utilities/ellipsoid_test.py
function ellipsoid_intersection_test (line 20) | def ellipsoid_intersection_test(mu_A, mu_B, cov_A, cov_B):
function ellipsoid_K_function (line 59) | def ellipsoid_K_function(ss, lambdas, v_squared):
function confidence_ellipse (line 80) | def confidence_ellipse(x, y, var=np.ones([2, 2]) * 1.96):
function robust_confidence_ellipse (line 112) | def robust_confidence_ellipse(x, y, var=np.ones([2, 2]) * 1.96, outlier_...
function ellipsoid_split_filter (line 171) | def ellipsoid_split_filter(meter, n_std=[1.4, 1.4]):
FILE: opendsm/eemeter/models/daily/utilities/opt_settings.py
class AlgorithmChoice (line 24) | class AlgorithmChoice(str, Enum):
class StopCriteriaChoice (line 79) | class StopCriteriaChoice(str, Enum):
class OptimizationSettings (line 84) | class OptimizationSettings(BaseSettings):
method _check_population_multiplier (line 125) | def _check_population_multiplier(self):
FILE: opendsm/eemeter/models/daily/utilities/selection_criteria.py
function neg_log_likelihood (line 19) | def neg_log_likelihood(loss, N):
function selection_criteria (line 44) | def selection_criteria(
FILE: opendsm/eemeter/models/daily/utilities/settings.py
class AlphaFinalType (line 27) | class AlphaFinalType(str, Enum):
class ModelSelectionCriteria (line 32) | class ModelSelectionCriteria(str, Enum):
class FullModelSelection (line 50) | class FullModelSelection(str, Enum):
class Season_Definition (line 58) | class Season_Definition(BaseSettings):
method set_numeric_dict (line 76) | def set_numeric_dict(self) -> Season_Definition:
class Weekday_Weekend_Definition (line 92) | class Weekday_Weekend_Definition(BaseSettings):
method set_numeric_dict (line 105) | def set_numeric_dict(self) -> Weekday_Weekend_Definition:
class Split_Selection_Definition (line 121) | class Split_Selection_Definition(BaseSettings):
method _check_reduce_splits_num_std (line 179) | def _check_reduce_splits_num_std(self):
function _check_developer_mode (line 190) | def _check_developer_mode(cls):
class DailySettings (line 201) | class DailySettings(BaseSettings):
method _check_developer_mode (line 387) | def _check_developer_mode(self):
method _check_alpha_final (line 400) | def _check_alpha_final(self):
method _check_final_bounds_scalar (line 420) | def _check_final_bounds_scalar(self):
method _check_initial_step_percentage (line 436) | def _check_initial_step_percentage(self):
method __repr__ (line 448) | def __repr__(self):
class Split_Selection_Legacy_Definition (line 490) | class Split_Selection_Legacy_Definition(Split_Selection_Definition):
class DailyLegacySettings (line 528) | class DailyLegacySettings(DailySettings):
function update_daily_settings (line 555) | def update_daily_settings(settings, update_dict):
function default_settings (line 570) | def default_settings(**kwargs) -> DailySettings:
function caltrack_legacy_settings (line 577) | def caltrack_legacy_settings(**kwargs) -> DailyLegacySettings:
FILE: opendsm/eemeter/models/hourly/data.py
class NREL_Weather_API (line 35) | class NREL_Weather_API:
method __init__ (line 57) | def __init__(self, **kwargs):
method get_data (line 61) | def get_data(self, lat, lon, years=[2017, 2021]):
method query_API (line 87) | def query_API(self, lat, lon, years):
method _generate_url (line 120) | def _generate_url(
class _HourlyData (line 140) | class _HourlyData:
method __init__ (line 148) | def __init__(
method df (line 194) | def df(self):
method log_warnings (line 201) | def log_warnings(self):
method _get_contiguous_datetime (line 208) | def _get_contiguous_datetime(self, df):
method _interpolate (line 231) | def _interpolate(self, df):
method _add_pv_start_date (line 258) | def _add_pv_start_date(self, df, model_type="TS"):
method _merge_meter_temp (line 271) | def _merge_meter_temp(self, meter, temp):
method _check_data_sufficiency (line 277) | def _check_data_sufficiency(self):
method _set_data (line 282) | def _set_data(self, data: pd.DataFrame):
class HourlyBaselineData (line 343) | class HourlyBaselineData(_HourlyData):
method _check_data_sufficiency (line 365) | def _check_data_sufficiency(self):
class HourlyReportingData (line 380) | class HourlyReportingData(_HourlyData):
method __init__ (line 403) | def __init__(
method _check_data_sufficiency (line 417) | def _check_data_sufficiency(self):
function _create_sufficiency_df (line 432) | def _create_sufficiency_df(df: pd.DataFrame):
FILE: opendsm/eemeter/models/hourly/model.py
class AdaptiveElasticNetRegressor (line 65) | class AdaptiveElasticNetRegressor:
method __init__ (line 66) | def __init__(self, base_model, settings):
method fit (line 75) | def fit(self, X, y, sample_weight=None):
method is_fit (line 191) | def is_fit(self):
method predict (line 203) | def predict(self, X):
method coef_ (line 225) | def coef_(self):
method coef_ (line 233) | def coef_(self, val):
method intercept_ (line 237) | def intercept_(self):
method intercept_ (line 245) | def intercept_(self, val):
class HourlyModel (line 250) | class HourlyModel:
method __init__ (line 279) | def __init__(
method _set_scalers (line 330) | def _set_scalers(self):
method _set_model (line 340) | def _set_model(self):
method fit (line 386) | def fit(
method _fit (line 435) | def _fit(self, meter_data):
method predict (line 458) | def predict(
method _predict (line 515) | def _predict(self, eval_data, X=None):
method _prepare_features (line 554) | def _prepare_features(self, meter_data):
method _add_temperature_bins (line 599) | def _add_temperature_bins(self, df):
method _add_categorical_features (line 732) | def _add_categorical_features(self, df):
method _add_supplemental_features (line 920) | def _add_supplemental_features(self, df):
method _sort_features (line 936) | def _sort_features(self, ts_features=None, cat_features=None):
method _daily_fitting_sufficiency (line 959) | def _daily_fitting_sufficiency(self, df):
method _normalize_features (line 983) | def _normalize_features(self, df):
method _add_extreme_temperature_bins (line 1010) | def _add_extreme_temperature_bins(self, df, bin_range):
method _add_temperature_interactions (line 1124) | def _add_temperature_interactions(self, df):
method _get_feature_matrices (line 1177) | def _get_feature_matrices(self, df, dst_indices):
method _set_baseline_metrics (line 1234) | def _set_baseline_metrics(self, df_meter):
method _check_model_fit (line 1273) | def _check_model_fit(self):
method _calculate_predicted_uncertianty (line 1307) | def _calculate_predicted_uncertianty(self, df_eval):
method to_dict (line 1350) | def to_dict(self) -> dict:
method to_json (line 1406) | def to_json(self) -> str:
method from_dict (line 1415) | def from_dict(cls, data) -> HourlyModel:
method from_json (line 1490) | def from_json(cls, str_data) -> HourlyModel:
method plot (line 1502) | def plot(
function _fit_exp_growth_decay (line 1514) | def _fit_exp_growth_decay(x, y, k_only=True, is_x_sorted=False):
function _get_dst_indices (line 1568) | def _get_dst_indices(df):
function _transform_dst (line 1604) | def _transform_dst(prediction, dst_indices):
FILE: opendsm/eemeter/models/hourly/settings.py
class SelectionChoice (line 37) | class SelectionChoice(str, Enum):
class ScalingChoice (line 42) | class ScalingChoice(str, Enum):
class BinningChoice (line 47) | class BinningChoice(str, Enum):
class DefaultTrainingFeatures (line 54) | class DefaultTrainingFeatures(str, Enum):
class AggregationMethod (line 59) | class AggregationMethod(str, Enum):
class BaseModel (line 64) | class BaseModel(str, Enum):
class TemperatureBinSettings (line 69) | class TemperatureBinSettings(BaseSettings):
method _check_temperature_bins (line 122) | def _check_temperature_bins(self):
method _check_edge_bins (line 159) | def _check_edge_bins(self):
class ElasticNetSettings (line 191) | class ElasticNetSettings(BaseSettings):
class KernelRidgeSettings (line 245) | class KernelRidgeSettings(BaseSettings):
class AdaptiveWeightsSettings (line 264) | class AdaptiveWeightsSettings(BaseSettings):
method _check_adaptive_weights (line 301) | def _check_adaptive_weights(self):
class Criterion (line 314) | class Criterion(str, Enum):
class BaseHourlySettings (line 320) | class BaseHourlySettings(BaseSettings):
method _check_seed (line 419) | def _check_seed(self):
method _remove_unselected_model_settings (line 431) | def _remove_unselected_model_settings(self):
method add_default_features (line 443) | def add_default_features(self, incoming_columns: list[str]):
class HourlySolarSettings (line 452) | class HourlySolarSettings(BaseHourlySettings):
method _add_required_features (line 460) | def _add_required_features(cls, v):
class HourlyNonSolarSettings (line 468) | class HourlyNonSolarSettings(BaseHourlySettings):
method _add_required_features (line 480) | def _add_required_features(cls, v):
class ModelInfo (line 486) | class ModelInfo(pydantic.BaseModel):
class SerializeModel (line 495) | class SerializeModel(BaseSettings):
FILE: opendsm/eemeter/models/hourly_caltrack/data.py
class HourlyReportingData (line 27) | class HourlyReportingData:
method __init__ (line 28) | def __init__(self, df: pd.DataFrame, is_electricity_data: bool):
method _correct_frequency (line 41) | def _correct_frequency(self, df: pd.DataFrame):
method from_series (line 64) | def from_series(
class HourlyBaselineData (line 84) | class HourlyBaselineData(HourlyReportingData):
method __init__ (line 85) | def __init__(self, df: pd.DataFrame, is_electricity_data: bool):
method _check_data_sufficiency (line 95) | def _check_data_sufficiency(self):
method from_series (line 112) | def from_series(
FILE: opendsm/eemeter/models/hourly_caltrack/derivatives.py
function _compute_ols_error (line 22) | def _compute_ols_error(
function _compute_fsu_error (line 47) | def _compute_fsu_error(
function _compute_error_bands_metered_savings (line 78) | def _compute_error_bands_metered_savings(
function metered_savings (line 148) | def metered_savings(
function _compute_error_bands_modeled_savings (line 252) | def _compute_error_bands_modeled_savings(
function modeled_savings (line 358) | def modeled_savings(
FILE: opendsm/eemeter/models/hourly_caltrack/design_matrices.py
function create_caltrack_hourly_preliminary_design_matrix (line 38) | def create_caltrack_hourly_preliminary_design_matrix(
function create_caltrack_billing_design_matrix (line 80) | def create_caltrack_billing_design_matrix(
function create_caltrack_daily_design_matrix (line 117) | def create_caltrack_daily_design_matrix(
function create_caltrack_hourly_segmented_design_matrices (line 150) | def create_caltrack_hourly_segmented_design_matrices(
FILE: opendsm/eemeter/models/hourly_caltrack/metrics.py
function _compute_r_squared (line 24) | def _compute_r_squared(combined):
function _compute_r_squared_adj (line 28) | def _compute_r_squared_adj(r_squared, length, num_parameters):
function _compute_rmse (line 32) | def _compute_rmse(combined):
function _compute_rmse_adj (line 36) | def _compute_rmse_adj(combined, length, num_parameters):
function _compute_cvrmse (line 45) | def _compute_cvrmse(rmse, observed_mean):
function _compute_cvrmse_adj (line 49) | def _compute_cvrmse_adj(rmse_adj, observed_mean):
function _compute_mape (line 53) | def _compute_mape(combined):
function _compute_nmae (line 57) | def _compute_nmae(combined):
function _compute_nmbe (line 63) | def _compute_nmbe(combined):
function _compute_autocorr_resid (line 67) | def _compute_autocorr_resid(combined, autocorr_lags):
function _json_safe_float (line 71) | def _json_safe_float(number):
class ModelMetricsFromJson (line 89) | class ModelMetricsFromJson(object):
method __init__ (line 90) | def __init__(
class ModelMetrics (line 163) | class ModelMetrics(object):
method __init__ (line 259) | def __init__(
method __repr__ (line 409) | def __repr__(self):
method json (line 424) | def json(self):
method from_json (line 474) | def from_json(cls, data):
FILE: opendsm/eemeter/models/hourly_caltrack/model.py
class CalTRACKHourlyModelResults (line 43) | class CalTRACKHourlyModelResults(object):
method __init__ (line 84) | def __init__(
method __repr__ (line 105) | def __repr__(self):
method json (line 110) | def json(self, with_candidates=False):
method from_json (line 140) | def from_json(cls, data):
method predict (line 180) | def predict(self, prediction_index, temperature_data, **kwargs):
class _PredictionSegmentInfo (line 201) | class _PredictionSegmentInfo:
method __init__ (line 207) | def __init__(self, segment_type: str):
class CalTRACKHourlyModel (line 235) | class CalTRACKHourlyModel(SegmentedModel):
method __init__ (line 254) | def __init__(
method json (line 280) | def json(self):
method from_json (line 302) | def from_json(cls, data):
function caltrack_hourly_fit_feature_processor (line 333) | def caltrack_hourly_fit_feature_processor(
function caltrack_hourly_prediction_feature_processor (line 420) | def caltrack_hourly_prediction_feature_processor(
function fit_caltrack_hourly_model_segment (line 512) | def fit_caltrack_hourly_model_segment(segment_name, segment_data):
function fit_caltrack_hourly_model (line 585) | def fit_caltrack_hourly_model(
FILE: opendsm/eemeter/models/hourly_caltrack/segmentation.py
class CalTRACKSegmentModel (line 32) | class CalTRACKSegmentModel(object):
method __init__ (line 49) | def __init__(self, segment_name, model, formula, model_params, warning...
method predict (line 59) | def predict(self, data):
method json (line 96) | def json(self):
method from_json (line 112) | def from_json(cls, data):
class SegmentedModel (line 130) | class SegmentedModel(object):
method __init__ (line 154) | def __init__(
method predict (line 180) | def predict(
method json (line 222) | def json(self):
function filter_zero_weights_feature_processor (line 244) | def filter_zero_weights_feature_processor(segment_name, segment_data):
function iterate_segmented_dataset (line 249) | def iterate_segmented_dataset(
function _get_calendar_year_coverage_warning (line 317) | def _get_calendar_year_coverage_warning(index):
function _get_hourly_coverage_warning (line 321) | def _get_hourly_coverage_warning(index, min_fraction_daily_coverage=0.9):
function _segment_weights_single (line 325) | def _segment_weights_single(index):
function _segment_weights_one_month (line 329) | def _segment_weights_one_month(index):
function _segment_weights_three_month (line 366) | def _segment_weights_three_month(index):
function _segment_weights_three_month_weighted (line 403) | def _segment_weights_three_month_weighted(index):
function segment_time_series (line 442) | def segment_time_series(index, segment_type="single", drop_zero_weight_s...
function fit_model_segments (line 494) | def fit_model_segments(segmented_dataset_dict, fit_segment):
FILE: opendsm/eemeter/models/hourly_caltrack/usage_per_day.py
class DataSufficiency (line 26) | class DataSufficiency(object):
method __init__ (line 47) | def __init__(self, status, criteria_name, warnings=None, data=None, se...
method __repr__ (line 63) | def __repr__(self):
method json (line 71) | def json(self):
function caltrack_sufficiency_criteria (line 86) | def caltrack_sufficiency_criteria(
FILE: opendsm/eemeter/models/hourly_caltrack/wrapper.py
class IntermediateModelVariables (line 51) | class IntermediateModelVariables:
class HourlyModel (line 60) | class HourlyModel:
method __init__ (line 61) | def __init__(self, settings=None):
method fit (line 65) | def fit(self, data):
method predict (line 161) | def predict(self, reporting_data):
method to_dict (line 204) | def to_dict(self):
method to_json (line 209) | def to_json(self):
method from_dict (line 213) | def from_dict(cls, data):
method from_json (line 221) | def from_json(cls, str_data):
method from_2_0_dict (line 225) | def from_2_0_dict(cls, data):
method from_2_0_json (line 235) | def from_2_0_json(cls, str_data):
method plot (line 238) | def plot(
FILE: opendsm/eemeter/samples/load.py
function _load_sample_metadata (line 26) | def _load_sample_metadata():
function samples (line 34) | def samples():
function load_sample (line 46) | def load_sample(sample, tempF=True):
FILE: opendsm/eemeter/utilities/io.py
function meter_data_from_csv (line 43) | def meter_data_from_csv(
function temperature_data_from_csv (line 103) | def temperature_data_from_csv(
function meter_data_from_json (line 160) | def meter_data_from_json(data: list, orient: str = "list") -> pd.DataFrame:
function temperature_data_from_json (line 234) | def temperature_data_from_json(data: list, orient: str = "list") -> pd.S...
function meter_data_to_csv (line 266) | def meter_data_to_csv(
function temperature_data_to_csv (line 282) | def temperature_data_to_csv(
FILE: tests/common/clustering/test_bisect_k_means.py
function get_default_settings_dict (line 23) | def get_default_settings_dict():
function simple_2d_data (line 32) | def simple_2d_data():
function default_settings (line 43) | def default_settings():
function custom_bisect_settings (line 50) | def custom_bisect_settings():
class TestBasicFunctionality (line 64) | class TestBasicFunctionality:
method test_simple_clustering (line 67) | def test_simple_clustering(self, simple_2d_data, default_settings):
method test_reproducibility (line 80) | def test_reproducibility(self, simple_2d_data, default_settings):
method test_different_seeds (line 87) | def test_different_seeds(self, simple_2d_data):
class TestClusterRangeConfiguration (line 104) | class TestClusterRangeConfiguration:
method test_single_cluster_specification (line 107) | def test_single_cluster_specification(self, simple_2d_data):
method test_cluster_range (line 120) | def test_cluster_range(self, simple_2d_data, custom_bisect_settings):
method test_two_clusters (line 128) | def test_two_clusters(self, simple_2d_data):
method test_many_clusters (line 139) | def test_many_clusters(self, simple_2d_data):
class TestAlgorithmSettings (line 151) | class TestAlgorithmSettings:
method test_lloyd_inner_algorithm (line 154) | def test_lloyd_inner_algorithm(self, simple_2d_data):
method test_elkan_inner_algorithm (line 166) | def test_elkan_inner_algorithm(self, simple_2d_data):
method test_largest_cluster_strategy (line 178) | def test_largest_cluster_strategy(self, simple_2d_data):
method test_biggest_inertia_strategy (line 190) | def test_biggest_inertia_strategy(self, simple_2d_data):
method test_recluster_count (line 202) | def test_recluster_count(self, simple_2d_data):
class TestDataShapes (line 216) | class TestDataShapes:
method test_small_dataset (line 219) | def test_small_dataset(self):
method test_large_dataset (line 234) | def test_large_dataset(self):
method test_high_dimensional_data (line 249) | def test_high_dimensional_data(self):
method test_low_dimensional_data (line 264) | def test_low_dimensional_data(self):
class TestEdgeCases (line 280) | class TestEdgeCases:
method test_more_clusters_than_samples (line 283) | def test_more_clusters_than_samples(self):
method test_uniform_data (line 299) | def test_uniform_data(self):
method test_identical_samples (line 315) | def test_identical_samples(self):
method test_negative_values (line 330) | def test_negative_values(self):
method test_mixed_scale_features (line 345) | def test_mixed_scale_features(self):
class TestClusterQuality (line 366) | class TestClusterQuality:
method test_well_separated_clusters (line 369) | def test_well_separated_clusters(self):
class TestBaselineConsistency (line 403) | class TestBaselineConsistency:
method test_expected_baseline_output (line 406) | def test_expected_baseline_output(self):
FILE: tests/common/clustering/test_cluster.py
function simple_data (line 39) | def simple_data():
function simple_dataframe (line 52) | def simple_dataframe():
function time_series_dataframe (line 61) | def time_series_dataframe():
function cluster_labels_simple (line 85) | def cluster_labels_simple():
function cluster_labels_with_outliers (line 92) | def cluster_labels_with_outliers():
class TestClusterMerge (line 104) | class TestClusterMerge:
method test_merge_two_similar_clusters (line 107) | def test_merge_two_similar_clusters(self):
method test_keep_two_distinct_clusters (line 128) | def test_keep_two_distinct_clusters(self):
method test_merge_with_different_W_values (line 147) | def test_merge_with_different_W_values(self):
method test_merge_multiple_clusters (line 171) | def test_merge_multiple_clusters(self, simple_data):
class TestClusterReorder (line 192) | class TestClusterReorder:
method test_reorder_by_size_ascending (line 195) | def test_reorder_by_size_ascending(self, simple_dataframe, cluster_lab...
method test_reorder_by_size_descending (line 246) | def test_reorder_by_size_descending(self, simple_dataframe, cluster_la...
method test_reorder_by_peak (line 286) | def test_reorder_by_peak(self, time_series_dataframe):
method test_reorder_with_outliers (line 310) | def test_reorder_with_outliers(self, simple_dataframe, cluster_labels_...
method test_reorder_different_aggregations (line 329) | def test_reorder_different_aggregations(self, time_series_dataframe):
class TestClusterFeaturesInternal (line 355) | class TestClusterFeaturesInternal:
method test_bisecting_kmeans_clustering (line 358) | def test_bisecting_kmeans_clustering(self, simple_data):
method test_spectral_clustering (line 374) | def test_spectral_clustering(self, simple_data):
method test_adjust_cluster_count_for_small_data (line 389) | def test_adjust_cluster_count_for_small_data(self):
method test_birch_clustering (line 409) | def test_birch_clustering(self, simple_data):
class TestClusterFeatures (line 429) | class TestClusterFeatures:
method test_basic_clustering (line 432) | def test_basic_clustering(self, simple_dataframe):
method test_clustering_with_sorting (line 453) | def test_clustering_with_sorting(self, time_series_dataframe):
method test_clustering_bypass_for_many_clusters (line 479) | def test_clustering_bypass_for_many_clusters(self):
method test_clustering_with_normalization (line 497) | def test_clustering_with_normalization(self, simple_dataframe):
method test_clustering_different_algorithms (line 522) | def test_clustering_different_algorithms(self, simple_dataframe):
method test_clustering_with_fpca_transform (line 553) | def test_clustering_with_fpca_transform(self, time_series_dataframe):
method test_reproducibility_with_seed (line 575) | def test_reproducibility_with_seed(self, simple_dataframe):
method test_clustering_small_dataset (line 597) | def test_clustering_small_dataset(self):
method test_clustering_preserves_index_order (line 621) | def test_clustering_preserves_index_order(self, simple_dataframe):
class TestClusteringIntegration (line 649) | class TestClusteringIntegration:
method test_full_pipeline_with_all_options (line 652) | def test_full_pipeline_with_all_options(self, time_series_dataframe):
method test_pipeline_consistency_across_runs (line 690) | def test_pipeline_consistency_across_runs(self, simple_dataframe):
method test_exact_output_spectral_baseline (line 715) | def test_exact_output_spectral_baseline(self):
method test_exact_output_bisecting_kmeans_baseline (line 762) | def test_exact_output_bisecting_kmeans_baseline(self):
FILE: tests/common/clustering/test_cluster_transform.py
function simple_time_series_data (line 43) | def simple_time_series_data():
function small_dataset (line 71) | def small_dataset():
function large_dataset (line 78) | def large_dataset():
function constant_data (line 85) | def constant_data():
function mixed_scale_data (line 91) | def mixed_scale_data():
class TestSafeStandardize (line 106) | class TestSafeStandardize:
method test_basic_standardization_scalar_scale (line 109) | def test_basic_standardization_scalar_scale(self):
method test_basic_standardization_array_scale (line 120) | def test_basic_standardization_array_scale(self):
method test_zero_scale_scalar (line 133) | def test_zero_scale_scalar(self):
method test_zero_scale_array_single_column (line 144) | def test_zero_scale_array_single_column(self):
method test_zero_scale_array_all_columns (line 160) | def test_zero_scale_array_all_columns(self):
method test_2d_data_1d_scale_axis_0 (line 173) | def test_2d_data_1d_scale_axis_0(self):
method test_negative_values (line 186) | def test_negative_values(self):
method test_all_zeros (line 197) | def test_all_zeros(self):
method test_custom_threshold (line 208) | def test_custom_threshold(self):
method test_scalar_scale_zero_ndim (line 222) | def test_scalar_scale_zero_ndim(self):
method test_mixed_scale_threshold_boundary (line 233) | def test_mixed_scale_threshold_boundary(self):
class TestNormalize (line 251) | class TestNormalize:
method test_standardize_axis_0 (line 256) | def test_standardize_axis_0(self, simple_time_series_data):
method test_standardize_axis_none (line 269) | def test_standardize_axis_none(self, simple_time_series_data):
method test_standardize_constant_data_axis_0 (line 279) | def test_standardize_constant_data_axis_0(self):
method test_med_mad_axis_0 (line 291) | def test_med_mad_axis_0(self, simple_time_series_data):
method test_med_mad_axis_none (line 301) | def test_med_mad_axis_none(self, simple_time_series_data):
method test_med_mad_robust_to_outliers_axis_0 (line 310) | def test_med_mad_robust_to_outliers_axis_0(self):
method test_min_max_quantile_axis_1 (line 326) | def test_min_max_quantile_axis_1(self, simple_time_series_data):
method test_min_max_quantile_axis_0 (line 340) | def test_min_max_quantile_axis_0(self, simple_time_series_data):
method test_min_max_quantile_different_quantiles (line 390) | def test_min_max_quantile_different_quantiles(self, simple_time_series...
method test_min_max_quantile_constant_rows (line 403) | def test_min_max_quantile_constant_rows(self):
method test_normalize_single_column (line 423) | def test_normalize_single_column(self):
method test_normalize_small_values_axis_0 (line 432) | def test_normalize_small_values_axis_0(self):
class TestFpcaError (line 446) | class TestFpcaError:
method test_fpca_error_instantiation (line 449) | def test_fpca_error_instantiation(self):
class TestFpcaBase (line 456) | class TestFpcaBase:
method test_fpca_base_valid_input (line 459) | def test_fpca_base_valid_input(self, simple_time_series_data):
method test_fpca_base_invalid_min_var_ratio_too_low (line 473) | def test_fpca_base_invalid_min_var_ratio_too_low(self, simple_time_ser...
method test_fpca_base_invalid_min_var_ratio_too_high (line 483) | def test_fpca_base_invalid_min_var_ratio_too_high(self, simple_time_se...
method test_fpca_base_non_finite_x (line 493) | def test_fpca_base_non_finite_x(self, simple_time_series_data):
method test_fpca_base_non_finite_y (line 501) | def test_fpca_base_non_finite_y(self, simple_time_series_data):
method test_fpca_base_empty_x (line 510) | def test_fpca_base_empty_x(self, simple_time_series_data):
method test_fpca_base_empty_y (line 517) | def test_fpca_base_empty_y(self):
method test_fpca_base_different_var_ratios (line 525) | def test_fpca_base_different_var_ratios(self, simple_time_series_data):
method test_fpca_base_small_dataset (line 540) | def test_fpca_base_small_dataset(self, small_dataset):
class TestFpcaTransform (line 552) | class TestFpcaTransform:
method test_fpca_transform_basic (line 555) | def test_fpca_transform_basic(self, simple_time_series_data):
method test_fpca_transform_different_var_ratios (line 573) | def test_fpca_transform_different_var_ratios(self, simple_time_series_...
method test_fpca_transform_small_dataset (line 592) | def test_fpca_transform_small_dataset(self, small_dataset):
method test_fpca_transform_propagates_error (line 608) | def test_fpca_transform_propagates_error(self, simple_time_series_data):
method test_fpca_transform_deterministic (line 624) | def test_fpca_transform_deterministic(self, simple_time_series_data):
class TestWaveletTransform (line 646) | class TestWaveletTransform:
method test_wavelet_basic (line 649) | def test_wavelet_basic(self, simple_time_series_data):
method test_wavelet_without_scale_feature (line 664) | def test_wavelet_without_scale_feature(self, simple_time_series_data):
method test_wavelet_different_wavelets (line 683) | def test_wavelet_different_wavelets(self, simple_time_series_data):
method test_wavelet_with_variance_ratio (line 702) | def test_wavelet_with_variance_ratio(self, simple_time_series_data):
method test_wavelet_with_mle (line 721) | def test_wavelet_with_mle(self, simple_time_series_data):
method test_wavelet_with_post_normalization (line 739) | def test_wavelet_with_post_normalization(self, simple_time_series_data):
method test_wavelet_different_n_levels (line 760) | def test_wavelet_different_n_levels(self, simple_time_series_data):
method test_wavelet_different_modes (line 779) | def test_wavelet_different_modes(self, simple_time_series_data):
method test_wavelet_small_dataset (line 800) | def test_wavelet_small_dataset(self, small_dataset):
method test_wavelet_large_dataset (line 817) | def test_wavelet_large_dataset(self, large_dataset):
method test_wavelet_deterministic_with_seed (line 834) | def test_wavelet_deterministic_with_seed(self, simple_time_series_data):
method test_wavelet_scale_feature_is_median (line 863) | def test_wavelet_scale_feature_is_median(self, simple_time_series_data):
class TestTransformFeatures (line 887) | class TestTransformFeatures:
method test_transform_features_fpca_no_normalization (line 892) | def test_transform_features_fpca_no_normalization(self, simple_time_se...
method test_transform_features_fpca_with_pre_normalization (line 909) | def test_transform_features_fpca_with_pre_normalization(self, simple_t...
method test_transform_features_wavelet_no_normalization (line 933) | def test_transform_features_wavelet_no_normalization(self, simple_time...
method test_transform_features_wavelet_with_pre_normalization (line 951) | def test_transform_features_wavelet_with_pre_normalization(self, simpl...
method test_transform_features_wavelet_with_post_normalization (line 975) | def test_transform_features_wavelet_with_post_normalization(self, simp...
method test_transform_features_reduces_dimensionality (line 1001) | def test_transform_features_reduces_dimensionality(self, large_dataset):
method test_transform_features_reproducible (line 1020) | def test_transform_features_reproducible(self, simple_time_series_data):
class TestParametrizedTransforms (line 1049) | class TestParametrizedTransforms:
method test_wavelet_combinations (line 1054) | def test_wavelet_combinations(self, simple_time_series_data, wavelet, ...
FILE: tests/common/clustering/test_spectral.py
function get_default_settings_dict (line 23) | def get_default_settings_dict():
function simple_2d_data (line 32) | def simple_2d_data():
function default_settings (line 43) | def default_settings():
function custom_spectral_settings (line 50) | def custom_spectral_settings():
class TestBasicFunctionality (line 63) | class TestBasicFunctionality:
method test_simple_clustering (line 66) | def test_simple_clustering(self, simple_2d_data, default_settings):
method test_reproducibility (line 79) | def test_reproducibility(self, simple_2d_data, default_settings):
method test_different_seeds (line 86) | def test_different_seeds(self, simple_2d_data):
class TestClusterRangeConfiguration (line 103) | class TestClusterRangeConfiguration:
method test_single_cluster_specification (line 106) | def test_single_cluster_specification(self, simple_2d_data):
method test_cluster_range (line 119) | def test_cluster_range(self, simple_2d_data, custom_spectral_settings):
method test_two_clusters (line 127) | def test_two_clusters(self, simple_2d_data):
method test_many_clusters (line 138) | def test_many_clusters(self, simple_2d_data):
class TestAlgorithmSettings (line 150) | class TestAlgorithmSettings:
method test_arpack_eigen_solver (line 153) | def test_arpack_eigen_solver(self, simple_2d_data):
method test_lobpcg_eigen_solver (line 165) | def test_lobpcg_eigen_solver(self, simple_2d_data):
method test_kmeans_assign_labels (line 177) | def test_kmeans_assign_labels(self, simple_2d_data):
method test_discretize_assign_labels (line 189) | def test_discretize_assign_labels(self, simple_2d_data):
method test_cluster_qr_assign_labels (line 201) | def test_cluster_qr_assign_labels(self, simple_2d_data):
method test_rbf_affinity (line 213) | def test_rbf_affinity(self, simple_2d_data):
method test_nearest_neighbors_affinity (line 225) | def test_nearest_neighbors_affinity(self, simple_2d_data):
method test_different_gamma_values (line 238) | def test_different_gamma_values(self, simple_2d_data):
method test_recluster_count (line 252) | def test_recluster_count(self, simple_2d_data):
class TestAffinityMatrixOptions (line 266) | class TestAffinityMatrixOptions:
method test_laplacian_affinity (line 269) | def test_laplacian_affinity(self, simple_2d_data):
method test_chi2_affinity (line 281) | def test_chi2_affinity(self, simple_2d_data):
class TestDataShapes (line 297) | class TestDataShapes:
method test_small_dataset (line 300) | def test_small_dataset(self):
method test_large_dataset (line 315) | def test_large_dataset(self):
method test_high_dimensional_data (line 330) | def test_high_dimensional_data(self):
method test_low_dimensional_data (line 345) | def test_low_dimensional_data(self):
class TestEdgeCases (line 361) | class TestEdgeCases:
method test_uniform_data (line 364) | def test_uniform_data(self):
method test_identical_samples (line 380) | def test_identical_samples(self):
method test_negative_values (line 395) | def test_negative_values(self):
method test_mixed_scale_features (line 410) | def test_mixed_scale_features(self):
method test_sparse_data (line 430) | def test_sparse_data(self):
class TestClusterQuality (line 449) | class TestClusterQuality:
method test_well_separated_clusters (line 452) | def test_well_separated_clusters(self):
class TestComponentSettings (line 485) | class TestComponentSettings:
method test_custom_n_components (line 488) | def test_custom_n_components(self, simple_2d_data):
method test_none_n_components (line 500) | def test_none_n_components(self, simple_2d_data):
class TestBaselineConsistency (line 514) | class TestBaselineConsistency:
method test_expected_baseline_output (line 517) | def test_expected_baseline_output(self):
FILE: tests/common/clustering/test_voting.py
class TestShulzePairwisePreference (line 29) | class TestShulzePairwisePreference:
method test_basic_pairwise (line 32) | def test_basic_pairwise(self):
method test_pairwise_with_weights (line 50) | def test_pairwise_with_weights(self):
method test_pairwise_tie (line 63) | def test_pairwise_tie(self):
class TestShulzePathStrength (line 75) | class TestShulzePathStrength:
method test_path_strength_preserves_shape (line 78) | def test_path_strength_preserves_shape(self):
method test_path_strength_basic (line 89) | def test_path_strength_basic(self):
class TestShulzeRankStrength (line 124) | class TestShulzeRankStrength:
method test_rank_strength_basic (line 127) | def test_rank_strength_basic(self):
method test_rank_strength_all_lose (line 148) | def test_rank_strength_all_lose(self):
class TestConstructVotingDF (line 166) | class TestConstructVotingDF:
method test_construct_basic (line 169) | def test_construct_basic(self):
method test_construct_with_nan (line 188) | def test_construct_with_nan(self):
method test_construct_with_inf (line 205) | def test_construct_with_inf(self):
class TestShulzeVoting (line 222) | class TestShulzeVoting:
method test_simple_majority (line 225) | def test_simple_majority(self):
method test_condorcet_winner (line 238) | def test_condorcet_winner(self):
method test_unanimous_vote (line 250) | def test_unanimous_vote(self):
method test_weighted_voting (line 263) | def test_weighted_voting(self):
method test_tie_breaking (line 276) | def test_tie_breaking(self):
method test_single_candidate (line 290) | def test_single_candidate(self):
method test_two_candidates (line 301) | def test_two_candidates(self):
method test_two_strong_candidates (line 313) | def test_two_strong_candidates(self):
method test_return_preference_df (line 327) | def test_return_preference_df(self):
method test_window_smoothing (line 344) | def test_window_smoothing(self):
method test_empty_voter_weights (line 365) | def test_empty_voter_weights(self):
method test_weight_normalization (line 379) | def test_weight_normalization(self):
method test_large_number_of_candidates (line 395) | def test_large_number_of_candidates(self):
class TestShulzeVotingEdgeCases (line 409) | class TestShulzeVotingEdgeCases:
method test_single_voter (line 412) | def test_single_voter(self):
method test_zero_weights (line 422) | def test_zero_weights(self):
method test_negative_window_size (line 436) | def test_negative_window_size(self):
method test_missing_voter_weights (line 447) | def test_missing_voter_weights(self):
method test_extreme_weight_differences (line 463) | def test_extreme_weight_differences(self):
method test_cyclic_preferences (line 478) | def test_cyclic_preferences(self):
method test_large_window_size (line 492) | def test_large_window_size(self):
method test_weighted_voting_normalization (line 506) | def test_weighted_voting_normalization(self):
method test_very_large_number_of_candidates (line 523) | def test_very_large_number_of_candidates(self):
method test_empty_dataframe_no_rows_no_cols (line 537) | def test_empty_dataframe_no_rows_no_cols(self):
method test_empty_dataframe_no_rows (line 544) | def test_empty_dataframe_no_rows(self):
method test_empty_dataframe_no_columns (line 551) | def test_empty_dataframe_no_columns(self):
FILE: tests/common/metrics.py
function test_acf (line 21) | def test_acf():
FILE: tests/common/test_basic_stats.py
function test_t_stat (line 26) | def test_t_stat():
function test_unc_factor (line 60) | def test_unc_factor():
function test_median_absolute_deviation (line 94) | def test_median_absolute_deviation():
function test_fast_std (line 120) | def test_fast_std():
FILE: tests/common/test_utils.py
function test_np_clip (line 25) | def test_np_clip():
function test_OoM (line 67) | def test_OoM():
function test_RoundToSigFigs (line 108) | def test_RoundToSigFigs():
FILE: tests/comparison_groups/conftest.py
function col_name (line 21) | def col_name():
function df_treatment (line 26) | def df_treatment(col_name):
function df_pool (line 41) | def df_pool(col_name):
function df_equiv (line 52) | def df_equiv(df_treatment, df_pool):
function equivalence_feature_matrix (line 79) | def equivalence_feature_matrix(df_equiv):
function equivalence_feature_ids (line 85) | def equivalence_feature_ids(df_equiv):
FILE: tests/comparison_groups/imm/test_distance_calc_selection.py
function generate_group (line 23) | def generate_group(n_entries, make_random=True, non_random_value=5, id_p...
function test_distance_match (line 37) | def test_distance_match():
function test_distance_match_duplicates_allowed (line 74) | def test_distance_match_duplicates_allowed():
function test_distance_match_duplicates_forbidden (line 100) | def test_distance_match_duplicates_forbidden():
function test_distance_match_large_treatments (line 129) | def test_distance_match_large_treatments():
function test_distance_duplicate_best_match (line 157) | def test_distance_duplicate_best_match():
function test_multiple_meter_matches (line 189) | def test_multiple_meter_matches():
FILE: tests/comparison_groups/stratified_sampling/test_bin.py
function test_bin_filtering (line 21) | def test_bin_filtering():
function test_binned_data_bin_label_label_leading_zeroes (line 31) | def test_binned_data_bin_label_label_leading_zeroes():
FILE: tests/comparison_groups/stratified_sampling/test_bin_selection.py
function test_stratified_sampling_fit_and_sample_records_equivalence (line 23) | def test_stratified_sampling_fit_and_sample_records_equivalence(
function test_stratified_sampling_fit_and_sample_records_equivalence_too_many_bins (line 47) | def test_stratified_sampling_fit_and_sample_records_equivalence_too_many...
function test_stratified_sampling_fit_and_sample_records_equivalence_idempotent_check (line 69) | def test_stratified_sampling_fit_and_sample_records_equivalence_idempote...
function test_stratified_sampling_fit_and_sample_records_equivalence_euclidean_idempotent_check (line 113) | def test_stratified_sampling_fit_and_sample_records_equivalence_euclidea...
function test_stratified_sampling_fit_and_sample_records_equivalence_euclidean_idempotent_check (line 158) | def test_stratified_sampling_fit_and_sample_records_equivalence_euclidea...
function test_plot_records_based_equiv_average (line 202) | def test_plot_records_based_equiv_average(
function test_plot_records_based_equiv_average_chisquare (line 230) | def test_plot_records_based_equiv_average_chisquare(
FILE: tests/comparison_groups/stratified_sampling/test_diagnostics.py
function diagnostics_obj (line 23) | def diagnostics_obj(df_treatment, df_pool, col_name):
function test_equivalence (line 32) | def test_equivalence(diagnostics_obj):
FILE: tests/comparison_groups/stratified_sampling/test_equivalence.py
function equiv_X (line 25) | def equiv_X():
function equiv_Y (line 34) | def equiv_Y():
function feature_matrix (line 44) | def feature_matrix(equiv_X, equiv_Y):
function test_reshape_outputs (line 51) | def test_reshape_outputs():
function test_equivalene_distance (line 62) | def test_equivalene_distance(feature_matrix):
function test_get_quantiles (line 78) | def test_get_quantiles():
function test_quantile_means_array (line 86) | def test_quantile_means_array(equiv_X, equiv_Y):
function test_quantile_distance (line 102) | def test_quantile_distance(equiv_X, equiv_Y):
function test_equivalence_inputs (line 108) | def test_equivalence_inputs(feature_matrix):
function test_index_to_ids (line 122) | def test_index_to_ids():
FILE: tests/comparison_groups/stratified_sampling/test_model.py
function test_stratified_sampling_fit_and_sample (line 24) | def test_stratified_sampling_fit_and_sample():
function test_stratified_sampling_fit_and_sample_random_seed_check (line 69) | def test_stratified_sampling_fit_and_sample_random_seed_check():
function stratified_sampling_obj (line 129) | def stratified_sampling_obj():
function test_stratified_sampling_fit_and_sample_min_allowed_max_allowed (line 133) | def test_stratified_sampling_fit_and_sample_min_allowed_max_allowed(
function test_stratified_sampling_fit_and_sample_n_samples_approx_limit (line 161) | def test_stratified_sampling_fit_and_sample_n_samples_approx_limit(
function test_stratified_sampling_fit_and_sample_n_samples_approx_limit (line 177) | def test_stratified_sampling_fit_and_sample_n_samples_approx_limit(
function test_stratified_sampling_fit_and_sample_n_samples_approx_variations (line 212) | def test_stratified_sampling_fit_and_sample_n_samples_approx_variations(
function test_stratified_sampling_fit_and_sample_too_many_bins (line 254) | def test_stratified_sampling_fit_and_sample_too_many_bins(df_treatment, ...
function test_stratified_sampling_fit_and_sample_dont_require_equivalence (line 268) | def test_stratified_sampling_fit_and_sample_dont_require_equivalence(
function test_stratified_sampling_fit_and_sample_upper_limit_n_samples_approx (line 286) | def test_stratified_sampling_fit_and_sample_upper_limit_n_samples_approx(
FILE: tests/conftest.py
function sample_metadata (line 24) | def sample_metadata():
function _from_sample (line 32) | def _from_sample(sample, tempF=True):
function il_electricity_cdd_hdd_hourly (line 43) | def il_electricity_cdd_hdd_hourly():
function il_electricity_cdd_hdd_daily (line 48) | def il_electricity_cdd_hdd_daily():
function il_electricity_cdd_hdd_billing_monthly (line 53) | def il_electricity_cdd_hdd_billing_monthly():
function il_electricity_cdd_hdd_billing_bimonthly (line 58) | def il_electricity_cdd_hdd_billing_bimonthly():
function il_gas_hdd_only_hourly (line 63) | def il_gas_hdd_only_hourly():
function uk_electricity_hdd_only_hourly_sample_1 (line 68) | def uk_electricity_hdd_only_hourly_sample_1():
function uk_electricity_hdd_only_hourly_sample_2 (line 73) | def uk_electricity_hdd_only_hourly_sample_2():
FILE: tests/eemeter/daily_model/base_models/test_c_hdd_tidd_smooth.py
function test_fit_c_hdd_tidd_smooth (line 22) | def test_fit_c_hdd_tidd_smooth():
FILE: tests/eemeter/daily_model/base_models/test_full_model_finder.py
function test_full_model_import (line 18) | def test_full_model_import():
FILE: tests/eemeter/daily_model/test_billing_data.py
function get_datetime_index (line 30) | def get_datetime_index(request):
function get_datetime_index_half_hourly_with_timezone (line 47) | def get_datetime_index_half_hourly_with_timezone():
function get_datetime_index_hourly_with_timezone (line 61) | def get_datetime_index_hourly_with_timezone():
function get_datetime_index_daily_with_timezone (line 75) | def get_datetime_index_daily_with_timezone():
function get_datetime_index_monthly_with_timezone (line 89) | def get_datetime_index_monthly_with_timezone():
function get_datetime_index_bimonthly_with_timezone (line 103) | def get_datetime_index_bimonthly_with_timezone():
function get_datetime_index_daily_without_timezone (line 117) | def get_datetime_index_daily_without_timezone():
function get_temperature_data_half_hourly (line 127) | def get_temperature_data_half_hourly(get_datetime_index_half_hourly_with...
function get_temperature_data_hourly (line 141) | def get_temperature_data_hourly(get_datetime_index_hourly_with_timezone):
function get_temperature_data_daily (line 155) | def get_temperature_data_daily(get_datetime_index_daily_with_timezone):
function get_meter_data_daily (line 169) | def get_meter_data_daily(get_datetime_index_daily_with_timezone):
function get_meter_data_monthly (line 183) | def get_meter_data_monthly(get_datetime_index_monthly_with_timezone):
function get_meter_data_bimonthly (line 198) | def get_meter_data_bimonthly(get_datetime_index_bimonthly_with_timezone):
function test_billing_baseline_data_with_missing_timezone (line 214) | def test_billing_baseline_data_with_missing_timezone(get_datetime_index):
function test_billing_baseline_data_with_missing_datetime_index_and_column (line 235) | def test_billing_baseline_data_with_missing_datetime_index_and_column():
function test_billing_baseline_data_with_monthly_frequencies (line 251) | def test_billing_baseline_data_with_monthly_frequencies(get_datetime_ind...
function test_billing_baseline_data_with_bimonthly_frequencies (line 288) | def test_billing_baseline_data_with_bimonthly_frequencies(get_datetime_i...
function test_billing_baseline_data_with_monthly_hourly_frequencies (line 327) | def test_billing_baseline_data_with_monthly_hourly_frequencies(
function test_billing_baseline_data_with_bimonthly_hourly_frequencies (line 349) | def test_billing_baseline_data_with_bimonthly_hourly_frequencies(
function test_billing_baseline_data_with_monthly_daily_frequencies (line 370) | def test_billing_baseline_data_with_monthly_daily_frequencies(
function test_billing_baseline_data_with_bimonthly_daily_frequencies (line 396) | def test_billing_baseline_data_with_bimonthly_daily_frequencies(
function test_billing_baseline_data_with_specific_hourly_input (line 423) | def test_billing_baseline_data_with_specific_hourly_input():
function test_billing_baseline_data_with_specific_daily_input (line 454) | def test_billing_baseline_data_with_specific_daily_input():
function test_billing_baseline_data_with_specific_missing_daily_input (line 484) | def test_billing_baseline_data_with_specific_missing_daily_input():
function test_billing_baseline_data_with_specific_monthly_input (line 517) | def test_billing_baseline_data_with_specific_monthly_input():
function test_billing_reporting_data_with_missing_half_hourly_frequencies (line 543) | def test_billing_reporting_data_with_missing_half_hourly_frequencies(
function test_billing_reporting_data_with_missing_daily_frequencies (line 591) | def test_billing_reporting_data_with_missing_daily_frequencies(get_datet...
function test_dst_handling (line 631) | def test_dst_handling():
FILE: tests/eemeter/daily_model/test_daily_data.py
function get_datetime_index (line 30) | def get_datetime_index(request):
function get_datetime_index_half_hourly_with_timezone (line 46) | def get_datetime_index_half_hourly_with_timezone():
function get_datetime_index_hourly_with_timezone (line 60) | def get_datetime_index_hourly_with_timezone():
function get_datetime_index_daily_with_timezone (line 74) | def get_datetime_index_daily_with_timezone():
function get_datetime_index_daily_without_timezone (line 88) | def get_datetime_index_daily_without_timezone():
function get_temperature_data_half_hourly (line 98) | def get_temperature_data_half_hourly(get_datetime_index_half_hourly_with...
function get_temperature_data_hourly (line 112) | def get_temperature_data_hourly(get_datetime_index_hourly_with_timezone):
function get_meter_data_daily (line 126) | def get_meter_data_daily(get_datetime_index_daily_with_timezone):
function get_meter_data_daily_with_extreme_values_and_negative_values (line 140) | def get_meter_data_daily_with_extreme_values_and_negative_values(
function get_temperature_data_daily (line 172) | def get_temperature_data_daily(get_datetime_index_daily_with_timezone):
function test_daily_baseline_data_with_missing_timezone (line 187) | def test_daily_baseline_data_with_missing_timezone(get_datetime_index):
function test_daily_baseline_data_with_missing_datetime_index_and_column (line 208) | def test_daily_baseline_data_with_missing_datetime_index_and_column():
function test_daily_baseline_data_with_datetime_column (line 224) | def test_daily_baseline_data_with_datetime_column(get_datetime_index):
function test_daily_baseline_data_with_same_daily_frequencies (line 246) | def test_daily_baseline_data_with_same_daily_frequencies(get_datetime_in...
function test_daily_baseline_data_with_same_hourly_frequencies (line 278) | def test_daily_baseline_data_with_same_hourly_frequencies(get_datetime_i...
function test_daily_baseline_data_with_daily_and_half_hourly_frequencies (line 304) | def test_daily_baseline_data_with_daily_and_half_hourly_frequencies(
function test_daily_baseline_data_with_daily_and_hourly_frequencies (line 325) | def test_daily_baseline_data_with_daily_and_hourly_frequencies(
function test_daily_baseline_data_with_extreme_values_in_daily_and_hourly_frequencies (line 345) | def test_daily_baseline_data_with_extreme_values_in_daily_and_hourly_fre...
function test_daily_baseline_data_with_extreme_and_negative_values_in_daily_and_hourly_frequencies (line 370) | def test_daily_baseline_data_with_extreme_and_negative_values_in_daily_a...
function test_daily_baseline_data_with_specific_hourly_input (line 399) | def test_daily_baseline_data_with_specific_hourly_input():
function test_daily_baseline_data_with_specific_daily_input (line 417) | def test_daily_baseline_data_with_specific_daily_input():
function test_daily_baseline_data_with_missing_specific_daily_input (line 434) | def test_daily_baseline_data_with_missing_specific_daily_input():
function test_daily_baseline_data_with_missing_hourly_temperature_data (line 453) | def test_daily_baseline_data_with_missing_hourly_temperature_data(
function test_daily_baseline_data_with_missing_half_hourly_temperature_data (line 492) | def test_daily_baseline_data_with_missing_half_hourly_temperature_data(
function test_daily_baseline_data_with_missing_daily_temperature_data (line 532) | def test_daily_baseline_data_with_missing_daily_temperature_data(
function test_daily_baseline_data_with_missing_meter_data (line 569) | def test_daily_baseline_data_with_missing_meter_data(
function test_daily_baseline_data_with_missing_meter_data_37_days (line 601) | def test_daily_baseline_data_with_missing_meter_data_37_days(
function test_duplicate_datetime_index_values (line 633) | def test_duplicate_datetime_index_values():
function test_daily_reporting_data_with_half_hourly_and_hourly_frequencies (line 658) | def test_daily_reporting_data_with_half_hourly_and_hourly_frequencies(
function test_daily_reporting_data_with_missing_half_hourly_and_hourly_frequencies (line 681) | def test_daily_reporting_data_with_missing_half_hourly_and_hourly_freque...
function test_daily_reporting_data_high_frequency_temperature_warning_gives_proper_results (line 726) | def test_daily_reporting_data_high_frequency_temperature_warning_gives_p...
function test_daily_reporting_data_with_missing_daily_frequencies (line 753) | def test_daily_reporting_data_with_missing_daily_frequencies(get_datetim...
function baseline_data_daily_params (line 792) | def baseline_data_daily_params(il_electricity_cdd_hdd_daily):
function test_offset_temperature_aggregations (line 812) | def test_offset_temperature_aggregations(baseline_data_daily_params, tz,...
function test_non_ns_datetime_index (line 828) | def test_non_ns_datetime_index():
function test_offset_aggregations_hourly (line 842) | def test_offset_aggregations_hourly(il_electricity_cdd_hdd_hourly):
function test_dst_handling (line 857) | def test_dst_handling():
FILE: tests/eemeter/daily_model/test_daily_model.py
function daily_series (line 28) | def daily_series():
function bad_daily_series (line 43) | def bad_daily_series(daily_series):
function missing_daily_data (line 50) | def missing_daily_data(bad_daily_series) -> DailyBaselineData:
function bad_daily_data (line 58) | def bad_daily_data(bad_daily_series) -> DailyBaselineData:
function test_disqualified_data_error (line 64) | def test_disqualified_data_error(missing_daily_data):
function test_model_cvrmse_error (line 73) | def test_model_cvrmse_error(bad_daily_data):
function test_timezone_behavior (line 80) | def test_timezone_behavior(daily_series):
function test_predict_df_matches_input_index (line 117) | def test_predict_df_matches_input_index(daily_series):
FILE: tests/eemeter/daily_model/test_fit_base_models.py
function meter_data (line 32) | def meter_data():
function get_settings (line 106) | def get_settings():
function get_optimized_result (line 111) | def get_optimized_result(get_settings):
function test_fit_initial_models_from_full_model (line 144) | def test_fit_initial_models_from_full_model(meter_data, get_settings):
function test_fit_model (line 162) | def test_fit_model(meter_data, get_settings):
function test_fit_final_model (line 201) | def test_fit_final_model(meter_data, get_settings, get_optimized_result):
FILE: tests/eemeter/daily_model/test_fit_model.py
class TestFitModel (line 28) | class TestFitModel:
method setup_class (line 30) | def setup_class(cls):
method test_fit_model (line 37) | def test_fit_model(self):
FILE: tests/eemeter/daily_model/test_objective_function.py
function test_get_idx (line 31) | def test_get_idx():
function test_no_weights_obj_fcn (line 58) | def test_no_weights_obj_fcn():
function obj_fcn_test (line 94) | def obj_fcn_test(self):
function test_obj_fcn_decorator (line 115) | def test_obj_fcn_decorator():
FILE: tests/eemeter/daily_model/test_optimize.py
function test_obj_fcn_dec (line 29) | def test_obj_fcn_dec():
function get_obj_fcn (line 44) | def get_obj_fcn(settings):
function get_x0 (line 78) | def get_x0():
function get_bnds (line 83) | def get_bnds():
function test_optimizer_run (line 97) | def test_optimizer_run(get_x0, get_bnds):
FILE: tests/eemeter/daily_model/test_optimize_results.py
function test_get_k (line 27) | def test_get_k():
function test_reduce_model (line 143) | def test_reduce_model(
class TestOptimizeResult (line 178) | class TestOptimizeResult:
method optimize_result (line 180) | def optimize_result(self):
method test_named_coeffs (line 227) | def test_named_coeffs(self, optimize_result):
method test_prediction_uncertainty (line 231) | def test_prediction_uncertainty(self, optimize_result):
method test_set_model_key (line 236) | def test_set_model_key(self, optimize_result):
method test_refine_model (line 242) | def test_refine_model(self, optimize_result):
method test_eval (line 248) | def test_eval(self, optimize_result):
FILE: tests/eemeter/daily_model/utilities/test_adaptive_loss.py
function test_remove_outliers (line 23) | def test_remove_outliers():
function test_adaptive_loss_fcn (line 44) | def test_adaptive_loss_fcn():
function test_adaptive_weights (line 70) | def test_adaptive_weights():
FILE: tests/eemeter/daily_model/utilities/test_base_model.py
function get_settings (line 30) | def get_settings():
function test_get_intercept (line 35) | def test_get_intercept():
function test_get_slope (line 61) | def test_get_slope():
function test_linear_fit (line 107) | def test_linear_fit():
function test_get_smooth_coeffs (line 137) | def test_get_smooth_coeffs():
function test_fix_identical_bnds (line 165) | def test_fix_identical_bnds():
FILE: tests/eemeter/daily_model/utilities/test_config.py
function test_default_settings (line 21) | def test_default_settings():
function test_custom_settings (line 40) | def test_custom_settings():
function test_invalid_settings (line 79) | def test_invalid_settings():
FILE: tests/eemeter/daily_model/utilities/test_ellipsoid_test.py
function test_ellipsoid_intersection_test (line 25) | def test_ellipsoid_intersection_test():
function test_ellipsoid_K_function (line 48) | def test_ellipsoid_K_function():
function test_robust_confidence_ellipse (line 68) | def test_robust_confidence_ellipse():
function test_ellipsoid_split_filter (line 92) | def test_ellipsoid_split_filter():
FILE: tests/eemeter/daily_model/utilities/test_selection_criteria.py
function test_neg_log_likelihood (line 21) | def test_neg_log_likelihood():
function test_selection_criteria (line 60) | def test_selection_criteria():
FILE: tests/eemeter/hourly_model/conftest.py
function hourly_data (line 23) | def hourly_data():
function baseline (line 29) | def baseline(hourly_data):
function reporting (line 38) | def reporting(hourly_data):
FILE: tests/eemeter/hourly_model/test_hourly_model.py
function test_good_data (line 34) | def test_good_data(baseline, reporting):
function test_misaligned_data (line 48) | def test_misaligned_data(baseline, reporting):
function test_tz_naive (line 56) | def test_tz_naive(baseline):
function test_tz_mismatch (line 62) | def test_tz_mismatch(baseline):
function test_predict_missing_fit_features (line 74) | def test_predict_missing_fit_features(baseline, reporting):
function test_nonsolar_predict_with_ghi (line 83) | def test_nonsolar_predict_with_ghi(baseline, reporting, caplog):
function test_forced_solar_model_fit_no_ghi (line 93) | def test_forced_solar_model_fit_no_ghi(baseline):
function test_forced_nonsolar_model_fit_with_ghi (line 100) | def test_forced_nonsolar_model_fit_with_ghi(baseline):
function test_no_data (line 108) | def test_no_data(baseline):
function test_negative_meter_values (line 115) | def test_negative_meter_values(baseline):
function test_invalid_baseline_lengths (line 128) | def test_invalid_baseline_lengths(baseline):
function test_low_freq_temp (line 148) | def test_low_freq_temp(baseline):
function test_low_freq_meter (line 159) | def test_low_freq_meter(baseline):
function test_monthly_percentage (line 170) | def test_monthly_percentage(baseline):
function test_monthly_ghi_percentage (line 221) | def test_monthly_ghi_percentage(baseline):
function test_hourly_fit_daily_threshold (line 242) | def test_hourly_fit_daily_threshold(baseline):
function test_hourly_error_metric_dq (line 262) | def test_hourly_error_metric_dq(baseline):
function assert_dq (line 271) | def assert_dq(data, expected_disqualifications):
function test_hourly_dict_settings (line 279) | def test_hourly_dict_settings():
FILE: tests/test_caltrack_design_matrices.py
function test_create_caltrack_hourly_preliminary_design_matrix (line 30) | def test_create_caltrack_hourly_preliminary_design_matrix(
function test_create_caltrack_daily_design_matrix (line 53) | def test_create_caltrack_daily_design_matrix(il_electricity_cdd_hdd_daily):
function test_create_caltrack_billing_design_matrix (line 71) | def test_create_caltrack_billing_design_matrix(il_electricity_cdd_hdd_bi...
function preliminary_hourly_design_matrix (line 90) | def preliminary_hourly_design_matrix(il_electricity_cdd_hdd_hourly):
function segmentation (line 99) | def segmentation(preliminary_hourly_design_matrix):
function occupancy_lookup (line 106) | def occupancy_lookup(preliminary_hourly_design_matrix, segmentation):
function temperature_bins (line 113) | def temperature_bins(preliminary_hourly_design_matrix, segmentation, occ...
function test_create_caltrack_hourly_segmented_design_matrices (line 121) | def test_create_caltrack_hourly_segmented_design_matrices(
function test_create_caltrack_billing_design_matrix_empty_temp (line 161) | def test_create_caltrack_billing_design_matrix_empty_temp(
function test_create_caltrack_billing_design_matrix_partial_empty_temp (line 172) | def test_create_caltrack_billing_design_matrix_partial_empty_temp(
FILE: tests/test_caltrack_hourly.py
function segmented_data (line 32) | def segmented_data():
function occupancy_lookup (line 48) | def occupancy_lookup():
function occupied_temperature_bins (line 57) | def occupied_temperature_bins():
function unoccupied_temperature_bins (line 63) | def unoccupied_temperature_bins():
function test_caltrack_hourly_fit_feature_processor (line 68) | def test_caltrack_hourly_fit_feature_processor(
function test_caltrack_hourly_prediction_feature_processor (line 98) | def test_caltrack_hourly_prediction_feature_processor(
function segmented_design_matrices (line 128) | def segmented_design_matrices(
function test_fit_caltrack_hourly_model_segment (line 145) | def test_fit_caltrack_hourly_model_segment(segmented_design_matrices):
function temps (line 163) | def temps():
function test_fit_caltrack_hourly_model (line 170) | def test_fit_caltrack_hourly_model(
function test_serialize_caltrack_hourly_model (line 192) | def test_serialize_caltrack_hourly_model(
function segmented_data_nans (line 211) | def segmented_data_nans():
function occupancy_lookup_nans (line 228) | def occupancy_lookup_nans():
function temperature_bins_nans (line 242) | def temperature_bins_nans():
function segmented_design_matrices_nans (line 255) | def segmented_design_matrices_nans(
function test_fit_caltrack_hourly_model_nans_less_than_week_predict (line 277) | def test_fit_caltrack_hourly_model_nans_less_than_week_predict(
function segmented_data_nans_less_than_week (line 303) | def segmented_data_nans_less_than_week():
function occupancy_lookup_nans_less_than_week (line 320) | def occupancy_lookup_nans_less_than_week():
function temperature_bins_nans_less_than_week (line 334) | def temperature_bins_nans_less_than_week():
function segmented_design_matrices_nans_less_than_week (line 347) | def segmented_design_matrices_nans_less_than_week(
function temps_extended (line 371) | def temps_extended():
function test_fit_caltrack_hourly_model_nans_less_than_week_fit (line 378) | def test_fit_caltrack_hourly_model_nans_less_than_week_fit(
function segmented_design_matrices_empty_models (line 402) | def segmented_design_matrices_empty_models(
function test_predict_caltrack_hourly_model_empty_models (line 420) | def test_predict_caltrack_hourly_model_empty_models(
function occupancy_lookup_zeroes (line 443) | def occupancy_lookup_zeroes():
function segmented_design_matrices_single_mode (line 452) | def segmented_design_matrices_single_mode(
function test_fit_caltrack_hourly_model_segment_single_mode (line 469) | def test_fit_caltrack_hourly_model_segment_single_mode(
FILE: tests/test_derivatives.py
function baseline_data_daily (line 45) | def baseline_data_daily(il_electricity_cdd_hdd_daily):
function baseline_model_daily (line 60) | def baseline_model_daily(baseline_data_daily):
function reporting_data_daily (line 66) | def reporting_data_daily(il_electricity_cdd_hdd_daily):
function reporting_model_daily (line 80) | def reporting_model_daily(reporting_data_daily):
function reporting_meter_data_daily (line 86) | def reporting_meter_data_daily():
function reporting_temperature_data (line 92) | def reporting_temperature_data():
function test_metered_savings_cdd_hdd_daily (line 97) | def test_metered_savings_cdd_hdd_daily(
function baseline_model_billing (line 111) | def baseline_model_billing(il_electricity_cdd_hdd_billing_monthly):
function reporting_model_billing (line 126) | def reporting_model_billing(il_electricity_cdd_hdd_billing_monthly):
function reporting_meter_data_billing (line 142) | def reporting_meter_data_billing():
function test_metered_savings_cdd_hdd_billing (line 147) | def test_metered_savings_cdd_hdd_billing(
function test_metered_savings_cdd_hdd_billing_no_reporting_data (line 160) | def test_metered_savings_cdd_hdd_billing_no_reporting_data(
function test_metered_savings_cdd_hdd_billing_single_record_reporting_data (line 185) | def test_metered_savings_cdd_hdd_billing_single_record_reporting_data(
function baseline_model_billing_single_record_baseline_data (line 217) | def baseline_model_billing_single_record_baseline_data(
function test_metered_savings_cdd_hdd_billing_single_record_baseline_data (line 238) | def test_metered_savings_cdd_hdd_billing_single_record_baseline_data(
function reporting_meter_data_billing_wrong_timestamp (line 275) | def reporting_meter_data_billing_wrong_timestamp():
function test_metered_savings_cdd_hdd_billing_reporting_data_wrong_timestamp (line 280) | def test_metered_savings_cdd_hdd_billing_reporting_data_wrong_timestamp(
function test_modeled_savings_cdd_hdd_daily (line 292) | def test_modeled_savings_cdd_hdd_daily(
function test_modeled_savings_daily_empty_temperature_data (line 310) | def test_modeled_savings_daily_empty_temperature_data(
function baseline_model_hourly (line 321) | def baseline_model_hourly(il_electricity_cdd_hdd_hourly):
function reporting_model_hourly (line 360) | def reporting_model_hourly(il_electricity_cdd_hdd_hourly):
function reporting_meter_data_hourly (line 399) | def reporting_meter_data_hourly():
function test_metered_savings_cdd_hdd_hourly (line 404) | def test_metered_savings_cdd_hdd_hourly(
function test_modeled_savings_cdd_hdd_hourly (line 419) | def test_modeled_savings_cdd_hdd_hourly(
function normal_year_temperature_data (line 442) | def normal_year_temperature_data():
function test_modeled_savings_cdd_hdd_billing (line 448) | def test_modeled_savings_cdd_hdd_billing(
function reporting_meter_data_billing_not_aligned (line 483) | def reporting_meter_data_billing_not_aligned():
function test_metered_savings_not_aligned_reporting_data (line 488) | def test_metered_savings_not_aligned_reporting_data(
function baseline_model_billing_single_record (line 501) | def baseline_model_billing_single_record(il_electricity_cdd_hdd_billing_...
function test_metered_savings_model_single_record (line 516) | def test_metered_savings_model_single_record(
function baseline_model_hourly_single_segment (line 554) | def baseline_model_hourly_single_segment(il_electricity_cdd_hdd_hourly):
FILE: tests/test_exceptions.py
function test_eemeter_error (line 26) | def test_eemeter_error():
function test_no_baseline_data_error (line 31) | def test_no_baseline_data_error():
function test_no_reporting_data_error (line 37) | def test_no_reporting_data_error():
function test_missing_model_parameter_error (line 43) | def test_missing_model_parameter_error():
function test_unrecognized_model_type_error (line 49) | def test_unrecognized_model_type_error():
FILE: tests/test_features.py
function test_compute_temperature_features_no_freq_index (line 33) | def test_compute_temperature_features_no_freq_index(
function test_compute_temperature_features_no_meter_data_tz (line 44) | def test_compute_temperature_features_no_meter_data_tz(
function test_compute_temperature_features_no_temp_data_tz (line 54) | def test_compute_temperature_features_no_temp_data_tz(
function test_compute_temperature_features_hourly_temp_mean (line 65) | def test_compute_temperature_features_hourly_temp_mean(il_electricity_cd...
function test_compute_temperature_features_hourly_hourly_degree_days (line 82) | def test_compute_temperature_features_hourly_hourly_degree_days(
function test_compute_temperature_features_hourly_hourly_degree_days_use_mean_false (line 120) | def test_compute_temperature_features_hourly_hourly_degree_days_use_mean...
function test_compute_temperature_features_hourly_daily_degree_days_fail (line 159) | def test_compute_temperature_features_hourly_daily_degree_days_fail(
function test_compute_temperature_features_hourly_daily_missing_explicit_freq (line 178) | def test_compute_temperature_features_hourly_daily_missing_explicit_freq(
function test_compute_temperature_features_hourly_bad_degree_days (line 198) | def test_compute_temperature_features_hourly_bad_degree_days(
function test_compute_temperature_features_hourly_data_quality (line 217) | def test_compute_temperature_features_hourly_data_quality(
function test_compute_temperature_features_daily_temp_mean (line 240) | def test_compute_temperature_features_daily_temp_mean(il_electricity_cdd...
function test_compute_temperature_features_daily_daily_degree_days (line 254) | def test_compute_temperature_features_daily_daily_degree_days(
function test_compute_temperature_features_daily_daily_degree_days_use_mean_false (line 289) | def test_compute_temperature_features_daily_daily_degree_days_use_mean_f...
function test_compute_temperature_features_daily_hourly_degree_days (line 325) | def test_compute_temperature_features_daily_hourly_degree_days(
function test_compute_temperature_features_daily_hourly_degree_days_use_mean_false (line 360) | def test_compute_temperature_features_daily_hourly_degree_days_use_mean_...
function test_compute_temperature_features_daily_bad_degree_days (line 396) | def test_compute_temperature_features_daily_bad_degree_days(
function test_compute_temperature_features_daily_data_quality (line 411) | def test_compute_temperature_features_daily_data_quality(il_electricity_...
function test_compute_temperature_features_billing_monthly_temp_mean (line 428) | def test_compute_temperature_features_billing_monthly_temp_mean(
function test_compute_temperature_features_billing_monthly_daily_degree_days (line 443) | def test_compute_temperature_features_billing_monthly_daily_degree_days(
function test_compute_temperature_features_billing_monthly_daily_degree_days_use_mean_false (line 478) | def test_compute_temperature_features_billing_monthly_daily_degree_days_...
function test_compute_temperature_features_billing_monthly_hourly_degree_days (line 514) | def test_compute_temperature_features_billing_monthly_hourly_degree_days(
function test_compute_temperature_features_billing_monthly_hourly_degree_days_use_mean_false (line 549) | def test_compute_temperature_features_billing_monthly_hourly_degree_days...
function test_compute_temperature_features_billing_monthly_bad_degree_day_method (line 585) | def test_compute_temperature_features_billing_monthly_bad_degree_day_met...
function test_compute_temperature_features_billing_monthly_data_quality (line 600) | def test_compute_temperature_features_billing_monthly_data_quality(
function test_compute_temperature_features_billing_bimonthly_temp_mean (line 619) | def test_compute_temperature_features_billing_bimonthly_temp_mean(
function test_compute_temperature_features_billing_bimonthly_daily_degree_days (line 634) | def test_compute_temperature_features_billing_bimonthly_daily_degree_days(
function test_compute_temperature_features_billing_bimonthly_hourly_degree_days (line 669) | def test_compute_temperature_features_billing_bimonthly_hourly_degree_days(
function test_compute_temperature_features_billing_bimonthly_bad_degree_days (line 704) | def test_compute_temperature_features_billing_bimonthly_bad_degree_days(
function test_compute_temperature_features_billing_bimonthly_data_quality (line 719) | def test_compute_temperature_features_billing_bimonthly_data_quality(
function test_compute_temperature_features_shorter_temperature_data (line 738) | def test_compute_temperature_features_shorter_temperature_data(
function test_compute_temperature_features_shorter_meter_data (line 757) | def test_compute_temperature_features_shorter_meter_data(il_electricity_...
function test_compute_temperature_features_with_duplicated_index (line 776) | def test_compute_temperature_features_with_duplicated_index(
function test_compute_temperature_features_empty_temperature_data (line 792) | def test_compute_temperature_features_empty_temperature_data():
function test_compute_temperature_features_empty_meter_data (line 809) | def test_compute_temperature_features_empty_meter_data():
function test_merge_features (line 827) | def test_merge_features():
function test_merge_features_empty_raises (line 847) | def test_merge_features_empty_raises():
function meter_data_hourly (line 853) | def meter_data_hourly():
function test_compute_usage_per_day_feature_hourly (line 858) | def test_compute_usage_per_day_feature_hourly(meter_data_hourly):
function test_compute_usage_per_day_feature_hourly_series_name (line 865) | def test_compute_usage_per_day_feature_hourly_series_name(meter_data_hou...
function meter_data_daily (line 873) | def meter_data_daily():
function test_compute_usage_per_day_feature_daily (line 878) | def test_compute_usage_per_day_feature_daily(meter_data_daily):
function meter_data_billing (line 885) | def meter_data_billing():
function test_compute_usage_per_day_feature_billing (line 890) | def test_compute_usage_per_day_feature_billing(meter_data_billing):
function complete_hour_of_week_feature (line 897) | def complete_hour_of_week_feature():
function test_get_missing_hours_of_week_warning_ok (line 904) | def test_get_missing_hours_of_week_warning_ok(complete_hour_of_week_feat...
function partial_hour_of_week_feature (line 910) | def partial_hour_of_week_feature():
function test_get_missing_hours_of_week_warning_triggered (line 917) | def test_get_missing_hours_of_week_warning_triggered(partial_hour_of_wee...
function test_compute_time_features_bad_freq (line 924) | def test_compute_time_features_bad_freq():
function test_compute_time_features_all (line 930) | def test_compute_time_features_all():
function test_compute_time_features_none (line 949) | def test_compute_time_features_none():
function occupancy_precursor (line 958) | def occupancy_precursor(il_electricity_cdd_hdd_hourly):
function test_estimate_hour_of_week_occupancy_no_segmentation (line 974) | def test_estimate_hour_of_week_occupancy_no_segmentation(occupancy_precu...
function one_month_segmentation (line 982) | def one_month_segmentation(occupancy_precursor):
function test_estimate_hour_of_week_occupancy_one_month_segmentation (line 986) | def test_estimate_hour_of_week_occupancy_one_month_segmentation(
function temperature_means (line 1011) | def temperature_means():
function test_fit_temperature_bins_no_segmentation (line 1016) | def test_fit_temperature_bins_no_segmentation(temperature_means):
function occupancy_lookup_no_segmentation (line 1026) | def occupancy_lookup_no_segmentation(occupancy_precursor):
function test_fit_temperature_bins_no_segmentation_with_occupancy (line 1031) | def test_fit_temperature_bins_no_segmentation_with_occupancy(
function test_fit_temperature_bins_one_month_segmentation (line 1048) | def test_fit_temperature_bins_one_month_segmentation(
function occupancy_lookup_one_month_segmentation (line 1071) | def occupancy_lookup_one_month_segmentation(
function test_fit_temperature_bins_with_occupancy_lookup (line 1080) | def test_fit_temperature_bins_with_occupancy_lookup(
function test_fit_temperature_bins_empty (line 1123) | def test_fit_temperature_bins_empty(temperature_means):
function test_compute_temperature_bin_features (line 1130) | def test_compute_temperature_bin_features(temperature_means):
function even_occupancy (line 1139) | def even_occupancy():
function test_compute_occupancy_feature (line 1143) | def test_compute_occupancy_feature(even_occupancy):
function test_compute_occupancy_feature_with_nans (line 1153) | def test_compute_occupancy_feature_with_nans(even_occupancy):
function occupancy_precursor_only_nan (line 1172) | def occupancy_precursor_only_nan(il_electricity_cdd_hdd_hourly):
function segmentation_only_nan (line 1192) | def segmentation_only_nan(occupancy_precursor_only_nan):
function test_estimate_hour_of_week_occupancy_segmentation_only_nan (line 1198) | def test_estimate_hour_of_week_occupancy_segmentation_only_nan(
function test_compute_occupancy_feature_hour_of_week_has_nan (line 1206) | def test_compute_occupancy_feature_hour_of_week_has_nan(even_occupancy):
FILE: tests/test_io.py
function test_meter_data_from_csv (line 33) | def test_meter_data_from_csv(sample_metadata):
function test_meter_data_from_csv_gzipped (line 49) | def test_meter_data_from_csv_gzipped(sample_metadata):
function test_meter_data_from_csv_with_tz (line 62) | def test_meter_data_from_csv_with_tz(sample_metadata):
function test_meter_data_from_csv_hourly_freq (line 75) | def test_meter_data_from_csv_hourly_freq(sample_metadata):
function test_meter_data_from_csv_daily_freq (line 88) | def test_meter_data_from_csv_daily_freq(sample_metadata):
function test_meter_data_from_csv_custom_columns (line 101) | def test_meter_data_from_csv_custom_columns(sample_metadata):
function test_meter_data_from_json_none (line 111) | def test_meter_data_from_json_none(sample_metadata):
function test_meter_data_from_json_orient_list (line 119) | def test_meter_data_from_json_orient_list(sample_metadata):
function test_meter_data_from_json_orient_list_empty (line 127) | def test_meter_data_from_json_orient_list_empty(sample_metadata):
function test_meter_data_from_json_orient_records (line 135) | def test_meter_data_from_json_orient_records(sample_metadata):
function test_meter_data_from_json_orient_records_empty (line 147) | def test_meter_data_from_json_orient_records_empty(sample_metadata):
function test_meter_data_from_json_orient_records_with_estimated_true (line 155) | def test_meter_data_from_json_orient_records_with_estimated_true(sample_...
function test_meter_data_from_json_orient_records_with_estimated_false (line 170) | def test_meter_data_from_json_orient_records_with_estimated_false(sample...
function test_meter_data_from_json_bad_orient (line 186) | def test_meter_data_from_json_bad_orient(sample_metadata):
function test_meter_data_to_csv (line 192) | def test_meter_data_to_csv(sample_metadata):
function test_temperature_data_from_csv (line 205) | def test_temperature_data_from_csv(sample_metadata):
function test_temperature_data_from_csv_gzipped (line 221) | def test_temperature_data_from_csv_gzipped(sample_metadata):
function test_temperature_data_from_csv_with_tz (line 234) | def test_temperature_data_from_csv_with_tz(sample_metadata):
function test_temperature_data_from_csv_hourly_freq (line 247) | def test_temperature_data_from_csv_hourly_freq(sample_metadata):
function test_temperature_data_from_csv_custom_columns (line 260) | def test_temperature_data_from_csv_custom_columns(sample_metadata):
function test_temperature_data_from_json_orient_list (line 272) | def test_temperature_data_from_json_orient_list(sample_metadata):
function test_temperature_data_from_json_bad_orient (line 280) | def test_temperature_data_from_json_bad_orient(sample_metadata):
function test_temperature_data_to_csv (line 286) | def test_temperature_data_to_csv(sample_metadata):
FILE: tests/test_json_serialization.py
function test_json_daily (line 32) | def test_json_daily():
function test_json_billing (line 75) | def test_json_billing():
function test_json_hourly_with_zeros (line 118) | def test_json_hourly_with_zeros():
function test_json_caltrack_hourly (line 133) | def test_json_caltrack_hourly():
function test_legacy_deserialization_daily (line 177) | def test_legacy_deserialization_daily():
function test_legacy_deserialization_hourly (line 209) | def test_legacy_deserialization_hourly(request):
FILE: tests/test_samples.py
function test_samples (line 23) | def test_samples():
function test_load_sample_hourly (line 48) | def test_load_sample_hourly():
function test_load_sample_daily (line 82) | def test_load_sample_daily():
function test_load_sample_billing_monthly (line 92) | def test_load_sample_billing_monthly():
function test_load_sample_unknown (line 104) | def test_load_sample_unknown():
FILE: tests/test_segmentation.py
function index_8760 (line 29) | def index_8760():
function test_segment_time_series_invalid_type (line 33) | def test_segment_time_series_invalid_type(index_8760):
function test_segment_time_series_single (line 38) | def test_segment_time_series_single(index_8760):
function test_segment_time_series_one_month (line 45) | def test_segment_time_series_one_month(index_8760):
function test_segment_time_series_three_month (line 65) | def test_segment_time_series_three_month(index_8760):
function test_segment_time_series_three_month_weighted (line 85) | def test_segment_time_series_three_month_weighted(index_8760):
function test_segment_time_series_drop_zero_weight_segments (line 105) | def test_segment_time_series_drop_zero_weight_segments(index_8760):
function dataset (line 115) | def dataset():
function test_iterate_segmented_dataset_no_segmentation (line 120) | def test_iterate_segmented_dataset_no_segmentation(dataset):
function segmentation (line 133) | def segmentation(dataset):
function test_iterate_segmented_dataset_with_segmentation (line 137) | def test_iterate_segmented_dataset_with_segmentation(dataset, segmentati...
function test_iterate_segmented_dataset_with_processor (line 158) | def test_iterate_segmented_dataset_with_processor(dataset, segmentation):
function test_segment_model (line 189) | def test_segment_model():
function test_segmented_model (line 203) | def test_segmented_model():
function test_segment_model_serialized (line 233) | def test_segment_model_serialized():
function test_segmented_model_serialized (line 247) | def test_segmented_model_serialized():
FILE: tests/test_transform.py
function test_as_freq_not_series (line 42) | def test_as_freq_not_series(il_electricity_cdd_hdd_billing_monthly):
function test_as_freq_hourly (line 49) | def test_as_freq_hourly(il_electricity_cdd_hdd_billing_monthly):
function test_as_freq_daily (line 57) | def test_as_freq_daily(il_electricity_cdd_hdd_billing_monthly):
function test_as_freq_daily_all_nones_instantaneous (line 65) | def test_as_freq_daily_all_nones_instantaneous(il_electricity_cdd_hdd_bi...
function test_as_freq_daily_all_nones (line 74) | def test_as_freq_daily_all_nones(il_electricity_cdd_hdd_billing_monthly):
function test_as_freq_month_start (line 83) | def test_as_freq_month_start(il_electricity_cdd_hdd_billing_monthly):
function test_as_freq_hourly_temperature (line 91) | def test_as_freq_hourly_temperature(il_electricity_cdd_hdd_billing_month...
function test_as_freq_daily_temperature (line 99) | def test_as_freq_daily_temperature(il_electricity_cdd_hdd_billing_monthly):
function test_as_freq_month_start_temperature (line 107) | def test_as_freq_month_start_temperature(il_electricity_cdd_hdd_billing_...
function test_as_freq_daily_temperature_monthly (line 115) | def test_as_freq_daily_temperature_monthly(il_electricity_cdd_hdd_billin...
function test_as_freq_empty (line 124) | def test_as_freq_empty():
function test_as_freq_perserves_nulls (line 130) | def test_as_freq_perserves_nulls(il_electricity_cdd_hdd_billing_monthly):
function test_day_counts (line 145) | def test_day_counts(il_electricity_cdd_hdd_billing_monthly):
function test_day_counts_empty_series (line 154) | def test_day_counts_empty_series():
function test_get_baseline_data (line 162) | def test_get_baseline_data(il_electricity_cdd_hdd_hourly):
function test_get_baseline_data_with_timezones (line 169) | def test_get_baseline_data_with_timezones(il_electricity_cdd_hdd_hourly):
function test_get_baseline_data_with_end (line 181) | def test_get_baseline_data_with_end(il_electricity_cdd_hdd_hourly):
function test_get_baseline_data_with_end_no_max_days (line 189) | def test_get_baseline_data_with_end_no_max_days(il_electricity_cdd_hdd_h...
function test_get_baseline_data_empty (line 199) | def test_get_baseline_data_empty(il_electricity_cdd_hdd_hourly):
function test_get_baseline_data_start_gap (line 206) | def test_get_baseline_data_start_gap(il_electricity_cdd_hdd_hourly):
function test_get_baseline_data_end_gap (line 224) | def test_get_baseline_data_end_gap(il_electricity_cdd_hdd_hourly):
function test_get_baseline_data_with_overshoot (line 242) | def test_get_baseline_data_with_overshoot(il_electricity_cdd_hdd_billing...
function test_get_baseline_data_with_ignored_gap (line 275) | def test_get_baseline_data_with_ignored_gap(il_electricity_cdd_hdd_billi...
function test_get_baseline_data_with_overshoot_and_ignored_gap (line 308) | def test_get_baseline_data_with_overshoot_and_ignored_gap(
function test_get_baseline_data_n_days_billing_period_overshoot (line 335) | def test_get_baseline_data_n_days_billing_period_overshoot(
function test_get_baseline_data_too_far_from_date (line 352) | def test_get_baseline_data_too_far_from_date(il_electricity_cdd_hdd_bill...
function test_get_reporting_data (line 400) | def test_get_reporting_data(il_electricity_cdd_hdd_hourly):
function test_get_reporting_data_with_timezones (line 407) | def test_get_reporting_data_with_timezones(il_electricity_cdd_hdd_hourly):
function test_get_reporting_data_with_start (line 419) | def test_get_reporting_data_with_start(il_electricity_cdd_hdd_hourly):
function test_get_reporting_data_with_start_no_max_days (line 427) | def test_get_reporting_data_with_start_no_max_days(il_electricity_cdd_hd...
function test_get_reporting_data_empty (line 437) | def test_get_reporting_data_empty(il_electricity_cdd_hdd_hourly):
function test_get_reporting_data_start_gap (line 444) | def test_get_reporting_data_start_gap(il_electricity_cdd_hdd_hourly):
function test_get_reporting_data_end_gap (line 464) | def test_get_reporting_data_end_gap(il_electricity_cdd_hdd_hourly):
function test_get_reporting_data_with_overshoot (line 482) | def test_get_reporting_data_with_overshoot(il_electricity_cdd_hdd_billin...
function test_get_reporting_data_with_ignored_gap (line 515) | def test_get_reporting_data_with_ignored_gap(il_electricity_cdd_hdd_bill...
function test_get_reporting_data_with_overshoot_and_ignored_gap (line 548) | def test_get_reporting_data_with_overshoot_and_ignored_gap(
function test_get_terms_unrecognized_method (line 575) | def test_get_terms_unrecognized_method(il_electricity_cdd_hdd_billing_mo...
function test_get_terms_unsorted_index (line 582) | def test_get_terms_unsorted_index(il_electricity_cdd_hdd_billing_monthly):
function test_get_terms_bad_term_labels (line 589) | def test_get_terms_bad_term_labels(il_electricity_cdd_hdd_billing_monthly):
function test_get_terms_default_term_labels (line 600) | def test_get_terms_default_term_labels(il_electricity_cdd_hdd_billing_mo...
function test_get_terms_custom_term_labels (line 607) | def test_get_terms_custom_term_labels(il_electricity_cdd_hdd_billing_mon...
function test_get_terms_empty_index_input (line 616) | def test_get_terms_empty_index_input(il_electricity_cdd_hdd_billing_mont...
function test_get_terms_strict (line 623) | def test_get_terms_strict(il_electricity_cdd_hdd_billing_monthly):
function test_get_terms_nearest (line 684) | def test_get_terms_nearest(il_electricity_cdd_hdd_billing_monthly):
function test_term_repr (line 738) | def test_term_repr(il_electricity_cdd_hdd_billing_monthly):
function test_remove_duplicates_df (line 748) | def test_remove_duplicates_df():
function test_remove_duplicates_series (line 757) | def test_remove_duplicates_series():
function test_as_freq_hourly_to_daily (line 766) | def test_as_freq_hourly_to_daily(il_electricity_cdd_hdd_hourly):
function test_as_freq_daily_to_daily (line 776) | def test_as_freq_daily_to_daily(il_electricity_cdd_hdd_daily):
function test_as_freq_hourly_to_daily_include_coverage (line 784) | def test_as_freq_hourly_to_daily_include_coverage(il_electricity_cdd_hdd...
function test_clean_caltrack_billing_daily_data_billing (line 793) | def test_clean_caltrack_billing_daily_data_billing(
function test_clean_caltrack_billing_daily_data_daily (line 802) | def test_clean_caltrack_billing_daily_data_daily(il_electricity_cdd_hdd_...
function test_clean_caltrack_billing_daily_data_daily_local_tz (line 809) | def test_clean_caltrack_billing_daily_data_daily_local_tz(il_electricity...
function test_clean_caltrack_billing_daily_data_hourly (line 818) | def test_clean_caltrack_billing_daily_data_hourly(il_electricity_cdd_hdd...
function test_clean_caltrack_daily_data_hourly (line 824) | def test_clean_caltrack_daily_data_hourly(il_electricity_cdd_hdd_hourly):
function test_clean_caltrack_daily_data_hourly_local_tz (line 830) | def test_clean_caltrack_daily_data_hourly_local_tz(il_electricity_cdd_hd...
function test_clean_caltrack_billing_data_estimated (line 837) | def test_clean_caltrack_billing_data_estimated(il_electricity_cdd_hdd_bi...
function test_clean_caltrack_billing_data_uneven_datetimes (line 851) | def test_clean_caltrack_billing_data_uneven_datetimes(
function test_overwrite_partial_rows_with_nan (line 897) | def test_overwrite_partial_rows_with_nan(il_electricity_cdd_hdd_billing_...
function test_add_freq (line 908) | def test_add_freq(il_electricity_cdd_hdd_hourly):
function test_trim_two_dataframes (line 919) | def test_trim_two_dataframes(
function test_format_temperature_data_for_caltrack (line 945) | def test_format_temperature_data_for_caltrack(il_electricity_cdd_hdd_hou...
function test_format_energy_data_for_caltrack_hourly (line 973) | def test_format_energy_data_for_caltrack_hourly(il_electricity_cdd_hdd_h...
function test_format_energy_data_for_caltrack_daily (line 998) | def test_format_energy_data_for_caltrack_daily(il_electricity_cdd_hdd_da...
function test_format_energy_data_for_caltrack_billing (line 1023) | def test_format_energy_data_for_caltrack_billing(il_electricity_cdd_hdd_...
FILE: tests/test_version.py
function test_version (line 18) | def test_version():
FILE: tests/test_warnings.py
function test_eemeter_warning (line 18) | def test_eemeter_warning():
Condensed preview — 218 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (2,924K chars).
[
{
"path": ".coveragerc",
"chars": 37,
"preview": "[run]\nomit =\n .tox/*\n setup.py\n"
},
{
"path": ".dockerignore",
"chars": 79,
"preview": "**/*.pyc\n**/*.pyo\n**/*.pyd\n.git\n.tox\n**/__pycache__\n**/.DS_Store\n**/*.egg-info\n"
},
{
"path": ".gitattributes",
"chars": 33,
"preview": "scripts/* linguist-documentation\n"
},
{
"path": ".gitignore",
"chars": 190,
"preview": "*.py[cod]\n__pycache__/\n*.egg-info\n\n_build\nbuild/\ndist/\nprof/\nvenv/\nuv.lock\n\n.ipynb_checkpoints/\n\n.*\n!.github/\n!.travis.y"
},
{
"path": "CHANGELOG.md",
"chars": 15541,
"preview": "Changelog\n=========\n\nDevelopment\n-----------\n\n\nopendsm-1.2.7\n-----------\n\n* Switch build to use pyproject.toml and uv \n*"
},
{
"path": "CHARTER.md",
"chars": 12590,
"preview": "# Technical Charter (the \"Charter\") for OpenDSM, a Series of LF Projects, LLC\n\nAdopted August 28, 2024\n\n\nThis charter (t"
},
{
"path": "CODE_OF_CONDUCT.md",
"chars": 3212,
"preview": "# Contributor Covenant Code of Conduct\n\n## Our Pledge\n\nIn the interest of fostering an open and welcoming environment, w"
},
{
"path": "CONTRIBUTING.md",
"chars": 7051,
"preview": "Contributing\n============\n\nGuidelines\n----------\n\n* Make sure you follow PEP 008 style guide conventions. You can check "
},
{
"path": "Dockerfile",
"chars": 1286,
"preview": "# syntax=docker/dockerfile:1.7\nFROM python:3.10-slim AS app\n\n# System deps (you had libenchant-2-dev)\nRUN apt-get update"
},
{
"path": "LICENSE",
"chars": 11355,
"preview": " Apache License\n Version 2.0, January 2004\n "
},
{
"path": "MAINTAINERS.md",
"chars": 951,
"preview": "# Maintainers\n\nThe OpenEEmeter was originally created in late 2014 by Phil Ngo and later\ndeveloped and incubated at Recu"
},
{
"path": "MANIFEST.in",
"chars": 138,
"preview": "include README.md LICENSE pytest.ini\ninclude opendsm/eemeter/samples/*.json opendsm/eemeter/samples/*.csv.gz\nrecursive-i"
},
{
"path": "README.md",
"chars": 8708,
"preview": "# OpenDSM: Tools for calculating metered energy savings\r\n\r\n[]("
},
{
"path": "bump_version.sh",
"chars": 725,
"preview": "#!/bin/bash\n\nset -e # fail script on any error, show commands\n\nOLD_VERSION=$1 # e.g., 0.0.0\nNEW_VERSION=$2 # e.g., 0."
},
{
"path": "data/attribution.txt",
"chars": 582,
"preview": "This data is derived from NREL's ComStock datasets (2023/comstock_amy2018_release_2)\n\nThe ComStock database, part of the"
},
{
"path": "data/features.csv",
"chars": 74546,
"preview": "id,summer_usage,winter_usage,annual_usage\n108585,28424.455657276467,51265.146636654434,110748.6876074653\n108587,17291.77"
},
{
"path": "data/month_loadshape.csv",
"chars": 273350,
"preview": "id,1,2,3,4,5,6,7,8,9,10,11,12\n108585,178.96607321422954,156.2157615515202,109.81367662374429,96.78573476528025,63.693822"
},
{
"path": "data/seasonal_day_of_week_loadshape.csv",
"chars": 471916,
"preview": "id,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21\n108585,2.0254250770765605,1.9560841562291102,1.931533183949555,"
},
{
"path": "docker-compose.yml",
"chars": 1192,
"preview": "services:\n shell:\n build: .\n platform: linux/amd64\n image: eemeter_shell\n stdin_open: true\n tty: true\n "
},
{
"path": "docs/gridmeter/gridmeter.__version__.rst",
"chars": 191,
"preview": "=========================\n``gridmeter.__version__``\n=========================\n\n.. automodule:: gridmeter.__version__\n\n "
},
{
"path": "docs/gridmeter/gridmeter.bin_selection.rst",
"chars": 443,
"preview": "===========================\n``gridmeter.bin_selection``\n===========================\n\n.. automodule:: gridmeter.bin_selec"
},
{
"path": "docs/gridmeter/gridmeter.bins.rst",
"chars": 872,
"preview": "==================\n``gridmeter.bins``\n==================\n\n.. automodule:: gridmeter.bins\n\n .. contents::\n :local:"
},
{
"path": "docs/gridmeter/gridmeter.diagnostics.rst",
"chars": 191,
"preview": "=========================\n``gridmeter.diagnostics``\n=========================\n\n.. automodule:: gridmeter.diagnostics\n\n "
},
{
"path": "docs/gridmeter/gridmeter.distance_calc_selection.rst",
"chars": 451,
"preview": "=====================================\n``gridmeter.distance_calc_selection``\n=====================================\n\n.. au"
},
{
"path": "docs/gridmeter/gridmeter.equivalence.rst",
"chars": 191,
"preview": "=========================\n``gridmeter.equivalence``\n=========================\n\n.. automodule:: gridmeter.equivalence\n\n "
},
{
"path": "docs/gridmeter/gridmeter.model.rst",
"chars": 161,
"preview": "===================\n``gridmeter.model``\n===================\n\n.. automodule:: gridmeter.model\n\n .. contents::\n :lo"
},
{
"path": "docs/gridmeter/gridmeter.param_selection.rst",
"chars": 211,
"preview": "=============================\n``gridmeter.param_selection``\n=============================\n\n.. automodule:: gridmeter.par"
},
{
"path": "docs/gridmeter/gridmeter.rst",
"chars": 403,
"preview": "=============\n``gridmeter``\n=============\n\n.. automodule:: gridmeter\n\n .. contents::\n :local:\n\n\nSubmodules\n======"
},
{
"path": "docs/gridmeter/gridmeter.synthetic_data.rst",
"chars": 206,
"preview": "============================\n``gridmeter.synthetic_data``\n============================\n\n.. automodule:: gridmeter.synthe"
},
{
"path": "opendsm/__init__.py",
"chars": 2276,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/__init__.py",
"chars": 730,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/base_settings.py",
"chars": 2025,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/__init__.py",
"chars": 799,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/algorithms/__init__.py",
"chars": 276,
"preview": "from .bisect_k_means import bisect_k_means as _bisecting_kmeans_clustering\nfrom .birch import birch as _birch_clustering"
},
{
"path": "opendsm/common/clustering/algorithms/birch.py",
"chars": 1976,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/algorithms/bisect_k_means.py",
"chars": 3436,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/algorithms/dbscan.py",
"chars": 1305,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/algorithms/hdbscan.py",
"chars": 2147,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/algorithms/sklearn_bisect_k_means.py",
"chars": 6894,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/algorithms/spectral.py",
"chars": 14513,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/cluster.py",
"chars": 8232,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/metrics/__init__.py",
"chars": 43,
"preview": "from .cluster_metrics import ClusterMetrics"
},
{
"path": "opendsm/common/clustering/metrics/cluster_metrics.py",
"chars": 46230,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n\n Copyright 2014-2025 OpenDSM contributors\n\n Licensed under the Ap"
},
{
"path": "opendsm/common/clustering/metrics/density_based_clustering_validation.py",
"chars": 15445,
"preview": "\"\"\"\nFrom https://github.com/FelSiq/DBCV\n\nMIT License\n\nCopyright (c) 2024 Felipe Alves Siqueira\n\nPermission is hereby gra"
},
{
"path": "opendsm/common/clustering/scoring.py",
"chars": 7653,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/settings.py",
"chars": 19383,
"preview": "from __future__ import annotations\n\nimport numpy as np\n\nimport pydantic\n\nfrom enum import Enum\nfrom typing import Option"
},
{
"path": "opendsm/common/clustering/transform.py",
"chars": 11782,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/clustering/voting.py",
"chars": 7981,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n\n Copyright 2014-2025 OpenDSM contributors\n\n Licensed under the Ap"
},
{
"path": "opendsm/common/const.py",
"chars": 2276,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/hourly_interpolation.py",
"chars": 8523,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/metrics.py",
"chars": 47279,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/pydantic_utils.py",
"chars": 5380,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/__init__.py",
"chars": 639,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/adaptive_loss.py",
"chars": 17210,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/adaptive_loss_Z.py",
"chars": 15859,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/basic.py",
"chars": 10462,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n\n Copyright 2014-2024 OpenEEmeter contributors\n\n Licensed under th"
},
{
"path": "opendsm/common/stats/distribution_transform/__init__.py",
"chars": 960,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/distribution_transform/bisymlog.py",
"chars": 5352,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/distribution_transform/mu_sigma.py",
"chars": 3204,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/distribution_transform/raymaekers_robust_yeo_johnson.py",
"chars": 8720,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/distribution_transform/scipy_yeo_johnson.py",
"chars": 2640,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/distribution_transform/standardize.py",
"chars": 882,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/stats/outliers.py",
"chars": 2721,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n\n Copyright 2014-2024 OpenEEmeter contributors\n\n Licensed under th"
},
{
"path": "opendsm/common/stats/outliers_transformed.py",
"chars": 1595,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n\n Copyright 2014-2024 OpenEEmeter contributors\n\n Licensed under th"
},
{
"path": "opendsm/common/test_data.py",
"chars": 6533,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/common/utils.py",
"chars": 10965,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/__init__.py",
"chars": 1084,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/archived_gridmeter_changelog.md",
"chars": 3187,
"preview": "Changelog\n=========\n\nDevelopment\n-----------\n\n* Placeholder\n\n1.1.0\n-----\n\n* Add usage-pattern distance calculation as op"
},
{
"path": "opendsm/comparison_groups/cg_clustering/__init__.py",
"chars": 816,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/cg_clustering/bounds.py",
"chars": 3308,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/cg_clustering/create_comparison_groups.py",
"chars": 3667,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/cg_clustering/settings.py",
"chars": 4990,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/cg_clustering/treatment_fit.py",
"chars": 6950,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/common/__init__.py",
"chars": 863,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\"\"\"\n\n Copyright 2014-2024 OpenEEmeter contributors\n\n Licensed under th"
},
{
"path": "opendsm/comparison_groups/common/base_comparison_group.py",
"chars": 4201,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/common/const.py",
"chars": 3672,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/common/data.py",
"chars": 24821,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/common/data_settings.py",
"chars": 8209,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/common/tutorial_data.py",
"chars": 1623,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/individual_meter_matching/__init__.py",
"chars": 861,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/individual_meter_matching/create_comparison_groups.py",
"chars": 3594,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/individual_meter_matching/distance_calc_selection.py",
"chars": 8294,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/individual_meter_matching/highs_settings.py",
"chars": 14098,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/individual_meter_matching/settings.py",
"chars": 2962,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/random_sampling/__init__.py",
"chars": 823,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/random_sampling/create_comparison_groups.py",
"chars": 2972,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/random_sampling/settings.py",
"chars": 2258,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/savings/__init__.py",
"chars": 639,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/savings/archived_dev.py",
"chars": 14180,
"preview": "\n\n\n# TODO: need to cap IMM size if doing this for memory reasons\n# TODO: In GRIDmeter potentially could reduce df_t_coef"
},
{
"path": "opendsm/comparison_groups/savings/cg_correction_testing.py",
"chars": 17003,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/savings/model_correction.py",
"chars": 14806,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/savings/scratch.ipynb",
"chars": 48778,
"preview": "{\n \"cells\": [\n {\n \"cell_type\": \"markdown\",\n \"metadata\": {},\n \"source\": [\n \"class\\n\",\n \"\\n\",\n \"inputs:\\n\""
},
{
"path": "opendsm/comparison_groups/savings/settings.py",
"chars": 4347,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/__init__.py",
"chars": 918,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/bin_selection.py",
"chars": 16937,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/bins.py",
"chars": 10463,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/const.py",
"chars": 789,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/create_comparison_groups.py",
"chars": 5994,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/diagnostics.py",
"chars": 13721,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/equivalence.py",
"chars": 5698,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/model.py",
"chars": 14486,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/param_selection.py",
"chars": 3032,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/comparison_groups/stratified_sampling/settings.py",
"chars": 7908,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/drmeter/__init__.py",
"chars": 678,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/drmeter/models/__init__.py",
"chars": 787,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/drmeter/models/caltrack/__init__.py",
"chars": 712,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/drmeter/models/caltrack/data.py",
"chars": 783,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/drmeter/models/caltrack/model.py",
"chars": 833,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/__init__.py",
"chars": 756,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/__init__.py",
"chars": 640,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/data_processor_utilities.py",
"chars": 15571,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/data_settings.py",
"chars": 7506,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/exceptions.py",
"chars": 1637,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/features.py",
"chars": 33050,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/sufficiency_criteria.py",
"chars": 24484,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/transform.py",
"chars": 37679,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/common/warnings.py",
"chars": 1962,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/__init__.py",
"chars": 890,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/billing/__init__.py",
"chars": 900,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/billing/data.py",
"chars": 22818,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/billing/model.py",
"chars": 6903,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/billing/plot.py",
"chars": 5113,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/billing/settings.py",
"chars": 1031,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/billing/weighted_model.py",
"chars": 7616,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/__init__.py",
"chars": 811,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/base_models/__init__.py",
"chars": 640,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/base_models/c_hdd_tidd.py",
"chars": 15558,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/base_models/full_model.py",
"chars": 9245,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/base_models/hdd_tidd_cdd.py",
"chars": 11136,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/base_models/tidd.py",
"chars": 3089,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/data.py",
"chars": 31846,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/fit_base_models.py",
"chars": 6332,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/model.py",
"chars": 39628,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/objective_function.py",
"chars": 13070,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/optimize.py",
"chars": 15201,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/optimize_results.py",
"chars": 14341,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/parameters.py",
"chars": 13404,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/plot.py",
"chars": 6268,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/utilities/__init__.py",
"chars": 640,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/utilities/base_model.py",
"chars": 3907,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/utilities/const.py",
"chars": 1802,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/utilities/ellipsoid_test.py",
"chars": 9349,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/utilities/opt_settings.py",
"chars": 4718,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/utilities/selection_criteria.py",
"chars": 5361,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/daily/utilities/settings.py",
"chars": 20320,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly/__init__.py",
"chars": 953,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly/data.py",
"chars": 17118,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly/model.py",
"chars": 61476,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly/settings.py",
"chars": 14827,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/__init__.py",
"chars": 819,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/data.py",
"chars": 4662,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/derivatives.py",
"chars": 16010,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/design_matrices.py",
"chars": 7114,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/metrics.py",
"chars": 21130,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/model.py",
"chars": 22564,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/segmentation.py",
"chars": 18570,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/usage_per_day.py",
"chars": 15071,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/models/hourly_caltrack/wrapper.py",
"chars": 8557,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/samples/__init__.py",
"chars": 661,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/samples/load.py",
"chars": 3508,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "opendsm/eemeter/samples/metadata.json",
"chars": 14407,
"preview": "{\"il-electricity-cdd-hdd-hourly\": {\"id\": \"il-electricity-cdd-hdd-hourly\", \"temperature_filename\": \"il-tempF.csv.gz\", \"me"
},
{
"path": "opendsm/eemeter/utilities/__init__.py",
"chars": 0,
"preview": ""
},
{
"path": "opendsm/eemeter/utilities/io.py",
"chars": 9930,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "pyproject.toml",
"chars": 1782,
"preview": "[build-system]\nrequires = [\"hatchling>=1.25\"]\nbuild-backend = \"hatchling.build\"\n\n[project]\nname = \"opendsm\"\nversion = \"1"
},
{
"path": "pytest.ini",
"chars": 788,
"preview": "[pytest]\naddopts =\n # run in parallel - requires pytest-xdist\n -n auto\n\n # show coverage - requires pytest-cov\n"
},
{
"path": "setup.cfg",
"chars": 22,
"preview": "[aliases]\ntest=pytest\n"
},
{
"path": "tests/common/clustering/test_bisect_k_means.py",
"chars": 17269,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/common/clustering/test_cluster.py",
"chars": 29880,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/common/clustering/test_cluster_transform.py",
"chars": 41717,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/common/clustering/test_spectral.py",
"chars": 20895,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/common/clustering/test_voting.py",
"chars": 17968,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/common/metrics.py",
"chars": 1375,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/common/test_basic_stats.py",
"chars": 4166,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/common/test_utils.py",
"chars": 4245,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/comparison_groups/conftest.py",
"chars": 2471,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/comparison_groups/imm/test_distance_calc_selection.py",
"chars": 7577,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/comparison_groups/stratified_sampling/test_bin.py",
"chars": 2376,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/comparison_groups/stratified_sampling/test_bin_selection.py",
"chars": 9597,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/comparison_groups/stratified_sampling/test_diagnostics.py",
"chars": 1295,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/comparison_groups/stratified_sampling/test_equivalence.py",
"chars": 4231,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/comparison_groups/stratified_sampling/test_model.py",
"chars": 11086,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/conftest.py",
"chars": 2195,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/base_models/test_c_hdd_tidd_smooth.py",
"chars": 3347,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/base_models/test_full_model_finder.py",
"chars": 1143,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_billing_data.py",
"chars": 22977,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_daily_data.py",
"chars": 31531,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_daily_model.py",
"chars": 4727,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_data.csv",
"chars": 25214,
"preview": "datetime,temperature,observed,season,day_of_week\n2019-03-02 00:00:00+00,53.137118613144565,73.24072778136863,shoulder,6\n"
},
{
"path": "tests/eemeter/daily_model/test_fit_base_models.py",
"chars": 6641,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_fit_model.py",
"chars": 3615,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_objective_function.py",
"chars": 5322,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_optimize.py",
"chars": 4060,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/test_optimize_results.py",
"chars": 7115,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/utilities/test_adaptive_loss.py",
"chars": 3813,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/utilities/test_base_model.py",
"chars": 6187,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/utilities/test_config.py",
"chars": 3748,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/utilities/test_ellipsoid_test.py",
"chars": 4151,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/daily_model/utilities/test_selection_criteria.py",
"chars": 6210,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/hourly_model/conftest.py",
"chars": 1198,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
},
{
"path": "tests/eemeter/hourly_model/test_hourly_model.py",
"chars": 11264,
"preview": "#!/usr/bin/env python\n# -*- coding: utf-8 -*-\n\n# Copyright 2014-2025 OpenDSM contributors\n# Licensed under the Apache "
}
]
// ... and 18 more files (download for full content)
About this extraction
This page contains the full source code of the openeemeter/eemeter GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 218 files (13.3 MB), approximately 716.8k tokens, and a symbol index with 1711 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.