QuizGenerator 0.1.4__tar.gz → 0.3.1__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 (82) hide show
  1. quizgenerator-0.3.1/.github/workflows/release.yaml +149 -0
  2. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/PKG-INFO +3 -1
  3. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/contentast.py +415 -284
  4. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/misc.py +96 -8
  5. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/mixins.py +10 -1
  6. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/memory_questions.py +1 -1
  7. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/persistence_questions.py +78 -23
  8. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/process.py +1 -2
  9. quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/__init__.py +0 -0
  10. quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/attention.py +192 -0
  11. quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/cnns.py +186 -0
  12. quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/matrices.py +24 -0
  13. quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/rnns.py +202 -0
  14. quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/text.py +201 -0
  15. quizgenerator-0.3.1/QuizGenerator/premade_questions/cst463/models/weight_counting.py +227 -0
  16. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/neural-network-basics/neural_network_questions.py +138 -94
  17. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/question.py +3 -2
  18. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/quiz.py +0 -1
  19. quizgenerator-0.3.1/example_files/scratch.yaml +72 -0
  20. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/pyproject.toml +3 -1
  21. quizgenerator-0.3.1/pyproject_prev.toml +75 -0
  22. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/uv.lock +526 -1
  23. quizgenerator-0.1.4/documentation/claude_todo.md +0 -253
  24. quizgenerator-0.1.4/documentation/custom_questions.md +0 -408
  25. quizgenerator-0.1.4/documentation/pypi_release_plan.md +0 -306
  26. quizgenerator-0.1.4/documentation/typst_integration_strategy.md +0 -237
  27. quizgenerator-0.1.4/example_files/scratch.yaml +0 -15
  28. quizgenerator-0.1.4/scripts/README.md +0 -61
  29. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/.envrc +0 -0
  30. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/.github/pull_request_template.md +0 -0
  31. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/.gitignore +0 -0
  32. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/CLAUDE.md +0 -0
  33. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/CODEOWNERS +0 -0
  34. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/LICENSE +0 -0
  35. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/README.md +0 -0
  36. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/__init__.py +0 -0
  37. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/__main__.py +0 -0
  38. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/canvas/__init__.py +0 -0
  39. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/canvas/canvas_interface.py +0 -0
  40. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/canvas/classes.py +0 -0
  41. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/constants.py +0 -0
  42. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/generate.py +0 -0
  43. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/logging.yaml +0 -0
  44. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/performance.py +0 -0
  45. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/__init__.py +0 -0
  46. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/basic.py +0 -0
  47. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/__init__.py +0 -0
  48. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/languages.py +0 -0
  49. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/math_questions.py +0 -0
  50. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst334/ostep13_vsfs.py +0 -0
  51. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/__init__.py +0 -0
  52. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/__init__.py +0 -0
  53. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_calculation.py +0 -0
  54. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/gradient_descent_questions.py +0 -0
  55. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/loss_calculations.py +0 -0
  56. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/gradient_descent/misc.py +0 -0
  57. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/math_and_data/__init__.py +0 -0
  58. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/math_and_data/matrix_questions.py +0 -0
  59. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/math_and_data/vector_questions.py +0 -0
  60. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/neural-network-basics/__init__.py +0 -0
  61. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/tensorflow-intro/__init__.py +0 -0
  62. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/premade_questions/cst463/tensorflow-intro/tensorflow_questions.py +0 -0
  63. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/qrcode_generator.py +0 -0
  64. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/QuizGenerator/typst_utils.py +0 -0
  65. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/README.md +0 -0
  66. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/GRADING_GUIDE.md +0 -0
  67. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/LESSONS_LEARNED-adding_questions.md +0 -0
  68. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/PARAMETER_STANDARDS.md +0 -0
  69. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/README.md +0 -0
  70. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/documentation/WEB_UI_INTEGRATION.md +0 -0
  71. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/all_classes.yaml +0 -0
  72. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/cst334.yaml +0 -0
  73. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/cst463.yaml +0 -0
  74. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/exam_generation.yaml +0 -0
  75. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/specific_generators/cst334.caching.yaml +0 -0
  76. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/example_files/specific_generators/cst334.lab-address_translation.yaml +0 -0
  77. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/examples/README.md +0 -0
  78. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/examples/web_ui_integration_example.py +0 -0
  79. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/grade_from_qr.py +0 -0
  80. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/scripts/generate_practice_yaml.sh +0 -0
  81. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/scripts/print.sh +0 -0
  82. {quizgenerator-0.1.4 → quizgenerator-0.3.1}/scripts/vendor_lms_interface.py +0 -0
