mover 0.3.2__tar.gz → 0.3.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.
- {mover-0.3.2 → mover-0.3.3}/PKG-INFO +1 -1
- {mover-0.3.2 → mover-0.3.3}/pyproject.toml +1 -1
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/convert.js +9 -6
- {mover-0.3.2 → mover-0.3.3}/src/mover.egg-info/PKG-INFO +1 -1
- {mover-0.3.2 → mover-0.3.3}/tests/test_converter_timeline.py +27 -0
- {mover-0.3.2 → mover-0.3.3}/LICENSE +0 -0
- {mover-0.3.2 → mover-0.3.3}/README.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/setup.cfg +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_optional.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/LICENSE +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/VENDORED.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/all.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/constraint.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/dsl_domain.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/dsl_functions.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/dsl_types.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/executor_base.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/function_domain_executor.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/tensor_value_eager_executor.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/tensor_value_executor.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/value_quantizers.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/expression.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/expression_utils.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/expression_visitor.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/function_domain.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/learning/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/learning/function_domain_search.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/parsers/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/parsers/fol_python_parser.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/parsers/function_expression_parser.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/parsers/parser_base.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/tensor_state.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/tensor_value.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/tensor_value_utils.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/value.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/torch_index/LICENSE +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/torch_index/VENDORED.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/torch_index/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/torch_index/basic_functional.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/torch_index/batched_functional.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/torch_index/torch_utils.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/torch_index/utils.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/config.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/EasePack.min.js +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/MotionPathPlugin.min.js +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/api.js +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/grid.svg +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/gsap.min.js +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/index.css +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/property_registry.json +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/assets/vis.js +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/mover_converter.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/mover_querier.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/raster_capture.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/converter/render_session.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/assets/correction_msg_template.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/fol_domain.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/fol_executor.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/fol_parser.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/mover_verifier.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/transform_types.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/dsl/utils.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/assets/sentence_patterns.json +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/assets/vocab.json +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/data_classes.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/mover_fol_generator.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/prompt_generator.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/sentence_generation/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/sentence_generation/sentence_composer.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/sentence_generation/sentence_unit.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/sentence_generation/vocab.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/nlg/utils.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/pipeline.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/stats.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/__init__.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/animation_synthesizer.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/assets/sys_msg_animation_synthesizer.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/assets/sys_msg_animation_synthesizer_with_implementation.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/assets/sys_msg_mover_synthesizer.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/assets/sys_msg_prompt_rewriter.md +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/assets/template.html +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/base_synthesizer.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/llm_client.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/mover_synthesizer.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/prompt_rewriter.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover/synthesizers/utils.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover.egg-info/SOURCES.txt +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover.egg-info/dependency_links.txt +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover.egg-info/entry_points.txt +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover.egg-info/requires.txt +0 -0
- {mover-0.3.2 → mover-0.3.3}/src/mover.egg-info/top_level.txt +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_animation_prompt_assets.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_converter_capture.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_converter_dom.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_mover_fol_generator.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_mover_querier.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_mover_synthesizer.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_prompt_generation.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_render_session.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_svgpt_keyframes.py +0 -0
- {mover-0.3.2 → mover-0.3.3}/tests/test_transform_types.py +0 -0
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "mover"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.3"
|
|
8
8
|
description = "Official implementation of MoVer: Motion Verification for Motion Graphics Animations"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.10,<3.13"
|
|
@@ -183,13 +183,14 @@ function initializeControlledTimelineAtZero(timeline) {
|
|
|
183
183
|
return timeline;
|
|
184
184
|
}
|
|
185
185
|
|
|
186
|
-
//
|
|
187
|
-
//
|
|
188
|
-
function
|
|
186
|
+
// Settled means already applied: no time left and no delay. Zero duration alone is not
|
|
187
|
+
// enough -- {delay} applies later, {repeat} reports a non-zero totalDuration.
|
|
188
|
+
function isSettledInstantRootAnimation(animation) {
|
|
189
189
|
return Boolean(
|
|
190
190
|
animation
|
|
191
|
-
&& typeof animation.
|
|
192
|
-
&& animation.
|
|
191
|
+
&& typeof animation.totalDuration === "function"
|
|
192
|
+
&& animation.totalDuration() === 0
|
|
193
|
+
&& getAnimationDelay(animation) === 0
|
|
193
194
|
);
|
|
194
195
|
}
|
|
195
196
|
|
|
@@ -206,7 +207,9 @@ function getUnexpectedRootAnimations() {
|
|
|
206
207
|
.getChildren(false, true, true)
|
|
207
208
|
.filter(animation => (
|
|
208
209
|
animation !== tl_to_use
|
|
209
|
-
|
|
210
|
+
// getInitialRootRecords leaves a delayedCall on the root by design.
|
|
211
|
+
&& !isGsapDelayedCall(animation)
|
|
212
|
+
&& !isSettledInstantRootAnimation(animation)
|
|
210
213
|
));
|
|
211
214
|
}
|
|
212
215
|
|
|
@@ -1187,6 +1187,33 @@ class TimelineControlBrowserTest(unittest.IsolatedAsyncioTestCase):
|
|
|
1187
1187
|
self.assertGreaterEqual(len(set(seen)), 4, f"x never advanced: {seen}")
|
|
1188
1188
|
self.assertAlmostEqual(seen[-1], 30, delta=0.5)
|
|
1189
1189
|
|
|
1190
|
+
async def test_callback_created_delayed_set_is_rejected(self) -> None:
|
|
1191
|
+
"""A delayed gsap.set() from a callback must fail capture, not freeze silently."""
|
|
1192
|
+
page = await self._load_page(
|
|
1193
|
+
"""
|
|
1194
|
+
window.delayedSetState = {value: 0};
|
|
1195
|
+
const writeTarget = document.getElementById("selected");
|
|
1196
|
+
const sourceAnimation = gsap.timeline();
|
|
1197
|
+
sourceAnimation.to(delayedSetState, {
|
|
1198
|
+
value: 100,
|
|
1199
|
+
duration: 1,
|
|
1200
|
+
ease: "none",
|
|
1201
|
+
onUpdate: () => gsap.set(writeTarget, {
|
|
1202
|
+
attr: {x: 5 + delayedSetState.value / 4},
|
|
1203
|
+
delay: 0.05,
|
|
1204
|
+
}),
|
|
1205
|
+
});
|
|
1206
|
+
"""
|
|
1207
|
+
)
|
|
1208
|
+
|
|
1209
|
+
# The setup render fires the onUpdate, which mints the delayed set on the root,
|
|
1210
|
+
# so the guard trips at initialization rather than part-way through capture.
|
|
1211
|
+
with self.assertRaisesRegex(
|
|
1212
|
+
PlaywrightError,
|
|
1213
|
+
"Unsupported post-snapshot GSAP animation",
|
|
1214
|
+
):
|
|
1215
|
+
await page.evaluate("initializeTimelineControl()")
|
|
1216
|
+
|
|
1190
1217
|
async def test_gsdevtools_is_neutralized_before_it_touches_the_root(
|
|
1191
1218
|
self,
|
|
1192
1219
|
) -> None:
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/function_domain_executor.py
RENAMED
|
File without changes
|
{mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/tensor_value_eager_executor.py
RENAMED
|
File without changes
|
{mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/executors/tensor_value_executor.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/learning/function_domain_search.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{mover-0.3.2 → mover-0.3.3}/src/mover/_vendor/concepts/dsl/parsers/function_expression_parser.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|