code: def set_expression(self, expression_dict):
          
          if self.model is None:
              return
  
          monomers_found = []
          monomers_notfound = []
          # Iterate over all the monomers
          for m in self.model.monomers:
              if (m.name in expression_dict and
                  expression_dict[m.name] is not None):
                  # Try to get the expression amount from the dict
                  init = expression_dict[m.name]
                  # We interpret nan and None as not expressed
                  if math.isnan(init):
                      init = 0
                  init_round = round(init)
                  set_base_initial_condition(self.model, m, init_round)
                  monomers_found.append(m.name)
              else:
                  set_base_initial_condition(self.model, m,
                                             self.default_initial_amount)
                  monomers_notfound.append(m.name)
          logger.info('Monomers set to given context')
          logger.info('-----------------------------')
          for m in monomers_found:
              logger.info('%s' % m)
          if monomers_notfound:
              logger.info('')
              logger.info('Monomers not found in given context')
              logger.info('-----------------------------------')
              for m in monomers_notfound:
                  logger.info('%s' % m)
docs: Set protein expression amounts as initial conditions
  
          Parameters
          ----------
          expression_dict : dict
              A dictionary in which the keys are gene names and the
              values are numbers representing the absolute amount
              (count per cell) of proteins expressed. Proteins that
              are not expressed can be represented as nan. Entries
              that are not in the dict or are in there but resolve
              to None, are set to the default initial amount.
              Example: {'EGFR': 12345, 'BRAF': 4567, 'ESR1': nan}