Releases: IDAES/idaes-pse
2.6 Release
2.6 Release
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.6.0 Release Highlights
Upcoming Changes
- IDAES will be switching to the new Pyomo solver interface in the next release. Whilst this will hopefully be a smooth transition for most users, there are a few important changes to be aware of.
- The new solver interface uses a different version of the IPOPT writer (“ipopt_v2”) and thus any custom configuration options you might have set for IPOPT will not carry over and will need to be reset.
- By default, the new Pyomo linear presolver will be activated with ipopt_v2. Whilst are working to identify any bugs in the presolver, it is possible that some edge cases will remain.
- IDAES will begin deploying a new set of scaling tools and APIs over the next few releases that make use of the new solver writers.
- The old scaling tools and APIs will remain for backward compatibility but will begin to be deprecated.
New Models, Tools and Features
- New Intersphinx extension automatically linking Jupyter notebook examples to project documentation
- New end-to-end diagnostics example demonstrated on a real problem
- New complementarity formulation for VLE with cubic equations of state, backward compatibility for old formulation
- New solver interface with presolve (ipopt_v2) in support of upcoming changes to the initialization and APIs methods, with default set to ipopt to maintain backwards compatibility; this will deprecate once all examples have been updated
- New forecaster and parameterized bidder methods within grid integration library
- Updated surrogates API and examples to support Keras 3, with backwards compatibility for older formats such as TensorFlow SavedModel (TFSM)
- Updated costing base dictionary to include the 2023 cost year index value
- Updated
ProcessBlock
to include information on the constructing block class - Updated Flowsheet Visualizer to allow
visualize()
method to return value and functions
Bug Fixes
- Fixed bug in the Modular Property Framework that would cause errors when trying to use phase-based material balances with phase equilibria.
- Fixed bug in Modular Properties Framework that caused errors when initializing models with non-vapor-liquid phase equilibria.
- Fixed typos flagged by June update to
crate-ci/typos
and removed DMF-related exceptions - Minor corrections of units of measurement handling in power plant waste/transport costing expressions, control volume material holdup expressions, and BTX property package parameters
- Fixed throwing >7500
numpy
deprecation warnings by replacing scalar value assignment with element extraction and item iteration calls
Testing and Robustness
- Migrated slow tests (>10s) to integration, impacting test coverage but also yielding a nearly 30% decrease in local test runtime
- Pinned
pint
to avoid issues with older supported Python versions - Pinned
codecov
versions to avoid tokenless upload behavior with latest version - Bumped
extensions
to version 3.4.2 to allow pointing to non-standard install location
Deprecations and Removals
- Python 3.8 is no longer supported. The supported Python versions are 3.9 through 3.12
- The Data Management Framework (DMF) is no longer supported. Importing
idaes.core.dmf
will cause a deprecation warning to be displayed until the next release - The SOFC Keras surrogates have been removed. The current version of the SOFC surrogate model in the examples repository is a PySMO Kriging model.
What's Changed
- Fix some bugs in the modular properties implementation by @andrewlee94 in #1425
- Limiting pint version by @andrewlee94 in #1438
- Add new Complementarity formualtion for VLE with cubic EoSs by @andrewlee94 in #1397
- Activating IPOPT_V2 with presolver by @andrewlee94 in #1436
- Moving some slow tests to integration by @andrewlee94 in #1442
- Fix Typos From June Spell Checker Update by @bpaul4 in #1448
- Add 2023 CEPCI Value by @bpaul4 in #1447
- Specify Codecov version to work around codecov/codecov-action#1487 by @lbianchi-lbl in #1441
- Minor Power Plant Costing Fixes by @bpaul4 in #1418
- Updating copyright to 2024 by @ksbeattie in #1440
- Add code references to gas solid contactors docs by @bpaul4 in #1451
- Renewable + PEM Parameterized Bidder by @Xinhe-Chen in #1407
- Remove support for Python 3.8 by @lbianchi-lbl in #1467
- Repair erroneous units for material_holdup in CV0D when mass basis defined by @adam-a-a in #1460
- Keras file format updates by @rundxdi in #1401
- Bump extensions version to 3.4.2 by @Robbybp in #1473
- Add reference to constructing class in ProcessBlock by @bknueven in #1414
- Update Pyomo requirement to 6.8.0 release by @blnicho in #1465
- PySMO: fix warnings by @OOAmusat in #1472
- Remove SOFC Keras Surrogates And Tests by @bpaul4 in #1475
- add UI return, then visualize() can return now by @CopyDemon in #1466
- Updating BTX param with units by @JavalVyas2000 in #1478
- Pin typos version to latest currently available tag v1.24.5 by @lbianchi-lbl in #1486
- Remove idaes.core.dmf and related code by @lbianchi-lbl in #1484
- Add basis to conc example on property naming conventions docs by @kurbansitterley in #1482
New Contributors
- @Xinhe-Chen made their first contribution in #1407
- @CopyDemon made their first contribution in #1466
- @kurbansitterley made their first contribution in #1482
Full Changelog: 2.5.0...2.6.0
2.6 Release Candidate #1
2.6 Release Candidate #1
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.6.0rc1 Release Highlights
Deprecations and Removals
- Python 3.8 is no longer supported. The supported Python versions are 3.9 through 3.12
- The Data Management Framework (DMF) is no longer supported. Importing
idaes.core.dmf
will cause a deprecation warning to be displayed until the next release
What's Changed
- Fix some bugs in the modular properties implementation by @andrewlee94 in #1425
- Limiting pint version by @andrewlee94 in #1438
- Add new Complementarity formualtion for VLE with cubic EoSs by @andrewlee94 in #1397
- Activating IPOPT_V2 with presolver by @andrewlee94 in #1436
- Moving some slow tests to integration by @andrewlee94 in #1442
- Fix Typos From June Spell Checker Update by @bpaul4 in #1448
- Add 2023 CEPCI Value by @bpaul4 in #1447
- Specify Codecov version to work around codecov/codecov-action#1487 by @lbianchi-lbl in #1441
- Minor Power Plant Costing Fixes by @bpaul4 in #1418
- Updating copyright to 2024 by @ksbeattie in #1440
- Add code references to gas solid contactors docs by @bpaul4 in #1451
- Renewable + PEM Parameterized Bidder by @Xinhe-Chen in #1407
- Remove support for Python 3.8 by @lbianchi-lbl in #1467
- Repair erroneous units for material_holdup in CV0D when mass basis defined by @adam-a-a in #1460
- Keras file format updates by @rundxdi in #1401
- Bump extensions version to 3.4.2 by @Robbybp in #1473
- Add reference to constructing class in ProcessBlock by @bknueven in #1414
- Update Pyomo requirement to 6.8.0 release by @blnicho in #1465
- PySMO: fix warnings by @OOAmusat in #1472
- Remove SOFC Keras Surrogates And Tests by @bpaul4 in #1475
- add UI return, then visualize() can return now by @CopyDemon in #1466
- Updating BTX param with units by @JavalVyas2000 in #1478
- Pin typos version to latest currently available tag v1.24.5 by @lbianchi-lbl in #1486
- Remove idaes.core.dmf and related code by @lbianchi-lbl in #1484
- Add basis to conc example on property naming conventions docs by @kurbansitterley in #1482
New Contributors
- @Xinhe-Chen made their first contribution in #1407
- @CopyDemon made their first contribution in #1466
- @kurbansitterley made their first contribution in #1482
Full Changelog: 2.5.0...2.6.0rc1
2.6 Release Candidate #0
2.6 Release Candidate #0
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.6.0rc0 Release Highlights
Deprecations and Removals
- Python 3.8 is no longer supported. The supported Python versions are 3.9 through 3.12
- The Data Management Framework (DMF) is no longer supported. Importing
idaes.core.dmf
will cause a deprecation warning to be displayed until the next release
What's Changed
- Fix some bugs in the modular properties implementation by @andrewlee94 in #1425
- Limiting pint version by @andrewlee94 in #1438
- Add new Complementarity formualtion for VLE with cubic EoSs by @andrewlee94 in #1397
- Activating IPOPT_V2 with presolver by @andrewlee94 in #1436
- Moving some slow tests to integration by @andrewlee94 in #1442
- Fix Typos From June Spell Checker Update by @bpaul4 in #1448
- Add 2023 CEPCI Value by @bpaul4 in #1447
- Specify Codecov version to work around codecov/codecov-action#1487 by @lbianchi-lbl in #1441
- Minor Power Plant Costing Fixes by @bpaul4 in #1418
- Updating copyright to 2024 by @ksbeattie in #1440
- Add code references to gas solid contactors docs by @bpaul4 in #1451
- Renewable + PEM Parameterized Bidder by @Xinhe-Chen in #1407
- Remove support for Python 3.8 by @lbianchi-lbl in #1467
- Repair erroneous units for material_holdup in CV0D when mass basis defined by @adam-a-a in #1460
- Keras file format updates by @rundxdi in #1401
- Bump extensions version to 3.4.2 by @Robbybp in #1473
- Add reference to constructing class in ProcessBlock by @bknueven in #1414
- Update Pyomo requirement to 6.8.0 release by @blnicho in #1465
- PySMO: fix warnings by @OOAmusat in #1472
- Remove SOFC Keras Surrogates And Tests by @bpaul4 in #1475
- add UI return, then visualize() can return now by @CopyDemon in #1466
- Updating BTX param with units by @JavalVyas2000 in #1478
- Pin typos version to latest currently available tag v1.24.5 by @lbianchi-lbl in #1486
- Remove idaes.core.dmf and related code by @lbianchi-lbl in #1484
- Add basis to conc example on property naming conventions docs by @kurbansitterley in #1482
New Contributors
- @Xinhe-Chen made their first contribution in #1407
- @CopyDemon made their first contribution in #1466
- @kurbansitterley made their first contribution in #1482
Full Changelog: 2.5.0...2.6.0rc0
2.5 Release
2.5 Release
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.5.0 Release Highlights
Upcoming Changes
- IDAES will be switching to the new Pyomo solver interface in the next release. Whilst this will hopefully be a smooth transition for most users, there are a few important changes to be aware of.
- The new solver interface uses a different version of the IPOPT writer (“ipopt_v2”) and thus any custom configuration options you might have set for IPOPT will not carry over and will need to be reset.
- By default, the new Pyomo linear presolver will be activated with ipopt_v2. Whilst are working to identify any bugs in the presolver, it is possible that some edge cases will remain.
- IDAES will begin deploying a new set of scaling tools and APIs over the next few releases that make use of the new solver writers.
- The old scaling tools and APIs will remain for backward compatibility but will begin to be deprecated.
New Models, Tools and Features
- New diagnostics check for near-parallel variables and constraints.
- New diagnostics tools for identifying causes of infeasibility in models.
- New example for creating a custom model of a liquid-liquid extractor unit operation.
Bug Fixes
- Fixed bug in Gibbs reactor that caused it to appear to have additional spurious degrees of freedom.
- Fixed bug in the Modular Property Framework that would cause errors when trying to use phase-based material balances with phase equilibria.
- Fixed bug in Modular Properties Framework that caused errors when initializing models with non-vapor-liquid phase equilibria.
Testing and Robustness
- Deployed the IDAES Diagnostics Toolbox to confirm that there are no structural or numerical issues in the core model libraries.
- Additional robustness tests for core model, and some associated improvements in the converge tester class.
- Fixed a number of issues that were causing unexpected warnings to be emitted during testing.
Deprecations and Removals
Removed examples for RIPE tool which has not been supported for a number of releases.
What's Changed
- Add constraint to exclude TensorFlow 2.16.1 and above by @lbianchi-lbl in #1373
- Update imports of
native_types
andpyomo_constant_types
in scaling module by @Robbybp in #1366 - Restore ability to run pytest on individual files or directories by @lbianchi-lbl in #1362
- Tweaks to convergence tester by @andrewlee94 in #1377
- Add diagnostics tests for all unit models by @andrewlee94 in #1375
- Resolve CI failures from new version (1.20.4) of spellchecker by @lbianchi-lbl in #1389
- Fix target for 'fv' (flowsheet visualizer) reference by @dangunter in #1391
- Updating black and rerunning it on all files by @ksbeattie in #1388
- Fixing spurious DoF in Gibbs reactor model by @andrewlee94 in #1393
- Update parameter sweep tool to support indexed vars by @andrewlee94 in #1387
- Adding attributes to hold units used by MSContactor by @andrewlee94 in #1396
- Crossflow hx by @dallan-keylogic in #1382
- bug fix for issue #1364: catch AttributeError in set_scaling_from_default by @jasonmbray-p66 in #1400
- Add parallel constraint/variable check to
report_numerical_issues
by @Robbybp in #1385 - Address many unexpected warnings in pytest by @andrewlee94 in #1403
- Renaming components by @andrewlee94 in #1402
- Update the Pyomo tag to the 6.7.2 release by @blnicho in #1406
- Infeasibility diagnostic tool by @bknueven in #1409
- Allow upwinding in 1D Heat exchanger by @dallan-keylogic in #1383
- Adding USD_2022 to units library as the most recently published value by @hunterbarber in #1413
- Option to skip parallel component checks by @andrewlee94 in #1417
- Update pyomo requirement to 6.7.3 by @lbianchi-lbl in #1420
New Contributors
- @jasonmbray-p66 made their first contribution in #1400
Full Changelog: 2.4.0...2.5.0
2.5 Release Candidate #1
2.5 Release Candidate #1
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.5.0rc1 Release Highlights
Upcoming Changes
- IDAES will be switching to the new Pyomo solver interface in the next release. Whilst this will hopefully be a smooth transition for most users, there are a few important changes to be aware of.
- The new solver interface uses a different version of the IPOPT writer (“ipopt_v2”) and thus any custom configuration options you might have set for IPOPT will not carry over and will need to be reset.
- By default, the new Pyomo linear presolver will be activated with ipopt_v2. Whilst are working to identify any bugs in the presolver, it is possible that some edge cases will remain.
- IDAES will begin deploying a new set of scaling tools and APIs over the next few releases that make use of the new solver writers.
- The old scaling tools and APIs will remain for backward compatibility but will begin to be deprecated.
New Models, Tools and Features
- New diagnostics check for near-parallel variables and constraints.
- New diagnostics tools for identifying causes of infeasibility in models.
- New example for creating a custom model of a liquid-liquid extractor unit operation.
Bug Fixes
- Fixed bug in Gibbs reactor that caused it to appear to have additional spurious degrees of freedom.
- Fixed bug in the Modular Property Framework that would cause errors when trying to use phase-based material balances with phase equilibria.
- Fixed bug in Modular Properties Framework that caused errors when initializing models with non-vapor-liquid phase equilibria.
Testing and Robustness
- Deployed the IDAES Diagnostics Toolbox to confirm that there are no structural or numerical issues in the core model libraries.
- Additional robustness tests for core model, and some associated improvements in the converge tester class.
- Fixed a number of issues that were causing unexpected warnings to be emitted during testing.
Deprecations and Removals
Removed examples for RIPE tool which has not been supported for a number of releases.
What's Changed
- Add constraint to exclude TensorFlow 2.16.1 and above by @lbianchi-lbl in #1373
- Update imports of
native_types
andpyomo_constant_types
in scaling module by @Robbybp in #1366 - Restore ability to run pytest on individual files or directories by @lbianchi-lbl in #1362
- Tweaks to convergence tester by @andrewlee94 in #1377
- Add diagnostics tests for all unit models by @andrewlee94 in #1375
- Resolve CI failures from new version (1.20.4) of spellchecker by @lbianchi-lbl in #1389
- Fix target for 'fv' (flowsheet visualizer) reference by @dangunter in #1391
- Updating black and rerunning it on all files by @ksbeattie in #1388
- Fixing spurious DoF in Gibbs reactor model by @andrewlee94 in #1393
- Update parameter sweep tool to support indexed vars by @andrewlee94 in #1387
- Adding attributes to hold units used by MSContactor by @andrewlee94 in #1396
- Crossflow hx by @dallan-keylogic in #1382
- bug fix for issue #1364: catch AttributeError in set_scaling_from_default by @jasonmbray-p66 in #1400
- Add parallel constraint/variable check to
report_numerical_issues
by @Robbybp in #1385 - Address many unexpected warnings in pytest by @andrewlee94 in #1403
- Renaming components by @andrewlee94 in #1402
- Update the Pyomo tag to the 6.7.2 release by @blnicho in #1406
- Infeasibility diagnostic tool by @bknueven in #1409
- Allow upwinding in 1D Heat exchanger by @dallan-keylogic in #1383
- Adding USD_2022 to units library as the most recently published value by @hunterbarber in #1413
- Option to skip parallel component checks by @andrewlee94 in #1417
- Update pyomo requirement to 6.7.3 by @lbianchi-lbl in #1420
New Contributors
- @jasonmbray-p66 made their first contribution in #1400
Full Changelog: 2.4.0...2.5.0rc1
2.5 Release Candidate #0
2.5 Release Candidate #0
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.5.0rc0 Release Highlights
What's Changed
- Add constraint to exclude TensorFlow 2.16.1 and above by @lbianchi-lbl in #1373
- Update imports of
native_types
andpyomo_constant_types
in scaling module by @Robbybp in #1366 - Restore ability to run pytest on individual files or directories by @lbianchi-lbl in #1362
- Tweaks to convergence tester by @andrewlee94 in #1377
- Add diagnostics tests for all unit models by @andrewlee94 in #1375
- Resolve CI failures from new version (1.20.4) of spellchecker by @lbianchi-lbl in #1389
- Fix target for 'fv' (flowsheet visualizer) reference by @dangunter in #1391
- Updating black and rerunning it on all files by @ksbeattie in #1388
- Fixing spurious DoF in Gibbs reactor model by @andrewlee94 in #1393
- Update parameter sweep tool to support indexed vars by @andrewlee94 in #1387
- Adding attributes to hold units used by MSContactor by @andrewlee94 in #1396
- Crossflow hx by @dallan-keylogic in #1382
- bug fix for issue #1364: catch AttributeError in set_scaling_from_default by @jasonmbray-p66 in #1400
- Add parallel constraint/variable check to
report_numerical_issues
by @Robbybp in #1385 - Address many unexpected warnings in pytest by @andrewlee94 in #1403
- Renaming components by @andrewlee94 in #1402
- Update the Pyomo tag to the 6.7.2 release by @blnicho in #1406
- Infeasibility diagnostic tool by @bknueven in #1409
- Allow upwinding in 1D Heat exchanger by @dallan-keylogic in #1383
- Adding USD_2022 to units library as the most recently published value by @hunterbarber in #1413
- Option to skip parallel component checks by @andrewlee94 in #1417
- Update pyomo requirement to 6.7.3 by @lbianchi-lbl in #1420
New Contributors
- @jasonmbray-p66 made their first contribution in #1400
Full Changelog: 2.4.0...2.5.0rc0
2.4 Release
2.4 Release
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.4.0 Release Highlights
Deprecations
- Convergence Analysis tool (idaes/core/util/convergence): deprecated in favor of new Parameter Sweep tools. To be removed in v3.0.0.
New Beta Capabilities
- Parameter Sweep Tool (
idaes.core.util.parameter_sweep
)- A new API for defining and performing parameter sweep studies on IDAES models has been developed
- Diagnostics Tools (
idaes.core.util.model_diagnostics
)- New methods for identifying duplicate variables and constraints have been added to the diagnostics toolbox
- New tools for detecting ill conditioning in Jacobians have been developed and are available in the model_diagnostics module. These provide alternatives to the existing DegeneracyHunter toolbox, and will eventually be merged with this capability, but initial working versions have been provided as beta capabilities for interested users
IpoptConvergenceAnalysis
(replaces deprecated Convergence Analysis tool):- A new tool for performing convergence analysis studies that leverages the new Parameter Sweep tools has been developed. This tool allows users to define the input parameters to their model and sampling methods for these (leveraging Pysmo's sampling tools) and to then solve their model across the sampled domains and return a summary of the solver performance (IPOPT only)
Improved Models
- Thickener model (
idaes.models.unit_models.solid_liquid.thickener
)- Improved model to include predictive correlations for unit sizing based on settling velocity measurements (steady-state only)
- Modular Property Packages
- Added general support for calculating critical properties of mixtures using defined Equation of State modules. New API defined for Equation of State modules in order to define the necessary constraints for calculating critical properties (most EoS modules DO NOT support calculation of critical properties (yet))
- Added new methods to Cubic Equation of State module to support calculation of critical properties
2.4 Release Candidate #0
2.4 Release Candidate #0
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.4.0rc0 Release Highlights
Deprecations
- Convergence Analysis tool (idaes/core/util/convergence): deprecated in favor of new Parameter Sweep tools. To be removed in v3.0.0.
New Beta Capabilities
- Parameter Sweep Tool (
idaes.core.util.parameter_sweep
)- A new API for defining and performing parameter sweep studies on IDAES models has been developed
- Diagnostics Tools (
idaes.core.util.model_diagnostics
)- New methods for identifying duplicate variables and constraints have been added to the diagnostics toolbox
- New tools for detecting ill conditioning in Jacobians have been developed and are available in the model_diagnostics module. These provide alternatives to the existing DegeneracyHunter toolbox, and will eventually be merged with this capability, but initial working versions have been provided as beta capabilities for interested users
IpoptConvergenceAnalysis
(replaces deprecated Convergence Analysis tool):- A new tool for performing convergence analysis studies that leverages the new Parameter Sweep tools has been developed. This tool allows users to define the input parameters to their model and sampling methods for these (leveraging Pysmo's sampling tools) and to then solve their model across the sampled domains and return a summary of the solver performance (IPOPT only)
Improved Models
- Thickener model (
idaes.models.unit_models.solid_liquid.thickener
)- Improved model to include predictive correlations for unit sizing based on settling velocity measurements (steady-state only)
- Modular Property Packages
- Added general support for calculating critical properties of mixtures using defined Equation of State modules. New API defined for Equation of State modules in order to define the necessary constraints for calculating critical properties (most EoS modules DO NOT support calculation of critical properties (yet))
- Added new methods to Cubic Equation of State module to support calculation of critical properties
2.3 Release
2.3 Release
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.3.0 Release Highlights
New Features and Models
- New diagnostics toolboxes and examples
- Tutorial for using the DiagnosticsToolbox
- Methods to identify potential evaluation errors in models
SVDToolbox
for performing singular value decomposition analysis on models to identify possible degeneracies and poor scaling- DegeneracyHunter for identifying irreducible degenerate sets in models
- Model for solid-liquid separation which takes two inputs (solid and liquid streams) and produces three outlets (solids, liquid entrained with solids and pure liquid)
- Example of temperature swing adsorption in
models_extra
Deprecation Warnings
- With the update to Pyomo 6.7.0, the plate heat exchanger model has begun failing tests on some CI platforms. If this is not addressed by the February release, this model may be removed due to failing tests. See #1294. Offers to help identify the cause and fix this issue are welcome.
Improvements and bug fixes
- Fixed oversight which precluded using
Mixer
andSeparator
models when inherent reactions were present in property package - Added reporting methods to the
MSContactor
model - Minor corrections in some examples where values were being fixed outside of declared variable bounds
2.3 Release Candidate #2
2.3 Release Candidate #2
Start with our online documentation to get started with install instructions, examples, etc.
IDAES-PSE 2.3.0rc2 Release Highlights
New Features and Models
- New diagnostics toolboxes and examples
- Tutorial for using the DiagnosticsToolbox
- Methods to identify potential evaluation errors in models
SVDToolbox
for performing singular value decomposition analysis on models to identify possible degeneracies and poor scaling- DegeneracyHunter for identifying irreducible degenerate sets in models
- Model for solid-liquid separation which takes two inputs (solid and liquid streams) and produces three outlets (solids, liquid entrained with solids and pure liquid)
- Example of temperature swing adsorption in
models_extra
Deprecation Warnings
- With the update to Pyomo 6.7.0, the plate heat exchanger model has begun failing tests on some CI platforms. If this is not addressed by the February release, this model may be removed due to failing tests. See #1294. Offers to help identify the cause and fix this issue are welcome.
Improvements and bug fixes
- Fixed oversight which precluded using
Mixer
andSeparator
models when inherent reactions were present in property package - Added reporting methods to the
MSContactor
model - Minor corrections in some examples where values were being fixed outside of declared variable bounds