QuizGenerator 0.1.1__tar.gz → 0.1.3__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/PKG-INFO +1 -1
  2. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/generate.py +0 -29
  3. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/question.py +9 -4
  4. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/pyproject.toml +1 -1
  5. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/.envrc +0 -0
  6. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/.github/pull_request_template.md +0 -0
  7. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/.gitignore +0 -0
  8. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/CLAUDE.md +0 -0
  9. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/CODEOWNERS +0 -0
  10. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/LICENSE +0 -0
  11. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/README.md +0 -0
  12. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/__init__.py +0 -0
  13. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/__main__.py +0 -0
  14. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/canvas/__init__.py +0 -0
  15. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/canvas/canvas_interface.py +0 -0
  16. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/canvas/classes.py +0 -0
  17. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/constants.py +0 -0
  18. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/contentast.py +0 -0
  19. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/logging.yaml +0 -0
  20. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/misc.py +0 -0
  21. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/mixins.py +0 -0
  22. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/performance.py +0 -0
  23. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/__init__.py +0 -0
  24. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/basic.py +0 -0
  25. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/__init__.py +0 -0
  26. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/languages.py +0 -0
  27. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/math_questions.py +0 -0
  28. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/memory_questions.py +0 -0
  29. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/ostep13_vsfs.py +0 -0
  30. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/persistence_questions.py +0 -0
  31. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst334/process.py +0 -0
  32. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/__init__.py +0 -0
  33. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/__init__.py +0 -0
  34. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_calculation.py +0 -0
  35. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_descent_questions.py +0 -0
  36. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/loss_calculations.py +0 -0
  37. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/gradient_descent/misc.py +0 -0
  38. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/math_and_data/__init__.py +0 -0
  39. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/math_and_data/matrix_questions.py +0 -0
  40. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/math_and_data/vector_questions.py +0 -0
  41. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/neural-network-basics/__init__.py +0 -0
  42. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/neural-network-basics/neural_network_questions.py +0 -0
  43. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/tensorflow-intro/__init__.py +0 -0
  44. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/premade_questions/cst463/tensorflow-intro/tensorflow_questions.py +0 -0
  45. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/qrcode_generator.py +0 -0
  46. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/quiz.py +0 -0
  47. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/QuizGenerator/typst_utils.py +0 -0
  48. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/README.md +0 -0
  49. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/GRADING_GUIDE.md +0 -0
  50. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/LESSONS_LEARNED-adding_questions.md +0 -0
  51. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/PARAMETER_STANDARDS.md +0 -0
  52. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/README.md +0 -0
  53. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/WEB_UI_INTEGRATION.md +0 -0
  54. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/claude_todo.md +0 -0
  55. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/custom_questions.md +0 -0
  56. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/pypi_release_plan.md +0 -0
  57. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/documentation/typst_integration_strategy.md +0 -0
  58. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/all_classes.yaml +0 -0
  59. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/cst334.yaml +0 -0
  60. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/cst463.yaml +0 -0
  61. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/exam_generation.yaml +0 -0
  62. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/scratch.yaml +0 -0
  63. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/specific_generators/cst334.caching.yaml +0 -0
  64. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/example_files/specific_generators/cst334.lab-address_translation.yaml +0 -0
  65. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/examples/README.md +0 -0
  66. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/examples/web_ui_integration_example.py +0 -0
  67. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/grade_from_qr.py +0 -0
  68. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/README.md +0 -0
  69. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/generate_practice_yaml.sh +0 -0
  70. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/print.sh +0 -0
  71. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/scripts/vendor_lms_interface.py +0 -0
  72. {quizgenerator-0.1.1 → quizgenerator-0.1.3}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QuizGenerator
3
- Version: 0.1.1
3
+ Version: 0.1.3
4
4
  Summary: Generate randomized quiz questions for Canvas LMS and PDF exams
5
5
  Project-URL: Homepage, https://github.com/OtterDen-Lab/QuizGenerator
6
6
  Project-URL: Documentation, https://github.com/OtterDen-Lab/QuizGenerator/tree/main/documentation
@@ -205,35 +205,6 @@ def generate_quiz(
205
205
 
206
206
  quiz.describe()
207
207
 
208
- # Generate performance report if Canvas questions were generated
209
- if num_canvas > 0:
210
- print("\n" + "="*80)
211
- print("PERFORMANCE ANALYSIS REPORT")
212
- print("="*80)
213
- PerformanceTracker.report_summary(min_duration=0.01) # Show operations taking >10ms
214
-
215
- # Show detailed breakdown for slowest operations
216
- print("\n" + "="*60)
217
- print("DETAILED TIMING BREAKDOWN")
218
- print("="*60)
219
-
220
- slow_operations = ["canvas_prepare_question", "canvas_api_upload", "ast_render_body", "question_body"]
221
- for op in slow_operations:
222
- metrics = PerformanceTracker.get_metrics_by_operation(op)
223
- if metrics:
224
- print(f"\n{op.upper()}:")
225
- # Show stats by question type
226
- by_type = {}
227
- for m in metrics:
228
- qtype = m.question_type or "unknown"
229
- if qtype not in by_type:
230
- by_type[qtype] = []
231
- by_type[qtype].append(m.duration)
232
-
233
- for qtype, durations in by_type.items():
234
- avg = sum(durations) / len(durations)
235
- print(f" {qtype}: {len(durations)} calls, avg {avg:.3f}s (range: {min(durations):.3f}s - {max(durations):.3f}s)")
236
-
237
208
  def main():
238
209
 
239
210
  args = parse_args()
@@ -555,10 +555,15 @@ class Question(abc.ABC):
555
555
  )
556
556
 
557
557
  def get_answers(self, *args, **kwargs) -> Tuple[Answer.AnswerKind, List[Dict[str,Any]]]:
558
- return (
559
- self.answer_kind,
560
- list(itertools.chain(*[a.get_for_canvas() for a in self.answers.values()]))
561
- )
558
+ if len(self.answers.values()) > 0:
559
+ return (
560
+ self.answer_kind,
561
+ list(itertools.chain(*[a.get_for_canvas() for a in self.answers.values()]))
562
+ )
563
+ else:
564
+ return (
565
+ Answer.AnswerKind.ESSAY, []
566
+ )
562
567
 
563
568
  def refresh(self, rng_seed=None, *args, **kwargs):
564
569
  """If it is necessary to regenerate aspects between usages, this is the time to do it.
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "QuizGenerator"
7
- version = "0.1.1"
7
+ version = "0.1.3"
8
8
  description = "Generate randomized quiz questions for Canvas LMS and PDF exams"
9
9
  readme = "README.md"
10
10
  license = {text = "GPL-3.0-or-later"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes