|
5 | 5 | from datetime import datetime
|
6 | 6 |
|
7 | 7 | import requests
|
8 |
| -from werkzeug.datastructures import MultiDict |
9 | 8 |
|
10 | 9 | __version__ = "0.3"
|
11 | 10 | __author__ = "Kartik Talwar"
|
@@ -173,72 +172,6 @@ def _make_dict(keys, array):
|
173 | 172 |
|
174 | 173 | return data
|
175 | 174 |
|
176 |
| - @staticmethod |
177 |
| - def _compute_dependency_order(skills): |
178 |
| - """ |
179 |
| - Add a field to each skill indicating the order it was learned |
180 |
| - based on the skill's dependencies. Multiple skills will have the same |
181 |
| - position if they have the same dependencies. |
182 |
| - """ |
183 |
| - # Key skills by first dependency. Dependency sets can be uniquely |
184 |
| - # identified by one dependency in the set. |
185 |
| - dependency_to_skill = MultiDict([(skill['dependencies_name'][0] |
186 |
| - if skill['dependencies_name'] |
187 |
| - else '', |
188 |
| - skill) |
189 |
| - for skill in skills]) |
190 |
| - |
191 |
| - # Start with the first skill and trace the dependency graph through |
192 |
| - # skill, setting the order it was learned in. |
193 |
| - # TODO: detect cycles, and such |
194 |
| - index = 0 |
195 |
| - previous_skill = '' |
196 |
| - while True: |
197 |
| - for skill in dependency_to_skill.getlist(previous_skill): |
198 |
| - skill['dependency_order'] = index |
199 |
| - index += 1 |
200 |
| - |
201 |
| - # Figure out the canonical dependency for the next set of skills. |
202 |
| - skill_names = set([skill['name'] |
203 |
| - for skill in |
204 |
| - dependency_to_skill.getlist(previous_skill)]) |
205 |
| - canonical_dependency = skill_names.intersection( |
206 |
| - set(dependency_to_skill.keys())) |
207 |
| - if canonical_dependency: |
208 |
| - previous_skill = canonical_dependency.pop() |
209 |
| - else: |
210 |
| - # Nothing depends on these skills, so we're done. |
211 |
| - break |
212 |
| - |
213 |
| - return skills |
214 |
| - |
215 |
| - @staticmethod |
216 |
| - def _compute_dependency_order_1(skills): |
217 |
| - # Create dictionary: |
218 |
| - skills_dict = {} |
219 |
| - for skill in skills: |
220 |
| - skills_dict[skill['name']] = skill |
221 |
| - # Initial run through nodes |
222 |
| - updated = 0 |
223 |
| - for skill in skills: |
224 |
| - if not skill["dependencies_name"]: |
225 |
| - skill["dependency_order"] = 1 |
226 |
| - updated += 1 |
227 |
| - if updated == 0: |
228 |
| - raise DuolingoException("No skills at the bottom of the dependencies tree") |
229 |
| - # Further runs |
230 |
| - while True: |
231 |
| - remaining_nodes = [skill for skill in skills if "dependency_order" not in skill] |
232 |
| - if len(remaining_nodes) == 0: |
233 |
| - return |
234 |
| - updated = 0 |
235 |
| - for node in remaining_nodes: |
236 |
| - if all(["dependency_order" in skills_dict[x] for x in node['dependencies_name']]): |
237 |
| - node['dependency_order'] = 1 + max([skills_dict[x]["dependency_order"] for x in node['dependencies_name']]) |
238 |
| - updated += 1 |
239 |
| - if updated == 0: |
240 |
| - raise DuolingoException("A loop must have been encountered.") |
241 |
| - |
242 | 175 | @staticmethod
|
243 | 176 | def _compute_dependency_order_func(skills):
|
244 | 177 | # Create dictionary:
|
@@ -396,9 +329,6 @@ def get_learned_skills(self, lang):
|
396 | 329 | skill for skill in self.user_data.language_data[lang]['skills']
|
397 | 330 | ]
|
398 | 331 |
|
399 |
| - # TODO: pick one |
400 |
| - # self._compute_dependency_order(skills) |
401 |
| - # self._compute_dependency_order_1(skills) |
402 | 332 | self._compute_dependency_order_func(skills)
|
403 | 333 |
|
404 | 334 | return [skill for skill in
|
|
0 commit comments