Beispiel #1
0
 def test_object_caching(self):
     # Creating a Feature with the same name as an existing
     # Feature must return the existing Feature, if both are
     # associated with the same BinaryFeaturesModel.
     feature1 = BaseFeature(self.bfm, 'voiced')
     feature2 = BaseFeature(self.bfm, 'voiced')
     self.assertEqual(feature1, feature2)
     feature3 = BaseFeature(self.bfm, 'consonantal')
     self.assertNotEqual(feature1, feature3)
     bfm2 = BinaryFeaturesModel()
     feature4 = BaseFeature(bfm2, 'voiced')
     self.assertNotEqual(feature1, feature4)
     # It is an error to create a Feature with the same IPA form
     # but of a different type (subclass).
     self.assertRaises(InvalidFeatureError, SuprasegmentalFeature, self.bfm,
                       'voiced')
     # Initialisation of a Feature should happen only once.
     character1 = BaseCharacter(self.bfm, 'a')
     character1.set_feature_value(feature1, HAS_FEATURE)
     self.assertEqual(feature1.get_value_characters(HAS_FEATURE),
                      set([character1]))
     feature5 = BaseFeature(self.bfm, 'voiced')
     self.assertEqual(feature1.get_value_characters(HAS_FEATURE),
                      set([character1]))
     feature6 = SuprasegmentalFeature(self.bfm, 'syllabic')
     character2 = SuprasegmentalCharacter(self.bfm, 'b')
     character2.set_feature_value(feature6, HAS_FEATURE)
     self.assertEqual(feature6.get_value_characters(HAS_FEATURE),
                      set([character2]))
     feature7 = SuprasegmentalFeature(self.bfm, 'syllabic')
     self.assertEqual(feature6.get_value_characters(HAS_FEATURE),
                      set([character2]))
