def finish(self): if self.__state == STATE_FOUND_ERROR: return for child_index in self.get_list_needing_precentile(): target_prototype = self.__prototypes[child_index] known_words = filter( lambda x: x['val'] == constants.EXPLICIT_TRUE, target_prototype['words'] ) all_words = filter( lambda x: x['val'] != constants.NO_DATA, target_prototype['words'] ) known_words_count = len(known_words) all_words_count = len(all_words) percentile = math_util.find_percentile( self.__percentile_table[target_prototype['gender']].details, known_words_count, target_prototype['age'], all_words_count ) target_prototype['percentile'] = percentile
def recalculate_percentile_raw(cached_adapter, mcdi_type, gender, words_spoken, age): # Load CDI information mcdi_model = cached_adapter.load_mcdi_model(mcdi_type) if mcdi_model == None: mcdi_model = cached_adapter.load_mcdi_model('fullenglishmcdi') # Get percentile information meta_percentile_info = mcdi_model.details['percentiles'] percentiles_name = None if gender == constants.MALE or gender == constants.OTHER_GENDER: percentiles_name = meta_percentile_info['male'] else: percentiles_name = meta_percentile_info['female'] percentiles = cached_adapter.load_percentile_model(percentiles_name) # Calculate percentile return math_util.find_percentile( percentiles.details, words_spoken, age, cached_adapter.get_max_mcdi_words(mcdi_type) )
def test_finish_without_error(self): self.mox.StubOutWithMock(math_util, 'find_percentile') math_util.find_percentile([-3], 2, 789.3, 3).AndReturn(50) self.mox.ReplayAll() self.__test_automaton.set_prototypes([ {'words': []}, {'words': []}, {'words': []} ]) self.__test_automaton.parse_percentile( ['', 'Percentile', '80.1', '90.2', 'calculate'], 1 ) self.__test_automaton.parse_age( ['', 'Age (months)', '123.1', '456.2', '789.3'], 1 ) self.__test_automaton.parse_gender( ['', 'Gender', 'M', 'F', 'O'], 1 ) self.__test_automaton.parse_words(['1', 'test', '1', '0', 'na'], 1) self.__test_automaton.parse_words(['1', 'test', '1', '0', '0'], 2) self.__test_automaton.parse_words(['1', 'test', '1', '0', '1'], 3) self.__test_automaton.parse_words(['1', 'test', '1', '0', '1'], 4) target_prototype = self.__test_automaton.get_prototypes()[2] self.assertEqual(target_prototype['percentile'], -1) self.__test_automaton.finish() target_prototype = self.__test_automaton.get_prototypes()[2] self.assertEqual(target_prototype['percentile'], 50)
def test_find_percentile(self): percentile = math_util.find_percentile( TEST_PERCENTILE_TABLE, 0, 30, 667 ) self.assertTrue(percentile >= 0 and percentile <= 5) percentile = math_util.find_percentile( TEST_PERCENTILE_TABLE, 155, 30, 667 ) self.assertTrue(percentile >= 0 and percentile <= 5) percentile = math_util.find_percentile( TEST_PERCENTILE_TABLE, 537, 24, 667 ) self.assertTrue(percentile >= 90 and percentile <= 95) percentile = math_util.find_percentile( TEST_PERCENTILE_TABLE, 574, 24, 667 ) self.assertTrue(percentile >= 95 and percentile <= 100) percentile = math_util.find_percentile( TEST_PERCENTILE_TABLE, 630, 24, 667 ) self.assertTrue(percentile >= 99 and percentile <= 100) percentile = math_util.find_percentile( TEST_PERCENTILE_TABLE, 667, 24, 667 ) self.assertTrue(percentile >= 99 and percentile <= 100)
def recalculate_percentile(snapshot, cached_adapter): """ @type snapshot: SnapshotMetadata """ mcdi_model = cached_adapter.load_mcdi_model(snapshot.mcdi_type) if mcdi_model == None: mcdi_model = cached_adapter.load_mcdi_model('fullenglishmcdi') meta_percentile_info = mcdi_model.details['percentiles'] gender = snapshot.gender percentiles_name = None if gender == constants.MALE or gender == constants.OTHER_GENDER: percentiles_name = meta_percentile_info['male'] else: percentiles_name = meta_percentile_info['female'] percentiles = cached_adapter.load_percentile_model(percentiles_name) count_as_spoken_vals = mcdi_model.details['count_as_spoken'] individual_words = db_util.load_snapshot_contents(snapshot) words_spoken = 0 for word in individual_words: if word.value in count_as_spoken_vals: words_spoken += 1 snapshot.words_spoken = words_spoken new_percentile = math_util.find_percentile( percentiles.details, snapshot.words_spoken, snapshot.age, cached_adapter.get_max_mcdi_words(snapshot.mcdi_type) ) snapshot.percentile = new_percentile