def test_control_serialization(self, nand_circuit, timepoint, iptg, dummy_control_decoder): c1 = Control( name='positive_gfp', sample=Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000032'))), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000064'))) ])) c_json = json.dumps(c1, cls=ControlEncoder) c2 = json.loads(c_json, cls=dummy_control_decoder) assert c1 == c2
def test_treatment_attribute_reference(self, iptg): r1 = TreatmentReference(treatment=iptg) r2 = TreatmentReference(treatment=iptg) assert r1 == r1 assert r1 == r2 assert r1 != {} assert repr( r1 ) == "TreatmentReference(treatment=EntityTreatment(entity=NamedEntity(name='IPTG', reference='https://hub.sd2e.org/user/sd2e/design/IPTG/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064'))])))"
def test_treatment_reference(self, temperature): r1 = TreatmentReference(treatment=temperature) r2 = TreatmentReference(treatment=temperature) assert r1 == r1 assert r1 == r2 assert r1 != {} assert repr( r1 ) == "TreatmentReference(treatment=AttributeTreatment(attribute=BoundAttribute(name='temperature', value=Value(value=37.0, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000027')))))"
def test_subject_reference(self, kan): r1 = TreatmentReference(treatment=kan) r2 = TreatmentReference(treatment=kan) assert r1 == r1 assert r1 == r2 assert r1 != {} assert repr( r1 ) == "TreatmentReference(treatment=EntityTreatment(entity=NamedEntity(name='Kan', reference='https://hub.sd2e.org/user/sd2e/design/Kan/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000274'))])))"
def test_product_block_serialization(self, temperature, timepoint, dummy_definition_decoder): b1 = ProductBlock(block_list=[ TreatmentReference(treatment=temperature), TreatmentReference(treatment=timepoint) ]) b_json = json.dumps(b1, cls=BlockDefinitionEncoder) assert b_json == '{"block_type": "product_block", "block_list": [{"block_type": "treatment_reference", "reference": "temperature"}, {"block_type": "treatment_reference", "reference": "timepoint"}]}' b2 = json.loads(b_json, cls=dummy_definition_decoder) assert b1 == b2
def test_design_block(self, kan): b1 = DesignBlock(label="test", definition=TreatmentReference(treatment=kan)) b2 = DesignBlock(label="test", definition=TreatmentReference(treatment=kan)) assert b1 == b1 assert b1 == b2 assert b1 != {} assert repr( b1 ) == "DesignBlock(label='test', definition=TreatmentReference(treatment=EntityTreatment(entity=NamedEntity(name='Kan', reference='https://hub.sd2e.org/user/sd2e/design/Kan/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000274'))]))))"
def temperature_block(): temperature_unit = Unit( reference='http://purl.obolibrary.org/obo/UO_0000027') media = Treatment.create_from(entity=NamedEntity( name="M9 Glucose CAA", reference="https://hub.sd2e.org/user/sd2e/design/M9_glucose_CAA/1")) temperature = Treatment.create_from(attribute=Attribute.create_from( name='temperature', value=Value(value=37.0, unit=temperature_unit))) return DesignBlock(label='temperature-media', definition=ProductBlock(block_list=[ TreatmentReference(treatment=temperature), TreatmentReference(treatment=media) ]))
def test_product_block(self, temperature, timepoint): b1 = ProductBlock(block_list=[ TreatmentReference(treatment=temperature), TreatmentReference(treatment=timepoint) ]) b2 = ProductBlock(block_list=[ TreatmentReference(treatment=temperature), TreatmentReference(treatment=timepoint) ]) assert b1 == b1 assert b1 == b2 assert b1 != {} assert repr( b1 ) == "ProductBlock(block_list=[TreatmentReference(treatment=AttributeTreatment(attribute=BoundAttribute(name='temperature', value=Value(value=37.0, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000027'))))), TreatmentReference(treatment=AttributeTreatment(attribute=UnboundAttribute(name='timepoint', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032'))))])"
def test_design_block_serialization(self, kan, dummy_design_decoder): b1 = DesignBlock(label="test", definition=TreatmentReference(treatment=kan)) b_json = json.dumps(b1, cls=DesignBlockEncoder) assert b_json == '{"object_type": "design_block", "label": "test", "definition": {"block_type": "treatment_reference", "reference": "Kan"}}' b2 = json.loads(b_json, cls=dummy_design_decoder) assert b1 == b2
def test_treatment_reference_serialization(self, temperature, dummy_definition_decoder): r1 = TreatmentReference(treatment=temperature) r_json = json.dumps(r1, cls=BlockDefinitionEncoder) assert r_json == '{"block_type": "treatment_reference", "reference": "temperature"}' r2 = json.loads(r_json, cls=dummy_definition_decoder) assert r1 == r2
def test_control(self, nand_circuit, timepoint, iptg): c1 = Control( name='positive_gfp', sample=Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000032'))), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000064'))) ])) c2 = Control( name='positive_gfp', sample=Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000032'))), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000064'))) ])) assert c1 == c1 assert c1 == c2 assert c1 != {} assert repr( c1 ) == "Control(name='positive_gfp', sample=Sample(subject=NamedEntity(name='MG1655_NAND_Circuit', reference='https://hub.sd2e.org/user/sd2e/design/MG1655_NAND_Circuit/1'), treatments=[TreatmentValueReference(treatment=AttributeTreatment(attribute=UnboundAttribute(name='timepoint', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032'))), value=Value(value=18, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032'))), TreatmentValueReference(treatment=EntityTreatment(entity=NamedEntity(name='IPTG', reference='https://hub.sd2e.org/user/sd2e/design/IPTG/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064'))])), value=Value(value=0, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')))]))"
def strain_block(nand_circuit, empty_landing_pads, kan): return DesignBlock(label='strains', definition=SumBlock(block_list=[ ProductBlock(block_list=[ SubjectReference(entity=nand_circuit), TreatmentReference(treatment=kan) ]), SubjectReference(entity=empty_landing_pads) ]))
def test_treatment_attribute_value_reference_serialization( self, iptg, dummy_definition_decoder): r1 = TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference='http://purl.obolibrary.org/obo/UO_0000064'))) r_json = json.dumps(r1, cls=BlockDefinitionEncoder) r2 = json.loads(r_json, cls=dummy_definition_decoder) assert r1 == r2
def test_sample_serialization(self, nand_circuit, timepoint, iptg, dummy_sample_decoder): s1 = Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000032'))), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000064'))) ]) s_json = json.dumps(s1, cls=SampleEncoder) s2 = json.loads(s_json, cls=dummy_sample_decoder) assert s1 == s2
def test_measurement_serialization(self, nand_circuit, timepoint, iptg, empty_landing_pads, experiment_block, dummy_measurement_decoder): m1 = Measurement( type='FLOW', block=BlockReference(block=experiment_block), controls=[ Control( name='positive_gfp', sample=Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000032' ))), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000064' ))) ])), Control(name='negative_gfp', sample=Sample(subject=empty_landing_pads)) ], performers=['Ginkgo']) m_json = json.dumps(m1, cls=MeasurementEncoder) m2 = json.loads(m_json, cls=dummy_measurement_decoder) assert m1 == m2
def test_measurement(self, nand_circuit, iptg, timepoint, empty_landing_pads, experiment_block): m1 = Measurement( type='FLOW', block=BlockReference(block=experiment_block), controls=[ Control( name='positive_gfp', sample=Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000032' ))), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000064' ))) ])), Control(name='negative_gfp', sample=Sample(subject=empty_landing_pads)) ], performers=['Ginkgo']) m2 = Measurement( type='FLOW', block=BlockReference(block=experiment_block), controls=[ Control( name='positive_gfp', sample=Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000032' ))), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=Unit( reference= 'http://purl.obolibrary.org/obo/UO_0000064' ))) ])), Control(name='negative_gfp', sample=Sample(subject=empty_landing_pads)) ], performers=['Ginkgo']) assert m1 == m1 assert m1 == m2 assert m1 != {} # TODO: figure out why this fails assert repr( m1 ) == "Measurement(type='FLOW', block=BlockReference(block=DesignBlock(label='experiment', definition=ProductBlock(block_list=[ReplicateBlock(count=4, block=ProductBlock(block_list=[BlockReference(block=DesignBlock(label='strains', definition=SumBlock(block_list=[ProductBlock(block_list=[SubjectReference(entity=NamedEntity(name='MG1655_NAND_Circuit', reference='https://hub.sd2e.org/user/sd2e/design/MG1655_NAND_Circuit/1')), TreatmentReference(treatment=EntityTreatment(entity=NamedEntity(name='Kan', reference='https://hub.sd2e.org/user/sd2e/design/Kan/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000274'))])))]), SubjectReference(entity=NamedEntity(name='MG1655_empty_landing_pads', reference='https://hub.sd2e.org/user/sd2e/design/MG1655_empty_landing_pads/1'))]))), BlockReference(block=DesignBlock(label='temperature-media', definition=ProductBlock(block_list=[TreatmentReference(treatment=AttributeTreatment(attribute=BoundAttribute(name='temperature', value=Value(value=37.0, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000027'))))), TreatmentReference(treatment=EntityTreatment(entity=NamedEntity(name='M9 Glucose CAA', reference='https://hub.sd2e.org/user/sd2e/design/M9_glucose_CAA/1')))]))), BlockReference(block=DesignBlock(label='conditions', definition=ProductBlock(block_list=[GenerateBlock(treatment=EntityTreatment(entity=NamedEntity(name='IPTG', reference='https://hub.sd2e.org/user/sd2e/design/IPTG/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064'))])), attribute_name='concentration', values=[Value(value=0, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=0.25, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=2.5, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=25, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=250, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064'))]), GenerateBlock(treatment=EntityTreatment(entity=NamedEntity(name='L-arabinose', reference='https://hub.sd2e.org/user/sd2e/design/Larabinose/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064'))])), attribute_name='concentration', values=[Value(value=0, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=5, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=50, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=500, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=5000, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')), Value(value=25000, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064'))])])))])), GenerateBlock(treatment=AttributeTreatment(attribute=UnboundAttribute(name='timepoint', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032'))), attribute_name='timepoint', values=[Value(value=5, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032')), Value(value=6.5, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032')), Value(value=8, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032')), Value(value=18, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032'))])]))), controls=[Control(name='positive_gfp', sample=Sample(subject=NamedEntity(name='MG1655_NAND_Circuit', reference='https://hub.sd2e.org/user/sd2e/design/MG1655_NAND_Circuit/1'), treatments=[TreatmentValueReference(treatment=AttributeTreatment(attribute=UnboundAttribute(name='timepoint', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032'))), value=Value(value=18, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000032'))), TreatmentValueReference(treatment=EntityTreatment(entity=NamedEntity(name='IPTG', reference='https://hub.sd2e.org/user/sd2e/design/IPTG/1', attributes=[UnboundAttribute(name='concentration', unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064'))])), value=Value(value=0, unit=Unit(reference='http://purl.obolibrary.org/obo/UO_0000064')))])), Control(name='negative_gfp', sample=Sample(subject=NamedEntity(name='MG1655_empty_landing_pads', reference='https://hub.sd2e.org/user/sd2e/design/MG1655_empty_landing_pads/1'), treatments=[]))], performers=['Ginkgo'])"
def main(): temperature_unit = Unit( reference='http://purl.obolibrary.org/obo/UO_0000027') hour_unit = Unit(reference='http://purl.obolibrary.org/obo/UO_0000032') micromolar_unit = Unit( reference='http://purl.obolibrary.org/obo/UO_0000064') microgram_per_milliliter_unit = Unit( reference='http://purl.obolibrary.org/obo/UO_0000274') nand_circuit = NamedEntity( name="MG1655_NAND_Circuit", reference="https://hub.sd2e.org/user/sd2e/design/MG1655_NAND_Circuit/1" ) empty_landing_pads = NamedEntity( name="MG1655_empty_landing_pads", reference="https://hub.sd2e.org/user/sd2e/design/MG1655_empty_landing_pads/1" ) temperature = Treatment.create_from( attribute=Attribute.create_from( name='temperature', value=Value( value=37.0, unit=temperature_unit ))) timepoint = Treatment.create_from( attribute=Attribute.create_from( name='timepoint', unit=hour_unit) ) media = Treatment.create_from( entity=NamedEntity( name="M9 Glucose CAA", reference="https://hub.sd2e.org/user/sd2e/design/M9_glucose_CAA/1" )) iptg = Treatment.create_from( entity=NamedEntity( name='IPTG', reference='https://hub.sd2e.org/user/sd2e/design/IPTG/1', attributes=[ Attribute.create_from( name='concentration', unit=micromolar_unit) ]) ) l_arabinose = Treatment.create_from( entity=NamedEntity( name='L-arabinose', reference='https://hub.sd2e.org/user/sd2e/design/Larabinose/1', attributes=[ Attribute.create_from( name='concentration', unit=micromolar_unit) ]) ) kan = Treatment.create_from( entity=NamedEntity( name='Kan', reference='https://hub.sd2e.org/user/sd2e/design/Kan/1', attributes=[ Attribute.create_from( name='concentration', unit=microgram_per_milliliter_unit) ]) ) strain_block = DesignBlock( label='strains', definition=SumBlock(block_list=[ ProductBlock(block_list=[ SubjectReference(entity=nand_circuit), TreatmentReference(treatment=kan) ]), SubjectReference(entity=empty_landing_pads) ]) ) temperature_block = DesignBlock( label='temperature-media', definition=ProductBlock(block_list=[ TreatmentReference(treatment=temperature), TreatmentReference(treatment=media) ]) ) condition_block = DesignBlock( label='conditions', definition=ProductBlock(block_list=[ GenerateBlock( treatment=iptg, attribute_name='concentration', values=[ Value( value=0, unit=micromolar_unit), Value( value=0.25, unit=micromolar_unit), Value( value=2.5, unit=micromolar_unit), Value( value=25, unit=micromolar_unit), Value( value=250, unit=micromolar_unit) ]), GenerateBlock( treatment=l_arabinose, attribute_name='concentration', values=[ Value( value=0, unit=micromolar_unit), Value( value=5, unit=micromolar_unit), Value( value=50, unit=micromolar_unit), Value( value=500, unit=micromolar_unit), Value( value=5000, unit=micromolar_unit), Value( value=25000, unit=micromolar_unit) ]), ]) ) experiment_block = DesignBlock( label='experiment', definition=ProductBlock(block_list=[ ReplicateBlock( count=4, block=ProductBlock(block_list=[ BlockReference(block=strain_block), BlockReference(block=temperature_block), BlockReference(block=condition_block) ]) ), GenerateBlock( treatment=timepoint, attribute_name='timepoint', values=[ Value( value=5, unit=hour_unit), Value( value=6.5, unit=hour_unit), Value( value=8, unit=hour_unit), Value( value=18, unit=hour_unit) ] ), ]) ) flow_measurement = Measurement( type='FLOW', block=BlockReference(block=experiment_block), controls=[ Control( name='positive_gfp', sample=Sample( subject=nand_circuit, treatments=[ TreatmentReference.create_from( treatment=timepoint, value=Value( value=18, unit=hour_unit)), TreatmentReference.create_from( treatment=iptg, value=Value( value=0, unit=micromolar_unit)) ] ) ), Control( name='negative_gfp', sample=Sample(subject=empty_landing_pads) ) ], performers=['Ginkgo'] ) plate_reader_measurement = Measurement( type='PLATE_READER', block=BlockReference(block=experiment_block), performers=['Ginkgo'] ) rnaseq_measurement = Measurement( type='RNA_SEQ', block=BlockReference(block=experiment_block), performers=['Ginkgo'] ) proteomic_measurement = Measurement( type='PROTEOMICS', block=BlockReference(block=experiment_block), performers=['Ginkgo'] ) request = ExperimentalRequest( cp_name='NOVEL_CHASSIS', reference_name='NovelChassis-NAND-Ecoli-Titration', reference_url='https://docs.google.com/document/d/1oMC5VM3XcFn6zscxLKLUe4U-TXbBsz8H6OQwHal1h4g', version=Version(major=1, minor=0, patch=0), subjects=[ nand_circuit, empty_landing_pads ], treatments=[ iptg, kan, l_arabinose, media, temperature, timepoint ], designs=[ strain_block, temperature_block, condition_block, experiment_block ], measurements=[ flow_measurement, plate_reader_measurement, rnaseq_measurement, proteomic_measurement ] ) with open('nc_titration_generated.json', 'w') as file: json.dump(request, file, cls=ExperimentEncoder, indent=2)
def test_treatment_attribute_reference_serialization( self, iptg, dummy_definition_decoder): r1 = TreatmentReference(treatment=iptg) r_json = json.dumps(r1, cls=BlockDefinitionEncoder) r2 = json.loads(r_json, cls=dummy_definition_decoder) assert r1 == r2
def test_subject_reference_serialization(self, kan, dummy_definition_decoder): r1 = TreatmentReference(treatment=kan) r_json = json.dumps(r1, cls=BlockDefinitionEncoder) r2 = json.loads(r_json, cls=dummy_definition_decoder) assert r1 == r2