Beispiel #2
0
 def test_object_caching (self):
     # Creating a Feature with the same name as an existing
     # Feature must return the existing Feature, if both are
     # associated with the same BinaryFeaturesModel.
     feature1 = BaseFeature(self.bfm, 'voiced')
     feature2 = BaseFeature(self.bfm, 'voiced')
     self.assertEqual(feature1, feature2)
     feature3 = BaseFeature(self.bfm, 'consonantal')
     self.assertNotEqual(feature1, feature3)
     bfm2 = BinaryFeaturesModel()
     feature4 = BaseFeature(bfm2, 'voiced')
     self.assertNotEqual(feature1, feature4)
     # It is an error to create a Feature with the same IPA form
     # but of a different type (subclass).
     self.assertRaises(InvalidFeatureError, SuprasegmentalFeature, self.bfm,
                       'voiced')
     # Initialisation of a Feature should happen only once.
     character1 = BaseCharacter(self.bfm, 'a')
     character1.set_feature_value(feature1, HAS_FEATURE)
     self.assertEqual(feature1.get_value_characters(HAS_FEATURE),
                      set([character1]))
     feature5 = BaseFeature(self.bfm, 'voiced')
     self.assertEqual(feature1.get_value_characters(HAS_FEATURE),
                      set([character1]))
     feature6 = SuprasegmentalFeature(self.bfm, 'syllabic')
     character2 = SuprasegmentalCharacter(self.bfm, 'b')
     character2.set_feature_value(feature6, HAS_FEATURE)
     self.assertEqual(feature6.get_value_characters(HAS_FEATURE),
                      set([character2]))
     feature7 = SuprasegmentalFeature(self.bfm, 'syllabic')
     self.assertEqual(feature6.get_value_characters(HAS_FEATURE),
                      set([character2]))
 def test_value_characters(self):
     feature = SuprasegmentalFeature(self.bfm, 'voiced')
     self.assertEqual(feature.get_value_characters(HAS_FEATURE), set())
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE), set())
     character = SuprasegmentalCharacter(self.bfm, 'a')
     character.set_feature_value(feature, HAS_FEATURE)
     self.assertEqual(feature.get_value_characters(HAS_FEATURE),
                      set([character]))
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE), set())
     character.set_feature_value(feature, NOT_HAS_FEATURE)
     self.assertEqual(feature.get_value_characters(HAS_FEATURE), set())
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE),
                      set([character]))
     character.set_feature_value(feature, INAPPLICABLE_FEATURE)
     self.assertEqual(feature.get_value_characters(HAS_FEATURE), set())
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE), set())
 def test_value_characters (self):
     feature = SuprasegmentalFeature(self.bfm, 'voiced')
     self.assertEqual(feature.get_value_characters(HAS_FEATURE), set())
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE), set())
     character = SuprasegmentalCharacter(self.bfm, 'a')
     character.set_feature_value(feature, HAS_FEATURE)
     self.assertEqual(feature.get_value_characters(HAS_FEATURE),
                      set([character]))
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE), set())
     character.set_feature_value(feature, NOT_HAS_FEATURE)
     self.assertEqual(feature.get_value_characters(HAS_FEATURE), set())
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE),
                      set([character]))
     character.set_feature_value(feature, INAPPLICABLE_FEATURE)
     self.assertEqual(feature.get_value_characters(HAS_FEATURE), set())
     self.assertEqual(feature.get_value_characters(NOT_HAS_FEATURE), set())
 def test_model (self):
     configuration = '''
       [Base Features] anterior low syllabic voiced
       [Base Characters] a: b: anterior c: low, voiced
       [Diacritic Characters] ̥: +anterior
       [Spacing Characters] ʰ: -low, +voiced
       [Suprasegmental Features] phrase stressed
       [Suprasegmental Characters] |: +phrase ˈ: +stressed, +phrase
       '''
     model = self.parser.parse(configuration)
     # Base features.
     self.assertEqual(len(model.base_features), 4)
     anterior = BaseFeature(model, 'anterior')
     low = BaseFeature(model, 'low')
     syllabic = BaseFeature(model, 'syllabic')
     voiced = BaseFeature(model, 'voiced')
     self.assertEqual(len(model.base_features), 4)
     self.assertTrue(anterior in model.base_features)
     self.assertTrue(low in model.base_features)
     self.assertTrue(syllabic in model.base_features)
     self.assertTrue(voiced in model.base_features)
     # Base characters.
     self.assertEqual(len(model.base_characters), 3)
     a = BaseCharacter(model, 'a')
     b = BaseCharacter(model, 'b')
     c = BaseCharacter(model, 'c')
     self.assertEqual(len(model.base_characters), 3)
     self.assertTrue(a in model.base_characters)
     self.assertTrue(b in model.base_characters)
     self.assertTrue(c in model.base_characters)
     # Diacritic characters.
     self.assertEqual(len(model.diacritic_characters), 1)
     ring = DiacriticCharacter(model, '̥')
     self.assertEqual(len(model.diacritic_characters), 1)
     self.assertTrue(ring in model.diacritic_characters)
     # Spacing characters.
     self.assertEqual(len(model.spacing_characters), 1)
     ʰ = SpacingCharacter(model, 'ʰ')
     self.assertEqual(len(model.spacing_characters), 1)
     self.assertTrue(ʰ in model.spacing_characters)
     # Suprasegmental features.
     self.assertEqual(len(model.suprasegmental_features), 2)
     phrase = SuprasegmentalFeature(model, 'phrase')
     stressed = SuprasegmentalFeature(model, 'stressed')
     self.assertEqual(len(model.suprasegmental_features), 2)
     self.assertTrue(phrase in model.suprasegmental_features)
     self.assertTrue(stressed in model.suprasegmental_features)
     # Suprasegmental characters.
     self.assertEqual(len(model.suprasegmental_characters), 2)
     bar = SuprasegmentalCharacter(model, '|')
     ˈ = SuprasegmentalCharacter(model, 'ˈ')
     self.assertEqual(len(model.suprasegmental_characters), 2)
     self.assertTrue(bar in model.suprasegmental_characters)
     self.assertTrue(ˈ in model.suprasegmental_characters)
     # Feature values.
     anterior_has_feature = anterior.get_value_characters(HAS_FEATURE)
     self.assertEqual(len(anterior_has_feature), 2)
     self.assertTrue(b in anterior_has_feature)
     self.assertTrue(ring in anterior_has_feature)
     anterior_not_has_feature = anterior.get_value_characters(
         NOT_HAS_FEATURE)
     self.assertEqual(len(anterior_not_has_feature), 2)
     self.assertTrue(a in anterior_not_has_feature)
     self.assertTrue(c in anterior_not_has_feature)
     anterior_inapplicable_feature = anterior.get_value_characters(
         INAPPLICABLE_FEATURE)
     self.assertEqual(len(anterior_inapplicable_feature), 1)
     self.assertTrue(ʰ in anterior_inapplicable_feature)
     phrase_has_feature = phrase.get_value_characters(HAS_FEATURE)
     self.assertEqual(len(phrase_has_feature), 2)
     self.assertTrue(bar in phrase_has_feature)
     self.assertTrue(ˈ in phrase_has_feature)
     phrase_not_has_feature = phrase.get_value_characters(NOT_HAS_FEATURE)
     self.assertEqual(len(phrase_not_has_feature), 0)
     phrase_inapplicable_feature = phrase.get_value_characters(
         INAPPLICABLE_FEATURE)
     self.assertEqual(len(phrase_inapplicable_feature), 0)