@@ -0,0 +1,149 @@
1
+ name: Release on version bump
2
+
3
+ on:
4
+ push:
5
+ branches:
6
+ - main # change if your default branch is different
7
+
8
+ jobs:
9
+ release:
10
+ runs-on: ubuntu-latest
11
+ environment:
12
+ name: pypi
13
+ permissions:
14
+ contents: write # create tags & releases
15
+ id-token: write # PyPI trusted publishing
16
+
17
+ steps:
18
+ - name: Checkout
19
+ uses: actions/checkout@v5
20
+ with:
21
+ fetch-depth: 0 # need history to read previous version
22
+
23
+ - name: Set up Python for tooling
24
+ uses: actions/setup-python@v5
25
+ with:
26
+ python-version: "3.12"
27
+
28
+ - name: Get previous version (from parent commit)
29
+ id: prev_version
30
+ run: |
31
+ BEFORE="${{ github.event.before }}"
32
+
33
+ # First commit / no parent? treat as "no previous version"
34
+ if [ "$BEFORE" = "0000000000000000000000000000000000000000" ] || [ -z "$BEFORE" ]; then
35
+ echo "No previous commit; setting previous version empty."
36
+ echo "version=" >> "$GITHUB_OUTPUT"
37
+ else
38
+ if git show "$BEFORE":pyproject.toml > pyproject_prev.toml 2>/dev/null; then
39
+ VERSION=$(python -c "import tomllib, pathlib; d = tomllib.loads(pathlib.Path('pyproject_prev.toml').read_text()); print(d['project']['version'])")
40
+ echo "previous version: $VERSION"
41
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
42
+ else
43
+ echo "No previous pyproject.toml found; setting previous version empty."
44
+ echo "version=" >> "$GITHUB_OUTPUT"
45
+ fi
46
+ fi
47
+
48
+ - name: Get current version
49
+ id: curr_version
50
+ run: |
51
+ VERSION=$(python -c "import tomllib, pathlib; d = tomllib.loads(pathlib.Path('pyproject.toml').read_text()); print(d['project']['version'])")
52
+ echo "current version: $VERSION"
53
+ echo "version=$VERSION" >> "$GITHUB_OUTPUT"
54
+
55
+ - name: Decide whether this is a release commit
56
+ id: decision
57
+ run: |
58
+ PREV="${{ steps.prev_version.outputs.version }}"
59
+ CURR="${{ steps.curr_version.outputs.version }}"
60
+ MSG="${{ github.event.head_commit.message }}"
61
+
62
+ echo "Previous version: '$PREV'"
63
+ echo "Current version: '$CURR'"
64
+ echo "Commit message: '$MSG'"
65
+
66
+ SHOULD_RELEASE=false
67
+
68
+ # Require version change AND 'release' in the commit message
69
+ if [ -n "$CURR" ] && [ "$CURR" != "$PREV" ]; then
70
+ if echo "$MSG" | grep -qi "release"; then
71
+ echo "Version changed and commit message indicates release."
72
+ SHOULD_RELEASE=true
73
+ else
74
+ echo "Version changed but commit message does not contain 'release'; not releasing."
75
+ fi
76
+ else
77
+ echo "Version did not change; not releasing."
78
+ fi
79
+
80
+ echo "release=$SHOULD_RELEASE" >> "$GITHUB_OUTPUT"
81
+
82
+ - name: Stop if not a release
83
+ if: steps.decision.outputs.release != 'true'
84
+ run: |
85
+ echo "Not a release commit; skipping remaining steps."
86
+ exit 0
87
+
88
+ - name: Ensure tag does not already exist
89
+ if: steps.decision.outputs.release == 'true'
90
+ run: |
91
+ VERSION="${{ steps.curr_version.outputs.version }}"
92
+ TAG="v${VERSION}"
93
+
94
+ echo "Checking for existing tag $TAG"
95
+ if git rev-parse "$TAG" >/dev/null 2>&1; then
96
+ echo "Tag $TAG already exists. Aborting."
97
+ exit 1
98
+ fi
99
+
100
+ - name: Create and push tag
101
+ if: steps.decision.outputs.release == 'true'
102
+ run: |
103
+ VERSION="${{ steps.curr_version.outputs.version }}"
104
+ TAG="v${VERSION}"
105
+
106
+ echo "Creating tag $TAG at $GITHUB_SHA"
107
+
108
+ git config user.name "github-actions[bot]"
109
+ git config user.email "github-actions[bot]@users.noreply.github.com"
110
+
111
+ git tag "$TAG" "$GITHUB_SHA"
112
+ git push origin "$TAG"
113
+
114
+ - name: Install uv
115
+ if: steps.decision.outputs.release == 'true'
116
+ uses: astral-sh/setup-uv@v6
117
+
118
+ - name: Install Python 3.13 for build
119
+ if: steps.decision.outputs.release == 'true'
120
+ run: uv python install 3.13
121
+
122
+ - name: Build
123
+ if: steps.decision.outputs.release == 'true'
124
+ run: uv build
125
+
126
+ - name: Upload dist artifacts
127
+ if: steps.decision.outputs.release == 'true'
128
+ uses: actions/upload-artifact@v4
129
+ with:
130
+ name: dist
131
+ path: dist/
132
+
133
+ - name: Publish to PyPI
134
+ if: steps.decision.outputs.release == 'true'
135
+ run: uv publish
136
+
137
+ - name: Create GitHub Release
138
+ if: steps.decision.outputs.release == 'true'
139
+ uses: softprops/action-gh-release@v2
140
+ with:
141
+ tag_name: v${{ steps.curr_version.outputs.version }}
142
+ name: v${{ steps.curr_version.outputs.version }}
143
+ body: |
144
+ Release v${{ steps.curr_version.outputs.version }}
145
+
146
+ - Version bumped in pyproject.toml
147
+ - Built with uv and published to PyPI.
148
+ - Artifacts attached below.
149
+ files: dist/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QuizGenerator
3
- Version: 0.1.4
3
+ Version: 0.3.1
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
@@ -21,6 +21,7 @@ Requires-Dist: canvasapi==3.2.0
21
21
  Requires-Dist: cryptography>=41.0.0
22
22
  Requires-Dist: graphviz>=0.21
23
23
  Requires-Dist: jinja2==3.1.3
24
+ Requires-Dist: keras>=3.12.0
24
25
  Requires-Dist: markdown>=3.9
25
26
  Requires-Dist: matplotlib
26
27
  Requires-Dist: pylatex>=1.4.2
@@ -31,6 +32,7 @@ Requires-Dist: pyyaml==6.0.1
31
32
  Requires-Dist: requests==2.32.2
32
33
  Requires-Dist: segno>=1.6.0
33
34
  Requires-Dist: sympy>=1.14.0
35
+ Requires-Dist: tensorflow>=2.20.0
34
36
  Provides-Extra: grading
35
37
  Requires-Dist: pillow>=10.0.0; extra == 'grading'
36
38
  Requires-Dist: pyzbar>=0.1.9; extra == 'grading'