[docs]classDesignFuture(StreamingFuture,Future):"""A future object that will hold the results of the design job."""job:DesignJob
[docs]def__init__(self,session:APISession,job:DesignJob|None=None,metadata:Design|None=None,):""" Construct a future for a design job. Takes in either a design job, or the design metadata. :meta private: """self._design_assay=NoneifmetadataisNone:ifjobisNone:raiseValueError("Expected design metadata or job")metadata=designer.design_get(session=session,design_id=job.job_id)self._metadata=metadataifjobisNone:job=DesignJob.create(job_api.job_get(session=session,job_id=metadata.id))super().__init__(session,job)
@propertydefid(self):"""ID of the design."""returnself._metadata.id@propertydefassay(self)->AssayDataset:"""Assay used in the design."""ifself._design_assayisNone:self._design_assay=self.get_assay()returnself._design_assay@propertydefalgorithm(self)->DesignAlgorithm:"""Algorithm used in the design."""returnself._metadata.algorithm@propertydefcriteria(self)->Criteria:"""Criteria used in the design."""returnself._metadata.criteria@propertydefnum_steps(self):"""Number of steps used in the design."""returnself._metadata.num_steps@propertydefnum_rows(self):"""Number of rows in the total design output (across all steps)."""returnself._metadata.num_rows@propertydefallowed_tokens(self)->dict[str,list[str]]|None:"""Allowed tokens used in the design."""returnself._metadata.allowed_tokens@propertydefpop_size(self)->int:"""Population size used in the design."""returnself._metadata.pop_size@propertydefn_offsprings(self)->int:"""Number of offsprings used in the design."""returnself._metadata.n_offsprings@propertydefcrossover_prob(self)->float:"""Crossover probability used in the design."""returnself._metadata.crossover_prob@propertydefcrossover_prob_pointwise(self)->float:"""Crossover probability pointwise used in the design."""returnself._metadata.crossover_prob_pointwise@propertydefmutation_average_mutations_per_seq(self)->int:"""Average mutations per sequence used in the design."""returnself._metadata.mutation_average_mutations_per_seq@propertydefmetadata(self):"""Design metadata."""self._refresh_metadata()returnself._metadatadef_refresh_metadata(self):ifnotself._metadata.is_done():self._metadata=designer.design_get(session=self.session,design_id=self._metadata.id)def__delete(self)->bool:""" Delete this design. TODO - implementation """returndesigner.design_delete(session=self.session,design_id=self.id)
[docs]defget_assay(self)->AssayDataset:""" Get assay used for design job. Returns ------- AssayDataset Assay dataset used for design. """returnAssayDataset(session=self.session,metadata=assaydata.get_assay_metadata(self.session,self._metadata.assay_id),)