Beispiel #6
0
 def test_model(self):
     configuration = '''
       [Base Features] anterior low syllabic voiced
       [Base Characters] a: b: anterior c: low, voiced
       [Diacritic Characters] ̥: +anterior
       [Spacing Characters] ʰ: -low, +voiced
       [Suprasegmental Features] phrase stressed
       [Suprasegmental Characters] |: +phrase ˈ: +stressed, +phrase
       '''
     model = self.parser.parse(configuration)
     # Base features.
     self.assertEqual(len(model.base_features), 4)
     anterior = BaseFeature(model, 'anterior')
     low = BaseFeature(model, 'low')
     syllabic = BaseFeature(model, 'syllabic')
     voiced = BaseFeature(model, 'voiced')
     self.assertEqual(len(model.base_features), 4)
     self.assertTrue(anterior in model.base_features)
     self.assertTrue(low in model.base_features)
     self.assertTrue(syllabic in model.base_features)
     self.assertTrue(voiced in model.base_features)
     # Base characters.
     self.assertEqual(len(model.base_characters), 3)
     a = BaseCharacter(model, 'a')
     b = BaseCharacter(model, 'b')
     c = BaseCharacter(model, 'c')
     self.assertEqual(len(model.base_characters), 3)
     self.assertTrue(a in model.base_characters)
     self.assertTrue(b in model.base_characters)
     self.assertTrue(c in model.base_characters)
     # Diacritic characters.
     self.assertEqual(len(model.diacritic_characters), 1)
     ring = DiacriticCharacter(model, '̥')
     self.assertEqual(len(model.diacritic_characters), 1)
     self.assertTrue(ring in model.diacritic_characters)
     # Spacing characters.
     self.assertEqual(len(model.spacing_characters), 1)
     ʰ = SpacingCharacter(model, 'ʰ')
     self.assertEqual(len(model.spacing_characters), 1)
     self.assertTrue(ʰ in model.spacing_characters)
     # Suprasegmental features.
     self.assertEqual(len(model.suprasegmental_features), 2)
     phrase = SuprasegmentalFeature(model, 'phrase')
     stressed = SuprasegmentalFeature(model, 'stressed')
     self.assertEqual(len(model.suprasegmental_features), 2)
     self.assertTrue(phrase in model.suprasegmental_features)
     self.assertTrue(stressed in model.suprasegmental_features)
     # Suprasegmental characters.
     self.assertEqual(len(model.suprasegmental_characters), 2)
     bar = SuprasegmentalCharacter(model, '|')
     ˈ = SuprasegmentalCharacter(model, 'ˈ')
     self.assertEqual(len(model.suprasegmental_characters), 2)
     self.assertTrue(bar in model.suprasegmental_characters)
     self.assertTrue(ˈ in model.suprasegmental_characters)
     # Feature values.
     anterior_has_feature = anterior.get_value_characters(HAS_FEATURE)
     self.assertEqual(len(anterior_has_feature), 2)
     self.assertTrue(b in anterior_has_feature)
     self.assertTrue(ring in anterior_has_feature)
     anterior_not_has_feature = anterior.get_value_characters(
         NOT_HAS_FEATURE)
     self.assertEqual(len(anterior_not_has_feature), 2)
     self.assertTrue(a in anterior_not_has_feature)
     self.assertTrue(c in anterior_not_has_feature)
     anterior_inapplicable_feature = anterior.get_value_characters(
         INAPPLICABLE_FEATURE)
     self.assertEqual(len(anterior_inapplicable_feature), 1)
     self.assertTrue(ʰ in anterior_inapplicable_feature)
     phrase_has_feature = phrase.get_value_characters(HAS_FEATURE)
     self.assertEqual(len(phrase_has_feature), 2)
     self.assertTrue(bar in phrase_has_feature)
     self.assertTrue(ˈ in phrase_has_feature)
     phrase_not_has_feature = phrase.get_value_characters(NOT_HAS_FEATURE)
     self.assertEqual(len(phrase_not_has_feature), 0)
     phrase_inapplicable_feature = phrase.get_value_characters(
         INAPPLICABLE_FEATURE)
     self.assertEqual(len(phrase_inapplicable_feature), 0)