idaes-pse
idaes-pse copied to clipboard
Add reference to constructing class in ProcessBlock
trafficstars
Fixes N/A
Summary/Motivation:
As best as I can tell, I cannot easily get the constructing class back from an instance of a process block. E.g.
from pyomo.environ import ConcreteModel, Var, value
from pyomo.common.config import ConfigValue
from idaes.core import ProcessBlockData, declare_process_block_class
@declare_process_block_class("MyBlock")
class MyBlockData(ProcessBlockData):
CONFIG = ProcessBlockData.CONFIG()
CONFIG.declare("xinit", ConfigValue(default=1001, domain=float))
CONFIG.declare("yinit", ConfigValue(default=1002, domain=float))
def build(self):
super(MyBlockData, self).build()
self.x = Var(initialize=self.config.xinit)
self.y = Var(initialize=self.config.yinit)
m = ConcreteModel()
m.b = MyBlock()
# how to get a link back to `MyBlock` from `m.b`?
# m.b.__class__ is <class 'idaes.core.base.process_block._ScalarMyBlock'>
I have a use case in WaterTAP which would aggregate some results by unit model type. Ideally we would index by the creating class, e.g., MyBlock in this example, but it does not seem to be possible to get this class back from an instance of _ScalarMyBlock or MyBlockData.
Changes proposed in this PR:
- Add function
process_block_classto the_ScalarProcessBlockMetaand_IndexedProcessBlockMetametaclasses - Add tests for the new metho
Legal Acknowledgement
By contributing to this software project, I agree to the following terms and conditions for my contribution:
- I agree my contributions are submitted under the license terms described in the LICENSE.txt file at the top level of this directory.
- I represent I am authorized to make the contributions and grant the license. If my employer has rights to intellectual property that includes these contributions, I represent that I have received permission to make contributions and grant the required license on behalf of that employer.