[docs]classSociety:def__init__(self,concurrency_configuration:Dict=None,relationship_parameters:Dict[str,RelationshipParameters]=None,pair_formation_parameters:Dict[str,PairFormationParameters]=None,concurrency_parameters:Dict[str,Dict[str,ConcurrencyParameters]]=None):""" The Society object defines the behavioral-based parameters of a relationship type in the STI and HIV models, such as rates of partnership formation, partner preference, relationship duration, and concurrent partnerships. It must contain the (argument listed)) sets of relationship type parameters and the concurrency configuration. https://docs.idmod.org/projects/emod-hiv/en/latest/parameter-demographics.html#society Args: concurrency_configuration: a non-default concurrency configuration dict, if provided. A broadly applicable default is provided in method _default_concurrency_configuration() . relationship_parameters: a dict of RelationshipParameters objects, each key: value pair being relationship_type: RelationshipParameters() pair_formation_parameters: a dict of PairFormationParameters objects, each key: value pair being relationship_type: PairFormationParameters() concurrency_parameters: a nested dict of ConcurrencyParameters objects, indexed by type then risk, e.g.: { "INFORMAL": { "HIGH": ConcurrencyParameter object, "MED": ConcurrencyParameter object, "LOW": ConcurrencyParameter object }, "TRANSITORY": { "HIGH": ConcurrencyParameter object, "MED": ConcurrencyParameter object, "LOW": ConcurrencyParameter object }, ... } """super().__init__()self.concurrency_configuration=concurrency_configurationifconcurrency_configurationisnotNone \
elseself._default_concurrency_configurationself.relationship_parameters=relationship_parametersifrelationship_parametersisnotNoneelse{}self.pair_formation_parameters=pair_formation_parametersifpair_formation_parametersisnotNoneelse{}self.concurrency_parameters=concurrency_parametersifconcurrency_parametersisnotNoneelse{}@propertydefrelationship_types(self)->Set[str]:return{*self.relationship_parameters.keys(),*self.pair_formation_parameters.keys(),*self.concurrency_parameters.keys()}@propertydef_default_concurrency_configuration(self):return{"Probability_Person_Is_Behavioral_Super_Spreader":0,"Individual_Property_Name":"Risk","LOW":{"Extra_Relational_Flag_Type":"Correlated","Correlated_Relationship_Type_Order":["COMMERCIAL","TRANSITORY","INFORMAL","MARITAL"]},"MEDIUM":{"Extra_Relational_Flag_Type":"Correlated","Correlated_Relationship_Type_Order":["COMMERCIAL","TRANSITORY","INFORMAL","MARITAL"]},"HIGH":{"Extra_Relational_Flag_Type":"Correlated","Correlated_Relationship_Type_Order":["COMMERCIAL","TRANSITORY","INFORMAL","MARITAL"]}}
[docs]defset_pair_formation_parameters(self,relationship_type:str,formation_rate:float=None,assortivity:Assortivity=None)->None:pair_formation_parameters=self.get_pair_formation_parameters_by_relationship_type(relationship_type=relationship_type)ifformation_rateisnotNone:pair_formation_parameters.Formation_Rate_Constant=formation_rateifassortivityisnotNone:iflen(assortivity.matrix)!=3:raiseValueError("You need to have 3 rows in your assortivity matrix.")ifany(len(row)!=3forrowinassortivity.matrix):raiseValueError("You need to have 3 columns in each row of your assortivity matrix.")pair_formation_parameters.Assortivity=assortivity