diff --git a/.gitattributes b/.gitattributes
index f3bd8144d802a0c3d02bd0a2bf32b961b8d5e87b..21b81e528807f9cabbe03de4e6a945a8034b3915 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -444,3 +444,49 @@ outputs/poetry_teaching/poetry_full_10s_20260629_193404/images/segment_06.png fi
outputs/poetry_teaching/poetry_full_10s_20260629_193404/muxed/intro.mp4 filter=lfs diff=lfs merge=lfs -text
outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/intro_poem.mp4 filter=lfs diff=lfs merge=lfs -text
outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/intro_silent.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_poem.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_title_author.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_01.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_02.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_03.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_04.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_05.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_06.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/muxed/intro.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_poem.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_silent.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.wav filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_poem.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_title_author.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01_asset_02.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02_asset_02.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03_asset_02.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04_asset_02.png filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/muxed/intro.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_poem.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_silent.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/previews/chusai_full_current.mp4 filter=lfs diff=lfs merge=lfs -text
+outputs/previews/chusai_segment1_scriptfirst_qwenwan/audio/segment_01.wav filter=lfs diff=lfs merge=lfs -text
+outputs/previews/chusai_segment1_scriptfirst_qwenwan/images/segment_01.png filter=lfs diff=lfs merge=lfs -text
+runtime/smoke_cosyvoice_worker.wav filter=lfs diff=lfs merge=lfs -text
+third_party/BindWeave/Megatron-LM/docs/source/images/context_parallel/CP_overview.png filter=lfs diff=lfs merge=lfs -text
+third_party/BindWeave/Megatron-LM/docs/source/images/context_parallel/CP_results.png filter=lfs diff=lfs merge=lfs -text
+third_party/BindWeave/Megatron-LM/examples/multimodal/assets/pretrain_curves.png filter=lfs diff=lfs merge=lfs -text
+third_party/BindWeave/Megatron-LM/images/model_table.png filter=lfs diff=lfs merge=lfs -text
+third_party/BindWeave/Megatron-LM/images/strong_scaling.png filter=lfs diff=lfs merge=lfs -text
+third_party/BindWeave/Megatron-LM/images/weak_scaling.png filter=lfs diff=lfs merge=lfs -text
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_05.wan_usp_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_05.wan_usp_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..9a80b3dfe42eb3f82fa8c9280b44821b94af4caf
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_05.wan_usp_request.json
@@ -0,0 +1,24 @@
+{
+ "segment": {
+ "index": 5,
+ "title": "客船愁绪",
+ "story_beat": "反应",
+ "teaching_goal": "将钟声与诗人的羁旅之思、家国之忧结合,说明声音如何成为情感载体,深化“愁”的主题。",
+ "image_prompt": "客船在江面随波轻摇,唐代文人剪影低头沉思,手中握着书卷或茶盏,渔火与霜气交织,背景是寒山寺的钟声余韵,色调冷中带暖,氛围由静转动,体现内心愁绪的涌动。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影,身着深色宽袖长袍,发髻高束,侧身或背影,立于船头或倚靠船舷,被夜色或船篷半遮挡,神情凝重。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;全片视觉圣经:era:唐代(安史之乱后);style:中国古代写实历史教育短片风格,注重光影对比与氛围营造,强调剪影与朦胧感;main_location:苏州城外吴淞江面(枫桥附近),客船,寒山寺远景;recurring_subjects:唐代文人剪影(张继,深色宽袖长袍,发髻高束,侧身或背影,神情凝重),古朴木船,江枫,渔火,寒山寺轮廓;color_palette:冷蓝灰(夜空、霜气、江水)为主,点缀橘黄(渔火、寺庙灯火),整体色调深沉统一;lighting:月光微弱,渔火摇曳,寺庙微光,整体低照度,强调阴影与剪影效果;forbidden:现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识、清晰人物正脸肖像",
+ "video_prompt": "镜头环绕客船,唐代文人剪影低头沉思,手中书卷或茶盏轻放,渔火与霜气交织,背景钟声余韵回荡,色调由冷转暖再转冷,氛围由静转动,体现内心愁绪的涌动。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影,身着深色宽袖长袍,发髻高束,侧身或背影,立于船头或倚靠船舷,被夜色或船篷半遮挡,神情凝重。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;全片视觉圣经:era:唐代(安史之乱后);style:中国古代写实历史教育短片风格,注重光影对比与氛围营造,强调剪影与朦胧感;main_location:苏州城外吴淞江面(枫桥附近),客船,寒山寺远景;recurring_subjects:唐代文人剪影(张继,深色宽袖长袍,发髻高束,侧身或背影,神情凝重),古朴木船,江枫,渔火,寒山寺轮廓;color_palette:冷蓝灰(夜空、霜气、江水)为主,点缀橘黄(渔火、寺庙灯火),整体色调深沉统一;lighting:月光微弱,渔火摇曳,寺庙微光,整体低照度,强调阴影与剪影效果;forbidden:现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识、清晰人物正脸肖像;声音氛围锚点:narration_style:沉稳、深情、略带沧桑的旁白,语速适中,留有呼吸感,避免过度煽情;environment_sounds:寒风声、乌鸦啼叫、江水拍船声、渔火微响、古钟声(核心)、虫鸣;music_mood:古琴或箫独奏,旋律低沉悠远,节奏缓慢,营造孤寂、苍凉、沉思的氛围;段落衔接:index:5;continuity_goal:将钟声与羁旅之思、家国之忧结合,深化“愁”的主题,展现情感的高潮;transition_to_next:从情感高潮回归平静,通过镜头拉远,夜色加深,点出乱世漂泊的永恒愁绪",
+ "audio_text": "钟声在江面回荡,张继低头沉思,手中的书卷轻放。这声音不仅来自寺庙,更来自他内心的羁旅之思与家国之忧,乱世漂泊的愁绪在这一刻涌上心头。",
+ "duration": 12
+ },
+ "image_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_193404/images/segment_05.png",
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_05.mp4",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "wan_i2v_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Wan2.2-I2V-A14B",
+ "clip_seconds": 10,
+ "fps": 15,
+ "height": 480,
+ "width": 832,
+ "video_steps": 35,
+ "seed": 0
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_06.wan_usp_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_06.wan_usp_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..1e696c2c5f4082c4b975960bae4b169f992aa523
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_06.wan_usp_request.json
@@ -0,0 +1,24 @@
+{
+ "segment": {
+ "index": 6,
+ "title": "乱世回响",
+ "story_beat": "点题",
+ "teaching_goal": "总结全诗,强调张继通过夜景描写折射乱世漂泊的忧虑,点出“愁”字背后的历史与个人命运。",
+ "image_prompt": "夜色渐深,江面雾气更浓,唐代文人剪影背影融入夜色,寒山寺钟声仿佛回荡在空旷江面,远处枫树与渔火若隐若现,色调深沉统一,氛围苍凉而深远,点出乱世漂泊的永恒愁绪。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影,身着深色宽袖长袍,发髻高束,侧身或背影,立于船头或倚靠船舷,被夜色或船篷半遮挡,神情凝重。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;全片视觉圣经:era:唐代(安史之乱后);style:中国古代写实历史教育短片风格,注重光影对比与氛围营造,强调剪影与朦胧感;main_location:苏州城外吴淞江面(枫桥附近),客船,寒山寺远景;recurring_subjects:唐代文人剪影(张继,深色宽袖长袍,发髻高束,侧身或背影,神情凝重),古朴木船,江枫,渔火,寒山寺轮廓;color_palette:冷蓝灰(夜空、霜气、江水)为主,点缀橘黄(渔火、寺庙灯火),整体色调深沉统一;lighting:月光微弱,渔火摇曳,寺庙微光,整体低照度,强调阴影与剪影效果;forbidden:现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识、清晰人物正脸肖像",
+ "video_prompt": "镜头缓缓拉远,夜色更深,江面雾气弥漫,唐代文人剪影背影融入夜色,寒山寺钟声仿佛回荡在空旷江面,远处枫树与渔火若隐若现,色调深沉统一,氛围苍凉而深远,点出乱世漂泊的永恒愁绪。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影,身着深色宽袖长袍,发髻高束,侧身或背影,立于船头或倚靠船舷,被夜色或船篷半遮挡,神情凝重。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;全片视觉圣经:era:唐代(安史之乱后);style:中国古代写实历史教育短片风格,注重光影对比与氛围营造,强调剪影与朦胧感;main_location:苏州城外吴淞江面(枫桥附近),客船,寒山寺远景;recurring_subjects:唐代文人剪影(张继,深色宽袖长袍,发髻高束,侧身或背影,神情凝重),古朴木船,江枫,渔火,寒山寺轮廓;color_palette:冷蓝灰(夜空、霜气、江水)为主,点缀橘黄(渔火、寺庙灯火),整体色调深沉统一;lighting:月光微弱,渔火摇曳,寺庙微光,整体低照度,强调阴影与剪影效果;forbidden:现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识、清晰人物正脸肖像;声音氛围锚点:narration_style:沉稳、深情、略带沧桑的旁白,语速适中,留有呼吸感,避免过度煽情;environment_sounds:寒风声、乌鸦啼叫、江水拍船声、渔火微响、古钟声(核心)、虫鸣;music_mood:古琴或箫独奏,旋律低沉悠远,节奏缓慢,营造孤寂、苍凉、沉思的氛围;段落衔接:index:6;continuity_goal:总结全诗,强调意象与情感的融合,点出“愁”字背后的历史与个人命运;transition_to_next:以苍凉深远的画面与余音缭绕的钟声收尾,留给观众思考空间",
+ "audio_text": "夜色渐深,张继的背影融入苍茫江面,寒山寺的钟声余韵悠长。读到这里,要记住:这首诗最动人的地方,在于用月落、乌啼、钟声等意象,将乱世漂泊的愁绪写得如此具体可感。张继,唐代诗人,以这首《枫桥夜泊》留名千古。",
+ "duration": 14
+ },
+ "image_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_193404/images/segment_06.png",
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_193404/videos/segment_06.mp4",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "wan_i2v_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Wan2.2-I2V-A14B",
+ "clip_seconds": 10,
+ "fps": 15,
+ "height": 480,
+ "width": 832,
+ "video_steps": 35,
+ "seed": 0
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..f5552109d99800a788432c03a4a300c4b014c331
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.cosyvoice_request.json
@@ -0,0 +1,24 @@
+{
+ "segment": {
+ "index": 0,
+ "title": "intro_background",
+ "story_beat": "intro",
+ "teaching_goal": "introduce poem and original creation background",
+ "image_prompt": "",
+ "video_prompt": "",
+ "audio_text": "同学你好,今天我们要走近的是张继写的《枫桥夜泊》。天宝十四载一月爆发了安史之乱。因为当时江南政局比较安定,所以不少文士纷纷逃到今江苏、浙江一带避乱,其中也包括张继。一个秋天的夜晚,诗人泊舟苏州城外的枫桥。即景有感,便使写下了这首小诗。",
+ "duration": 9,
+ "image_prompts": [],
+ "grounding": {},
+ "av_sync_plan": []
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.wav
new file mode 100644
index 0000000000000000000000000000000000000000..629ef8afabd510b3610e835243eb537af95b2f1e
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/intro_background.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:01ad0182db4c21895abd43f3a7246419cae0a36ec3b0802bd43ab2142c264036
+size 1136684
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..4c53e13899b2d8e7356baba59f9fc2c6a6eff9c0
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.cosyvoice_request.json
@@ -0,0 +1,53 @@
+{
+ "segment": {
+ "index": 1,
+ "title": "乱世夜泊",
+ "story_beat": "处境",
+ "teaching_goal": "结合安史之乱背景,让学生理解张继为何在苏州城外夜泊,建立‘避乱’与‘愁眠’的因果联系。",
+ "image_prompt": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。",
+ "video_prompt": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头建立空间,主体轻微运动;4-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变;9-12s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。;本段衔接:index:1;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持处境的段落作用。;transition_to_next:由本段的乱世夜泊自然接到霜天月落。",
+ "audio_text": "天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "乱世夜泊"
+ ],
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代",
+ "teaching_anchor": "天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-9s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛",
+ "motion_cue": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变"
+ },
+ {
+ "time_range": "9-12s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.wav
new file mode 100644
index 0000000000000000000000000000000000000000..2fe7f8768dcb8d35b96a28283b4484614ad7ce47
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_01.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0acbbb1a6b618b7b2dca4fbabd5dce977e20234563bdd9f9d853d26e96f3c7f5
+size 725804
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..caf7b28635a6da7c40108b5df4373e66d48356f7
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.cosyvoice_request.json
@@ -0,0 +1,53 @@
+{
+ "segment": {
+ "index": 2,
+ "title": "霜天月落",
+ "story_beat": "物象登场",
+ "teaching_goal": "通过‘月落’与‘霜满天’的视觉描写,体会深秋寒夜的凄清氛围,理解‘霜’字对寒冷的夸张表达。",
+ "image_prompt": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。",
+ "video_prompt": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头建立空间,主体轻微运动;4-7s:旁白“讲到本段核心意象或隐喻”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服;7-10s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。;本段衔接:index:2;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持物象登场的段落作用。;transition_to_next:由本段的霜天月落自然接到江枫渔火。",
+ "audio_text": "月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。",
+ "duration": 10,
+ "image_prompts": [
+ "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "霜天月落"
+ ],
+ "visual_anchor": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持",
+ "teaching_anchor": "月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-7s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频",
+ "motion_cue": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服"
+ },
+ {
+ "time_range": "7-10s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.wav
new file mode 100644
index 0000000000000000000000000000000000000000..f5c0c74ec6e2d30b4316886d5b23efeb43c0c371
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_02.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:91758d65b52a6b9f35d1176092910ca5492ff7f42dc30be9c59daf16ce191755
+size 704684
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..8e6784b77b42fca4aa62f80ad1fb2649ee014b2f
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.cosyvoice_request.json
@@ -0,0 +1,53 @@
+{
+ "segment": {
+ "index": 3,
+ "title": "江枫渔火",
+ "story_beat": "空间推进",
+ "teaching_goal": "聚焦‘江枫’与‘渔火’的冷暖对比,引导学生感受‘对愁眠’中人与景的互动,理解以乐景写哀情的手法。",
+ "image_prompt": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。",
+ "video_prompt": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头建立空间,主体轻微运动;4-8s:旁白“讲到本段核心意象或隐喻”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、;8-11s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。;本段衔接:index:3;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持空间推进的段落作用。;transition_to_next:由本段的江枫渔火自然接到寒山古寺。",
+ "audio_text": "江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。",
+ "duration": 11,
+ "image_prompts": [
+ "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "江枫渔火"
+ ],
+ "visual_anchor": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、",
+ "teaching_anchor": "江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-8s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视",
+ "motion_cue": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、"
+ },
+ {
+ "time_range": "8-11s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.wav
new file mode 100644
index 0000000000000000000000000000000000000000..b85a91402c8e352eb5e62e46ebf2b703429fb3ff
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_03.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:778ec7d843ea3473cebbb4eb2731ae58da9c2631d37cec38ccdd8b7c6119f295
+size 698924
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..2f1369cba349b4cac367bb92bc44f4cba859c8af
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.cosyvoice_request.json
@@ -0,0 +1,53 @@
+{
+ "segment": {
+ "index": 4,
+ "title": "寒山古寺",
+ "story_beat": "发现",
+ "teaching_goal": "视线拉远至姑苏城外的寒山寺,通过建筑轮廓与夜色融合,暗示历史与现实的交汇,为钟声出场铺垫。",
+ "image_prompt": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"寒山古寺\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。",
+ "video_prompt": "镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;,运动为镜头建立空间,主体轻微运动;4-7s:旁白“讲到本段核心意象或隐喻”时,画面呈现环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;,运动为镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发;7-10s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"寒山古寺\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。;本段衔接:index:4;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持发现的段落作用。;transition_to_next:由本段的寒山古寺自然接到夜半钟声。",
+ "audio_text": "视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。",
+ "duration": 10,
+ "image_prompts": [
+ "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"寒山古寺\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "寒山古寺"
+ ],
+ "visual_anchor": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身",
+ "teaching_anchor": "视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-7s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;",
+ "motion_cue": "镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发"
+ },
+ {
+ "time_range": "7-10s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.wav
new file mode 100644
index 0000000000000000000000000000000000000000..39099d05666c81c756fdd644c8b4ad724edf5b33
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_04.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:5e010b151f612ab46590167e95eb28810aa6bb3a43f773397d1209d623504bb1
+size 727724
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..0d8d6a1070ad7654ed7ab8f95b1f408ebd1d42b7
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.cosyvoice_request.json
@@ -0,0 +1,53 @@
+{
+ "segment": {
+ "index": 5,
+ "title": "夜半钟声",
+ "story_beat": "转折",
+ "teaching_goal": "以‘夜半钟声’打破寂静,通过声音的穿透力,将物理空间转化为心理空间,点出钟声对愁绪的触发作用。",
+ "image_prompt": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"夜半钟声\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。",
+ "video_prompt": "镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-5s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考,运动为镜头建立空间,主体轻微运动;5-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考,运动为镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、;9-13s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"夜半钟声\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。;本段衔接:index:5;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持转折的段落作用。;transition_to_next:由本段的夜半钟声自然接到客船回响。",
+ "audio_text": "忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。",
+ "duration": 13,
+ "image_prompts": [
+ "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"夜半钟声\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "夜半钟声"
+ ],
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体",
+ "teaching_anchor": "忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-5s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "5-9s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考",
+ "motion_cue": "镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、"
+ },
+ {
+ "time_range": "9-13s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.wav
new file mode 100644
index 0000000000000000000000000000000000000000..bb510a07aa79dc7f57a82d79959957bfc41e756d
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_05.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:47ba7a9e27bcf2d46cbbfa9187fe5426c6a5f65969e96b1a13e89e6112b1f69e
+size 702764
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..af12597af35b3f033bc0a8ffa45b99b8e7d8288f
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.cosyvoice_request.json
@@ -0,0 +1,53 @@
+{
+ "segment": {
+ "index": 6,
+ "title": "客船回响",
+ "story_beat": "点题",
+ "teaching_goal": "收束全篇,总结钟声如何承载羁旅之思与家国之忧,自然引出张继作为唐代诗人的身份,强调诗歌的感染力。",
+ "image_prompt": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"客船回响\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。",
+ "video_prompt": "镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或,运动为镜头建立空间,主体轻微运动;4-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或,运动为镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、;9-12s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"客船回响\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。;本段衔接:index:6;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持点题的段落作用。;transition_to_next:由本段的客船回响自然接到收束全诗。",
+ "audio_text": "钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"客船回响\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "客船回响"
+ ],
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体",
+ "teaching_anchor": "钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-9s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或",
+ "motion_cue": "镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、"
+ },
+ {
+ "time_range": "9-12s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.wav
new file mode 100644
index 0000000000000000000000000000000000000000..1b4bc5409deea99cd5e508cac4cda6ea524cd13d
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/audio/segment_06.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3796158269619b53f6104ace2835d3cc8e9289d4a7276a8c6d8c4f08519bb5a9
+size 841004
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_poem.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_poem.png
new file mode 100644
index 0000000000000000000000000000000000000000..818d7aa021a66931678783e33397d6b674c6823e
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_poem.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:12cec3679e446b0a4433712e0cdbf44c54e257fc1c09a9453a4cb5f64e49aa00
+size 883471
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_title_author.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_title_author.png
new file mode 100644
index 0000000000000000000000000000000000000000..dd7467c44b1d1de2b6776c21ddb76c1d99578639
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/intro_title_author.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:d1350fd9fcc9ce02c7f1b8d3f5830419d3593d14d2eeb0c26853c8ed734f8d0e
+size 722842
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_01.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..6b2d4effd5e64d2a8e6734c05eee699b5cd45782
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_01.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:37a8651e5aed5c8a0ddb28fff3dca1d17ce7ebac144b483b38afebb30c5e073d
+size 414118
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_02.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..db8d3b51e8453bf546de944af96898a86590162a
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_02.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:17d1b7c8545b48779c3489986f309eb631fc892aef6fea89158433a373e99f18
+size 945417
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_03.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..67a389574798345e0cb5693b572d1dee91394459
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_03.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df7affe0669e72fd821eaec014e7f0d3cfea0128e37c08b090f10046e1e8fe09
+size 926252
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_04.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..1f9647c966170e006777aba4ba0b04c131092eb1
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_04.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0bb0d8ab7a6268b55bd97e3c31c66274c3bc7d7103bc07bc99e8cf3853a3cdee
+size 500381
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_05.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_05.png
new file mode 100644
index 0000000000000000000000000000000000000000..baa6989efc488702518abe87eb24788c853c17f1
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_05.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7e2e2c5d08355916ceaa16f0be0ca4650ec671bf87d83bba4f1f2eaffda33128
+size 787351
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_06.png b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_06.png
new file mode 100644
index 0000000000000000000000000000000000000000..2f0b6a4b214ab293a9ddae7d24ae47af9b77c417
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_06.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:cc1a74fc15edc96d2b5228ec97812b2a0da9f25fbcfb18d62b25e167a1bfbe47
+size 754362
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/intro/intro_metadata.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/intro/intro_metadata.json
new file mode 100644
index 0000000000000000000000000000000000000000..49e03cd47977765b0e66a383a16963780d9412be
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/intro/intro_metadata.json
@@ -0,0 +1,11 @@
+{
+ "title": "枫桥夜泊",
+ "author": "张继",
+ "dynasty": "唐",
+ "poem_text": "月落乌啼霜满天,江枫渔火对愁眠。\n姑苏城外寒山寺,夜半钟声到客船。",
+ "background": "天宝十四载一月爆发了安史之乱。因为当时江南政局比较安定,所以不少文士纷纷逃到今江苏、浙江一带避乱,其中也包括张继。一个秋天的夜晚,诗人泊舟苏州城外的枫桥。即景有感,便使写下了这首小诗。",
+ "audio_text": "同学你好,今天我们要走近的是张继写的《枫桥夜泊》。天宝十四载一月爆发了安史之乱。因为当时江南政局比较安定,所以不少文士纷纷逃到今江苏、浙江一带避乱,其中也包括张继。一个秋天的夜晚,诗人泊舟苏州城外的枫桥。即景有感,便使写下了这首小诗。",
+ "title_seconds": 3,
+ "poem_seconds": 21,
+ "audio_seconds": 23.68
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/muxed/intro.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/muxed/intro.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..919873f5c1890e6a20d62ffac92974635093a6aa
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/muxed/intro.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c6d328f04ff9f21c5afb05b1986b68ed0bfdef5aa59849571f71b8825d5afb42
+size 442996
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/plan.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/plan.json
new file mode 100644
index 0000000000000000000000000000000000000000..889582274611a8124682ab1c5f5781963ce48f1f
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/plan.json
@@ -0,0 +1,433 @@
+{
+ "poem_title": "枫桥夜泊",
+ "author": "张继",
+ "narrative_mode": "羁旅",
+ "storyline": "以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。",
+ "recurring_character_style": "唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。",
+ "appreciation": "《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核心画面需锁定“客船夜泊”这一场景,强调“霜天”的寒冷质感与“渔火”的微弱暖意对比。声音设计需突出“乌啼”的凄清与“夜半钟声”的悠远,以声衬静。主旨在于表现乱世中漂泊无依的羁旅之思与家国之忧,而非单纯的写景。",
+ "plan4teach": "{\"poem_title\":\"枫桥夜泊\",\"author\":\"张继\",\"narrative_mode\":\"羁旅\",\"storyline\":\"以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。\",\"recurring_character_style\":\"唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。\",\"segments\":[{\"index\":1,\"title\":\"乱世夜泊\",\"story_beat\":\"处境\",\"teaching_goal\":\"结合安史之乱背景,让学生理解张继为何在苏州城外夜泊,建立‘避乱’与‘愁眠’的因果联系。\",\"duration\":12,\"grounding\":{\"metaphor_nodes\":[\"乱世夜泊\"],\"visual_anchor\":\"人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白\",\"audio_anchor\":\"根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。\",\"motion_anchor\":\"镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代\",\"teaching_anchor\":\"天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。\"},\"av_sync_plan\":[{\"time_range\":\"0-4s\",\"audio_cue\":\"进入本段具体场景或动作\",\"visual_cue\":\"人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛\",\"motion_cue\":\"镜头建立空间,主体轻微运动\"},{\"time_range\":\"4-9s\",\"audio_cue\":\"讲到本段核心意象或隐喻\",\"visual_cue\":\"人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛\",\"motion_cue\":\"镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变\"},{\"time_range\":\"9-12s\",\"audio_cue\":\"自然带出教学点并承接下一段\",\"visual_cue\":\"画面收束到人物、物象或空间关系\",\"motion_cue\":\"镜头放缓或转向下一段的视觉线索\"}]},{\"index\":2,\"title\":\"霜天月落\",\"story_beat\":\"物象登场\",\"teaching_goal\":\"通过‘月落’与‘霜满天’的视觉描写,体会深秋寒夜的凄清氛围,理解‘霜’字对寒冷的夸张表达。\",\"duration\":10,\"grounding\":{\"metaphor_nodes\":[\"霜天月落\"],\"visual_anchor\":\"环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环\",\"audio_anchor\":\"根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。\",\"motion_anchor\":\"镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持\",\"teaching_anchor\":\"月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。\"},\"av_sync_plan\":[{\"time_range\":\"0-4s\",\"audio_cue\":\"进入本段具体场景或动作\",\"visual_cue\":\"环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频\",\"motion_cue\":\"镜头建立空间,主体轻微运动\"},{\"time_range\":\"4-7s\",\"audio_cue\":\"讲到本段核心意象或隐喻\",\"visual_cue\":\"环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频\",\"motion_cue\":\"镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服\"},{\"time_range\":\"7-10s\",\"audio_cue\":\"自然带出教学点并承接下一段\",\"visual_cue\":\"画面收束到人物、物象或空间关系\",\"motion_cue\":\"镜头放缓或转向下一段的视觉线索\"}]},{\"index\":3,\"title\":\"江枫渔火\",\"story_beat\":\"空间推进\",\"teaching_goal\":\"聚焦‘江枫’与‘渔火’的冷暖对比,引导学生感受‘对愁眠’中人与景的互动,理解以乐景写哀情的手法。\",\"duration\":11,\"grounding\":{\"metaphor_nodes\":[\"江枫渔火\"],\"visual_anchor\":\"物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+\",\"audio_anchor\":\"根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。\",\"motion_anchor\":\"镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、\",\"teaching_anchor\":\"江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。\"},\"av_sync_plan\":[{\"time_range\":\"0-4s\",\"audio_cue\":\"进入本段具体场景或动作\",\"visual_cue\":\"物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视\",\"motion_cue\":\"镜头建立空间,主体轻微运动\"},{\"time_range\":\"4-8s\",\"audio_cue\":\"讲到本段核心意象或隐喻\",\"visual_cue\":\"物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视\",\"motion_cue\":\"镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、\"},{\"time_range\":\"8-11s\",\"audio_cue\":\"自然带出教学点并承接下一段\",\"visual_cue\":\"画面收束到人物、物象或空间关系\",\"motion_cue\":\"镜头放缓或转向下一段的视觉线索\"}]},{\"index\":4,\"title\":\"寒山古寺\",\"story_beat\":\"发现\",\"teaching_goal\":\"视线拉远至姑苏城外的寒山寺,通过建筑轮廓与夜色融合,暗示历史与现实的交汇,为钟声出场铺垫。\",\"duration\":10,\"grounding\":{\"metaphor_nodes\":[\"寒山古寺\"],\"visual_anchor\":\"环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点\",\"audio_anchor\":\"根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。\",\"motion_anchor\":\"镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身\",\"teaching_anchor\":\"视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。\"},\"av_sync_plan\":[{\"time_range\":\"0-4s\",\"audio_cue\":\"进入本段具体场景或动作\",\"visual_cue\":\"环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;\",\"motion_cue\":\"镜头建立空间,主体轻微运动\"},{\"time_range\":\"4-7s\",\"audio_cue\":\"讲到本段核心意象或隐喻\",\"visual_cue\":\"环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;\",\"motion_cue\":\"镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发\"},{\"time_range\":\"7-10s\",\"audio_cue\":\"自然带出教学点并承接下一段\",\"visual_cue\":\"画面收束到人物、物象或空间关系\",\"motion_cue\":\"镜头放缓或转向下一段的视觉线索\"}]},{\"index\":5,\"title\":\"夜半钟声\",\"story_beat\":\"转折\",\"teaching_goal\":\"以‘夜半钟声’打破寂静,通过声音的穿透力,将物理空间转化为心理空间,点出钟声对愁绪的触发作用。\",\"duration\":13,\"grounding\":{\"metaphor_nodes\":[\"夜半钟声\"],\"visual_anchor\":\"人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优\",\"audio_anchor\":\"根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。\",\"motion_anchor\":\"镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体\",\"teaching_anchor\":\"忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。\"},\"av_sync_plan\":[{\"time_range\":\"0-5s\",\"audio_cue\":\"进入本段具体场景或动作\",\"visual_cue\":\"人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考\",\"motion_cue\":\"镜头建立空间,主体轻微运动\"},{\"time_range\":\"5-9s\",\"audio_cue\":\"讲到本段核心意象或隐喻\",\"visual_cue\":\"人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考\",\"motion_cue\":\"镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、\"},{\"time_range\":\"9-13s\",\"audio_cue\":\"自然带出教学点并承接下一段\",\"visual_cue\":\"画面收束到人物、物象或空间关系\",\"motion_cue\":\"镜头放缓或转向下一段的视觉线索\"}]},{\"index\":6,\"title\":\"客船回响\",\"story_beat\":\"点题\",\"teaching_goal\":\"收束全篇,总结钟声如何承载羁旅之思与家国之忧,自然引出张继作为唐代诗人的身份,强调诗歌的感染力。\",\"duration\":12,\"grounding\":{\"metaphor_nodes\":[\"客船回响\"],\"visual_anchor\":\"人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产\",\"audio_anchor\":\"根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。\",\"motion_anchor\":\"镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体\",\"teaching_anchor\":\"钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。\"},\"av_sync_plan\":[{\"time_range\":\"0-4s\",\"audio_cue\":\"进入本段具体场景或动作\",\"visual_cue\":\"人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或\",\"motion_cue\":\"镜头建立空间,主体轻微运动\"},{\"time_range\":\"4-9s\",\"audio_cue\":\"讲到本段核心意象或隐喻\",\"visual_cue\":\"人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或\",\"motion_cue\":\"镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、\"},{\"time_range\":\"9-12s\",\"audio_cue\":\"自然带出教学点并承接下一段\",\"visual_cue\":\"画面收束到人物、物象或空间关系\",\"motion_cue\":\"镜头放缓或转向下一段的视觉线索\"}]}]}",
+ "plan4img": "{\"segments\":[{\"index\":1,\"image_prompts\":[\"人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\\\"乱世夜泊\\\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。\"]},{\"index\":2,\"image_prompts\":[\"环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\\\"霜天月落\\\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。\"]},{\"index\":3,\"image_prompts\":[\"物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\\\"江枫渔火\\\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。\"]},{\"index\":4,\"image_prompts\":[\"环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\\\"寒山古寺\\\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。\"]},{\"index\":5,\"image_prompts\":[\"人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\\\"夜半钟声\\\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。\"]},{\"index\":6,\"image_prompts\":[\"人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\\\"客船回响\\\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。\"]}]}",
+ "plan4video": "{\"segments\":[{\"index\":1,\"video_prompt\":\"镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头建立空间,主体轻微运动;4-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变;9-12s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\\\"乱世夜泊\\\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。;本段衔接:index:1;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持处境的段落作用。;transition_to_next:由本段的乱世夜泊自然接到霜天月落。\"},{\"index\":2,\"video_prompt\":\"镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头建立空间,主体轻微运动;4-7s:旁白“讲到本段核心意象或隐喻”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服;7-10s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\\\"霜天月落\\\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。;本段衔接:index:2;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持物象登场的段落作用。;transition_to_next:由本段的霜天月落自然接到江枫渔火。\"},{\"index\":3,\"video_prompt\":\"镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头建立空间,主体轻微运动;4-8s:旁白“讲到本段核心意象或隐喻”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、;8-11s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\\\"江枫渔火\\\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。;本段衔接:index:3;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持空间推进的段落作用。;transition_to_next:由本段的江枫渔火自然接到寒山古寺。\"},{\"index\":4,\"video_prompt\":\"镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;,运动为镜头建立空间,主体轻微运动;4-7s:旁白“讲到本段核心意象或隐喻”时,画面呈现环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;,运动为镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发;7-10s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\\\"寒山古寺\\\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。;本段衔接:index:4;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持发现的段落作用。;transition_to_next:由本段的寒山古寺自然接到夜半钟声。\"},{\"index\":5,\"video_prompt\":\"镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-5s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考,运动为镜头建立空间,主体轻微运动;5-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考,运动为镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、;9-13s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\\\"夜半钟声\\\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。;本段衔接:index:5;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持转折的段落作用。;transition_to_next:由本段的夜半钟声自然接到客船回响。\"},{\"index\":6,\"video_prompt\":\"镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或,运动为镜头建立空间,主体轻微运动;4-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或,运动为镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、;9-12s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\\\"客船回响\\\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。;本段衔接:index:6;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持点题的段落作用。;transition_to_next:由本段的客船回响自然接到收束全诗。\"}]}",
+ "plan4audio": "{\"segments\":[{\"index\":1,\"audio_text\":\"天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。\"},{\"index\":2,\"audio_text\":\"月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。\"},{\"index\":3,\"audio_text\":\"江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。\"},{\"index\":4,\"audio_text\":\"视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。\"},{\"index\":5,\"audio_text\":\"忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。\"},{\"index\":6,\"audio_text\":\"钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。\"}]}",
+ "segments": [
+ {
+ "index": 1,
+ "title": "乱世夜泊",
+ "story_beat": "处境",
+ "teaching_goal": "结合安史之乱背景,让学生理解张继为何在苏州城外夜泊,建立‘避乱’与‘愁眠’的因果联系。",
+ "image_prompt": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。",
+ "video_prompt": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头建立空间,主体轻微运动;4-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变;9-12s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。;本段衔接:index:1;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持处境的段落作用。;transition_to_next:由本段的乱世夜泊自然接到霜天月落。",
+ "audio_text": "天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "乱世夜泊"
+ ],
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代",
+ "teaching_anchor": "天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-9s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛",
+ "motion_cue": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变"
+ },
+ {
+ "time_range": "9-12s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ {
+ "index": 2,
+ "title": "霜天月落",
+ "story_beat": "物象登场",
+ "teaching_goal": "通过‘月落’与‘霜满天’的视觉描写,体会深秋寒夜的凄清氛围,理解‘霜’字对寒冷的夸张表达。",
+ "image_prompt": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。",
+ "video_prompt": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头建立空间,主体轻微运动;4-7s:旁白“讲到本段核心意象或隐喻”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服;7-10s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。;本段衔接:index:2;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持物象登场的段落作用。;transition_to_next:由本段的霜天月落自然接到江枫渔火。",
+ "audio_text": "月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。",
+ "duration": 10,
+ "image_prompts": [
+ "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "霜天月落"
+ ],
+ "visual_anchor": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持",
+ "teaching_anchor": "月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-7s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频",
+ "motion_cue": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服"
+ },
+ {
+ "time_range": "7-10s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ {
+ "index": 3,
+ "title": "江枫渔火",
+ "story_beat": "空间推进",
+ "teaching_goal": "聚焦‘江枫’与‘渔火’的冷暖对比,引导学生感受‘对愁眠’中人与景的互动,理解以乐景写哀情的手法。",
+ "image_prompt": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。",
+ "video_prompt": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头建立空间,主体轻微运动;4-8s:旁白“讲到本段核心意象或隐喻”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、;8-11s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。;本段衔接:index:3;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持空间推进的段落作用。;transition_to_next:由本段的江枫渔火自然接到寒山古寺。",
+ "audio_text": "江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。",
+ "duration": 11,
+ "image_prompts": [
+ "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "江枫渔火"
+ ],
+ "visual_anchor": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、",
+ "teaching_anchor": "江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-8s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视",
+ "motion_cue": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、"
+ },
+ {
+ "time_range": "8-11s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ {
+ "index": 4,
+ "title": "寒山古寺",
+ "story_beat": "发现",
+ "teaching_goal": "视线拉远至姑苏城外的寒山寺,通过建筑轮廓与夜色融合,暗示历史与现实的交汇,为钟声出场铺垫。",
+ "image_prompt": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"寒山古寺\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。",
+ "video_prompt": "镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;,运动为镜头建立空间,主体轻微运动;4-7s:旁白“讲到本段核心意象或隐喻”时,画面呈现环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;,运动为镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发;7-10s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"寒山古寺\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。;本段衔接:index:4;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持发现的段落作用。;transition_to_next:由本段的寒山古寺自然接到夜半钟声。",
+ "audio_text": "视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。",
+ "duration": 10,
+ "image_prompts": [
+ "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"寒山古寺\"];visual_anchor:环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身;teaching_anchor:视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "寒山古寺"
+ ],
+ "visual_anchor": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身",
+ "teaching_anchor": "视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-7s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;",
+ "motion_cue": "镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发"
+ },
+ {
+ "time_range": "7-10s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ {
+ "index": 5,
+ "title": "夜半钟声",
+ "story_beat": "转折",
+ "teaching_goal": "以‘夜半钟声’打破寂静,通过声音的穿透力,将物理空间转化为心理空间,点出钟声对愁绪的触发作用。",
+ "image_prompt": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"夜半钟声\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。",
+ "video_prompt": "镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-5s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考,运动为镜头建立空间,主体轻微运动;5-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考,运动为镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、;9-13s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"夜半钟声\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。;本段衔接:index:5;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持转折的段落作用。;transition_to_next:由本段的夜半钟声自然接到客船回响。",
+ "audio_text": "忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。",
+ "duration": 13,
+ "image_prompts": [
+ "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"夜半钟声\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "夜半钟声"
+ ],
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体",
+ "teaching_anchor": "忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-5s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "5-9s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考",
+ "motion_cue": "镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、"
+ },
+ {
+ "time_range": "9-13s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ {
+ "index": 6,
+ "title": "客船回响",
+ "story_beat": "点题",
+ "teaching_goal": "收束全篇,总结钟声如何承载羁旅之思与家国之忧,自然引出张继作为唐代诗人的身份,强调诗歌的感染力。",
+ "image_prompt": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"客船回响\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。",
+ "video_prompt": "镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或,运动为镜头建立空间,主体轻微运动;4-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或,运动为镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、;9-12s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"客船回响\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。;本段衔接:index:6;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持点题的段落作用。;transition_to_next:由本段的客船回响自然接到收束全诗。",
+ "audio_text": "钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"客船回响\"];visual_anchor:人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体;teaching_anchor:钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "客船回响"
+ ],
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体",
+ "teaching_anchor": "钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-9s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或",
+ "motion_cue": "镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、"
+ },
+ {
+ "time_range": "9-12s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ }
+ ],
+ "raw_response": "\n《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核心画面需锁定“客船夜泊”这一场景,强调“霜天”的寒冷质感与“渔火”的微弱暖意对比。声音设计需突出“乌啼”的凄清与“夜半钟声”的悠远,以声衬静。主旨在于表现乱世中漂泊无依的羁旅之思与家国之忧,而非单纯的写景。\n \n{\"poem_title\":\"枫桥夜泊\",\"author\":\"张继\",\"narrative_mode\":\"羁旅\",\"storyline\":\"以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。\",\"recurring_character_style\":\"唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。\",\"segments\":[{\"index\":1,\"title\":\"乱世夜泊\",\"story_beat\":\"处境\",\"teaching_goal\":\"结合安史之乱背景,让学生理解张继为何在苏州城外夜泊,建立‘避乱’与‘愁眠’的因果联系。\",\"duration\":12},{\"index\":2,\"title\":\"霜天月落\",\"story_beat\":\"物象登场\",\"teaching_goal\":\"通过‘月落’与‘霜满天’的视觉描写,体会深秋寒夜的凄清氛围,理解‘霜’字对寒冷的夸张表达。\",\"duration\":10},{\"index\":3,\"title\":\"江枫渔火\",\"story_beat\":\"空间推进\",\"teaching_goal\":\"聚焦‘江枫’与‘渔火’的冷暖对比,引导学生感受‘对愁眠’中人与景的互动,理解以乐景写哀情的手法。\",\"duration\":11},{\"index\":4,\"title\":\"寒山古寺\",\"story_beat\":\"发现\",\"teaching_goal\":\"视线拉远至姑苏城外的寒山寺,通过建筑轮廓与夜色融合,暗示历史与现实的交汇,为钟声出场铺垫。\",\"duration\":10},{\"index\":5,\"title\":\"夜半钟声\",\"story_beat\":\"转折\",\"teaching_goal\":\"以‘夜半钟声’打破寂静,通过声音的穿透力,将物理空间转化为心理空间,点出钟声对愁绪的触发作用。\",\"duration\":13},{\"index\":6,\"title\":\"客船回响\",\"story_beat\":\"点题\",\"teaching_goal\":\"收束全篇,总结钟声如何承载羁旅之思与家国之忧,自然引出张继作为唐代诗人的身份,强调诗歌的感染力。\",\"duration\":12}]} \n{\"segments\":[{\"index\":1,\"image_prompts\":[\"人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。\"]},{\"index\":2,\"image_prompts\":[\"环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。\"]},{\"index\":3,\"image_prompts\":[\"物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。\"]},{\"index\":4,\"image_prompts\":[\"环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。\"]},{\"index\":5,\"image_prompts\":[\"人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。\"]},{\"index\":6,\"image_prompts\":[\"人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。\"]}]}\n \n{\"segments\":[{\"index\":1,\"video_prompt\":\"镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。\"},{\"index\":2,\"video_prompt\":\"镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。\"},{\"index\":3,\"video_prompt\":\"镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。\"},{\"index\":4,\"video_prompt\":\"镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。\"},{\"index\":5,\"video_prompt\":\"镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。\"},{\"index\":6,\"video_prompt\":\"镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。\"}]}\n \n{\"segments\":[{\"index\":1,\"audio_text\":\"天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。\"},{\"index\":2,\"audio_text\":\"月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。\"},{\"index\":3,\"audio_text\":\"江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。\"},{\"index\":4,\"audio_text\":\"视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。\"},{\"index\":5,\"audio_text\":\"忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。\"},{\"index\":6,\"audio_text\":\"钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。\"}]}\n ",
+ "metaphor_grounding_graph": [
+ {
+ "source_text": "乱世夜泊",
+ "literal_image": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PP",
+ "metaphorical_meaning": "结合安史之乱背景,让学生理解张继为何在苏州城外夜泊,建立‘避乱’与‘愁眠’的因果联系。",
+ "knowledge_evidence": "《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核",
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代",
+ "teaching_anchor": "天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。",
+ "fallback_reason": "grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459)"
+ },
+ {
+ "source_text": "霜天月落",
+ "literal_image": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产",
+ "metaphorical_meaning": "通过‘月落’与‘霜满天’的视觉描写,体会深秋寒夜的凄清氛围,理解‘霜’字对寒冷的夸张表达。",
+ "knowledge_evidence": "《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核",
+ "visual_anchor": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持",
+ "teaching_anchor": "月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。",
+ "fallback_reason": "grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459)"
+ },
+ {
+ "source_text": "江枫渔火",
+ "literal_image": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资",
+ "metaphorical_meaning": "聚焦‘江枫’与‘渔火’的冷暖对比,引导学生感受‘对愁眠’中人与景的互动,理解以乐景写哀情的手法。",
+ "knowledge_evidence": "《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核",
+ "visual_anchor": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、",
+ "teaching_anchor": "江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。",
+ "fallback_reason": "grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459)"
+ },
+ {
+ "source_text": "寒山古寺",
+ "literal_image": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、",
+ "metaphorical_meaning": "视线拉远至姑苏城外的寒山寺,通过建筑轮廓与夜色融合,暗示历史与现实的交汇,为钟声出场铺垫。",
+ "knowledge_evidence": "《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核",
+ "visual_anchor": "环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身",
+ "teaching_anchor": "视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。",
+ "fallback_reason": "grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459)"
+ },
+ {
+ "source_text": "夜半钟声",
+ "literal_image": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型",
+ "metaphorical_meaning": "以‘夜半钟声’打破寂静,通过声音的穿透力,将物理空间转化为心理空间,点出钟声对愁绪的触发作用。",
+ "knowledge_evidence": "《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核",
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体",
+ "teaching_anchor": "忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。",
+ "fallback_reason": "grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459)"
+ },
+ {
+ "source_text": "客船回响",
+ "literal_image": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象",
+ "metaphorical_meaning": "收束全篇,总结钟声如何承载羁旅之思与家国之忧,自然引出张继作为唐代诗人的身份,强调诗歌的感染力。",
+ "knowledge_evidence": "《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核",
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体",
+ "teaching_anchor": "钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。",
+ "fallback_reason": "grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459)"
+ }
+ ],
+ "visual_bible": {
+ "era": "中国古代语境",
+ "style": "中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识",
+ "main_location": "以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。",
+ "recurring_subjects": "唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。",
+ "color_palette": "低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一",
+ "lighting": "自然光、月光、晨昏或灯火必须服务原诗意境",
+ "forbidden": "模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感",
+ "fallback_reason": "grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459)"
+ },
+ "audio_bible": {
+ "narration_style": "温和、连贯、讲故事式教学旁白,避免逐句翻译和术语堆砌",
+ "environment_sounds": "根据诗中意象选择风声、水声、鸟鸣、钟声、雨雪声或环境静默",
+ "music_mood": "克制、低饱和、服务诗歌情绪,不喧宾夺主"
+ },
+ "transition_plan": [
+ {
+ "index": 1,
+ "continuity_goal": "沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持处境的段落作用。",
+ "transition_to_next": "由本段的乱世夜泊自然接到霜天月落。"
+ },
+ {
+ "index": 2,
+ "continuity_goal": "沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持物象登场的段落作用。",
+ "transition_to_next": "由本段的霜天月落自然接到江枫渔火。"
+ },
+ {
+ "index": 3,
+ "continuity_goal": "沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持空间推进的段落作用。",
+ "transition_to_next": "由本段的江枫渔火自然接到寒山古寺。"
+ },
+ {
+ "index": 4,
+ "continuity_goal": "沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持发现的段落作用。",
+ "transition_to_next": "由本段的寒山古寺自然接到夜半钟声。"
+ },
+ {
+ "index": 5,
+ "continuity_goal": "沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持转折的段落作用。",
+ "transition_to_next": "由本段的夜半钟声自然接到客船回响。"
+ },
+ {
+ "index": 6,
+ "continuity_goal": "沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持点题的段落作用。",
+ "transition_to_next": "由本段的客船回响自然接到收束全诗。"
+ }
+ ],
+ "quality_report": {
+ "agent_loop_enabled": true,
+ "rounds_used": 2,
+ "latest": {
+ "pass": false,
+ "score": 0,
+ "round": 0,
+ "strengths": [],
+ "problems": [
+ "critic failed: 400 Client Error: Bad Request for url: http://127.0.0.1:8002/v1/chat/completions",
+ "第6段旁白存在翻译式或术语化表达。"
+ ],
+ "rewrite_instructions": [
+ "重新生成严格 JSON 规划。",
+ "重写第6段 audio_text:先写具体瞬间/动作/声音,再自然带出教学点。"
+ ]
+ },
+ "history": [
+ {
+ "pass": false,
+ "score": 0,
+ "round": 0,
+ "strengths": [],
+ "problems": [
+ "critic failed: 400 Client Error: Bad Request for url: http://127.0.0.1:8002/v1/chat/completions",
+ "第6段旁白存在翻译式或术语化表达。"
+ ],
+ "rewrite_instructions": [
+ "重新生成严格 JSON 规划。",
+ "重写第6段 audio_text:先写具体瞬间/动作/声音,再自然带出教学点。"
+ ]
+ },
+ {
+ "pass": false,
+ "score": 0,
+ "round": 0,
+ "strengths": [],
+ "problems": [
+ "critic failed: 400 Client Error: Bad Request for url: http://127.0.0.1:8002/v1/chat/completions",
+ "第6段旁白存在翻译式或术语化表达。"
+ ],
+ "rewrite_instructions": [
+ "重新生成严格 JSON 规划。",
+ "重写第6段 audio_text:先写具体瞬间/动作/声音,再自然带出教学点。"
+ ]
+ }
+ ],
+ "regenerate_failed_after_final_check": true,
+ "regenerate_error": "RuntimeError: Qwen35 returned invalid poetry planning output after one repair attempt.",
+ "final_pass": false
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/plan_tagged.txt b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/plan_tagged.txt
new file mode 100644
index 0000000000000000000000000000000000000000..038089261b549ae376b3dd0f682ab8ad32036578
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/plan_tagged.txt
@@ -0,0 +1,10 @@
+
+《枫桥夜泊》是一首典型的羁旅诗,创作于安史之乱后张继避乱江南的深秋夜晚。全诗以“愁”为核心情绪,通过月落、乌啼、霜天、江枫、渔火、钟声等意象,构建了一个由静转动、由远及近、由视觉到听觉的立体空间。讲述主线应沿张继在客船上的观察顺序与心理变化推进:从深夜难眠的孤寂,到江面景色的清冷,再到远处钟声打破寂静引发的深沉思绪。核心画面需锁定“客船夜泊”这一场景,强调“霜天”的寒冷质感与“渔火”的微弱暖意对比。声音设计需突出“乌啼”的凄清与“夜半钟声”的悠远,以声衬静。主旨在于表现乱世中漂泊无依的羁旅之思与家国之忧,而非单纯的写景。
+
+{"poem_title":"枫桥夜泊","author":"张继","narrative_mode":"羁旅","storyline":"以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。","recurring_character_style":"唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。","segments":[{"index":1,"title":"乱世夜泊","story_beat":"处境","teaching_goal":"结合安史之乱背景,让学生理解张继为何在苏州城外夜泊,建立‘避乱’与‘愁眠’的因果联系。","duration":12},{"index":2,"title":"霜天月落","story_beat":"物象登场","teaching_goal":"通过‘月落’与‘霜满天’的视觉描写,体会深秋寒夜的凄清氛围,理解‘霜’字对寒冷的夸张表达。","duration":10},{"index":3,"title":"江枫渔火","story_beat":"空间推进","teaching_goal":"聚焦‘江枫’与‘渔火’的冷暖对比,引导学生感受‘对愁眠’中人与景的互动,理解以乐景写哀情的手法。","duration":11},{"index":4,"title":"寒山古寺","story_beat":"发现","teaching_goal":"视线拉远至姑苏城外的寒山寺,通过建筑轮廓与夜色融合,暗示历史与现实的交汇,为钟声出场铺垫。","duration":10},{"index":5,"title":"夜半钟声","story_beat":"转折","teaching_goal":"以‘夜半钟声’打破寂静,通过声音的穿透力,将物理空间转化为心理空间,点出钟声对愁绪的触发作用。","duration":13},{"index":6,"title":"客船回响","story_beat":"点题","teaching_goal":"收束全篇,总结钟声如何承载羁旅之思与家国之忧,自然引出张继作为唐代诗人的身份,强调诗歌的感染力。","duration":12}]}
+{"segments":[{"index":1,"image_prompts":["人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。"]},{"index":2,"image_prompts":["环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。"]},{"index":3,"image_prompts":["物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。"]},{"index":4,"image_prompts":["环境资产:姑苏城外寒山寺远景,古塔与殿宇轮廓隐没在夜色与薄雾中,屋顶飞檐清晰可见,周围树木剪影,月光微弱,整体色调深沉,无文字。"]},{"index":5,"image_prompts":["人物+环境资产:唐代中年男子剪影侧耳倾听,位于客船船头,背景是寒山寺方向,夜色中隐约可见寺庙轮廓,水面波纹因钟声想象而扩散,光线聚焦于人物侧脸剪影,氛围肃穆,无文字。"]},{"index":6,"image_prompts":["人物+环境资产:唐代中年男子剪影背影伫立船头,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映着微弱星光,雾气渐散,氛围深沉悠远,无文字。"]}]}
+
+{"segments":[{"index":1,"video_prompt":"镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。"},{"index":2,"video_prompt":"镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。"},{"index":3,"video_prompt":"镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。"},{"index":4,"video_prompt":"镜头从江面缓缓拉远,聚焦姑苏城外寒山寺远景,古塔与殿宇轮廓在夜色与薄雾中逐渐清晰,月光微弱洒在飞檐上,周围树木剪影随风轻摆,氛围深沉而神秘。"},{"index":5,"video_prompt":"镜头从客船船头特写唐代中年男子剪影侧耳倾听,背景寒山寺方向隐约可见,水面波纹因想象而扩散,雾气随声波流动,光线聚焦于人物侧脸,氛围肃穆而悠远。"},{"index":6,"video_prompt":"镜头从唐代中年男子剪影背影缓慢拉远,面向江面与寒山寺方向,渔火微光在身后摇曳,水面倒映星光,雾气渐散,光线由暗转微亮,氛围深沉悠远,余韵绵长。"}]}
+
+{"segments":[{"index":1,"audio_text":"天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。"},{"index":2,"audio_text":"月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。"},{"index":3,"audio_text":"江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。"},{"index":4,"audio_text":"视线越过江面,姑苏城外的寒山寺隐没在夜色中,古塔的轮廓在薄雾里若隐若现。这座千年古寺,此刻成了乱世中唯一的宁静象征,却也让张继的思绪飘向更远的地方。"},{"index":5,"audio_text":"忽然,夜半的钟声从寒山寺传来,悠远而清晰,穿透了江面的雾气,落进客船。这钟声没有驱散愁绪,反而像一把钥匙,打开了张继心中积压的家国之痛与羁旅之思。"},{"index":6,"audio_text":"钟声余音未散,张继伫立船头,望着江面与古寺,心中万千感慨。张继,这位唐代诗人,用短短二十八字,将乱世中的漂泊与坚守刻进了历史。读到这里,要记住:最动人的诗,往往藏在最寂静的夜晚里。"}]}
+
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/concat_list.txt b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/concat_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..83a8138a9009cb2cecd760da84af138fa3c63e1b
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/concat_list.txt
@@ -0,0 +1,2 @@
+file '/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_title_author.mp4'
+file '/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_poem.mp4'
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_poem.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_poem.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..2affe6514fc23393c31c48692718fefa585dea68
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_poem.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e7614a5a1804ebcc650c2e425e4b95888cf413259dcbfbd652ff83239ee78da8
+size 173843
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_silent.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_silent.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..ff4d8bec65e4b6825a875aed8937934d837b2325
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_silent.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2afa63f17f8517d2f98e61ba67e41a04fcf0032c712165e232e009bdffaa2e52
+size 211227
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_title_author.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_title_author.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..03fb1e83dd6a8ff8ef8432e79934e519103b08de
Binary files /dev/null and b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/intro_title_author.mp4 differ
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_01.wan_vace_usp_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_01.wan_vace_usp_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..965f6c0ca7e4a4f133b4ff8c09626afcfe05e4f7
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_01.wan_vace_usp_request.json
@@ -0,0 +1,57 @@
+{
+ "segment": {
+ "index": 1,
+ "title": "乱世夜泊",
+ "story_beat": "处境",
+ "teaching_goal": "结合安史之乱背景,让学生理解张继为何在苏州城外夜泊,建立‘避乱’与‘愁眠’的因果联系。",
+ "image_prompt": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。",
+ "video_prompt": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头建立空间,主体轻微运动;4-9s:旁白“讲到本段核心意象或隐喻”时,画面呈现人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛,运动为镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变;9-12s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。;本段衔接:index:1;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持处境的段落作用。;transition_to_next:由本段的乱世夜泊自然接到霜天月落。",
+ "audio_text": "天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"乱世夜泊\"];visual_anchor:人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代;teaching_anchor:天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "乱世夜泊"
+ ],
+ "visual_anchor": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛围孤寂,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代",
+ "teaching_anchor": "天宝年间战乱四起,张继避乱江南,一个深秋夜晚,他的小船停靠在苏州城外的枫桥。夜色深沉,他独自倚在船头,望着远处模糊的城郭,心中满是漂泊无依的愁绪。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-9s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "人物+环境资产:唐代中年男子剪影侧身倚靠在客船船舷,身着深色宽袖长袍,发髻束于头顶,背景是苏州城外吴淞江夜景,水面微澜,远处有模糊的苏州城轮廓,天色深蓝近黑,雾气弥漫,光线昏暗,氛",
+ "motion_cue": "镜头从客船船舱内缓慢推至船舷,唐代中年男子剪影侧身倚靠,背景吴淞江水面微澜,远处苏州城轮廓在雾气中若隐若现,残月低垂,乌鸦掠过树梢,水面泛起细微涟漪,氛围孤寂,光线随时间推移逐渐变"
+ },
+ {
+ "time_range": "9-12s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "image_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_01.png",
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_01.mp4",
+ "reference_images": [],
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "wan_i2v_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Wan2.2-I2V-A14B",
+ "clip_seconds": 10,
+ "fps": 15,
+ "height": 480,
+ "width": 832,
+ "video_steps": 35,
+ "seed": 0
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_02.wan_vace_usp_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_02.wan_vace_usp_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..14b78bc23262ba8e864ecf9d9061abd1bd0181c5
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_02.wan_vace_usp_request.json
@@ -0,0 +1,57 @@
+{
+ "segment": {
+ "index": 2,
+ "title": "霜天月落",
+ "story_beat": "物象登场",
+ "teaching_goal": "通过‘月落’与‘霜满天’的视觉描写,体会深秋寒夜的凄清氛围,理解‘霜’字对寒冷的夸张表达。",
+ "image_prompt": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。",
+ "video_prompt": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头建立空间,主体轻微运动;4-7s:旁白“讲到本段核心意象或隐喻”时,画面呈现环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频,运动为镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服;7-10s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。;本段衔接:index:2;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持物象登场的段落作用。;transition_to_next:由本段的霜天月落自然接到江枫渔火。",
+ "audio_text": "月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。",
+ "duration": 10,
+ "image_prompts": [
+ "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"霜天月落\"];visual_anchor:环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持;teaching_anchor:月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "霜天月落"
+ ],
+ "visual_anchor": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持",
+ "teaching_anchor": "月亮悄悄沉入地平线,乌鸦的啼叫声划破寂静,寒气仿佛弥漫了整个夜空。这‘霜满天’并非真的霜雪,而是张继用笔触描绘出的刺骨寒意,让人瞬间感受到秋夜的凄清。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-7s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "环境资产:深秋夜空,残月低垂即将隐没于地平线,乌鸦剪影掠过树梢,江面与岸边覆盖着浓重的白霜,空气呈现冷蓝色调,霜气在月光下微闪,构图稳定,无文字。;VACE参考资产图,不是最终视频",
+ "motion_cue": "镜头从江面缓缓上摇至夜空,残月逐渐隐没,乌鸦剪影快速掠过,江面与岸边霜气在冷蓝色调中流动,雾气弥漫,光线由微亮转为深蓝,突出‘霜满天’的寒冷质感。;中国古代写实历史教育短片风格;服"
+ },
+ {
+ "time_range": "7-10s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "image_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_02.png",
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_02.mp4",
+ "reference_images": [],
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "wan_i2v_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Wan2.2-I2V-A14B",
+ "clip_seconds": 10,
+ "fps": 15,
+ "height": 480,
+ "width": 832,
+ "video_steps": 35,
+ "seed": 0
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_03.wan_vace_usp_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_03.wan_vace_usp_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..6e56e31acb0b033aab75eab162d497fa3ce723b5
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_03.wan_vace_usp_request.json
@@ -0,0 +1,57 @@
+{
+ "segment": {
+ "index": 3,
+ "title": "江枫渔火",
+ "story_beat": "空间推进",
+ "teaching_goal": "聚焦‘江枫’与‘渔火’的冷暖对比,引导学生感受‘对愁眠’中人与景的互动,理解以乐景写哀情的手法。",
+ "image_prompt": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。",
+ "video_prompt": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;按旁白节奏同步:0-4s:旁白“进入本段具体场景或动作”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头建立空间,主体轻微运动;4-8s:旁白“讲到本段核心意象或隐喻”时,画面呈现物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视,运动为镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、;8-11s:旁白“自然带出教学点并承接下一段”时,画面呈现画面收束到人物、物象或空间关系,运动为镜头放缓或转向下一段的视觉线索;本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。;本段衔接:index:3;continuity_goal:沿“以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。”推进,保持空间推进的段落作用。;transition_to_next:由本段的江枫渔火自然接到寒山古寺。",
+ "audio_text": "江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。",
+ "duration": 11,
+ "image_prompts": [
+ "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止分屏、多主体拼贴、字幕、题字、诗句书法、海报排版、现代物品;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人;统一视觉约束:era:中国古代语境;style:中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;main_location:以张继在客船上的深夜体验为主线,从难眠的孤寂起笔,视线由近及远扫过江面与岸边,最终被远处的钟声唤醒深层的家国之思,完成从景到情的自然升华。;recurring_subjects:唐代中年男子剪影,身着深色宽袖长袍,发髻束于头顶,侧身或背影,倚靠在客船船舷或船舱口,神情凝重,被夜色与雾气半遮半掩,无清晰正脸。;color_palette:低饱和、古代历史教育短片质感,色彩随诗歌情绪保持统一;lighting:自然光、月光、晨昏或灯火必须服务原诗意境;forbidden:模糊,低清晰度,低质量,主体不明确,噪声,文字,字幕,水印,变形,畸形,过曝,欠曝,现代服装,现代建筑,现代交通工具,汽车,电线,路灯,玻璃幕墙,塑料制品,现代文字标识,清晰正脸肖像,现代写真感;fallback_reason:grounding metadata generation failed: Expecting ',' delimiter: line 250 column 10 (char 8459);本段隐喻锚点:metaphor_nodes:[\"江枫渔火\"];visual_anchor:物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+;audio_anchor:根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。;motion_anchor:镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、;teaching_anchor:江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。"
+ ],
+ "grounding": {
+ "metaphor_nodes": [
+ "江枫渔火"
+ ],
+ "visual_anchor": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+",
+ "audio_anchor": "根据旁白语气保留环境静默、风声、水声、钟声或鸟鸣等诗歌声场线索。",
+ "motion_anchor": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、",
+ "teaching_anchor": "江边的枫树在风中静默,几盏渔火在江面上摇曳,暖光与冷夜形成鲜明对比。张继望着这点点灯火,却更觉孤独,因为那微弱的温暖,反而衬得他的愁绪更加浓重。"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "进入本段具体场景或动作",
+ "visual_cue": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视",
+ "motion_cue": "镜头建立空间,主体轻微运动"
+ },
+ {
+ "time_range": "4-8s",
+ "audio_cue": "讲到本段核心意象或隐喻",
+ "visual_cue": "物象+环境资产:江边几棵枫树剪影,枝叶稀疏,树下江面漂浮着几盏渔火,火光呈暖橙色,与冷蓝色江面形成对比,远处有客船轮廓,雾气缭绕,氛围清冷,无文字。;VACE参考资产图,不是最终视",
+ "motion_cue": "镜头从江边枫树剪影平移至江面渔火,暖橙色火光在冷蓝色江面上摇曳,远处客船轮廓静止,雾气在枫树与渔火间流动,形成冷暖对比,氛围清冷而静谧。;中国古代写实历史教育短片风格;服饰、发式、"
+ },
+ {
+ "time_range": "8-11s",
+ "audio_cue": "自然带出教学点并承接下一段",
+ "visual_cue": "画面收束到人物、物象或空间关系",
+ "motion_cue": "镜头放缓或转向下一段的视觉线索"
+ }
+ ]
+ },
+ "image_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/images/segment_03.png",
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_205814/videos/segment_03.mp4",
+ "reference_images": [],
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "wan_i2v_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Wan2.2-I2V-A14B",
+ "clip_seconds": 10,
+ "fps": 15,
+ "height": 480,
+ "width": 832,
+ "video_steps": 35,
+ "seed": 0
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..e86bb86688c4a4cef1d62f896a3ee936b53ed314
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.cosyvoice_request.json
@@ -0,0 +1,22 @@
+{
+ "segment": {
+ "index": 0,
+ "title": "intro_background",
+ "story_beat": "intro",
+ "teaching_goal": "introduce poem and original creation background",
+ "image_prompt": "",
+ "video_prompt": "",
+ "audio_text": "同学你好,今天我们要走近的是杜牧写的《赤壁》。这首诗是诗人经过赤壁(今湖北省武昌县西南赤矶山)这个著名的古战场,有感于三国时代的英雄成败而写下的。发生于汉献帝建安十三年(208年)十月的赤壁之战,是对三国鼎立的历史形势起着决定性作用的一次重大战役。其结果是孙、刘联军击败了曹军,而三十四岁的孙吴军统帅周瑜,乃是这次战役中的头号风云人物。诗人观赏了古战场的遗物,对赤壁之战发表了独特的看法,有感而作。",
+ "duration": 9,
+ "image_prompts": []
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.wav
new file mode 100644
index 0000000000000000000000000000000000000000..1ad5a9689c3aece6e5f6443225d12ff50aa8dd82
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/intro_background.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:bf9263653cc3e50cb36b95daad4c3cf49c28c79627e35ea8f202d029243eede4
+size 1873964
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..3c383bfc41f8181604fd712f0f7fd97f086cb8e4
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.cosyvoice_request.json
@@ -0,0 +1,25 @@
+{
+ "segment": {
+ "index": 1,
+ "title": "江岸拾遗",
+ "story_beat": "处境",
+ "teaching_goal": "结合创作背景,让学生理解杜牧身处赤壁古战场的具体情境,通过‘折戟’这一物象建立现实与历史的连接。",
+ "image_prompt": "环境资产:长江赤壁古战场江岸,黄昏时分,江面雾气弥漫,泥沙中半埋着一枚锈蚀的古代断戟,光线昏黄,色调苍凉,写实风格,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头从江面雾气缓缓下移,聚焦于泥沙中半埋的断戟,微风吹动芦苇,断戟表面锈迹在昏黄光线下闪烁,营造历史沉睡的氛围。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "杜牧站在赤壁的江岸边,脚下是千年的泥沙。他忽然发现,半埋着的断戟还在,铁锈虽厚,却未完全销蚀。这枚小小的兵器,成了连接他与三国风云的钥匙。",
+ "duration": 10,
+ "image_prompts": [
+ "环境资产:长江赤壁古战场江岸,黄昏时分,江面雾气弥漫,泥沙中半埋着一枚锈蚀的古代断戟,光线昏黄,色调苍凉,写实风格,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "物象+环境资产:特写一枚折断的古代铁戟,表面覆盖泥沙与锈迹,但刃口处隐约可见金属光泽,背景为模糊的江岸芦苇,强调历史沧桑感。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.wav
new file mode 100644
index 0000000000000000000000000000000000000000..0b80fe31b5bfa41f6e46e7d10113d1f1ed3d9248
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_01.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:df33d7e87e8168ee7241c7c3457a355a19b3b8dd98aeb75eac5858b9ffff6dc0
+size 681644
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..73e3d10e341cb7a973953d853781c5d8137d2aa8
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.cosyvoice_request.json
@@ -0,0 +1,25 @@
+{
+ "segment": {
+ "index": 2,
+ "title": "磨洗辨认",
+ "story_beat": "发现",
+ "teaching_goal": "通过‘磨洗’动作,引导学生体会杜牧对历史遗物的珍视,理解‘认前朝’背后的岁月流逝与物是人非之感。",
+ "image_prompt": "人物+环境资产:唐代文人剪影(深色长袍,幞头),蹲在江岸边,双手正用江水清洗一枚断戟,侧影被夕阳拉长,周围是枯黄的芦苇,氛围静谧。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头推进至唐代文人剪影蹲下的动作,双手捧起断戟,用江水轻轻冲洗,锈迹随水流滑落,露出金属光泽,动作缓慢而庄重。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "他蹲下身,用江水细细磨洗。锈迹一层层剥落,露出当年的锋芒。这一刻,他仿佛听见了战鼓声,看见了千军万马。这不仅是辨认一件古物,更是唤醒一段沉睡的历史。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代文人剪影(深色长袍,幞头),蹲在江岸边,双手正用江水清洗一枚断戟,侧影被夕阳拉长,周围是枯黄的芦苇,氛围静谧。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "物象资产:断戟在手中被磨洗,锈迹逐渐脱落,露出部分金属纹理,光线聚焦在戟身,背景虚化。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.wav
new file mode 100644
index 0000000000000000000000000000000000000000..249d522d90fe16f053dba6c18d887e3a019e700a
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_02.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:65e4e316c399537827a7cc0d173a018f588b5d143052eec4b1521b211595ec29
+size 704684
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..d71286bd7eb65249eadf270d1a06832d8ee7c810
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.cosyvoice_request.json
@@ -0,0 +1,25 @@
+{
+ "segment": {
+ "index": 3,
+ "title": "东风假想",
+ "story_beat": "转折",
+ "teaching_goal": "解析后两句的反面假想手法,让学生明白历史胜负的偶然性,理解‘东风’在战役中的关键作用。",
+ "image_prompt": "环境资产:赤壁江面,狂风大作,东南风呼啸,江面上隐约可见战船的火光与烟雾,色调由冷转暖,充满动感与张力,写实历史风格。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头从文人剪影的凝视方向拉远,江面突然风起云涌,战船火光与烟雾在风中翻滚,东南风呼啸而过,画面色调由冷转暖,展现历史瞬间的爆发力。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "如果那天没有东风相助,周瑜的火攻还能成功吗?杜牧的思绪飘向那个决定三国命运的瞬间。历史往往就系于一阵风,一次偶然,胜负便天翻地覆。",
+ "duration": 14,
+ "image_prompts": [
+ "环境资产:赤壁江面,狂风大作,东南风呼啸,江面上隐约可见战船的火光与烟雾,色调由冷转暖,充满动感与张力,写实历史风格。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "人物资产:唐代文人剪影伫立江边,衣袂被风吹起,凝视远方江面,仿佛看到历史重现,剪影清晰,无面部细节。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.wav
new file mode 100644
index 0000000000000000000000000000000000000000..80b0472998d240675100f9c826319c11cd7294eb
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_03.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:72d7d546425e6fff2dff96068e5d02ee1f67d6f094bc16f98c130ecfb6546d9c
+size 618284
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..b1de7fd7c324e9d51197860c19ce0e55efd47ba9
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.cosyvoice_request.json
@@ -0,0 +1,25 @@
+{
+ "segment": {
+ "index": 4,
+ "title": "铜雀深锁",
+ "story_beat": "回望",
+ "teaching_goal": "通过‘二乔被锁’的意象,具象化战争失败的后果,强化对国家存亡与社稷安危的深刻认知。",
+ "image_prompt": "环境资产:铜雀台远景,深春时节,楼台高耸,飞檐斗拱,周围柳色深浓,气氛幽深压抑,色调偏暗绿与灰,暗示囚禁与失落。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头切换至铜雀台远景,柳枝在风中摇曳,高墙内隐约可见女子身影被栏杆遮挡,春色深浓却无生机,镜头缓慢推进,强调‘锁’字的压抑感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "若无东风,曹操或许早已取胜,二乔将被锁进铜雀台深处。春色再美,也关不住亡国的哀愁。这假设背后,是对国家存亡的深切忧虑。",
+ "duration": 13,
+ "image_prompts": [
+ "环境资产:铜雀台远景,深春时节,楼台高耸,飞檐斗拱,周围柳色深浓,气氛幽深压抑,色调偏暗绿与灰,暗示囚禁与失落。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "物象+环境资产:铜雀台高墙内,隐约可见女子身影被栏杆遮挡,春色虽好却无生机,强调‘锁’字的沉重感。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.wav b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.wav
new file mode 100644
index 0000000000000000000000000000000000000000..72e13372f7f4f63f317060f73ab29bdcf6ed8594
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_04.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:2990b076d89387a3e65e12d4fbe345730b1d5e721803a48e4fc3f19fea8f2735
+size 558764
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_05.cosyvoice_request.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_05.cosyvoice_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..5ed7061ecac3d59b79bfd81c276dcba11dc9efcd
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_05.cosyvoice_request.json
@@ -0,0 +1,25 @@
+{
+ "segment": {
+ "index": 5,
+ "title": "借古抒怀",
+ "story_beat": "点题",
+ "teaching_goal": "揭示杜牧借咏史事吐露胸中抑郁不平之气的深层意图,连接历史成败与个人命运。",
+ "image_prompt": "人物+环境资产:唐代文人剪影独自坐在江岸岩石上,背影孤寂,面前是滔滔江水,手中握着洗净的断戟,暮色四合,情绪深沉。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头回到文人剪影,他独自坐在岩石上,手中握着洗净的断戟,暮色四合,江水静静流淌,剪影在冷灰色调中显得格外孤寂,情绪深沉。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "杜牧借这段历史,吐露自己胸中的郁结。他空有才华,却难遇明主,正如周瑜若无东风,纵有雄才也无处施展。历史的成败,映照出个人的无奈。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代文人剪影独自坐在江岸岩石上,背影孤寂,面前是滔滔江水,手中握着洗净的断戟,暮色四合,情绪深沉。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "环境资产:江面平静,倒映着残阳与孤舟,远处山峦起伏,色调转为冷灰,象征历史的冷静审视。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/audio/segment_05.wav",
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen",
+ "cosyvoice_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512",
+ "cosyvoice_repo": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice",
+ "prompt_wav": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/CosyVoice/asset/龙小夏_24k.wav",
+ "prompt_text": "我们都能为您提供最贴心的服务,只需简单的语音指令即可轻松完成操作,让科技真正服务于生活",
+ "overwrite": true
+ }
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_poem.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_poem.png
new file mode 100644
index 0000000000000000000000000000000000000000..d25d6b6de6736a3f221adf0d502a9f6b67683cd4
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_poem.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1957d602feb98223e8073eccfdf25aba15c076f4a7b7c135493f9c0876601722
+size 738002
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_title_author.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_title_author.png
new file mode 100644
index 0000000000000000000000000000000000000000..fac3239dbe40743c7082d660aa7105dc1f032354
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/intro_title_author.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:f8472010a9d35e96c1a063028d41083e4cac71ec8e2979ea22f897d47a057c25
+size 776275
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..2fee023e40e64e07018f3b23397b39feb920cf81
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:7f6f6268b1ec13fc971512fb6acb12deb37bb722b68615546bf97b88e5e62990
+size 937679
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01_asset_02.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01_asset_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..7ae47e5155083478d8f420541f1ae0e845a05cf4
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_01_asset_02.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c616943116bb1406ac038c0c30168efe45f96c9c2dca88c99618249963316f5a
+size 959180
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..7f8fe8de11480520851daeeebd52624b4227f2fa
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:652137f5203cedc64b52a30427194fa84d4ab7e71525d3ef79223079625242a7
+size 943300
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02_asset_02.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02_asset_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..91f312ca3304075434e76930f4fa99d972b72200
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_02_asset_02.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0b39cc8fccbf2d9d7ed5801ac833c131e9bad4516db878a10b43059615b58cc6
+size 850990
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03.png
new file mode 100644
index 0000000000000000000000000000000000000000..97b559112d65f53e1195d8372db97a302c1c1db3
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:983eab5c3f89a829cd144edf84494dc34ba5f533fd232d0c814a3839c3386d19
+size 931443
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03_asset_02.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03_asset_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..61ff61891b4232af261fc7746e3fe5e143cb91e5
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_03_asset_02.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:18cbbfc3d2794b21aa429ef153652ad00938af88419402f1068f00fac77bd09b
+size 762247
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04.png
new file mode 100644
index 0000000000000000000000000000000000000000..27107bd2b60e0038d3ffd380ea888d12f1f5695c
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3215f9c44f153a1aed54b02fcb59998700002c953176b3e37ab2077d0b993c40
+size 1100292
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04_asset_02.png b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04_asset_02.png
new file mode 100644
index 0000000000000000000000000000000000000000..cdd37ac4abe7dfb774a2813223a4b4de9b134a85
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/images/segment_04_asset_02.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:0dcdb82fe65a25fdb943f1f4901209cb333909a1b7205e03ae26d99ba53e59ad
+size 999059
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/intro/intro_metadata.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/intro/intro_metadata.json
new file mode 100644
index 0000000000000000000000000000000000000000..6ac59792c3889bf933280bd98436dccb2cc045cd
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/intro/intro_metadata.json
@@ -0,0 +1,11 @@
+{
+ "title": "赤壁",
+ "author": "杜牧",
+ "dynasty": "唐",
+ "poem_text": "折戟沉沙铁未销,自将磨洗认前朝。\n东风不与周郎便,铜雀春深锁二乔。",
+ "background": "这首诗是诗人经过赤壁(今湖北省武昌县西南赤矶山)这个著名的古战场,有感于三国时代的英雄成败而写下的。发生于汉献帝建安十三年(208年)十月的赤壁之战,是对三国鼎立的历史形势起着决定性作用的一次重大战役。其结果是孙、刘联军击败了曹军,而三十四岁的孙吴军统帅周瑜,乃是这次战役中的头号风云人物。诗人观赏了古战场的遗物,对赤壁之战发表了独特的看法,有感而作。",
+ "audio_text": "同学你好,今天我们要走近的是杜牧写的《赤壁》。这首诗是诗人经过赤壁(今湖北省武昌县西南赤矶山)这个著名的古战场,有感于三国时代的英雄成败而写下的。发生于汉献帝建安十三年(208年)十月的赤壁之战,是对三国鼎立的历史形势起着决定性作用的一次重大战役。其结果是孙、刘联军击败了曹军,而三十四岁的孙吴军统帅周瑜,乃是这次战役中的头号风云人物。诗人观赏了古战场的遗物,对赤壁之战发表了独特的看法,有感而作。",
+ "title_seconds": 3,
+ "poem_seconds": 37,
+ "audio_seconds": 39.04
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/muxed/intro.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/muxed/intro.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..f5015a880da2e8ec27aff0c3f24d67210ec9853d
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/muxed/intro.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c09c45be03afe0ddfe58a8642ce26cbb75689f92a07e79bf8a172a8ccf61d016
+size 685742
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/plan.json b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/plan.json
new file mode 100644
index 0000000000000000000000000000000000000000..1f65dd29afe4ebef4a62952b0f72a9c3713dd975
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/plan.json
@@ -0,0 +1,99 @@
+{
+ "poem_title": "赤壁",
+ "author": "杜牧",
+ "narrative_mode": "怀古",
+ "storyline": "从江边拾得断戟的微小瞬间切入,通过磨洗辨认引发对赤壁之战的历史回溯,进而展开‘若无东风’的假设性推演,最后回归现实,点出杜牧借史事抒发个人壮志难酬的郁结。",
+ "recurring_character_style": "唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。",
+ "appreciation": "这首诗属于怀古诗,核心在于“即物感兴”与“反面假想”。杜牧经过赤壁古战场,从泥沙中拾得一枚未锈尽的断戟,这一微小物象瞬间打通了现实与历史的通道。前两句写“发现”,后两句写“联想”。教学主线不应是逐句翻译,而应沿着“拾物—磨洗—联想—反讽—感慨”的心理与空间线索推进:从眼前残破的兵器,推演到当年决定三国格局的赤壁之战,再假设若无东风相助的另一种历史结局,最后落脚于杜牧借古讽今、抒发怀才不遇的深沉感慨。视觉风格需保持唐代写实质感,强调历史沧桑感与人物剪影的含蓄,避免现代元素与卡通化。核心情绪是苍凉中带着锐利的历史洞察,声音设计需配合从静谧的江边到宏大的历史想象再回归现实的层次变化。",
+ "plan4teach": "{\"poem_title\":\"赤壁\",\"author\":\"杜牧\",\"narrative_mode\":\"怀古\",\"storyline\":\"从江边拾得断戟的微小瞬间切入,通过磨洗辨认引发对赤壁之战的历史回溯,进而展开‘若无东风’的假设性推演,最后回归现实,点出杜牧借史事抒发个人壮志难酬的郁结。\",\"recurring_character_style\":\"唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。\",\"segments\":[{\"index\":1,\"title\":\"江岸拾遗\",\"story_beat\":\"处境\",\"teaching_goal\":\"结合创作背景,让学生理解杜牧身处赤壁古战场的具体情境,通过‘折戟’这一物象建立现实与历史的连接。\",\"duration\":10},{\"index\":2,\"title\":\"磨洗辨认\",\"story_beat\":\"发现\",\"teaching_goal\":\"通过‘磨洗’动作,引导学生体会诗人对历史遗物的珍视,理解‘认前朝’背后的岁月流逝与物是人非之感。\",\"duration\":12},{\"index\":3,\"title\":\"东风假想\",\"story_beat\":\"转折\",\"teaching_goal\":\"解析后两句的反面假想手法,让学生明白历史胜负的偶然性,理解‘东风’在战役中的关键作用。\",\"duration\":14},{\"index\":4,\"title\":\"铜雀深锁\",\"story_beat\":\"回望\",\"teaching_goal\":\"通过‘二乔被锁’的意象,具象化战争失败的后果,强化对国家存亡与社稷安危的深刻认知。\",\"duration\":13},{\"index\":5,\"title\":\"借古抒怀\",\"story_beat\":\"点题\",\"teaching_goal\":\"揭示杜牧借咏史事吐露胸中抑郁不平之气的深层意图,连接历史成败与个人命运。\",\"duration\":12},{\"index\":6,\"title\":\"余音绕梁\",\"story_beat\":\"收束\",\"teaching_goal\":\"总结全诗‘即物感兴’与‘反面假想’的写法妙处,自然带出杜牧作为唐代诗人的身份,完成教学闭环。\",\"duration\":11}]}",
+ "plan4img": "{\"segments\":[{\"index\":1,\"image_prompts\":[\"环境资产:长江赤壁古战场江岸,黄昏时分,江面雾气弥漫,泥沙中半埋着一枚锈蚀的古代断戟,光线昏黄,色调苍凉,写实风格,无文字。\",\"物象+环境资产:特写一枚折断的古代铁戟,表面覆盖泥沙与锈迹,但刃口处隐约可见金属光泽,背景为模糊的江岸芦苇,强调历史沧桑感。\"]},{\"index\":2,\"image_prompts\":[\"人物+环境资产:唐代文人剪影(深色长袍,幞头),蹲在江岸边,双手正用江水清洗一枚断戟,侧影被夕阳拉长,周围是枯黄的芦苇,氛围静谧。\",\"物象资产:断戟在手中被磨洗,锈迹逐渐脱落,露出部分金属纹理,光线聚焦在戟身,背景虚化。\"]},{\"index\":3,\"image_prompts\":[\"环境资产:赤壁江面,狂风大作,东南风呼啸,江面上隐约可见战船的火光与烟雾,色调由冷转暖,充满动感与张力,写实历史风格。\",\"人物资产:唐代文人剪影伫立江边,衣袂被风吹起,凝视远方江面,仿佛看到历史重现,剪影清晰,无面部细节。\"]},{\"index\":4,\"image_prompts\":[\"环境资产:铜雀台远景,深春时节,楼台高耸,飞檐斗拱,周围柳色深浓,气氛幽深压抑,色调偏暗绿与灰,暗示囚禁与失落。\",\"物象+环境资产:铜雀台高墙内,隐约可见女子身影被栏杆遮挡,春色虽好却无生机,强调‘锁’字的沉重感。\"]},{\"index\":5,\"image_prompts\":[\"人物+环境资产:唐代文人剪影独自坐在江岸岩石上,背影孤寂,面前是滔滔江水,手中握着洗净的断戟,暮色四合,情绪深沉。\",\"环境资产:江面平静,倒映着残阳与孤舟,远处山峦起伏,色调转为冷灰,象征历史的冷静审视。\"]},{\"index\":6,\"image_prompts\":[\"人物资产:唐代文人剪影(与之前一致),站在江边回望,手中断戟已收起,身形融入暮色,只留一个坚定的轮廓,象征思考后的释然。\",\"环境资产:赤壁江岸全景,夕阳西下,江水东流,断戟已不见,只余自然景色,寓意历史归于平静。\"]}]}",
+ "plan4video": "{\"segments\":[{\"index\":1,\"video_prompt\":\"镜头从江面雾气缓缓下移,聚焦于泥沙中半埋的断戟,微风吹动芦苇,断戟表面锈迹在昏黄光线下闪烁,营造历史沉睡的氛围。\"},{\"index\":2,\"video_prompt\":\"镜头推进至唐代文人剪影蹲下的动作,双手捧起断戟,用江水轻轻冲洗,锈迹随水流滑落,露出金属光泽,动作缓慢而庄重。\"},{\"index\":3,\"video_prompt\":\"镜头从文人剪影的凝视方向拉远,江面突然风起云涌,战船火光与烟雾在风中翻滚,东南风呼啸而过,画面色调由冷转暖,展现历史瞬间的爆发力。\"},{\"index\":4,\"video_prompt\":\"镜头切换至铜雀台远景,柳枝在风中摇曳,高墙内隐约可见女子身影被栏杆遮挡,春色深浓却无生机,镜头缓慢推进,强调‘锁’字的压抑感。\"},{\"index\":5,\"video_prompt\":\"镜头回到文人剪影,他独自坐在岩石上,手中握着洗净的断戟,暮色四合,江水静静流淌,剪影在冷灰色调中显得格外孤寂,情绪深沉。\"},{\"index\":6,\"video_prompt\":\"镜头从文人剪影的背影缓缓拉远,他转身融入暮色,手中断戟已收起,江面平静,夕阳西下,江水东流,历史归于平静,画面渐暗。\"}]}",
+ "plan4audio": "{\"segments\":[{\"index\":1,\"audio_text\":\"杜牧站在赤壁的江岸边,脚下是千年的泥沙。他忽然发现,半埋着的断戟还在,铁锈虽厚,却未完全销蚀。这枚小小的兵器,成了连接他与三国风云的钥匙。\"},{\"index\":2,\"audio_text\":\"他蹲下身,用江水细细磨洗。锈迹一层层剥落,露出当年的锋芒。这一刻,他仿佛听见了战鼓声,看见了千军万马。这不仅是辨认一件古物,更是唤醒一段沉睡的历史。\"},{\"index\":3,\"audio_text\":\"如果那天没有东风相助,周瑜的火攻还能成功吗?杜牧的思绪飘向那个决定三国命运的瞬间。历史往往就系于一阵风,一次偶然,胜负便天翻地覆。\"},{\"index\":4,\"audio_text\":\"若无东风,曹操或许早已取胜,二乔将被锁进铜雀台深处。春色再美,也关不住亡国的哀愁。这假设背后,是对国家存亡的深切忧虑。\"},{\"index\":5,\"audio_text\":\"杜牧借这段历史,吐露自己胸中的郁结。他空有才华,却难遇明主,正如周瑜若无东风,纵有雄才也无处施展。历史的成败,映照出个人的无奈。\"},{\"index\":6,\"audio_text\":\"读到这里,要记住:杜牧不是单纯怀古,而是借物抒怀。他通过一枚断戟,把历史的偶然与个人的命运紧紧相连。杜牧,唐代诗人,以咏史见长,字字皆含深意。\"}]}",
+ "segments": [
+ {
+ "index": 1,
+ "title": "江岸拾遗",
+ "story_beat": "处境",
+ "teaching_goal": "结合创作背景,让学生理解杜牧身处赤壁古战场的具体情境,通过‘折戟’这一物象建立现实与历史的连接。",
+ "image_prompt": "环境资产:长江赤壁古战场江岸,黄昏时分,江面雾气弥漫,泥沙中半埋着一枚锈蚀的古代断戟,光线昏黄,色调苍凉,写实风格,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头从江面雾气缓缓下移,聚焦于泥沙中半埋的断戟,微风吹动芦苇,断戟表面锈迹在昏黄光线下闪烁,营造历史沉睡的氛围。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "杜牧站在赤壁的江岸边,脚下是千年的泥沙。他忽然发现,半埋着的断戟还在,铁锈虽厚,却未完全销蚀。这枚小小的兵器,成了连接他与三国风云的钥匙。",
+ "duration": 10,
+ "image_prompts": [
+ "环境资产:长江赤壁古战场江岸,黄昏时分,江面雾气弥漫,泥沙中半埋着一枚锈蚀的古代断戟,光线昏黄,色调苍凉,写实风格,无文字。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "物象+环境资产:特写一枚折断的古代铁戟,表面覆盖泥沙与锈迹,但刃口处隐约可见金属光泽,背景为模糊的江岸芦苇,强调历史沧桑感。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ {
+ "index": 2,
+ "title": "磨洗辨认",
+ "story_beat": "发现",
+ "teaching_goal": "通过‘磨洗’动作,引导学生体会杜牧对历史遗物的珍视,理解‘认前朝’背后的岁月流逝与物是人非之感。",
+ "image_prompt": "人物+环境资产:唐代文人剪影(深色长袍,幞头),蹲在江岸边,双手正用江水清洗一枚断戟,侧影被夕阳拉长,周围是枯黄的芦苇,氛围静谧。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头推进至唐代文人剪影蹲下的动作,双手捧起断戟,用江水轻轻冲洗,锈迹随水流滑落,露出金属光泽,动作缓慢而庄重。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "他蹲下身,用江水细细磨洗。锈迹一层层剥落,露出当年的锋芒。这一刻,他仿佛听见了战鼓声,看见了千军万马。这不仅是辨认一件古物,更是唤醒一段沉睡的历史。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代文人剪影(深色长袍,幞头),蹲在江岸边,双手正用江水清洗一枚断戟,侧影被夕阳拉长,周围是枯黄的芦苇,氛围静谧。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "物象资产:断戟在手中被磨洗,锈迹逐渐脱落,露出部分金属纹理,光线聚焦在戟身,背景虚化。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ {
+ "index": 3,
+ "title": "东风假想",
+ "story_beat": "转折",
+ "teaching_goal": "解析后两句的反面假想手法,让学生明白历史胜负的偶然性,理解‘东风’在战役中的关键作用。",
+ "image_prompt": "环境资产:赤壁江面,狂风大作,东南风呼啸,江面上隐约可见战船的火光与烟雾,色调由冷转暖,充满动感与张力,写实历史风格。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头从文人剪影的凝视方向拉远,江面突然风起云涌,战船火光与烟雾在风中翻滚,东南风呼啸而过,画面色调由冷转暖,展现历史瞬间的爆发力。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "如果那天没有东风相助,周瑜的火攻还能成功吗?杜牧的思绪飘向那个决定三国命运的瞬间。历史往往就系于一阵风,一次偶然,胜负便天翻地覆。",
+ "duration": 14,
+ "image_prompts": [
+ "环境资产:赤壁江面,狂风大作,东南风呼啸,江面上隐约可见战船的火光与烟雾,色调由冷转暖,充满动感与张力,写实历史风格。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "人物资产:唐代文人剪影伫立江边,衣袂被风吹起,凝视远方江面,仿佛看到历史重现,剪影清晰,无面部细节。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ {
+ "index": 4,
+ "title": "铜雀深锁",
+ "story_beat": "回望",
+ "teaching_goal": "通过‘二乔被锁’的意象,具象化战争失败的后果,强化对国家存亡与社稷安危的深刻认知。",
+ "image_prompt": "环境资产:铜雀台远景,深春时节,楼台高耸,飞檐斗拱,周围柳色深浓,气氛幽深压抑,色调偏暗绿与灰,暗示囚禁与失落。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头切换至铜雀台远景,柳枝在风中摇曳,高墙内隐约可见女子身影被栏杆遮挡,春色深浓却无生机,镜头缓慢推进,强调‘锁’字的压抑感。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "若无东风,曹操或许早已取胜,二乔将被锁进铜雀台深处。春色再美,也关不住亡国的哀愁。这假设背后,是对国家存亡的深切忧虑。",
+ "duration": 13,
+ "image_prompts": [
+ "环境资产:铜雀台远景,深春时节,楼台高耸,飞檐斗拱,周围柳色深浓,气氛幽深压抑,色调偏暗绿与灰,暗示囚禁与失落。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "物象+环境资产:铜雀台高墙内,隐约可见女子身影被栏杆遮挡,春色虽好却无生机,强调‘锁’字的沉重感。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ {
+ "index": 5,
+ "title": "借古抒怀",
+ "story_beat": "点题",
+ "teaching_goal": "揭示杜牧借咏史事吐露胸中抑郁不平之气的深层意图,连接历史成败与个人命运。",
+ "image_prompt": "人物+环境资产:唐代文人剪影独自坐在江岸岩石上,背影孤寂,面前是滔滔江水,手中握着洗净的断戟,暮色四合,情绪深沉。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头回到文人剪影,他独自坐在岩石上,手中握着洗净的断戟,暮色四合,江水静静流淌,剪影在冷灰色调中显得格外孤寂,情绪深沉。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "杜牧借这段历史,吐露自己胸中的郁结。他空有才华,却难遇明主,正如周瑜若无东风,纵有雄才也无处施展。历史的成败,映照出个人的无奈。",
+ "duration": 12,
+ "image_prompts": [
+ "人物+环境资产:唐代文人剪影独自坐在江岸岩石上,背影孤寂,面前是滔滔江水,手中握着洗净的断戟,暮色四合,情绪深沉。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "环境资产:江面平静,倒映着残阳与孤舟,远处山峦起伏,色调转为冷灰,象征历史的冷静审视。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ },
+ {
+ "index": 6,
+ "title": "余音绕梁",
+ "story_beat": "收束",
+ "teaching_goal": "总结全诗‘即物感兴’与‘反面假想’的写法妙处,自然带出杜牧作为唐代诗人的身份,完成教学闭环。",
+ "image_prompt": "人物资产:唐代文人剪影(与之前一致),站在江边回望,手中断戟已收起,身形融入暮色,只留一个坚定的轮廓,象征思考后的释然。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "video_prompt": "镜头从文人剪影的背影缓缓拉远,他转身融入暮色,手中断戟已收起,江面平静,夕阳西下,江水东流,历史归于平静,画面渐暗。;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "audio_text": "读到这里,要记住:杜牧不是单纯怀古,而是借物抒怀。他通过一枚断戟,把历史的偶然与个人的命运紧紧相连。杜牧,唐代诗人,以咏史见长,字字皆含深意。",
+ "duration": 11,
+ "image_prompts": [
+ "人物资产:唐代文人剪影(与之前一致),站在江边回望,手中断戟已收起,身形融入暮色,只留一个坚定的轮廓,象征思考后的释然。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人",
+ "环境资产:赤壁江岸全景,夕阳西下,江水东流,断戟已不见,只余自然景色,寓意历史归于平静。;VACE参考资产图,不是最终视频截图或PPT插图;必须先选择一个资产类型:人物资产、环境资产、物象/器物资产、人物+环境资产或物象+环境资产;资产选择优先级:旁白核心是人物处境、动作或心理时优先人物资产或人物+环境资产;核心是地点、季节、天气、空间和氛围时优先环境资产;核心是诗中物象、器物或声音来源时优先物象/器物资产或物象+环境资产;每段只锁定一个最重要的视觉锚点,构图稳定、轮廓明确、景深自然、留有少量环境边界,便于后续视频模型保持参考一致性;禁止文字、标题、诗句、字幕、分镜编号、拼贴、多宫格、海报排版、镜头运动文字说明;中国古代写实历史教育短片风格;服饰、发式、建筑、器物、船只、灯具、道路、环境都必须符合中国古代语境;禁止现代服装、现代建筑、现代交通工具、电线、路灯、玻璃幕墙、塑料制品、现代文字标识;同一人物形象必须保持一致:唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。;如画面出现人物,人物必须为中国古代人物剪影、背影剪影或侧影剪影;不露正脸,无清晰五官,不得出现现代写真感或清晰肖像;没有人物需求时不要强行加人"
+ ]
+ }
+ ],
+ "raw_response": "\n这首诗属于怀古诗,核心在于“即物感兴”与“反面假想”。杜牧经过赤壁古战场,从泥沙中拾得一枚未锈尽的断戟,这一微小物象瞬间打通了现实与历史的通道。前两句写“发现”,后两句写“联想”。教学主线不应是逐句翻译,而应沿着“拾物—磨洗—联想—反讽—感慨”的心理与空间线索推进:从眼前残破的兵器,推演到当年决定三国格局的赤壁之战,再假设若无东风相助的另一种历史结局,最后落脚于杜牧借古讽今、抒发怀才不遇的深沉感慨。视觉风格需保持唐代写实质感,强调历史沧桑感与人物剪影的含蓄,避免现代元素与卡通化。核心情绪是苍凉中带着锐利的历史洞察,声音设计需配合从静谧的江边到宏大的历史想象再回归现实的层次变化。\n \n\n{\"poem_title\":\"赤壁\",\"author\":\"杜牧\",\"narrative_mode\":\"怀古\",\"storyline\":\"从江边拾得断戟的微小瞬间切入,通过磨洗辨认引发对赤壁之战的历史回溯,进而展开‘若无东风’的假设性推演,最后回归现实,点出杜牧借史事抒发个人壮志难酬的郁结。\",\"recurring_character_style\":\"唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。\",\"segments\":[{\"index\":1,\"title\":\"江岸拾遗\",\"story_beat\":\"处境\",\"teaching_goal\":\"结合创作背景,让学生理解杜牧身处赤壁古战场的具体情境,通过‘折戟’这一物象建立现实与历史的连接。\",\"duration\":10},{\"index\":2,\"title\":\"磨洗辨认\",\"story_beat\":\"发现\",\"teaching_goal\":\"通过‘磨洗’动作,引导学生体会诗人对历史遗物的珍视,理解‘认前朝’背后的岁月流逝与物是人非之感。\",\"duration\":12},{\"index\":3,\"title\":\"东风假想\",\"story_beat\":\"转折\",\"teaching_goal\":\"解析后两句的反面假想手法,让学生明白历史胜负的偶然性,理解‘东风’在战役中的关键作用。\",\"duration\":14},{\"index\":4,\"title\":\"铜雀深锁\",\"story_beat\":\"回望\",\"teaching_goal\":\"通过‘二乔被锁’的意象,具象化战争失败的后果,强化对国家存亡与社稷安危的深刻认知。\",\"duration\":13},{\"index\":5,\"title\":\"借古抒怀\",\"story_beat\":\"点题\",\"teaching_goal\":\"揭示杜牧借咏史事吐露胸中抑郁不平之气的深层意图,连接历史成败与个人命运。\",\"duration\":12},{\"index\":6,\"title\":\"余音绕梁\",\"story_beat\":\"收束\",\"teaching_goal\":\"总结全诗‘即物感兴’与‘反面假想’的写法妙处,自然带出杜牧作为唐代诗人的身份,完成教学闭环。\",\"duration\":11}]}\n \n\n{\"segments\":[{\"index\":1,\"image_prompts\":[\"环境资产:长江赤壁古战场江岸,黄昏时分,江面雾气弥漫,泥沙中半埋着一枚锈蚀的古代断戟,光线昏黄,色调苍凉,写实风格,无文字。\",\"物象+环境资产:特写一枚折断的古代铁戟,表面覆盖泥沙与锈迹,但刃口处隐约可见金属光泽,背景为模糊的江岸芦苇,强调历史沧桑感。\"]},{\"index\":2,\"image_prompts\":[\"人物+环境资产:唐代文人剪影(深色长袍,幞头),蹲在江岸边,双手正用江水清洗一枚断戟,侧影被夕阳拉长,周围是枯黄的芦苇,氛围静谧。\",\"物象资产:断戟在手中被磨洗,锈迹逐渐脱落,露出部分金属纹理,光线聚焦在戟身,背景虚化。\"]},{\"index\":3,\"image_prompts\":[\"环境资产:赤壁江面,狂风大作,东南风呼啸,江面上隐约可见战船的火光与烟雾,色调由冷转暖,充满动感与张力,写实历史风格。\",\"人物资产:唐代文人剪影伫立江边,衣袂被风吹起,凝视远方江面,仿佛看到历史重现,剪影清晰,无面部细节。\"]},{\"index\":4,\"image_prompts\":[\"环境资产:铜雀台远景,深春时节,楼台高耸,飞檐斗拱,周围柳色深浓,气氛幽深压抑,色调偏暗绿与灰,暗示囚禁与失落。\",\"物象+环境资产:铜雀台高墙内,隐约可见女子身影被栏杆遮挡,春色虽好却无生机,强调‘锁’字的沉重感。\"]},{\"index\":5,\"image_prompts\":[\"人物+环境资产:唐代文人剪影独自坐在江岸岩石上,背影孤寂,面前是滔滔江水,手中握着洗净的断戟,暮色四合,情绪深沉。\",\"环境资产:江面平静,倒映着残阳与孤舟,远处山峦起伏,色调转为冷灰,象征历史的冷静审视。\"]},{\"index\":6,\"image_prompts\":[\"人物资产:唐代文人剪影(与之前一致),站在江边回望,手中断戟已收起,身形融入暮色,只留一个坚定的轮廓,象征思考后的释然。\",\"环境资产:赤壁江岸全景,夕阳西下,江水东流,断戟已不见,只余自然景色,寓意历史归于平静。\"]}]}\n \n\n{\"segments\":[{\"index\":1,\"video_prompt\":\"镜头从江面雾气缓缓下移,聚焦于泥沙中半埋的断戟,微风吹动芦苇,断戟表面锈迹在昏黄光线下闪烁,营造历史沉睡的氛围。\"},{\"index\":2,\"video_prompt\":\"镜头推进至唐代文人剪影蹲下的动作,双手捧起断戟,用江水轻轻冲洗,锈迹随水流滑落,露出金属光泽,动作缓慢而庄重。\"},{\"index\":3,\"video_prompt\":\"镜头从文人剪影的凝视方向拉远,江面突然风起云涌,战船火光与烟雾在风中翻滚,东南风呼啸而过,画面色调由冷转暖,展现历史瞬间的爆发力。\"},{\"index\":4,\"video_prompt\":\"镜头切换至铜雀台远景,柳枝在风中摇曳,高墙内隐约可见女子身影被栏杆遮挡,春色深浓却无生机,镜头缓慢推进,强调‘锁’字的压抑感。\"},{\"index\":5,\"video_prompt\":\"镜头回到文人剪影,他独自坐在岩石上,手中握着洗净的断戟,暮色四合,江水静静流淌,剪影在冷灰色调中显得格外孤寂,情绪深沉。\"},{\"index\":6,\"video_prompt\":\"镜头从文人剪影的背影缓缓拉远,他转身融入暮色,手中断戟已收起,江面平静,夕阳西下,江水东流,历史归于平静,画面渐暗。\"}]}\n \n\n{\"segments\":[{\"index\":1,\"audio_text\":\"杜牧站在赤壁的江岸边,脚下是千年的泥沙。他忽然发现,半埋着的断戟还在,铁锈虽厚,却未完全销蚀。这枚小小的兵器,成了连接他与三国风云的钥匙。\"},{\"index\":2,\"audio_text\":\"他蹲下身,用江水细细磨洗。锈迹一层层剥落,露出当年的锋芒。这一刻,他仿佛听见了战鼓声,看见了千军万马。这不仅是辨认一件古物,更是唤醒一段沉睡的历史。\"},{\"index\":3,\"audio_text\":\"如果那天没有东风相助,周瑜的火攻还能成功吗?杜牧的思绪飘向那个决定三国命运的瞬间。历史往往就系于一阵风,一次偶然,胜负便天翻地覆。\"},{\"index\":4,\"audio_text\":\"若无东风,曹操或许早已取胜,二乔将被锁进铜雀台深处。春色再美,也关不住亡国的哀愁。这假设背后,是对国家存亡的深切忧虑。\"},{\"index\":5,\"audio_text\":\"杜牧借这段历史,吐露自己胸中的郁结。他空有才华,却难遇明主,正如周瑜若无东风,纵有雄才也无处施展。历史的成败,映照出个人的无奈。\"},{\"index\":6,\"audio_text\":\"读到这里,要记住:杜牧不是单纯怀古,而是借物抒怀。他通过一枚断戟,把历史的偶然与个人的命运紧紧相连。杜牧,唐代诗人,以咏史见长,字字皆含深意。\"}]}\n "
+}
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/plan_tagged.txt b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/plan_tagged.txt
new file mode 100644
index 0000000000000000000000000000000000000000..4ffa0b137d2be4deade261e06e2dfaa2a4857ef4
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/plan_tagged.txt
@@ -0,0 +1,15 @@
+
+这首诗属于怀古诗,核心在于“即物感兴”与“反面假想”。杜牧经过赤壁古战场,从泥沙中拾得一枚未锈尽的断戟,这一微小物象瞬间打通了现实与历史的通道。前两句写“发现”,后两句写“联想”。教学主线不应是逐句翻译,而应沿着“拾物—磨洗—联想—反讽—感慨”的心理与空间线索推进:从眼前残破的兵器,推演到当年决定三国格局的赤壁之战,再假设若无东风相助的另一种历史结局,最后落脚于杜牧借古讽今、抒发怀才不遇的深沉感慨。视觉风格需保持唐代写实质感,强调历史沧桑感与人物剪影的含蓄,避免现代元素与卡通化。核心情绪是苍凉中带着锐利的历史洞察,声音设计需配合从静谧的江边到宏大的历史想象再回归现实的层次变化。
+
+
+{"poem_title":"赤壁","author":"杜牧","narrative_mode":"怀古","storyline":"从江边拾得断戟的微小瞬间切入,通过磨洗辨认引发对赤壁之战的历史回溯,进而展开‘若无东风’的假设性推演,最后回归现实,点出杜牧借史事抒发个人壮志难酬的郁结。","recurring_character_style":"唐代文人剪影:身着深色宽袖长袍,头戴软脚幞头,身形清瘦,以背影或侧影呈现,常处于江岸或古战场遗迹旁,被雾气或芦苇半遮挡。","segments":[{"index":1,"title":"江岸拾遗","story_beat":"处境","teaching_goal":"结合创作背景,让学生理解杜牧身处赤壁古战场的具体情境,通过‘折戟’这一物象建立现实与历史的连接。","duration":10},{"index":2,"title":"磨洗辨认","story_beat":"发现","teaching_goal":"通过‘磨洗’动作,引导学生体会诗人对历史遗物的珍视,理解‘认前朝’背后的岁月流逝与物是人非之感。","duration":12},{"index":3,"title":"东风假想","story_beat":"转折","teaching_goal":"解析后两句的反面假想手法,让学生明白历史胜负的偶然性,理解‘东风’在战役中的关键作用。","duration":14},{"index":4,"title":"铜雀深锁","story_beat":"回望","teaching_goal":"通过‘二乔被锁’的意象,具象化战争失败的后果,强化对国家存亡与社稷安危的深刻认知。","duration":13},{"index":5,"title":"借古抒怀","story_beat":"点题","teaching_goal":"揭示杜牧借咏史事吐露胸中抑郁不平之气的深层意图,连接历史成败与个人命运。","duration":12},{"index":6,"title":"余音绕梁","story_beat":"收束","teaching_goal":"总结全诗‘即物感兴’与‘反面假想’的写法妙处,自然带出杜牧作为唐代诗人的身份,完成教学闭环。","duration":11}]}
+
+
+{"segments":[{"index":1,"image_prompts":["环境资产:长江赤壁古战场江岸,黄昏时分,江面雾气弥漫,泥沙中半埋着一枚锈蚀的古代断戟,光线昏黄,色调苍凉,写实风格,无文字。","物象+环境资产:特写一枚折断的古代铁戟,表面覆盖泥沙与锈迹,但刃口处隐约可见金属光泽,背景为模糊的江岸芦苇,强调历史沧桑感。"]},{"index":2,"image_prompts":["人物+环境资产:唐代文人剪影(深色长袍,幞头),蹲在江岸边,双手正用江水清洗一枚断戟,侧影被夕阳拉长,周围是枯黄的芦苇,氛围静谧。","物象资产:断戟在手中被磨洗,锈迹逐渐脱落,露出部分金属纹理,光线聚焦在戟身,背景虚化。"]},{"index":3,"image_prompts":["环境资产:赤壁江面,狂风大作,东南风呼啸,江面上隐约可见战船的火光与烟雾,色调由冷转暖,充满动感与张力,写实历史风格。","人物资产:唐代文人剪影伫立江边,衣袂被风吹起,凝视远方江面,仿佛看到历史重现,剪影清晰,无面部细节。"]},{"index":4,"image_prompts":["环境资产:铜雀台远景,深春时节,楼台高耸,飞檐斗拱,周围柳色深浓,气氛幽深压抑,色调偏暗绿与灰,暗示囚禁与失落。","物象+环境资产:铜雀台高墙内,隐约可见女子身影被栏杆遮挡,春色虽好却无生机,强调‘锁’字的沉重感。"]},{"index":5,"image_prompts":["人物+环境资产:唐代文人剪影独自坐在江岸岩石上,背影孤寂,面前是滔滔江水,手中握着洗净的断戟,暮色四合,情绪深沉。","环境资产:江面平静,倒映着残阳与孤舟,远处山峦起伏,色调转为冷灰,象征历史的冷静审视。"]},{"index":6,"image_prompts":["人物资产:唐代文人剪影(与之前一致),站在江边回望,手中断戟已收起,身形融入暮色,只留一个坚定的轮廓,象征思考后的释然。","环境资产:赤壁江岸全景,夕阳西下,江水东流,断戟已不见,只余自然景色,寓意历史归于平静。"]}]}
+
+
+{"segments":[{"index":1,"video_prompt":"镜头从江面雾气缓缓下移,聚焦于泥沙中半埋的断戟,微风吹动芦苇,断戟表面锈迹在昏黄光线下闪烁,营造历史沉睡的氛围。"},{"index":2,"video_prompt":"镜头推进至唐代文人剪影蹲下的动作,双手捧起断戟,用江水轻轻冲洗,锈迹随水流滑落,露出金属光泽,动作缓慢而庄重。"},{"index":3,"video_prompt":"镜头从文人剪影的凝视方向拉远,江面突然风起云涌,战船火光与烟雾在风中翻滚,东南风呼啸而过,画面色调由冷转暖,展现历史瞬间的爆发力。"},{"index":4,"video_prompt":"镜头切换至铜雀台远景,柳枝在风中摇曳,高墙内隐约可见女子身影被栏杆遮挡,春色深浓却无生机,镜头缓慢推进,强调‘锁’字的压抑感。"},{"index":5,"video_prompt":"镜头回到文人剪影,他独自坐在岩石上,手中握着洗净的断戟,暮色四合,江水静静流淌,剪影在冷灰色调中显得格外孤寂,情绪深沉。"},{"index":6,"video_prompt":"镜头从文人剪影的背影缓缓拉远,他转身融入暮色,手中断戟已收起,江面平静,夕阳西下,江水东流,历史归于平静,画面渐暗。"}]}
+
+
+{"segments":[{"index":1,"audio_text":"杜牧站在赤壁的江岸边,脚下是千年的泥沙。他忽然发现,半埋着的断戟还在,铁锈虽厚,却未完全销蚀。这枚小小的兵器,成了连接他与三国风云的钥匙。"},{"index":2,"audio_text":"他蹲下身,用江水细细磨洗。锈迹一层层剥落,露出当年的锋芒。这一刻,他仿佛听见了战鼓声,看见了千军万马。这不仅是辨认一件古物,更是唤醒一段沉睡的历史。"},{"index":3,"audio_text":"如果那天没有东风相助,周瑜的火攻还能成功吗?杜牧的思绪飘向那个决定三国命运的瞬间。历史往往就系于一阵风,一次偶然,胜负便天翻地覆。"},{"index":4,"audio_text":"若无东风,曹操或许早已取胜,二乔将被锁进铜雀台深处。春色再美,也关不住亡国的哀愁。这假设背后,是对国家存亡的深切忧虑。"},{"index":5,"audio_text":"杜牧借这段历史,吐露自己胸中的郁结。他空有才华,却难遇明主,正如周瑜若无东风,纵有雄才也无处施展。历史的成败,映照出个人的无奈。"},{"index":6,"audio_text":"读到这里,要记住:杜牧不是单纯怀古,而是借物抒怀。他通过一枚断戟,把历史的偶然与个人的命运紧紧相连。杜牧,唐代诗人,以咏史见长,字字皆含深意。"}]}
+
\ No newline at end of file
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/concat_list.txt b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/concat_list.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a2dadb538f0517903eb0c2674d3549fc965b4fed
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/concat_list.txt
@@ -0,0 +1,2 @@
+file '/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_title_author.mp4'
+file '/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_poem.mp4'
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_poem.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_poem.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..a14e5c1501c1b11a56a5bb13139e0b4ff7840ebd
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_poem.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:1d99b35c6bd5c2115dc6d9621bb09fd9ed4b5c6c2347c06cac4bb5288eca6238
+size 265070
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_silent.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_silent.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..97903dfcf9c28c5d1f7e0b2c28526ba4c2717c25
--- /dev/null
+++ b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_silent.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:e8935a56855472b0be77207b543e8da7bdedfada3107bf24bcd9fab37df7f175
+size 304969
diff --git a/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_title_author.mp4 b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_title_author.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..df67c3cae9cbd9d8ae5d58a1ffa5ea7bb738ec91
Binary files /dev/null and b/outputs/poetry_teaching/poetry_full_10s_20260629_212816/videos/intro_title_author.mp4 differ
diff --git a/outputs/previews/chusai_bernini_preview/preview_config.json b/outputs/previews/chusai_bernini_preview/preview_config.json
new file mode 100644
index 0000000000000000000000000000000000000000..2088f0e8efaf38455927da817dc3272514683d84
--- /dev/null
+++ b/outputs/previews/chusai_bernini_preview/preview_config.json
@@ -0,0 +1,5 @@
+{
+ "image_backend": "bernini_t2i",
+ "video_backend": "wan_vace",
+ "poem": "出塞\n王昌龄\n秦时明月汉时关,万里长征人未还。\n但使龙城飞将在,不教胡马度阴山。"
+}
\ No newline at end of file
diff --git a/outputs/previews/chusai_full_current.mp4 b/outputs/previews/chusai_full_current.mp4
new file mode 100644
index 0000000000000000000000000000000000000000..6560d97b836524723d4b313785612f1bab1a58c4
--- /dev/null
+++ b/outputs/previews/chusai_full_current.mp4
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:300970002c87f2f7457b72cad236fdd2a28066b85377b7ca3421bbc9fea1e43e
+size 7230940
diff --git a/outputs/previews/chusai_segment1_scriptfirst_qwenwan/audio/segment_01.wav b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/audio/segment_01.wav
new file mode 100644
index 0000000000000000000000000000000000000000..5a8d6f2a24326cf0fadf516c49594405f9e331d5
--- /dev/null
+++ b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/audio/segment_01.wav
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:c66525350b7d6ef6a63feea5ff1890357fa1c69e9d77051e98b85652617bfb61
+size 441644
diff --git a/outputs/previews/chusai_segment1_scriptfirst_qwenwan/images/segment_01.png b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/images/segment_01.png
new file mode 100644
index 0000000000000000000000000000000000000000..1daddfc323b661a6577d010f42bd4375527b046e
--- /dev/null
+++ b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/images/segment_01.png
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:3addafa0bed9892756d1d935ed09669b28dccdc914c578a222dc6f61c4c28667
+size 618481
diff --git a/outputs/previews/chusai_segment1_scriptfirst_qwenwan/preview_status.json b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/preview_status.json
new file mode 100644
index 0000000000000000000000000000000000000000..548dd62007de2eff702ab3fc604b6ba322c57041
--- /dev/null
+++ b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/preview_status.json
@@ -0,0 +1,14 @@
+{
+ "status": "partial",
+ "notes": [
+ "fresh image generated successfully with current local image backend resolution",
+ "audio reused from existing 出塞 agentloop wan_vace run for segment 1",
+ "video render failed on host due to Wan VACE OOM during USP run",
+ "Bernini full image model directory is not present locally or in shared Models path scanned this turn; current generated image therefore came from Qwen-Image fallback under image_backend=auto"
+ ],
+ "artifacts": {
+ "image": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/ozhang/VGen/outputs/previews/chusai_segment1_scriptfirst_qwenwan/images/segment_01.png",
+ "audio": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/ozhang/VGen/outputs/previews/chusai_segment1_scriptfirst_qwenwan/audio/segment_01.wav",
+ "video_request": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/ozhang/VGen/outputs/previews/chusai_segment1_scriptfirst_qwenwan/videos/segment_01.wan_vace_usp_request.json"
+ }
+}
\ No newline at end of file
diff --git a/outputs/previews/chusai_segment1_scriptfirst_qwenwan/videos/segment_01.wan_vace_usp_request.json b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/videos/segment_01.wan_vace_usp_request.json
new file mode 100644
index 0000000000000000000000000000000000000000..cc1f00b5270edca38f511e9c426bfd35885248de
--- /dev/null
+++ b/outputs/previews/chusai_segment1_scriptfirst_qwenwan/videos/segment_01.wan_vace_usp_request.json
@@ -0,0 +1,60 @@
+{
+ "segment": {
+ "index": 1,
+ "title": "月照边关",
+ "story_beat": "处境",
+ "teaching_goal": "通过月夜边关实景,引导学生进入边塞环境,理解‘秦时明月汉时关’的历史纵深感。",
+ "image_prompt": "环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史质感;开头写资产类型:人物资产/环境资产/物象器物资产/人物+环境资产/物象+环境资产;只锁定一个核心视觉锚点,构图稳定、轮廓明确、无文字、无拼贴、无现代物品;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识;VACE参考资产图,非最终视频截图;开头写资产类型:人物资产/环境资产/物象器物资产/人物+环境资产/物象+环境资产;只锁定一个核心视觉锚点,构图稳定、轮廓明确、无文字、无拼贴、无现代物品;中国古代写实历史教育短片风格;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识;人物只用中国古代剪影、背影或侧影;不露正脸和清晰五官;无现代写真感;没有人物需求时不强行加人;",
+ "video_prompt": "镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识;中国;4-8s 月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的→环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史/镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围;中国;8-14s 月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的→环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史/镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围;中国;中国古代写实历史教育短片风格;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识;以参考资产图为视觉锚点,保持主体身份、场景结构、服饰器物和整体风格一致;人物只用中国古代剪影、背影或侧影;不露正脸和清晰五官;无现代写真感;没有人物需求时不强行加人;本段隐喻锚点:metaphor_nodes:月照边关;visual_anchor:环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史质感;开头写资产类型:人物资产/环境资…;audio_anchor:月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的守望?;motion_anc…;",
+ "audio_text": "月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的守望?",
+ "duration": 14,
+ "image_prompts": [
+ "环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史质感;开头写资产类型:人物资产/环境资产/物象器物资产/人物+环境资产/物象+环境资产;只锁定一个核心视觉锚点,构图稳定、轮廓明确、无文字、无拼贴、无现代物品;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识;VACE参考资产图,非最终视频截图;开头写资产类型:人物资产/环境资产/物象器物资产/人物+环境资产/物象+环境资产;只锁定一个核心视觉锚点,构图稳定、轮廓明确、无文字、无拼贴、无现代物品;中国古代写实历史教育短片风格;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识;人物只用中国古代剪影、背影或侧影;不露正脸和清晰五官;无现代写真感;没有人物需求时不强行加人;"
+ ],
+ "script_beat": "月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的守望?",
+ "grounding": {
+ "metaphor_nodes": [
+ "月照边关"
+ ],
+ "visual_anchor": "环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史质感;开头写资产类型:人物资产/环境资产/物象器物资产/人物+环境资产/物象+环境资产;只锁定一个核心视觉锚点,构图稳定、轮廓明确、无文字、无拼贴、无现代物品;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识",
+ "audio_anchor": "月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的守望?",
+ "motion_anchor": "镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围;服饰、建筑、器物、船只、灯具和环境符合古代语境;禁止现代服装、现代建筑、车辆、电线、路灯、玻璃幕墙、塑料制品和现代文字标识",
+ "teaching_anchor": "通过月夜边关实景,引导学生进入边塞环境,理解‘秦时明月汉时关’的历史纵深感"
+ },
+ "av_sync_plan": [
+ {
+ "time_range": "0-4s",
+ "audio_cue": "月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的",
+ "visual_cue": "环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史",
+ "motion_cue": "镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围;中国"
+ },
+ {
+ "time_range": "4-8s",
+ "audio_cue": "月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的",
+ "visual_cue": "环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史",
+ "motion_cue": "镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围;中国"
+ },
+ {
+ "time_range": "8-14s",
+ "audio_cue": "月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的",
+ "visual_cue": "环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史",
+ "motion_cue": "镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围;中国"
+ }
+ ]
+ },
+ "image_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/ozhang/VGen/outputs/previews/chusai_segment1_scriptfirst_qwenwan/images/segment_01.png",
+ "output_path": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/ozhang/VGen/outputs/previews/chusai_segment1_scriptfirst_qwenwan/videos/segment_01.mp4",
+ "reference_images": [
+ "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/ozhang/VGen/outputs/previews/chusai_segment1_scriptfirst_qwenwan/images/segment_01.png"
+ ],
+ "config": {
+ "vgen_root": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/ozhang/VGen",
+ "wan_i2v_model": "/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Wan2.2-VACE-Fun-A14B",
+ "clip_seconds": 14,
+ "fps": 15,
+ "height": 480,
+ "width": 832,
+ "video_steps": 28,
+ "seed": 1043
+ }
+}
\ No newline at end of file
diff --git a/runtime/chusai_qwen_raw.txt b/runtime/chusai_qwen_raw.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a15d5aeb807a4da44b1510c54cf471d5bcd26d29
--- /dev/null
+++ b/runtime/chusai_qwen_raw.txt
@@ -0,0 +1,5 @@
+《出塞》属于边塞怀古诗,主线应沿“眼前边关月夜”切入,转入“秦汉历史纵深”,再聚焦“征人未归的现实困境”,最后落在“对良将的渴望与和平愿景”。核心情绪是悲壮中蕴含希望,关键画面需呈现明月、边关、征人剪影、阴山与飞将意象。声音设计需从寂静风声过渡到战马嘶鸣,再归于沉稳旁白。主旨:借古讽今,以历史之镜照现实之痛,呼唤良将安边。
+{"poem_title":"出塞","author":"王昌龄","narrative_mode":"怀古","storyline":"从唐代边关月夜实景出发,穿越至秦汉历史时空,展现征人久戍不归的悲凉,再借李广典故转折,表达对良将安边的深切期盼,最终回归现实,点出人民对和平的渴望。","recurring_character_style":"唐代边关守军剪影,身着汉代风格铠甲,背负行囊,侧影立于风沙中,发髻高束,面容模糊,被月光与雾气半遮。","segments":[{"index":1,"title":"月照边关","story_beat":"处境","teaching_goal":"通过月夜边关实景,引导学生进入边塞环境,理解‘秦时明月汉时关’的历史纵深感。","duration":14},{"index":2,"title":"历史回响","story_beat":"空间推进","teaching_goal":"将秦汉边关与唐代现实连接,体会‘万里长征人未还’的时空延续性。","duration":15},{"index":3,"title":"征人未归","story_beat":"事件推进","teaching_goal":"聚焦征人命运,揭示长期征战对个体的摧残,呼应创作背景中‘士兵久戍不归’。","duration":14},{"index":4,"title":"良将之思","story_beat":"转折","teaching_goal":"引入李广典故,点出‘但使龙城飞将在’的假设,引导学生思考将领与边防的关系。","duration":15},{"index":5,"title":"阴山防线","story_beat":"回望","teaching_goal":"通过阴山地理意象,强化‘不教胡马度阴山’的防御意义,关联赏析中‘平息边患’的愿望。","duration":14},{"index":6,"title":"悲壮基调","story_beat":"反应","teaching_goal":"总结全诗悲壮浑成的风格,点出明代李攀龙‘压卷之作’的评价依据。","duration":15},{"index":7,"title":"和平愿景","story_beat":"点题","teaching_goal":"升华主题,将个人命运与国家安定结合,呼应人民对和平的渴望。","duration":14},{"index":8,"title":"作者余音","story_beat":"回望","teaching_goal":"简要介绍王昌龄边塞诗成就,强化其‘借古讽今’的创作意图。","duration":15}]}
+{"segments":[{"index":1,"image_prompts":["环境资产:唐代边关月夜,冷色调月光洒在残破城楼与烽火台,远处阴山轮廓隐现,风沙微扬,无文字,写实历史质感。"]},{"index":2,"image_prompts":["物象+环境资产:秦汉风格边关遗址与唐代城楼叠影,明月悬空,历史感通过光影层次呈现,无文字。"]},{"index":3,"image_prompts":["人物+环境资产:唐代边关守军剪影,身着汉代铠甲,背负行囊,侧影立于风沙中,月光勾勒轮廓,远处营帐灯火摇曳。"]},{"index":4,"image_prompts":["人物资产:汉代名将李广剪影,骑白马持弓,立于龙城练兵场,背景为汉代军营与战旗,光线温暖,与冷色调边关形成对比。"]},{"index":5,"image_prompts":["环境资产:阴山山脉全景,山势险峻,山脚下隐约可见胡马骑兵剪影,天空阴沉,强调地理屏障作用。"]},{"index":6,"image_prompts":["物象+环境资产:边关残垣与战鼓特写,月光下鼓面裂纹清晰,远处烽火台余烟未散,悲壮氛围。"]},{"index":7,"image_prompts":["环境资产:边关黎明,晨光微露,征人剪影归队,远处阴山雪顶反光,象征希望与和平。"]},{"index":8,"image_prompts":["人物资产:王昌龄剪影,唐代文人服饰,立于边关高处远眺,背影融入月光,无正脸,强调其观察与思考。"]}]}
+{"segments":[{"index":1,"video_prompt":"镜头从冷月缓缓下移至边关城楼,风沙掠过残垣,远处阴山轮廓在雾气中若隐若现,营造静谧而苍凉的氛围。"},{"index":2,"video_prompt":"画面叠化秦汉遗址与唐代城楼,月光穿透历史层叠,烽火台余烟袅袅升起,暗示时空延续。"},{"index":3,"video_prompt":"守军剪影在风沙中缓慢行走,行囊拖地声隐约可闻,远处营帐灯火忽明忽暗,突出征人疲惫。"},{"index":4,"video_prompt":"李广剪影策马驰骋,战旗猎猎,镜头快速切换至边关现实,形成历史与当下的强烈对比。"},{"index":5,"video_prompt":"阴山全景镜头推进,山脚下胡马骑兵剪影一闪而过,随即隐入山后,强调地理屏障的脆弱性。"},{"index":6,"video_prompt":"战鼓特写镜头旋转,鼓面裂纹随月光流动,远处烽火台余烟消散,悲壮情绪达到高潮。"},{"index":7,"video_prompt":"晨光从阴山雪顶洒下,征人剪影归队步伐坚定,镜头拉远展现边关全貌,象征希望重生。"},{"index":8,"video_prompt":"王昌龄剪影立于高处,镜头缓慢环绕,月光将其背影拉长,最终融入边关夜色,余韵悠长。"}]}
+{"segments":[{"index":1,"audio_text":"月光洒在边关城楼,风沙掠过残垣,仿佛秦汉的烽火从未熄灭。这轮明月,照过多少代人的守望?"},{"index":2,"audio_text":"从秦汉到唐代,边关的轮廓变了,但征人的脚步从未停歇。万里征途,多少人再未归来。"},{"index":3,"audio_text":"风沙中,守军拖着行囊缓缓前行,营帐灯火忽明忽暗。他们等待的,是归期,还是平安?"},{"index":4,"audio_text":"若李广还在,龙城战鼓定能震退胡马。可惜,历史没有如果,只有现实的无奈。"},{"index":5,"audio_text":"阴山如屏障,却挡不住铁蹄的试探。山脚下,骑兵一闪而过,和平的防线如此脆弱。"},{"index":6,"audio_text":"战鼓裂纹在月光下清晰可见,余烟消散,悲壮中藏着对良将的渴望。这声音,穿越千年仍在回响。"},{"index":7,"audio_text":"晨光微露,征人归队,阴山雪顶反光。和平的曙光,或许就在下一个黎明。"},{"index":8,"audio_text":"王昌龄站在边关高处,背影融入月色。他借古讽今,提醒我们:良将安边,才是百姓真正的期盼。"}]}
\ No newline at end of file
diff --git a/runtime/deployment.env b/runtime/deployment.env
new file mode 100644
index 0000000000000000000000000000000000000000..43d539ed9349e3cf8956af943b3b383e2ed91297
--- /dev/null
+++ b/runtime/deployment.env
@@ -0,0 +1,8 @@
+VGEN_ROOT=/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen
+DIFFSYNTH_ROOT=/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/VGen/third_party/DiffSynth-Studio
+QWEN_IMAGE_MODEL=/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Qwen-Image
+COSYVOICE_MODEL=/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/CosyVoice3-0.5B-2512
+WAN_I2V_MODEL=/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/Wan2.2-I2V-A14B
+QWEN35_27B_MODEL=/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/Models/qwen3.5-27b
+CONDA_SH=/apdcephfs_sgxy/share_304169095/hunyuan/juliayxzhu/dev/miniconda3/etc/profile.d/conda.sh
+DIFF_ENV=diff
diff --git a/runtime/matcha-tts-0.0.7.2.tar.gz b/runtime/matcha-tts-0.0.7.2.tar.gz
new file mode 100644
index 0000000000000000000000000000000000000000..5f49b4cb4a8fc7c8bfe6cba570fefa429b818ada
--- /dev/null
+++ b/runtime/matcha-tts-0.0.7.2.tar.gz
@@ -0,0 +1,3 @@
+version https://git-lfs.github.com/spec/v1
+oid sha256:86af5e36343fe742cbaea04020ddb0d55fc787ee7cd6c251c471e84babcd20f1
+size 206143
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/LICENSE b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/LICENSE
new file mode 100644
index 0000000000000000000000000000000000000000..858018e750da7be7b271bb7307e68d159ed67ef6
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/LICENSE
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2023 Shivam Mehta
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/MANIFEST.in b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/MANIFEST.in
new file mode 100644
index 0000000000000000000000000000000000000000..c013140cdfb9de19c4d4e73c73a44e33f33fa871
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/MANIFEST.in
@@ -0,0 +1,14 @@
+include README.md
+include LICENSE.txt
+include requirements.*.txt
+include *.cff
+include requirements.txt
+include matcha/VERSION
+recursive-include matcha *.json
+recursive-include matcha *.html
+recursive-include matcha *.png
+recursive-include matcha *.md
+recursive-include matcha *.py
+recursive-include matcha *.pyx
+recursive-exclude tests *
+prune tests*
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/PKG-INFO b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/PKG-INFO
new file mode 100644
index 0000000000000000000000000000000000000000..e988c355a12d00d01fdf937f36e8955df3726b99
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/PKG-INFO
@@ -0,0 +1,357 @@
+Metadata-Version: 2.1
+Name: matcha-tts
+Version: 0.0.7.2
+Summary: 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching
+Home-page: https://shivammehta25.github.io/Matcha-TTS
+Author: Shivam Mehta
+Author-email: shivam.mehta25@gmail.com
+Requires-Python: >=3.9.0
+Description-Content-Type: text/markdown
+License-File: LICENSE
+Requires-Dist: torch>=2.0.0
+Requires-Dist: torchvision>=0.15.0
+Requires-Dist: lightning>=2.0.0
+Requires-Dist: torchmetrics>=0.11.4
+Requires-Dist: hydra-core==1.3.2
+Requires-Dist: hydra-colorlog==1.2.0
+Requires-Dist: hydra-optuna-sweeper==1.2.0
+Requires-Dist: rootutils
+Requires-Dist: pre-commit
+Requires-Dist: rich
+Requires-Dist: pytest
+Requires-Dist: phonemizer
+Requires-Dist: tensorboard
+Requires-Dist: librosa
+Requires-Dist: Cython
+Requires-Dist: numpy
+Requires-Dist: einops
+Requires-Dist: inflect
+Requires-Dist: Unidecode
+Requires-Dist: scipy
+Requires-Dist: torchaudio
+Requires-Dist: matplotlib
+Requires-Dist: pandas
+Requires-Dist: conformer==0.3.2
+Requires-Dist: diffusers
+Requires-Dist: notebook
+Requires-Dist: ipywidgets
+Requires-Dist: gradio==3.43.2
+Requires-Dist: gdown
+Requires-Dist: wget
+Requires-Dist: seaborn
+
+
+
+# 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching
+
+### [Shivam Mehta](https://www.kth.se/profile/smehta), [Ruibo Tu](https://www.kth.se/profile/ruibo), [Jonas Beskow](https://www.kth.se/profile/beskow), [Éva Székely](https://www.kth.se/profile/szekely), and [Gustav Eje Henter](https://people.kth.se/~ghe/)
+
+[](https://www.python.org/downloads/release/python-3100/)
+[](https://pytorch.org/get-started/locally/)
+[](https://pytorchlightning.ai/)
+[](https://hydra.cc/)
+[](https://black.readthedocs.io/en/stable/)
+[](https://pycqa.github.io/isort/)
+
+
+
+
+
+
+
+> This is the official code implementation of 🍵 Matcha-TTS [ICASSP 2024].
+
+We propose 🍵 Matcha-TTS, a new approach to non-autoregressive neural TTS, that uses [conditional flow matching](https://arxiv.org/abs/2210.02747) (similar to [rectified flows](https://arxiv.org/abs/2209.03003)) to speed up ODE-based speech synthesis. Our method:
+
+- Is probabilistic
+- Has compact memory footprint
+- Sounds highly natural
+- Is very fast to synthesise from
+
+Check out our [demo page](https://shivammehta25.github.io/Matcha-TTS) and read [our ICASSP 2024 paper](https://arxiv.org/abs/2309.03199) for more details.
+
+[Pre-trained models](https://drive.google.com/drive/folders/17C_gYgEHOxI5ZypcfE_k1piKCtyR0isJ?usp=sharing) will be automatically downloaded with the CLI or gradio interface.
+
+You can also [try 🍵 Matcha-TTS in your browser on HuggingFace 🤗 spaces](https://huggingface.co/spaces/shivammehta25/Matcha-TTS).
+
+## Teaser video
+
+[](https://youtu.be/xmvJkz3bqw0)
+
+## Installation
+
+1. Create an environment (suggested but optional)
+
+```
+conda create -n matcha-tts python=3.10 -y
+conda activate matcha-tts
+```
+
+2. Install Matcha TTS using pip or from source
+
+```bash
+pip install matcha-tts
+```
+
+from source
+
+```bash
+pip install git+https://github.com/shivammehta25/Matcha-TTS.git
+cd Matcha-TTS
+pip install -e .
+```
+
+3. Run CLI / gradio app / jupyter notebook
+
+```bash
+# This will download the required models
+matcha-tts --text " "
+```
+
+or
+
+```bash
+matcha-tts-app
+```
+
+or open `synthesis.ipynb` on jupyter notebook
+
+### CLI Arguments
+
+- To synthesise from given text, run:
+
+```bash
+matcha-tts --text " "
+```
+
+- To synthesise from a file, run:
+
+```bash
+matcha-tts --file
+```
+
+- To batch synthesise from a file, run:
+
+```bash
+matcha-tts --file --batched
+```
+
+Additional arguments
+
+- Speaking rate
+
+```bash
+matcha-tts --text " " --speaking_rate 1.0
+```
+
+- Sampling temperature
+
+```bash
+matcha-tts --text " " --temperature 0.667
+```
+
+- Euler ODE solver steps
+
+```bash
+matcha-tts --text " " --steps 10
+```
+
+## Train with your own dataset
+
+Let's assume we are training with LJ Speech
+
+1. Download the dataset from [here](https://keithito.com/LJ-Speech-Dataset/), extract it to `data/LJSpeech-1.1`, and prepare the file lists to point to the extracted data like for [item 5 in the setup of the NVIDIA Tacotron 2 repo](https://github.com/NVIDIA/tacotron2#setup).
+
+2. Clone and enter the Matcha-TTS repository
+
+```bash
+git clone https://github.com/shivammehta25/Matcha-TTS.git
+cd Matcha-TTS
+```
+
+3. Install the package from source
+
+```bash
+pip install -e .
+```
+
+4. Go to `configs/data/ljspeech.yaml` and change
+
+```yaml
+train_filelist_path: data/filelists/ljs_audio_text_train_filelist.txt
+valid_filelist_path: data/filelists/ljs_audio_text_val_filelist.txt
+```
+
+5. Generate normalisation statistics with the yaml file of dataset configuration
+
+```bash
+matcha-data-stats -i ljspeech.yaml
+# Output:
+#{'mel_mean': -5.53662231756592, 'mel_std': 2.1161014277038574}
+```
+
+Update these values in `configs/data/ljspeech.yaml` under `data_statistics` key.
+
+```bash
+data_statistics: # Computed for ljspeech dataset
+ mel_mean: -5.536622
+ mel_std: 2.116101
+```
+
+to the paths of your train and validation filelists.
+
+6. Run the training script
+
+```bash
+make train-ljspeech
+```
+
+or
+
+```bash
+python matcha/train.py experiment=ljspeech
+```
+
+- for a minimum memory run
+
+```bash
+python matcha/train.py experiment=ljspeech_min_memory
+```
+
+- for multi-gpu training, run
+
+```bash
+python matcha/train.py experiment=ljspeech trainer.devices=[0,1]
+```
+
+7. Synthesise from the custom trained model
+
+```bash
+matcha-tts --text " " --checkpoint_path
+```
+
+## ONNX support
+
+> Special thanks to [@mush42](https://github.com/mush42) for implementing ONNX export and inference support.
+
+It is possible to export Matcha checkpoints to [ONNX](https://onnx.ai/), and run inference on the exported ONNX graph.
+
+### ONNX export
+
+To export a checkpoint to ONNX, first install ONNX with
+
+```bash
+pip install onnx
+```
+
+then run the following:
+
+```bash
+python3 -m matcha.onnx.export matcha.ckpt model.onnx --n-timesteps 5
+```
+
+Optionally, the ONNX exporter accepts **vocoder-name** and **vocoder-checkpoint** arguments. This enables you to embed the vocoder in the exported graph and generate waveforms in a single run (similar to end-to-end TTS systems).
+
+**Note** that `n_timesteps` is treated as a hyper-parameter rather than a model input. This means you should specify it during export (not during inference). If not specified, `n_timesteps` is set to **5**.
+
+**Important**: for now, torch>=2.1.0 is needed for export since the `scaled_product_attention` operator is not exportable in older versions. Until the final version is released, those who want to export their models must install torch>=2.1.0 manually as a pre-release.
+
+### ONNX Inference
+
+To run inference on the exported model, first install `onnxruntime` using
+
+```bash
+pip install onnxruntime
+pip install onnxruntime-gpu # for GPU inference
+```
+
+then use the following:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs
+```
+
+You can also control synthesis parameters:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs --temperature 0.4 --speaking_rate 0.9 --spk 0
+```
+
+To run inference on **GPU**, make sure to install **onnxruntime-gpu** package, and then pass `--gpu` to the inference command:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs --gpu
+```
+
+If you exported only Matcha to ONNX, this will write mel-spectrogram as graphs and `numpy` arrays to the output directory.
+If you embedded the vocoder in the exported graph, this will write `.wav` audio files to the output directory.
+
+If you exported only Matcha to ONNX, and you want to run a full TTS pipeline, you can pass a path to a vocoder model in `ONNX` format:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs --vocoder hifigan.small.onnx
+```
+
+This will write `.wav` audio files to the output directory.
+
+## Extract phoneme alignments from Matcha-TTS
+
+If the dataset is structured as
+
+```bash
+data/
+└── LJSpeech-1.1
+ ├── metadata.csv
+ ├── README
+ ├── test.txt
+ ├── train.txt
+ ├── val.txt
+ └── wavs
+```
+Then you can extract the phoneme level alignments from a Trained Matcha-TTS model using:
+```bash
+python matcha/utils/get_durations_from_trained_model.py -i dataset_yaml -c
+```
+Example:
+```bash
+python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c matcha_ljspeech.ckpt
+```
+or simply:
+```bash
+matcha-tts-get-durations -i ljspeech.yaml -c matcha_ljspeech.ckpt
+```
+---
+## Train using extracted alignments
+
+In the datasetconfig turn on load duration.
+Example: `ljspeech.yaml`
+```
+load_durations: True
+```
+or see an examples in configs/experiment/ljspeech_from_durations.yaml
+
+
+## Citation information
+
+If you use our code or otherwise find this work useful, please cite our paper:
+
+```text
+@inproceedings{mehta2024matcha,
+ title={Matcha-{TTS}: A fast {TTS} architecture with conditional flow matching},
+ author={Mehta, Shivam and Tu, Ruibo and Beskow, Jonas and Sz{\'e}kely, {\'E}va and Henter, Gustav Eje},
+ booktitle={Proc. ICASSP},
+ year={2024}
+}
+```
+
+## Acknowledgements
+
+Since this code uses [Lightning-Hydra-Template](https://github.com/ashleve/lightning-hydra-template), you have all the powers that come with it.
+
+Other source code we would like to acknowledge:
+
+- [Coqui-TTS](https://github.com/coqui-ai/TTS/tree/dev): For helping me figure out how to make cython binaries pip installable and encouragement
+- [Hugging Face Diffusers](https://huggingface.co/): For their awesome diffusers library and its components
+- [Grad-TTS](https://github.com/huawei-noah/Speech-Backbones/tree/main/Grad-TTS): For the monotonic alignment search source code
+- [torchdyn](https://github.com/DiffEqML/torchdyn): Useful for trying other ODE solvers during research and development
+- [labml.ai](https://nn.labml.ai/transformers/rope/index.html): For the RoPE implementation
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/README.md b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..a5867d0a46568e545524073b435ad84d929b8d73
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/README.md
@@ -0,0 +1,315 @@
+
+
+# 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching
+
+### [Shivam Mehta](https://www.kth.se/profile/smehta), [Ruibo Tu](https://www.kth.se/profile/ruibo), [Jonas Beskow](https://www.kth.se/profile/beskow), [Éva Székely](https://www.kth.se/profile/szekely), and [Gustav Eje Henter](https://people.kth.se/~ghe/)
+
+[](https://www.python.org/downloads/release/python-3100/)
+[](https://pytorch.org/get-started/locally/)
+[](https://pytorchlightning.ai/)
+[](https://hydra.cc/)
+[](https://black.readthedocs.io/en/stable/)
+[](https://pycqa.github.io/isort/)
+
+
+
+
+
+
+
+> This is the official code implementation of 🍵 Matcha-TTS [ICASSP 2024].
+
+We propose 🍵 Matcha-TTS, a new approach to non-autoregressive neural TTS, that uses [conditional flow matching](https://arxiv.org/abs/2210.02747) (similar to [rectified flows](https://arxiv.org/abs/2209.03003)) to speed up ODE-based speech synthesis. Our method:
+
+- Is probabilistic
+- Has compact memory footprint
+- Sounds highly natural
+- Is very fast to synthesise from
+
+Check out our [demo page](https://shivammehta25.github.io/Matcha-TTS) and read [our ICASSP 2024 paper](https://arxiv.org/abs/2309.03199) for more details.
+
+[Pre-trained models](https://drive.google.com/drive/folders/17C_gYgEHOxI5ZypcfE_k1piKCtyR0isJ?usp=sharing) will be automatically downloaded with the CLI or gradio interface.
+
+You can also [try 🍵 Matcha-TTS in your browser on HuggingFace 🤗 spaces](https://huggingface.co/spaces/shivammehta25/Matcha-TTS).
+
+## Teaser video
+
+[](https://youtu.be/xmvJkz3bqw0)
+
+## Installation
+
+1. Create an environment (suggested but optional)
+
+```
+conda create -n matcha-tts python=3.10 -y
+conda activate matcha-tts
+```
+
+2. Install Matcha TTS using pip or from source
+
+```bash
+pip install matcha-tts
+```
+
+from source
+
+```bash
+pip install git+https://github.com/shivammehta25/Matcha-TTS.git
+cd Matcha-TTS
+pip install -e .
+```
+
+3. Run CLI / gradio app / jupyter notebook
+
+```bash
+# This will download the required models
+matcha-tts --text " "
+```
+
+or
+
+```bash
+matcha-tts-app
+```
+
+or open `synthesis.ipynb` on jupyter notebook
+
+### CLI Arguments
+
+- To synthesise from given text, run:
+
+```bash
+matcha-tts --text " "
+```
+
+- To synthesise from a file, run:
+
+```bash
+matcha-tts --file
+```
+
+- To batch synthesise from a file, run:
+
+```bash
+matcha-tts --file --batched
+```
+
+Additional arguments
+
+- Speaking rate
+
+```bash
+matcha-tts --text " " --speaking_rate 1.0
+```
+
+- Sampling temperature
+
+```bash
+matcha-tts --text " " --temperature 0.667
+```
+
+- Euler ODE solver steps
+
+```bash
+matcha-tts --text " " --steps 10
+```
+
+## Train with your own dataset
+
+Let's assume we are training with LJ Speech
+
+1. Download the dataset from [here](https://keithito.com/LJ-Speech-Dataset/), extract it to `data/LJSpeech-1.1`, and prepare the file lists to point to the extracted data like for [item 5 in the setup of the NVIDIA Tacotron 2 repo](https://github.com/NVIDIA/tacotron2#setup).
+
+2. Clone and enter the Matcha-TTS repository
+
+```bash
+git clone https://github.com/shivammehta25/Matcha-TTS.git
+cd Matcha-TTS
+```
+
+3. Install the package from source
+
+```bash
+pip install -e .
+```
+
+4. Go to `configs/data/ljspeech.yaml` and change
+
+```yaml
+train_filelist_path: data/filelists/ljs_audio_text_train_filelist.txt
+valid_filelist_path: data/filelists/ljs_audio_text_val_filelist.txt
+```
+
+5. Generate normalisation statistics with the yaml file of dataset configuration
+
+```bash
+matcha-data-stats -i ljspeech.yaml
+# Output:
+#{'mel_mean': -5.53662231756592, 'mel_std': 2.1161014277038574}
+```
+
+Update these values in `configs/data/ljspeech.yaml` under `data_statistics` key.
+
+```bash
+data_statistics: # Computed for ljspeech dataset
+ mel_mean: -5.536622
+ mel_std: 2.116101
+```
+
+to the paths of your train and validation filelists.
+
+6. Run the training script
+
+```bash
+make train-ljspeech
+```
+
+or
+
+```bash
+python matcha/train.py experiment=ljspeech
+```
+
+- for a minimum memory run
+
+```bash
+python matcha/train.py experiment=ljspeech_min_memory
+```
+
+- for multi-gpu training, run
+
+```bash
+python matcha/train.py experiment=ljspeech trainer.devices=[0,1]
+```
+
+7. Synthesise from the custom trained model
+
+```bash
+matcha-tts --text " " --checkpoint_path
+```
+
+## ONNX support
+
+> Special thanks to [@mush42](https://github.com/mush42) for implementing ONNX export and inference support.
+
+It is possible to export Matcha checkpoints to [ONNX](https://onnx.ai/), and run inference on the exported ONNX graph.
+
+### ONNX export
+
+To export a checkpoint to ONNX, first install ONNX with
+
+```bash
+pip install onnx
+```
+
+then run the following:
+
+```bash
+python3 -m matcha.onnx.export matcha.ckpt model.onnx --n-timesteps 5
+```
+
+Optionally, the ONNX exporter accepts **vocoder-name** and **vocoder-checkpoint** arguments. This enables you to embed the vocoder in the exported graph and generate waveforms in a single run (similar to end-to-end TTS systems).
+
+**Note** that `n_timesteps` is treated as a hyper-parameter rather than a model input. This means you should specify it during export (not during inference). If not specified, `n_timesteps` is set to **5**.
+
+**Important**: for now, torch>=2.1.0 is needed for export since the `scaled_product_attention` operator is not exportable in older versions. Until the final version is released, those who want to export their models must install torch>=2.1.0 manually as a pre-release.
+
+### ONNX Inference
+
+To run inference on the exported model, first install `onnxruntime` using
+
+```bash
+pip install onnxruntime
+pip install onnxruntime-gpu # for GPU inference
+```
+
+then use the following:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs
+```
+
+You can also control synthesis parameters:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs --temperature 0.4 --speaking_rate 0.9 --spk 0
+```
+
+To run inference on **GPU**, make sure to install **onnxruntime-gpu** package, and then pass `--gpu` to the inference command:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs --gpu
+```
+
+If you exported only Matcha to ONNX, this will write mel-spectrogram as graphs and `numpy` arrays to the output directory.
+If you embedded the vocoder in the exported graph, this will write `.wav` audio files to the output directory.
+
+If you exported only Matcha to ONNX, and you want to run a full TTS pipeline, you can pass a path to a vocoder model in `ONNX` format:
+
+```bash
+python3 -m matcha.onnx.infer model.onnx --text "hey" --output-dir ./outputs --vocoder hifigan.small.onnx
+```
+
+This will write `.wav` audio files to the output directory.
+
+## Extract phoneme alignments from Matcha-TTS
+
+If the dataset is structured as
+
+```bash
+data/
+└── LJSpeech-1.1
+ ├── metadata.csv
+ ├── README
+ ├── test.txt
+ ├── train.txt
+ ├── val.txt
+ └── wavs
+```
+Then you can extract the phoneme level alignments from a Trained Matcha-TTS model using:
+```bash
+python matcha/utils/get_durations_from_trained_model.py -i dataset_yaml -c
+```
+Example:
+```bash
+python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c matcha_ljspeech.ckpt
+```
+or simply:
+```bash
+matcha-tts-get-durations -i ljspeech.yaml -c matcha_ljspeech.ckpt
+```
+---
+## Train using extracted alignments
+
+In the datasetconfig turn on load duration.
+Example: `ljspeech.yaml`
+```
+load_durations: True
+```
+or see an examples in configs/experiment/ljspeech_from_durations.yaml
+
+
+## Citation information
+
+If you use our code or otherwise find this work useful, please cite our paper:
+
+```text
+@inproceedings{mehta2024matcha,
+ title={Matcha-{TTS}: A fast {TTS} architecture with conditional flow matching},
+ author={Mehta, Shivam and Tu, Ruibo and Beskow, Jonas and Sz{\'e}kely, {\'E}va and Henter, Gustav Eje},
+ booktitle={Proc. ICASSP},
+ year={2024}
+}
+```
+
+## Acknowledgements
+
+Since this code uses [Lightning-Hydra-Template](https://github.com/ashleve/lightning-hydra-template), you have all the powers that come with it.
+
+Other source code we would like to acknowledge:
+
+- [Coqui-TTS](https://github.com/coqui-ai/TTS/tree/dev): For helping me figure out how to make cython binaries pip installable and encouragement
+- [Hugging Face Diffusers](https://huggingface.co/): For their awesome diffusers library and its components
+- [Grad-TTS](https://github.com/huawei-noah/Speech-Backbones/tree/main/Grad-TTS): For the monotonic alignment search source code
+- [torchdyn](https://github.com/DiffEqML/torchdyn): Useful for trying other ODE solvers during research and development
+- [labml.ai](https://nn.labml.ai/transformers/rope/index.html): For the RoPE implementation
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/configs/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/configs/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..56bf7f4aa4906bc0f997132708cc0826c198e4aa
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/configs/__init__.py
@@ -0,0 +1 @@
+# this file is needed here to include configs when building project as a package
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/VERSION b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/VERSION
new file mode 100644
index 0000000000000000000000000000000000000000..4d81495bd7367495f8513dbbb131dbb70f656200
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/VERSION
@@ -0,0 +1 @@
+0.0.7.2
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/app.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/app.py
new file mode 100644
index 0000000000000000000000000000000000000000..d68fbaa2d10d1faab606d89906af5e8b6baa5aa4
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/app.py
@@ -0,0 +1,357 @@
+import tempfile
+from argparse import Namespace
+from pathlib import Path
+
+import gradio as gr
+import soundfile as sf
+import torch
+
+from matcha.cli import (
+ MATCHA_URLS,
+ VOCODER_URLS,
+ assert_model_downloaded,
+ get_device,
+ load_matcha,
+ load_vocoder,
+ process_text,
+ to_waveform,
+)
+from matcha.utils.utils import get_user_data_dir, plot_tensor
+
+LOCATION = Path(get_user_data_dir())
+
+args = Namespace(
+ cpu=False,
+ model="matcha_vctk",
+ vocoder="hifigan_univ_v1",
+ spk=0,
+)
+
+CURRENTLY_LOADED_MODEL = args.model
+
+
+def MATCHA_TTS_LOC(x):
+ return LOCATION / f"{x}.ckpt"
+
+
+def VOCODER_LOC(x):
+ return LOCATION / f"{x}"
+
+
+LOGO_URL = "https://shivammehta25.github.io/Matcha-TTS/images/logo.png"
+RADIO_OPTIONS = {
+ "Multi Speaker (VCTK)": {
+ "model": "matcha_vctk",
+ "vocoder": "hifigan_univ_v1",
+ },
+ "Single Speaker (LJ Speech)": {
+ "model": "matcha_ljspeech",
+ "vocoder": "hifigan_T2_v1",
+ },
+}
+
+# Ensure all the required models are downloaded
+assert_model_downloaded(MATCHA_TTS_LOC("matcha_ljspeech"), MATCHA_URLS["matcha_ljspeech"])
+assert_model_downloaded(VOCODER_LOC("hifigan_T2_v1"), VOCODER_URLS["hifigan_T2_v1"])
+assert_model_downloaded(MATCHA_TTS_LOC("matcha_vctk"), MATCHA_URLS["matcha_vctk"])
+assert_model_downloaded(VOCODER_LOC("hifigan_univ_v1"), VOCODER_URLS["hifigan_univ_v1"])
+
+device = get_device(args)
+
+# Load default model
+model = load_matcha(args.model, MATCHA_TTS_LOC(args.model), device)
+vocoder, denoiser = load_vocoder(args.vocoder, VOCODER_LOC(args.vocoder), device)
+
+
+def load_model(model_name, vocoder_name):
+ model = load_matcha(model_name, MATCHA_TTS_LOC(model_name), device)
+ vocoder, denoiser = load_vocoder(vocoder_name, VOCODER_LOC(vocoder_name), device)
+ return model, vocoder, denoiser
+
+
+def load_model_ui(model_type, textbox):
+ model_name, vocoder_name = RADIO_OPTIONS[model_type]["model"], RADIO_OPTIONS[model_type]["vocoder"]
+
+ global model, vocoder, denoiser, CURRENTLY_LOADED_MODEL # pylint: disable=global-statement
+ if CURRENTLY_LOADED_MODEL != model_name:
+ model, vocoder, denoiser = load_model(model_name, vocoder_name)
+ CURRENTLY_LOADED_MODEL = model_name
+
+ if model_name == "matcha_ljspeech":
+ spk_slider = gr.update(visible=False, value=-1)
+ single_speaker_examples = gr.update(visible=True)
+ multi_speaker_examples = gr.update(visible=False)
+ length_scale = gr.update(value=0.95)
+ else:
+ spk_slider = gr.update(visible=True, value=0)
+ single_speaker_examples = gr.update(visible=False)
+ multi_speaker_examples = gr.update(visible=True)
+ length_scale = gr.update(value=0.85)
+
+ return (
+ textbox,
+ gr.update(interactive=True),
+ spk_slider,
+ single_speaker_examples,
+ multi_speaker_examples,
+ length_scale,
+ )
+
+
+@torch.inference_mode()
+def process_text_gradio(text):
+ output = process_text(1, text, device)
+ return output["x_phones"][1::2], output["x"], output["x_lengths"]
+
+
+@torch.inference_mode()
+def synthesise_mel(text, text_length, n_timesteps, temperature, length_scale, spk):
+ spk = torch.tensor([spk], device=device, dtype=torch.long) if spk >= 0 else None
+ output = model.synthesise(
+ text,
+ text_length,
+ n_timesteps=n_timesteps,
+ temperature=temperature,
+ spks=spk,
+ length_scale=length_scale,
+ )
+ output["waveform"] = to_waveform(output["mel"], vocoder, denoiser)
+ with tempfile.NamedTemporaryFile(suffix=".wav", delete=False) as fp:
+ sf.write(fp.name, output["waveform"], 22050, "PCM_24")
+
+ return fp.name, plot_tensor(output["mel"].squeeze().cpu().numpy())
+
+
+def multispeaker_example_cacher(text, n_timesteps, mel_temp, length_scale, spk):
+ global CURRENTLY_LOADED_MODEL # pylint: disable=global-statement
+ if CURRENTLY_LOADED_MODEL != "matcha_vctk":
+ global model, vocoder, denoiser # pylint: disable=global-statement
+ model, vocoder, denoiser = load_model("matcha_vctk", "hifigan_univ_v1")
+ CURRENTLY_LOADED_MODEL = "matcha_vctk"
+
+ phones, text, text_lengths = process_text_gradio(text)
+ audio, mel_spectrogram = synthesise_mel(text, text_lengths, n_timesteps, mel_temp, length_scale, spk)
+ return phones, audio, mel_spectrogram
+
+
+def ljspeech_example_cacher(text, n_timesteps, mel_temp, length_scale, spk=-1):
+ global CURRENTLY_LOADED_MODEL # pylint: disable=global-statement
+ if CURRENTLY_LOADED_MODEL != "matcha_ljspeech":
+ global model, vocoder, denoiser # pylint: disable=global-statement
+ model, vocoder, denoiser = load_model("matcha_ljspeech", "hifigan_T2_v1")
+ CURRENTLY_LOADED_MODEL = "matcha_ljspeech"
+
+ phones, text, text_lengths = process_text_gradio(text)
+ audio, mel_spectrogram = synthesise_mel(text, text_lengths, n_timesteps, mel_temp, length_scale, spk)
+ return phones, audio, mel_spectrogram
+
+
+def main():
+ description = """# 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching
+ ### [Shivam Mehta](https://www.kth.se/profile/smehta), [Ruibo Tu](https://www.kth.se/profile/ruibo), [Jonas Beskow](https://www.kth.se/profile/beskow), [Éva Székely](https://www.kth.se/profile/szekely), and [Gustav Eje Henter](https://people.kth.se/~ghe/)
+ We propose 🍵 Matcha-TTS, a new approach to non-autoregressive neural TTS, that uses conditional flow matching (similar to rectified flows) to speed up ODE-based speech synthesis. Our method:
+
+
+ * Is probabilistic
+ * Has compact memory footprint
+ * Sounds highly natural
+ * Is very fast to synthesise from
+
+
+ Check out our [demo page](https://shivammehta25.github.io/Matcha-TTS). Read our [arXiv preprint for more details](https://arxiv.org/abs/2309.03199).
+ Code is available in our [GitHub repository](https://github.com/shivammehta25/Matcha-TTS), along with pre-trained models.
+
+ Cached examples are available at the bottom of the page.
+ """
+
+ with gr.Blocks(title="🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching") as demo:
+ processed_text = gr.State(value=None)
+ processed_text_len = gr.State(value=None)
+
+ with gr.Box():
+ with gr.Row():
+ gr.Markdown(description, scale=3)
+ with gr.Column():
+ gr.Image(LOGO_URL, label="Matcha-TTS logo", height=50, width=50, scale=1, show_label=False)
+ html = 'VIDEO '
+ gr.HTML(html)
+
+ with gr.Box():
+ radio_options = list(RADIO_OPTIONS.keys())
+ model_type = gr.Radio(
+ radio_options, value=radio_options[0], label="Choose a Model", interactive=True, container=False
+ )
+
+ with gr.Row():
+ gr.Markdown("# Text Input")
+ with gr.Row():
+ text = gr.Textbox(value="", lines=2, label="Text to synthesise", scale=3)
+ spk_slider = gr.Slider(
+ minimum=0, maximum=107, step=1, value=args.spk, label="Speaker ID", interactive=True, scale=1
+ )
+
+ with gr.Row():
+ gr.Markdown("### Hyper parameters")
+ with gr.Row():
+ n_timesteps = gr.Slider(
+ label="Number of ODE steps",
+ minimum=1,
+ maximum=100,
+ step=1,
+ value=10,
+ interactive=True,
+ )
+ length_scale = gr.Slider(
+ label="Length scale (Speaking rate)",
+ minimum=0.5,
+ maximum=1.5,
+ step=0.05,
+ value=1.0,
+ interactive=True,
+ )
+ mel_temp = gr.Slider(
+ label="Sampling temperature",
+ minimum=0.00,
+ maximum=2.001,
+ step=0.16675,
+ value=0.667,
+ interactive=True,
+ )
+
+ synth_btn = gr.Button("Synthesise")
+
+ with gr.Box():
+ with gr.Row():
+ gr.Markdown("### Phonetised text")
+ phonetised_text = gr.Textbox(interactive=False, scale=10, label="Phonetised text")
+
+ with gr.Box():
+ with gr.Row():
+ mel_spectrogram = gr.Image(interactive=False, label="mel spectrogram")
+
+ # with gr.Row():
+ audio = gr.Audio(interactive=False, label="Audio")
+
+ with gr.Row(visible=False) as example_row_lj_speech:
+ examples = gr.Examples( # pylint: disable=unused-variable
+ examples=[
+ [
+ "We propose Matcha-TTS, a new approach to non-autoregressive neural TTS, that uses conditional flow matching (similar to rectified flows) to speed up O D E-based speech synthesis.",
+ 50,
+ 0.677,
+ 0.95,
+ ],
+ [
+ "The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.",
+ 2,
+ 0.677,
+ 0.95,
+ ],
+ [
+ "The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.",
+ 4,
+ 0.677,
+ 0.95,
+ ],
+ [
+ "The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.",
+ 10,
+ 0.677,
+ 0.95,
+ ],
+ [
+ "The Secret Service believed that it was very doubtful that any President would ride regularly in a vehicle with a fixed top, even though transparent.",
+ 50,
+ 0.677,
+ 0.95,
+ ],
+ [
+ "The narrative of these events is based largely on the recollections of the participants.",
+ 10,
+ 0.677,
+ 0.95,
+ ],
+ [
+ "The jury did not believe him, and the verdict was for the defendants.",
+ 10,
+ 0.677,
+ 0.95,
+ ],
+ ],
+ fn=ljspeech_example_cacher,
+ inputs=[text, n_timesteps, mel_temp, length_scale],
+ outputs=[phonetised_text, audio, mel_spectrogram],
+ cache_examples=True,
+ )
+
+ with gr.Row() as example_row_multispeaker:
+ multi_speaker_examples = gr.Examples( # pylint: disable=unused-variable
+ examples=[
+ [
+ "Hello everyone! I am speaker 0 and I am here to tell you that Matcha-TTS is amazing!",
+ 10,
+ 0.677,
+ 0.85,
+ 0,
+ ],
+ [
+ "Hello everyone! I am speaker 16 and I am here to tell you that Matcha-TTS is amazing!",
+ 10,
+ 0.677,
+ 0.85,
+ 16,
+ ],
+ [
+ "Hello everyone! I am speaker 44 and I am here to tell you that Matcha-TTS is amazing!",
+ 50,
+ 0.677,
+ 0.85,
+ 44,
+ ],
+ [
+ "Hello everyone! I am speaker 45 and I am here to tell you that Matcha-TTS is amazing!",
+ 50,
+ 0.677,
+ 0.85,
+ 45,
+ ],
+ [
+ "Hello everyone! I am speaker 58 and I am here to tell you that Matcha-TTS is amazing!",
+ 4,
+ 0.677,
+ 0.85,
+ 58,
+ ],
+ ],
+ fn=multispeaker_example_cacher,
+ inputs=[text, n_timesteps, mel_temp, length_scale, spk_slider],
+ outputs=[phonetised_text, audio, mel_spectrogram],
+ cache_examples=True,
+ label="Multi Speaker Examples",
+ )
+
+ model_type.change(lambda x: gr.update(interactive=False), inputs=[synth_btn], outputs=[synth_btn]).then(
+ load_model_ui,
+ inputs=[model_type, text],
+ outputs=[text, synth_btn, spk_slider, example_row_lj_speech, example_row_multispeaker, length_scale],
+ )
+
+ synth_btn.click(
+ fn=process_text_gradio,
+ inputs=[
+ text,
+ ],
+ outputs=[phonetised_text, processed_text, processed_text_len],
+ api_name="matcha_tts",
+ queue=True,
+ ).then(
+ fn=synthesise_mel,
+ inputs=[processed_text, processed_text_len, n_timesteps, mel_temp, length_scale, spk_slider],
+ outputs=[audio, mel_spectrogram],
+ )
+
+ demo.queue().launch(share=True)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/cli.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/cli.py
new file mode 100644
index 0000000000000000000000000000000000000000..aa15eb1eb29e90373648dafe9eb74f3312abd5a8
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/cli.py
@@ -0,0 +1,419 @@
+import argparse
+import datetime as dt
+import os
+import warnings
+from pathlib import Path
+
+import matplotlib.pyplot as plt
+import numpy as np
+import soundfile as sf
+import torch
+
+from matcha.hifigan.config import v1
+from matcha.hifigan.denoiser import Denoiser
+from matcha.hifigan.env import AttrDict
+from matcha.hifigan.models import Generator as HiFiGAN
+from matcha.models.matcha_tts import MatchaTTS
+from matcha.text import sequence_to_text, text_to_sequence
+from matcha.utils.utils import assert_model_downloaded, get_user_data_dir, intersperse
+
+MATCHA_URLS = {
+ "matcha_ljspeech": "https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/matcha_ljspeech.ckpt",
+ "matcha_vctk": "https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/matcha_vctk.ckpt",
+}
+
+VOCODER_URLS = {
+ "hifigan_T2_v1": "https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/generator_v1", # Old url: https://drive.google.com/file/d/14NENd4equCBLyyCSke114Mv6YR_j_uFs/view?usp=drive_link
+ "hifigan_univ_v1": "https://github.com/shivammehta25/Matcha-TTS-checkpoints/releases/download/v1.0/g_02500000", # Old url: https://drive.google.com/file/d/1qpgI41wNXFcH-iKq1Y42JlBC9j0je8PW/view?usp=drive_link
+}
+
+MULTISPEAKER_MODEL = {
+ "matcha_vctk": {"vocoder": "hifigan_univ_v1", "speaking_rate": 0.85, "spk": 0, "spk_range": (0, 107)}
+}
+
+SINGLESPEAKER_MODEL = {"matcha_ljspeech": {"vocoder": "hifigan_T2_v1", "speaking_rate": 0.95, "spk": None}}
+
+
+def plot_spectrogram_to_numpy(spectrogram, filename):
+ fig, ax = plt.subplots(figsize=(12, 3))
+ im = ax.imshow(spectrogram, aspect="auto", origin="lower", interpolation="none")
+ plt.colorbar(im, ax=ax)
+ plt.xlabel("Frames")
+ plt.ylabel("Channels")
+ plt.title("Synthesised Mel-Spectrogram")
+ fig.canvas.draw()
+ plt.savefig(filename)
+
+
+def process_text(i: int, text: str, device: torch.device):
+ print(f"[{i}] - Input text: {text}")
+ x = torch.tensor(
+ intersperse(text_to_sequence(text, ["english_cleaners2"])[0], 0),
+ dtype=torch.long,
+ device=device,
+ )[None]
+ x_lengths = torch.tensor([x.shape[-1]], dtype=torch.long, device=device)
+ x_phones = sequence_to_text(x.squeeze(0).tolist())
+ print(f"[{i}] - Phonetised text: {x_phones[1::2]}")
+
+ return {"x_orig": text, "x": x, "x_lengths": x_lengths, "x_phones": x_phones}
+
+
+def get_texts(args):
+ if args.text:
+ texts = [args.text]
+ else:
+ with open(args.file, encoding="utf-8") as f:
+ texts = f.readlines()
+ return texts
+
+
+def assert_required_models_available(args):
+ save_dir = get_user_data_dir()
+ if not hasattr(args, "checkpoint_path") and args.checkpoint_path is None:
+ model_path = args.checkpoint_path
+ else:
+ model_path = save_dir / f"{args.model}.ckpt"
+ assert_model_downloaded(model_path, MATCHA_URLS[args.model])
+
+ vocoder_path = save_dir / f"{args.vocoder}"
+ assert_model_downloaded(vocoder_path, VOCODER_URLS[args.vocoder])
+ return {"matcha": model_path, "vocoder": vocoder_path}
+
+
+def load_hifigan(checkpoint_path, device):
+ h = AttrDict(v1)
+ hifigan = HiFiGAN(h).to(device)
+ hifigan.load_state_dict(torch.load(checkpoint_path, map_location=device)["generator"])
+ _ = hifigan.eval()
+ hifigan.remove_weight_norm()
+ return hifigan
+
+
+def load_vocoder(vocoder_name, checkpoint_path, device):
+ print(f"[!] Loading {vocoder_name}!")
+ vocoder = None
+ if vocoder_name in ("hifigan_T2_v1", "hifigan_univ_v1"):
+ vocoder = load_hifigan(checkpoint_path, device)
+ else:
+ raise NotImplementedError(
+ f"Vocoder {vocoder_name} not implemented! define a load_<> method for it"
+ )
+
+ denoiser = Denoiser(vocoder, mode="zeros")
+ print(f"[+] {vocoder_name} loaded!")
+ return vocoder, denoiser
+
+
+def load_matcha(model_name, checkpoint_path, device):
+ print(f"[!] Loading {model_name}!")
+ model = MatchaTTS.load_from_checkpoint(checkpoint_path, map_location=device)
+ _ = model.eval()
+
+ print(f"[+] {model_name} loaded!")
+ return model
+
+
+def to_waveform(mel, vocoder, denoiser=None, denoiser_strength=0.00025):
+ audio = vocoder(mel).clamp(-1, 1)
+ if denoiser is not None:
+ audio = denoiser(audio.squeeze(), strength=denoiser_strength).cpu().squeeze()
+
+ return audio.cpu().squeeze()
+
+
+def save_to_folder(filename: str, output: dict, folder: str):
+ folder = Path(folder)
+ folder.mkdir(exist_ok=True, parents=True)
+ plot_spectrogram_to_numpy(np.array(output["mel"].squeeze().float().cpu()), f"{filename}.png")
+ np.save(folder / f"{filename}", output["mel"].cpu().numpy())
+ sf.write(folder / f"{filename}.wav", output["waveform"], 22050, "PCM_24")
+ return folder.resolve() / f"{filename}.wav"
+
+
+def validate_args(args):
+ assert (
+ args.text or args.file
+ ), "Either text or file must be provided Matcha-T(ea)TTS need sometext to whisk the waveforms."
+ assert args.temperature >= 0, "Sampling temperature cannot be negative"
+ assert args.steps > 0, "Number of ODE steps must be greater than 0"
+
+ if args.checkpoint_path is None:
+ # When using pretrained models
+ if args.model in SINGLESPEAKER_MODEL:
+ args = validate_args_for_single_speaker_model(args)
+
+ if args.model in MULTISPEAKER_MODEL:
+ args = validate_args_for_multispeaker_model(args)
+ else:
+ # When using a custom model
+ if args.vocoder != "hifigan_univ_v1":
+ warn_ = "[-] Using custom model checkpoint! I would suggest passing --vocoder hifigan_univ_v1, unless the custom model is trained on LJ Speech."
+ warnings.warn(warn_, UserWarning)
+ if args.speaking_rate is None:
+ args.speaking_rate = 1.0
+
+ if args.batched:
+ assert args.batch_size > 0, "Batch size must be greater than 0"
+ assert args.speaking_rate > 0, "Speaking rate must be greater than 0"
+
+ return args
+
+
+def validate_args_for_multispeaker_model(args):
+ if args.vocoder is not None:
+ if args.vocoder != MULTISPEAKER_MODEL[args.model]["vocoder"]:
+ warn_ = f"[-] Using {args.model} model! I would suggest passing --vocoder {MULTISPEAKER_MODEL[args.model]['vocoder']}"
+ warnings.warn(warn_, UserWarning)
+ else:
+ args.vocoder = MULTISPEAKER_MODEL[args.model]["vocoder"]
+
+ if args.speaking_rate is None:
+ args.speaking_rate = MULTISPEAKER_MODEL[args.model]["speaking_rate"]
+
+ spk_range = MULTISPEAKER_MODEL[args.model]["spk_range"]
+ if args.spk is not None:
+ assert (
+ args.spk >= spk_range[0] and args.spk <= spk_range[-1]
+ ), f"Speaker ID must be between {spk_range} for this model."
+ else:
+ available_spk_id = MULTISPEAKER_MODEL[args.model]["spk"]
+ warn_ = f"[!] Speaker ID not provided! Using speaker ID {available_spk_id}"
+ warnings.warn(warn_, UserWarning)
+ args.spk = available_spk_id
+
+ return args
+
+
+def validate_args_for_single_speaker_model(args):
+ if args.vocoder is not None:
+ if args.vocoder != SINGLESPEAKER_MODEL[args.model]["vocoder"]:
+ warn_ = f"[-] Using {args.model} model! I would suggest passing --vocoder {SINGLESPEAKER_MODEL[args.model]['vocoder']}"
+ warnings.warn(warn_, UserWarning)
+ else:
+ args.vocoder = SINGLESPEAKER_MODEL[args.model]["vocoder"]
+
+ if args.speaking_rate is None:
+ args.speaking_rate = SINGLESPEAKER_MODEL[args.model]["speaking_rate"]
+
+ if args.spk != SINGLESPEAKER_MODEL[args.model]["spk"]:
+ warn_ = f"[-] Ignoring speaker id {args.spk} for {args.model}"
+ warnings.warn(warn_, UserWarning)
+ args.spk = SINGLESPEAKER_MODEL[args.model]["spk"]
+
+ return args
+
+
+@torch.inference_mode()
+def cli():
+ parser = argparse.ArgumentParser(
+ description=" 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching"
+ )
+ parser.add_argument(
+ "--model",
+ type=str,
+ default="matcha_ljspeech",
+ help="Model to use",
+ choices=MATCHA_URLS.keys(),
+ )
+
+ parser.add_argument(
+ "--checkpoint_path",
+ type=str,
+ default=None,
+ help="Path to the custom model checkpoint",
+ )
+
+ parser.add_argument(
+ "--vocoder",
+ type=str,
+ default=None,
+ help="Vocoder to use (default: will use the one suggested with the pretrained model))",
+ choices=VOCODER_URLS.keys(),
+ )
+ parser.add_argument("--text", type=str, default=None, help="Text to synthesize")
+ parser.add_argument("--file", type=str, default=None, help="Text file to synthesize")
+ parser.add_argument("--spk", type=int, default=None, help="Speaker ID")
+ parser.add_argument(
+ "--temperature",
+ type=float,
+ default=0.667,
+ help="Variance of the x0 noise (default: 0.667)",
+ )
+ parser.add_argument(
+ "--speaking_rate",
+ type=float,
+ default=None,
+ help="change the speaking rate, a higher value means slower speaking rate (default: 1.0)",
+ )
+ parser.add_argument("--steps", type=int, default=10, help="Number of ODE steps (default: 10)")
+ parser.add_argument("--cpu", action="store_true", help="Use CPU for inference (default: use GPU if available)")
+ parser.add_argument(
+ "--denoiser_strength",
+ type=float,
+ default=0.00025,
+ help="Strength of the vocoder bias denoiser (default: 0.00025)",
+ )
+ parser.add_argument(
+ "--output_folder",
+ type=str,
+ default=os.getcwd(),
+ help="Output folder to save results (default: current dir)",
+ )
+ parser.add_argument("--batched", action="store_true", help="Batched inference (default: False)")
+ parser.add_argument(
+ "--batch_size", type=int, default=32, help="Batch size only useful when --batched (default: 32)"
+ )
+
+ args = parser.parse_args()
+
+ args = validate_args(args)
+ device = get_device(args)
+ print_config(args)
+ paths = assert_required_models_available(args)
+
+ if args.checkpoint_path is not None:
+ print(f"[🍵] Loading custom model from {args.checkpoint_path}")
+ paths["matcha"] = args.checkpoint_path
+ args.model = "custom_model"
+
+ model = load_matcha(args.model, paths["matcha"], device)
+ vocoder, denoiser = load_vocoder(args.vocoder, paths["vocoder"], device)
+
+ texts = get_texts(args)
+
+ spk = torch.tensor([args.spk], device=device, dtype=torch.long) if args.spk is not None else None
+ if len(texts) == 1 or not args.batched:
+ unbatched_synthesis(args, device, model, vocoder, denoiser, texts, spk)
+ else:
+ batched_synthesis(args, device, model, vocoder, denoiser, texts, spk)
+
+
+class BatchedSynthesisDataset(torch.utils.data.Dataset):
+ def __init__(self, processed_texts):
+ self.processed_texts = processed_texts
+
+ def __len__(self):
+ return len(self.processed_texts)
+
+ def __getitem__(self, idx):
+ return self.processed_texts[idx]
+
+
+def batched_collate_fn(batch):
+ x = []
+ x_lengths = []
+
+ for b in batch:
+ x.append(b["x"].squeeze(0))
+ x_lengths.append(b["x_lengths"])
+
+ x = torch.nn.utils.rnn.pad_sequence(x, batch_first=True)
+ x_lengths = torch.concat(x_lengths, dim=0)
+ return {"x": x, "x_lengths": x_lengths}
+
+
+def batched_synthesis(args, device, model, vocoder, denoiser, texts, spk):
+ total_rtf = []
+ total_rtf_w = []
+ processed_text = [process_text(i, text, "cpu") for i, text in enumerate(texts)]
+ dataloader = torch.utils.data.DataLoader(
+ BatchedSynthesisDataset(processed_text),
+ batch_size=args.batch_size,
+ collate_fn=batched_collate_fn,
+ num_workers=8,
+ )
+ for i, batch in enumerate(dataloader):
+ i = i + 1
+ start_t = dt.datetime.now()
+ b = batch["x"].shape[0]
+ output = model.synthesise(
+ batch["x"].to(device),
+ batch["x_lengths"].to(device),
+ n_timesteps=args.steps,
+ temperature=args.temperature,
+ spks=spk.expand(b) if spk is not None else spk,
+ length_scale=args.speaking_rate,
+ )
+
+ output["waveform"] = to_waveform(output["mel"], vocoder, denoiser, args.denoiser_strength)
+ t = (dt.datetime.now() - start_t).total_seconds()
+ rtf_w = t * 22050 / (output["waveform"].shape[-1])
+ print(f"[🍵-Batch: {i}] Matcha-TTS RTF: {output['rtf']:.4f}")
+ print(f"[🍵-Batch: {i}] Matcha-TTS + VOCODER RTF: {rtf_w:.4f}")
+ total_rtf.append(output["rtf"])
+ total_rtf_w.append(rtf_w)
+ for j in range(output["mel"].shape[0]):
+ base_name = f"utterance_{j:03d}_speaker_{args.spk:03d}" if args.spk is not None else f"utterance_{j:03d}"
+ length = output["mel_lengths"][j]
+ new_dict = {"mel": output["mel"][j][:, :length], "waveform": output["waveform"][j][: length * 256]}
+ location = save_to_folder(base_name, new_dict, args.output_folder)
+ print(f"[🍵-{j}] Waveform saved: {location}")
+
+ print("".join(["="] * 100))
+ print(f"[🍵] Average Matcha-TTS RTF: {np.mean(total_rtf):.4f} ± {np.std(total_rtf)}")
+ print(f"[🍵] Average Matcha-TTS + VOCODER RTF: {np.mean(total_rtf_w):.4f} ± {np.std(total_rtf_w)}")
+ print("[🍵] Enjoy the freshly whisked 🍵 Matcha-TTS!")
+
+
+def unbatched_synthesis(args, device, model, vocoder, denoiser, texts, spk):
+ total_rtf = []
+ total_rtf_w = []
+ for i, text in enumerate(texts):
+ i = i + 1
+ base_name = f"utterance_{i:03d}_speaker_{args.spk:03d}" if args.spk is not None else f"utterance_{i:03d}"
+
+ print("".join(["="] * 100))
+ text = text.strip()
+ text_processed = process_text(i, text, device)
+
+ print(f"[🍵] Whisking Matcha-T(ea)TS for: {i}")
+ start_t = dt.datetime.now()
+ output = model.synthesise(
+ text_processed["x"],
+ text_processed["x_lengths"],
+ n_timesteps=args.steps,
+ temperature=args.temperature,
+ spks=spk,
+ length_scale=args.speaking_rate,
+ )
+ output["waveform"] = to_waveform(output["mel"], vocoder, denoiser, args.denoiser_strength)
+ # RTF with HiFiGAN
+ t = (dt.datetime.now() - start_t).total_seconds()
+ rtf_w = t * 22050 / (output["waveform"].shape[-1])
+ print(f"[🍵-{i}] Matcha-TTS RTF: {output['rtf']:.4f}")
+ print(f"[🍵-{i}] Matcha-TTS + VOCODER RTF: {rtf_w:.4f}")
+ total_rtf.append(output["rtf"])
+ total_rtf_w.append(rtf_w)
+
+ location = save_to_folder(base_name, output, args.output_folder)
+ print(f"[+] Waveform saved: {location}")
+
+ print("".join(["="] * 100))
+ print(f"[🍵] Average Matcha-TTS RTF: {np.mean(total_rtf):.4f} ± {np.std(total_rtf)}")
+ print(f"[🍵] Average Matcha-TTS + VOCODER RTF: {np.mean(total_rtf_w):.4f} ± {np.std(total_rtf_w)}")
+ print("[🍵] Enjoy the freshly whisked 🍵 Matcha-TTS!")
+
+
+def print_config(args):
+ print("[!] Configurations: ")
+ print(f"\t- Model: {args.model}")
+ print(f"\t- Vocoder: {args.vocoder}")
+ print(f"\t- Temperature: {args.temperature}")
+ print(f"\t- Speaking rate: {args.speaking_rate}")
+ print(f"\t- Number of ODE steps: {args.steps}")
+ print(f"\t- Speaker: {args.spk}")
+
+
+def get_device(args):
+ if torch.cuda.is_available() and not args.cpu:
+ print("[+] GPU Available! Using GPU")
+ device = torch.device("cuda")
+ else:
+ print("[-] GPU not available or forced CPU run! Using CPU")
+ device = torch.device("cpu")
+ return device
+
+
+if __name__ == "__main__":
+ cli()
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/data/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/data/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/data/components/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/data/components/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/data/text_mel_datamodule.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/data/text_mel_datamodule.py
new file mode 100644
index 0000000000000000000000000000000000000000..e10dfcb8bba8fbd1d04272a70d5acfe886ae5107
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/data/text_mel_datamodule.py
@@ -0,0 +1,274 @@
+import random
+from pathlib import Path
+from typing import Any, Dict, Optional
+
+import numpy as np
+import torch
+import torchaudio as ta
+from lightning import LightningDataModule
+from torch.utils.data.dataloader import DataLoader
+
+from matcha.text import text_to_sequence
+from matcha.utils.audio import mel_spectrogram
+from matcha.utils.model import fix_len_compatibility, normalize
+from matcha.utils.utils import intersperse
+
+
+def parse_filelist(filelist_path, split_char="|"):
+ with open(filelist_path, encoding="utf-8") as f:
+ filepaths_and_text = [line.strip().split(split_char) for line in f]
+ return filepaths_and_text
+
+
+class TextMelDataModule(LightningDataModule):
+ def __init__( # pylint: disable=unused-argument
+ self,
+ name,
+ train_filelist_path,
+ valid_filelist_path,
+ batch_size,
+ num_workers,
+ pin_memory,
+ cleaners,
+ add_blank,
+ n_spks,
+ n_fft,
+ n_feats,
+ sample_rate,
+ hop_length,
+ win_length,
+ f_min,
+ f_max,
+ data_statistics,
+ seed,
+ load_durations,
+ ):
+ super().__init__()
+
+ # this line allows to access init params with 'self.hparams' attribute
+ # also ensures init params will be stored in ckpt
+ self.save_hyperparameters(logger=False)
+
+ def setup(self, stage: Optional[str] = None): # pylint: disable=unused-argument
+ """Load data. Set variables: `self.data_train`, `self.data_val`, `self.data_test`.
+
+ This method is called by lightning with both `trainer.fit()` and `trainer.test()`, so be
+ careful not to execute things like random split twice!
+ """
+ # load and split datasets only if not loaded already
+
+ self.trainset = TextMelDataset( # pylint: disable=attribute-defined-outside-init
+ self.hparams.train_filelist_path,
+ self.hparams.n_spks,
+ self.hparams.cleaners,
+ self.hparams.add_blank,
+ self.hparams.n_fft,
+ self.hparams.n_feats,
+ self.hparams.sample_rate,
+ self.hparams.hop_length,
+ self.hparams.win_length,
+ self.hparams.f_min,
+ self.hparams.f_max,
+ self.hparams.data_statistics,
+ self.hparams.seed,
+ self.hparams.load_durations,
+ )
+ self.validset = TextMelDataset( # pylint: disable=attribute-defined-outside-init
+ self.hparams.valid_filelist_path,
+ self.hparams.n_spks,
+ self.hparams.cleaners,
+ self.hparams.add_blank,
+ self.hparams.n_fft,
+ self.hparams.n_feats,
+ self.hparams.sample_rate,
+ self.hparams.hop_length,
+ self.hparams.win_length,
+ self.hparams.f_min,
+ self.hparams.f_max,
+ self.hparams.data_statistics,
+ self.hparams.seed,
+ self.hparams.load_durations,
+ )
+
+ def train_dataloader(self):
+ return DataLoader(
+ dataset=self.trainset,
+ batch_size=self.hparams.batch_size,
+ num_workers=self.hparams.num_workers,
+ pin_memory=self.hparams.pin_memory,
+ shuffle=True,
+ collate_fn=TextMelBatchCollate(self.hparams.n_spks),
+ )
+
+ def val_dataloader(self):
+ return DataLoader(
+ dataset=self.validset,
+ batch_size=self.hparams.batch_size,
+ num_workers=self.hparams.num_workers,
+ pin_memory=self.hparams.pin_memory,
+ shuffle=False,
+ collate_fn=TextMelBatchCollate(self.hparams.n_spks),
+ )
+
+ def teardown(self, stage: Optional[str] = None):
+ """Clean up after fit or test."""
+ pass # pylint: disable=unnecessary-pass
+
+ def state_dict(self):
+ """Extra things to save to checkpoint."""
+ return {}
+
+ def load_state_dict(self, state_dict: Dict[str, Any]):
+ """Things to do when loading checkpoint."""
+ pass # pylint: disable=unnecessary-pass
+
+
+class TextMelDataset(torch.utils.data.Dataset):
+ def __init__(
+ self,
+ filelist_path,
+ n_spks,
+ cleaners,
+ add_blank=True,
+ n_fft=1024,
+ n_mels=80,
+ sample_rate=22050,
+ hop_length=256,
+ win_length=1024,
+ f_min=0.0,
+ f_max=8000,
+ data_parameters=None,
+ seed=None,
+ load_durations=False,
+ ):
+ self.filepaths_and_text = parse_filelist(filelist_path)
+ self.n_spks = n_spks
+ self.cleaners = cleaners
+ self.add_blank = add_blank
+ self.n_fft = n_fft
+ self.n_mels = n_mels
+ self.sample_rate = sample_rate
+ self.hop_length = hop_length
+ self.win_length = win_length
+ self.f_min = f_min
+ self.f_max = f_max
+ self.load_durations = load_durations
+
+ if data_parameters is not None:
+ self.data_parameters = data_parameters
+ else:
+ self.data_parameters = {"mel_mean": 0, "mel_std": 1}
+ random.seed(seed)
+ random.shuffle(self.filepaths_and_text)
+
+ def get_datapoint(self, filepath_and_text):
+ if self.n_spks > 1:
+ filepath, spk, text = (
+ filepath_and_text[0],
+ int(filepath_and_text[1]),
+ filepath_and_text[2],
+ )
+ else:
+ filepath, text = filepath_and_text[0], filepath_and_text[1]
+ spk = None
+
+ text, cleaned_text = self.get_text(text, add_blank=self.add_blank)
+ mel = self.get_mel(filepath)
+
+ durations = self.get_durations(filepath, text) if self.load_durations else None
+
+ return {"x": text, "y": mel, "spk": spk, "filepath": filepath, "x_text": cleaned_text, "durations": durations}
+
+ def get_durations(self, filepath, text):
+ filepath = Path(filepath)
+ data_dir, name = filepath.parent.parent, filepath.stem
+
+ try:
+ dur_loc = data_dir / "durations" / f"{name}.npy"
+ durs = torch.from_numpy(np.load(dur_loc).astype(int))
+
+ except FileNotFoundError as e:
+ raise FileNotFoundError(
+ f"Tried loading the durations but durations didn't exist at {dur_loc}, make sure you've generate the durations first using: python matcha/utils/get_durations_from_trained_model.py \n"
+ ) from e
+
+ assert len(durs) == len(text), f"Length of durations {len(durs)} and text {len(text)} do not match"
+
+ return durs
+
+ def get_mel(self, filepath):
+ audio, sr = ta.load(filepath)
+ assert sr == self.sample_rate
+ mel = mel_spectrogram(
+ audio,
+ self.n_fft,
+ self.n_mels,
+ self.sample_rate,
+ self.hop_length,
+ self.win_length,
+ self.f_min,
+ self.f_max,
+ center=False,
+ ).squeeze()
+ mel = normalize(mel, self.data_parameters["mel_mean"], self.data_parameters["mel_std"])
+ return mel
+
+ def get_text(self, text, add_blank=True):
+ text_norm, cleaned_text = text_to_sequence(text, self.cleaners)
+ if self.add_blank:
+ text_norm = intersperse(text_norm, 0)
+ text_norm = torch.IntTensor(text_norm)
+ return text_norm, cleaned_text
+
+ def __getitem__(self, index):
+ datapoint = self.get_datapoint(self.filepaths_and_text[index])
+ return datapoint
+
+ def __len__(self):
+ return len(self.filepaths_and_text)
+
+
+class TextMelBatchCollate:
+ def __init__(self, n_spks):
+ self.n_spks = n_spks
+
+ def __call__(self, batch):
+ B = len(batch)
+ y_max_length = max([item["y"].shape[-1] for item in batch])
+ y_max_length = fix_len_compatibility(y_max_length)
+ x_max_length = max([item["x"].shape[-1] for item in batch])
+ n_feats = batch[0]["y"].shape[-2]
+
+ y = torch.zeros((B, n_feats, y_max_length), dtype=torch.float32)
+ x = torch.zeros((B, x_max_length), dtype=torch.long)
+ durations = torch.zeros((B, x_max_length), dtype=torch.long)
+
+ y_lengths, x_lengths = [], []
+ spks = []
+ filepaths, x_texts = [], []
+ for i, item in enumerate(batch):
+ y_, x_ = item["y"], item["x"]
+ y_lengths.append(y_.shape[-1])
+ x_lengths.append(x_.shape[-1])
+ y[i, :, : y_.shape[-1]] = y_
+ x[i, : x_.shape[-1]] = x_
+ spks.append(item["spk"])
+ filepaths.append(item["filepath"])
+ x_texts.append(item["x_text"])
+ if item["durations"] is not None:
+ durations[i, : item["durations"].shape[-1]] = item["durations"]
+
+ y_lengths = torch.tensor(y_lengths, dtype=torch.long)
+ x_lengths = torch.tensor(x_lengths, dtype=torch.long)
+ spks = torch.tensor(spks, dtype=torch.long) if self.n_spks > 1 else None
+
+ return {
+ "x": x,
+ "x_lengths": x_lengths,
+ "y": y,
+ "y_lengths": y_lengths,
+ "spks": spks,
+ "filepaths": filepaths,
+ "x_texts": x_texts,
+ "durations": durations if not torch.eq(durations, 0).all() else None,
+ }
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/README.md b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..5db25850451a794b1db1b15b08e82c1d802edbb3
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/README.md
@@ -0,0 +1,101 @@
+# HiFi-GAN: Generative Adversarial Networks for Efficient and High Fidelity Speech Synthesis
+
+### Jungil Kong, Jaehyeon Kim, Jaekyoung Bae
+
+In our [paper](https://arxiv.org/abs/2010.05646),
+we proposed HiFi-GAN: a GAN-based model capable of generating high fidelity speech efficiently.
+We provide our implementation and pretrained models as open source in this repository.
+
+**Abstract :**
+Several recent work on speech synthesis have employed generative adversarial networks (GANs) to produce raw waveforms.
+Although such methods improve the sampling efficiency and memory usage,
+their sample quality has not yet reached that of autoregressive and flow-based generative models.
+In this work, we propose HiFi-GAN, which achieves both efficient and high-fidelity speech synthesis.
+As speech audio consists of sinusoidal signals with various periods,
+we demonstrate that modeling periodic patterns of an audio is crucial for enhancing sample quality.
+A subjective human evaluation (mean opinion score, MOS) of a single speaker dataset indicates that our proposed method
+demonstrates similarity to human quality while generating 22.05 kHz high-fidelity audio 167.9 times faster than
+real-time on a single V100 GPU. We further show the generality of HiFi-GAN to the mel-spectrogram inversion of unseen
+speakers and end-to-end speech synthesis. Finally, a small footprint version of HiFi-GAN generates samples 13.4 times
+faster than real-time on CPU with comparable quality to an autoregressive counterpart.
+
+Visit our [demo website](https://jik876.github.io/hifi-gan-demo/) for audio samples.
+
+## Pre-requisites
+
+1. Python >= 3.6
+2. Clone this repository.
+3. Install python requirements. Please refer [requirements.txt](requirements.txt)
+4. Download and extract the [LJ Speech dataset](https://keithito.com/LJ-Speech-Dataset/).
+ And move all wav files to `LJSpeech-1.1/wavs`
+
+## Training
+
+```
+python train.py --config config_v1.json
+```
+
+To train V2 or V3 Generator, replace `config_v1.json` with `config_v2.json` or `config_v3.json`.
+Checkpoints and copy of the configuration file are saved in `cp_hifigan` directory by default.
+You can change the path by adding `--checkpoint_path` option.
+
+Validation loss during training with V1 generator.
+
+
+## Pretrained Model
+
+You can also use pretrained models we provide.
+[Download pretrained models](https://drive.google.com/drive/folders/1-eEYTB5Av9jNql0WGBlRoi-WH2J7bp5Y?usp=sharing)
+Details of each folder are as in follows:
+
+| Folder Name | Generator | Dataset | Fine-Tuned |
+| ------------ | --------- | --------- | ------------------------------------------------------ |
+| LJ_V1 | V1 | LJSpeech | No |
+| LJ_V2 | V2 | LJSpeech | No |
+| LJ_V3 | V3 | LJSpeech | No |
+| LJ_FT_T2_V1 | V1 | LJSpeech | Yes ([Tacotron2](https://github.com/NVIDIA/tacotron2)) |
+| LJ_FT_T2_V2 | V2 | LJSpeech | Yes ([Tacotron2](https://github.com/NVIDIA/tacotron2)) |
+| LJ_FT_T2_V3 | V3 | LJSpeech | Yes ([Tacotron2](https://github.com/NVIDIA/tacotron2)) |
+| VCTK_V1 | V1 | VCTK | No |
+| VCTK_V2 | V2 | VCTK | No |
+| VCTK_V3 | V3 | VCTK | No |
+| UNIVERSAL_V1 | V1 | Universal | No |
+
+We provide the universal model with discriminator weights that can be used as a base for transfer learning to other datasets.
+
+## Fine-Tuning
+
+1. Generate mel-spectrograms in numpy format using [Tacotron2](https://github.com/NVIDIA/tacotron2) with teacher-forcing.
+ The file name of the generated mel-spectrogram should match the audio file and the extension should be `.npy`.
+ Example:
+ ` Audio File : LJ001-0001.wav
+Mel-Spectrogram File : LJ001-0001.npy`
+2. Create `ft_dataset` folder and copy the generated mel-spectrogram files into it.
+3. Run the following command.
+ ```
+ python train.py --fine_tuning True --config config_v1.json
+ ```
+ For other command line options, please refer to the training section.
+
+## Inference from wav file
+
+1. Make `test_files` directory and copy wav files into the directory.
+2. Run the following command.
+ ` python inference.py --checkpoint_file [generator checkpoint file path]`
+ Generated wav files are saved in `generated_files` by default.
+ You can change the path by adding `--output_dir` option.
+
+## Inference for end-to-end speech synthesis
+
+1. Make `test_mel_files` directory and copy generated mel-spectrogram files into the directory.
+ You can generate mel-spectrograms using [Tacotron2](https://github.com/NVIDIA/tacotron2),
+ [Glow-TTS](https://github.com/jaywalnut310/glow-tts) and so forth.
+2. Run the following command.
+ ` python inference_e2e.py --checkpoint_file [generator checkpoint file path]`
+ Generated wav files are saved in `generated_files_from_mel` by default.
+ You can change the path by adding `--output_dir` option.
+
+## Acknowledgements
+
+We referred to [WaveGlow](https://github.com/NVIDIA/waveglow), [MelGAN](https://github.com/descriptinc/melgan-neurips)
+and [Tacotron2](https://github.com/NVIDIA/tacotron2) to implement this.
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/config.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/config.py
new file mode 100644
index 0000000000000000000000000000000000000000..b3abea9e151a08864353d32066bd4935e24b82e7
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/config.py
@@ -0,0 +1,28 @@
+v1 = {
+ "resblock": "1",
+ "num_gpus": 0,
+ "batch_size": 16,
+ "learning_rate": 0.0004,
+ "adam_b1": 0.8,
+ "adam_b2": 0.99,
+ "lr_decay": 0.999,
+ "seed": 1234,
+ "upsample_rates": [8, 8, 2, 2],
+ "upsample_kernel_sizes": [16, 16, 4, 4],
+ "upsample_initial_channel": 512,
+ "resblock_kernel_sizes": [3, 7, 11],
+ "resblock_dilation_sizes": [[1, 3, 5], [1, 3, 5], [1, 3, 5]],
+ "resblock_initial_channel": 256,
+ "segment_size": 8192,
+ "num_mels": 80,
+ "num_freq": 1025,
+ "n_fft": 1024,
+ "hop_size": 256,
+ "win_size": 1024,
+ "sampling_rate": 22050,
+ "fmin": 0,
+ "fmax": 8000,
+ "fmax_loss": None,
+ "num_workers": 4,
+ "dist_config": {"dist_backend": "nccl", "dist_url": "tcp://localhost:54321", "world_size": 1},
+}
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/denoiser.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/denoiser.py
new file mode 100644
index 0000000000000000000000000000000000000000..9fd33312a09b1940374a0e29a97fe3a1a1dac7d2
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/denoiser.py
@@ -0,0 +1,64 @@
+# Code modified from Rafael Valle's implementation https://github.com/NVIDIA/waveglow/blob/5bc2a53e20b3b533362f974cfa1ea0267ae1c2b1/denoiser.py
+
+"""Waveglow style denoiser can be used to remove the artifacts from the HiFiGAN generated audio."""
+import torch
+
+
+class Denoiser(torch.nn.Module):
+ """Removes model bias from audio produced with waveglow"""
+
+ def __init__(self, vocoder, filter_length=1024, n_overlap=4, win_length=1024, mode="zeros"):
+ super().__init__()
+ self.filter_length = filter_length
+ self.hop_length = int(filter_length / n_overlap)
+ self.win_length = win_length
+
+ dtype, device = next(vocoder.parameters()).dtype, next(vocoder.parameters()).device
+ self.device = device
+ if mode == "zeros":
+ mel_input = torch.zeros((1, 80, 88), dtype=dtype, device=device)
+ elif mode == "normal":
+ mel_input = torch.randn((1, 80, 88), dtype=dtype, device=device)
+ else:
+ raise Exception(f"Mode {mode} if not supported")
+
+ def stft_fn(audio, n_fft, hop_length, win_length, window):
+ spec = torch.stft(
+ audio,
+ n_fft=n_fft,
+ hop_length=hop_length,
+ win_length=win_length,
+ window=window,
+ return_complex=True,
+ )
+ spec = torch.view_as_real(spec)
+ return torch.sqrt(spec.pow(2).sum(-1)), torch.atan2(spec[..., -1], spec[..., 0])
+
+ self.stft = lambda x: stft_fn(
+ audio=x,
+ n_fft=self.filter_length,
+ hop_length=self.hop_length,
+ win_length=self.win_length,
+ window=torch.hann_window(self.win_length, device=device),
+ )
+ self.istft = lambda x, y: torch.istft(
+ torch.complex(x * torch.cos(y), x * torch.sin(y)),
+ n_fft=self.filter_length,
+ hop_length=self.hop_length,
+ win_length=self.win_length,
+ window=torch.hann_window(self.win_length, device=device),
+ )
+
+ with torch.no_grad():
+ bias_audio = vocoder(mel_input).float().squeeze(0)
+ bias_spec, _ = self.stft(bias_audio)
+
+ self.register_buffer("bias_spec", bias_spec[:, :, 0][:, :, None])
+
+ @torch.inference_mode()
+ def forward(self, audio, strength=0.0005):
+ audio_spec, audio_angles = self.stft(audio)
+ audio_spec_denoised = audio_spec - self.bias_spec.to(audio.device) * strength
+ audio_spec_denoised = torch.clamp(audio_spec_denoised, 0.0)
+ audio_denoised = self.istft(audio_spec_denoised, audio_angles)
+ return audio_denoised
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/env.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/env.py
new file mode 100644
index 0000000000000000000000000000000000000000..9ea4f948a3f002921bf9bc24f52cbc1c0b1fc2ec
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/env.py
@@ -0,0 +1,17 @@
+""" from https://github.com/jik876/hifi-gan """
+
+import os
+import shutil
+
+
+class AttrDict(dict):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ self.__dict__ = self
+
+
+def build_env(config, config_name, path):
+ t_path = os.path.join(path, config_name)
+ if config != t_path:
+ os.makedirs(path, exist_ok=True)
+ shutil.copyfile(config, os.path.join(path, config_name))
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/meldataset.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/meldataset.py
new file mode 100644
index 0000000000000000000000000000000000000000..8b43ea7965e04a52d5427a485ee911b743057c4a
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/meldataset.py
@@ -0,0 +1,217 @@
+""" from https://github.com/jik876/hifi-gan """
+
+import math
+import os
+import random
+
+import numpy as np
+import torch
+import torch.utils.data
+from librosa.filters import mel as librosa_mel_fn
+from librosa.util import normalize
+from scipy.io.wavfile import read
+
+MAX_WAV_VALUE = 32768.0
+
+
+def load_wav(full_path):
+ sampling_rate, data = read(full_path)
+ return data, sampling_rate
+
+
+def dynamic_range_compression(x, C=1, clip_val=1e-5):
+ return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)
+
+
+def dynamic_range_decompression(x, C=1):
+ return np.exp(x) / C
+
+
+def dynamic_range_compression_torch(x, C=1, clip_val=1e-5):
+ return torch.log(torch.clamp(x, min=clip_val) * C)
+
+
+def dynamic_range_decompression_torch(x, C=1):
+ return torch.exp(x) / C
+
+
+def spectral_normalize_torch(magnitudes):
+ output = dynamic_range_compression_torch(magnitudes)
+ return output
+
+
+def spectral_de_normalize_torch(magnitudes):
+ output = dynamic_range_decompression_torch(magnitudes)
+ return output
+
+
+mel_basis = {}
+hann_window = {}
+
+
+def mel_spectrogram(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False):
+ if torch.min(y) < -1.0:
+ print("min value is ", torch.min(y))
+ if torch.max(y) > 1.0:
+ print("max value is ", torch.max(y))
+
+ global mel_basis, hann_window # pylint: disable=global-statement
+ if fmax not in mel_basis:
+ mel = librosa_mel_fn(sampling_rate, n_fft, num_mels, fmin, fmax)
+ mel_basis[str(fmax) + "_" + str(y.device)] = torch.from_numpy(mel).float().to(y.device)
+ hann_window[str(y.device)] = torch.hann_window(win_size).to(y.device)
+
+ y = torch.nn.functional.pad(
+ y.unsqueeze(1), (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), mode="reflect"
+ )
+ y = y.squeeze(1)
+
+ spec = torch.view_as_real(
+ torch.stft(
+ y,
+ n_fft,
+ hop_length=hop_size,
+ win_length=win_size,
+ window=hann_window[str(y.device)],
+ center=center,
+ pad_mode="reflect",
+ normalized=False,
+ onesided=True,
+ return_complex=True,
+ )
+ )
+
+ spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))
+
+ spec = torch.matmul(mel_basis[str(fmax) + "_" + str(y.device)], spec)
+ spec = spectral_normalize_torch(spec)
+
+ return spec
+
+
+def get_dataset_filelist(a):
+ with open(a.input_training_file, encoding="utf-8") as fi:
+ training_files = [
+ os.path.join(a.input_wavs_dir, x.split("|")[0] + ".wav") for x in fi.read().split("\n") if len(x) > 0
+ ]
+
+ with open(a.input_validation_file, encoding="utf-8") as fi:
+ validation_files = [
+ os.path.join(a.input_wavs_dir, x.split("|")[0] + ".wav") for x in fi.read().split("\n") if len(x) > 0
+ ]
+ return training_files, validation_files
+
+
+class MelDataset(torch.utils.data.Dataset):
+ def __init__(
+ self,
+ training_files,
+ segment_size,
+ n_fft,
+ num_mels,
+ hop_size,
+ win_size,
+ sampling_rate,
+ fmin,
+ fmax,
+ split=True,
+ shuffle=True,
+ n_cache_reuse=1,
+ device=None,
+ fmax_loss=None,
+ fine_tuning=False,
+ base_mels_path=None,
+ ):
+ self.audio_files = training_files
+ random.seed(1234)
+ if shuffle:
+ random.shuffle(self.audio_files)
+ self.segment_size = segment_size
+ self.sampling_rate = sampling_rate
+ self.split = split
+ self.n_fft = n_fft
+ self.num_mels = num_mels
+ self.hop_size = hop_size
+ self.win_size = win_size
+ self.fmin = fmin
+ self.fmax = fmax
+ self.fmax_loss = fmax_loss
+ self.cached_wav = None
+ self.n_cache_reuse = n_cache_reuse
+ self._cache_ref_count = 0
+ self.device = device
+ self.fine_tuning = fine_tuning
+ self.base_mels_path = base_mels_path
+
+ def __getitem__(self, index):
+ filename = self.audio_files[index]
+ if self._cache_ref_count == 0:
+ audio, sampling_rate = load_wav(filename)
+ audio = audio / MAX_WAV_VALUE
+ if not self.fine_tuning:
+ audio = normalize(audio) * 0.95
+ self.cached_wav = audio
+ if sampling_rate != self.sampling_rate:
+ raise ValueError(f"{sampling_rate} SR doesn't match target {self.sampling_rate} SR")
+ self._cache_ref_count = self.n_cache_reuse
+ else:
+ audio = self.cached_wav
+ self._cache_ref_count -= 1
+
+ audio = torch.FloatTensor(audio)
+ audio = audio.unsqueeze(0)
+
+ if not self.fine_tuning:
+ if self.split:
+ if audio.size(1) >= self.segment_size:
+ max_audio_start = audio.size(1) - self.segment_size
+ audio_start = random.randint(0, max_audio_start)
+ audio = audio[:, audio_start : audio_start + self.segment_size]
+ else:
+ audio = torch.nn.functional.pad(audio, (0, self.segment_size - audio.size(1)), "constant")
+
+ mel = mel_spectrogram(
+ audio,
+ self.n_fft,
+ self.num_mels,
+ self.sampling_rate,
+ self.hop_size,
+ self.win_size,
+ self.fmin,
+ self.fmax,
+ center=False,
+ )
+ else:
+ mel = np.load(os.path.join(self.base_mels_path, os.path.splitext(os.path.split(filename)[-1])[0] + ".npy"))
+ mel = torch.from_numpy(mel)
+
+ if len(mel.shape) < 3:
+ mel = mel.unsqueeze(0)
+
+ if self.split:
+ frames_per_seg = math.ceil(self.segment_size / self.hop_size)
+
+ if audio.size(1) >= self.segment_size:
+ mel_start = random.randint(0, mel.size(2) - frames_per_seg - 1)
+ mel = mel[:, :, mel_start : mel_start + frames_per_seg]
+ audio = audio[:, mel_start * self.hop_size : (mel_start + frames_per_seg) * self.hop_size]
+ else:
+ mel = torch.nn.functional.pad(mel, (0, frames_per_seg - mel.size(2)), "constant")
+ audio = torch.nn.functional.pad(audio, (0, self.segment_size - audio.size(1)), "constant")
+
+ mel_loss = mel_spectrogram(
+ audio,
+ self.n_fft,
+ self.num_mels,
+ self.sampling_rate,
+ self.hop_size,
+ self.win_size,
+ self.fmin,
+ self.fmax_loss,
+ center=False,
+ )
+
+ return (mel.squeeze(), audio.squeeze(0), filename, mel_loss.squeeze())
+
+ def __len__(self):
+ return len(self.audio_files)
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/models.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/models.py
new file mode 100644
index 0000000000000000000000000000000000000000..d209d9a4e99ec29e4167a5a2eaa62d72b3eff694
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/models.py
@@ -0,0 +1,368 @@
+""" from https://github.com/jik876/hifi-gan """
+
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+from torch.nn import AvgPool1d, Conv1d, Conv2d, ConvTranspose1d
+from torch.nn.utils import remove_weight_norm, spectral_norm, weight_norm
+
+from .xutils import get_padding, init_weights
+
+LRELU_SLOPE = 0.1
+
+
+class ResBlock1(torch.nn.Module):
+ def __init__(self, h, channels, kernel_size=3, dilation=(1, 3, 5)):
+ super().__init__()
+ self.h = h
+ self.convs1 = nn.ModuleList(
+ [
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=dilation[0],
+ padding=get_padding(kernel_size, dilation[0]),
+ )
+ ),
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=dilation[1],
+ padding=get_padding(kernel_size, dilation[1]),
+ )
+ ),
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=dilation[2],
+ padding=get_padding(kernel_size, dilation[2]),
+ )
+ ),
+ ]
+ )
+ self.convs1.apply(init_weights)
+
+ self.convs2 = nn.ModuleList(
+ [
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=1,
+ padding=get_padding(kernel_size, 1),
+ )
+ ),
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=1,
+ padding=get_padding(kernel_size, 1),
+ )
+ ),
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=1,
+ padding=get_padding(kernel_size, 1),
+ )
+ ),
+ ]
+ )
+ self.convs2.apply(init_weights)
+
+ def forward(self, x):
+ for c1, c2 in zip(self.convs1, self.convs2):
+ xt = F.leaky_relu(x, LRELU_SLOPE)
+ xt = c1(xt)
+ xt = F.leaky_relu(xt, LRELU_SLOPE)
+ xt = c2(xt)
+ x = xt + x
+ return x
+
+ def remove_weight_norm(self):
+ for l in self.convs1:
+ remove_weight_norm(l)
+ for l in self.convs2:
+ remove_weight_norm(l)
+
+
+class ResBlock2(torch.nn.Module):
+ def __init__(self, h, channels, kernel_size=3, dilation=(1, 3)):
+ super().__init__()
+ self.h = h
+ self.convs = nn.ModuleList(
+ [
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=dilation[0],
+ padding=get_padding(kernel_size, dilation[0]),
+ )
+ ),
+ weight_norm(
+ Conv1d(
+ channels,
+ channels,
+ kernel_size,
+ 1,
+ dilation=dilation[1],
+ padding=get_padding(kernel_size, dilation[1]),
+ )
+ ),
+ ]
+ )
+ self.convs.apply(init_weights)
+
+ def forward(self, x):
+ for c in self.convs:
+ xt = F.leaky_relu(x, LRELU_SLOPE)
+ xt = c(xt)
+ x = xt + x
+ return x
+
+ def remove_weight_norm(self):
+ for l in self.convs:
+ remove_weight_norm(l)
+
+
+class Generator(torch.nn.Module):
+ def __init__(self, h):
+ super().__init__()
+ self.h = h
+ self.num_kernels = len(h.resblock_kernel_sizes)
+ self.num_upsamples = len(h.upsample_rates)
+ self.conv_pre = weight_norm(Conv1d(80, h.upsample_initial_channel, 7, 1, padding=3))
+ resblock = ResBlock1 if h.resblock == "1" else ResBlock2
+
+ self.ups = nn.ModuleList()
+ for i, (u, k) in enumerate(zip(h.upsample_rates, h.upsample_kernel_sizes)):
+ self.ups.append(
+ weight_norm(
+ ConvTranspose1d(
+ h.upsample_initial_channel // (2**i),
+ h.upsample_initial_channel // (2 ** (i + 1)),
+ k,
+ u,
+ padding=(k - u) // 2,
+ )
+ )
+ )
+
+ self.resblocks = nn.ModuleList()
+ for i in range(len(self.ups)):
+ ch = h.upsample_initial_channel // (2 ** (i + 1))
+ for _, (k, d) in enumerate(zip(h.resblock_kernel_sizes, h.resblock_dilation_sizes)):
+ self.resblocks.append(resblock(h, ch, k, d))
+
+ self.conv_post = weight_norm(Conv1d(ch, 1, 7, 1, padding=3))
+ self.ups.apply(init_weights)
+ self.conv_post.apply(init_weights)
+
+ def forward(self, x):
+ x = self.conv_pre(x)
+ for i in range(self.num_upsamples):
+ x = F.leaky_relu(x, LRELU_SLOPE)
+ x = self.ups[i](x)
+ xs = None
+ for j in range(self.num_kernels):
+ if xs is None:
+ xs = self.resblocks[i * self.num_kernels + j](x)
+ else:
+ xs += self.resblocks[i * self.num_kernels + j](x)
+ x = xs / self.num_kernels
+ x = F.leaky_relu(x)
+ x = self.conv_post(x)
+ x = torch.tanh(x)
+
+ return x
+
+ def remove_weight_norm(self):
+ print("Removing weight norm...")
+ for l in self.ups:
+ remove_weight_norm(l)
+ for l in self.resblocks:
+ l.remove_weight_norm()
+ remove_weight_norm(self.conv_pre)
+ remove_weight_norm(self.conv_post)
+
+
+class DiscriminatorP(torch.nn.Module):
+ def __init__(self, period, kernel_size=5, stride=3, use_spectral_norm=False):
+ super().__init__()
+ self.period = period
+ norm_f = weight_norm if use_spectral_norm is False else spectral_norm
+ self.convs = nn.ModuleList(
+ [
+ norm_f(Conv2d(1, 32, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(32, 128, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(128, 512, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(512, 1024, (kernel_size, 1), (stride, 1), padding=(get_padding(5, 1), 0))),
+ norm_f(Conv2d(1024, 1024, (kernel_size, 1), 1, padding=(2, 0))),
+ ]
+ )
+ self.conv_post = norm_f(Conv2d(1024, 1, (3, 1), 1, padding=(1, 0)))
+
+ def forward(self, x):
+ fmap = []
+
+ # 1d to 2d
+ b, c, t = x.shape
+ if t % self.period != 0: # pad first
+ n_pad = self.period - (t % self.period)
+ x = F.pad(x, (0, n_pad), "reflect")
+ t = t + n_pad
+ x = x.view(b, c, t // self.period, self.period)
+
+ for l in self.convs:
+ x = l(x)
+ x = F.leaky_relu(x, LRELU_SLOPE)
+ fmap.append(x)
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+
+ return x, fmap
+
+
+class MultiPeriodDiscriminator(torch.nn.Module):
+ def __init__(self):
+ super().__init__()
+ self.discriminators = nn.ModuleList(
+ [
+ DiscriminatorP(2),
+ DiscriminatorP(3),
+ DiscriminatorP(5),
+ DiscriminatorP(7),
+ DiscriminatorP(11),
+ ]
+ )
+
+ def forward(self, y, y_hat):
+ y_d_rs = []
+ y_d_gs = []
+ fmap_rs = []
+ fmap_gs = []
+ for _, d in enumerate(self.discriminators):
+ y_d_r, fmap_r = d(y)
+ y_d_g, fmap_g = d(y_hat)
+ y_d_rs.append(y_d_r)
+ fmap_rs.append(fmap_r)
+ y_d_gs.append(y_d_g)
+ fmap_gs.append(fmap_g)
+
+ return y_d_rs, y_d_gs, fmap_rs, fmap_gs
+
+
+class DiscriminatorS(torch.nn.Module):
+ def __init__(self, use_spectral_norm=False):
+ super().__init__()
+ norm_f = weight_norm if use_spectral_norm is False else spectral_norm
+ self.convs = nn.ModuleList(
+ [
+ norm_f(Conv1d(1, 128, 15, 1, padding=7)),
+ norm_f(Conv1d(128, 128, 41, 2, groups=4, padding=20)),
+ norm_f(Conv1d(128, 256, 41, 2, groups=16, padding=20)),
+ norm_f(Conv1d(256, 512, 41, 4, groups=16, padding=20)),
+ norm_f(Conv1d(512, 1024, 41, 4, groups=16, padding=20)),
+ norm_f(Conv1d(1024, 1024, 41, 1, groups=16, padding=20)),
+ norm_f(Conv1d(1024, 1024, 5, 1, padding=2)),
+ ]
+ )
+ self.conv_post = norm_f(Conv1d(1024, 1, 3, 1, padding=1))
+
+ def forward(self, x):
+ fmap = []
+ for l in self.convs:
+ x = l(x)
+ x = F.leaky_relu(x, LRELU_SLOPE)
+ fmap.append(x)
+ x = self.conv_post(x)
+ fmap.append(x)
+ x = torch.flatten(x, 1, -1)
+
+ return x, fmap
+
+
+class MultiScaleDiscriminator(torch.nn.Module):
+ def __init__(self):
+ super().__init__()
+ self.discriminators = nn.ModuleList(
+ [
+ DiscriminatorS(use_spectral_norm=True),
+ DiscriminatorS(),
+ DiscriminatorS(),
+ ]
+ )
+ self.meanpools = nn.ModuleList([AvgPool1d(4, 2, padding=2), AvgPool1d(4, 2, padding=2)])
+
+ def forward(self, y, y_hat):
+ y_d_rs = []
+ y_d_gs = []
+ fmap_rs = []
+ fmap_gs = []
+ for i, d in enumerate(self.discriminators):
+ if i != 0:
+ y = self.meanpools[i - 1](y)
+ y_hat = self.meanpools[i - 1](y_hat)
+ y_d_r, fmap_r = d(y)
+ y_d_g, fmap_g = d(y_hat)
+ y_d_rs.append(y_d_r)
+ fmap_rs.append(fmap_r)
+ y_d_gs.append(y_d_g)
+ fmap_gs.append(fmap_g)
+
+ return y_d_rs, y_d_gs, fmap_rs, fmap_gs
+
+
+def feature_loss(fmap_r, fmap_g):
+ loss = 0
+ for dr, dg in zip(fmap_r, fmap_g):
+ for rl, gl in zip(dr, dg):
+ loss += torch.mean(torch.abs(rl - gl))
+
+ return loss * 2
+
+
+def discriminator_loss(disc_real_outputs, disc_generated_outputs):
+ loss = 0
+ r_losses = []
+ g_losses = []
+ for dr, dg in zip(disc_real_outputs, disc_generated_outputs):
+ r_loss = torch.mean((1 - dr) ** 2)
+ g_loss = torch.mean(dg**2)
+ loss += r_loss + g_loss
+ r_losses.append(r_loss.item())
+ g_losses.append(g_loss.item())
+
+ return loss, r_losses, g_losses
+
+
+def generator_loss(disc_outputs):
+ loss = 0
+ gen_losses = []
+ for dg in disc_outputs:
+ l = torch.mean((1 - dg) ** 2)
+ gen_losses.append(l)
+ loss += l
+
+ return loss, gen_losses
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/xutils.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/xutils.py
new file mode 100644
index 0000000000000000000000000000000000000000..eefadcb7a1d0bf9015e636b88fee3e22c9771bc5
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/hifigan/xutils.py
@@ -0,0 +1,60 @@
+""" from https://github.com/jik876/hifi-gan """
+
+import glob
+import os
+
+import matplotlib
+import torch
+from torch.nn.utils import weight_norm
+
+matplotlib.use("Agg")
+import matplotlib.pylab as plt
+
+
+def plot_spectrogram(spectrogram):
+ fig, ax = plt.subplots(figsize=(10, 2))
+ im = ax.imshow(spectrogram, aspect="auto", origin="lower", interpolation="none")
+ plt.colorbar(im, ax=ax)
+
+ fig.canvas.draw()
+ plt.close()
+
+ return fig
+
+
+def init_weights(m, mean=0.0, std=0.01):
+ classname = m.__class__.__name__
+ if classname.find("Conv") != -1:
+ m.weight.data.normal_(mean, std)
+
+
+def apply_weight_norm(m):
+ classname = m.__class__.__name__
+ if classname.find("Conv") != -1:
+ weight_norm(m)
+
+
+def get_padding(kernel_size, dilation=1):
+ return int((kernel_size * dilation - dilation) / 2)
+
+
+def load_checkpoint(filepath, device):
+ assert os.path.isfile(filepath)
+ print(f"Loading '{filepath}'")
+ checkpoint_dict = torch.load(filepath, map_location=device)
+ print("Complete.")
+ return checkpoint_dict
+
+
+def save_checkpoint(filepath, obj):
+ print(f"Saving checkpoint to {filepath}")
+ torch.save(obj, filepath)
+ print("Complete.")
+
+
+def scan_checkpoint(cp_dir, prefix):
+ pattern = os.path.join(cp_dir, prefix + "????????")
+ cp_list = glob.glob(pattern)
+ if len(cp_list) == 0:
+ return None
+ return sorted(cp_list)[-1]
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/baselightningmodule.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/baselightningmodule.py
new file mode 100644
index 0000000000000000000000000000000000000000..f8abe7b44f44688ff00720f7e56e34b75894d176
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/baselightningmodule.py
@@ -0,0 +1,210 @@
+"""
+This is a base lightning module that can be used to train a model.
+The benefit of this abstraction is that all the logic outside of model definition can be reused for different models.
+"""
+import inspect
+from abc import ABC
+from typing import Any, Dict
+
+import torch
+from lightning import LightningModule
+from lightning.pytorch.utilities import grad_norm
+
+from matcha import utils
+from matcha.utils.utils import plot_tensor
+
+log = utils.get_pylogger(__name__)
+
+
+class BaseLightningClass(LightningModule, ABC):
+ def update_data_statistics(self, data_statistics):
+ if data_statistics is None:
+ data_statistics = {
+ "mel_mean": 0.0,
+ "mel_std": 1.0,
+ }
+
+ self.register_buffer("mel_mean", torch.tensor(data_statistics["mel_mean"]))
+ self.register_buffer("mel_std", torch.tensor(data_statistics["mel_std"]))
+
+ def configure_optimizers(self) -> Any:
+ optimizer = self.hparams.optimizer(params=self.parameters())
+ if self.hparams.scheduler not in (None, {}):
+ scheduler_args = {}
+ # Manage last epoch for exponential schedulers
+ if "last_epoch" in inspect.signature(self.hparams.scheduler.scheduler).parameters:
+ if hasattr(self, "ckpt_loaded_epoch"):
+ current_epoch = self.ckpt_loaded_epoch - 1
+ else:
+ current_epoch = -1
+
+ scheduler_args.update({"optimizer": optimizer})
+ scheduler = self.hparams.scheduler.scheduler(**scheduler_args)
+ scheduler.last_epoch = current_epoch
+ return {
+ "optimizer": optimizer,
+ "lr_scheduler": {
+ "scheduler": scheduler,
+ "interval": self.hparams.scheduler.lightning_args.interval,
+ "frequency": self.hparams.scheduler.lightning_args.frequency,
+ "name": "learning_rate",
+ },
+ }
+
+ return {"optimizer": optimizer}
+
+ def get_losses(self, batch):
+ x, x_lengths = batch["x"], batch["x_lengths"]
+ y, y_lengths = batch["y"], batch["y_lengths"]
+ spks = batch["spks"]
+
+ dur_loss, prior_loss, diff_loss, *_ = self(
+ x=x,
+ x_lengths=x_lengths,
+ y=y,
+ y_lengths=y_lengths,
+ spks=spks,
+ out_size=self.out_size,
+ durations=batch["durations"],
+ )
+ return {
+ "dur_loss": dur_loss,
+ "prior_loss": prior_loss,
+ "diff_loss": diff_loss,
+ }
+
+ def on_load_checkpoint(self, checkpoint: Dict[str, Any]) -> None:
+ self.ckpt_loaded_epoch = checkpoint["epoch"] # pylint: disable=attribute-defined-outside-init
+
+ def training_step(self, batch: Any, batch_idx: int):
+ loss_dict = self.get_losses(batch)
+ self.log(
+ "step",
+ float(self.global_step),
+ on_step=True,
+ prog_bar=True,
+ logger=True,
+ sync_dist=True,
+ )
+
+ self.log(
+ "sub_loss/train_dur_loss",
+ loss_dict["dur_loss"],
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ sync_dist=True,
+ )
+ self.log(
+ "sub_loss/train_prior_loss",
+ loss_dict["prior_loss"],
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ sync_dist=True,
+ )
+ self.log(
+ "sub_loss/train_diff_loss",
+ loss_dict["diff_loss"],
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ sync_dist=True,
+ )
+
+ total_loss = sum(loss_dict.values())
+ self.log(
+ "loss/train",
+ total_loss,
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ prog_bar=True,
+ sync_dist=True,
+ )
+
+ return {"loss": total_loss, "log": loss_dict}
+
+ def validation_step(self, batch: Any, batch_idx: int):
+ loss_dict = self.get_losses(batch)
+ self.log(
+ "sub_loss/val_dur_loss",
+ loss_dict["dur_loss"],
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ sync_dist=True,
+ )
+ self.log(
+ "sub_loss/val_prior_loss",
+ loss_dict["prior_loss"],
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ sync_dist=True,
+ )
+ self.log(
+ "sub_loss/val_diff_loss",
+ loss_dict["diff_loss"],
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ sync_dist=True,
+ )
+
+ total_loss = sum(loss_dict.values())
+ self.log(
+ "loss/val",
+ total_loss,
+ on_step=True,
+ on_epoch=True,
+ logger=True,
+ prog_bar=True,
+ sync_dist=True,
+ )
+
+ return total_loss
+
+ def on_validation_end(self) -> None:
+ if self.trainer.is_global_zero:
+ one_batch = next(iter(self.trainer.val_dataloaders))
+ if self.current_epoch == 0:
+ log.debug("Plotting original samples")
+ for i in range(2):
+ y = one_batch["y"][i].unsqueeze(0).to(self.device)
+ self.logger.experiment.add_image(
+ f"original/{i}",
+ plot_tensor(y.squeeze().cpu()),
+ self.current_epoch,
+ dataformats="HWC",
+ )
+
+ log.debug("Synthesising...")
+ for i in range(2):
+ x = one_batch["x"][i].unsqueeze(0).to(self.device)
+ x_lengths = one_batch["x_lengths"][i].unsqueeze(0).to(self.device)
+ spks = one_batch["spks"][i].unsqueeze(0).to(self.device) if one_batch["spks"] is not None else None
+ output = self.synthesise(x[:, :x_lengths], x_lengths, n_timesteps=10, spks=spks)
+ y_enc, y_dec = output["encoder_outputs"], output["decoder_outputs"]
+ attn = output["attn"]
+ self.logger.experiment.add_image(
+ f"generated_enc/{i}",
+ plot_tensor(y_enc.squeeze().cpu()),
+ self.current_epoch,
+ dataformats="HWC",
+ )
+ self.logger.experiment.add_image(
+ f"generated_dec/{i}",
+ plot_tensor(y_dec.squeeze().cpu()),
+ self.current_epoch,
+ dataformats="HWC",
+ )
+ self.logger.experiment.add_image(
+ f"alignment/{i}",
+ plot_tensor(attn.squeeze().cpu()),
+ self.current_epoch,
+ dataformats="HWC",
+ )
+
+ def on_before_optimizer_step(self, optimizer):
+ self.log_dict({f"grad_norm/{k}": v for k, v in grad_norm(self, norm_type=2).items()})
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/decoder.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/decoder.py
new file mode 100644
index 0000000000000000000000000000000000000000..1137cd7008e9d07b4f306926a82e44c2b2cddbdf
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/decoder.py
@@ -0,0 +1,443 @@
+import math
+from typing import Optional
+
+import torch
+import torch.nn as nn
+import torch.nn.functional as F
+from conformer import ConformerBlock
+from diffusers.models.activations import get_activation
+from einops import pack, rearrange, repeat
+
+from matcha.models.components.transformer import BasicTransformerBlock
+
+
+class SinusoidalPosEmb(torch.nn.Module):
+ def __init__(self, dim):
+ super().__init__()
+ self.dim = dim
+ assert self.dim % 2 == 0, "SinusoidalPosEmb requires dim to be even"
+
+ def forward(self, x, scale=1000):
+ if x.ndim < 1:
+ x = x.unsqueeze(0)
+ device = x.device
+ half_dim = self.dim // 2
+ emb = math.log(10000) / (half_dim - 1)
+ emb = torch.exp(torch.arange(half_dim, device=device).float() * -emb)
+ emb = scale * x.unsqueeze(1) * emb.unsqueeze(0)
+ emb = torch.cat((emb.sin(), emb.cos()), dim=-1)
+ return emb
+
+
+class Block1D(torch.nn.Module):
+ def __init__(self, dim, dim_out, groups=8):
+ super().__init__()
+ self.block = torch.nn.Sequential(
+ torch.nn.Conv1d(dim, dim_out, 3, padding=1),
+ torch.nn.GroupNorm(groups, dim_out),
+ nn.Mish(),
+ )
+
+ def forward(self, x, mask):
+ output = self.block(x * mask)
+ return output * mask
+
+
+class ResnetBlock1D(torch.nn.Module):
+ def __init__(self, dim, dim_out, time_emb_dim, groups=8):
+ super().__init__()
+ self.mlp = torch.nn.Sequential(nn.Mish(), torch.nn.Linear(time_emb_dim, dim_out))
+
+ self.block1 = Block1D(dim, dim_out, groups=groups)
+ self.block2 = Block1D(dim_out, dim_out, groups=groups)
+
+ self.res_conv = torch.nn.Conv1d(dim, dim_out, 1)
+
+ def forward(self, x, mask, time_emb):
+ h = self.block1(x, mask)
+ h += self.mlp(time_emb).unsqueeze(-1)
+ h = self.block2(h, mask)
+ output = h + self.res_conv(x * mask)
+ return output
+
+
+class Downsample1D(nn.Module):
+ def __init__(self, dim):
+ super().__init__()
+ self.conv = torch.nn.Conv1d(dim, dim, 3, 2, 1)
+
+ def forward(self, x):
+ return self.conv(x)
+
+
+class TimestepEmbedding(nn.Module):
+ def __init__(
+ self,
+ in_channels: int,
+ time_embed_dim: int,
+ act_fn: str = "silu",
+ out_dim: int = None,
+ post_act_fn: Optional[str] = None,
+ cond_proj_dim=None,
+ ):
+ super().__init__()
+
+ self.linear_1 = nn.Linear(in_channels, time_embed_dim)
+
+ if cond_proj_dim is not None:
+ self.cond_proj = nn.Linear(cond_proj_dim, in_channels, bias=False)
+ else:
+ self.cond_proj = None
+
+ self.act = get_activation(act_fn)
+
+ if out_dim is not None:
+ time_embed_dim_out = out_dim
+ else:
+ time_embed_dim_out = time_embed_dim
+ self.linear_2 = nn.Linear(time_embed_dim, time_embed_dim_out)
+
+ if post_act_fn is None:
+ self.post_act = None
+ else:
+ self.post_act = get_activation(post_act_fn)
+
+ def forward(self, sample, condition=None):
+ if condition is not None:
+ sample = sample + self.cond_proj(condition)
+ sample = self.linear_1(sample)
+
+ if self.act is not None:
+ sample = self.act(sample)
+
+ sample = self.linear_2(sample)
+
+ if self.post_act is not None:
+ sample = self.post_act(sample)
+ return sample
+
+
+class Upsample1D(nn.Module):
+ """A 1D upsampling layer with an optional convolution.
+
+ Parameters:
+ channels (`int`):
+ number of channels in the inputs and outputs.
+ use_conv (`bool`, default `False`):
+ option to use a convolution.
+ use_conv_transpose (`bool`, default `False`):
+ option to use a convolution transpose.
+ out_channels (`int`, optional):
+ number of output channels. Defaults to `channels`.
+ """
+
+ def __init__(self, channels, use_conv=False, use_conv_transpose=True, out_channels=None, name="conv"):
+ super().__init__()
+ self.channels = channels
+ self.out_channels = out_channels or channels
+ self.use_conv = use_conv
+ self.use_conv_transpose = use_conv_transpose
+ self.name = name
+
+ self.conv = None
+ if use_conv_transpose:
+ self.conv = nn.ConvTranspose1d(channels, self.out_channels, 4, 2, 1)
+ elif use_conv:
+ self.conv = nn.Conv1d(self.channels, self.out_channels, 3, padding=1)
+
+ def forward(self, inputs):
+ assert inputs.shape[1] == self.channels
+ if self.use_conv_transpose:
+ return self.conv(inputs)
+
+ outputs = F.interpolate(inputs, scale_factor=2.0, mode="nearest")
+
+ if self.use_conv:
+ outputs = self.conv(outputs)
+
+ return outputs
+
+
+class ConformerWrapper(ConformerBlock):
+ def __init__( # pylint: disable=useless-super-delegation
+ self,
+ *,
+ dim,
+ dim_head=64,
+ heads=8,
+ ff_mult=4,
+ conv_expansion_factor=2,
+ conv_kernel_size=31,
+ attn_dropout=0,
+ ff_dropout=0,
+ conv_dropout=0,
+ conv_causal=False,
+ ):
+ super().__init__(
+ dim=dim,
+ dim_head=dim_head,
+ heads=heads,
+ ff_mult=ff_mult,
+ conv_expansion_factor=conv_expansion_factor,
+ conv_kernel_size=conv_kernel_size,
+ attn_dropout=attn_dropout,
+ ff_dropout=ff_dropout,
+ conv_dropout=conv_dropout,
+ conv_causal=conv_causal,
+ )
+
+ def forward(
+ self,
+ hidden_states,
+ attention_mask,
+ encoder_hidden_states=None,
+ encoder_attention_mask=None,
+ timestep=None,
+ ):
+ return super().forward(x=hidden_states, mask=attention_mask.bool())
+
+
+class Decoder(nn.Module):
+ def __init__(
+ self,
+ in_channels,
+ out_channels,
+ channels=(256, 256),
+ dropout=0.05,
+ attention_head_dim=64,
+ n_blocks=1,
+ num_mid_blocks=2,
+ num_heads=4,
+ act_fn="snake",
+ down_block_type="transformer",
+ mid_block_type="transformer",
+ up_block_type="transformer",
+ ):
+ super().__init__()
+ channels = tuple(channels)
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+
+ self.time_embeddings = SinusoidalPosEmb(in_channels)
+ time_embed_dim = channels[0] * 4
+ self.time_mlp = TimestepEmbedding(
+ in_channels=in_channels,
+ time_embed_dim=time_embed_dim,
+ act_fn="silu",
+ )
+
+ self.down_blocks = nn.ModuleList([])
+ self.mid_blocks = nn.ModuleList([])
+ self.up_blocks = nn.ModuleList([])
+
+ output_channel = in_channels
+ for i in range(len(channels)): # pylint: disable=consider-using-enumerate
+ input_channel = output_channel
+ output_channel = channels[i]
+ is_last = i == len(channels) - 1
+ resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)
+ transformer_blocks = nn.ModuleList(
+ [
+ self.get_block(
+ down_block_type,
+ output_channel,
+ attention_head_dim,
+ num_heads,
+ dropout,
+ act_fn,
+ )
+ for _ in range(n_blocks)
+ ]
+ )
+ downsample = (
+ Downsample1D(output_channel) if not is_last else nn.Conv1d(output_channel, output_channel, 3, padding=1)
+ )
+
+ self.down_blocks.append(nn.ModuleList([resnet, transformer_blocks, downsample]))
+
+ for i in range(num_mid_blocks):
+ input_channel = channels[-1]
+ out_channels = channels[-1]
+
+ resnet = ResnetBlock1D(dim=input_channel, dim_out=output_channel, time_emb_dim=time_embed_dim)
+
+ transformer_blocks = nn.ModuleList(
+ [
+ self.get_block(
+ mid_block_type,
+ output_channel,
+ attention_head_dim,
+ num_heads,
+ dropout,
+ act_fn,
+ )
+ for _ in range(n_blocks)
+ ]
+ )
+
+ self.mid_blocks.append(nn.ModuleList([resnet, transformer_blocks]))
+
+ channels = channels[::-1] + (channels[0],)
+ for i in range(len(channels) - 1):
+ input_channel = channels[i]
+ output_channel = channels[i + 1]
+ is_last = i == len(channels) - 2
+
+ resnet = ResnetBlock1D(
+ dim=2 * input_channel,
+ dim_out=output_channel,
+ time_emb_dim=time_embed_dim,
+ )
+ transformer_blocks = nn.ModuleList(
+ [
+ self.get_block(
+ up_block_type,
+ output_channel,
+ attention_head_dim,
+ num_heads,
+ dropout,
+ act_fn,
+ )
+ for _ in range(n_blocks)
+ ]
+ )
+ upsample = (
+ Upsample1D(output_channel, use_conv_transpose=True)
+ if not is_last
+ else nn.Conv1d(output_channel, output_channel, 3, padding=1)
+ )
+
+ self.up_blocks.append(nn.ModuleList([resnet, transformer_blocks, upsample]))
+
+ self.final_block = Block1D(channels[-1], channels[-1])
+ self.final_proj = nn.Conv1d(channels[-1], self.out_channels, 1)
+
+ self.initialize_weights()
+ # nn.init.normal_(self.final_proj.weight)
+
+ @staticmethod
+ def get_block(block_type, dim, attention_head_dim, num_heads, dropout, act_fn):
+ if block_type == "conformer":
+ block = ConformerWrapper(
+ dim=dim,
+ dim_head=attention_head_dim,
+ heads=num_heads,
+ ff_mult=1,
+ conv_expansion_factor=2,
+ ff_dropout=dropout,
+ attn_dropout=dropout,
+ conv_dropout=dropout,
+ conv_kernel_size=31,
+ )
+ elif block_type == "transformer":
+ block = BasicTransformerBlock(
+ dim=dim,
+ num_attention_heads=num_heads,
+ attention_head_dim=attention_head_dim,
+ dropout=dropout,
+ activation_fn=act_fn,
+ )
+ else:
+ raise ValueError(f"Unknown block type {block_type}")
+
+ return block
+
+ def initialize_weights(self):
+ for m in self.modules():
+ if isinstance(m, nn.Conv1d):
+ nn.init.kaiming_normal_(m.weight, nonlinearity="relu")
+
+ if m.bias is not None:
+ nn.init.constant_(m.bias, 0)
+
+ elif isinstance(m, nn.GroupNorm):
+ nn.init.constant_(m.weight, 1)
+ nn.init.constant_(m.bias, 0)
+
+ elif isinstance(m, nn.Linear):
+ nn.init.kaiming_normal_(m.weight, nonlinearity="relu")
+
+ if m.bias is not None:
+ nn.init.constant_(m.bias, 0)
+
+ def forward(self, x, mask, mu, t, spks=None, cond=None):
+ """Forward pass of the UNet1DConditional model.
+
+ Args:
+ x (torch.Tensor): shape (batch_size, in_channels, time)
+ mask (_type_): shape (batch_size, 1, time)
+ t (_type_): shape (batch_size)
+ spks (_type_, optional): shape: (batch_size, condition_channels). Defaults to None.
+ cond (_type_, optional): placeholder for future use. Defaults to None.
+
+ Raises:
+ ValueError: _description_
+ ValueError: _description_
+
+ Returns:
+ _type_: _description_
+ """
+
+ t = self.time_embeddings(t)
+ t = self.time_mlp(t)
+
+ x = pack([x, mu], "b * t")[0]
+
+ if spks is not None:
+ spks = repeat(spks, "b c -> b c t", t=x.shape[-1])
+ x = pack([x, spks], "b * t")[0]
+
+ hiddens = []
+ masks = [mask]
+ for resnet, transformer_blocks, downsample in self.down_blocks:
+ mask_down = masks[-1]
+ x = resnet(x, mask_down, t)
+ x = rearrange(x, "b c t -> b t c")
+ mask_down = rearrange(mask_down, "b 1 t -> b t")
+ for transformer_block in transformer_blocks:
+ x = transformer_block(
+ hidden_states=x,
+ attention_mask=mask_down,
+ timestep=t,
+ )
+ x = rearrange(x, "b t c -> b c t")
+ mask_down = rearrange(mask_down, "b t -> b 1 t")
+ hiddens.append(x) # Save hidden states for skip connections
+ x = downsample(x * mask_down)
+ masks.append(mask_down[:, :, ::2])
+
+ masks = masks[:-1]
+ mask_mid = masks[-1]
+
+ for resnet, transformer_blocks in self.mid_blocks:
+ x = resnet(x, mask_mid, t)
+ x = rearrange(x, "b c t -> b t c")
+ mask_mid = rearrange(mask_mid, "b 1 t -> b t")
+ for transformer_block in transformer_blocks:
+ x = transformer_block(
+ hidden_states=x,
+ attention_mask=mask_mid,
+ timestep=t,
+ )
+ x = rearrange(x, "b t c -> b c t")
+ mask_mid = rearrange(mask_mid, "b t -> b 1 t")
+
+ for resnet, transformer_blocks, upsample in self.up_blocks:
+ mask_up = masks.pop()
+ x = resnet(pack([x, hiddens.pop()], "b * t")[0], mask_up, t)
+ x = rearrange(x, "b c t -> b t c")
+ mask_up = rearrange(mask_up, "b 1 t -> b t")
+ for transformer_block in transformer_blocks:
+ x = transformer_block(
+ hidden_states=x,
+ attention_mask=mask_up,
+ timestep=t,
+ )
+ x = rearrange(x, "b t c -> b c t")
+ mask_up = rearrange(mask_up, "b t -> b 1 t")
+ x = upsample(x * mask_up)
+
+ x = self.final_block(x, mask_up)
+ output = self.final_proj(x * mask_up)
+
+ return output * mask
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/flow_matching.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/flow_matching.py
new file mode 100644
index 0000000000000000000000000000000000000000..5cad7431ef66a8d11da32a77c1af7f6e31d6b774
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/flow_matching.py
@@ -0,0 +1,132 @@
+from abc import ABC
+
+import torch
+import torch.nn.functional as F
+
+from matcha.models.components.decoder import Decoder
+from matcha.utils.pylogger import get_pylogger
+
+log = get_pylogger(__name__)
+
+
+class BASECFM(torch.nn.Module, ABC):
+ def __init__(
+ self,
+ n_feats,
+ cfm_params,
+ n_spks=1,
+ spk_emb_dim=128,
+ ):
+ super().__init__()
+ self.n_feats = n_feats
+ self.n_spks = n_spks
+ self.spk_emb_dim = spk_emb_dim
+ self.solver = cfm_params.solver
+ if hasattr(cfm_params, "sigma_min"):
+ self.sigma_min = cfm_params.sigma_min
+ else:
+ self.sigma_min = 1e-4
+
+ self.estimator = None
+
+ @torch.inference_mode()
+ def forward(self, mu, mask, n_timesteps, temperature=1.0, spks=None, cond=None):
+ """Forward diffusion
+
+ Args:
+ mu (torch.Tensor): output of encoder
+ shape: (batch_size, n_feats, mel_timesteps)
+ mask (torch.Tensor): output_mask
+ shape: (batch_size, 1, mel_timesteps)
+ n_timesteps (int): number of diffusion steps
+ temperature (float, optional): temperature for scaling noise. Defaults to 1.0.
+ spks (torch.Tensor, optional): speaker ids. Defaults to None.
+ shape: (batch_size, spk_emb_dim)
+ cond: Not used but kept for future purposes
+
+ Returns:
+ sample: generated mel-spectrogram
+ shape: (batch_size, n_feats, mel_timesteps)
+ """
+ z = torch.randn_like(mu) * temperature
+ t_span = torch.linspace(0, 1, n_timesteps + 1, device=mu.device)
+ return self.solve_euler(z, t_span=t_span, mu=mu, mask=mask, spks=spks, cond=cond)
+
+ def solve_euler(self, x, t_span, mu, mask, spks, cond):
+ """
+ Fixed euler solver for ODEs.
+ Args:
+ x (torch.Tensor): random noise
+ t_span (torch.Tensor): n_timesteps interpolated
+ shape: (n_timesteps + 1,)
+ mu (torch.Tensor): output of encoder
+ shape: (batch_size, n_feats, mel_timesteps)
+ mask (torch.Tensor): output_mask
+ shape: (batch_size, 1, mel_timesteps)
+ spks (torch.Tensor, optional): speaker ids. Defaults to None.
+ shape: (batch_size, spk_emb_dim)
+ cond: Not used but kept for future purposes
+ """
+ t, _, dt = t_span[0], t_span[-1], t_span[1] - t_span[0]
+
+ # I am storing this because I can later plot it by putting a debugger here and saving it to a file
+ # Or in future might add like a return_all_steps flag
+ sol = []
+
+ for step in range(1, len(t_span)):
+ dphi_dt = self.estimator(x, mask, mu, t, spks, cond)
+
+ x = x + dt * dphi_dt
+ t = t + dt
+ sol.append(x)
+ if step < len(t_span) - 1:
+ dt = t_span[step + 1] - t
+
+ return sol[-1]
+
+ def compute_loss(self, x1, mask, mu, spks=None, cond=None):
+ """Computes diffusion loss
+
+ Args:
+ x1 (torch.Tensor): Target
+ shape: (batch_size, n_feats, mel_timesteps)
+ mask (torch.Tensor): target mask
+ shape: (batch_size, 1, mel_timesteps)
+ mu (torch.Tensor): output of encoder
+ shape: (batch_size, n_feats, mel_timesteps)
+ spks (torch.Tensor, optional): speaker embedding. Defaults to None.
+ shape: (batch_size, spk_emb_dim)
+
+ Returns:
+ loss: conditional flow matching loss
+ y: conditional flow
+ shape: (batch_size, n_feats, mel_timesteps)
+ """
+ b, _, t = mu.shape
+
+ # random timestep
+ t = torch.rand([b, 1, 1], device=mu.device, dtype=mu.dtype)
+ # sample noise p(x_0)
+ z = torch.randn_like(x1)
+
+ y = (1 - (1 - self.sigma_min) * t) * z + t * x1
+ u = x1 - (1 - self.sigma_min) * z
+
+ loss = F.mse_loss(self.estimator(y, mask, mu, t.squeeze(), spks), u, reduction="sum") / (
+ torch.sum(mask) * u.shape[1]
+ )
+ return loss, y
+
+
+class CFM(BASECFM):
+ def __init__(self, in_channels, out_channel, cfm_params, decoder_params, n_spks=1, spk_emb_dim=64):
+ super().__init__(
+ n_feats=in_channels,
+ cfm_params=cfm_params,
+ n_spks=n_spks,
+ spk_emb_dim=spk_emb_dim,
+ )
+
+ in_channels = in_channels + (spk_emb_dim if n_spks > 1 else 0)
+ # Just change the architecture of the estimator here
+ self.estimator = Decoder(in_channels=in_channels, out_channels=out_channel, **decoder_params)
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/text_encoder.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/text_encoder.py
new file mode 100644
index 0000000000000000000000000000000000000000..a388d05d6351fa2c9d9632fed0942d51fbec067b
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/text_encoder.py
@@ -0,0 +1,410 @@
+""" from https://github.com/jaywalnut310/glow-tts """
+
+import math
+
+import torch
+import torch.nn as nn
+from einops import rearrange
+
+import matcha.utils as utils
+from matcha.utils.model import sequence_mask
+
+log = utils.get_pylogger(__name__)
+
+
+class LayerNorm(nn.Module):
+ def __init__(self, channels, eps=1e-4):
+ super().__init__()
+ self.channels = channels
+ self.eps = eps
+
+ self.gamma = torch.nn.Parameter(torch.ones(channels))
+ self.beta = torch.nn.Parameter(torch.zeros(channels))
+
+ def forward(self, x):
+ n_dims = len(x.shape)
+ mean = torch.mean(x, 1, keepdim=True)
+ variance = torch.mean((x - mean) ** 2, 1, keepdim=True)
+
+ x = (x - mean) * torch.rsqrt(variance + self.eps)
+
+ shape = [1, -1] + [1] * (n_dims - 2)
+ x = x * self.gamma.view(*shape) + self.beta.view(*shape)
+ return x
+
+
+class ConvReluNorm(nn.Module):
+ def __init__(self, in_channels, hidden_channels, out_channels, kernel_size, n_layers, p_dropout):
+ super().__init__()
+ self.in_channels = in_channels
+ self.hidden_channels = hidden_channels
+ self.out_channels = out_channels
+ self.kernel_size = kernel_size
+ self.n_layers = n_layers
+ self.p_dropout = p_dropout
+
+ self.conv_layers = torch.nn.ModuleList()
+ self.norm_layers = torch.nn.ModuleList()
+ self.conv_layers.append(torch.nn.Conv1d(in_channels, hidden_channels, kernel_size, padding=kernel_size // 2))
+ self.norm_layers.append(LayerNorm(hidden_channels))
+ self.relu_drop = torch.nn.Sequential(torch.nn.ReLU(), torch.nn.Dropout(p_dropout))
+ for _ in range(n_layers - 1):
+ self.conv_layers.append(
+ torch.nn.Conv1d(hidden_channels, hidden_channels, kernel_size, padding=kernel_size // 2)
+ )
+ self.norm_layers.append(LayerNorm(hidden_channels))
+ self.proj = torch.nn.Conv1d(hidden_channels, out_channels, 1)
+ self.proj.weight.data.zero_()
+ self.proj.bias.data.zero_()
+
+ def forward(self, x, x_mask):
+ x_org = x
+ for i in range(self.n_layers):
+ x = self.conv_layers[i](x * x_mask)
+ x = self.norm_layers[i](x)
+ x = self.relu_drop(x)
+ x = x_org + self.proj(x)
+ return x * x_mask
+
+
+class DurationPredictor(nn.Module):
+ def __init__(self, in_channels, filter_channels, kernel_size, p_dropout):
+ super().__init__()
+ self.in_channels = in_channels
+ self.filter_channels = filter_channels
+ self.p_dropout = p_dropout
+
+ self.drop = torch.nn.Dropout(p_dropout)
+ self.conv_1 = torch.nn.Conv1d(in_channels, filter_channels, kernel_size, padding=kernel_size // 2)
+ self.norm_1 = LayerNorm(filter_channels)
+ self.conv_2 = torch.nn.Conv1d(filter_channels, filter_channels, kernel_size, padding=kernel_size // 2)
+ self.norm_2 = LayerNorm(filter_channels)
+ self.proj = torch.nn.Conv1d(filter_channels, 1, 1)
+
+ def forward(self, x, x_mask):
+ x = self.conv_1(x * x_mask)
+ x = torch.relu(x)
+ x = self.norm_1(x)
+ x = self.drop(x)
+ x = self.conv_2(x * x_mask)
+ x = torch.relu(x)
+ x = self.norm_2(x)
+ x = self.drop(x)
+ x = self.proj(x * x_mask)
+ return x * x_mask
+
+
+class RotaryPositionalEmbeddings(nn.Module):
+ """
+ ## RoPE module
+
+ Rotary encoding transforms pairs of features by rotating in the 2D plane.
+ That is, it organizes the $d$ features as $\frac{d}{2}$ pairs.
+ Each pair can be considered a coordinate in a 2D plane, and the encoding will rotate it
+ by an angle depending on the position of the token.
+ """
+
+ def __init__(self, d: int, base: int = 10_000):
+ r"""
+ * `d` is the number of features $d$
+ * `base` is the constant used for calculating $\Theta$
+ """
+ super().__init__()
+
+ self.base = base
+ self.d = int(d)
+ self.cos_cached = None
+ self.sin_cached = None
+
+ def _build_cache(self, x: torch.Tensor):
+ r"""
+ Cache $\cos$ and $\sin$ values
+ """
+ # Return if cache is already built
+ if self.cos_cached is not None and x.shape[0] <= self.cos_cached.shape[0]:
+ return
+
+ # Get sequence length
+ seq_len = x.shape[0]
+
+ # $\Theta = {\theta_i = 10000^{-\frac{2(i-1)}{d}}, i \in [1, 2, ..., \frac{d}{2}]}$
+ theta = 1.0 / (self.base ** (torch.arange(0, self.d, 2).float() / self.d)).to(x.device)
+
+ # Create position indexes `[0, 1, ..., seq_len - 1]`
+ seq_idx = torch.arange(seq_len, device=x.device).float().to(x.device)
+
+ # Calculate the product of position index and $\theta_i$
+ idx_theta = torch.einsum("n,d->nd", seq_idx, theta)
+
+ # Concatenate so that for row $m$ we have
+ # $[m \theta_0, m \theta_1, ..., m \theta_{\frac{d}{2}}, m \theta_0, m \theta_1, ..., m \theta_{\frac{d}{2}}]$
+ idx_theta2 = torch.cat([idx_theta, idx_theta], dim=1)
+
+ # Cache them
+ self.cos_cached = idx_theta2.cos()[:, None, None, :]
+ self.sin_cached = idx_theta2.sin()[:, None, None, :]
+
+ def _neg_half(self, x: torch.Tensor):
+ # $\frac{d}{2}$
+ d_2 = self.d // 2
+
+ # Calculate $[-x^{(\frac{d}{2} + 1)}, -x^{(\frac{d}{2} + 2)}, ..., -x^{(d)}, x^{(1)}, x^{(2)}, ..., x^{(\frac{d}{2})}]$
+ return torch.cat([-x[:, :, :, d_2:], x[:, :, :, :d_2]], dim=-1)
+
+ def forward(self, x: torch.Tensor):
+ """
+ * `x` is the Tensor at the head of a key or a query with shape `[seq_len, batch_size, n_heads, d]`
+ """
+ # Cache $\cos$ and $\sin$ values
+ x = rearrange(x, "b h t d -> t b h d")
+
+ self._build_cache(x)
+
+ # Split the features, we can choose to apply rotary embeddings only to a partial set of features.
+ x_rope, x_pass = x[..., : self.d], x[..., self.d :]
+
+ # Calculate
+ # $[-x^{(\frac{d}{2} + 1)}, -x^{(\frac{d}{2} + 2)}, ..., -x^{(d)}, x^{(1)}, x^{(2)}, ..., x^{(\frac{d}{2})}]$
+ neg_half_x = self._neg_half(x_rope)
+
+ x_rope = (x_rope * self.cos_cached[: x.shape[0]]) + (neg_half_x * self.sin_cached[: x.shape[0]])
+
+ return rearrange(torch.cat((x_rope, x_pass), dim=-1), "t b h d -> b h t d")
+
+
+class MultiHeadAttention(nn.Module):
+ def __init__(
+ self,
+ channels,
+ out_channels,
+ n_heads,
+ heads_share=True,
+ p_dropout=0.0,
+ proximal_bias=False,
+ proximal_init=False,
+ ):
+ super().__init__()
+ assert channels % n_heads == 0
+
+ self.channels = channels
+ self.out_channels = out_channels
+ self.n_heads = n_heads
+ self.heads_share = heads_share
+ self.proximal_bias = proximal_bias
+ self.p_dropout = p_dropout
+ self.attn = None
+
+ self.k_channels = channels // n_heads
+ self.conv_q = torch.nn.Conv1d(channels, channels, 1)
+ self.conv_k = torch.nn.Conv1d(channels, channels, 1)
+ self.conv_v = torch.nn.Conv1d(channels, channels, 1)
+
+ # from https://nn.labml.ai/transformers/rope/index.html
+ self.query_rotary_pe = RotaryPositionalEmbeddings(self.k_channels * 0.5)
+ self.key_rotary_pe = RotaryPositionalEmbeddings(self.k_channels * 0.5)
+
+ self.conv_o = torch.nn.Conv1d(channels, out_channels, 1)
+ self.drop = torch.nn.Dropout(p_dropout)
+
+ torch.nn.init.xavier_uniform_(self.conv_q.weight)
+ torch.nn.init.xavier_uniform_(self.conv_k.weight)
+ if proximal_init:
+ self.conv_k.weight.data.copy_(self.conv_q.weight.data)
+ self.conv_k.bias.data.copy_(self.conv_q.bias.data)
+ torch.nn.init.xavier_uniform_(self.conv_v.weight)
+
+ def forward(self, x, c, attn_mask=None):
+ q = self.conv_q(x)
+ k = self.conv_k(c)
+ v = self.conv_v(c)
+
+ x, self.attn = self.attention(q, k, v, mask=attn_mask)
+
+ x = self.conv_o(x)
+ return x
+
+ def attention(self, query, key, value, mask=None):
+ b, d, t_s, t_t = (*key.size(), query.size(2))
+ query = rearrange(query, "b (h c) t-> b h t c", h=self.n_heads)
+ key = rearrange(key, "b (h c) t-> b h t c", h=self.n_heads)
+ value = rearrange(value, "b (h c) t-> b h t c", h=self.n_heads)
+
+ query = self.query_rotary_pe(query)
+ key = self.key_rotary_pe(key)
+
+ scores = torch.matmul(query, key.transpose(-2, -1)) / math.sqrt(self.k_channels)
+
+ if self.proximal_bias:
+ assert t_s == t_t, "Proximal bias is only available for self-attention."
+ scores = scores + self._attention_bias_proximal(t_s).to(device=scores.device, dtype=scores.dtype)
+ if mask is not None:
+ scores = scores.masked_fill(mask == 0, -1e4)
+ p_attn = torch.nn.functional.softmax(scores, dim=-1)
+ p_attn = self.drop(p_attn)
+ output = torch.matmul(p_attn, value)
+ output = output.transpose(2, 3).contiguous().view(b, d, t_t)
+ return output, p_attn
+
+ @staticmethod
+ def _attention_bias_proximal(length):
+ r = torch.arange(length, dtype=torch.float32)
+ diff = torch.unsqueeze(r, 0) - torch.unsqueeze(r, 1)
+ return torch.unsqueeze(torch.unsqueeze(-torch.log1p(torch.abs(diff)), 0), 0)
+
+
+class FFN(nn.Module):
+ def __init__(self, in_channels, out_channels, filter_channels, kernel_size, p_dropout=0.0):
+ super().__init__()
+ self.in_channels = in_channels
+ self.out_channels = out_channels
+ self.filter_channels = filter_channels
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+
+ self.conv_1 = torch.nn.Conv1d(in_channels, filter_channels, kernel_size, padding=kernel_size // 2)
+ self.conv_2 = torch.nn.Conv1d(filter_channels, out_channels, kernel_size, padding=kernel_size // 2)
+ self.drop = torch.nn.Dropout(p_dropout)
+
+ def forward(self, x, x_mask):
+ x = self.conv_1(x * x_mask)
+ x = torch.relu(x)
+ x = self.drop(x)
+ x = self.conv_2(x * x_mask)
+ return x * x_mask
+
+
+class Encoder(nn.Module):
+ def __init__(
+ self,
+ hidden_channels,
+ filter_channels,
+ n_heads,
+ n_layers,
+ kernel_size=1,
+ p_dropout=0.0,
+ **kwargs,
+ ):
+ super().__init__()
+ self.hidden_channels = hidden_channels
+ self.filter_channels = filter_channels
+ self.n_heads = n_heads
+ self.n_layers = n_layers
+ self.kernel_size = kernel_size
+ self.p_dropout = p_dropout
+
+ self.drop = torch.nn.Dropout(p_dropout)
+ self.attn_layers = torch.nn.ModuleList()
+ self.norm_layers_1 = torch.nn.ModuleList()
+ self.ffn_layers = torch.nn.ModuleList()
+ self.norm_layers_2 = torch.nn.ModuleList()
+ for _ in range(self.n_layers):
+ self.attn_layers.append(MultiHeadAttention(hidden_channels, hidden_channels, n_heads, p_dropout=p_dropout))
+ self.norm_layers_1.append(LayerNorm(hidden_channels))
+ self.ffn_layers.append(
+ FFN(
+ hidden_channels,
+ hidden_channels,
+ filter_channels,
+ kernel_size,
+ p_dropout=p_dropout,
+ )
+ )
+ self.norm_layers_2.append(LayerNorm(hidden_channels))
+
+ def forward(self, x, x_mask):
+ attn_mask = x_mask.unsqueeze(2) * x_mask.unsqueeze(-1)
+ for i in range(self.n_layers):
+ x = x * x_mask
+ y = self.attn_layers[i](x, x, attn_mask)
+ y = self.drop(y)
+ x = self.norm_layers_1[i](x + y)
+ y = self.ffn_layers[i](x, x_mask)
+ y = self.drop(y)
+ x = self.norm_layers_2[i](x + y)
+ x = x * x_mask
+ return x
+
+
+class TextEncoder(nn.Module):
+ def __init__(
+ self,
+ encoder_type,
+ encoder_params,
+ duration_predictor_params,
+ n_vocab,
+ n_spks=1,
+ spk_emb_dim=128,
+ ):
+ super().__init__()
+ self.encoder_type = encoder_type
+ self.n_vocab = n_vocab
+ self.n_feats = encoder_params.n_feats
+ self.n_channels = encoder_params.n_channels
+ self.spk_emb_dim = spk_emb_dim
+ self.n_spks = n_spks
+
+ self.emb = torch.nn.Embedding(n_vocab, self.n_channels)
+ torch.nn.init.normal_(self.emb.weight, 0.0, self.n_channels**-0.5)
+
+ if encoder_params.prenet:
+ self.prenet = ConvReluNorm(
+ self.n_channels,
+ self.n_channels,
+ self.n_channels,
+ kernel_size=5,
+ n_layers=3,
+ p_dropout=0.5,
+ )
+ else:
+ self.prenet = lambda x, x_mask: x
+
+ self.encoder = Encoder(
+ encoder_params.n_channels + (spk_emb_dim if n_spks > 1 else 0),
+ encoder_params.filter_channels,
+ encoder_params.n_heads,
+ encoder_params.n_layers,
+ encoder_params.kernel_size,
+ encoder_params.p_dropout,
+ )
+
+ self.proj_m = torch.nn.Conv1d(self.n_channels + (spk_emb_dim if n_spks > 1 else 0), self.n_feats, 1)
+ self.proj_w = DurationPredictor(
+ self.n_channels + (spk_emb_dim if n_spks > 1 else 0),
+ duration_predictor_params.filter_channels_dp,
+ duration_predictor_params.kernel_size,
+ duration_predictor_params.p_dropout,
+ )
+
+ def forward(self, x, x_lengths, spks=None):
+ """Run forward pass to the transformer based encoder and duration predictor
+
+ Args:
+ x (torch.Tensor): text input
+ shape: (batch_size, max_text_length)
+ x_lengths (torch.Tensor): text input lengths
+ shape: (batch_size,)
+ spks (torch.Tensor, optional): speaker ids. Defaults to None.
+ shape: (batch_size,)
+
+ Returns:
+ mu (torch.Tensor): average output of the encoder
+ shape: (batch_size, n_feats, max_text_length)
+ logw (torch.Tensor): log duration predicted by the duration predictor
+ shape: (batch_size, 1, max_text_length)
+ x_mask (torch.Tensor): mask for the text input
+ shape: (batch_size, 1, max_text_length)
+ """
+ x = self.emb(x) * math.sqrt(self.n_channels)
+ x = torch.transpose(x, 1, -1)
+ x_mask = torch.unsqueeze(sequence_mask(x_lengths, x.size(2)), 1).to(x.dtype)
+
+ x = self.prenet(x, x_mask)
+ if self.n_spks > 1:
+ x = torch.cat([x, spks.unsqueeze(-1).repeat(1, 1, x.shape[-1])], dim=1)
+ x = self.encoder(x, x_mask)
+ mu = self.proj_m(x) * x_mask
+
+ x_dp = torch.detach(x)
+ logw = self.proj_w(x_dp, x_mask)
+
+ return mu, logw, x_mask
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/transformer.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/transformer.py
new file mode 100644
index 0000000000000000000000000000000000000000..dd1afa3aff5383912209e508676c6885e13ef4ee
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/components/transformer.py
@@ -0,0 +1,316 @@
+from typing import Any, Dict, Optional
+
+import torch
+import torch.nn as nn
+from diffusers.models.attention import (
+ GEGLU,
+ GELU,
+ AdaLayerNorm,
+ AdaLayerNormZero,
+ ApproximateGELU,
+)
+from diffusers.models.attention_processor import Attention
+from diffusers.models.lora import LoRACompatibleLinear
+from diffusers.utils.torch_utils import maybe_allow_in_graph
+
+
+class SnakeBeta(nn.Module):
+ """
+ A modified Snake function which uses separate parameters for the magnitude of the periodic components
+ Shape:
+ - Input: (B, C, T)
+ - Output: (B, C, T), same shape as the input
+ Parameters:
+ - alpha - trainable parameter that controls frequency
+ - beta - trainable parameter that controls magnitude
+ References:
+ - This activation function is a modified version based on this paper by Liu Ziyin, Tilman Hartwig, Masahito Ueda:
+ https://arxiv.org/abs/2006.08195
+ Examples:
+ >>> a1 = snakebeta(256)
+ >>> x = torch.randn(256)
+ >>> x = a1(x)
+ """
+
+ def __init__(self, in_features, out_features, alpha=1.0, alpha_trainable=True, alpha_logscale=True):
+ """
+ Initialization.
+ INPUT:
+ - in_features: shape of the input
+ - alpha - trainable parameter that controls frequency
+ - beta - trainable parameter that controls magnitude
+ alpha is initialized to 1 by default, higher values = higher-frequency.
+ beta is initialized to 1 by default, higher values = higher-magnitude.
+ alpha will be trained along with the rest of your model.
+ """
+ super().__init__()
+ self.in_features = out_features if isinstance(out_features, list) else [out_features]
+ self.proj = LoRACompatibleLinear(in_features, out_features)
+
+ # initialize alpha
+ self.alpha_logscale = alpha_logscale
+ if self.alpha_logscale: # log scale alphas initialized to zeros
+ self.alpha = nn.Parameter(torch.zeros(self.in_features) * alpha)
+ self.beta = nn.Parameter(torch.zeros(self.in_features) * alpha)
+ else: # linear scale alphas initialized to ones
+ self.alpha = nn.Parameter(torch.ones(self.in_features) * alpha)
+ self.beta = nn.Parameter(torch.ones(self.in_features) * alpha)
+
+ self.alpha.requires_grad = alpha_trainable
+ self.beta.requires_grad = alpha_trainable
+
+ self.no_div_by_zero = 0.000000001
+
+ def forward(self, x):
+ """
+ Forward pass of the function.
+ Applies the function to the input elementwise.
+ SnakeBeta ∶= x + 1/b * sin^2 (xa)
+ """
+ x = self.proj(x)
+ if self.alpha_logscale:
+ alpha = torch.exp(self.alpha)
+ beta = torch.exp(self.beta)
+ else:
+ alpha = self.alpha
+ beta = self.beta
+
+ x = x + (1.0 / (beta + self.no_div_by_zero)) * torch.pow(torch.sin(x * alpha), 2)
+
+ return x
+
+
+class FeedForward(nn.Module):
+ r"""
+ A feed-forward layer.
+
+ Parameters:
+ dim (`int`): The number of channels in the input.
+ dim_out (`int`, *optional*): The number of channels in the output. If not given, defaults to `dim`.
+ mult (`int`, *optional*, defaults to 4): The multiplier to use for the hidden dimension.
+ dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.
+ activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to be used in feed-forward.
+ final_dropout (`bool` *optional*, defaults to False): Apply a final dropout.
+ """
+
+ def __init__(
+ self,
+ dim: int,
+ dim_out: Optional[int] = None,
+ mult: int = 4,
+ dropout: float = 0.0,
+ activation_fn: str = "geglu",
+ final_dropout: bool = False,
+ ):
+ super().__init__()
+ inner_dim = int(dim * mult)
+ dim_out = dim_out if dim_out is not None else dim
+
+ if activation_fn == "gelu":
+ act_fn = GELU(dim, inner_dim)
+ if activation_fn == "gelu-approximate":
+ act_fn = GELU(dim, inner_dim, approximate="tanh")
+ elif activation_fn == "geglu":
+ act_fn = GEGLU(dim, inner_dim)
+ elif activation_fn == "geglu-approximate":
+ act_fn = ApproximateGELU(dim, inner_dim)
+ elif activation_fn == "snakebeta":
+ act_fn = SnakeBeta(dim, inner_dim)
+
+ self.net = nn.ModuleList([])
+ # project in
+ self.net.append(act_fn)
+ # project dropout
+ self.net.append(nn.Dropout(dropout))
+ # project out
+ self.net.append(LoRACompatibleLinear(inner_dim, dim_out))
+ # FF as used in Vision Transformer, MLP-Mixer, etc. have a final dropout
+ if final_dropout:
+ self.net.append(nn.Dropout(dropout))
+
+ def forward(self, hidden_states):
+ for module in self.net:
+ hidden_states = module(hidden_states)
+ return hidden_states
+
+
+@maybe_allow_in_graph
+class BasicTransformerBlock(nn.Module):
+ r"""
+ A basic Transformer block.
+
+ Parameters:
+ dim (`int`): The number of channels in the input and output.
+ num_attention_heads (`int`): The number of heads to use for multi-head attention.
+ attention_head_dim (`int`): The number of channels in each head.
+ dropout (`float`, *optional*, defaults to 0.0): The dropout probability to use.
+ cross_attention_dim (`int`, *optional*): The size of the encoder_hidden_states vector for cross attention.
+ only_cross_attention (`bool`, *optional*):
+ Whether to use only cross-attention layers. In this case two cross attention layers are used.
+ double_self_attention (`bool`, *optional*):
+ Whether to use two self-attention layers. In this case no cross attention layers are used.
+ activation_fn (`str`, *optional*, defaults to `"geglu"`): Activation function to be used in feed-forward.
+ num_embeds_ada_norm (:
+ obj: `int`, *optional*): The number of diffusion steps used during training. See `Transformer2DModel`.
+ attention_bias (:
+ obj: `bool`, *optional*, defaults to `False`): Configure if the attentions should contain a bias parameter.
+ """
+
+ def __init__(
+ self,
+ dim: int,
+ num_attention_heads: int,
+ attention_head_dim: int,
+ dropout=0.0,
+ cross_attention_dim: Optional[int] = None,
+ activation_fn: str = "geglu",
+ num_embeds_ada_norm: Optional[int] = None,
+ attention_bias: bool = False,
+ only_cross_attention: bool = False,
+ double_self_attention: bool = False,
+ upcast_attention: bool = False,
+ norm_elementwise_affine: bool = True,
+ norm_type: str = "layer_norm",
+ final_dropout: bool = False,
+ ):
+ super().__init__()
+ self.only_cross_attention = only_cross_attention
+
+ self.use_ada_layer_norm_zero = (num_embeds_ada_norm is not None) and norm_type == "ada_norm_zero"
+ self.use_ada_layer_norm = (num_embeds_ada_norm is not None) and norm_type == "ada_norm"
+
+ if norm_type in ("ada_norm", "ada_norm_zero") and num_embeds_ada_norm is None:
+ raise ValueError(
+ f"`norm_type` is set to {norm_type}, but `num_embeds_ada_norm` is not defined. Please make sure to"
+ f" define `num_embeds_ada_norm` if setting `norm_type` to {norm_type}."
+ )
+
+ # Define 3 blocks. Each block has its own normalization layer.
+ # 1. Self-Attn
+ if self.use_ada_layer_norm:
+ self.norm1 = AdaLayerNorm(dim, num_embeds_ada_norm)
+ elif self.use_ada_layer_norm_zero:
+ self.norm1 = AdaLayerNormZero(dim, num_embeds_ada_norm)
+ else:
+ self.norm1 = nn.LayerNorm(dim, elementwise_affine=norm_elementwise_affine)
+ self.attn1 = Attention(
+ query_dim=dim,
+ heads=num_attention_heads,
+ dim_head=attention_head_dim,
+ dropout=dropout,
+ bias=attention_bias,
+ cross_attention_dim=cross_attention_dim if only_cross_attention else None,
+ upcast_attention=upcast_attention,
+ )
+
+ # 2. Cross-Attn
+ if cross_attention_dim is not None or double_self_attention:
+ # We currently only use AdaLayerNormZero for self attention where there will only be one attention block.
+ # I.e. the number of returned modulation chunks from AdaLayerZero would not make sense if returned during
+ # the second cross attention block.
+ self.norm2 = (
+ AdaLayerNorm(dim, num_embeds_ada_norm)
+ if self.use_ada_layer_norm
+ else nn.LayerNorm(dim, elementwise_affine=norm_elementwise_affine)
+ )
+ self.attn2 = Attention(
+ query_dim=dim,
+ cross_attention_dim=cross_attention_dim if not double_self_attention else None,
+ heads=num_attention_heads,
+ dim_head=attention_head_dim,
+ dropout=dropout,
+ bias=attention_bias,
+ upcast_attention=upcast_attention,
+ # scale_qk=False, # uncomment this to not to use flash attention
+ ) # is self-attn if encoder_hidden_states is none
+ else:
+ self.norm2 = None
+ self.attn2 = None
+
+ # 3. Feed-forward
+ self.norm3 = nn.LayerNorm(dim, elementwise_affine=norm_elementwise_affine)
+ self.ff = FeedForward(dim, dropout=dropout, activation_fn=activation_fn, final_dropout=final_dropout)
+
+ # let chunk size default to None
+ self._chunk_size = None
+ self._chunk_dim = 0
+
+ def set_chunk_feed_forward(self, chunk_size: Optional[int], dim: int):
+ # Sets chunk feed-forward
+ self._chunk_size = chunk_size
+ self._chunk_dim = dim
+
+ def forward(
+ self,
+ hidden_states: torch.FloatTensor,
+ attention_mask: Optional[torch.FloatTensor] = None,
+ encoder_hidden_states: Optional[torch.FloatTensor] = None,
+ encoder_attention_mask: Optional[torch.FloatTensor] = None,
+ timestep: Optional[torch.LongTensor] = None,
+ cross_attention_kwargs: Dict[str, Any] = None,
+ class_labels: Optional[torch.LongTensor] = None,
+ ):
+ # Notice that normalization is always applied before the real computation in the following blocks.
+ # 1. Self-Attention
+ if self.use_ada_layer_norm:
+ norm_hidden_states = self.norm1(hidden_states, timestep)
+ elif self.use_ada_layer_norm_zero:
+ norm_hidden_states, gate_msa, shift_mlp, scale_mlp, gate_mlp = self.norm1(
+ hidden_states, timestep, class_labels, hidden_dtype=hidden_states.dtype
+ )
+ else:
+ norm_hidden_states = self.norm1(hidden_states)
+
+ cross_attention_kwargs = cross_attention_kwargs if cross_attention_kwargs is not None else {}
+
+ attn_output = self.attn1(
+ norm_hidden_states,
+ encoder_hidden_states=encoder_hidden_states if self.only_cross_attention else None,
+ attention_mask=encoder_attention_mask if self.only_cross_attention else attention_mask,
+ **cross_attention_kwargs,
+ )
+ if self.use_ada_layer_norm_zero:
+ attn_output = gate_msa.unsqueeze(1) * attn_output
+ hidden_states = attn_output + hidden_states
+
+ # 2. Cross-Attention
+ if self.attn2 is not None:
+ norm_hidden_states = (
+ self.norm2(hidden_states, timestep) if self.use_ada_layer_norm else self.norm2(hidden_states)
+ )
+
+ attn_output = self.attn2(
+ norm_hidden_states,
+ encoder_hidden_states=encoder_hidden_states,
+ attention_mask=encoder_attention_mask,
+ **cross_attention_kwargs,
+ )
+ hidden_states = attn_output + hidden_states
+
+ # 3. Feed-forward
+ norm_hidden_states = self.norm3(hidden_states)
+
+ if self.use_ada_layer_norm_zero:
+ norm_hidden_states = norm_hidden_states * (1 + scale_mlp[:, None]) + shift_mlp[:, None]
+
+ if self._chunk_size is not None:
+ # "feed_forward_chunk_size" can be used to save memory
+ if norm_hidden_states.shape[self._chunk_dim] % self._chunk_size != 0:
+ raise ValueError(
+ f"`hidden_states` dimension to be chunked: {norm_hidden_states.shape[self._chunk_dim]} has to be divisible by chunk size: {self._chunk_size}. Make sure to set an appropriate `chunk_size` when calling `unet.enable_forward_chunking`."
+ )
+
+ num_chunks = norm_hidden_states.shape[self._chunk_dim] // self._chunk_size
+ ff_output = torch.cat(
+ [self.ff(hid_slice) for hid_slice in norm_hidden_states.chunk(num_chunks, dim=self._chunk_dim)],
+ dim=self._chunk_dim,
+ )
+ else:
+ ff_output = self.ff(norm_hidden_states)
+
+ if self.use_ada_layer_norm_zero:
+ ff_output = gate_mlp.unsqueeze(1) * ff_output
+
+ hidden_states = ff_output + hidden_states
+
+ return hidden_states
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/matcha_tts.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/matcha_tts.py
new file mode 100644
index 0000000000000000000000000000000000000000..07f95ad2e31a2de94974c21f15e28ab5445ff6fc
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/models/matcha_tts.py
@@ -0,0 +1,244 @@
+import datetime as dt
+import math
+import random
+
+import torch
+
+import matcha.utils.monotonic_align as monotonic_align
+from matcha import utils
+from matcha.models.baselightningmodule import BaseLightningClass
+from matcha.models.components.flow_matching import CFM
+from matcha.models.components.text_encoder import TextEncoder
+from matcha.utils.model import (
+ denormalize,
+ duration_loss,
+ fix_len_compatibility,
+ generate_path,
+ sequence_mask,
+)
+
+log = utils.get_pylogger(__name__)
+
+
+class MatchaTTS(BaseLightningClass): # 🍵
+ def __init__(
+ self,
+ n_vocab,
+ n_spks,
+ spk_emb_dim,
+ n_feats,
+ encoder,
+ decoder,
+ cfm,
+ data_statistics,
+ out_size,
+ optimizer=None,
+ scheduler=None,
+ prior_loss=True,
+ use_precomputed_durations=False,
+ ):
+ super().__init__()
+
+ self.save_hyperparameters(logger=False)
+
+ self.n_vocab = n_vocab
+ self.n_spks = n_spks
+ self.spk_emb_dim = spk_emb_dim
+ self.n_feats = n_feats
+ self.out_size = out_size
+ self.prior_loss = prior_loss
+ self.use_precomputed_durations = use_precomputed_durations
+
+ if n_spks > 1:
+ self.spk_emb = torch.nn.Embedding(n_spks, spk_emb_dim)
+
+ self.encoder = TextEncoder(
+ encoder.encoder_type,
+ encoder.encoder_params,
+ encoder.duration_predictor_params,
+ n_vocab,
+ n_spks,
+ spk_emb_dim,
+ )
+
+ self.decoder = CFM(
+ in_channels=2 * encoder.encoder_params.n_feats,
+ out_channel=encoder.encoder_params.n_feats,
+ cfm_params=cfm,
+ decoder_params=decoder,
+ n_spks=n_spks,
+ spk_emb_dim=spk_emb_dim,
+ )
+
+ self.update_data_statistics(data_statistics)
+
+ @torch.inference_mode()
+ def synthesise(self, x, x_lengths, n_timesteps, temperature=1.0, spks=None, length_scale=1.0):
+ """
+ Generates mel-spectrogram from text. Returns:
+ 1. encoder outputs
+ 2. decoder outputs
+ 3. generated alignment
+
+ Args:
+ x (torch.Tensor): batch of texts, converted to a tensor with phoneme embedding ids.
+ shape: (batch_size, max_text_length)
+ x_lengths (torch.Tensor): lengths of texts in batch.
+ shape: (batch_size,)
+ n_timesteps (int): number of steps to use for reverse diffusion in decoder.
+ temperature (float, optional): controls variance of terminal distribution.
+ spks (bool, optional): speaker ids.
+ shape: (batch_size,)
+ length_scale (float, optional): controls speech pace.
+ Increase value to slow down generated speech and vice versa.
+
+ Returns:
+ dict: {
+ "encoder_outputs": torch.Tensor, shape: (batch_size, n_feats, max_mel_length),
+ # Average mel spectrogram generated by the encoder
+ "decoder_outputs": torch.Tensor, shape: (batch_size, n_feats, max_mel_length),
+ # Refined mel spectrogram improved by the CFM
+ "attn": torch.Tensor, shape: (batch_size, max_text_length, max_mel_length),
+ # Alignment map between text and mel spectrogram
+ "mel": torch.Tensor, shape: (batch_size, n_feats, max_mel_length),
+ # Denormalized mel spectrogram
+ "mel_lengths": torch.Tensor, shape: (batch_size,),
+ # Lengths of mel spectrograms
+ "rtf": float,
+ # Real-time factor
+ """
+ # For RTF computation
+ t = dt.datetime.now()
+
+ if self.n_spks > 1:
+ # Get speaker embedding
+ spks = self.spk_emb(spks.long())
+
+ # Get encoder_outputs `mu_x` and log-scaled token durations `logw`
+ mu_x, logw, x_mask = self.encoder(x, x_lengths, spks)
+
+ w = torch.exp(logw) * x_mask
+ w_ceil = torch.ceil(w) * length_scale
+ y_lengths = torch.clamp_min(torch.sum(w_ceil, [1, 2]), 1).long()
+ y_max_length = y_lengths.max()
+ y_max_length_ = fix_len_compatibility(y_max_length)
+
+ # Using obtained durations `w` construct alignment map `attn`
+ y_mask = sequence_mask(y_lengths, y_max_length_).unsqueeze(1).to(x_mask.dtype)
+ attn_mask = x_mask.unsqueeze(-1) * y_mask.unsqueeze(2)
+ attn = generate_path(w_ceil.squeeze(1), attn_mask.squeeze(1)).unsqueeze(1)
+
+ # Align encoded text and get mu_y
+ mu_y = torch.matmul(attn.squeeze(1).transpose(1, 2), mu_x.transpose(1, 2))
+ mu_y = mu_y.transpose(1, 2)
+ encoder_outputs = mu_y[:, :, :y_max_length]
+
+ # Generate sample tracing the probability flow
+ decoder_outputs = self.decoder(mu_y, y_mask, n_timesteps, temperature, spks)
+ decoder_outputs = decoder_outputs[:, :, :y_max_length]
+
+ t = (dt.datetime.now() - t).total_seconds()
+ rtf = t * 22050 / (decoder_outputs.shape[-1] * 256)
+
+ return {
+ "encoder_outputs": encoder_outputs,
+ "decoder_outputs": decoder_outputs,
+ "attn": attn[:, :, :y_max_length],
+ "mel": denormalize(decoder_outputs, self.mel_mean, self.mel_std),
+ "mel_lengths": y_lengths,
+ "rtf": rtf,
+ }
+
+ def forward(self, x, x_lengths, y, y_lengths, spks=None, out_size=None, cond=None, durations=None):
+ """
+ Computes 3 losses:
+ 1. duration loss: loss between predicted token durations and those extracted by Monotinic Alignment Search (MAS).
+ 2. prior loss: loss between mel-spectrogram and encoder outputs.
+ 3. flow matching loss: loss between mel-spectrogram and decoder outputs.
+
+ Args:
+ x (torch.Tensor): batch of texts, converted to a tensor with phoneme embedding ids.
+ shape: (batch_size, max_text_length)
+ x_lengths (torch.Tensor): lengths of texts in batch.
+ shape: (batch_size,)
+ y (torch.Tensor): batch of corresponding mel-spectrograms.
+ shape: (batch_size, n_feats, max_mel_length)
+ y_lengths (torch.Tensor): lengths of mel-spectrograms in batch.
+ shape: (batch_size,)
+ out_size (int, optional): length (in mel's sampling rate) of segment to cut, on which decoder will be trained.
+ Should be divisible by 2^{num of UNet downsamplings}. Needed to increase batch size.
+ spks (torch.Tensor, optional): speaker ids.
+ shape: (batch_size,)
+ """
+ if self.n_spks > 1:
+ # Get speaker embedding
+ spks = self.spk_emb(spks)
+
+ # Get encoder_outputs `mu_x` and log-scaled token durations `logw`
+ mu_x, logw, x_mask = self.encoder(x, x_lengths, spks)
+ y_max_length = y.shape[-1]
+
+ y_mask = sequence_mask(y_lengths, y_max_length).unsqueeze(1).to(x_mask)
+ attn_mask = x_mask.unsqueeze(-1) * y_mask.unsqueeze(2)
+
+ if self.use_precomputed_durations:
+ attn = generate_path(durations.squeeze(1), attn_mask.squeeze(1))
+ else:
+ # Use MAS to find most likely alignment `attn` between text and mel-spectrogram
+ with torch.no_grad():
+ const = -0.5 * math.log(2 * math.pi) * self.n_feats
+ factor = -0.5 * torch.ones(mu_x.shape, dtype=mu_x.dtype, device=mu_x.device)
+ y_square = torch.matmul(factor.transpose(1, 2), y**2)
+ y_mu_double = torch.matmul(2.0 * (factor * mu_x).transpose(1, 2), y)
+ mu_square = torch.sum(factor * (mu_x**2), 1).unsqueeze(-1)
+ log_prior = y_square - y_mu_double + mu_square + const
+
+ attn = monotonic_align.maximum_path(log_prior, attn_mask.squeeze(1))
+ attn = attn.detach() # b, t_text, T_mel
+
+ # Compute loss between predicted log-scaled durations and those obtained from MAS
+ # refered to as prior loss in the paper
+ logw_ = torch.log(1e-8 + torch.sum(attn.unsqueeze(1), -1)) * x_mask
+ dur_loss = duration_loss(logw, logw_, x_lengths)
+
+ # Cut a small segment of mel-spectrogram in order to increase batch size
+ # - "Hack" taken from Grad-TTS, in case of Grad-TTS, we cannot train batch size 32 on a 24GB GPU without it
+ # - Do not need this hack for Matcha-TTS, but it works with it as well
+ if not isinstance(out_size, type(None)):
+ max_offset = (y_lengths - out_size).clamp(0)
+ offset_ranges = list(zip([0] * max_offset.shape[0], max_offset.cpu().numpy()))
+ out_offset = torch.LongTensor(
+ [torch.tensor(random.choice(range(start, end)) if end > start else 0) for start, end in offset_ranges]
+ ).to(y_lengths)
+ attn_cut = torch.zeros(attn.shape[0], attn.shape[1], out_size, dtype=attn.dtype, device=attn.device)
+ y_cut = torch.zeros(y.shape[0], self.n_feats, out_size, dtype=y.dtype, device=y.device)
+
+ y_cut_lengths = []
+ for i, (y_, out_offset_) in enumerate(zip(y, out_offset)):
+ y_cut_length = out_size + (y_lengths[i] - out_size).clamp(None, 0)
+ y_cut_lengths.append(y_cut_length)
+ cut_lower, cut_upper = out_offset_, out_offset_ + y_cut_length
+ y_cut[i, :, :y_cut_length] = y_[:, cut_lower:cut_upper]
+ attn_cut[i, :, :y_cut_length] = attn[i, :, cut_lower:cut_upper]
+
+ y_cut_lengths = torch.LongTensor(y_cut_lengths)
+ y_cut_mask = sequence_mask(y_cut_lengths).unsqueeze(1).to(y_mask)
+
+ attn = attn_cut
+ y = y_cut
+ y_mask = y_cut_mask
+
+ # Align encoded text with mel-spectrogram and get mu_y segment
+ mu_y = torch.matmul(attn.squeeze(1).transpose(1, 2), mu_x.transpose(1, 2))
+ mu_y = mu_y.transpose(1, 2)
+
+ # Compute loss of the decoder
+ diff_loss, _ = self.decoder.compute_loss(x1=y, mask=y_mask, mu=mu_y, spks=spks, cond=cond)
+
+ if self.prior_loss:
+ prior_loss = torch.sum(0.5 * ((y - mu_y) ** 2 + math.log(2 * math.pi)) * y_mask)
+ prior_loss = prior_loss / (torch.sum(y_mask) * self.n_feats)
+ else:
+ prior_loss = 0
+
+ return dur_loss, prior_loss, diff_loss, attn
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/export.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/export.py
new file mode 100644
index 0000000000000000000000000000000000000000..9b795086158e1ad8a4bb5cd92306f3fa765f71ea
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/export.py
@@ -0,0 +1,181 @@
+import argparse
+import random
+from pathlib import Path
+
+import numpy as np
+import torch
+from lightning import LightningModule
+
+from matcha.cli import VOCODER_URLS, load_matcha, load_vocoder
+
+DEFAULT_OPSET = 15
+
+SEED = 1234
+random.seed(SEED)
+np.random.seed(SEED)
+torch.manual_seed(SEED)
+torch.cuda.manual_seed(SEED)
+torch.backends.cudnn.deterministic = True
+torch.backends.cudnn.benchmark = False
+
+
+class MatchaWithVocoder(LightningModule):
+ def __init__(self, matcha, vocoder):
+ super().__init__()
+ self.matcha = matcha
+ self.vocoder = vocoder
+
+ def forward(self, x, x_lengths, scales, spks=None):
+ mel, mel_lengths = self.matcha(x, x_lengths, scales, spks)
+ wavs = self.vocoder(mel).clamp(-1, 1)
+ lengths = mel_lengths * 256
+ return wavs.squeeze(1), lengths
+
+
+def get_exportable_module(matcha, vocoder, n_timesteps):
+ """
+ Return an appropriate `LighteningModule` and output-node names
+ based on whether the vocoder is embedded in the final graph
+ """
+
+ def onnx_forward_func(x, x_lengths, scales, spks=None):
+ """
+ Custom forward function for accepting
+ scaler parameters as tensors
+ """
+ # Extract scaler parameters from tensors
+ temperature = scales[0]
+ length_scale = scales[1]
+ output = matcha.synthesise(x, x_lengths, n_timesteps, temperature, spks, length_scale)
+ return output["mel"], output["mel_lengths"]
+
+ # Monkey-patch Matcha's forward function
+ matcha.forward = onnx_forward_func
+
+ if vocoder is None:
+ model, output_names = matcha, ["mel", "mel_lengths"]
+ else:
+ model = MatchaWithVocoder(matcha, vocoder)
+ output_names = ["wav", "wav_lengths"]
+ return model, output_names
+
+
+def get_inputs(is_multi_speaker):
+ """
+ Create dummy inputs for tracing
+ """
+ dummy_input_length = 50
+ x = torch.randint(low=0, high=20, size=(1, dummy_input_length), dtype=torch.long)
+ x_lengths = torch.LongTensor([dummy_input_length])
+
+ # Scales
+ temperature = 0.667
+ length_scale = 1.0
+ scales = torch.Tensor([temperature, length_scale])
+
+ model_inputs = [x, x_lengths, scales]
+ input_names = [
+ "x",
+ "x_lengths",
+ "scales",
+ ]
+
+ if is_multi_speaker:
+ spks = torch.LongTensor([1])
+ model_inputs.append(spks)
+ input_names.append("spks")
+
+ return tuple(model_inputs), input_names
+
+
+def main():
+ parser = argparse.ArgumentParser(description="Export 🍵 Matcha-TTS to ONNX")
+
+ parser.add_argument(
+ "checkpoint_path",
+ type=str,
+ help="Path to the model checkpoint",
+ )
+ parser.add_argument("output", type=str, help="Path to output `.onnx` file")
+ parser.add_argument(
+ "--n-timesteps", type=int, default=5, help="Number of steps to use for reverse diffusion in decoder (default 5)"
+ )
+ parser.add_argument(
+ "--vocoder-name",
+ type=str,
+ choices=list(VOCODER_URLS.keys()),
+ default=None,
+ help="Name of the vocoder to embed in the ONNX graph",
+ )
+ parser.add_argument(
+ "--vocoder-checkpoint-path",
+ type=str,
+ default=None,
+ help="Vocoder checkpoint to embed in the ONNX graph for an `e2e` like experience",
+ )
+ parser.add_argument("--opset", type=int, default=DEFAULT_OPSET, help="ONNX opset version to use (default 15")
+
+ args = parser.parse_args()
+
+ print(f"[🍵] Loading Matcha checkpoint from {args.checkpoint_path}")
+ print(f"Setting n_timesteps to {args.n_timesteps}")
+
+ checkpoint_path = Path(args.checkpoint_path)
+ matcha = load_matcha(checkpoint_path.stem, checkpoint_path, "cpu")
+
+ if args.vocoder_name or args.vocoder_checkpoint_path:
+ assert (
+ args.vocoder_name and args.vocoder_checkpoint_path
+ ), "Both vocoder_name and vocoder-checkpoint are required when embedding the vocoder in the ONNX graph."
+ vocoder, _ = load_vocoder(args.vocoder_name, args.vocoder_checkpoint_path, "cpu")
+ else:
+ vocoder = None
+
+ is_multi_speaker = matcha.n_spks > 1
+
+ dummy_input, input_names = get_inputs(is_multi_speaker)
+ model, output_names = get_exportable_module(matcha, vocoder, args.n_timesteps)
+
+ # Set dynamic shape for inputs/outputs
+ dynamic_axes = {
+ "x": {0: "batch_size", 1: "time"},
+ "x_lengths": {0: "batch_size"},
+ }
+
+ if vocoder is None:
+ dynamic_axes.update(
+ {
+ "mel": {0: "batch_size", 2: "time"},
+ "mel_lengths": {0: "batch_size"},
+ }
+ )
+ else:
+ print("Embedding the vocoder in the ONNX graph")
+ dynamic_axes.update(
+ {
+ "wav": {0: "batch_size", 1: "time"},
+ "wav_lengths": {0: "batch_size"},
+ }
+ )
+
+ if is_multi_speaker:
+ dynamic_axes["spks"] = {0: "batch_size"}
+
+ # Create the output directory (if not exists)
+ Path(args.output).parent.mkdir(parents=True, exist_ok=True)
+
+ model.to_onnx(
+ args.output,
+ dummy_input,
+ input_names=input_names,
+ output_names=output_names,
+ dynamic_axes=dynamic_axes,
+ opset_version=args.opset,
+ export_params=True,
+ do_constant_folding=True,
+ )
+ print(f"[🍵] ONNX model exported to {args.output}")
+
+
+if __name__ == "__main__":
+ main()
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/infer.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/infer.py
new file mode 100644
index 0000000000000000000000000000000000000000..89ca92559c6df3776a07a038d7838242a3d19189
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/onnx/infer.py
@@ -0,0 +1,168 @@
+import argparse
+import os
+import warnings
+from pathlib import Path
+from time import perf_counter
+
+import numpy as np
+import onnxruntime as ort
+import soundfile as sf
+import torch
+
+from matcha.cli import plot_spectrogram_to_numpy, process_text
+
+
+def validate_args(args):
+ assert (
+ args.text or args.file
+ ), "Either text or file must be provided Matcha-T(ea)TTS need sometext to whisk the waveforms."
+ assert args.temperature >= 0, "Sampling temperature cannot be negative"
+ assert args.speaking_rate >= 0, "Speaking rate must be greater than 0"
+ return args
+
+
+def write_wavs(model, inputs, output_dir, external_vocoder=None):
+ if external_vocoder is None:
+ print("The provided model has the vocoder embedded in the graph.\nGenerating waveform directly")
+ t0 = perf_counter()
+ wavs, wav_lengths = model.run(None, inputs)
+ infer_secs = perf_counter() - t0
+ mel_infer_secs = vocoder_infer_secs = None
+ else:
+ print("[🍵] Generating mel using Matcha")
+ mel_t0 = perf_counter()
+ mels, mel_lengths = model.run(None, inputs)
+ mel_infer_secs = perf_counter() - mel_t0
+ print("Generating waveform from mel using external vocoder")
+ vocoder_inputs = {external_vocoder.get_inputs()[0].name: mels}
+ vocoder_t0 = perf_counter()
+ wavs = external_vocoder.run(None, vocoder_inputs)[0]
+ vocoder_infer_secs = perf_counter() - vocoder_t0
+ wavs = wavs.squeeze(1)
+ wav_lengths = mel_lengths * 256
+ infer_secs = mel_infer_secs + vocoder_infer_secs
+
+ output_dir = Path(output_dir)
+ output_dir.mkdir(parents=True, exist_ok=True)
+ for i, (wav, wav_length) in enumerate(zip(wavs, wav_lengths)):
+ output_filename = output_dir.joinpath(f"output_{i + 1}.wav")
+ audio = wav[:wav_length]
+ print(f"Writing audio to {output_filename}")
+ sf.write(output_filename, audio, 22050, "PCM_24")
+
+ wav_secs = wav_lengths.sum() / 22050
+ print(f"Inference seconds: {infer_secs}")
+ print(f"Generated wav seconds: {wav_secs}")
+ rtf = infer_secs / wav_secs
+ if mel_infer_secs is not None:
+ mel_rtf = mel_infer_secs / wav_secs
+ print(f"Matcha RTF: {mel_rtf}")
+ if vocoder_infer_secs is not None:
+ vocoder_rtf = vocoder_infer_secs / wav_secs
+ print(f"Vocoder RTF: {vocoder_rtf}")
+ print(f"Overall RTF: {rtf}")
+
+
+def write_mels(model, inputs, output_dir):
+ t0 = perf_counter()
+ mels, mel_lengths = model.run(None, inputs)
+ infer_secs = perf_counter() - t0
+
+ output_dir = Path(output_dir)
+ output_dir.mkdir(parents=True, exist_ok=True)
+ for i, mel in enumerate(mels):
+ output_stem = output_dir.joinpath(f"output_{i + 1}")
+ plot_spectrogram_to_numpy(mel.squeeze(), output_stem.with_suffix(".png"))
+ np.save(output_stem.with_suffix(".numpy"), mel)
+
+ wav_secs = (mel_lengths * 256).sum() / 22050
+ print(f"Inference seconds: {infer_secs}")
+ print(f"Generated wav seconds: {wav_secs}")
+ rtf = infer_secs / wav_secs
+ print(f"RTF: {rtf}")
+
+
+def main():
+ parser = argparse.ArgumentParser(
+ description=" 🍵 Matcha-TTS: A fast TTS architecture with conditional flow matching"
+ )
+ parser.add_argument(
+ "model",
+ type=str,
+ help="ONNX model to use",
+ )
+ parser.add_argument("--vocoder", type=str, default=None, help="Vocoder to use (defaults to None)")
+ parser.add_argument("--text", type=str, default=None, help="Text to synthesize")
+ parser.add_argument("--file", type=str, default=None, help="Text file to synthesize")
+ parser.add_argument("--spk", type=int, default=None, help="Speaker ID")
+ parser.add_argument(
+ "--temperature",
+ type=float,
+ default=0.667,
+ help="Variance of the x0 noise (default: 0.667)",
+ )
+ parser.add_argument(
+ "--speaking-rate",
+ type=float,
+ default=1.0,
+ help="change the speaking rate, a higher value means slower speaking rate (default: 1.0)",
+ )
+ parser.add_argument("--gpu", action="store_true", help="Use CPU for inference (default: use GPU if available)")
+ parser.add_argument(
+ "--output-dir",
+ type=str,
+ default=os.getcwd(),
+ help="Output folder to save results (default: current dir)",
+ )
+
+ args = parser.parse_args()
+ args = validate_args(args)
+
+ if args.gpu:
+ providers = ["GPUExecutionProvider"]
+ else:
+ providers = ["CPUExecutionProvider"]
+ model = ort.InferenceSession(args.model, providers=providers)
+
+ model_inputs = model.get_inputs()
+ model_outputs = list(model.get_outputs())
+
+ if args.text:
+ text_lines = args.text.splitlines()
+ else:
+ with open(args.file, encoding="utf-8") as file:
+ text_lines = file.read().splitlines()
+
+ processed_lines = [process_text(0, line, "cpu") for line in text_lines]
+ x = [line["x"].squeeze() for line in processed_lines]
+ # Pad
+ x = torch.nn.utils.rnn.pad_sequence(x, batch_first=True)
+ x = x.detach().cpu().numpy()
+ x_lengths = np.array([line["x_lengths"].item() for line in processed_lines], dtype=np.int64)
+ inputs = {
+ "x": x,
+ "x_lengths": x_lengths,
+ "scales": np.array([args.temperature, args.speaking_rate], dtype=np.float32),
+ }
+ is_multi_speaker = len(model_inputs) == 4
+ if is_multi_speaker:
+ if args.spk is None:
+ args.spk = 0
+ warn = "[!] Speaker ID not provided! Using speaker ID 0"
+ warnings.warn(warn, UserWarning)
+ inputs["spks"] = np.repeat(args.spk, x.shape[0]).astype(np.int64)
+
+ has_vocoder_embedded = model_outputs[0].name == "wav"
+ if has_vocoder_embedded:
+ write_wavs(model, inputs, args.output_dir)
+ elif args.vocoder:
+ external_vocoder = ort.InferenceSession(args.vocoder, providers=providers)
+ write_wavs(model, inputs, args.output_dir, external_vocoder=external_vocoder)
+ else:
+ warn = "[!] A vocoder is not embedded in the graph nor an external vocoder is provided. The mel output will be written as numpy arrays to `*.npy` files in the output directory"
+ warnings.warn(warn, UserWarning)
+ write_mels(model, inputs, args.output_dir)
+
+
+if __name__ == "__main__":
+ main()
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..8c75d6b5714a0a2d30b95e00a5377c13f29d9b8a
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/__init__.py
@@ -0,0 +1,53 @@
+""" from https://github.com/keithito/tacotron """
+from matcha.text import cleaners
+from matcha.text.symbols import symbols
+
+# Mappings from symbol to numeric ID and vice versa:
+_symbol_to_id = {s: i for i, s in enumerate(symbols)}
+_id_to_symbol = {i: s for i, s in enumerate(symbols)} # pylint: disable=unnecessary-comprehension
+
+
+def text_to_sequence(text, cleaner_names):
+ """Converts a string of text to a sequence of IDs corresponding to the symbols in the text.
+ Args:
+ text: string to convert to a sequence
+ cleaner_names: names of the cleaner functions to run the text through
+ Returns:
+ List of integers corresponding to the symbols in the text
+ """
+ sequence = []
+
+ clean_text = _clean_text(text, cleaner_names)
+ for symbol in clean_text:
+ symbol_id = _symbol_to_id[symbol]
+ sequence += [symbol_id]
+ return sequence, clean_text
+
+
+def cleaned_text_to_sequence(cleaned_text):
+ """Converts a string of text to a sequence of IDs corresponding to the symbols in the text.
+ Args:
+ text: string to convert to a sequence
+ Returns:
+ List of integers corresponding to the symbols in the text
+ """
+ sequence = [_symbol_to_id[symbol] for symbol in cleaned_text]
+ return sequence
+
+
+def sequence_to_text(sequence):
+ """Converts a sequence of IDs back to a string"""
+ result = ""
+ for symbol_id in sequence:
+ s = _id_to_symbol[symbol_id]
+ result += s
+ return result
+
+
+def _clean_text(text, cleaner_names):
+ for name in cleaner_names:
+ cleaner = getattr(cleaners, name)
+ if not cleaner:
+ raise Exception("Unknown cleaner: %s" % name)
+ text = cleaner(text)
+ return text
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/cleaners.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/cleaners.py
new file mode 100644
index 0000000000000000000000000000000000000000..788776b22b975e5a63aa9d4b467916f941f8dedd
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/cleaners.py
@@ -0,0 +1,130 @@
+""" from https://github.com/keithito/tacotron
+
+Cleaners are transformations that run over the input text at both training and eval time.
+
+Cleaners can be selected by passing a comma-delimited list of cleaner names as the "cleaners"
+hyperparameter. Some cleaners are English-specific. You'll typically want to use:
+ 1. "english_cleaners" for English text
+ 2. "transliteration_cleaners" for non-English text that can be transliterated to ASCII using
+ the Unidecode library (https://pypi.python.org/pypi/Unidecode)
+ 3. "basic_cleaners" if you do not want to transliterate (in this case, you should also update
+ the symbols in symbols.py to match your data).
+"""
+
+import logging
+import re
+
+import phonemizer
+from unidecode import unidecode
+
+# To avoid excessive logging we set the log level of the phonemizer package to Critical
+critical_logger = logging.getLogger("phonemizer")
+critical_logger.setLevel(logging.CRITICAL)
+
+# Intializing the phonemizer globally significantly reduces the speed
+# now the phonemizer is not initialising at every call
+# Might be less flexible, but it is much-much faster
+global_phonemizer = phonemizer.backend.EspeakBackend(
+ language="en-us",
+ preserve_punctuation=True,
+ with_stress=True,
+ language_switch="remove-flags",
+ logger=critical_logger,
+)
+
+
+# Regular expression matching whitespace:
+_whitespace_re = re.compile(r"\s+")
+
+# Remove brackets
+_brackets_re = re.compile(r"[\[\]\(\)\{\}]")
+
+# List of (regular expression, replacement) pairs for abbreviations:
+_abbreviations = [
+ (re.compile("\\b%s\\." % x[0], re.IGNORECASE), x[1])
+ for x in [
+ ("mrs", "misess"),
+ ("mr", "mister"),
+ ("dr", "doctor"),
+ ("st", "saint"),
+ ("co", "company"),
+ ("jr", "junior"),
+ ("maj", "major"),
+ ("gen", "general"),
+ ("drs", "doctors"),
+ ("rev", "reverend"),
+ ("lt", "lieutenant"),
+ ("hon", "honorable"),
+ ("sgt", "sergeant"),
+ ("capt", "captain"),
+ ("esq", "esquire"),
+ ("ltd", "limited"),
+ ("col", "colonel"),
+ ("ft", "fort"),
+ ]
+]
+
+
+def expand_abbreviations(text):
+ for regex, replacement in _abbreviations:
+ text = re.sub(regex, replacement, text)
+ return text
+
+
+def lowercase(text):
+ return text.lower()
+
+
+def remove_brackets(text):
+ return re.sub(_brackets_re, "", text)
+
+
+def collapse_whitespace(text):
+ return re.sub(_whitespace_re, " ", text)
+
+
+def convert_to_ascii(text):
+ return unidecode(text)
+
+
+def basic_cleaners(text):
+ """Basic pipeline that lowercases and collapses whitespace without transliteration."""
+ text = lowercase(text)
+ text = collapse_whitespace(text)
+ return text
+
+
+def transliteration_cleaners(text):
+ """Pipeline for non-English text that transliterates to ASCII."""
+ text = convert_to_ascii(text)
+ text = lowercase(text)
+ text = collapse_whitespace(text)
+ return text
+
+
+def english_cleaners2(text):
+ """Pipeline for English text, including abbreviation expansion. + punctuation + stress"""
+ text = convert_to_ascii(text)
+ text = lowercase(text)
+ text = expand_abbreviations(text)
+ phonemes = global_phonemizer.phonemize([text], strip=True, njobs=1)[0]
+ # Added in some cases espeak is not removing brackets
+ phonemes = remove_brackets(phonemes)
+ phonemes = collapse_whitespace(phonemes)
+ return phonemes
+
+
+# I am removing this due to incompatibility with several version of python
+# However, if you want to use it, you can uncomment it
+# and install piper-phonemize with the following command:
+# pip install piper-phonemize
+
+# import piper_phonemize
+# def english_cleaners_piper(text):
+# """Pipeline for English text, including abbreviation expansion. + punctuation + stress"""
+# text = convert_to_ascii(text)
+# text = lowercase(text)
+# text = expand_abbreviations(text)
+# phonemes = "".join(piper_phonemize.phonemize_espeak(text=text, voice="en-US")[0])
+# phonemes = collapse_whitespace(phonemes)
+# return phonemes
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/numbers.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/numbers.py
new file mode 100644
index 0000000000000000000000000000000000000000..f99a8686dcb73532091122613e74bd643a8a327f
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/numbers.py
@@ -0,0 +1,71 @@
+""" from https://github.com/keithito/tacotron """
+
+import re
+
+import inflect
+
+_inflect = inflect.engine()
+_comma_number_re = re.compile(r"([0-9][0-9\,]+[0-9])")
+_decimal_number_re = re.compile(r"([0-9]+\.[0-9]+)")
+_pounds_re = re.compile(r"£([0-9\,]*[0-9]+)")
+_dollars_re = re.compile(r"\$([0-9\.\,]*[0-9]+)")
+_ordinal_re = re.compile(r"[0-9]+(st|nd|rd|th)")
+_number_re = re.compile(r"[0-9]+")
+
+
+def _remove_commas(m):
+ return m.group(1).replace(",", "")
+
+
+def _expand_decimal_point(m):
+ return m.group(1).replace(".", " point ")
+
+
+def _expand_dollars(m):
+ match = m.group(1)
+ parts = match.split(".")
+ if len(parts) > 2:
+ return match + " dollars"
+ dollars = int(parts[0]) if parts[0] else 0
+ cents = int(parts[1]) if len(parts) > 1 and parts[1] else 0
+ if dollars and cents:
+ dollar_unit = "dollar" if dollars == 1 else "dollars"
+ cent_unit = "cent" if cents == 1 else "cents"
+ return f"{dollars} {dollar_unit}, {cents} {cent_unit}"
+ elif dollars:
+ dollar_unit = "dollar" if dollars == 1 else "dollars"
+ return f"{dollars} {dollar_unit}"
+ elif cents:
+ cent_unit = "cent" if cents == 1 else "cents"
+ return f"{cents} {cent_unit}"
+ else:
+ return "zero dollars"
+
+
+def _expand_ordinal(m):
+ return _inflect.number_to_words(m.group(0))
+
+
+def _expand_number(m):
+ num = int(m.group(0))
+ if num > 1000 and num < 3000:
+ if num == 2000:
+ return "two thousand"
+ elif num > 2000 and num < 2010:
+ return "two thousand " + _inflect.number_to_words(num % 100)
+ elif num % 100 == 0:
+ return _inflect.number_to_words(num // 100) + " hundred"
+ else:
+ return _inflect.number_to_words(num, andword="", zero="oh", group=2).replace(", ", " ")
+ else:
+ return _inflect.number_to_words(num, andword="")
+
+
+def normalize_numbers(text):
+ text = re.sub(_comma_number_re, _remove_commas, text)
+ text = re.sub(_pounds_re, r"\1 pounds", text)
+ text = re.sub(_dollars_re, _expand_dollars, text)
+ text = re.sub(_decimal_number_re, _expand_decimal_point, text)
+ text = re.sub(_ordinal_re, _expand_ordinal, text)
+ text = re.sub(_number_re, _expand_number, text)
+ return text
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/symbols.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/symbols.py
new file mode 100644
index 0000000000000000000000000000000000000000..7018df549a1e50c3be20416069b6913c641024bd
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/text/symbols.py
@@ -0,0 +1,17 @@
+""" from https://github.com/keithito/tacotron
+
+Defines the set of symbols used in text input to the model.
+"""
+_pad = "_"
+_punctuation = ';:,.!?¡¿—…"«»“” '
+_letters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
+_letters_ipa = (
+ "ɑɐɒæɓʙβɔɕçɗɖðʤəɘɚɛɜɝɞɟʄɡɠɢʛɦɧħɥʜɨɪʝɭɬɫɮʟɱɯɰŋɳɲɴøɵɸθœɶʘɹɺɾɻʀʁɽʂʃʈʧʉʊʋⱱʌɣɤʍχʎʏʑʐʒʔʡʕʢǀǁǂǃˈˌːˑʼʴʰʱʲʷˠˤ˞↓↑→↗↘'̩'ᵻ"
+)
+
+
+# Export all symbols:
+symbols = [_pad] + list(_punctuation) + list(_letters) + list(_letters_ipa)
+
+# Special symbol ids
+SPACE_ID = symbols.index(" ")
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/train.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/train.py
new file mode 100644
index 0000000000000000000000000000000000000000..d1d64c6c44af2622be5e6bf368616feb6619ed7e
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/train.py
@@ -0,0 +1,122 @@
+from typing import Any, Dict, List, Optional, Tuple
+
+import hydra
+import lightning as L
+import rootutils
+from lightning import Callback, LightningDataModule, LightningModule, Trainer
+from lightning.pytorch.loggers import Logger
+from omegaconf import DictConfig
+
+from matcha import utils
+
+rootutils.setup_root(__file__, indicator=".project-root", pythonpath=True)
+# ------------------------------------------------------------------------------------ #
+# the setup_root above is equivalent to:
+# - adding project root dir to PYTHONPATH
+# (so you don't need to force user to install project as a package)
+# (necessary before importing any local modules e.g. `from src import utils`)
+# - setting up PROJECT_ROOT environment variable
+# (which is used as a base for paths in "configs/paths/default.yaml")
+# (this way all filepaths are the same no matter where you run the code)
+# - loading environment variables from ".env" in root dir
+#
+# you can remove it if you:
+# 1. either install project as a package or move entry files to project root dir
+# 2. set `root_dir` to "." in "configs/paths/default.yaml"
+#
+# more info: https://github.com/ashleve/rootutils
+# ------------------------------------------------------------------------------------ #
+
+
+log = utils.get_pylogger(__name__)
+
+
+@utils.task_wrapper
+def train(cfg: DictConfig) -> Tuple[Dict[str, Any], Dict[str, Any]]:
+ """Trains the model. Can additionally evaluate on a testset, using best weights obtained during
+ training.
+
+ This method is wrapped in optional @task_wrapper decorator, that controls the behavior during
+ failure. Useful for multiruns, saving info about the crash, etc.
+
+ :param cfg: A DictConfig configuration composed by Hydra.
+ :return: A tuple with metrics and dict with all instantiated objects.
+ """
+ # set seed for random number generators in pytorch, numpy and python.random
+ if cfg.get("seed"):
+ L.seed_everything(cfg.seed, workers=True)
+
+ log.info(f"Instantiating datamodule <{cfg.data._target_}>") # pylint: disable=protected-access
+ datamodule: LightningDataModule = hydra.utils.instantiate(cfg.data)
+
+ log.info(f"Instantiating model <{cfg.model._target_}>") # pylint: disable=protected-access
+ model: LightningModule = hydra.utils.instantiate(cfg.model)
+
+ log.info("Instantiating callbacks...")
+ callbacks: List[Callback] = utils.instantiate_callbacks(cfg.get("callbacks"))
+
+ log.info("Instantiating loggers...")
+ logger: List[Logger] = utils.instantiate_loggers(cfg.get("logger"))
+
+ log.info(f"Instantiating trainer <{cfg.trainer._target_}>") # pylint: disable=protected-access
+ trainer: Trainer = hydra.utils.instantiate(cfg.trainer, callbacks=callbacks, logger=logger)
+
+ object_dict = {
+ "cfg": cfg,
+ "datamodule": datamodule,
+ "model": model,
+ "callbacks": callbacks,
+ "logger": logger,
+ "trainer": trainer,
+ }
+
+ if logger:
+ log.info("Logging hyperparameters!")
+ utils.log_hyperparameters(object_dict)
+
+ if cfg.get("train"):
+ log.info("Starting training!")
+ trainer.fit(model=model, datamodule=datamodule, ckpt_path=cfg.get("ckpt_path"))
+
+ train_metrics = trainer.callback_metrics
+
+ if cfg.get("test"):
+ log.info("Starting testing!")
+ ckpt_path = trainer.checkpoint_callback.best_model_path
+ if ckpt_path == "":
+ log.warning("Best ckpt not found! Using current weights for testing...")
+ ckpt_path = None
+ trainer.test(model=model, datamodule=datamodule, ckpt_path=ckpt_path)
+ log.info(f"Best ckpt path: {ckpt_path}")
+
+ test_metrics = trainer.callback_metrics
+
+ # merge train and test metrics
+ metric_dict = {**train_metrics, **test_metrics}
+
+ return metric_dict, object_dict
+
+
+@hydra.main(version_base="1.3", config_path="../configs", config_name="train.yaml")
+def main(cfg: DictConfig) -> Optional[float]:
+ """Main entry point for training.
+
+ :param cfg: DictConfig configuration composed by Hydra.
+ :return: Optional[float] with optimized metric value.
+ """
+ # apply extra utilities
+ # (e.g. ask for tags if none are provided in cfg, print cfg tree, etc.)
+ utils.extras(cfg)
+
+ # train the model
+ metric_dict, _ = train(cfg)
+
+ # safely retrieve metric value for hydra-based hyperparameter optimization
+ metric_value = utils.get_metric_value(metric_dict=metric_dict, metric_name=cfg.get("optimized_metric"))
+
+ # return optimized metric
+ return metric_value
+
+
+if __name__ == "__main__":
+ main() # pylint: disable=no-value-for-parameter
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..074db6461184e8cbb86d977cb41d9ebd918e958a
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/__init__.py
@@ -0,0 +1,5 @@
+from matcha.utils.instantiators import instantiate_callbacks, instantiate_loggers
+from matcha.utils.logging_utils import log_hyperparameters
+from matcha.utils.pylogger import get_pylogger
+from matcha.utils.rich_utils import enforce_tags, print_config_tree
+from matcha.utils.utils import extras, get_metric_value, task_wrapper
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/audio.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/audio.py
new file mode 100644
index 0000000000000000000000000000000000000000..0bcd74df47fb006f68deb5a5f4a4c2fb0aa84f57
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/audio.py
@@ -0,0 +1,82 @@
+import numpy as np
+import torch
+import torch.utils.data
+from librosa.filters import mel as librosa_mel_fn
+from scipy.io.wavfile import read
+
+MAX_WAV_VALUE = 32768.0
+
+
+def load_wav(full_path):
+ sampling_rate, data = read(full_path)
+ return data, sampling_rate
+
+
+def dynamic_range_compression(x, C=1, clip_val=1e-5):
+ return np.log(np.clip(x, a_min=clip_val, a_max=None) * C)
+
+
+def dynamic_range_decompression(x, C=1):
+ return np.exp(x) / C
+
+
+def dynamic_range_compression_torch(x, C=1, clip_val=1e-5):
+ return torch.log(torch.clamp(x, min=clip_val) * C)
+
+
+def dynamic_range_decompression_torch(x, C=1):
+ return torch.exp(x) / C
+
+
+def spectral_normalize_torch(magnitudes):
+ output = dynamic_range_compression_torch(magnitudes)
+ return output
+
+
+def spectral_de_normalize_torch(magnitudes):
+ output = dynamic_range_decompression_torch(magnitudes)
+ return output
+
+
+mel_basis = {}
+hann_window = {}
+
+
+def mel_spectrogram(y, n_fft, num_mels, sampling_rate, hop_size, win_size, fmin, fmax, center=False):
+ if torch.min(y) < -1.0:
+ print("min value is ", torch.min(y))
+ if torch.max(y) > 1.0:
+ print("max value is ", torch.max(y))
+
+ global mel_basis, hann_window # pylint: disable=global-statement
+ if f"{str(fmax)}_{str(y.device)}" not in mel_basis:
+ mel = librosa_mel_fn(sr=sampling_rate, n_fft=n_fft, n_mels=num_mels, fmin=fmin, fmax=fmax)
+ mel_basis[str(fmax) + "_" + str(y.device)] = torch.from_numpy(mel).float().to(y.device)
+ hann_window[str(y.device)] = torch.hann_window(win_size).to(y.device)
+
+ y = torch.nn.functional.pad(
+ y.unsqueeze(1), (int((n_fft - hop_size) / 2), int((n_fft - hop_size) / 2)), mode="reflect"
+ )
+ y = y.squeeze(1)
+
+ spec = torch.view_as_real(
+ torch.stft(
+ y,
+ n_fft,
+ hop_length=hop_size,
+ win_length=win_size,
+ window=hann_window[str(y.device)],
+ center=center,
+ pad_mode="reflect",
+ normalized=False,
+ onesided=True,
+ return_complex=True,
+ )
+ )
+
+ spec = torch.sqrt(spec.pow(2).sum(-1) + (1e-9))
+
+ spec = torch.matmul(mel_basis[str(fmax) + "_" + str(y.device)], spec)
+ spec = spectral_normalize_torch(spec)
+
+ return spec
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/generate_data_statistics.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/generate_data_statistics.py
new file mode 100644
index 0000000000000000000000000000000000000000..49ed3c1b072cc3292c899b200d657a8beec197f8
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/generate_data_statistics.py
@@ -0,0 +1,112 @@
+r"""
+The file creates a pickle file where the values needed for loading of dataset is stored and the model can load it
+when needed.
+
+Parameters from hparam.py will be used
+"""
+import argparse
+import json
+import os
+import sys
+from pathlib import Path
+
+import rootutils
+import torch
+from hydra import compose, initialize
+from omegaconf import open_dict
+from tqdm.auto import tqdm
+
+from matcha.data.text_mel_datamodule import TextMelDataModule
+from matcha.utils.logging_utils import pylogger
+
+log = pylogger.get_pylogger(__name__)
+
+
+def compute_data_statistics(data_loader: torch.utils.data.DataLoader, out_channels: int):
+ """Generate data mean and standard deviation helpful in data normalisation
+
+ Args:
+ data_loader (torch.utils.data.Dataloader): _description_
+ out_channels (int): mel spectrogram channels
+ """
+ total_mel_sum = 0
+ total_mel_sq_sum = 0
+ total_mel_len = 0
+
+ for batch in tqdm(data_loader, leave=False):
+ mels = batch["y"]
+ mel_lengths = batch["y_lengths"]
+
+ total_mel_len += torch.sum(mel_lengths)
+ total_mel_sum += torch.sum(mels)
+ total_mel_sq_sum += torch.sum(torch.pow(mels, 2))
+
+ data_mean = total_mel_sum / (total_mel_len * out_channels)
+ data_std = torch.sqrt((total_mel_sq_sum / (total_mel_len * out_channels)) - torch.pow(data_mean, 2))
+
+ return {"mel_mean": data_mean.item(), "mel_std": data_std.item()}
+
+
+def main():
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ "-i",
+ "--input-config",
+ type=str,
+ default="vctk.yaml",
+ help="The name of the yaml config file under configs/data",
+ )
+
+ parser.add_argument(
+ "-b",
+ "--batch-size",
+ type=int,
+ default="256",
+ help="Can have increased batch size for faster computation",
+ )
+
+ parser.add_argument(
+ "-f",
+ "--force",
+ action="store_true",
+ default=False,
+ required=False,
+ help="force overwrite the file",
+ )
+ args = parser.parse_args()
+ output_file = Path(args.input_config).with_suffix(".json")
+
+ if os.path.exists(output_file) and not args.force:
+ print("File already exists. Use -f to force overwrite")
+ sys.exit(1)
+
+ with initialize(version_base="1.3", config_path="../../configs/data"):
+ cfg = compose(config_name=args.input_config, return_hydra_config=True, overrides=[])
+
+ root_path = rootutils.find_root(search_from=__file__, indicator=".project-root")
+
+ with open_dict(cfg):
+ del cfg["hydra"]
+ del cfg["_target_"]
+ cfg["data_statistics"] = None
+ cfg["seed"] = 1234
+ cfg["batch_size"] = args.batch_size
+ cfg["train_filelist_path"] = str(os.path.join(root_path, cfg["train_filelist_path"]))
+ cfg["valid_filelist_path"] = str(os.path.join(root_path, cfg["valid_filelist_path"]))
+ cfg["load_durations"] = False
+
+ text_mel_datamodule = TextMelDataModule(**cfg)
+ text_mel_datamodule.setup()
+ data_loader = text_mel_datamodule.train_dataloader()
+ log.info("Dataloader loaded! Now computing stats...")
+ params = compute_data_statistics(data_loader, cfg["n_feats"])
+ print(params)
+ json.dump(
+ params,
+ open(output_file, "w"),
+ )
+
+
+if __name__ == "__main__":
+ main()
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/get_durations_from_trained_model.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/get_durations_from_trained_model.py
new file mode 100644
index 0000000000000000000000000000000000000000..0fe2f35c4238756158370ed1463bfa06f05f7e3d
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/get_durations_from_trained_model.py
@@ -0,0 +1,195 @@
+r"""
+The file creates a pickle file where the values needed for loading of dataset is stored and the model can load it
+when needed.
+
+Parameters from hparam.py will be used
+"""
+import argparse
+import json
+import os
+import sys
+from pathlib import Path
+
+import lightning
+import numpy as np
+import rootutils
+import torch
+from hydra import compose, initialize
+from omegaconf import open_dict
+from torch import nn
+from tqdm.auto import tqdm
+
+from matcha.cli import get_device
+from matcha.data.text_mel_datamodule import TextMelDataModule
+from matcha.models.matcha_tts import MatchaTTS
+from matcha.utils.logging_utils import pylogger
+from matcha.utils.utils import get_phoneme_durations
+
+log = pylogger.get_pylogger(__name__)
+
+
+def save_durations_to_folder(
+ attn: torch.Tensor, x_length: int, y_length: int, filepath: str, output_folder: Path, text: str
+):
+ durations = attn.squeeze().sum(1)[:x_length].numpy()
+ durations_json = get_phoneme_durations(durations, text)
+ output = output_folder / Path(filepath).name.replace(".wav", ".npy")
+ with open(output.with_suffix(".json"), "w", encoding="utf-8") as f:
+ json.dump(durations_json, f, indent=4, ensure_ascii=False)
+
+ np.save(output, durations)
+
+
+@torch.inference_mode()
+def compute_durations(data_loader: torch.utils.data.DataLoader, model: nn.Module, device: torch.device, output_folder):
+ """Generate durations from the model for each datapoint and save it in a folder
+
+ Args:
+ data_loader (torch.utils.data.DataLoader): Dataloader
+ model (nn.Module): MatchaTTS model
+ device (torch.device): GPU or CPU
+ """
+
+ for batch in tqdm(data_loader, desc="🍵 Computing durations 🍵:"):
+ x, x_lengths = batch["x"], batch["x_lengths"]
+ y, y_lengths = batch["y"], batch["y_lengths"]
+ spks = batch["spks"]
+ x = x.to(device)
+ y = y.to(device)
+ x_lengths = x_lengths.to(device)
+ y_lengths = y_lengths.to(device)
+ spks = spks.to(device) if spks is not None else None
+
+ _, _, _, attn = model(
+ x=x,
+ x_lengths=x_lengths,
+ y=y,
+ y_lengths=y_lengths,
+ spks=spks,
+ )
+ attn = attn.cpu()
+ for i in range(attn.shape[0]):
+ save_durations_to_folder(
+ attn[i],
+ x_lengths[i].item(),
+ y_lengths[i].item(),
+ batch["filepaths"][i],
+ output_folder,
+ batch["x_texts"][i],
+ )
+
+
+def main():
+ parser = argparse.ArgumentParser()
+
+ parser.add_argument(
+ "-i",
+ "--input-config",
+ type=str,
+ default="ljspeech.yaml",
+ help="The name of the yaml config file under configs/data",
+ )
+
+ parser.add_argument(
+ "-b",
+ "--batch-size",
+ type=int,
+ default="32",
+ help="Can have increased batch size for faster computation",
+ )
+
+ parser.add_argument(
+ "-f",
+ "--force",
+ action="store_true",
+ default=False,
+ required=False,
+ help="force overwrite the file",
+ )
+ parser.add_argument(
+ "-c",
+ "--checkpoint_path",
+ type=str,
+ required=True,
+ help="Path to the checkpoint file to load the model from",
+ )
+
+ parser.add_argument(
+ "-o",
+ "--output-folder",
+ type=str,
+ default=None,
+ help="Output folder to save the data statistics",
+ )
+
+ parser.add_argument(
+ "--cpu", action="store_true", help="Use CPU for inference, not recommended (default: use GPU if available)"
+ )
+
+ args = parser.parse_args()
+
+ with initialize(version_base="1.3", config_path="../../configs/data"):
+ cfg = compose(config_name=args.input_config, return_hydra_config=True, overrides=[])
+
+ root_path = rootutils.find_root(search_from=__file__, indicator=".project-root")
+
+ with open_dict(cfg):
+ del cfg["hydra"]
+ del cfg["_target_"]
+ cfg["seed"] = 1234
+ cfg["batch_size"] = args.batch_size
+ cfg["train_filelist_path"] = str(os.path.join(root_path, cfg["train_filelist_path"]))
+ cfg["valid_filelist_path"] = str(os.path.join(root_path, cfg["valid_filelist_path"]))
+ cfg["load_durations"] = False
+
+ if args.output_folder is not None:
+ output_folder = Path(args.output_folder)
+ else:
+ output_folder = Path(cfg["train_filelist_path"]).parent / "durations"
+
+ print(f"Output folder set to: {output_folder}")
+
+ if os.path.exists(output_folder) and not args.force:
+ print("Folder already exists. Use -f to force overwrite")
+ sys.exit(1)
+
+ output_folder.mkdir(parents=True, exist_ok=True)
+
+ print(f"Preprocessing: {cfg['name']} from training filelist: {cfg['train_filelist_path']}")
+ print("Loading model...")
+ device = get_device(args)
+ model = MatchaTTS.load_from_checkpoint(args.checkpoint_path, map_location=device)
+
+ text_mel_datamodule = TextMelDataModule(**cfg)
+ text_mel_datamodule.setup()
+ try:
+ print("Computing stats for training set if exists...")
+ train_dataloader = text_mel_datamodule.train_dataloader()
+ compute_durations(train_dataloader, model, device, output_folder)
+ except lightning.fabric.utilities.exceptions.MisconfigurationException:
+ print("No training set found")
+
+ try:
+ print("Computing stats for validation set if exists...")
+ val_dataloader = text_mel_datamodule.val_dataloader()
+ compute_durations(val_dataloader, model, device, output_folder)
+ except lightning.fabric.utilities.exceptions.MisconfigurationException:
+ print("No validation set found")
+
+ try:
+ print("Computing stats for test set if exists...")
+ test_dataloader = text_mel_datamodule.test_dataloader()
+ compute_durations(test_dataloader, model, device, output_folder)
+ except lightning.fabric.utilities.exceptions.MisconfigurationException:
+ print("No test set found")
+
+ print(f"[+] Done! Data statistics saved to: {output_folder}")
+
+
+if __name__ == "__main__":
+ # Helps with generating durations for the dataset to train other architectures
+ # that cannot learn to align due to limited size of dataset
+ # Example usage:
+ # python python matcha/utils/get_durations_from_trained_model.py -i ljspeech.yaml -c pretrained_model
+ # This will create a folder in data/processed_data/durations/ljspeech with the durations
+ main()
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/instantiators.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/instantiators.py
new file mode 100644
index 0000000000000000000000000000000000000000..5547b4ed61ed8c21e63c528f58526a949879a94f
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/instantiators.py
@@ -0,0 +1,56 @@
+from typing import List
+
+import hydra
+from lightning import Callback
+from lightning.pytorch.loggers import Logger
+from omegaconf import DictConfig
+
+from matcha.utils import pylogger
+
+log = pylogger.get_pylogger(__name__)
+
+
+def instantiate_callbacks(callbacks_cfg: DictConfig) -> List[Callback]:
+ """Instantiates callbacks from config.
+
+ :param callbacks_cfg: A DictConfig object containing callback configurations.
+ :return: A list of instantiated callbacks.
+ """
+ callbacks: List[Callback] = []
+
+ if not callbacks_cfg:
+ log.warning("No callback configs found! Skipping..")
+ return callbacks
+
+ if not isinstance(callbacks_cfg, DictConfig):
+ raise TypeError("Callbacks config must be a DictConfig!")
+
+ for _, cb_conf in callbacks_cfg.items():
+ if isinstance(cb_conf, DictConfig) and "_target_" in cb_conf:
+ log.info(f"Instantiating callback <{cb_conf._target_}>") # pylint: disable=protected-access
+ callbacks.append(hydra.utils.instantiate(cb_conf))
+
+ return callbacks
+
+
+def instantiate_loggers(logger_cfg: DictConfig) -> List[Logger]:
+ """Instantiates loggers from config.
+
+ :param logger_cfg: A DictConfig object containing logger configurations.
+ :return: A list of instantiated loggers.
+ """
+ logger: List[Logger] = []
+
+ if not logger_cfg:
+ log.warning("No logger configs found! Skipping...")
+ return logger
+
+ if not isinstance(logger_cfg, DictConfig):
+ raise TypeError("Logger config must be a DictConfig!")
+
+ for _, lg_conf in logger_cfg.items():
+ if isinstance(lg_conf, DictConfig) and "_target_" in lg_conf:
+ log.info(f"Instantiating logger <{lg_conf._target_}>") # pylint: disable=protected-access
+ logger.append(hydra.utils.instantiate(lg_conf))
+
+ return logger
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/logging_utils.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/logging_utils.py
new file mode 100644
index 0000000000000000000000000000000000000000..1a12d1ddafa25ca3ae8e497bcd7de2191f13659b
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/logging_utils.py
@@ -0,0 +1,53 @@
+from typing import Any, Dict
+
+from lightning.pytorch.utilities import rank_zero_only
+from omegaconf import OmegaConf
+
+from matcha.utils import pylogger
+
+log = pylogger.get_pylogger(__name__)
+
+
+@rank_zero_only
+def log_hyperparameters(object_dict: Dict[str, Any]) -> None:
+ """Controls which config parts are saved by Lightning loggers.
+
+ Additionally saves:
+ - Number of model parameters
+
+ :param object_dict: A dictionary containing the following objects:
+ - `"cfg"`: A DictConfig object containing the main config.
+ - `"model"`: The Lightning model.
+ - `"trainer"`: The Lightning trainer.
+ """
+ hparams = {}
+
+ cfg = OmegaConf.to_container(object_dict["cfg"])
+ model = object_dict["model"]
+ trainer = object_dict["trainer"]
+
+ if not trainer.logger:
+ log.warning("Logger not found! Skipping hyperparameter logging...")
+ return
+
+ hparams["model"] = cfg["model"]
+
+ # save number of model parameters
+ hparams["model/params/total"] = sum(p.numel() for p in model.parameters())
+ hparams["model/params/trainable"] = sum(p.numel() for p in model.parameters() if p.requires_grad)
+ hparams["model/params/non_trainable"] = sum(p.numel() for p in model.parameters() if not p.requires_grad)
+
+ hparams["data"] = cfg["data"]
+ hparams["trainer"] = cfg["trainer"]
+
+ hparams["callbacks"] = cfg.get("callbacks")
+ hparams["extras"] = cfg.get("extras")
+
+ hparams["task_name"] = cfg.get("task_name")
+ hparams["tags"] = cfg.get("tags")
+ hparams["ckpt_path"] = cfg.get("ckpt_path")
+ hparams["seed"] = cfg.get("seed")
+
+ # send hparams to all loggers
+ for logger in trainer.loggers:
+ logger.log_hyperparams(hparams)
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/model.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/model.py
new file mode 100644
index 0000000000000000000000000000000000000000..869cc6092f5952930534c47544fae88308e96abf
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/model.py
@@ -0,0 +1,90 @@
+""" from https://github.com/jaywalnut310/glow-tts """
+
+import numpy as np
+import torch
+
+
+def sequence_mask(length, max_length=None):
+ if max_length is None:
+ max_length = length.max()
+ x = torch.arange(max_length, dtype=length.dtype, device=length.device)
+ return x.unsqueeze(0) < length.unsqueeze(1)
+
+
+def fix_len_compatibility(length, num_downsamplings_in_unet=2):
+ factor = torch.scalar_tensor(2).pow(num_downsamplings_in_unet)
+ length = (length / factor).ceil() * factor
+ if not torch.onnx.is_in_onnx_export():
+ return length.int().item()
+ else:
+ return length
+
+
+def convert_pad_shape(pad_shape):
+ inverted_shape = pad_shape[::-1]
+ pad_shape = [item for sublist in inverted_shape for item in sublist]
+ return pad_shape
+
+
+def generate_path(duration, mask):
+ device = duration.device
+
+ b, t_x, t_y = mask.shape
+ cum_duration = torch.cumsum(duration, 1)
+ path = torch.zeros(b, t_x, t_y, dtype=mask.dtype).to(device=device)
+
+ cum_duration_flat = cum_duration.view(b * t_x)
+ path = sequence_mask(cum_duration_flat, t_y).to(mask.dtype)
+ path = path.view(b, t_x, t_y)
+ path = path - torch.nn.functional.pad(path, convert_pad_shape([[0, 0], [1, 0], [0, 0]]))[:, :-1]
+ path = path * mask
+ return path
+
+
+def duration_loss(logw, logw_, lengths):
+ loss = torch.sum((logw - logw_) ** 2) / torch.sum(lengths)
+ return loss
+
+
+def normalize(data, mu, std):
+ if not isinstance(mu, (float, int)):
+ if isinstance(mu, list):
+ mu = torch.tensor(mu, dtype=data.dtype, device=data.device)
+ elif isinstance(mu, torch.Tensor):
+ mu = mu.to(data.device)
+ elif isinstance(mu, np.ndarray):
+ mu = torch.from_numpy(mu).to(data.device)
+ mu = mu.unsqueeze(-1)
+
+ if not isinstance(std, (float, int)):
+ if isinstance(std, list):
+ std = torch.tensor(std, dtype=data.dtype, device=data.device)
+ elif isinstance(std, torch.Tensor):
+ std = std.to(data.device)
+ elif isinstance(std, np.ndarray):
+ std = torch.from_numpy(std).to(data.device)
+ std = std.unsqueeze(-1)
+
+ return (data - mu) / std
+
+
+def denormalize(data, mu, std):
+ if not isinstance(mu, float):
+ if isinstance(mu, list):
+ mu = torch.tensor(mu, dtype=data.dtype, device=data.device)
+ elif isinstance(mu, torch.Tensor):
+ mu = mu.to(data.device)
+ elif isinstance(mu, np.ndarray):
+ mu = torch.from_numpy(mu).to(data.device)
+ mu = mu.unsqueeze(-1)
+
+ if not isinstance(std, float):
+ if isinstance(std, list):
+ std = torch.tensor(std, dtype=data.dtype, device=data.device)
+ elif isinstance(std, torch.Tensor):
+ std = std.to(data.device)
+ elif isinstance(std, np.ndarray):
+ std = torch.from_numpy(std).to(data.device)
+ std = std.unsqueeze(-1)
+
+ return data * std + mu
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/monotonic_align/__init__.py b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/monotonic_align/__init__.py
new file mode 100644
index 0000000000000000000000000000000000000000..eee6e0d47c2e3612ef02bc17442e6886998e5a94
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/monotonic_align/__init__.py
@@ -0,0 +1,22 @@
+import numpy as np
+import torch
+
+from matcha.utils.monotonic_align.core import maximum_path_c
+
+
+def maximum_path(value, mask):
+ """Cython optimised version.
+ value: [b, t_x, t_y]
+ mask: [b, t_x, t_y]
+ """
+ value = value * mask
+ device = value.device
+ dtype = value.dtype
+ value = value.data.cpu().numpy().astype(np.float32)
+ path = np.zeros_like(value).astype(np.int32)
+ mask = mask.data.cpu().numpy()
+
+ t_x_max = mask.sum(1)[:, 0].astype(np.int32)
+ t_y_max = mask.sum(2)[:, 0].astype(np.int32)
+ maximum_path_c(path, value, t_x_max, t_y_max)
+ return torch.from_numpy(path).to(device=device, dtype=dtype)
diff --git a/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/monotonic_align/core.c b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/monotonic_align/core.c
new file mode 100644
index 0000000000000000000000000000000000000000..2043c3012a185ce1e35054e39ca47b64844ec8c3
--- /dev/null
+++ b/runtime/matcha_tts_src/matcha-tts-0.0.7.2/matcha/utils/monotonic_align/core.c
@@ -0,0 +1,29795 @@
+/* Generated by Cython 3.0.2 */
+
+/* BEGIN: Cython Metadata
+{
+ "distutils": {
+ "depends": [],
+ "name": "matcha.utils.monotonic_align.core",
+ "sources": [
+ "matcha/utils/monotonic_align/core.pyx"
+ ]
+ },
+ "module_name": "matcha.utils.monotonic_align.core"
+}
+END: Cython Metadata */
+
+#ifndef PY_SSIZE_T_CLEAN
+#define PY_SSIZE_T_CLEAN
+#endif /* PY_SSIZE_T_CLEAN */
+#if defined(CYTHON_LIMITED_API) && 0
+ #ifndef Py_LIMITED_API
+ #if CYTHON_LIMITED_API+0 > 0x03030000
+ #define Py_LIMITED_API CYTHON_LIMITED_API
+ #else
+ #define Py_LIMITED_API 0x03030000
+ #endif
+ #endif
+#endif
+
+#include "Python.h"
+#ifndef Py_PYTHON_H
+ #error Python headers needed to compile C extensions, please install development version of Python.
+#elif PY_VERSION_HEX < 0x02070000 || (0x03000000 <= PY_VERSION_HEX && PY_VERSION_HEX < 0x03030000)
+ #error Cython requires Python 2.7+ or Python 3.3+.
+#else
+#if CYTHON_LIMITED_API
+#define __PYX_EXTRA_ABI_MODULE_NAME "limited"
+#else
+#define __PYX_EXTRA_ABI_MODULE_NAME ""
+#endif
+#define CYTHON_ABI "3_0_2" __PYX_EXTRA_ABI_MODULE_NAME
+#define __PYX_ABI_MODULE_NAME "_cython_" CYTHON_ABI
+#define __PYX_TYPE_MODULE_PREFIX __PYX_ABI_MODULE_NAME "."
+#define CYTHON_HEX_VERSION 0x030002F0
+#define CYTHON_FUTURE_DIVISION 1
+#include
+#ifndef offsetof
+ #define offsetof(type, member) ( (size_t) & ((type*)0) -> member )
+#endif
+#if !defined(_WIN32) && !defined(WIN32) && !defined(MS_WINDOWS)
+ #ifndef __stdcall
+ #define __stdcall
+ #endif
+ #ifndef __cdecl
+ #define __cdecl
+ #endif
+ #ifndef __fastcall
+ #define __fastcall
+ #endif
+#endif
+#ifndef DL_IMPORT
+ #define DL_IMPORT(t) t
+#endif
+#ifndef DL_EXPORT
+ #define DL_EXPORT(t) t
+#endif
+#define __PYX_COMMA ,
+#ifndef HAVE_LONG_LONG
+ #define HAVE_LONG_LONG
+#endif
+#ifndef PY_LONG_LONG
+ #define PY_LONG_LONG LONG_LONG
+#endif
+#ifndef Py_HUGE_VAL
+ #define Py_HUGE_VAL HUGE_VAL
+#endif
+#define __PYX_LIMITED_VERSION_HEX PY_VERSION_HEX
+#if defined(GRAALVM_PYTHON)
+ /* For very preliminary testing purposes. Most variables are set the same as PyPy.
+ The existence of this section does not imply that anything works or is even tested */
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #define CYTHON_COMPILING_IN_LIMITED_API 0
+ #define CYTHON_COMPILING_IN_GRAAL 1
+ #define CYTHON_COMPILING_IN_NOGIL 0
+ #undef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 0
+ #undef CYTHON_USE_TYPE_SPECS
+ #define CYTHON_USE_TYPE_SPECS 0
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #if PY_VERSION_HEX < 0x03050000
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #undef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 1
+ #undef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 0
+ #undef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 0
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_GIL
+ #define CYTHON_FAST_GIL 0
+ #undef CYTHON_METH_FASTCALL
+ #define CYTHON_METH_FASTCALL 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #ifndef CYTHON_PEP487_INIT_SUBCLASS
+ #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
+ #endif
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+ #undef CYTHON_USE_MODULE_STATE
+ #define CYTHON_USE_MODULE_STATE 0
+ #undef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 0
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+ #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+ #endif
+#elif defined(PYPY_VERSION)
+ #define CYTHON_COMPILING_IN_PYPY 1
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #define CYTHON_COMPILING_IN_LIMITED_API 0
+ #define CYTHON_COMPILING_IN_GRAAL 0
+ #define CYTHON_COMPILING_IN_NOGIL 0
+ #undef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 0
+ #ifndef CYTHON_USE_TYPE_SPECS
+ #define CYTHON_USE_TYPE_SPECS 0
+ #endif
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #if PY_VERSION_HEX < 0x03050000
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #undef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 1
+ #undef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 0
+ #undef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 0
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_GIL
+ #define CYTHON_FAST_GIL 0
+ #undef CYTHON_METH_FASTCALL
+ #define CYTHON_METH_FASTCALL 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #ifndef CYTHON_PEP487_INIT_SUBCLASS
+ #define CYTHON_PEP487_INIT_SUBCLASS (PY_MAJOR_VERSION >= 3)
+ #endif
+ #if PY_VERSION_HEX < 0x03090000
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+ #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+ #endif
+ #undef CYTHON_USE_MODULE_STATE
+ #define CYTHON_USE_MODULE_STATE 0
+ #undef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE (PY_VERSION_HEX >= 0x030400a1 && PYPY_VERSION_NUM >= 0x07030C00)
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+ #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+ #endif
+#elif defined(CYTHON_LIMITED_API)
+ #ifdef Py_LIMITED_API
+ #undef __PYX_LIMITED_VERSION_HEX
+ #define __PYX_LIMITED_VERSION_HEX Py_LIMITED_API
+ #endif
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #define CYTHON_COMPILING_IN_LIMITED_API 1
+ #define CYTHON_COMPILING_IN_GRAAL 0
+ #define CYTHON_COMPILING_IN_NOGIL 0
+ #undef CYTHON_CLINE_IN_TRACEBACK
+ #define CYTHON_CLINE_IN_TRACEBACK 0
+ #undef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 0
+ #undef CYTHON_USE_TYPE_SPECS
+ #define CYTHON_USE_TYPE_SPECS 1
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #undef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 0
+ #ifndef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #endif
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #undef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 0
+ #undef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 0
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_GIL
+ #define CYTHON_FAST_GIL 0
+ #undef CYTHON_METH_FASTCALL
+ #define CYTHON_METH_FASTCALL 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #ifndef CYTHON_PEP487_INIT_SUBCLASS
+ #define CYTHON_PEP487_INIT_SUBCLASS 1
+ #endif
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+ #undef CYTHON_USE_MODULE_STATE
+ #define CYTHON_USE_MODULE_STATE 1
+ #ifndef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 0
+ #endif
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+ #define CYTHON_UPDATE_DESCRIPTOR_DOC 0
+ #endif
+#elif defined(PY_NOGIL)
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_CPYTHON 0
+ #define CYTHON_COMPILING_IN_LIMITED_API 0
+ #define CYTHON_COMPILING_IN_GRAAL 0
+ #define CYTHON_COMPILING_IN_NOGIL 1
+ #ifndef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 0
+ #ifndef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #undef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 0
+ #ifndef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 1
+ #endif
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #undef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 0
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #ifndef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 1
+ #endif
+ #ifndef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 1
+ #endif
+ #undef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 0
+ #undef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 0
+ #ifndef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+ #endif
+ #ifndef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 1
+ #endif
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+#else
+ #define CYTHON_COMPILING_IN_PYPY 0
+ #define CYTHON_COMPILING_IN_CPYTHON 1
+ #define CYTHON_COMPILING_IN_LIMITED_API 0
+ #define CYTHON_COMPILING_IN_GRAAL 0
+ #define CYTHON_COMPILING_IN_NOGIL 0
+ #ifndef CYTHON_USE_TYPE_SLOTS
+ #define CYTHON_USE_TYPE_SLOTS 1
+ #endif
+ #ifndef CYTHON_USE_TYPE_SPECS
+ #define CYTHON_USE_TYPE_SPECS 0
+ #endif
+ #ifndef CYTHON_USE_PYTYPE_LOOKUP
+ #define CYTHON_USE_PYTYPE_LOOKUP 1
+ #endif
+ #if PY_MAJOR_VERSION < 3
+ #undef CYTHON_USE_ASYNC_SLOTS
+ #define CYTHON_USE_ASYNC_SLOTS 0
+ #elif !defined(CYTHON_USE_ASYNC_SLOTS)
+ #define CYTHON_USE_ASYNC_SLOTS 1
+ #endif
+ #ifndef CYTHON_USE_PYLONG_INTERNALS
+ #define CYTHON_USE_PYLONG_INTERNALS 1
+ #endif
+ #ifndef CYTHON_USE_PYLIST_INTERNALS
+ #define CYTHON_USE_PYLIST_INTERNALS 1
+ #endif
+ #ifndef CYTHON_USE_UNICODE_INTERNALS
+ #define CYTHON_USE_UNICODE_INTERNALS 1
+ #endif
+ #if PY_VERSION_HEX < 0x030300F0 || PY_VERSION_HEX >= 0x030B00A2
+ #undef CYTHON_USE_UNICODE_WRITER
+ #define CYTHON_USE_UNICODE_WRITER 0
+ #elif !defined(CYTHON_USE_UNICODE_WRITER)
+ #define CYTHON_USE_UNICODE_WRITER 1
+ #endif
+ #ifndef CYTHON_AVOID_BORROWED_REFS
+ #define CYTHON_AVOID_BORROWED_REFS 0
+ #endif
+ #ifndef CYTHON_ASSUME_SAFE_MACROS
+ #define CYTHON_ASSUME_SAFE_MACROS 1
+ #endif
+ #ifndef CYTHON_UNPACK_METHODS
+ #define CYTHON_UNPACK_METHODS 1
+ #endif
+ #ifndef CYTHON_FAST_THREAD_STATE
+ #define CYTHON_FAST_THREAD_STATE 1
+ #endif
+ #ifndef CYTHON_FAST_GIL
+ #define CYTHON_FAST_GIL (PY_MAJOR_VERSION < 3 || PY_VERSION_HEX >= 0x03060000 && PY_VERSION_HEX < 0x030C00A6)
+ #endif
+ #ifndef CYTHON_METH_FASTCALL
+ #define CYTHON_METH_FASTCALL (PY_VERSION_HEX >= 0x030700A1)
+ #endif
+ #ifndef CYTHON_FAST_PYCALL
+ #define CYTHON_FAST_PYCALL 1
+ #endif
+ #ifndef CYTHON_PEP487_INIT_SUBCLASS
+ #define CYTHON_PEP487_INIT_SUBCLASS 1
+ #endif
+ #if PY_VERSION_HEX < 0x03050000
+ #undef CYTHON_PEP489_MULTI_PHASE_INIT
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 0
+ #elif !defined(CYTHON_PEP489_MULTI_PHASE_INIT)
+ #define CYTHON_PEP489_MULTI_PHASE_INIT 1
+ #endif
+ #ifndef CYTHON_USE_MODULE_STATE
+ #define CYTHON_USE_MODULE_STATE 0
+ #endif
+ #if PY_VERSION_HEX < 0x030400a1
+ #undef CYTHON_USE_TP_FINALIZE
+ #define CYTHON_USE_TP_FINALIZE 0
+ #elif !defined(CYTHON_USE_TP_FINALIZE)
+ #define CYTHON_USE_TP_FINALIZE 1
+ #endif
+ #if PY_VERSION_HEX < 0x030600B1
+ #undef CYTHON_USE_DICT_VERSIONS
+ #define CYTHON_USE_DICT_VERSIONS 0
+ #elif !defined(CYTHON_USE_DICT_VERSIONS)
+ #define CYTHON_USE_DICT_VERSIONS (PY_VERSION_HEX < 0x030C00A5)
+ #endif
+ #if PY_VERSION_HEX < 0x030700A3
+ #undef CYTHON_USE_EXC_INFO_STACK
+ #define CYTHON_USE_EXC_INFO_STACK 0
+ #elif !defined(CYTHON_USE_EXC_INFO_STACK)
+ #define CYTHON_USE_EXC_INFO_STACK 1
+ #endif
+ #ifndef CYTHON_UPDATE_DESCRIPTOR_DOC
+ #define CYTHON_UPDATE_DESCRIPTOR_DOC 1
+ #endif
+#endif
+#if !defined(CYTHON_FAST_PYCCALL)
+#define CYTHON_FAST_PYCCALL (CYTHON_FAST_PYCALL && PY_VERSION_HEX >= 0x030600B1)
+#endif
+#if !defined(CYTHON_VECTORCALL)
+#define CYTHON_VECTORCALL (CYTHON_FAST_PYCCALL && PY_VERSION_HEX >= 0x030800B1)
+#endif
+#define CYTHON_BACKPORT_VECTORCALL (CYTHON_METH_FASTCALL && PY_VERSION_HEX < 0x030800B1)
+#if CYTHON_USE_PYLONG_INTERNALS
+ #if PY_MAJOR_VERSION < 3
+ #include "longintrepr.h"
+ #endif
+ #undef SHIFT
+ #undef BASE
+ #undef MASK
+ #ifdef SIZEOF_VOID_P
+ enum { __pyx_check_sizeof_voidp = 1 / (int)(SIZEOF_VOID_P == sizeof(void*)) };
+ #endif
+#endif
+#ifndef __has_attribute
+ #define __has_attribute(x) 0
+#endif
+#ifndef __has_cpp_attribute
+ #define __has_cpp_attribute(x) 0
+#endif
+#ifndef CYTHON_RESTRICT
+ #if defined(__GNUC__)
+ #define CYTHON_RESTRICT __restrict__
+ #elif defined(_MSC_VER) && _MSC_VER >= 1400
+ #define CYTHON_RESTRICT __restrict
+ #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define CYTHON_RESTRICT restrict
+ #else
+ #define CYTHON_RESTRICT
+ #endif
+#endif
+#ifndef CYTHON_UNUSED
+ #if defined(__cplusplus)
+ /* for clang __has_cpp_attribute(maybe_unused) is true even before C++17
+ * but leads to warnings with -pedantic, since it is a C++17 feature */
+ #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
+ #if __has_cpp_attribute(maybe_unused)
+ #define CYTHON_UNUSED [[maybe_unused]]
+ #endif
+ #endif
+ #endif
+#endif
+#ifndef CYTHON_UNUSED
+# if defined(__GNUC__)
+# if !(defined(__cplusplus)) || (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4))
+# define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+# define CYTHON_UNUSED
+# endif
+# elif defined(__ICC) || (defined(__INTEL_COMPILER) && !defined(_MSC_VER))
+# define CYTHON_UNUSED __attribute__ ((__unused__))
+# else
+# define CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_UNUSED_VAR
+# if defined(__cplusplus)
+ template void CYTHON_UNUSED_VAR( const T& ) { }
+# else
+# define CYTHON_UNUSED_VAR(x) (void)(x)
+# endif
+#endif
+#ifndef CYTHON_MAYBE_UNUSED_VAR
+ #define CYTHON_MAYBE_UNUSED_VAR(x) CYTHON_UNUSED_VAR(x)
+#endif
+#ifndef CYTHON_NCP_UNUSED
+# if CYTHON_COMPILING_IN_CPYTHON
+# define CYTHON_NCP_UNUSED
+# else
+# define CYTHON_NCP_UNUSED CYTHON_UNUSED
+# endif
+#endif
+#ifndef CYTHON_USE_CPP_STD_MOVE
+ #if defined(__cplusplus) && (\
+ __cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
+ #define CYTHON_USE_CPP_STD_MOVE 1
+ #else
+ #define CYTHON_USE_CPP_STD_MOVE 0
+ #endif
+#endif
+#define __Pyx_void_to_None(void_result) ((void)(void_result), Py_INCREF(Py_None), Py_None)
+#ifdef _MSC_VER
+ #ifndef _MSC_STDINT_H_
+ #if _MSC_VER < 1300
+ typedef unsigned char uint8_t;
+ typedef unsigned short uint16_t;
+ typedef unsigned int uint32_t;
+ #else
+ typedef unsigned __int8 uint8_t;
+ typedef unsigned __int16 uint16_t;
+ typedef unsigned __int32 uint32_t;
+ #endif
+ #endif
+ #if _MSC_VER < 1300
+ #ifdef _WIN64
+ typedef unsigned long long __pyx_uintptr_t;
+ #else
+ typedef unsigned int __pyx_uintptr_t;
+ #endif
+ #else
+ #ifdef _WIN64
+ typedef unsigned __int64 __pyx_uintptr_t;
+ #else
+ typedef unsigned __int32 __pyx_uintptr_t;
+ #endif
+ #endif
+#else
+ #include
+ typedef uintptr_t __pyx_uintptr_t;
+#endif
+#ifndef CYTHON_FALLTHROUGH
+ #if defined(__cplusplus)
+ /* for clang __has_cpp_attribute(fallthrough) is true even before C++17
+ * but leads to warnings with -pedantic, since it is a C++17 feature */
+ #if ((defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) || __cplusplus >= 201703L)
+ #if __has_cpp_attribute(fallthrough)
+ #define CYTHON_FALLTHROUGH [[fallthrough]]
+ #endif
+ #endif
+ #ifndef CYTHON_FALLTHROUGH
+ #if __has_cpp_attribute(clang::fallthrough)
+ #define CYTHON_FALLTHROUGH [[clang::fallthrough]]
+ #elif __has_cpp_attribute(gnu::fallthrough)
+ #define CYTHON_FALLTHROUGH [[gnu::fallthrough]]
+ #endif
+ #endif
+ #endif
+ #ifndef CYTHON_FALLTHROUGH
+ #if __has_attribute(fallthrough)
+ #define CYTHON_FALLTHROUGH __attribute__((fallthrough))
+ #else
+ #define CYTHON_FALLTHROUGH
+ #endif
+ #endif
+ #if defined(__clang__) && defined(__apple_build_version__)
+ #if __apple_build_version__ < 7000000
+ #undef CYTHON_FALLTHROUGH
+ #define CYTHON_FALLTHROUGH
+ #endif
+ #endif
+#endif
+#ifdef __cplusplus
+ template
+ struct __PYX_IS_UNSIGNED_IMPL {static const bool value = T(0) < T(-1);};
+ #define __PYX_IS_UNSIGNED(type) (__PYX_IS_UNSIGNED_IMPL::value)
+#else
+ #define __PYX_IS_UNSIGNED(type) (((type)-1) > 0)
+#endif
+#if CYTHON_COMPILING_IN_PYPY == 1
+ #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x030A0000)
+#else
+ #define __PYX_NEED_TP_PRINT_SLOT (PY_VERSION_HEX >= 0x030800b4 && PY_VERSION_HEX < 0x03090000)
+#endif
+#define __PYX_REINTERPRET_FUNCION(func_pointer, other_pointer) ((func_pointer)(void(*)(void))(other_pointer))
+
+#ifndef CYTHON_INLINE
+ #if defined(__clang__)
+ #define CYTHON_INLINE __inline__ __attribute__ ((__unused__))
+ #elif defined(__GNUC__)
+ #define CYTHON_INLINE __inline__
+ #elif defined(_MSC_VER)
+ #define CYTHON_INLINE __inline
+ #elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define CYTHON_INLINE inline
+ #else
+ #define CYTHON_INLINE
+ #endif
+#endif
+
+#define __PYX_BUILD_PY_SSIZE_T "n"
+#define CYTHON_FORMAT_SSIZE_T "z"
+#if PY_MAJOR_VERSION < 3
+ #define __Pyx_BUILTIN_MODULE_NAME "__builtin__"
+ #define __Pyx_DefaultClassType PyClass_Type
+ #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_New(a+k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#else
+ #define __Pyx_BUILTIN_MODULE_NAME "builtins"
+ #define __Pyx_DefaultClassType PyType_Type
+#if CYTHON_COMPILING_IN_LIMITED_API
+ static CYTHON_INLINE PyObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyObject *exception_table = NULL;
+ PyObject *types_module=NULL, *code_type=NULL, *result=NULL;
+ PyObject *version_info; // borrowed
+ PyObject *py_minor_version = NULL;
+ long minor_version = 0;
+ PyObject *type, *value, *traceback;
+ PyErr_Fetch(&type, &value, &traceback);
+ #if __PYX_LIMITED_VERSION_HEX >= 0x030B0000
+ minor_version = 11; // we don't yet need to distinguish between versions > 11
+ #else
+ if (!(version_info = PySys_GetObject("version_info"))) goto end;
+ if (!(py_minor_version = PySequence_GetItem(version_info, 1))) goto end;
+ minor_version = PyLong_AsLong(py_minor_version);
+ if (minor_version == -1 && PyErr_Occurred()) goto end;
+ #endif
+ if (!(types_module = PyImport_ImportModule("types"))) goto end;
+ if (!(code_type = PyObject_GetAttrString(types_module, "CodeType"))) goto end;
+ if (minor_version <= 7) {
+ (void)p;
+ result = PyObject_CallFunction(code_type, "iiiiiOOOOOOiOO", a, k, l, s, f, code,
+ c, n, v, fn, name, fline, lnos, fv, cell);
+ } else if (minor_version <= 10) {
+ result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOiOO", a,p, k, l, s, f, code,
+ c, n, v, fn, name, fline, lnos, fv, cell);
+ } else {
+ if (!(exception_table = PyBytes_FromStringAndSize(NULL, 0))) goto end;
+ result = PyObject_CallFunction(code_type, "iiiiiiOOOOOOOiOO", a,p, k, l, s, f, code,
+ c, n, v, fn, name, name, fline, lnos, exception_table, fv, cell);
+ }
+ end:
+ Py_XDECREF(code_type);
+ Py_XDECREF(exception_table);
+ Py_XDECREF(types_module);
+ Py_XDECREF(py_minor_version);
+ if (type) {
+ PyErr_Restore(type, value, traceback);
+ }
+ return result;
+ }
+ #ifndef CO_OPTIMIZED
+ #define CO_OPTIMIZED 0x0001
+ #endif
+ #ifndef CO_NEWLOCALS
+ #define CO_NEWLOCALS 0x0002
+ #endif
+ #ifndef CO_VARARGS
+ #define CO_VARARGS 0x0004
+ #endif
+ #ifndef CO_VARKEYWORDS
+ #define CO_VARKEYWORDS 0x0008
+ #endif
+ #ifndef CO_ASYNC_GENERATOR
+ #define CO_ASYNC_GENERATOR 0x0200
+ #endif
+ #ifndef CO_GENERATOR
+ #define CO_GENERATOR 0x0020
+ #endif
+ #ifndef CO_COROUTINE
+ #define CO_COROUTINE 0x0080
+ #endif
+#elif PY_VERSION_HEX >= 0x030B0000
+ static CYTHON_INLINE PyCodeObject* __Pyx_PyCode_New(int a, int p, int k, int l, int s, int f,
+ PyObject *code, PyObject *c, PyObject* n, PyObject *v,
+ PyObject *fv, PyObject *cell, PyObject* fn,
+ PyObject *name, int fline, PyObject *lnos) {
+ PyCodeObject *result;
+ PyObject *empty_bytes = PyBytes_FromStringAndSize("", 0); // we don't have access to __pyx_empty_bytes here
+ if (!empty_bytes) return NULL;
+ result =
+ #if PY_VERSION_HEX >= 0x030C0000
+ PyUnstable_Code_NewWithPosOnlyArgs
+ #else
+ PyCode_NewWithPosOnlyArgs
+ #endif
+ (a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, name, fline, lnos, empty_bytes);
+ Py_DECREF(empty_bytes);
+ return result;
+ }
+#elif PY_VERSION_HEX >= 0x030800B2 && !CYTHON_COMPILING_IN_PYPY
+ #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_NewWithPosOnlyArgs(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#else
+ #define __Pyx_PyCode_New(a, p, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)\
+ PyCode_New(a, k, l, s, f, code, c, n, v, fv, cell, fn, name, fline, lnos)
+#endif
+#endif
+#if PY_VERSION_HEX >= 0x030900A4 || defined(Py_IS_TYPE)
+ #define __Pyx_IS_TYPE(ob, type) Py_IS_TYPE(ob, type)
+#else
+ #define __Pyx_IS_TYPE(ob, type) (((const PyObject*)ob)->ob_type == (type))
+#endif
+#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_Is)
+ #define __Pyx_Py_Is(x, y) Py_Is(x, y)
+#else
+ #define __Pyx_Py_Is(x, y) ((x) == (y))
+#endif
+#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsNone)
+ #define __Pyx_Py_IsNone(ob) Py_IsNone(ob)
+#else
+ #define __Pyx_Py_IsNone(ob) __Pyx_Py_Is((ob), Py_None)
+#endif
+#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsTrue)
+ #define __Pyx_Py_IsTrue(ob) Py_IsTrue(ob)
+#else
+ #define __Pyx_Py_IsTrue(ob) __Pyx_Py_Is((ob), Py_True)
+#endif
+#if PY_VERSION_HEX >= 0x030A00B1 || defined(Py_IsFalse)
+ #define __Pyx_Py_IsFalse(ob) Py_IsFalse(ob)
+#else
+ #define __Pyx_Py_IsFalse(ob) __Pyx_Py_Is((ob), Py_False)
+#endif
+#define __Pyx_NoneAsNull(obj) (__Pyx_Py_IsNone(obj) ? NULL : (obj))
+#if PY_VERSION_HEX >= 0x030900F0 && !CYTHON_COMPILING_IN_PYPY
+ #define __Pyx_PyObject_GC_IsFinalized(o) PyObject_GC_IsFinalized(o)
+#else
+ #define __Pyx_PyObject_GC_IsFinalized(o) _PyGC_FINALIZED(o)
+#endif
+#ifndef CO_COROUTINE
+ #define CO_COROUTINE 0x80
+#endif
+#ifndef CO_ASYNC_GENERATOR
+ #define CO_ASYNC_GENERATOR 0x200
+#endif
+#ifndef Py_TPFLAGS_CHECKTYPES
+ #define Py_TPFLAGS_CHECKTYPES 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_INDEX
+ #define Py_TPFLAGS_HAVE_INDEX 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_NEWBUFFER
+ #define Py_TPFLAGS_HAVE_NEWBUFFER 0
+#endif
+#ifndef Py_TPFLAGS_HAVE_FINALIZE
+ #define Py_TPFLAGS_HAVE_FINALIZE 0
+#endif
+#ifndef Py_TPFLAGS_SEQUENCE
+ #define Py_TPFLAGS_SEQUENCE 0
+#endif
+#ifndef Py_TPFLAGS_MAPPING
+ #define Py_TPFLAGS_MAPPING 0
+#endif
+#ifndef METH_STACKLESS
+ #define METH_STACKLESS 0
+#endif
+#if PY_VERSION_HEX <= 0x030700A3 || !defined(METH_FASTCALL)
+ #ifndef METH_FASTCALL
+ #define METH_FASTCALL 0x80
+ #endif
+ typedef PyObject *(*__Pyx_PyCFunctionFast) (PyObject *self, PyObject *const *args, Py_ssize_t nargs);
+ typedef PyObject *(*__Pyx_PyCFunctionFastWithKeywords) (PyObject *self, PyObject *const *args,
+ Py_ssize_t nargs, PyObject *kwnames);
+#else
+ #define __Pyx_PyCFunctionFast _PyCFunctionFast
+ #define __Pyx_PyCFunctionFastWithKeywords _PyCFunctionFastWithKeywords
+#endif
+#if CYTHON_METH_FASTCALL
+ #define __Pyx_METH_FASTCALL METH_FASTCALL
+ #define __Pyx_PyCFunction_FastCall __Pyx_PyCFunctionFast
+ #define __Pyx_PyCFunction_FastCallWithKeywords __Pyx_PyCFunctionFastWithKeywords
+#else
+ #define __Pyx_METH_FASTCALL METH_VARARGS
+ #define __Pyx_PyCFunction_FastCall PyCFunction
+ #define __Pyx_PyCFunction_FastCallWithKeywords PyCFunctionWithKeywords
+#endif
+#if CYTHON_VECTORCALL
+ #define __pyx_vectorcallfunc vectorcallfunc
+ #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET PY_VECTORCALL_ARGUMENTS_OFFSET
+ #define __Pyx_PyVectorcall_NARGS(n) PyVectorcall_NARGS((size_t)(n))
+#elif CYTHON_BACKPORT_VECTORCALL
+ typedef PyObject *(*__pyx_vectorcallfunc)(PyObject *callable, PyObject *const *args,
+ size_t nargsf, PyObject *kwnames);
+ #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET ((size_t)1 << (8 * sizeof(size_t) - 1))
+ #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(((size_t)(n)) & ~__Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET))
+#else
+ #define __Pyx_PY_VECTORCALL_ARGUMENTS_OFFSET 0
+ #define __Pyx_PyVectorcall_NARGS(n) ((Py_ssize_t)(n))
+#endif
+#if __PYX_LIMITED_VERSION_HEX < 0x030900B1
+ #define __Pyx_PyType_FromModuleAndSpec(m, s, b) ((void)m, PyType_FromSpecWithBases(s, b))
+ typedef PyObject *(*__Pyx_PyCMethod)(PyObject *, PyTypeObject *, PyObject *const *, size_t, PyObject *);
+#else
+ #define __Pyx_PyType_FromModuleAndSpec(m, s, b) PyType_FromModuleAndSpec(m, s, b)
+ #define __Pyx_PyCMethod PyCMethod
+#endif
+#ifndef METH_METHOD
+ #define METH_METHOD 0x200
+#endif
+#if CYTHON_COMPILING_IN_PYPY && !defined(PyObject_Malloc)
+ #define PyObject_Malloc(s) PyMem_Malloc(s)
+ #define PyObject_Free(p) PyMem_Free(p)
+ #define PyObject_Realloc(p) PyMem_Realloc(p)
+#endif
+#if CYTHON_COMPILING_IN_LIMITED_API
+ #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
+ #define __Pyx_PyFrame_SetLineNumber(frame, lineno)
+#else
+ #define __Pyx_PyCode_HasFreeVars(co) (PyCode_GetNumFree(co) > 0)
+ #define __Pyx_PyFrame_SetLineNumber(frame, lineno) (frame)->f_lineno = (lineno)
+#endif
+#if CYTHON_COMPILING_IN_LIMITED_API
+ #define __Pyx_PyThreadState_Current PyThreadState_Get()
+#elif !CYTHON_FAST_THREAD_STATE
+ #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#elif PY_VERSION_HEX >= 0x03060000
+ #define __Pyx_PyThreadState_Current _PyThreadState_UncheckedGet()
+#elif PY_VERSION_HEX >= 0x03000000
+ #define __Pyx_PyThreadState_Current PyThreadState_GET()
+#else
+ #define __Pyx_PyThreadState_Current _PyThreadState_Current
+#endif
+#if CYTHON_COMPILING_IN_LIMITED_API
+static CYTHON_INLINE void *__Pyx_PyModule_GetState(PyObject *op)
+{
+ void *result;
+ result = PyModule_GetState(op);
+ if (!result)
+ Py_FatalError("Couldn't find the module state");
+ return result;
+}
+#endif
+#define __Pyx_PyObject_GetSlot(obj, name, func_ctype) __Pyx_PyType_GetSlot(Py_TYPE(obj), name, func_ctype)
+#if CYTHON_COMPILING_IN_LIMITED_API
+ #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((func_ctype) PyType_GetSlot((type), Py_##name))
+#else
+ #define __Pyx_PyType_GetSlot(type, name, func_ctype) ((type)->name)
+#endif
+#if PY_VERSION_HEX < 0x030700A2 && !defined(PyThread_tss_create) && !defined(Py_tss_NEEDS_INIT)
+#include "pythread.h"
+#define Py_tss_NEEDS_INIT 0
+typedef int Py_tss_t;
+static CYTHON_INLINE int PyThread_tss_create(Py_tss_t *key) {
+ *key = PyThread_create_key();
+ return 0;
+}
+static CYTHON_INLINE Py_tss_t * PyThread_tss_alloc(void) {
+ Py_tss_t *key = (Py_tss_t *)PyObject_Malloc(sizeof(Py_tss_t));
+ *key = Py_tss_NEEDS_INIT;
+ return key;
+}
+static CYTHON_INLINE void PyThread_tss_free(Py_tss_t *key) {
+ PyObject_Free(key);
+}
+static CYTHON_INLINE int PyThread_tss_is_created(Py_tss_t *key) {
+ return *key != Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE void PyThread_tss_delete(Py_tss_t *key) {
+ PyThread_delete_key(*key);
+ *key = Py_tss_NEEDS_INIT;
+}
+static CYTHON_INLINE int PyThread_tss_set(Py_tss_t *key, void *value) {
+ return PyThread_set_key_value(*key, value);
+}
+static CYTHON_INLINE void * PyThread_tss_get(Py_tss_t *key) {
+ return PyThread_get_key_value(*key);
+}
+#endif
+#if PY_MAJOR_VERSION < 3
+ #if CYTHON_COMPILING_IN_PYPY
+ #if PYPY_VERSION_NUM < 0x07030600
+ #if defined(__cplusplus) && __cplusplus >= 201402L
+ [[deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")]]
+ #elif defined(__GNUC__) || defined(__clang__)
+ __attribute__ ((__deprecated__("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6")))
+ #elif defined(_MSC_VER)
+ __declspec(deprecated("`with nogil:` inside a nogil function will not release the GIL in PyPy2 < 7.3.6"))
+ #endif
+ static CYTHON_INLINE int PyGILState_Check(void) {
+ return 0;
+ }
+ #else // PYPY_VERSION_NUM < 0x07030600
+ #endif // PYPY_VERSION_NUM < 0x07030600
+ #else
+ static CYTHON_INLINE int PyGILState_Check(void) {
+ PyThreadState * tstate = _PyThreadState_Current;
+ return tstate && (tstate == PyGILState_GetThisThreadState());
+ }
+ #endif
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON || defined(_PyDict_NewPresized)
+#define __Pyx_PyDict_NewPresized(n) ((n <= 8) ? PyDict_New() : _PyDict_NewPresized(n))
+#else
+#define __Pyx_PyDict_NewPresized(n) PyDict_New()
+#endif
+#if PY_MAJOR_VERSION >= 3 || CYTHON_FUTURE_DIVISION
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_TrueDivide(x,y)
+ #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceTrueDivide(x,y)
+#else
+ #define __Pyx_PyNumber_Divide(x,y) PyNumber_Divide(x,y)
+ #define __Pyx_PyNumber_InPlaceDivide(x,y) PyNumber_InPlaceDivide(x,y)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX > 0x030600B4 && CYTHON_USE_UNICODE_INTERNALS
+#define __Pyx_PyDict_GetItemStrWithError(dict, name) _PyDict_GetItem_KnownHash(dict, name, ((PyASCIIObject *) name)->hash)
+static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStr(PyObject *dict, PyObject *name) {
+ PyObject *res = __Pyx_PyDict_GetItemStrWithError(dict, name);
+ if (res == NULL) PyErr_Clear();
+ return res;
+}
+#elif PY_MAJOR_VERSION >= 3 && (!CYTHON_COMPILING_IN_PYPY || PYPY_VERSION_NUM >= 0x07020000)
+#define __Pyx_PyDict_GetItemStrWithError PyDict_GetItemWithError
+#define __Pyx_PyDict_GetItemStr PyDict_GetItem
+#else
+static CYTHON_INLINE PyObject * __Pyx_PyDict_GetItemStrWithError(PyObject *dict, PyObject *name) {
+#if CYTHON_COMPILING_IN_PYPY
+ return PyDict_GetItem(dict, name);
+#else
+ PyDictEntry *ep;
+ PyDictObject *mp = (PyDictObject*) dict;
+ long hash = ((PyStringObject *) name)->ob_shash;
+ assert(hash != -1);
+ ep = (mp->ma_lookup)(mp, name, hash);
+ if (ep == NULL) {
+ return NULL;
+ }
+ return ep->me_value;
+#endif
+}
+#define __Pyx_PyDict_GetItemStr PyDict_GetItem
+#endif
+#if CYTHON_USE_TYPE_SLOTS
+ #define __Pyx_PyType_GetFlags(tp) (((PyTypeObject *)tp)->tp_flags)
+ #define __Pyx_PyType_HasFeature(type, feature) ((__Pyx_PyType_GetFlags(type) & (feature)) != 0)
+ #define __Pyx_PyObject_GetIterNextFunc(obj) (Py_TYPE(obj)->tp_iternext)
+#else
+ #define __Pyx_PyType_GetFlags(tp) (PyType_GetFlags((PyTypeObject *)tp))
+ #define __Pyx_PyType_HasFeature(type, feature) PyType_HasFeature(type, feature)
+ #define __Pyx_PyObject_GetIterNextFunc(obj) PyIter_Next
+#endif
+#if CYTHON_COMPILING_IN_LIMITED_API
+ #define __Pyx_SetItemOnTypeDict(tp, k, v) PyObject_GenericSetAttr((PyObject*)tp, k, v)
+#else
+ #define __Pyx_SetItemOnTypeDict(tp, k, v) PyDict_SetItem(tp->tp_dict, k, v)
+#endif
+#if CYTHON_USE_TYPE_SPECS && PY_VERSION_HEX >= 0x03080000
+#define __Pyx_PyHeapTypeObject_GC_Del(obj) {\
+ PyTypeObject *type = Py_TYPE(obj);\
+ assert(__Pyx_PyType_HasFeature(type, Py_TPFLAGS_HEAPTYPE));\
+ PyObject_GC_Del(obj);\
+ Py_DECREF(type);\
+}
+#else
+#define __Pyx_PyHeapTypeObject_GC_Del(obj) PyObject_GC_Del(obj)
+#endif
+#if CYTHON_COMPILING_IN_LIMITED_API
+ #define CYTHON_PEP393_ENABLED 1
+ #define __Pyx_PyUnicode_READY(op) (0)
+ #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GetLength(u)
+ #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_ReadChar(u, i)
+ #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((void)u, 1114111U)
+ #define __Pyx_PyUnicode_KIND(u) ((void)u, (0))
+ #define __Pyx_PyUnicode_DATA(u) ((void*)u)
+ #define __Pyx_PyUnicode_READ(k, d, i) ((void)k, PyUnicode_ReadChar((PyObject*)(d), i))
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GetLength(u))
+#elif PY_VERSION_HEX > 0x03030000 && defined(PyUnicode_KIND)
+ #define CYTHON_PEP393_ENABLED 1
+ #if PY_VERSION_HEX >= 0x030C0000
+ #define __Pyx_PyUnicode_READY(op) (0)
+ #else
+ #define __Pyx_PyUnicode_READY(op) (likely(PyUnicode_IS_READY(op)) ?\
+ 0 : _PyUnicode_Ready((PyObject *)(op)))
+ #endif
+ #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_LENGTH(u)
+ #define __Pyx_PyUnicode_READ_CHAR(u, i) PyUnicode_READ_CHAR(u, i)
+ #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) PyUnicode_MAX_CHAR_VALUE(u)
+ #define __Pyx_PyUnicode_KIND(u) ((int)PyUnicode_KIND(u))
+ #define __Pyx_PyUnicode_DATA(u) PyUnicode_DATA(u)
+ #define __Pyx_PyUnicode_READ(k, d, i) PyUnicode_READ(k, d, i)
+ #define __Pyx_PyUnicode_WRITE(k, d, i, ch) PyUnicode_WRITE(k, d, i, (Py_UCS4) ch)
+ #if PY_VERSION_HEX >= 0x030C0000
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_LENGTH(u))
+ #else
+ #if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x03090000
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : ((PyCompactUnicodeObject *)(u))->wstr_length))
+ #else
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != (likely(PyUnicode_IS_READY(u)) ? PyUnicode_GET_LENGTH(u) : PyUnicode_GET_SIZE(u)))
+ #endif
+ #endif
+#else
+ #define CYTHON_PEP393_ENABLED 0
+ #define PyUnicode_1BYTE_KIND 1
+ #define PyUnicode_2BYTE_KIND 2
+ #define PyUnicode_4BYTE_KIND 4
+ #define __Pyx_PyUnicode_READY(op) (0)
+ #define __Pyx_PyUnicode_GET_LENGTH(u) PyUnicode_GET_SIZE(u)
+ #define __Pyx_PyUnicode_READ_CHAR(u, i) ((Py_UCS4)(PyUnicode_AS_UNICODE(u)[i]))
+ #define __Pyx_PyUnicode_MAX_CHAR_VALUE(u) ((sizeof(Py_UNICODE) == 2) ? 65535U : 1114111U)
+ #define __Pyx_PyUnicode_KIND(u) ((int)sizeof(Py_UNICODE))
+ #define __Pyx_PyUnicode_DATA(u) ((void*)PyUnicode_AS_UNICODE(u))
+ #define __Pyx_PyUnicode_READ(k, d, i) ((void)(k), (Py_UCS4)(((Py_UNICODE*)d)[i]))
+ #define __Pyx_PyUnicode_WRITE(k, d, i, ch) (((void)(k)), ((Py_UNICODE*)d)[i] = (Py_UNICODE) ch)
+ #define __Pyx_PyUnicode_IS_TRUE(u) (0 != PyUnicode_GET_SIZE(u))
+#endif
+#if CYTHON_COMPILING_IN_PYPY
+ #define __Pyx_PyUnicode_Concat(a, b) PyNumber_Add(a, b)
+ #define __Pyx_PyUnicode_ConcatSafe(a, b) PyNumber_Add(a, b)
+#else
+ #define __Pyx_PyUnicode_Concat(a, b) PyUnicode_Concat(a, b)
+ #define __Pyx_PyUnicode_ConcatSafe(a, b) ((unlikely((a) == Py_None) || unlikely((b) == Py_None)) ?\
+ PyNumber_Add(a, b) : __Pyx_PyUnicode_Concat(a, b))
+#endif
+#if CYTHON_COMPILING_IN_PYPY
+ #if !defined(PyUnicode_DecodeUnicodeEscape)
+ #define PyUnicode_DecodeUnicodeEscape(s, size, errors) PyUnicode_Decode(s, size, "unicode_escape", errors)
+ #endif
+ #if !defined(PyUnicode_Contains) || (PY_MAJOR_VERSION == 2 && PYPY_VERSION_NUM < 0x07030500)
+ #undef PyUnicode_Contains
+ #define PyUnicode_Contains(u, s) PySequence_Contains(u, s)
+ #endif
+ #if !defined(PyByteArray_Check)
+ #define PyByteArray_Check(obj) PyObject_TypeCheck(obj, &PyByteArray_Type)
+ #endif
+ #if !defined(PyObject_Format)
+ #define PyObject_Format(obj, fmt) PyObject_CallMethod(obj, "__format__", "O", fmt)
+ #endif
+#endif
+#define __Pyx_PyString_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyString_Check(b) && !PyString_CheckExact(b)))) ? PyNumber_Remainder(a, b) : __Pyx_PyString_Format(a, b))
+#define __Pyx_PyUnicode_FormatSafe(a, b) ((unlikely((a) == Py_None || (PyUnicode_Check(b) && !PyUnicode_CheckExact(b)))) ? PyNumber_Remainder(a, b) : PyUnicode_Format(a, b))
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyString_Format(a, b) PyUnicode_Format(a, b)
+#else
+ #define __Pyx_PyString_Format(a, b) PyString_Format(a, b)
+#endif
+#if PY_MAJOR_VERSION < 3 && !defined(PyObject_ASCII)
+ #define PyObject_ASCII(o) PyObject_Repr(o)
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyBaseString_Type PyUnicode_Type
+ #define PyStringObject PyUnicodeObject
+ #define PyString_Type PyUnicode_Type
+ #define PyString_Check PyUnicode_Check
+ #define PyString_CheckExact PyUnicode_CheckExact
+#ifndef PyObject_Unicode
+ #define PyObject_Unicode PyObject_Str
+#endif
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define __Pyx_PyBaseString_Check(obj) PyUnicode_Check(obj)
+ #define __Pyx_PyBaseString_CheckExact(obj) PyUnicode_CheckExact(obj)
+#else
+ #define __Pyx_PyBaseString_Check(obj) (PyString_Check(obj) || PyUnicode_Check(obj))
+ #define __Pyx_PyBaseString_CheckExact(obj) (PyString_CheckExact(obj) || PyUnicode_CheckExact(obj))
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON
+ #define __Pyx_PySequence_ListKeepNew(obj)\
+ (likely(PyList_CheckExact(obj) && Py_REFCNT(obj) == 1) ? __Pyx_NewRef(obj) : PySequence_List(obj))
+#else
+ #define __Pyx_PySequence_ListKeepNew(obj) PySequence_List(obj)
+#endif
+#ifndef PySet_CheckExact
+ #define PySet_CheckExact(obj) __Pyx_IS_TYPE(obj, &PySet_Type)
+#endif
+#if PY_VERSION_HEX >= 0x030900A4
+ #define __Pyx_SET_REFCNT(obj, refcnt) Py_SET_REFCNT(obj, refcnt)
+ #define __Pyx_SET_SIZE(obj, size) Py_SET_SIZE(obj, size)
+#else
+ #define __Pyx_SET_REFCNT(obj, refcnt) Py_REFCNT(obj) = (refcnt)
+ #define __Pyx_SET_SIZE(obj, size) Py_SIZE(obj) = (size)
+#endif
+#if CYTHON_ASSUME_SAFE_MACROS
+ #define __Pyx_PySequence_ITEM(o, i) PySequence_ITEM(o, i)
+ #define __Pyx_PySequence_SIZE(seq) Py_SIZE(seq)
+ #define __Pyx_PyTuple_SET_ITEM(o, i, v) (PyTuple_SET_ITEM(o, i, v), (0))
+ #define __Pyx_PyList_SET_ITEM(o, i, v) (PyList_SET_ITEM(o, i, v), (0))
+ #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_GET_SIZE(o)
+ #define __Pyx_PyList_GET_SIZE(o) PyList_GET_SIZE(o)
+ #define __Pyx_PySet_GET_SIZE(o) PySet_GET_SIZE(o)
+ #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_GET_SIZE(o)
+ #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_GET_SIZE(o)
+#else
+ #define __Pyx_PySequence_ITEM(o, i) PySequence_GetItem(o, i)
+ #define __Pyx_PySequence_SIZE(seq) PySequence_Size(seq)
+ #define __Pyx_PyTuple_SET_ITEM(o, i, v) PyTuple_SetItem(o, i, v)
+ #define __Pyx_PyList_SET_ITEM(o, i, v) PyList_SetItem(o, i, v)
+ #define __Pyx_PyTuple_GET_SIZE(o) PyTuple_Size(o)
+ #define __Pyx_PyList_GET_SIZE(o) PyList_Size(o)
+ #define __Pyx_PySet_GET_SIZE(o) PySet_Size(o)
+ #define __Pyx_PyBytes_GET_SIZE(o) PyBytes_Size(o)
+ #define __Pyx_PyByteArray_GET_SIZE(o) PyByteArray_Size(o)
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyIntObject PyLongObject
+ #define PyInt_Type PyLong_Type
+ #define PyInt_Check(op) PyLong_Check(op)
+ #define PyInt_CheckExact(op) PyLong_CheckExact(op)
+ #define __Pyx_Py3Int_Check(op) PyLong_Check(op)
+ #define __Pyx_Py3Int_CheckExact(op) PyLong_CheckExact(op)
+ #define PyInt_FromString PyLong_FromString
+ #define PyInt_FromUnicode PyLong_FromUnicode
+ #define PyInt_FromLong PyLong_FromLong
+ #define PyInt_FromSize_t PyLong_FromSize_t
+ #define PyInt_FromSsize_t PyLong_FromSsize_t
+ #define PyInt_AsLong PyLong_AsLong
+ #define PyInt_AS_LONG PyLong_AS_LONG
+ #define PyInt_AsSsize_t PyLong_AsSsize_t
+ #define PyInt_AsUnsignedLongMask PyLong_AsUnsignedLongMask
+ #define PyInt_AsUnsignedLongLongMask PyLong_AsUnsignedLongLongMask
+ #define PyNumber_Int PyNumber_Long
+#else
+ #define __Pyx_Py3Int_Check(op) (PyLong_Check(op) || PyInt_Check(op))
+ #define __Pyx_Py3Int_CheckExact(op) (PyLong_CheckExact(op) || PyInt_CheckExact(op))
+#endif
+#if PY_MAJOR_VERSION >= 3
+ #define PyBoolObject PyLongObject
+#endif
+#if PY_MAJOR_VERSION >= 3 && CYTHON_COMPILING_IN_PYPY
+ #ifndef PyUnicode_InternFromString
+ #define PyUnicode_InternFromString(s) PyUnicode_FromString(s)
+ #endif
+#endif
+#if PY_VERSION_HEX < 0x030200A4
+ typedef long Py_hash_t;
+ #define __Pyx_PyInt_FromHash_t PyInt_FromLong
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsHash_t
+#else
+ #define __Pyx_PyInt_FromHash_t PyInt_FromSsize_t
+ #define __Pyx_PyInt_AsHash_t __Pyx_PyIndex_AsSsize_t
+#endif
+#if CYTHON_USE_ASYNC_SLOTS
+ #if PY_VERSION_HEX >= 0x030500B1
+ #define __Pyx_PyAsyncMethodsStruct PyAsyncMethods
+ #define __Pyx_PyType_AsAsync(obj) (Py_TYPE(obj)->tp_as_async)
+ #else
+ #define __Pyx_PyType_AsAsync(obj) ((__Pyx_PyAsyncMethodsStruct*) (Py_TYPE(obj)->tp_reserved))
+ #endif
+#else
+ #define __Pyx_PyType_AsAsync(obj) NULL
+#endif
+#ifndef __Pyx_PyAsyncMethodsStruct
+ typedef struct {
+ unaryfunc am_await;
+ unaryfunc am_aiter;
+ unaryfunc am_anext;
+ } __Pyx_PyAsyncMethodsStruct;
+#endif
+
+#if defined(_WIN32) || defined(WIN32) || defined(MS_WINDOWS)
+ #if !defined(_USE_MATH_DEFINES)
+ #define _USE_MATH_DEFINES
+ #endif
+#endif
+#include
+#ifdef NAN
+#define __PYX_NAN() ((float) NAN)
+#else
+static CYTHON_INLINE float __PYX_NAN() {
+ float value;
+ memset(&value, 0xFF, sizeof(value));
+ return value;
+}
+#endif
+#if defined(__CYGWIN__) && defined(_LDBL_EQ_DBL)
+#define __Pyx_truncl trunc
+#else
+#define __Pyx_truncl truncl
+#endif
+
+#define __PYX_MARK_ERR_POS(f_index, lineno) \
+ { __pyx_filename = __pyx_f[f_index]; (void)__pyx_filename; __pyx_lineno = lineno; (void)__pyx_lineno; __pyx_clineno = __LINE__; (void)__pyx_clineno; }
+#define __PYX_ERR(f_index, lineno, Ln_error) \
+ { __PYX_MARK_ERR_POS(f_index, lineno) goto Ln_error; }
+
+#ifdef CYTHON_EXTERN_C
+ #undef __PYX_EXTERN_C
+ #define __PYX_EXTERN_C CYTHON_EXTERN_C
+#elif defined(__PYX_EXTERN_C)
+ #ifdef _MSC_VER
+ #pragma message ("Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.")
+ #else
+ #warning Please do not define the '__PYX_EXTERN_C' macro externally. Use 'CYTHON_EXTERN_C' instead.
+ #endif
+#else
+ #ifdef __cplusplus
+ #define __PYX_EXTERN_C extern "C"
+ #else
+ #define __PYX_EXTERN_C extern
+ #endif
+#endif
+
+#define __PYX_HAVE__matcha__utils__monotonic_align__core
+#define __PYX_HAVE_API__matcha__utils__monotonic_align__core
+/* Early includes */
+#include
+#include
+
+ /* Using NumPy API declarations from "numpy/__init__.cython-30.pxd" */
+
+#include "numpy/arrayobject.h"
+#include "numpy/ndarrayobject.h"
+#include "numpy/ndarraytypes.h"
+#include "numpy/arrayscalars.h"
+#include "numpy/ufuncobject.h"
+#include "pythread.h"
+#include
+#ifdef _OPENMP
+#include
+#endif /* _OPENMP */
+
+#if defined(PYREX_WITHOUT_ASSERTIONS) && !defined(CYTHON_WITHOUT_ASSERTIONS)
+#define CYTHON_WITHOUT_ASSERTIONS
+#endif
+
+typedef struct {PyObject **p; const char *s; const Py_ssize_t n; const char* encoding;
+ const char is_unicode; const char is_str; const char intern; } __Pyx_StringTabEntry;
+
+#define __PYX_DEFAULT_STRING_ENCODING_IS_ASCII 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_UTF8 0
+#define __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT (PY_MAJOR_VERSION >= 3 && __PYX_DEFAULT_STRING_ENCODING_IS_UTF8)
+#define __PYX_DEFAULT_STRING_ENCODING ""
+#define __Pyx_PyObject_FromString __Pyx_PyBytes_FromString
+#define __Pyx_PyObject_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#define __Pyx_uchar_cast(c) ((unsigned char)c)
+#define __Pyx_long_cast(x) ((long)x)
+#define __Pyx_fits_Py_ssize_t(v, type, is_signed) (\
+ (sizeof(type) < sizeof(Py_ssize_t)) ||\
+ (sizeof(type) > sizeof(Py_ssize_t) &&\
+ likely(v < (type)PY_SSIZE_T_MAX ||\
+ v == (type)PY_SSIZE_T_MAX) &&\
+ (!is_signed || likely(v > (type)PY_SSIZE_T_MIN ||\
+ v == (type)PY_SSIZE_T_MIN))) ||\
+ (sizeof(type) == sizeof(Py_ssize_t) &&\
+ (is_signed || likely(v < (type)PY_SSIZE_T_MAX ||\
+ v == (type)PY_SSIZE_T_MAX))) )
+static CYTHON_INLINE int __Pyx_is_valid_index(Py_ssize_t i, Py_ssize_t limit) {
+ return (size_t) i < (size_t) limit;
+}
+#if defined (__cplusplus) && __cplusplus >= 201103L
+ #include
+ #define __Pyx_sst_abs(value) std::abs(value)
+#elif SIZEOF_INT >= SIZEOF_SIZE_T
+ #define __Pyx_sst_abs(value) abs(value)
+#elif SIZEOF_LONG >= SIZEOF_SIZE_T
+ #define __Pyx_sst_abs(value) labs(value)
+#elif defined (_MSC_VER)
+ #define __Pyx_sst_abs(value) ((Py_ssize_t)_abs64(value))
+#elif defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+ #define __Pyx_sst_abs(value) llabs(value)
+#elif defined (__GNUC__)
+ #define __Pyx_sst_abs(value) __builtin_llabs(value)
+#else
+ #define __Pyx_sst_abs(value) ((value<0) ? -value : value)
+#endif
+static CYTHON_INLINE const char* __Pyx_PyObject_AsString(PyObject*);
+static CYTHON_INLINE const char* __Pyx_PyObject_AsStringAndSize(PyObject*, Py_ssize_t* length);
+#define __Pyx_PyByteArray_FromString(s) PyByteArray_FromStringAndSize((const char*)s, strlen((const char*)s))
+#define __Pyx_PyByteArray_FromStringAndSize(s, l) PyByteArray_FromStringAndSize((const char*)s, l)
+#define __Pyx_PyBytes_FromString PyBytes_FromString
+#define __Pyx_PyBytes_FromStringAndSize PyBytes_FromStringAndSize
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_FromString(const char*);
+#if PY_MAJOR_VERSION < 3
+ #define __Pyx_PyStr_FromString __Pyx_PyBytes_FromString
+ #define __Pyx_PyStr_FromStringAndSize __Pyx_PyBytes_FromStringAndSize
+#else
+ #define __Pyx_PyStr_FromString __Pyx_PyUnicode_FromString
+ #define __Pyx_PyStr_FromStringAndSize __Pyx_PyUnicode_FromStringAndSize
+#endif
+#define __Pyx_PyBytes_AsWritableString(s) ((char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableSString(s) ((signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsWritableUString(s) ((unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsString(s) ((const char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsSString(s) ((const signed char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyBytes_AsUString(s) ((const unsigned char*) PyBytes_AS_STRING(s))
+#define __Pyx_PyObject_AsWritableString(s) ((char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableSString(s) ((signed char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsWritableUString(s) ((unsigned char*)(__pyx_uintptr_t) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsSString(s) ((const signed char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_AsUString(s) ((const unsigned char*) __Pyx_PyObject_AsString(s))
+#define __Pyx_PyObject_FromCString(s) __Pyx_PyObject_FromString((const char*)s)
+#define __Pyx_PyBytes_FromCString(s) __Pyx_PyBytes_FromString((const char*)s)
+#define __Pyx_PyByteArray_FromCString(s) __Pyx_PyByteArray_FromString((const char*)s)
+#define __Pyx_PyStr_FromCString(s) __Pyx_PyStr_FromString((const char*)s)
+#define __Pyx_PyUnicode_FromCString(s) __Pyx_PyUnicode_FromString((const char*)s)
+#if CYTHON_COMPILING_IN_LIMITED_API
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const wchar_t *u)
+{
+ const wchar_t *u_end = u;
+ while (*u_end++) ;
+ return (size_t)(u_end - u - 1);
+}
+#else
+static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
+{
+ const Py_UNICODE *u_end = u;
+ while (*u_end++) ;
+ return (size_t)(u_end - u - 1);
+}
+#endif
+#define __Pyx_PyUnicode_FromOrdinal(o) PyUnicode_FromOrdinal((int)o)
+#define __Pyx_PyUnicode_FromUnicode(u) PyUnicode_FromUnicode(u, __Pyx_Py_UNICODE_strlen(u))
+#define __Pyx_PyUnicode_FromUnicodeAndLength PyUnicode_FromUnicode
+#define __Pyx_PyUnicode_AsUnicode PyUnicode_AsUnicode
+#define __Pyx_NewRef(obj) (Py_INCREF(obj), obj)
+#define __Pyx_Owned_Py_None(b) __Pyx_NewRef(Py_None)
+static CYTHON_INLINE PyObject * __Pyx_PyBool_FromLong(long b);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrue(PyObject*);
+static CYTHON_INLINE int __Pyx_PyObject_IsTrueAndDecref(PyObject*);
+static CYTHON_INLINE PyObject* __Pyx_PyNumber_IntOrLong(PyObject* x);
+#define __Pyx_PySequence_Tuple(obj)\
+ (likely(PyTuple_CheckExact(obj)) ? __Pyx_NewRef(obj) : PySequence_Tuple(obj))
+static CYTHON_INLINE Py_ssize_t __Pyx_PyIndex_AsSsize_t(PyObject*);
+static CYTHON_INLINE PyObject * __Pyx_PyInt_FromSize_t(size_t);
+static CYTHON_INLINE Py_hash_t __Pyx_PyIndex_AsHash_t(PyObject*);
+#if CYTHON_ASSUME_SAFE_MACROS
+#define __pyx_PyFloat_AsDouble(x) (PyFloat_CheckExact(x) ? PyFloat_AS_DOUBLE(x) : PyFloat_AsDouble(x))
+#else
+#define __pyx_PyFloat_AsDouble(x) PyFloat_AsDouble(x)
+#endif
+#define __pyx_PyFloat_AsFloat(x) ((float) __pyx_PyFloat_AsDouble(x))
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyNumber_Int(x) (PyLong_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Long(x))
+#else
+#define __Pyx_PyNumber_Int(x) (PyInt_CheckExact(x) ? __Pyx_NewRef(x) : PyNumber_Int(x))
+#endif
+#if CYTHON_USE_PYLONG_INTERNALS
+ #if PY_VERSION_HEX >= 0x030C00A7
+ #ifndef _PyLong_SIGN_MASK
+ #define _PyLong_SIGN_MASK 3
+ #endif
+ #ifndef _PyLong_NON_SIZE_BITS
+ #define _PyLong_NON_SIZE_BITS 3
+ #endif
+ #define __Pyx_PyLong_Sign(x) (((PyLongObject*)x)->long_value.lv_tag & _PyLong_SIGN_MASK)
+ #define __Pyx_PyLong_IsNeg(x) ((__Pyx_PyLong_Sign(x) & 2) != 0)
+ #define __Pyx_PyLong_IsNonNeg(x) (!__Pyx_PyLong_IsNeg(x))
+ #define __Pyx_PyLong_IsZero(x) (__Pyx_PyLong_Sign(x) & 1)
+ #define __Pyx_PyLong_IsPos(x) (__Pyx_PyLong_Sign(x) == 0)
+ #define __Pyx_PyLong_CompactValueUnsigned(x) (__Pyx_PyLong_Digits(x)[0])
+ #define __Pyx_PyLong_DigitCount(x) ((Py_ssize_t) (((PyLongObject*)x)->long_value.lv_tag >> _PyLong_NON_SIZE_BITS))
+ #define __Pyx_PyLong_SignedDigitCount(x)\
+ ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * __Pyx_PyLong_DigitCount(x))
+ #if defined(PyUnstable_Long_IsCompact) && defined(PyUnstable_Long_CompactValue)
+ #define __Pyx_PyLong_IsCompact(x) PyUnstable_Long_IsCompact((PyLongObject*) x)
+ #define __Pyx_PyLong_CompactValue(x) PyUnstable_Long_CompactValue((PyLongObject*) x)
+ #else
+ #define __Pyx_PyLong_IsCompact(x) (((PyLongObject*)x)->long_value.lv_tag < (2 << _PyLong_NON_SIZE_BITS))
+ #define __Pyx_PyLong_CompactValue(x) ((1 - (Py_ssize_t) __Pyx_PyLong_Sign(x)) * (Py_ssize_t) __Pyx_PyLong_Digits(x)[0])
+ #endif
+ typedef Py_ssize_t __Pyx_compact_pylong;
+ typedef size_t __Pyx_compact_upylong;
+ #else // Py < 3.12
+ #define __Pyx_PyLong_IsNeg(x) (Py_SIZE(x) < 0)
+ #define __Pyx_PyLong_IsNonNeg(x) (Py_SIZE(x) >= 0)
+ #define __Pyx_PyLong_IsZero(x) (Py_SIZE(x) == 0)
+ #define __Pyx_PyLong_IsPos(x) (Py_SIZE(x) > 0)
+ #define __Pyx_PyLong_CompactValueUnsigned(x) ((Py_SIZE(x) == 0) ? 0 : __Pyx_PyLong_Digits(x)[0])
+ #define __Pyx_PyLong_DigitCount(x) __Pyx_sst_abs(Py_SIZE(x))
+ #define __Pyx_PyLong_SignedDigitCount(x) Py_SIZE(x)
+ #define __Pyx_PyLong_IsCompact(x) (Py_SIZE(x) == 0 || Py_SIZE(x) == 1 || Py_SIZE(x) == -1)
+ #define __Pyx_PyLong_CompactValue(x)\
+ ((Py_SIZE(x) == 0) ? (sdigit) 0 : ((Py_SIZE(x) < 0) ? -(sdigit)__Pyx_PyLong_Digits(x)[0] : (sdigit)__Pyx_PyLong_Digits(x)[0]))
+ typedef sdigit __Pyx_compact_pylong;
+ typedef digit __Pyx_compact_upylong;
+ #endif
+ #if PY_VERSION_HEX >= 0x030C00A5
+ #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->long_value.ob_digit)
+ #else
+ #define __Pyx_PyLong_Digits(x) (((PyLongObject*)x)->ob_digit)
+ #endif
+#endif
+#if PY_MAJOR_VERSION < 3 && __PYX_DEFAULT_STRING_ENCODING_IS_ASCII
+static int __Pyx_sys_getdefaultencoding_not_ascii;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+ PyObject* sys;
+ PyObject* default_encoding = NULL;
+ PyObject* ascii_chars_u = NULL;
+ PyObject* ascii_chars_b = NULL;
+ const char* default_encoding_c;
+ sys = PyImport_ImportModule("sys");
+ if (!sys) goto bad;
+ default_encoding = PyObject_CallMethod(sys, (char*) "getdefaultencoding", NULL);
+ Py_DECREF(sys);
+ if (!default_encoding) goto bad;
+ default_encoding_c = PyBytes_AsString(default_encoding);
+ if (!default_encoding_c) goto bad;
+ if (strcmp(default_encoding_c, "ascii") == 0) {
+ __Pyx_sys_getdefaultencoding_not_ascii = 0;
+ } else {
+ char ascii_chars[128];
+ int c;
+ for (c = 0; c < 128; c++) {
+ ascii_chars[c] = (char) c;
+ }
+ __Pyx_sys_getdefaultencoding_not_ascii = 1;
+ ascii_chars_u = PyUnicode_DecodeASCII(ascii_chars, 128, NULL);
+ if (!ascii_chars_u) goto bad;
+ ascii_chars_b = PyUnicode_AsEncodedString(ascii_chars_u, default_encoding_c, NULL);
+ if (!ascii_chars_b || !PyBytes_Check(ascii_chars_b) || memcmp(ascii_chars, PyBytes_AS_STRING(ascii_chars_b), 128) != 0) {
+ PyErr_Format(
+ PyExc_ValueError,
+ "This module compiled with c_string_encoding=ascii, but default encoding '%.200s' is not a superset of ascii.",
+ default_encoding_c);
+ goto bad;
+ }
+ Py_DECREF(ascii_chars_u);
+ Py_DECREF(ascii_chars_b);
+ }
+ Py_DECREF(default_encoding);
+ return 0;
+bad:
+ Py_XDECREF(default_encoding);
+ Py_XDECREF(ascii_chars_u);
+ Py_XDECREF(ascii_chars_b);
+ return -1;
+}
+#endif
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT && PY_MAJOR_VERSION >= 3
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_DecodeUTF8(c_str, size, NULL)
+#else
+#define __Pyx_PyUnicode_FromStringAndSize(c_str, size) PyUnicode_Decode(c_str, size, __PYX_DEFAULT_STRING_ENCODING, NULL)
+#if __PYX_DEFAULT_STRING_ENCODING_IS_DEFAULT
+static char* __PYX_DEFAULT_STRING_ENCODING;
+static int __Pyx_init_sys_getdefaultencoding_params(void) {
+ PyObject* sys;
+ PyObject* default_encoding = NULL;
+ char* default_encoding_c;
+ sys = PyImport_ImportModule("sys");
+ if (!sys) goto bad;
+ default_encoding = PyObject_CallMethod(sys, (char*) (const char*) "getdefaultencoding", NULL);
+ Py_DECREF(sys);
+ if (!default_encoding) goto bad;
+ default_encoding_c = PyBytes_AsString(default_encoding);
+ if (!default_encoding_c) goto bad;
+ __PYX_DEFAULT_STRING_ENCODING = (char*) malloc(strlen(default_encoding_c) + 1);
+ if (!__PYX_DEFAULT_STRING_ENCODING) goto bad;
+ strcpy(__PYX_DEFAULT_STRING_ENCODING, default_encoding_c);
+ Py_DECREF(default_encoding);
+ return 0;
+bad:
+ Py_XDECREF(default_encoding);
+ return -1;
+}
+#endif
+#endif
+
+
+/* Test for GCC > 2.95 */
+#if defined(__GNUC__) && (__GNUC__ > 2 || (__GNUC__ == 2 && (__GNUC_MINOR__ > 95)))
+ #define likely(x) __builtin_expect(!!(x), 1)
+ #define unlikely(x) __builtin_expect(!!(x), 0)
+#else /* !__GNUC__ or GCC < 2.95 */
+ #define likely(x) (x)
+ #define unlikely(x) (x)
+#endif /* __GNUC__ */
+static CYTHON_INLINE void __Pyx_pretend_to_initialize(void* ptr) { (void)ptr; }
+
+#if !CYTHON_USE_MODULE_STATE
+static PyObject *__pyx_m = NULL;
+#endif
+static int __pyx_lineno;
+static int __pyx_clineno = 0;
+static const char * __pyx_cfilenm = __FILE__;
+static const char *__pyx_filename;
+
+/* Header.proto */
+#if !defined(CYTHON_CCOMPLEX)
+ #if defined(__cplusplus)
+ #define CYTHON_CCOMPLEX 1
+ #elif (defined(_Complex_I) && !defined(_MSC_VER)) || ((defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) && !defined(__STDC_NO_COMPLEX__))
+ #define CYTHON_CCOMPLEX 1
+ #else
+ #define CYTHON_CCOMPLEX 0
+ #endif
+#endif
+#if CYTHON_CCOMPLEX
+ #ifdef __cplusplus
+ #include
+ #else
+ #include
+ #endif
+#endif
+#if CYTHON_CCOMPLEX && !defined(__cplusplus) && defined(__sun__) && defined(__GNUC__)
+ #undef _Complex_I
+ #define _Complex_I 1.0fj
+#endif
+
+/* #### Code section: filename_table ### */
+
+static const char *__pyx_f[] = {
+ "matcha/utils/monotonic_align/core.pyx",
+ "",
+ "__init__.cython-30.pxd",
+ "type.pxd",
+};
+/* #### Code section: utility_code_proto_before_types ### */
+/* ForceInitThreads.proto */
+#ifndef __PYX_FORCE_INIT_THREADS
+ #define __PYX_FORCE_INIT_THREADS 0
+#endif
+
+/* NoFastGil.proto */
+#define __Pyx_PyGILState_Ensure PyGILState_Ensure
+#define __Pyx_PyGILState_Release PyGILState_Release
+#define __Pyx_FastGIL_Remember()
+#define __Pyx_FastGIL_Forget()
+#define __Pyx_FastGilFuncInit()
+
+/* BufferFormatStructs.proto */
+struct __Pyx_StructField_;
+#define __PYX_BUF_FLAGS_PACKED_STRUCT (1 << 0)
+typedef struct {
+ const char* name;
+ struct __Pyx_StructField_* fields;
+ size_t size;
+ size_t arraysize[8];
+ int ndim;
+ char typegroup;
+ char is_unsigned;
+ int flags;
+} __Pyx_TypeInfo;
+typedef struct __Pyx_StructField_ {
+ __Pyx_TypeInfo* type;
+ const char* name;
+ size_t offset;
+} __Pyx_StructField;
+typedef struct {
+ __Pyx_StructField* field;
+ size_t parent_offset;
+} __Pyx_BufFmt_StackElem;
+typedef struct {
+ __Pyx_StructField root;
+ __Pyx_BufFmt_StackElem* head;
+ size_t fmt_offset;
+ size_t new_count, enc_count;
+ size_t struct_alignment;
+ int is_complex;
+ char enc_type;
+ char new_packmode;
+ char enc_packmode;
+ char is_valid_array;
+} __Pyx_BufFmt_Context;
+
+/* Atomics.proto */
+#include
+#ifndef CYTHON_ATOMICS
+ #define CYTHON_ATOMICS 1
+#endif
+#define __PYX_CYTHON_ATOMICS_ENABLED() CYTHON_ATOMICS
+#define __pyx_atomic_int_type int
+#define __pyx_nonatomic_int_type int
+#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
+ (__STDC_VERSION__ >= 201112L) &&\
+ !defined(__STDC_NO_ATOMICS__))
+ #include
+#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
+ (__cplusplus >= 201103L) ||\
+ (defined(_MSC_VER) && _MSC_VER >= 1700)))
+ #include
+#endif
+#if CYTHON_ATOMICS && (defined(__STDC_VERSION__) &&\
+ (__STDC_VERSION__ >= 201112L) &&\
+ !defined(__STDC_NO_ATOMICS__) &&\
+ ATOMIC_INT_LOCK_FREE == 2)
+ #undef __pyx_atomic_int_type
+ #define __pyx_atomic_int_type atomic_int
+ #define __pyx_atomic_incr_aligned(value) atomic_fetch_add_explicit(value, 1, memory_order_relaxed)
+ #define __pyx_atomic_decr_aligned(value) atomic_fetch_sub_explicit(value, 1, memory_order_acq_rel)
+ #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
+ #pragma message ("Using standard C atomics")
+ #elif defined(__PYX_DEBUG_ATOMICS)
+ #warning "Using standard C atomics"
+ #endif
+#elif CYTHON_ATOMICS && (defined(__cplusplus) && (\
+ (__cplusplus >= 201103L) ||\
+\
+ (defined(_MSC_VER) && _MSC_VER >= 1700)) &&\
+ ATOMIC_INT_LOCK_FREE == 2)
+ #undef __pyx_atomic_int_type
+ #define __pyx_atomic_int_type std::atomic_int
+ #define __pyx_atomic_incr_aligned(value) std::atomic_fetch_add_explicit(value, 1, std::memory_order_relaxed)
+ #define __pyx_atomic_decr_aligned(value) std::atomic_fetch_sub_explicit(value, 1, std::memory_order_acq_rel)
+ #if defined(__PYX_DEBUG_ATOMICS) && defined(_MSC_VER)
+ #pragma message ("Using standard C++ atomics")
+ #elif defined(__PYX_DEBUG_ATOMICS)
+ #warning "Using standard C++ atomics"
+ #endif
+#elif CYTHON_ATOMICS && (__GNUC__ >= 5 || (__GNUC__ == 4 &&\
+ (__GNUC_MINOR__ > 1 ||\
+ (__GNUC_MINOR__ == 1 && __GNUC_PATCHLEVEL__ >= 2))))
+ #define __pyx_atomic_incr_aligned(value) __sync_fetch_and_add(value, 1)
+ #define __pyx_atomic_decr_aligned(value) __sync_fetch_and_sub(value, 1)
+ #ifdef __PYX_DEBUG_ATOMICS
+ #warning "Using GNU atomics"
+ #endif
+#elif CYTHON_ATOMICS && defined(_MSC_VER)
+ #include
+ #undef __pyx_atomic_int_type
+ #define __pyx_atomic_int_type long
+ #define __pyx_nonatomic_int_type long
+ #pragma intrinsic (_InterlockedExchangeAdd)
+ #define __pyx_atomic_incr_aligned(value) _InterlockedExchangeAdd(value, 1)
+ #define __pyx_atomic_decr_aligned(value) _InterlockedExchangeAdd(value, -1)
+ #ifdef __PYX_DEBUG_ATOMICS
+ #pragma message ("Using MSVC atomics")
+ #endif
+#else
+ #undef CYTHON_ATOMICS
+ #define CYTHON_ATOMICS 0
+ #ifdef __PYX_DEBUG_ATOMICS
+ #warning "Not using atomics"
+ #endif
+#endif
+#if CYTHON_ATOMICS
+ #define __pyx_add_acquisition_count(memview)\
+ __pyx_atomic_incr_aligned(__pyx_get_slice_count_pointer(memview))
+ #define __pyx_sub_acquisition_count(memview)\
+ __pyx_atomic_decr_aligned(__pyx_get_slice_count_pointer(memview))
+#else
+ #define __pyx_add_acquisition_count(memview)\
+ __pyx_add_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
+ #define __pyx_sub_acquisition_count(memview)\
+ __pyx_sub_acquisition_count_locked(__pyx_get_slice_count_pointer(memview), memview->lock)
+#endif
+
+/* MemviewSliceStruct.proto */
+struct __pyx_memoryview_obj;
+typedef struct {
+ struct __pyx_memoryview_obj *memview;
+ char *data;
+ Py_ssize_t shape[8];
+ Py_ssize_t strides[8];
+ Py_ssize_t suboffsets[8];
+} __Pyx_memviewslice;
+#define __Pyx_MemoryView_Len(m) (m.shape[0])
+
+/* #### Code section: numeric_typedefs ### */
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":731
+ * # in Cython to enable them only on the right systems.
+ *
+ * ctypedef npy_int8 int8_t # <<<<<<<<<<<<<<
+ * ctypedef npy_int16 int16_t
+ * ctypedef npy_int32 int32_t
+ */
+typedef npy_int8 __pyx_t_5numpy_int8_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":732
+ *
+ * ctypedef npy_int8 int8_t
+ * ctypedef npy_int16 int16_t # <<<<<<<<<<<<<<
+ * ctypedef npy_int32 int32_t
+ * ctypedef npy_int64 int64_t
+ */
+typedef npy_int16 __pyx_t_5numpy_int16_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":733
+ * ctypedef npy_int8 int8_t
+ * ctypedef npy_int16 int16_t
+ * ctypedef npy_int32 int32_t # <<<<<<<<<<<<<<
+ * ctypedef npy_int64 int64_t
+ * #ctypedef npy_int96 int96_t
+ */
+typedef npy_int32 __pyx_t_5numpy_int32_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":734
+ * ctypedef npy_int16 int16_t
+ * ctypedef npy_int32 int32_t
+ * ctypedef npy_int64 int64_t # <<<<<<<<<<<<<<
+ * #ctypedef npy_int96 int96_t
+ * #ctypedef npy_int128 int128_t
+ */
+typedef npy_int64 __pyx_t_5numpy_int64_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":738
+ * #ctypedef npy_int128 int128_t
+ *
+ * ctypedef npy_uint8 uint8_t # <<<<<<<<<<<<<<
+ * ctypedef npy_uint16 uint16_t
+ * ctypedef npy_uint32 uint32_t
+ */
+typedef npy_uint8 __pyx_t_5numpy_uint8_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":739
+ *
+ * ctypedef npy_uint8 uint8_t
+ * ctypedef npy_uint16 uint16_t # <<<<<<<<<<<<<<
+ * ctypedef npy_uint32 uint32_t
+ * ctypedef npy_uint64 uint64_t
+ */
+typedef npy_uint16 __pyx_t_5numpy_uint16_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":740
+ * ctypedef npy_uint8 uint8_t
+ * ctypedef npy_uint16 uint16_t
+ * ctypedef npy_uint32 uint32_t # <<<<<<<<<<<<<<
+ * ctypedef npy_uint64 uint64_t
+ * #ctypedef npy_uint96 uint96_t
+ */
+typedef npy_uint32 __pyx_t_5numpy_uint32_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":741
+ * ctypedef npy_uint16 uint16_t
+ * ctypedef npy_uint32 uint32_t
+ * ctypedef npy_uint64 uint64_t # <<<<<<<<<<<<<<
+ * #ctypedef npy_uint96 uint96_t
+ * #ctypedef npy_uint128 uint128_t
+ */
+typedef npy_uint64 __pyx_t_5numpy_uint64_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":745
+ * #ctypedef npy_uint128 uint128_t
+ *
+ * ctypedef npy_float32 float32_t # <<<<<<<<<<<<<<
+ * ctypedef npy_float64 float64_t
+ * #ctypedef npy_float80 float80_t
+ */
+typedef npy_float32 __pyx_t_5numpy_float32_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":746
+ *
+ * ctypedef npy_float32 float32_t
+ * ctypedef npy_float64 float64_t # <<<<<<<<<<<<<<
+ * #ctypedef npy_float80 float80_t
+ * #ctypedef npy_float128 float128_t
+ */
+typedef npy_float64 __pyx_t_5numpy_float64_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":755
+ * # The int types are mapped a bit surprising --
+ * # numpy.int corresponds to 'l' and numpy.long to 'q'
+ * ctypedef npy_long int_t # <<<<<<<<<<<<<<
+ * ctypedef npy_longlong long_t
+ * ctypedef npy_longlong longlong_t
+ */
+typedef npy_long __pyx_t_5numpy_int_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":756
+ * # numpy.int corresponds to 'l' and numpy.long to 'q'
+ * ctypedef npy_long int_t
+ * ctypedef npy_longlong long_t # <<<<<<<<<<<<<<
+ * ctypedef npy_longlong longlong_t
+ *
+ */
+typedef npy_longlong __pyx_t_5numpy_long_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":757
+ * ctypedef npy_long int_t
+ * ctypedef npy_longlong long_t
+ * ctypedef npy_longlong longlong_t # <<<<<<<<<<<<<<
+ *
+ * ctypedef npy_ulong uint_t
+ */
+typedef npy_longlong __pyx_t_5numpy_longlong_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":759
+ * ctypedef npy_longlong longlong_t
+ *
+ * ctypedef npy_ulong uint_t # <<<<<<<<<<<<<<
+ * ctypedef npy_ulonglong ulong_t
+ * ctypedef npy_ulonglong ulonglong_t
+ */
+typedef npy_ulong __pyx_t_5numpy_uint_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":760
+ *
+ * ctypedef npy_ulong uint_t
+ * ctypedef npy_ulonglong ulong_t # <<<<<<<<<<<<<<
+ * ctypedef npy_ulonglong ulonglong_t
+ *
+ */
+typedef npy_ulonglong __pyx_t_5numpy_ulong_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":761
+ * ctypedef npy_ulong uint_t
+ * ctypedef npy_ulonglong ulong_t
+ * ctypedef npy_ulonglong ulonglong_t # <<<<<<<<<<<<<<
+ *
+ * ctypedef npy_intp intp_t
+ */
+typedef npy_ulonglong __pyx_t_5numpy_ulonglong_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":763
+ * ctypedef npy_ulonglong ulonglong_t
+ *
+ * ctypedef npy_intp intp_t # <<<<<<<<<<<<<<
+ * ctypedef npy_uintp uintp_t
+ *
+ */
+typedef npy_intp __pyx_t_5numpy_intp_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":764
+ *
+ * ctypedef npy_intp intp_t
+ * ctypedef npy_uintp uintp_t # <<<<<<<<<<<<<<
+ *
+ * ctypedef npy_double float_t
+ */
+typedef npy_uintp __pyx_t_5numpy_uintp_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":766
+ * ctypedef npy_uintp uintp_t
+ *
+ * ctypedef npy_double float_t # <<<<<<<<<<<<<<
+ * ctypedef npy_double double_t
+ * ctypedef npy_longdouble longdouble_t
+ */
+typedef npy_double __pyx_t_5numpy_float_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":767
+ *
+ * ctypedef npy_double float_t
+ * ctypedef npy_double double_t # <<<<<<<<<<<<<<
+ * ctypedef npy_longdouble longdouble_t
+ *
+ */
+typedef npy_double __pyx_t_5numpy_double_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":768
+ * ctypedef npy_double float_t
+ * ctypedef npy_double double_t
+ * ctypedef npy_longdouble longdouble_t # <<<<<<<<<<<<<<
+ *
+ * ctypedef npy_cfloat cfloat_t
+ */
+typedef npy_longdouble __pyx_t_5numpy_longdouble_t;
+/* #### Code section: complex_type_declarations ### */
+/* Declarations.proto */
+#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
+ #ifdef __cplusplus
+ typedef ::std::complex< float > __pyx_t_float_complex;
+ #else
+ typedef float _Complex __pyx_t_float_complex;
+ #endif
+#else
+ typedef struct { float real, imag; } __pyx_t_float_complex;
+#endif
+static CYTHON_INLINE __pyx_t_float_complex __pyx_t_float_complex_from_parts(float, float);
+
+/* Declarations.proto */
+#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
+ #ifdef __cplusplus
+ typedef ::std::complex< double > __pyx_t_double_complex;
+ #else
+ typedef double _Complex __pyx_t_double_complex;
+ #endif
+#else
+ typedef struct { double real, imag; } __pyx_t_double_complex;
+#endif
+static CYTHON_INLINE __pyx_t_double_complex __pyx_t_double_complex_from_parts(double, double);
+
+/* #### Code section: type_declarations ### */
+
+/*--- Type declarations ---*/
+struct __pyx_array_obj;
+struct __pyx_MemviewEnum_obj;
+struct __pyx_memoryview_obj;
+struct __pyx_memoryviewslice_obj;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":770
+ * ctypedef npy_longdouble longdouble_t
+ *
+ * ctypedef npy_cfloat cfloat_t # <<<<<<<<<<<<<<
+ * ctypedef npy_cdouble cdouble_t
+ * ctypedef npy_clongdouble clongdouble_t
+ */
+typedef npy_cfloat __pyx_t_5numpy_cfloat_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":771
+ *
+ * ctypedef npy_cfloat cfloat_t
+ * ctypedef npy_cdouble cdouble_t # <<<<<<<<<<<<<<
+ * ctypedef npy_clongdouble clongdouble_t
+ *
+ */
+typedef npy_cdouble __pyx_t_5numpy_cdouble_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":772
+ * ctypedef npy_cfloat cfloat_t
+ * ctypedef npy_cdouble cdouble_t
+ * ctypedef npy_clongdouble clongdouble_t # <<<<<<<<<<<<<<
+ *
+ * ctypedef npy_cdouble complex_t
+ */
+typedef npy_clongdouble __pyx_t_5numpy_clongdouble_t;
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":774
+ * ctypedef npy_clongdouble clongdouble_t
+ *
+ * ctypedef npy_cdouble complex_t # <<<<<<<<<<<<<<
+ *
+ * cdef inline object PyArray_MultiIterNew1(a):
+ */
+typedef npy_cdouble __pyx_t_5numpy_complex_t;
+struct __pyx_opt_args_6matcha_5utils_15monotonic_align_4core_maximum_path_c;
+
+/* "matcha/utils/monotonic_align/core.pyx":42
+ * @cython.boundscheck(False)
+ * @cython.wraparound(False)
+ * cpdef void maximum_path_c(int[:,:,::1] paths, float[:,:,::1] values, int[::1] t_xs, int[::1] t_ys, float max_neg_val=-1e9) nogil: # <<<<<<<<<<<<<<
+ * cdef int b = values.shape[0]
+ *
+ */
+struct __pyx_opt_args_6matcha_5utils_15monotonic_align_4core_maximum_path_c {
+ int __pyx_n;
+ float max_neg_val;
+};
+
+/* "View.MemoryView":114
+ * @cython.collection_type("sequence")
+ * @cname("__pyx_array")
+ * cdef class array: # <<<<<<<<<<<<<<
+ *
+ * cdef:
+ */
+struct __pyx_array_obj {
+ PyObject_HEAD
+ struct __pyx_vtabstruct_array *__pyx_vtab;
+ char *data;
+ Py_ssize_t len;
+ char *format;
+ int ndim;
+ Py_ssize_t *_shape;
+ Py_ssize_t *_strides;
+ Py_ssize_t itemsize;
+ PyObject *mode;
+ PyObject *_format;
+ void (*callback_free_data)(void *);
+ int free_data;
+ int dtype_is_object;
+};
+
+
+/* "View.MemoryView":302
+ *
+ * @cname('__pyx_MemviewEnum')
+ * cdef class Enum(object): # <<<<<<<<<<<<<<
+ * cdef object name
+ * def __init__(self, name):
+ */
+struct __pyx_MemviewEnum_obj {
+ PyObject_HEAD
+ PyObject *name;
+};
+
+
+/* "View.MemoryView":337
+ *
+ * @cname('__pyx_memoryview')
+ * cdef class memoryview: # <<<<<<<<<<<<<<
+ *
+ * cdef object obj
+ */
+struct __pyx_memoryview_obj {
+ PyObject_HEAD
+ struct __pyx_vtabstruct_memoryview *__pyx_vtab;
+ PyObject *obj;
+ PyObject *_size;
+ PyObject *_array_interface;
+ PyThread_type_lock lock;
+ __pyx_atomic_int_type acquisition_count;
+ Py_buffer view;
+ int flags;
+ int dtype_is_object;
+ __Pyx_TypeInfo *typeinfo;
+};
+
+
+/* "View.MemoryView":952
+ * @cython.collection_type("sequence")
+ * @cname('__pyx_memoryviewslice')
+ * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<<
+ * "Internal class for passing memoryview slices to Python"
+ *
+ */
+struct __pyx_memoryviewslice_obj {
+ struct __pyx_memoryview_obj __pyx_base;
+ __Pyx_memviewslice from_slice;
+ PyObject *from_object;
+ PyObject *(*to_object_func)(char *);
+ int (*to_dtype_func)(char *, PyObject *);
+};
+
+
+
+/* "View.MemoryView":114
+ * @cython.collection_type("sequence")
+ * @cname("__pyx_array")
+ * cdef class array: # <<<<<<<<<<<<<<
+ *
+ * cdef:
+ */
+
+struct __pyx_vtabstruct_array {
+ PyObject *(*get_memview)(struct __pyx_array_obj *);
+};
+static struct __pyx_vtabstruct_array *__pyx_vtabptr_array;
+
+
+/* "View.MemoryView":337
+ *
+ * @cname('__pyx_memoryview')
+ * cdef class memoryview: # <<<<<<<<<<<<<<
+ *
+ * cdef object obj
+ */
+
+struct __pyx_vtabstruct_memoryview {
+ char *(*get_item_pointer)(struct __pyx_memoryview_obj *, PyObject *);
+ PyObject *(*is_slice)(struct __pyx_memoryview_obj *, PyObject *);
+ PyObject *(*setitem_slice_assignment)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
+ PyObject *(*setitem_slice_assign_scalar)(struct __pyx_memoryview_obj *, struct __pyx_memoryview_obj *, PyObject *);
+ PyObject *(*setitem_indexed)(struct __pyx_memoryview_obj *, PyObject *, PyObject *);
+ PyObject *(*convert_item_to_object)(struct __pyx_memoryview_obj *, char *);
+ PyObject *(*assign_item_from_object)(struct __pyx_memoryview_obj *, char *, PyObject *);
+ PyObject *(*_get_base)(struct __pyx_memoryview_obj *);
+};
+static struct __pyx_vtabstruct_memoryview *__pyx_vtabptr_memoryview;
+
+
+/* "View.MemoryView":952
+ * @cython.collection_type("sequence")
+ * @cname('__pyx_memoryviewslice')
+ * cdef class _memoryviewslice(memoryview): # <<<<<<<<<<<<<<
+ * "Internal class for passing memoryview slices to Python"
+ *
+ */
+
+struct __pyx_vtabstruct__memoryviewslice {
+ struct __pyx_vtabstruct_memoryview __pyx_base;
+};
+static struct __pyx_vtabstruct__memoryviewslice *__pyx_vtabptr__memoryviewslice;
+/* #### Code section: utility_code_proto ### */
+
+/* --- Runtime support code (head) --- */
+/* Refnanny.proto */
+#ifndef CYTHON_REFNANNY
+ #define CYTHON_REFNANNY 0
+#endif
+#if CYTHON_REFNANNY
+ typedef struct {
+ void (*INCREF)(void*, PyObject*, Py_ssize_t);
+ void (*DECREF)(void*, PyObject*, Py_ssize_t);
+ void (*GOTREF)(void*, PyObject*, Py_ssize_t);
+ void (*GIVEREF)(void*, PyObject*, Py_ssize_t);
+ void* (*SetupContext)(const char*, Py_ssize_t, const char*);
+ void (*FinishContext)(void**);
+ } __Pyx_RefNannyAPIStruct;
+ static __Pyx_RefNannyAPIStruct *__Pyx_RefNanny = NULL;
+ static __Pyx_RefNannyAPIStruct *__Pyx_RefNannyImportAPI(const char *modname);
+ #define __Pyx_RefNannyDeclarations void *__pyx_refnanny = NULL;
+#ifdef WITH_THREAD
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+ if (acquire_gil) {\
+ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
+ PyGILState_Release(__pyx_gilstate_save);\
+ } else {\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__));\
+ }
+ #define __Pyx_RefNannyFinishContextNogil() {\
+ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+ __Pyx_RefNannyFinishContext();\
+ PyGILState_Release(__pyx_gilstate_save);\
+ }
+#else
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)\
+ __pyx_refnanny = __Pyx_RefNanny->SetupContext((name), (__LINE__), (__FILE__))
+ #define __Pyx_RefNannyFinishContextNogil() __Pyx_RefNannyFinishContext()
+#endif
+ #define __Pyx_RefNannyFinishContextNogil() {\
+ PyGILState_STATE __pyx_gilstate_save = PyGILState_Ensure();\
+ __Pyx_RefNannyFinishContext();\
+ PyGILState_Release(__pyx_gilstate_save);\
+ }
+ #define __Pyx_RefNannyFinishContext()\
+ __Pyx_RefNanny->FinishContext(&__pyx_refnanny)
+ #define __Pyx_INCREF(r) __Pyx_RefNanny->INCREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+ #define __Pyx_DECREF(r) __Pyx_RefNanny->DECREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+ #define __Pyx_GOTREF(r) __Pyx_RefNanny->GOTREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+ #define __Pyx_GIVEREF(r) __Pyx_RefNanny->GIVEREF(__pyx_refnanny, (PyObject *)(r), (__LINE__))
+ #define __Pyx_XINCREF(r) do { if((r) == NULL); else {__Pyx_INCREF(r); }} while(0)
+ #define __Pyx_XDECREF(r) do { if((r) == NULL); else {__Pyx_DECREF(r); }} while(0)
+ #define __Pyx_XGOTREF(r) do { if((r) == NULL); else {__Pyx_GOTREF(r); }} while(0)
+ #define __Pyx_XGIVEREF(r) do { if((r) == NULL); else {__Pyx_GIVEREF(r);}} while(0)
+#else
+ #define __Pyx_RefNannyDeclarations
+ #define __Pyx_RefNannySetupContext(name, acquire_gil)
+ #define __Pyx_RefNannyFinishContextNogil()
+ #define __Pyx_RefNannyFinishContext()
+ #define __Pyx_INCREF(r) Py_INCREF(r)
+ #define __Pyx_DECREF(r) Py_DECREF(r)
+ #define __Pyx_GOTREF(r)
+ #define __Pyx_GIVEREF(r)
+ #define __Pyx_XINCREF(r) Py_XINCREF(r)
+ #define __Pyx_XDECREF(r) Py_XDECREF(r)
+ #define __Pyx_XGOTREF(r)
+ #define __Pyx_XGIVEREF(r)
+#endif
+#define __Pyx_Py_XDECREF_SET(r, v) do {\
+ PyObject *tmp = (PyObject *) r;\
+ r = v; Py_XDECREF(tmp);\
+ } while (0)
+#define __Pyx_XDECREF_SET(r, v) do {\
+ PyObject *tmp = (PyObject *) r;\
+ r = v; __Pyx_XDECREF(tmp);\
+ } while (0)
+#define __Pyx_DECREF_SET(r, v) do {\
+ PyObject *tmp = (PyObject *) r;\
+ r = v; __Pyx_DECREF(tmp);\
+ } while (0)
+#define __Pyx_CLEAR(r) do { PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);} while(0)
+#define __Pyx_XCLEAR(r) do { if((r) != NULL) {PyObject* tmp = ((PyObject*)(r)); r = NULL; __Pyx_DECREF(tmp);}} while(0)
+
+/* PyErrExceptionMatches.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_ExceptionMatches(err) __Pyx_PyErr_ExceptionMatchesInState(__pyx_tstate, err)
+static CYTHON_INLINE int __Pyx_PyErr_ExceptionMatchesInState(PyThreadState* tstate, PyObject* err);
+#else
+#define __Pyx_PyErr_ExceptionMatches(err) PyErr_ExceptionMatches(err)
+#endif
+
+/* PyThreadStateGet.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyThreadState_declare PyThreadState *__pyx_tstate;
+#define __Pyx_PyThreadState_assign __pyx_tstate = __Pyx_PyThreadState_Current;
+#if PY_VERSION_HEX >= 0x030C00A6
+#define __Pyx_PyErr_Occurred() (__pyx_tstate->current_exception != NULL)
+#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->current_exception ? (PyObject*) Py_TYPE(__pyx_tstate->current_exception) : (PyObject*) NULL)
+#else
+#define __Pyx_PyErr_Occurred() (__pyx_tstate->curexc_type != NULL)
+#define __Pyx_PyErr_CurrentExceptionType() (__pyx_tstate->curexc_type)
+#endif
+#else
+#define __Pyx_PyThreadState_declare
+#define __Pyx_PyThreadState_assign
+#define __Pyx_PyErr_Occurred() (PyErr_Occurred() != NULL)
+#define __Pyx_PyErr_CurrentExceptionType() PyErr_Occurred()
+#endif
+
+/* PyErrFetchRestore.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_PyErr_Clear() __Pyx_ErrRestore(NULL, NULL, NULL)
+#define __Pyx_ErrRestoreWithState(type, value, tb) __Pyx_ErrRestoreInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb) __Pyx_ErrFetchInState(PyThreadState_GET(), type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb) __Pyx_ErrRestoreInState(__pyx_tstate, type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb) __Pyx_ErrFetchInState(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx_ErrRestoreInState(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+static CYTHON_INLINE void __Pyx_ErrFetchInState(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#if CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX < 0x030C00A6
+#define __Pyx_PyErr_SetNone(exc) (Py_INCREF(exc), __Pyx_ErrRestore((exc), NULL, NULL))
+#else
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#endif
+#else
+#define __Pyx_PyErr_Clear() PyErr_Clear()
+#define __Pyx_PyErr_SetNone(exc) PyErr_SetNone(exc)
+#define __Pyx_ErrRestoreWithState(type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchWithState(type, value, tb) PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestoreInState(tstate, type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetchInState(tstate, type, value, tb) PyErr_Fetch(type, value, tb)
+#define __Pyx_ErrRestore(type, value, tb) PyErr_Restore(type, value, tb)
+#define __Pyx_ErrFetch(type, value, tb) PyErr_Fetch(type, value, tb)
+#endif
+
+/* PyObjectGetAttrStr.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GetAttrStr(o,n) PyObject_GetAttr(o,n)
+#endif
+
+/* PyObjectGetAttrStrNoError.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GetAttrStrNoError(PyObject* obj, PyObject* attr_name);
+
+/* GetBuiltinName.proto */
+static PyObject *__Pyx_GetBuiltinName(PyObject *name);
+
+/* TupleAndListFromArray.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyList_FromArray(PyObject *const *src, Py_ssize_t n);
+static CYTHON_INLINE PyObject* __Pyx_PyTuple_FromArray(PyObject *const *src, Py_ssize_t n);
+#endif
+
+/* IncludeStringH.proto */
+#include
+
+/* BytesEquals.proto */
+static CYTHON_INLINE int __Pyx_PyBytes_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* UnicodeEquals.proto */
+static CYTHON_INLINE int __Pyx_PyUnicode_Equals(PyObject* s1, PyObject* s2, int equals);
+
+/* fastcall.proto */
+#if CYTHON_AVOID_BORROWED_REFS
+ #define __Pyx_Arg_VARARGS(args, i) PySequence_GetItem(args, i)
+#elif CYTHON_ASSUME_SAFE_MACROS
+ #define __Pyx_Arg_VARARGS(args, i) PyTuple_GET_ITEM(args, i)
+#else
+ #define __Pyx_Arg_VARARGS(args, i) PyTuple_GetItem(args, i)
+#endif
+#if CYTHON_AVOID_BORROWED_REFS
+ #define __Pyx_Arg_NewRef_VARARGS(arg) __Pyx_NewRef(arg)
+ #define __Pyx_Arg_XDECREF_VARARGS(arg) Py_XDECREF(arg)
+#else
+ #define __Pyx_Arg_NewRef_VARARGS(arg) arg // no-op
+ #define __Pyx_Arg_XDECREF_VARARGS(arg) // no-op - arg is borrowed
+#endif
+#define __Pyx_NumKwargs_VARARGS(kwds) PyDict_Size(kwds)
+#define __Pyx_KwValues_VARARGS(args, nargs) NULL
+#define __Pyx_GetKwValue_VARARGS(kw, kwvalues, s) __Pyx_PyDict_GetItemStrWithError(kw, s)
+#define __Pyx_KwargsAsDict_VARARGS(kw, kwvalues) PyDict_Copy(kw)
+#if CYTHON_METH_FASTCALL
+ #define __Pyx_Arg_FASTCALL(args, i) args[i]
+ #define __Pyx_NumKwargs_FASTCALL(kwds) PyTuple_GET_SIZE(kwds)
+ #define __Pyx_KwValues_FASTCALL(args, nargs) ((args) + (nargs))
+ static CYTHON_INLINE PyObject * __Pyx_GetKwValue_FASTCALL(PyObject *kwnames, PyObject *const *kwvalues, PyObject *s);
+ #define __Pyx_KwargsAsDict_FASTCALL(kw, kwvalues) _PyStack_AsDict(kwvalues, kw)
+ #define __Pyx_Arg_NewRef_FASTCALL(arg) arg // no-op, __Pyx_Arg_FASTCALL is direct and this needs
+ #define __Pyx_Arg_XDECREF_FASTCALL(arg) // no-op - arg was returned from array
+#else
+ #define __Pyx_Arg_FASTCALL __Pyx_Arg_VARARGS
+ #define __Pyx_NumKwargs_FASTCALL __Pyx_NumKwargs_VARARGS
+ #define __Pyx_KwValues_FASTCALL __Pyx_KwValues_VARARGS
+ #define __Pyx_GetKwValue_FASTCALL __Pyx_GetKwValue_VARARGS
+ #define __Pyx_KwargsAsDict_FASTCALL __Pyx_KwargsAsDict_VARARGS
+ #define __Pyx_Arg_NewRef_FASTCALL(arg) __Pyx_Arg_NewRef_VARARGS(arg)
+ #define __Pyx_Arg_XDECREF_FASTCALL(arg) __Pyx_Arg_XDECREF_VARARGS(arg)
+#endif
+#if CYTHON_COMPILING_IN_CPYTHON && CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+#define __Pyx_ArgsSlice_VARARGS(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_VARARGS(args, start), stop - start)
+#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) __Pyx_PyTuple_FromArray(&__Pyx_Arg_FASTCALL(args, start), stop - start)
+#else
+#define __Pyx_ArgsSlice_VARARGS(args, start, stop) PyTuple_GetSlice(args, start, stop)
+#define __Pyx_ArgsSlice_FASTCALL(args, start, stop) PyTuple_GetSlice(args, start, stop)
+#endif
+
+/* RaiseArgTupleInvalid.proto */
+static void __Pyx_RaiseArgtupleInvalid(const char* func_name, int exact,
+ Py_ssize_t num_min, Py_ssize_t num_max, Py_ssize_t num_found);
+
+/* RaiseDoubleKeywords.proto */
+static void __Pyx_RaiseDoubleKeywordsError(const char* func_name, PyObject* kw_name);
+
+/* ParseKeywords.proto */
+static int __Pyx_ParseOptionalKeywords(PyObject *kwds, PyObject *const *kwvalues,
+ PyObject **argnames[],
+ PyObject *kwds2, PyObject *values[], Py_ssize_t num_pos_args,
+ const char* function_name);
+
+/* ArgTypeTest.proto */
+#define __Pyx_ArgTypeTest(obj, type, none_allowed, name, exact)\
+ ((likely(__Pyx_IS_TYPE(obj, type) | (none_allowed && (obj == Py_None)))) ? 1 :\
+ __Pyx__ArgTypeTest(obj, type, name, exact))
+static int __Pyx__ArgTypeTest(PyObject *obj, PyTypeObject *type, const char *name, int exact);
+
+/* RaiseException.proto */
+static void __Pyx_Raise(PyObject *type, PyObject *value, PyObject *tb, PyObject *cause);
+
+/* PyFunctionFastCall.proto */
+#if CYTHON_FAST_PYCALL
+#if !CYTHON_VECTORCALL
+#define __Pyx_PyFunction_FastCall(func, args, nargs)\
+ __Pyx_PyFunction_FastCallDict((func), (args), (nargs), NULL)
+static PyObject *__Pyx_PyFunction_FastCallDict(PyObject *func, PyObject **args, Py_ssize_t nargs, PyObject *kwargs);
+#endif
+#define __Pyx_BUILD_ASSERT_EXPR(cond)\
+ (sizeof(char [1 - 2*!(cond)]) - 1)
+#ifndef Py_MEMBER_SIZE
+#define Py_MEMBER_SIZE(type, member) sizeof(((type *)0)->member)
+#endif
+#if !CYTHON_VECTORCALL
+#if PY_VERSION_HEX >= 0x03080000
+ #include "frameobject.h"
+#if PY_VERSION_HEX >= 0x030b00a6 && !CYTHON_COMPILING_IN_LIMITED_API
+ #ifndef Py_BUILD_CORE
+ #define Py_BUILD_CORE 1
+ #endif
+ #include "internal/pycore_frame.h"
+#endif
+ #define __Pxy_PyFrame_Initialize_Offsets()
+ #define __Pyx_PyFrame_GetLocalsplus(frame) ((frame)->f_localsplus)
+#else
+ static size_t __pyx_pyframe_localsplus_offset = 0;
+ #include "frameobject.h"
+ #define __Pxy_PyFrame_Initialize_Offsets()\
+ ((void)__Pyx_BUILD_ASSERT_EXPR(sizeof(PyFrameObject) == offsetof(PyFrameObject, f_localsplus) + Py_MEMBER_SIZE(PyFrameObject, f_localsplus)),\
+ (void)(__pyx_pyframe_localsplus_offset = ((size_t)PyFrame_Type.tp_basicsize) - Py_MEMBER_SIZE(PyFrameObject, f_localsplus)))
+ #define __Pyx_PyFrame_GetLocalsplus(frame)\
+ (assert(__pyx_pyframe_localsplus_offset), (PyObject **)(((char *)(frame)) + __pyx_pyframe_localsplus_offset))
+#endif
+#endif
+#endif
+
+/* PyObjectCall.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_Call(PyObject *func, PyObject *arg, PyObject *kw);
+#else
+#define __Pyx_PyObject_Call(func, arg, kw) PyObject_Call(func, arg, kw)
+#endif
+
+/* PyObjectCallMethO.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallMethO(PyObject *func, PyObject *arg);
+#endif
+
+/* PyObjectFastCall.proto */
+#define __Pyx_PyObject_FastCall(func, args, nargs) __Pyx_PyObject_FastCallDict(func, args, (size_t)(nargs), NULL)
+static CYTHON_INLINE PyObject* __Pyx_PyObject_FastCallDict(PyObject *func, PyObject **args, size_t nargs, PyObject *kwargs);
+
+/* RaiseUnexpectedTypeError.proto */
+static int __Pyx_RaiseUnexpectedTypeError(const char *expected, PyObject *obj);
+
+/* GCCDiagnostics.proto */
+#if !defined(__INTEL_COMPILER) && defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6))
+#define __Pyx_HAS_GCC_DIAGNOSTIC
+#endif
+
+/* BuildPyUnicode.proto */
+static PyObject* __Pyx_PyUnicode_BuildFromAscii(Py_ssize_t ulength, char* chars, int clength,
+ int prepend_sign, char padding_char);
+
+/* CIntToPyUnicode.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_int(int value, Py_ssize_t width, char padding_char, char format_char);
+
+/* CIntToPyUnicode.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyUnicode_From_Py_ssize_t(Py_ssize_t value, Py_ssize_t width, char padding_char, char format_char);
+
+/* JoinPyUnicode.proto */
+static PyObject* __Pyx_PyUnicode_Join(PyObject* value_tuple, Py_ssize_t value_count, Py_ssize_t result_ulength,
+ Py_UCS4 max_char);
+
+/* StrEquals.proto */
+#if PY_MAJOR_VERSION >= 3
+#define __Pyx_PyString_Equals __Pyx_PyUnicode_Equals
+#else
+#define __Pyx_PyString_Equals __Pyx_PyBytes_Equals
+#endif
+
+/* PyObjectFormatSimple.proto */
+#if CYTHON_COMPILING_IN_PYPY
+ #define __Pyx_PyObject_FormatSimple(s, f) (\
+ likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+ PyObject_Format(s, f))
+#elif PY_MAJOR_VERSION < 3
+ #define __Pyx_PyObject_FormatSimple(s, f) (\
+ likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+ likely(PyString_CheckExact(s)) ? PyUnicode_FromEncodedObject(s, NULL, "strict") :\
+ PyObject_Format(s, f))
+#elif CYTHON_USE_TYPE_SLOTS
+ #define __Pyx_PyObject_FormatSimple(s, f) (\
+ likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+ likely(PyLong_CheckExact(s)) ? PyLong_Type.tp_repr(s) :\
+ likely(PyFloat_CheckExact(s)) ? PyFloat_Type.tp_repr(s) :\
+ PyObject_Format(s, f))
+#else
+ #define __Pyx_PyObject_FormatSimple(s, f) (\
+ likely(PyUnicode_CheckExact(s)) ? (Py_INCREF(s), s) :\
+ PyObject_Format(s, f))
+#endif
+
+CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *); /*proto*/
+/* GetAttr.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr(PyObject *, PyObject *);
+
+/* GetItemInt.proto */
+#define __Pyx_GetItemInt(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_Fast(o, (Py_ssize_t)i, is_list, wraparound, boundscheck) :\
+ (is_list ? (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL) :\
+ __Pyx_GetItemInt_Generic(o, to_py_func(i))))
+#define __Pyx_GetItemInt_List(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_List_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+ (PyErr_SetString(PyExc_IndexError, "list index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_List_Fast(PyObject *o, Py_ssize_t i,
+ int wraparound, int boundscheck);
+#define __Pyx_GetItemInt_Tuple(o, i, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_GetItemInt_Tuple_Fast(o, (Py_ssize_t)i, wraparound, boundscheck) :\
+ (PyErr_SetString(PyExc_IndexError, "tuple index out of range"), (PyObject*)NULL))
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Tuple_Fast(PyObject *o, Py_ssize_t i,
+ int wraparound, int boundscheck);
+static PyObject *__Pyx_GetItemInt_Generic(PyObject *o, PyObject* j);
+static CYTHON_INLINE PyObject *__Pyx_GetItemInt_Fast(PyObject *o, Py_ssize_t i,
+ int is_list, int wraparound, int boundscheck);
+
+/* PyObjectCallOneArg.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallOneArg(PyObject *func, PyObject *arg);
+
+/* ObjectGetItem.proto */
+#if CYTHON_USE_TYPE_SLOTS
+static CYTHON_INLINE PyObject *__Pyx_PyObject_GetItem(PyObject *obj, PyObject *key);
+#else
+#define __Pyx_PyObject_GetItem(obj, key) PyObject_GetItem(obj, key)
+#endif
+
+/* KeywordStringCheck.proto */
+static int __Pyx_CheckKeywordStrings(PyObject *kw, const char* function_name, int kw_allowed);
+
+/* DivInt[Py_ssize_t].proto */
+static CYTHON_INLINE Py_ssize_t __Pyx_div_Py_ssize_t(Py_ssize_t, Py_ssize_t);
+
+/* UnaryNegOverflows.proto */
+#define __Pyx_UNARY_NEG_WOULD_OVERFLOW(x)\
+ (((x) < 0) & ((unsigned long)(x) == 0-(unsigned long)(x)))
+
+/* GetAttr3.proto */
+static CYTHON_INLINE PyObject *__Pyx_GetAttr3(PyObject *, PyObject *, PyObject *);
+
+/* PyDictVersioning.proto */
+#if CYTHON_USE_DICT_VERSIONS && CYTHON_USE_TYPE_SLOTS
+#define __PYX_DICT_VERSION_INIT ((PY_UINT64_T) -1)
+#define __PYX_GET_DICT_VERSION(dict) (((PyDictObject*)(dict))->ma_version_tag)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)\
+ (version_var) = __PYX_GET_DICT_VERSION(dict);\
+ (cache_var) = (value);
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) {\
+ static PY_UINT64_T __pyx_dict_version = 0;\
+ static PyObject *__pyx_dict_cached_value = NULL;\
+ if (likely(__PYX_GET_DICT_VERSION(DICT) == __pyx_dict_version)) {\
+ (VAR) = __pyx_dict_cached_value;\
+ } else {\
+ (VAR) = __pyx_dict_cached_value = (LOOKUP);\
+ __pyx_dict_version = __PYX_GET_DICT_VERSION(DICT);\
+ }\
+}
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_tp_dict_version(PyObject *obj);
+static CYTHON_INLINE PY_UINT64_T __Pyx_get_object_dict_version(PyObject *obj);
+static CYTHON_INLINE int __Pyx_object_dict_version_matches(PyObject* obj, PY_UINT64_T tp_dict_version, PY_UINT64_T obj_dict_version);
+#else
+#define __PYX_GET_DICT_VERSION(dict) (0)
+#define __PYX_UPDATE_DICT_CACHE(dict, value, cache_var, version_var)
+#define __PYX_PY_DICT_LOOKUP_IF_MODIFIED(VAR, DICT, LOOKUP) (VAR) = (LOOKUP);
+#endif
+
+/* GetModuleGlobalName.proto */
+#if CYTHON_USE_DICT_VERSIONS
+#define __Pyx_GetModuleGlobalName(var, name) do {\
+ static PY_UINT64_T __pyx_dict_version = 0;\
+ static PyObject *__pyx_dict_cached_value = NULL;\
+ (var) = (likely(__pyx_dict_version == __PYX_GET_DICT_VERSION(__pyx_d))) ?\
+ (likely(__pyx_dict_cached_value) ? __Pyx_NewRef(__pyx_dict_cached_value) : __Pyx_GetBuiltinName(name)) :\
+ __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+} while(0)
+#define __Pyx_GetModuleGlobalNameUncached(var, name) do {\
+ PY_UINT64_T __pyx_dict_version;\
+ PyObject *__pyx_dict_cached_value;\
+ (var) = __Pyx__GetModuleGlobalName(name, &__pyx_dict_version, &__pyx_dict_cached_value);\
+} while(0)
+static PyObject *__Pyx__GetModuleGlobalName(PyObject *name, PY_UINT64_T *dict_version, PyObject **dict_cached_value);
+#else
+#define __Pyx_GetModuleGlobalName(var, name) (var) = __Pyx__GetModuleGlobalName(name)
+#define __Pyx_GetModuleGlobalNameUncached(var, name) (var) = __Pyx__GetModuleGlobalName(name)
+static CYTHON_INLINE PyObject *__Pyx__GetModuleGlobalName(PyObject *name);
+#endif
+
+/* AssertionsEnabled.proto */
+#if CYTHON_COMPILING_IN_PYPY && PY_VERSION_HEX < 0x02070600 && !defined(Py_OptimizeFlag)
+ #define __Pyx_init_assertions_enabled() (0)
+ #define __pyx_assertions_enabled() (1)
+#elif CYTHON_COMPILING_IN_LIMITED_API || (CYTHON_COMPILING_IN_CPYTHON && PY_VERSION_HEX >= 0x030C0000)
+ static int __pyx_assertions_enabled_flag;
+ #define __pyx_assertions_enabled() (__pyx_assertions_enabled_flag)
+ static int __Pyx_init_assertions_enabled(void) {
+ PyObject *builtins, *debug, *debug_str;
+ int flag;
+ builtins = PyEval_GetBuiltins();
+ if (!builtins) goto bad;
+ debug_str = PyUnicode_FromStringAndSize("__debug__", 9);
+ if (!debug_str) goto bad;
+ debug = PyObject_GetItem(builtins, debug_str);
+ Py_DECREF(debug_str);
+ if (!debug) goto bad;
+ flag = PyObject_IsTrue(debug);
+ Py_DECREF(debug);
+ if (flag == -1) goto bad;
+ __pyx_assertions_enabled_flag = flag;
+ return 0;
+ bad:
+ __pyx_assertions_enabled_flag = 1;
+ return -1;
+ }
+#else
+ #define __Pyx_init_assertions_enabled() (0)
+ #define __pyx_assertions_enabled() (!Py_OptimizeFlag)
+#endif
+
+/* RaiseTooManyValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseTooManyValuesError(Py_ssize_t expected);
+
+/* RaiseNeedMoreValuesToUnpack.proto */
+static CYTHON_INLINE void __Pyx_RaiseNeedMoreValuesError(Py_ssize_t index);
+
+/* RaiseNoneIterError.proto */
+static CYTHON_INLINE void __Pyx_RaiseNoneNotIterableError(void);
+
+/* ExtTypeTest.proto */
+static CYTHON_INLINE int __Pyx_TypeTest(PyObject *obj, PyTypeObject *type);
+
+/* GetTopmostException.proto */
+#if CYTHON_USE_EXC_INFO_STACK && CYTHON_FAST_THREAD_STATE
+static _PyErr_StackItem * __Pyx_PyErr_GetTopmostException(PyThreadState *tstate);
+#endif
+
+/* SaveResetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSave(type, value, tb) __Pyx__ExceptionSave(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSave(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#define __Pyx_ExceptionReset(type, value, tb) __Pyx__ExceptionReset(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionReset(PyThreadState *tstate, PyObject *type, PyObject *value, PyObject *tb);
+#else
+#define __Pyx_ExceptionSave(type, value, tb) PyErr_GetExcInfo(type, value, tb)
+#define __Pyx_ExceptionReset(type, value, tb) PyErr_SetExcInfo(type, value, tb)
+#endif
+
+/* GetException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_GetException(type, value, tb) __Pyx__GetException(__pyx_tstate, type, value, tb)
+static int __Pyx__GetException(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static int __Pyx_GetException(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
+/* SwapException.proto */
+#if CYTHON_FAST_THREAD_STATE
+#define __Pyx_ExceptionSwap(type, value, tb) __Pyx__ExceptionSwap(__pyx_tstate, type, value, tb)
+static CYTHON_INLINE void __Pyx__ExceptionSwap(PyThreadState *tstate, PyObject **type, PyObject **value, PyObject **tb);
+#else
+static CYTHON_INLINE void __Pyx_ExceptionSwap(PyObject **type, PyObject **value, PyObject **tb);
+#endif
+
+/* Import.proto */
+static PyObject *__Pyx_Import(PyObject *name, PyObject *from_list, int level);
+
+/* ImportDottedModule.proto */
+static PyObject *__Pyx_ImportDottedModule(PyObject *name, PyObject *parts_tuple);
+#if PY_MAJOR_VERSION >= 3
+static PyObject *__Pyx_ImportDottedModule_WalkParts(PyObject *module, PyObject *name, PyObject *parts_tuple);
+#endif
+
+/* ssize_strlen.proto */
+static CYTHON_INLINE Py_ssize_t __Pyx_ssize_strlen(const char *s);
+
+/* FastTypeChecks.proto */
+#if CYTHON_COMPILING_IN_CPYTHON
+#define __Pyx_TypeCheck(obj, type) __Pyx_IsSubtype(Py_TYPE(obj), (PyTypeObject *)type)
+#define __Pyx_TypeCheck2(obj, type1, type2) __Pyx_IsAnySubtype2(Py_TYPE(obj), (PyTypeObject *)type1, (PyTypeObject *)type2)
+static CYTHON_INLINE int __Pyx_IsSubtype(PyTypeObject *a, PyTypeObject *b);
+static CYTHON_INLINE int __Pyx_IsAnySubtype2(PyTypeObject *cls, PyTypeObject *a, PyTypeObject *b);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches(PyObject *err, PyObject *type);
+static CYTHON_INLINE int __Pyx_PyErr_GivenExceptionMatches2(PyObject *err, PyObject *type1, PyObject *type2);
+#else
+#define __Pyx_TypeCheck(obj, type) PyObject_TypeCheck(obj, (PyTypeObject *)type)
+#define __Pyx_TypeCheck2(obj, type1, type2) (PyObject_TypeCheck(obj, (PyTypeObject *)type1) || PyObject_TypeCheck(obj, (PyTypeObject *)type2))
+#define __Pyx_PyErr_GivenExceptionMatches(err, type) PyErr_GivenExceptionMatches(err, type)
+#define __Pyx_PyErr_GivenExceptionMatches2(err, type1, type2) (PyErr_GivenExceptionMatches(err, type1) || PyErr_GivenExceptionMatches(err, type2))
+#endif
+#define __Pyx_PyErr_ExceptionMatches2(err1, err2) __Pyx_PyErr_GivenExceptionMatches2(__Pyx_PyErr_CurrentExceptionType(), err1, err2)
+#define __Pyx_PyException_Check(obj) __Pyx_TypeCheck(obj, PyExc_Exception)
+
+CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+/* ListCompAppend.proto */
+#if CYTHON_USE_PYLIST_INTERNALS && CYTHON_ASSUME_SAFE_MACROS
+static CYTHON_INLINE int __Pyx_ListComp_Append(PyObject* list, PyObject* x) {
+ PyListObject* L = (PyListObject*) list;
+ Py_ssize_t len = Py_SIZE(list);
+ if (likely(L->allocated > len)) {
+ Py_INCREF(x);
+ PyList_SET_ITEM(list, len, x);
+ __Pyx_SET_SIZE(list, len + 1);
+ return 0;
+ }
+ return PyList_Append(list, x);
+}
+#else
+#define __Pyx_ListComp_Append(L,x) PyList_Append(L,x)
+#endif
+
+/* PySequenceMultiply.proto */
+#define __Pyx_PySequence_Multiply_Left(mul, seq) __Pyx_PySequence_Multiply(seq, mul)
+static CYTHON_INLINE PyObject* __Pyx_PySequence_Multiply(PyObject *seq, Py_ssize_t mul);
+
+/* SetItemInt.proto */
+#define __Pyx_SetItemInt(o, i, v, type, is_signed, to_py_func, is_list, wraparound, boundscheck)\
+ (__Pyx_fits_Py_ssize_t(i, type, is_signed) ?\
+ __Pyx_SetItemInt_Fast(o, (Py_ssize_t)i, v, is_list, wraparound, boundscheck) :\
+ (is_list ? (PyErr_SetString(PyExc_IndexError, "list assignment index out of range"), -1) :\
+ __Pyx_SetItemInt_Generic(o, to_py_func(i), v)))
+static int __Pyx_SetItemInt_Generic(PyObject *o, PyObject *j, PyObject *v);
+static CYTHON_INLINE int __Pyx_SetItemInt_Fast(PyObject *o, Py_ssize_t i, PyObject *v,
+ int is_list, int wraparound, int boundscheck);
+
+/* RaiseUnboundLocalError.proto */
+static CYTHON_INLINE void __Pyx_RaiseUnboundLocalError(const char *varname);
+
+/* DivInt[long].proto */
+static CYTHON_INLINE long __Pyx_div_long(long, long);
+
+/* PySequenceContains.proto */
+static CYTHON_INLINE int __Pyx_PySequence_ContainsTF(PyObject* item, PyObject* seq, int eq) {
+ int result = PySequence_Contains(seq, item);
+ return unlikely(result < 0) ? result : (result == (eq == Py_EQ));
+}
+
+/* ImportFrom.proto */
+static PyObject* __Pyx_ImportFrom(PyObject* module, PyObject* name);
+
+/* HasAttr.proto */
+static CYTHON_INLINE int __Pyx_HasAttr(PyObject *, PyObject *);
+
+/* ErrOccurredWithGIL.proto */
+static CYTHON_INLINE int __Pyx_ErrOccurredWithGIL(void);
+
+/* PyObject_GenericGetAttrNoDict.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static CYTHON_INLINE PyObject* __Pyx_PyObject_GenericGetAttrNoDict(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttrNoDict PyObject_GenericGetAttr
+#endif
+
+/* PyObject_GenericGetAttr.proto */
+#if CYTHON_USE_TYPE_SLOTS && CYTHON_USE_PYTYPE_LOOKUP && PY_VERSION_HEX < 0x03070000
+static PyObject* __Pyx_PyObject_GenericGetAttr(PyObject* obj, PyObject* attr_name);
+#else
+#define __Pyx_PyObject_GenericGetAttr PyObject_GenericGetAttr
+#endif
+
+/* IncludeStructmemberH.proto */
+#include
+
+/* FixUpExtensionType.proto */
+#if CYTHON_USE_TYPE_SPECS
+static int __Pyx_fix_up_extension_type_from_spec(PyType_Spec *spec, PyTypeObject *type);
+#endif
+
+/* PyObjectCallNoArg.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyObject_CallNoArg(PyObject *func);
+
+/* PyObjectGetMethod.proto */
+static int __Pyx_PyObject_GetMethod(PyObject *obj, PyObject *name, PyObject **method);
+
+/* PyObjectCallMethod0.proto */
+static PyObject* __Pyx_PyObject_CallMethod0(PyObject* obj, PyObject* method_name);
+
+/* ValidateBasesTuple.proto */
+#if CYTHON_COMPILING_IN_CPYTHON || CYTHON_COMPILING_IN_LIMITED_API || CYTHON_USE_TYPE_SPECS
+static int __Pyx_validate_bases_tuple(const char *type_name, Py_ssize_t dictoffset, PyObject *bases);
+#endif
+
+/* PyType_Ready.proto */
+CYTHON_UNUSED static int __Pyx_PyType_Ready(PyTypeObject *t);
+
+/* SetVTable.proto */
+static int __Pyx_SetVtable(PyTypeObject* typeptr , void* vtable);
+
+/* GetVTable.proto */
+static void* __Pyx_GetVtable(PyTypeObject *type);
+
+/* MergeVTables.proto */
+#if !CYTHON_COMPILING_IN_LIMITED_API
+static int __Pyx_MergeVtables(PyTypeObject *type);
+#endif
+
+/* SetupReduce.proto */
+#if !CYTHON_COMPILING_IN_LIMITED_API
+static int __Pyx_setup_reduce(PyObject* type_obj);
+#endif
+
+/* TypeImport.proto */
+#ifndef __PYX_HAVE_RT_ImportType_proto_3_0_2
+#define __PYX_HAVE_RT_ImportType_proto_3_0_2
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L
+#include
+#endif
+#if (defined (__STDC_VERSION__) && __STDC_VERSION__ >= 201112L) || __cplusplus >= 201103L
+#define __PYX_GET_STRUCT_ALIGNMENT_3_0_2(s) alignof(s)
+#else
+#define __PYX_GET_STRUCT_ALIGNMENT_3_0_2(s) sizeof(void*)
+#endif
+enum __Pyx_ImportType_CheckSize_3_0_2 {
+ __Pyx_ImportType_CheckSize_Error_3_0_2 = 0,
+ __Pyx_ImportType_CheckSize_Warn_3_0_2 = 1,
+ __Pyx_ImportType_CheckSize_Ignore_3_0_2 = 2
+};
+static PyTypeObject *__Pyx_ImportType_3_0_2(PyObject* module, const char *module_name, const char *class_name, size_t size, size_t alignment, enum __Pyx_ImportType_CheckSize_3_0_2 check_size);
+#endif
+
+/* FetchSharedCythonModule.proto */
+static PyObject *__Pyx_FetchSharedCythonABIModule(void);
+
+/* FetchCommonType.proto */
+#if !CYTHON_USE_TYPE_SPECS
+static PyTypeObject* __Pyx_FetchCommonType(PyTypeObject* type);
+#else
+static PyTypeObject* __Pyx_FetchCommonTypeFromSpec(PyObject *module, PyType_Spec *spec, PyObject *bases);
+#endif
+
+/* PyMethodNew.proto */
+#if CYTHON_COMPILING_IN_LIMITED_API
+static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
+ PyObject *typesModule=NULL, *methodType=NULL, *result=NULL;
+ CYTHON_UNUSED_VAR(typ);
+ if (!self)
+ return __Pyx_NewRef(func);
+ typesModule = PyImport_ImportModule("types");
+ if (!typesModule) return NULL;
+ methodType = PyObject_GetAttrString(typesModule, "MethodType");
+ Py_DECREF(typesModule);
+ if (!methodType) return NULL;
+ result = PyObject_CallFunctionObjArgs(methodType, func, self, NULL);
+ Py_DECREF(methodType);
+ return result;
+}
+#elif PY_MAJOR_VERSION >= 3
+static PyObject *__Pyx_PyMethod_New(PyObject *func, PyObject *self, PyObject *typ) {
+ CYTHON_UNUSED_VAR(typ);
+ if (!self)
+ return __Pyx_NewRef(func);
+ return PyMethod_New(func, self);
+}
+#else
+ #define __Pyx_PyMethod_New PyMethod_New
+#endif
+
+/* PyVectorcallFastCallDict.proto */
+#if CYTHON_METH_FASTCALL
+static CYTHON_INLINE PyObject *__Pyx_PyVectorcall_FastCallDict(PyObject *func, __pyx_vectorcallfunc vc, PyObject *const *args, size_t nargs, PyObject *kw);
+#endif
+
+/* CythonFunctionShared.proto */
+#define __Pyx_CyFunction_USED
+#define __Pyx_CYFUNCTION_STATICMETHOD 0x01
+#define __Pyx_CYFUNCTION_CLASSMETHOD 0x02
+#define __Pyx_CYFUNCTION_CCLASS 0x04
+#define __Pyx_CYFUNCTION_COROUTINE 0x08
+#define __Pyx_CyFunction_GetClosure(f)\
+ (((__pyx_CyFunctionObject *) (f))->func_closure)
+#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
+ #define __Pyx_CyFunction_GetClassObj(f)\
+ (((__pyx_CyFunctionObject *) (f))->func_classobj)
+#else
+ #define __Pyx_CyFunction_GetClassObj(f)\
+ ((PyObject*) ((PyCMethodObject *) (f))->mm_class)
+#endif
+#define __Pyx_CyFunction_SetClassObj(f, classobj)\
+ __Pyx__CyFunction_SetClassObj((__pyx_CyFunctionObject *) (f), (classobj))
+#define __Pyx_CyFunction_Defaults(type, f)\
+ ((type *)(((__pyx_CyFunctionObject *) (f))->defaults))
+#define __Pyx_CyFunction_SetDefaultsGetter(f, g)\
+ ((__pyx_CyFunctionObject *) (f))->defaults_getter = (g)
+typedef struct {
+#if CYTHON_COMPILING_IN_LIMITED_API
+ PyObject_HEAD
+ PyObject *func;
+#elif PY_VERSION_HEX < 0x030900B1
+ PyCFunctionObject func;
+#else
+ PyCMethodObject func;
+#endif
+#if CYTHON_BACKPORT_VECTORCALL
+ __pyx_vectorcallfunc func_vectorcall;
+#endif
+#if PY_VERSION_HEX < 0x030500A0 || CYTHON_COMPILING_IN_LIMITED_API
+ PyObject *func_weakreflist;
+#endif
+ PyObject *func_dict;
+ PyObject *func_name;
+ PyObject *func_qualname;
+ PyObject *func_doc;
+ PyObject *func_globals;
+ PyObject *func_code;
+ PyObject *func_closure;
+#if PY_VERSION_HEX < 0x030900B1 || CYTHON_COMPILING_IN_LIMITED_API
+ PyObject *func_classobj;
+#endif
+ void *defaults;
+ int defaults_pyobjects;
+ size_t defaults_size; // used by FusedFunction for copying defaults
+ int flags;
+ PyObject *defaults_tuple;
+ PyObject *defaults_kwdict;
+ PyObject *(*defaults_getter)(PyObject *);
+ PyObject *func_annotations;
+ PyObject *func_is_coroutine;
+} __pyx_CyFunctionObject;
+#define __Pyx_CyFunction_Check(obj) __Pyx_TypeCheck(obj, __pyx_CyFunctionType)
+#define __Pyx_IsCyOrPyCFunction(obj) __Pyx_TypeCheck2(obj, __pyx_CyFunctionType, &PyCFunction_Type)
+#define __Pyx_CyFunction_CheckExact(obj) __Pyx_IS_TYPE(obj, __pyx_CyFunctionType)
+static PyObject *__Pyx_CyFunction_Init(__pyx_CyFunctionObject* op, PyMethodDef *ml,
+ int flags, PyObject* qualname,
+ PyObject *closure,
+ PyObject *module, PyObject *globals,
+ PyObject* code);
+static CYTHON_INLINE void __Pyx__CyFunction_SetClassObj(__pyx_CyFunctionObject* f, PyObject* classobj);
+static CYTHON_INLINE void *__Pyx_CyFunction_InitDefaults(PyObject *m,
+ size_t size,
+ int pyobjects);
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsTuple(PyObject *m,
+ PyObject *tuple);
+static CYTHON_INLINE void __Pyx_CyFunction_SetDefaultsKwDict(PyObject *m,
+ PyObject *dict);
+static CYTHON_INLINE void __Pyx_CyFunction_SetAnnotationsDict(PyObject *m,
+ PyObject *dict);
+static int __pyx_CyFunction_init(PyObject *module);
+#if CYTHON_METH_FASTCALL
+static PyObject * __Pyx_CyFunction_Vectorcall_NOARGS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+static PyObject * __Pyx_CyFunction_Vectorcall_O(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+static PyObject * __Pyx_CyFunction_Vectorcall_FASTCALL_KEYWORDS_METHOD(PyObject *func, PyObject *const *args, size_t nargsf, PyObject *kwnames);
+#if CYTHON_BACKPORT_VECTORCALL
+#define __Pyx_CyFunction_func_vectorcall(f) (((__pyx_CyFunctionObject*)f)->func_vectorcall)
+#else
+#define __Pyx_CyFunction_func_vectorcall(f) (((PyCFunctionObject*)f)->vectorcall)
+#endif
+#endif
+
+/* CythonFunction.proto */
+static PyObject *__Pyx_CyFunction_New(PyMethodDef *ml,
+ int flags, PyObject* qualname,
+ PyObject *closure,
+ PyObject *module, PyObject *globals,
+ PyObject* code);
+
+/* CLineInTraceback.proto */
+#ifdef CYTHON_CLINE_IN_TRACEBACK
+#define __Pyx_CLineForTraceback(tstate, c_line) (((CYTHON_CLINE_IN_TRACEBACK)) ? c_line : 0)
+#else
+static int __Pyx_CLineForTraceback(PyThreadState *tstate, int c_line);
+#endif
+
+/* CodeObjectCache.proto */
+#if !CYTHON_COMPILING_IN_LIMITED_API
+typedef struct {
+ PyCodeObject* code_object;
+ int code_line;
+} __Pyx_CodeObjectCacheEntry;
+struct __Pyx_CodeObjectCache {
+ int count;
+ int max_count;
+ __Pyx_CodeObjectCacheEntry* entries;
+};
+static struct __Pyx_CodeObjectCache __pyx_code_cache = {0,0,NULL};
+static int __pyx_bisect_code_objects(__Pyx_CodeObjectCacheEntry* entries, int count, int code_line);
+static PyCodeObject *__pyx_find_code_object(int code_line);
+static void __pyx_insert_code_object(int code_line, PyCodeObject* code_object);
+#endif
+
+/* AddTraceback.proto */
+static void __Pyx_AddTraceback(const char *funcname, int c_line,
+ int py_line, const char *filename);
+
+#if PY_MAJOR_VERSION < 3
+ static int __Pyx_GetBuffer(PyObject *obj, Py_buffer *view, int flags);
+ static void __Pyx_ReleaseBuffer(Py_buffer *view);
+#else
+ #define __Pyx_GetBuffer PyObject_GetBuffer
+ #define __Pyx_ReleaseBuffer PyBuffer_Release
+#endif
+
+
+/* BufferStructDeclare.proto */
+typedef struct {
+ Py_ssize_t shape, strides, suboffsets;
+} __Pyx_Buf_DimInfo;
+typedef struct {
+ size_t refcount;
+ Py_buffer pybuffer;
+} __Pyx_Buffer;
+typedef struct {
+ __Pyx_Buffer *rcbuffer;
+ char *data;
+ __Pyx_Buf_DimInfo diminfo[8];
+} __Pyx_LocalBuf_ND;
+
+/* MemviewSliceIsContig.proto */
+static int __pyx_memviewslice_is_contig(const __Pyx_memviewslice mvs, char order, int ndim);
+
+/* OverlappingSlices.proto */
+static int __pyx_slices_overlap(__Pyx_memviewslice *slice1,
+ __Pyx_memviewslice *slice2,
+ int ndim, size_t itemsize);
+
+/* IsLittleEndian.proto */
+static CYTHON_INLINE int __Pyx_Is_Little_Endian(void);
+
+/* BufferFormatCheck.proto */
+static const char* __Pyx_BufFmt_CheckString(__Pyx_BufFmt_Context* ctx, const char* ts);
+static void __Pyx_BufFmt_Init(__Pyx_BufFmt_Context* ctx,
+ __Pyx_BufFmt_StackElem* stack,
+ __Pyx_TypeInfo* type);
+
+/* TypeInfoCompare.proto */
+static int __pyx_typeinfo_cmp(__Pyx_TypeInfo *a, __Pyx_TypeInfo *b);
+
+/* MemviewSliceValidateAndInit.proto */
+static int __Pyx_ValidateAndInit_memviewslice(
+ int *axes_specs,
+ int c_or_f_flag,
+ int buf_flags,
+ int ndim,
+ __Pyx_TypeInfo *dtype,
+ __Pyx_BufFmt_StackElem stack[],
+ __Pyx_memviewslice *memviewslice,
+ PyObject *original_obj);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_int(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_d_d_dc_float(PyObject *, int writable_flag);
+
+/* ObjectToMemviewSlice.proto */
+static CYTHON_INLINE __Pyx_memviewslice __Pyx_PyObject_to_MemoryviewSlice_dc_int(PyObject *, int writable_flag);
+
+/* RealImag.proto */
+#if CYTHON_CCOMPLEX
+ #ifdef __cplusplus
+ #define __Pyx_CREAL(z) ((z).real())
+ #define __Pyx_CIMAG(z) ((z).imag())
+ #else
+ #define __Pyx_CREAL(z) (__real__(z))
+ #define __Pyx_CIMAG(z) (__imag__(z))
+ #endif
+#else
+ #define __Pyx_CREAL(z) ((z).real)
+ #define __Pyx_CIMAG(z) ((z).imag)
+#endif
+#if defined(__cplusplus) && CYTHON_CCOMPLEX\
+ && (defined(_WIN32) || defined(__clang__) || (defined(__GNUC__) && (__GNUC__ >= 5 || __GNUC__ == 4 && __GNUC_MINOR__ >= 4 )) || __cplusplus >= 201103)
+ #define __Pyx_SET_CREAL(z,x) ((z).real(x))
+ #define __Pyx_SET_CIMAG(z,y) ((z).imag(y))
+#else
+ #define __Pyx_SET_CREAL(z,x) __Pyx_CREAL(z) = (x)
+ #define __Pyx_SET_CIMAG(z,y) __Pyx_CIMAG(z) = (y)
+#endif
+
+/* Arithmetic.proto */
+#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
+ #define __Pyx_c_eq_float(a, b) ((a)==(b))
+ #define __Pyx_c_sum_float(a, b) ((a)+(b))
+ #define __Pyx_c_diff_float(a, b) ((a)-(b))
+ #define __Pyx_c_prod_float(a, b) ((a)*(b))
+ #define __Pyx_c_quot_float(a, b) ((a)/(b))
+ #define __Pyx_c_neg_float(a) (-(a))
+ #ifdef __cplusplus
+ #define __Pyx_c_is_zero_float(z) ((z)==(float)0)
+ #define __Pyx_c_conj_float(z) (::std::conj(z))
+ #if 1
+ #define __Pyx_c_abs_float(z) (::std::abs(z))
+ #define __Pyx_c_pow_float(a, b) (::std::pow(a, b))
+ #endif
+ #else
+ #define __Pyx_c_is_zero_float(z) ((z)==0)
+ #define __Pyx_c_conj_float(z) (conjf(z))
+ #if 1
+ #define __Pyx_c_abs_float(z) (cabsf(z))
+ #define __Pyx_c_pow_float(a, b) (cpowf(a, b))
+ #endif
+ #endif
+#else
+ static CYTHON_INLINE int __Pyx_c_eq_float(__pyx_t_float_complex, __pyx_t_float_complex);
+ static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_sum_float(__pyx_t_float_complex, __pyx_t_float_complex);
+ static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_diff_float(__pyx_t_float_complex, __pyx_t_float_complex);
+ static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_prod_float(__pyx_t_float_complex, __pyx_t_float_complex);
+ static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_quot_float(__pyx_t_float_complex, __pyx_t_float_complex);
+ static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_neg_float(__pyx_t_float_complex);
+ static CYTHON_INLINE int __Pyx_c_is_zero_float(__pyx_t_float_complex);
+ static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_conj_float(__pyx_t_float_complex);
+ #if 1
+ static CYTHON_INLINE float __Pyx_c_abs_float(__pyx_t_float_complex);
+ static CYTHON_INLINE __pyx_t_float_complex __Pyx_c_pow_float(__pyx_t_float_complex, __pyx_t_float_complex);
+ #endif
+#endif
+
+/* Arithmetic.proto */
+#if CYTHON_CCOMPLEX && (1) && (!0 || __cplusplus)
+ #define __Pyx_c_eq_double(a, b) ((a)==(b))
+ #define __Pyx_c_sum_double(a, b) ((a)+(b))
+ #define __Pyx_c_diff_double(a, b) ((a)-(b))
+ #define __Pyx_c_prod_double(a, b) ((a)*(b))
+ #define __Pyx_c_quot_double(a, b) ((a)/(b))
+ #define __Pyx_c_neg_double(a) (-(a))
+ #ifdef __cplusplus
+ #define __Pyx_c_is_zero_double(z) ((z)==(double)0)
+ #define __Pyx_c_conj_double(z) (::std::conj(z))
+ #if 1
+ #define __Pyx_c_abs_double(z) (::std::abs(z))
+ #define __Pyx_c_pow_double(a, b) (::std::pow(a, b))
+ #endif
+ #else
+ #define __Pyx_c_is_zero_double(z) ((z)==0)
+ #define __Pyx_c_conj_double(z) (conj(z))
+ #if 1
+ #define __Pyx_c_abs_double(z) (cabs(z))
+ #define __Pyx_c_pow_double(a, b) (cpow(a, b))
+ #endif
+ #endif
+#else
+ static CYTHON_INLINE int __Pyx_c_eq_double(__pyx_t_double_complex, __pyx_t_double_complex);
+ static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_sum_double(__pyx_t_double_complex, __pyx_t_double_complex);
+ static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_diff_double(__pyx_t_double_complex, __pyx_t_double_complex);
+ static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_prod_double(__pyx_t_double_complex, __pyx_t_double_complex);
+ static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_quot_double(__pyx_t_double_complex, __pyx_t_double_complex);
+ static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_neg_double(__pyx_t_double_complex);
+ static CYTHON_INLINE int __Pyx_c_is_zero_double(__pyx_t_double_complex);
+ static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_conj_double(__pyx_t_double_complex);
+ #if 1
+ static CYTHON_INLINE double __Pyx_c_abs_double(__pyx_t_double_complex);
+ static CYTHON_INLINE __pyx_t_double_complex __Pyx_c_pow_double(__pyx_t_double_complex, __pyx_t_double_complex);
+ #endif
+#endif
+
+/* MemviewSliceCopyTemplate.proto */
+static __Pyx_memviewslice
+__pyx_memoryview_copy_new_contig(const __Pyx_memviewslice *from_mvs,
+ const char *mode, int ndim,
+ size_t sizeof_dtype, int contig_flag,
+ int dtype_is_object);
+
+/* MemviewSliceInit.proto */
+#define __Pyx_BUF_MAX_NDIMS %(BUF_MAX_NDIMS)d
+#define __Pyx_MEMVIEW_DIRECT 1
+#define __Pyx_MEMVIEW_PTR 2
+#define __Pyx_MEMVIEW_FULL 4
+#define __Pyx_MEMVIEW_CONTIG 8
+#define __Pyx_MEMVIEW_STRIDED 16
+#define __Pyx_MEMVIEW_FOLLOW 32
+#define __Pyx_IS_C_CONTIG 1
+#define __Pyx_IS_F_CONTIG 2
+static int __Pyx_init_memviewslice(
+ struct __pyx_memoryview_obj *memview,
+ int ndim,
+ __Pyx_memviewslice *memviewslice,
+ int memview_is_new_reference);
+static CYTHON_INLINE int __pyx_add_acquisition_count_locked(
+ __pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock);
+static CYTHON_INLINE int __pyx_sub_acquisition_count_locked(
+ __pyx_atomic_int_type *acquisition_count, PyThread_type_lock lock);
+#define __pyx_get_slice_count_pointer(memview) (&memview->acquisition_count)
+#define __PYX_INC_MEMVIEW(slice, have_gil) __Pyx_INC_MEMVIEW(slice, have_gil, __LINE__)
+#define __PYX_XCLEAR_MEMVIEW(slice, have_gil) __Pyx_XCLEAR_MEMVIEW(slice, have_gil, __LINE__)
+static CYTHON_INLINE void __Pyx_INC_MEMVIEW(__Pyx_memviewslice *, int, int);
+static CYTHON_INLINE void __Pyx_XCLEAR_MEMVIEW(__Pyx_memviewslice *, int, int);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_int(int value);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE int __Pyx_PyInt_As_int(PyObject *);
+
+/* CIntToPy.proto */
+static CYTHON_INLINE PyObject* __Pyx_PyInt_From_long(long value);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE long __Pyx_PyInt_As_long(PyObject *);
+
+/* CIntFromPy.proto */
+static CYTHON_INLINE char __Pyx_PyInt_As_char(PyObject *);
+
+/* FormatTypeName.proto */
+#if CYTHON_COMPILING_IN_LIMITED_API
+typedef PyObject *__Pyx_TypeName;
+#define __Pyx_FMT_TYPENAME "%U"
+static __Pyx_TypeName __Pyx_PyType_GetName(PyTypeObject* tp);
+#define __Pyx_DECREF_TypeName(obj) Py_XDECREF(obj)
+#else
+typedef const char *__Pyx_TypeName;
+#define __Pyx_FMT_TYPENAME "%.200s"
+#define __Pyx_PyType_GetName(tp) ((tp)->tp_name)
+#define __Pyx_DECREF_TypeName(obj)
+#endif
+
+/* CheckBinaryVersion.proto */
+static int __Pyx_check_binary_version(void);
+
+/* InitStrings.proto */
+static int __Pyx_InitStrings(__Pyx_StringTabEntry *t);
+
+/* #### Code section: module_declarations ### */
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self); /* proto*/
+static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto*/
+static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj); /* proto*/
+static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src); /* proto*/
+static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
+static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj *__pyx_v_self); /* proto*/
+static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp); /* proto*/
+static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value); /* proto*/
+static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto*/
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self); /* proto*/
+static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self); /* proto*/
+static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self); /* proto*/
+static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self); /* proto*/
+static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self); /* proto*/
+static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self); /* proto*/
+static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self); /* proto*/
+
+/* Module declarations from "cython.view" */
+
+/* Module declarations from "cython.dataclasses" */
+
+/* Module declarations from "cython" */
+
+/* Module declarations from "libc.string" */
+
+/* Module declarations from "libc.stdio" */
+
+/* Module declarations from "__builtin__" */
+
+/* Module declarations from "cpython.type" */
+
+/* Module declarations from "cpython" */
+
+/* Module declarations from "cpython.object" */
+
+/* Module declarations from "cpython.ref" */
+
+/* Module declarations from "numpy" */
+
+/* Module declarations from "numpy" */
+
+/* Module declarations from "matcha.utils.monotonic_align.core" */
+static PyObject *__pyx_collections_abc_Sequence = 0;
+static PyObject *generic = 0;
+static PyObject *strided = 0;
+static PyObject *indirect = 0;
+static PyObject *contiguous = 0;
+static PyObject *indirect_contiguous = 0;
+static int __pyx_memoryview_thread_locks_used;
+static PyThread_type_lock __pyx_memoryview_thread_locks[8];
+static void __pyx_f_6matcha_5utils_15monotonic_align_4core_maximum_path_each(__Pyx_memviewslice, __Pyx_memviewslice, int, int, float); /*proto*/
+static void __pyx_f_6matcha_5utils_15monotonic_align_4core_maximum_path_c(__Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, __Pyx_memviewslice, int __pyx_skip_dispatch, struct __pyx_opt_args_6matcha_5utils_15monotonic_align_4core_maximum_path_c *__pyx_optional_args); /*proto*/
+static int __pyx_array_allocate_buffer(struct __pyx_array_obj *); /*proto*/
+static struct __pyx_array_obj *__pyx_array_new(PyObject *, Py_ssize_t, char *, char *, char *); /*proto*/
+static PyObject *__pyx_memoryview_new(PyObject *, int, int, __Pyx_TypeInfo *); /*proto*/
+static CYTHON_INLINE int __pyx_memoryview_check(PyObject *); /*proto*/
+static PyObject *_unellipsify(PyObject *, int); /*proto*/
+static int assert_direct_dimensions(Py_ssize_t *, int); /*proto*/
+static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *, PyObject *); /*proto*/
+static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int *, Py_ssize_t, Py_ssize_t, Py_ssize_t, int, int, int, int); /*proto*/
+static char *__pyx_pybuffer_index(Py_buffer *, char *, Py_ssize_t, Py_ssize_t); /*proto*/
+static int __pyx_memslice_transpose(__Pyx_memviewslice *); /*proto*/
+static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice, int, PyObject *(*)(char *), int (*)(char *, PyObject *), int); /*proto*/
+static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *); /*proto*/
+static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *, __Pyx_memviewslice *); /*proto*/
+static Py_ssize_t abs_py_ssize_t(Py_ssize_t); /*proto*/
+static char __pyx_get_best_slice_order(__Pyx_memviewslice *, int); /*proto*/
+static void _copy_strided_to_strided(char *, Py_ssize_t *, char *, Py_ssize_t *, Py_ssize_t *, Py_ssize_t *, int, size_t); /*proto*/
+static void copy_strided_to_strided(__Pyx_memviewslice *, __Pyx_memviewslice *, int, size_t); /*proto*/
+static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *, int); /*proto*/
+static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *, Py_ssize_t *, Py_ssize_t, int, char); /*proto*/
+static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *, __Pyx_memviewslice *, char, int); /*proto*/
+static int __pyx_memoryview_err_extents(int, Py_ssize_t, Py_ssize_t); /*proto*/
+static int __pyx_memoryview_err_dim(PyObject *, PyObject *, int); /*proto*/
+static int __pyx_memoryview_err(PyObject *, PyObject *); /*proto*/
+static int __pyx_memoryview_err_no_memory(void); /*proto*/
+static int __pyx_memoryview_copy_contents(__Pyx_memviewslice, __Pyx_memviewslice, int, int, int); /*proto*/
+static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *, int, int); /*proto*/
+static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *, int, int, int); /*proto*/
+static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
+static void __pyx_memoryview_refcount_objects_in_slice(char *, Py_ssize_t *, Py_ssize_t *, int, int); /*proto*/
+static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *, int, size_t, void *, int); /*proto*/
+static void __pyx_memoryview__slice_assign_scalar(char *, Py_ssize_t *, Py_ssize_t *, int, size_t, void *); /*proto*/
+static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *, PyObject *); /*proto*/
+/* #### Code section: typeinfo ### */
+static __Pyx_TypeInfo __Pyx_TypeInfo_int = { "int", NULL, sizeof(int), { 0 }, 0, __PYX_IS_UNSIGNED(int) ? 'U' : 'I', __PYX_IS_UNSIGNED(int), 0 };
+static __Pyx_TypeInfo __Pyx_TypeInfo_float = { "float", NULL, sizeof(float), { 0 }, 0, 'R', 0, 0 };
+/* #### Code section: before_global_var ### */
+#define __Pyx_MODULE_NAME "matcha.utils.monotonic_align.core"
+extern int __pyx_module_is_main_matcha__utils__monotonic_align__core;
+int __pyx_module_is_main_matcha__utils__monotonic_align__core = 0;
+
+/* Implementation of "matcha.utils.monotonic_align.core" */
+/* #### Code section: global_var ### */
+static PyObject *__pyx_builtin_range;
+static PyObject *__pyx_builtin___import__;
+static PyObject *__pyx_builtin_ValueError;
+static PyObject *__pyx_builtin_MemoryError;
+static PyObject *__pyx_builtin_enumerate;
+static PyObject *__pyx_builtin_TypeError;
+static PyObject *__pyx_builtin_AssertionError;
+static PyObject *__pyx_builtin_Ellipsis;
+static PyObject *__pyx_builtin_id;
+static PyObject *__pyx_builtin_IndexError;
+static PyObject *__pyx_builtin_ImportError;
+/* #### Code section: string_decls ### */
+static const char __pyx_k_[] = ": ";
+static const char __pyx_k_O[] = "O";
+static const char __pyx_k_c[] = "c";
+static const char __pyx_k__2[] = ".";
+static const char __pyx_k__3[] = "*";
+static const char __pyx_k__6[] = "'";
+static const char __pyx_k__7[] = ")";
+static const char __pyx_k_gc[] = "gc";
+static const char __pyx_k_id[] = "id";
+static const char __pyx_k_np[] = "np";
+static const char __pyx_k__25[] = "?";
+static const char __pyx_k_abc[] = "abc";
+static const char __pyx_k_and[] = " and ";
+static const char __pyx_k_got[] = " (got ";
+static const char __pyx_k_new[] = "__new__";
+static const char __pyx_k_obj[] = "obj";
+static const char __pyx_k_sys[] = "sys";
+static const char __pyx_k_base[] = "base";
+static const char __pyx_k_dict[] = "__dict__";
+static const char __pyx_k_main[] = "__main__";
+static const char __pyx_k_mode[] = "mode";
+static const char __pyx_k_name[] = "name";
+static const char __pyx_k_ndim[] = "ndim";
+static const char __pyx_k_pack[] = "pack";
+static const char __pyx_k_size[] = "size";
+static const char __pyx_k_spec[] = "__spec__";
+static const char __pyx_k_step[] = "step";
+static const char __pyx_k_stop[] = "stop";
+static const char __pyx_k_t_xs[] = "t_xs";
+static const char __pyx_k_t_ys[] = "t_ys";
+static const char __pyx_k_test[] = "__test__";
+static const char __pyx_k_ASCII[] = "ASCII";
+static const char __pyx_k_class[] = "__class__";
+static const char __pyx_k_count[] = "count";
+static const char __pyx_k_error[] = "error";
+static const char __pyx_k_flags[] = "flags";
+static const char __pyx_k_index[] = "index";
+static const char __pyx_k_numpy[] = "numpy";
+static const char __pyx_k_paths[] = "paths";
+static const char __pyx_k_range[] = "range";
+static const char __pyx_k_shape[] = "shape";
+static const char __pyx_k_start[] = "start";
+static const char __pyx_k_enable[] = "enable";
+static const char __pyx_k_encode[] = "encode";
+static const char __pyx_k_format[] = "format";
+static const char __pyx_k_import[] = "__import__";
+static const char __pyx_k_name_2[] = "__name__";
+static const char __pyx_k_pickle[] = "pickle";
+static const char __pyx_k_reduce[] = "__reduce__";
+static const char __pyx_k_struct[] = "struct";
+static const char __pyx_k_unpack[] = "unpack";
+static const char __pyx_k_update[] = "update";
+static const char __pyx_k_values[] = "values";
+static const char __pyx_k_disable[] = "disable";
+static const char __pyx_k_fortran[] = "fortran";
+static const char __pyx_k_memview[] = "memview";
+static const char __pyx_k_Ellipsis[] = "Ellipsis";
+static const char __pyx_k_Sequence[] = "Sequence";
+static const char __pyx_k_getstate[] = "__getstate__";
+static const char __pyx_k_itemsize[] = "itemsize";
+static const char __pyx_k_pyx_type[] = "__pyx_type";
+static const char __pyx_k_register[] = "register";
+static const char __pyx_k_setstate[] = "__setstate__";
+static const char __pyx_k_TypeError[] = "TypeError";
+static const char __pyx_k_enumerate[] = "enumerate";
+static const char __pyx_k_isenabled[] = "isenabled";
+static const char __pyx_k_pyx_state[] = "__pyx_state";
+static const char __pyx_k_reduce_ex[] = "__reduce_ex__";
+static const char __pyx_k_IndexError[] = "IndexError";
+static const char __pyx_k_ValueError[] = "ValueError";
+static const char __pyx_k_pyx_result[] = "__pyx_result";
+static const char __pyx_k_pyx_vtable[] = "__pyx_vtable__";
+static const char __pyx_k_ImportError[] = "ImportError";
+static const char __pyx_k_MemoryError[] = "MemoryError";
+static const char __pyx_k_PickleError[] = "PickleError";
+static const char __pyx_k_collections[] = "collections";
+static const char __pyx_k_max_neg_val[] = "max_neg_val";
+static const char __pyx_k_initializing[] = "_initializing";
+static const char __pyx_k_is_coroutine[] = "_is_coroutine";
+static const char __pyx_k_pyx_checksum[] = "__pyx_checksum";
+static const char __pyx_k_stringsource[] = "";
+static const char __pyx_k_version_info[] = "version_info";
+static const char __pyx_k_class_getitem[] = "__class_getitem__";
+static const char __pyx_k_reduce_cython[] = "__reduce_cython__";
+static const char __pyx_k_AssertionError[] = "AssertionError";
+static const char __pyx_k_maximum_path_c[] = "maximum_path_c";
+static const char __pyx_k_View_MemoryView[] = "View.MemoryView";
+static const char __pyx_k_allocate_buffer[] = "allocate_buffer";
+static const char __pyx_k_collections_abc[] = "collections.abc";
+static const char __pyx_k_dtype_is_object[] = "dtype_is_object";
+static const char __pyx_k_pyx_PickleError[] = "__pyx_PickleError";
+static const char __pyx_k_setstate_cython[] = "__setstate_cython__";
+static const char __pyx_k_pyx_unpickle_Enum[] = "__pyx_unpickle_Enum";
+static const char __pyx_k_asyncio_coroutines[] = "asyncio.coroutines";
+static const char __pyx_k_cline_in_traceback[] = "cline_in_traceback";
+static const char __pyx_k_strided_and_direct[] = "";
+static const char __pyx_k_strided_and_indirect[] = "";
+static const char __pyx_k_Invalid_shape_in_axis[] = "Invalid shape in axis ";
+static const char __pyx_k_contiguous_and_direct[] = "";
+static const char __pyx_k_Cannot_index_with_type[] = "Cannot index with type '";
+static const char __pyx_k_MemoryView_of_r_object[] = "";
+static const char __pyx_k_MemoryView_of_r_at_0x_x[] = "";
+static const char __pyx_k_contiguous_and_indirect[] = "";
+static const char __pyx_k_Dimension_d_is_not_direct[] = "Dimension %d is not direct";
+static const char __pyx_k_Index_out_of_bounds_axis_d[] = "Index out of bounds (axis %d)";
+static const char __pyx_k_Step_may_not_be_zero_axis_d[] = "Step may not be zero (axis %d)";
+static const char __pyx_k_itemsize_0_for_cython_array[] = "itemsize <= 0 for cython.array";
+static const char __pyx_k_unable_to_allocate_array_data[] = "unable to allocate array data.";
+static const char __pyx_k_strided_and_direct_or_indirect[] = "";
+static const char __pyx_k_numpy_core_multiarray_failed_to[] = "numpy.core.multiarray failed to import";
+static const char __pyx_k_All_dimensions_preceding_dimensi[] = "All dimensions preceding dimension %d must be indexed and not sliced";
+static const char __pyx_k_Buffer_view_does_not_expose_stri[] = "Buffer view does not expose strides";
+static const char __pyx_k_Can_only_create_a_buffer_that_is[] = "Can only create a buffer that is contiguous in memory.";
+static const char __pyx_k_Cannot_assign_to_read_only_memor[] = "Cannot assign to read-only memoryview";
+static const char __pyx_k_Cannot_create_writable_memory_vi[] = "Cannot create writable memory view from read-only memoryview";
+static const char __pyx_k_Cannot_transpose_memoryview_with[] = "Cannot transpose memoryview with indirect dimensions";
+static const char __pyx_k_Empty_shape_tuple_for_cython_arr[] = "Empty shape tuple for cython.array";
+static const char __pyx_k_Incompatible_checksums_0x_x_vs_0[] = "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))";
+static const char __pyx_k_Indirect_dimensions_not_supporte[] = "Indirect dimensions not supported";
+static const char __pyx_k_Invalid_mode_expected_c_or_fortr[] = "Invalid mode, expected 'c' or 'fortran', got ";
+static const char __pyx_k_Out_of_bounds_on_buffer_access_a[] = "Out of bounds on buffer access (axis ";
+static const char __pyx_k_Unable_to_convert_item_to_object[] = "Unable to convert item to object";
+static const char __pyx_k_got_differing_extents_in_dimensi[] = "got differing extents in dimension ";
+static const char __pyx_k_matcha_utils_monotonic_align_cor[] = "matcha/utils/monotonic_align/core.pyx";
+static const char __pyx_k_no_default___reduce___due_to_non[] = "no default __reduce__ due to non-trivial __cinit__";
+static const char __pyx_k_numpy_core_umath_failed_to_impor[] = "numpy.core.umath failed to import";
+static const char __pyx_k_unable_to_allocate_shape_and_str[] = "unable to allocate shape and strides.";
+static const char __pyx_k_matcha_utils_monotonic_align_cor_2[] = "matcha.utils.monotonic_align.core";
+/* #### Code section: decls ### */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
+static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr); /* proto */
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item); /* proto */
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /* proto */
+static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name); /* proto */
+static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object); /* proto */
+static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /* proto */
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self); /* proto */
+static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state); /* proto */
+static PyObject *__pyx_pf_6matcha_5utils_15monotonic_align_4core_maximum_path_c(CYTHON_UNUSED PyObject *__pyx_self, __Pyx_memviewslice __pyx_v_paths, __Pyx_memviewslice __pyx_v_values, __Pyx_memviewslice __pyx_v_t_xs, __Pyx_memviewslice __pyx_v_t_ys, float __pyx_v_max_neg_val); /* proto */
+static PyObject *__pyx_tp_new_array(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_Enum(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new_memoryview(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+static PyObject *__pyx_tp_new__memoryviewslice(PyTypeObject *t, PyObject *a, PyObject *k); /*proto*/
+/* #### Code section: late_includes ### */
+/* #### Code section: module_state ### */
+typedef struct {
+ PyObject *__pyx_d;
+ PyObject *__pyx_b;
+ PyObject *__pyx_cython_runtime;
+ PyObject *__pyx_empty_tuple;
+ PyObject *__pyx_empty_bytes;
+ PyObject *__pyx_empty_unicode;
+ #ifdef __Pyx_CyFunction_USED
+ PyTypeObject *__pyx_CyFunctionType;
+ #endif
+ #ifdef __Pyx_FusedFunction_USED
+ PyTypeObject *__pyx_FusedFunctionType;
+ #endif
+ #ifdef __Pyx_Generator_USED
+ PyTypeObject *__pyx_GeneratorType;
+ #endif
+ #ifdef __Pyx_IterableCoroutine_USED
+ PyTypeObject *__pyx_IterableCoroutineType;
+ #endif
+ #ifdef __Pyx_Coroutine_USED
+ PyTypeObject *__pyx_CoroutineAwaitType;
+ #endif
+ #ifdef __Pyx_Coroutine_USED
+ PyTypeObject *__pyx_CoroutineType;
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ PyTypeObject *__pyx_ptype_7cpython_4type_type;
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ #if CYTHON_USE_MODULE_STATE
+ #endif
+ PyTypeObject *__pyx_ptype_5numpy_dtype;
+ PyTypeObject *__pyx_ptype_5numpy_flatiter;
+ PyTypeObject *__pyx_ptype_5numpy_broadcast;
+ PyTypeObject *__pyx_ptype_5numpy_ndarray;
+ PyTypeObject *__pyx_ptype_5numpy_generic;
+ PyTypeObject *__pyx_ptype_5numpy_number;
+ PyTypeObject *__pyx_ptype_5numpy_integer;
+ PyTypeObject *__pyx_ptype_5numpy_signedinteger;
+ PyTypeObject *__pyx_ptype_5numpy_unsignedinteger;
+ PyTypeObject *__pyx_ptype_5numpy_inexact;
+ PyTypeObject *__pyx_ptype_5numpy_floating;
+ PyTypeObject *__pyx_ptype_5numpy_complexfloating;
+ PyTypeObject *__pyx_ptype_5numpy_flexible;
+ PyTypeObject *__pyx_ptype_5numpy_character;
+ PyTypeObject *__pyx_ptype_5numpy_ufunc;
+ #if CYTHON_USE_MODULE_STATE
+ PyObject *__pyx_type___pyx_array;
+ PyObject *__pyx_type___pyx_MemviewEnum;
+ PyObject *__pyx_type___pyx_memoryview;
+ PyObject *__pyx_type___pyx_memoryviewslice;
+ #endif
+ PyTypeObject *__pyx_array_type;
+ PyTypeObject *__pyx_MemviewEnum_type;
+ PyTypeObject *__pyx_memoryview_type;
+ PyTypeObject *__pyx_memoryviewslice_type;
+ PyObject *__pyx_kp_u_;
+ PyObject *__pyx_n_s_ASCII;
+ PyObject *__pyx_kp_s_All_dimensions_preceding_dimensi;
+ PyObject *__pyx_n_s_AssertionError;
+ PyObject *__pyx_kp_s_Buffer_view_does_not_expose_stri;
+ PyObject *__pyx_kp_s_Can_only_create_a_buffer_that_is;
+ PyObject *__pyx_kp_s_Cannot_assign_to_read_only_memor;
+ PyObject *__pyx_kp_s_Cannot_create_writable_memory_vi;
+ PyObject *__pyx_kp_u_Cannot_index_with_type;
+ PyObject *__pyx_kp_s_Cannot_transpose_memoryview_with;
+ PyObject *__pyx_kp_s_Dimension_d_is_not_direct;
+ PyObject *__pyx_n_s_Ellipsis;
+ PyObject *__pyx_kp_s_Empty_shape_tuple_for_cython_arr;
+ PyObject *__pyx_n_s_ImportError;
+ PyObject *__pyx_kp_s_Incompatible_checksums_0x_x_vs_0;
+ PyObject *__pyx_n_s_IndexError;
+ PyObject *__pyx_kp_s_Index_out_of_bounds_axis_d;
+ PyObject *__pyx_kp_s_Indirect_dimensions_not_supporte;
+ PyObject *__pyx_kp_u_Invalid_mode_expected_c_or_fortr;
+ PyObject *__pyx_kp_u_Invalid_shape_in_axis;
+ PyObject *__pyx_n_s_MemoryError;
+ PyObject *__pyx_kp_s_MemoryView_of_r_at_0x_x;
+ PyObject *__pyx_kp_s_MemoryView_of_r_object;
+ PyObject *__pyx_n_b_O;
+ PyObject *__pyx_kp_u_Out_of_bounds_on_buffer_access_a;
+ PyObject *__pyx_n_s_PickleError;
+ PyObject *__pyx_n_s_Sequence;
+ PyObject *__pyx_kp_s_Step_may_not_be_zero_axis_d;
+ PyObject *__pyx_n_s_TypeError;
+ PyObject *__pyx_kp_s_Unable_to_convert_item_to_object;
+ PyObject *__pyx_n_s_ValueError;
+ PyObject *__pyx_n_s_View_MemoryView;
+ PyObject *__pyx_kp_u__2;
+ PyObject *__pyx_n_s__25;
+ PyObject *__pyx_n_s__3;
+ PyObject *__pyx_kp_u__6;
+ PyObject *__pyx_kp_u__7;
+ PyObject *__pyx_n_s_abc;
+ PyObject *__pyx_n_s_allocate_buffer;
+ PyObject *__pyx_kp_u_and;
+ PyObject *__pyx_n_s_asyncio_coroutines;
+ PyObject *__pyx_n_s_base;
+ PyObject *__pyx_n_s_c;
+ PyObject *__pyx_n_u_c;
+ PyObject *__pyx_n_s_class;
+ PyObject *__pyx_n_s_class_getitem;
+ PyObject *__pyx_n_s_cline_in_traceback;
+ PyObject *__pyx_n_s_collections;
+ PyObject *__pyx_kp_s_collections_abc;
+ PyObject *__pyx_kp_s_contiguous_and_direct;
+ PyObject *__pyx_kp_s_contiguous_and_indirect;
+ PyObject *__pyx_n_s_count;
+ PyObject *__pyx_n_s_dict;
+ PyObject *__pyx_kp_u_disable;
+ PyObject *__pyx_n_s_dtype_is_object;
+ PyObject *__pyx_kp_u_enable;
+ PyObject *__pyx_n_s_encode;
+ PyObject *__pyx_n_s_enumerate;
+ PyObject *__pyx_n_s_error;
+ PyObject *__pyx_n_s_flags;
+ PyObject *__pyx_n_s_format;
+ PyObject *__pyx_n_s_fortran;
+ PyObject *__pyx_n_u_fortran;
+ PyObject *__pyx_kp_u_gc;
+ PyObject *__pyx_n_s_getstate;
+ PyObject *__pyx_kp_u_got;
+ PyObject *__pyx_kp_u_got_differing_extents_in_dimensi;
+ PyObject *__pyx_n_s_id;
+ PyObject *__pyx_n_s_import;
+ PyObject *__pyx_n_s_index;
+ PyObject *__pyx_n_s_initializing;
+ PyObject *__pyx_n_s_is_coroutine;
+ PyObject *__pyx_kp_u_isenabled;
+ PyObject *__pyx_n_s_itemsize;
+ PyObject *__pyx_kp_s_itemsize_0_for_cython_array;
+ PyObject *__pyx_n_s_main;
+ PyObject *__pyx_kp_s_matcha_utils_monotonic_align_cor;
+ PyObject *__pyx_n_s_matcha_utils_monotonic_align_cor_2;
+ PyObject *__pyx_n_s_max_neg_val;
+ PyObject *__pyx_n_s_maximum_path_c;
+ PyObject *__pyx_n_s_memview;
+ PyObject *__pyx_n_s_mode;
+ PyObject *__pyx_n_s_name;
+ PyObject *__pyx_n_s_name_2;
+ PyObject *__pyx_n_s_ndim;
+ PyObject *__pyx_n_s_new;
+ PyObject *__pyx_kp_s_no_default___reduce___due_to_non;
+ PyObject *__pyx_n_s_np;
+ PyObject *__pyx_n_s_numpy;
+ PyObject *__pyx_kp_u_numpy_core_multiarray_failed_to;
+ PyObject *__pyx_kp_u_numpy_core_umath_failed_to_impor;
+ PyObject *__pyx_n_s_obj;
+ PyObject *__pyx_n_s_pack;
+ PyObject *__pyx_n_s_paths;
+ PyObject *__pyx_n_s_pickle;
+ PyObject *__pyx_n_s_pyx_PickleError;
+ PyObject *__pyx_n_s_pyx_checksum;
+ PyObject *__pyx_n_s_pyx_result;
+ PyObject *__pyx_n_s_pyx_state;
+ PyObject *__pyx_n_s_pyx_type;
+ PyObject *__pyx_n_s_pyx_unpickle_Enum;
+ PyObject *__pyx_n_s_pyx_vtable;
+ PyObject *__pyx_n_s_range;
+ PyObject *__pyx_n_s_reduce;
+ PyObject *__pyx_n_s_reduce_cython;
+ PyObject *__pyx_n_s_reduce_ex;
+ PyObject *__pyx_n_s_register;
+ PyObject *__pyx_n_s_setstate;
+ PyObject *__pyx_n_s_setstate_cython;
+ PyObject *__pyx_n_s_shape;
+ PyObject *__pyx_n_s_size;
+ PyObject *__pyx_n_s_spec;
+ PyObject *__pyx_n_s_start;
+ PyObject *__pyx_n_s_step;
+ PyObject *__pyx_n_s_stop;
+ PyObject *__pyx_kp_s_strided_and_direct;
+ PyObject *__pyx_kp_s_strided_and_direct_or_indirect;
+ PyObject *__pyx_kp_s_strided_and_indirect;
+ PyObject *__pyx_kp_s_stringsource;
+ PyObject *__pyx_n_s_struct;
+ PyObject *__pyx_n_s_sys;
+ PyObject *__pyx_n_s_t_xs;
+ PyObject *__pyx_n_s_t_ys;
+ PyObject *__pyx_n_s_test;
+ PyObject *__pyx_kp_s_unable_to_allocate_array_data;
+ PyObject *__pyx_kp_s_unable_to_allocate_shape_and_str;
+ PyObject *__pyx_n_s_unpack;
+ PyObject *__pyx_n_s_update;
+ PyObject *__pyx_n_s_values;
+ PyObject *__pyx_n_s_version_info;
+ PyObject *__pyx_int_0;
+ PyObject *__pyx_int_1;
+ PyObject *__pyx_int_3;
+ PyObject *__pyx_int_112105877;
+ PyObject *__pyx_int_136983863;
+ PyObject *__pyx_int_184977713;
+ PyObject *__pyx_int_neg_1;
+ float __pyx_k__11;
+ PyObject *__pyx_slice__5;
+ PyObject *__pyx_tuple__4;
+ PyObject *__pyx_tuple__8;
+ PyObject *__pyx_tuple__9;
+ PyObject *__pyx_tuple__10;
+ PyObject *__pyx_tuple__12;
+ PyObject *__pyx_tuple__13;
+ PyObject *__pyx_tuple__14;
+ PyObject *__pyx_tuple__15;
+ PyObject *__pyx_tuple__16;
+ PyObject *__pyx_tuple__17;
+ PyObject *__pyx_tuple__18;
+ PyObject *__pyx_tuple__19;
+ PyObject *__pyx_tuple__20;
+ PyObject *__pyx_tuple__21;
+ PyObject *__pyx_tuple__23;
+ PyObject *__pyx_codeobj__22;
+ PyObject *__pyx_codeobj__24;
+} __pyx_mstate;
+
+#if CYTHON_USE_MODULE_STATE
+#ifdef __cplusplus
+namespace {
+ extern struct PyModuleDef __pyx_moduledef;
+} /* anonymous namespace */
+#else
+static struct PyModuleDef __pyx_moduledef;
+#endif
+
+#define __pyx_mstate(o) ((__pyx_mstate *)__Pyx_PyModule_GetState(o))
+
+#define __pyx_mstate_global (__pyx_mstate(PyState_FindModule(&__pyx_moduledef)))
+
+#define __pyx_m (PyState_FindModule(&__pyx_moduledef))
+#else
+static __pyx_mstate __pyx_mstate_global_static =
+#ifdef __cplusplus
+ {};
+#else
+ {0};
+#endif
+static __pyx_mstate *__pyx_mstate_global = &__pyx_mstate_global_static;
+#endif
+/* #### Code section: module_state_clear ### */
+#if CYTHON_USE_MODULE_STATE
+static int __pyx_m_clear(PyObject *m) {
+ __pyx_mstate *clear_module_state = __pyx_mstate(m);
+ if (!clear_module_state) return 0;
+ Py_CLEAR(clear_module_state->__pyx_d);
+ Py_CLEAR(clear_module_state->__pyx_b);
+ Py_CLEAR(clear_module_state->__pyx_cython_runtime);
+ Py_CLEAR(clear_module_state->__pyx_empty_tuple);
+ Py_CLEAR(clear_module_state->__pyx_empty_bytes);
+ Py_CLEAR(clear_module_state->__pyx_empty_unicode);
+ #ifdef __Pyx_CyFunction_USED
+ Py_CLEAR(clear_module_state->__pyx_CyFunctionType);
+ #endif
+ #ifdef __Pyx_FusedFunction_USED
+ Py_CLEAR(clear_module_state->__pyx_FusedFunctionType);
+ #endif
+ Py_CLEAR(clear_module_state->__pyx_ptype_7cpython_4type_type);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_dtype);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flatiter);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_broadcast);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ndarray);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_generic);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_number);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_integer);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_signedinteger);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_unsignedinteger);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_inexact);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_floating);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_complexfloating);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_flexible);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_character);
+ Py_CLEAR(clear_module_state->__pyx_ptype_5numpy_ufunc);
+ Py_CLEAR(clear_module_state->__pyx_array_type);
+ Py_CLEAR(clear_module_state->__pyx_type___pyx_array);
+ Py_CLEAR(clear_module_state->__pyx_MemviewEnum_type);
+ Py_CLEAR(clear_module_state->__pyx_type___pyx_MemviewEnum);
+ Py_CLEAR(clear_module_state->__pyx_memoryview_type);
+ Py_CLEAR(clear_module_state->__pyx_type___pyx_memoryview);
+ Py_CLEAR(clear_module_state->__pyx_memoryviewslice_type);
+ Py_CLEAR(clear_module_state->__pyx_type___pyx_memoryviewslice);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_);
+ Py_CLEAR(clear_module_state->__pyx_n_s_ASCII);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi);
+ Py_CLEAR(clear_module_state->__pyx_n_s_AssertionError);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_Cannot_index_with_type);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Dimension_d_is_not_direct);
+ Py_CLEAR(clear_module_state->__pyx_n_s_Ellipsis);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr);
+ Py_CLEAR(clear_module_state->__pyx_n_s_ImportError);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0);
+ Py_CLEAR(clear_module_state->__pyx_n_s_IndexError);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_Invalid_shape_in_axis);
+ Py_CLEAR(clear_module_state->__pyx_n_s_MemoryError);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_MemoryView_of_r_object);
+ Py_CLEAR(clear_module_state->__pyx_n_b_O);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ Py_CLEAR(clear_module_state->__pyx_n_s_PickleError);
+ Py_CLEAR(clear_module_state->__pyx_n_s_Sequence);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d);
+ Py_CLEAR(clear_module_state->__pyx_n_s_TypeError);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_Unable_to_convert_item_to_object);
+ Py_CLEAR(clear_module_state->__pyx_n_s_ValueError);
+ Py_CLEAR(clear_module_state->__pyx_n_s_View_MemoryView);
+ Py_CLEAR(clear_module_state->__pyx_kp_u__2);
+ Py_CLEAR(clear_module_state->__pyx_n_s__25);
+ Py_CLEAR(clear_module_state->__pyx_n_s__3);
+ Py_CLEAR(clear_module_state->__pyx_kp_u__6);
+ Py_CLEAR(clear_module_state->__pyx_kp_u__7);
+ Py_CLEAR(clear_module_state->__pyx_n_s_abc);
+ Py_CLEAR(clear_module_state->__pyx_n_s_allocate_buffer);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_and);
+ Py_CLEAR(clear_module_state->__pyx_n_s_asyncio_coroutines);
+ Py_CLEAR(clear_module_state->__pyx_n_s_base);
+ Py_CLEAR(clear_module_state->__pyx_n_s_c);
+ Py_CLEAR(clear_module_state->__pyx_n_u_c);
+ Py_CLEAR(clear_module_state->__pyx_n_s_class);
+ Py_CLEAR(clear_module_state->__pyx_n_s_class_getitem);
+ Py_CLEAR(clear_module_state->__pyx_n_s_cline_in_traceback);
+ Py_CLEAR(clear_module_state->__pyx_n_s_collections);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_collections_abc);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_direct);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_contiguous_and_indirect);
+ Py_CLEAR(clear_module_state->__pyx_n_s_count);
+ Py_CLEAR(clear_module_state->__pyx_n_s_dict);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_disable);
+ Py_CLEAR(clear_module_state->__pyx_n_s_dtype_is_object);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_enable);
+ Py_CLEAR(clear_module_state->__pyx_n_s_encode);
+ Py_CLEAR(clear_module_state->__pyx_n_s_enumerate);
+ Py_CLEAR(clear_module_state->__pyx_n_s_error);
+ Py_CLEAR(clear_module_state->__pyx_n_s_flags);
+ Py_CLEAR(clear_module_state->__pyx_n_s_format);
+ Py_CLEAR(clear_module_state->__pyx_n_s_fortran);
+ Py_CLEAR(clear_module_state->__pyx_n_u_fortran);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_gc);
+ Py_CLEAR(clear_module_state->__pyx_n_s_getstate);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_got);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_got_differing_extents_in_dimensi);
+ Py_CLEAR(clear_module_state->__pyx_n_s_id);
+ Py_CLEAR(clear_module_state->__pyx_n_s_import);
+ Py_CLEAR(clear_module_state->__pyx_n_s_index);
+ Py_CLEAR(clear_module_state->__pyx_n_s_initializing);
+ Py_CLEAR(clear_module_state->__pyx_n_s_is_coroutine);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_isenabled);
+ Py_CLEAR(clear_module_state->__pyx_n_s_itemsize);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_itemsize_0_for_cython_array);
+ Py_CLEAR(clear_module_state->__pyx_n_s_main);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_matcha_utils_monotonic_align_cor);
+ Py_CLEAR(clear_module_state->__pyx_n_s_matcha_utils_monotonic_align_cor_2);
+ Py_CLEAR(clear_module_state->__pyx_n_s_max_neg_val);
+ Py_CLEAR(clear_module_state->__pyx_n_s_maximum_path_c);
+ Py_CLEAR(clear_module_state->__pyx_n_s_memview);
+ Py_CLEAR(clear_module_state->__pyx_n_s_mode);
+ Py_CLEAR(clear_module_state->__pyx_n_s_name);
+ Py_CLEAR(clear_module_state->__pyx_n_s_name_2);
+ Py_CLEAR(clear_module_state->__pyx_n_s_ndim);
+ Py_CLEAR(clear_module_state->__pyx_n_s_new);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_no_default___reduce___due_to_non);
+ Py_CLEAR(clear_module_state->__pyx_n_s_np);
+ Py_CLEAR(clear_module_state->__pyx_n_s_numpy);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to);
+ Py_CLEAR(clear_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor);
+ Py_CLEAR(clear_module_state->__pyx_n_s_obj);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pack);
+ Py_CLEAR(clear_module_state->__pyx_n_s_paths);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pickle);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pyx_PickleError);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pyx_checksum);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pyx_result);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pyx_state);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pyx_type);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pyx_unpickle_Enum);
+ Py_CLEAR(clear_module_state->__pyx_n_s_pyx_vtable);
+ Py_CLEAR(clear_module_state->__pyx_n_s_range);
+ Py_CLEAR(clear_module_state->__pyx_n_s_reduce);
+ Py_CLEAR(clear_module_state->__pyx_n_s_reduce_cython);
+ Py_CLEAR(clear_module_state->__pyx_n_s_reduce_ex);
+ Py_CLEAR(clear_module_state->__pyx_n_s_register);
+ Py_CLEAR(clear_module_state->__pyx_n_s_setstate);
+ Py_CLEAR(clear_module_state->__pyx_n_s_setstate_cython);
+ Py_CLEAR(clear_module_state->__pyx_n_s_shape);
+ Py_CLEAR(clear_module_state->__pyx_n_s_size);
+ Py_CLEAR(clear_module_state->__pyx_n_s_spec);
+ Py_CLEAR(clear_module_state->__pyx_n_s_start);
+ Py_CLEAR(clear_module_state->__pyx_n_s_step);
+ Py_CLEAR(clear_module_state->__pyx_n_s_stop);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_direct);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_direct_or_indirect);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_strided_and_indirect);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_stringsource);
+ Py_CLEAR(clear_module_state->__pyx_n_s_struct);
+ Py_CLEAR(clear_module_state->__pyx_n_s_sys);
+ Py_CLEAR(clear_module_state->__pyx_n_s_t_xs);
+ Py_CLEAR(clear_module_state->__pyx_n_s_t_ys);
+ Py_CLEAR(clear_module_state->__pyx_n_s_test);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_array_data);
+ Py_CLEAR(clear_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str);
+ Py_CLEAR(clear_module_state->__pyx_n_s_unpack);
+ Py_CLEAR(clear_module_state->__pyx_n_s_update);
+ Py_CLEAR(clear_module_state->__pyx_n_s_values);
+ Py_CLEAR(clear_module_state->__pyx_n_s_version_info);
+ Py_CLEAR(clear_module_state->__pyx_int_0);
+ Py_CLEAR(clear_module_state->__pyx_int_1);
+ Py_CLEAR(clear_module_state->__pyx_int_3);
+ Py_CLEAR(clear_module_state->__pyx_int_112105877);
+ Py_CLEAR(clear_module_state->__pyx_int_136983863);
+ Py_CLEAR(clear_module_state->__pyx_int_184977713);
+ Py_CLEAR(clear_module_state->__pyx_int_neg_1);
+ Py_CLEAR(clear_module_state->__pyx_slice__5);
+ Py_CLEAR(clear_module_state->__pyx_tuple__4);
+ Py_CLEAR(clear_module_state->__pyx_tuple__8);
+ Py_CLEAR(clear_module_state->__pyx_tuple__9);
+ Py_CLEAR(clear_module_state->__pyx_tuple__10);
+ Py_CLEAR(clear_module_state->__pyx_tuple__12);
+ Py_CLEAR(clear_module_state->__pyx_tuple__13);
+ Py_CLEAR(clear_module_state->__pyx_tuple__14);
+ Py_CLEAR(clear_module_state->__pyx_tuple__15);
+ Py_CLEAR(clear_module_state->__pyx_tuple__16);
+ Py_CLEAR(clear_module_state->__pyx_tuple__17);
+ Py_CLEAR(clear_module_state->__pyx_tuple__18);
+ Py_CLEAR(clear_module_state->__pyx_tuple__19);
+ Py_CLEAR(clear_module_state->__pyx_tuple__20);
+ Py_CLEAR(clear_module_state->__pyx_tuple__21);
+ Py_CLEAR(clear_module_state->__pyx_tuple__23);
+ Py_CLEAR(clear_module_state->__pyx_codeobj__22);
+ Py_CLEAR(clear_module_state->__pyx_codeobj__24);
+ return 0;
+}
+#endif
+/* #### Code section: module_state_traverse ### */
+#if CYTHON_USE_MODULE_STATE
+static int __pyx_m_traverse(PyObject *m, visitproc visit, void *arg) {
+ __pyx_mstate *traverse_module_state = __pyx_mstate(m);
+ if (!traverse_module_state) return 0;
+ Py_VISIT(traverse_module_state->__pyx_d);
+ Py_VISIT(traverse_module_state->__pyx_b);
+ Py_VISIT(traverse_module_state->__pyx_cython_runtime);
+ Py_VISIT(traverse_module_state->__pyx_empty_tuple);
+ Py_VISIT(traverse_module_state->__pyx_empty_bytes);
+ Py_VISIT(traverse_module_state->__pyx_empty_unicode);
+ #ifdef __Pyx_CyFunction_USED
+ Py_VISIT(traverse_module_state->__pyx_CyFunctionType);
+ #endif
+ #ifdef __Pyx_FusedFunction_USED
+ Py_VISIT(traverse_module_state->__pyx_FusedFunctionType);
+ #endif
+ Py_VISIT(traverse_module_state->__pyx_ptype_7cpython_4type_type);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_dtype);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flatiter);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_broadcast);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ndarray);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_generic);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_number);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_integer);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_signedinteger);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_unsignedinteger);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_inexact);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_floating);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_complexfloating);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_flexible);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_character);
+ Py_VISIT(traverse_module_state->__pyx_ptype_5numpy_ufunc);
+ Py_VISIT(traverse_module_state->__pyx_array_type);
+ Py_VISIT(traverse_module_state->__pyx_type___pyx_array);
+ Py_VISIT(traverse_module_state->__pyx_MemviewEnum_type);
+ Py_VISIT(traverse_module_state->__pyx_type___pyx_MemviewEnum);
+ Py_VISIT(traverse_module_state->__pyx_memoryview_type);
+ Py_VISIT(traverse_module_state->__pyx_type___pyx_memoryview);
+ Py_VISIT(traverse_module_state->__pyx_memoryviewslice_type);
+ Py_VISIT(traverse_module_state->__pyx_type___pyx_memoryviewslice);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_);
+ Py_VISIT(traverse_module_state->__pyx_n_s_ASCII);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_All_dimensions_preceding_dimensi);
+ Py_VISIT(traverse_module_state->__pyx_n_s_AssertionError);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Buffer_view_does_not_expose_stri);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Can_only_create_a_buffer_that_is);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_assign_to_read_only_memor);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_create_writable_memory_vi);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_Cannot_index_with_type);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Cannot_transpose_memoryview_with);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Dimension_d_is_not_direct);
+ Py_VISIT(traverse_module_state->__pyx_n_s_Ellipsis);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Empty_shape_tuple_for_cython_arr);
+ Py_VISIT(traverse_module_state->__pyx_n_s_ImportError);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0);
+ Py_VISIT(traverse_module_state->__pyx_n_s_IndexError);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Index_out_of_bounds_axis_d);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Indirect_dimensions_not_supporte);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_mode_expected_c_or_fortr);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_Invalid_shape_in_axis);
+ Py_VISIT(traverse_module_state->__pyx_n_s_MemoryError);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_at_0x_x);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_MemoryView_of_r_object);
+ Py_VISIT(traverse_module_state->__pyx_n_b_O);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ Py_VISIT(traverse_module_state->__pyx_n_s_PickleError);
+ Py_VISIT(traverse_module_state->__pyx_n_s_Sequence);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Step_may_not_be_zero_axis_d);
+ Py_VISIT(traverse_module_state->__pyx_n_s_TypeError);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_Unable_to_convert_item_to_object);
+ Py_VISIT(traverse_module_state->__pyx_n_s_ValueError);
+ Py_VISIT(traverse_module_state->__pyx_n_s_View_MemoryView);
+ Py_VISIT(traverse_module_state->__pyx_kp_u__2);
+ Py_VISIT(traverse_module_state->__pyx_n_s__25);
+ Py_VISIT(traverse_module_state->__pyx_n_s__3);
+ Py_VISIT(traverse_module_state->__pyx_kp_u__6);
+ Py_VISIT(traverse_module_state->__pyx_kp_u__7);
+ Py_VISIT(traverse_module_state->__pyx_n_s_abc);
+ Py_VISIT(traverse_module_state->__pyx_n_s_allocate_buffer);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_and);
+ Py_VISIT(traverse_module_state->__pyx_n_s_asyncio_coroutines);
+ Py_VISIT(traverse_module_state->__pyx_n_s_base);
+ Py_VISIT(traverse_module_state->__pyx_n_s_c);
+ Py_VISIT(traverse_module_state->__pyx_n_u_c);
+ Py_VISIT(traverse_module_state->__pyx_n_s_class);
+ Py_VISIT(traverse_module_state->__pyx_n_s_class_getitem);
+ Py_VISIT(traverse_module_state->__pyx_n_s_cline_in_traceback);
+ Py_VISIT(traverse_module_state->__pyx_n_s_collections);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_collections_abc);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_direct);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_contiguous_and_indirect);
+ Py_VISIT(traverse_module_state->__pyx_n_s_count);
+ Py_VISIT(traverse_module_state->__pyx_n_s_dict);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_disable);
+ Py_VISIT(traverse_module_state->__pyx_n_s_dtype_is_object);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_enable);
+ Py_VISIT(traverse_module_state->__pyx_n_s_encode);
+ Py_VISIT(traverse_module_state->__pyx_n_s_enumerate);
+ Py_VISIT(traverse_module_state->__pyx_n_s_error);
+ Py_VISIT(traverse_module_state->__pyx_n_s_flags);
+ Py_VISIT(traverse_module_state->__pyx_n_s_format);
+ Py_VISIT(traverse_module_state->__pyx_n_s_fortran);
+ Py_VISIT(traverse_module_state->__pyx_n_u_fortran);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_gc);
+ Py_VISIT(traverse_module_state->__pyx_n_s_getstate);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_got);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_got_differing_extents_in_dimensi);
+ Py_VISIT(traverse_module_state->__pyx_n_s_id);
+ Py_VISIT(traverse_module_state->__pyx_n_s_import);
+ Py_VISIT(traverse_module_state->__pyx_n_s_index);
+ Py_VISIT(traverse_module_state->__pyx_n_s_initializing);
+ Py_VISIT(traverse_module_state->__pyx_n_s_is_coroutine);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_isenabled);
+ Py_VISIT(traverse_module_state->__pyx_n_s_itemsize);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_itemsize_0_for_cython_array);
+ Py_VISIT(traverse_module_state->__pyx_n_s_main);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_matcha_utils_monotonic_align_cor);
+ Py_VISIT(traverse_module_state->__pyx_n_s_matcha_utils_monotonic_align_cor_2);
+ Py_VISIT(traverse_module_state->__pyx_n_s_max_neg_val);
+ Py_VISIT(traverse_module_state->__pyx_n_s_maximum_path_c);
+ Py_VISIT(traverse_module_state->__pyx_n_s_memview);
+ Py_VISIT(traverse_module_state->__pyx_n_s_mode);
+ Py_VISIT(traverse_module_state->__pyx_n_s_name);
+ Py_VISIT(traverse_module_state->__pyx_n_s_name_2);
+ Py_VISIT(traverse_module_state->__pyx_n_s_ndim);
+ Py_VISIT(traverse_module_state->__pyx_n_s_new);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_no_default___reduce___due_to_non);
+ Py_VISIT(traverse_module_state->__pyx_n_s_np);
+ Py_VISIT(traverse_module_state->__pyx_n_s_numpy);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_multiarray_failed_to);
+ Py_VISIT(traverse_module_state->__pyx_kp_u_numpy_core_umath_failed_to_impor);
+ Py_VISIT(traverse_module_state->__pyx_n_s_obj);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pack);
+ Py_VISIT(traverse_module_state->__pyx_n_s_paths);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pickle);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pyx_PickleError);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pyx_checksum);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pyx_result);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pyx_state);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pyx_type);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pyx_unpickle_Enum);
+ Py_VISIT(traverse_module_state->__pyx_n_s_pyx_vtable);
+ Py_VISIT(traverse_module_state->__pyx_n_s_range);
+ Py_VISIT(traverse_module_state->__pyx_n_s_reduce);
+ Py_VISIT(traverse_module_state->__pyx_n_s_reduce_cython);
+ Py_VISIT(traverse_module_state->__pyx_n_s_reduce_ex);
+ Py_VISIT(traverse_module_state->__pyx_n_s_register);
+ Py_VISIT(traverse_module_state->__pyx_n_s_setstate);
+ Py_VISIT(traverse_module_state->__pyx_n_s_setstate_cython);
+ Py_VISIT(traverse_module_state->__pyx_n_s_shape);
+ Py_VISIT(traverse_module_state->__pyx_n_s_size);
+ Py_VISIT(traverse_module_state->__pyx_n_s_spec);
+ Py_VISIT(traverse_module_state->__pyx_n_s_start);
+ Py_VISIT(traverse_module_state->__pyx_n_s_step);
+ Py_VISIT(traverse_module_state->__pyx_n_s_stop);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_direct);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_direct_or_indirect);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_strided_and_indirect);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_stringsource);
+ Py_VISIT(traverse_module_state->__pyx_n_s_struct);
+ Py_VISIT(traverse_module_state->__pyx_n_s_sys);
+ Py_VISIT(traverse_module_state->__pyx_n_s_t_xs);
+ Py_VISIT(traverse_module_state->__pyx_n_s_t_ys);
+ Py_VISIT(traverse_module_state->__pyx_n_s_test);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_array_data);
+ Py_VISIT(traverse_module_state->__pyx_kp_s_unable_to_allocate_shape_and_str);
+ Py_VISIT(traverse_module_state->__pyx_n_s_unpack);
+ Py_VISIT(traverse_module_state->__pyx_n_s_update);
+ Py_VISIT(traverse_module_state->__pyx_n_s_values);
+ Py_VISIT(traverse_module_state->__pyx_n_s_version_info);
+ Py_VISIT(traverse_module_state->__pyx_int_0);
+ Py_VISIT(traverse_module_state->__pyx_int_1);
+ Py_VISIT(traverse_module_state->__pyx_int_3);
+ Py_VISIT(traverse_module_state->__pyx_int_112105877);
+ Py_VISIT(traverse_module_state->__pyx_int_136983863);
+ Py_VISIT(traverse_module_state->__pyx_int_184977713);
+ Py_VISIT(traverse_module_state->__pyx_int_neg_1);
+ Py_VISIT(traverse_module_state->__pyx_slice__5);
+ Py_VISIT(traverse_module_state->__pyx_tuple__4);
+ Py_VISIT(traverse_module_state->__pyx_tuple__8);
+ Py_VISIT(traverse_module_state->__pyx_tuple__9);
+ Py_VISIT(traverse_module_state->__pyx_tuple__10);
+ Py_VISIT(traverse_module_state->__pyx_tuple__12);
+ Py_VISIT(traverse_module_state->__pyx_tuple__13);
+ Py_VISIT(traverse_module_state->__pyx_tuple__14);
+ Py_VISIT(traverse_module_state->__pyx_tuple__15);
+ Py_VISIT(traverse_module_state->__pyx_tuple__16);
+ Py_VISIT(traverse_module_state->__pyx_tuple__17);
+ Py_VISIT(traverse_module_state->__pyx_tuple__18);
+ Py_VISIT(traverse_module_state->__pyx_tuple__19);
+ Py_VISIT(traverse_module_state->__pyx_tuple__20);
+ Py_VISIT(traverse_module_state->__pyx_tuple__21);
+ Py_VISIT(traverse_module_state->__pyx_tuple__23);
+ Py_VISIT(traverse_module_state->__pyx_codeobj__22);
+ Py_VISIT(traverse_module_state->__pyx_codeobj__24);
+ return 0;
+}
+#endif
+/* #### Code section: module_state_defines ### */
+#define __pyx_d __pyx_mstate_global->__pyx_d
+#define __pyx_b __pyx_mstate_global->__pyx_b
+#define __pyx_cython_runtime __pyx_mstate_global->__pyx_cython_runtime
+#define __pyx_empty_tuple __pyx_mstate_global->__pyx_empty_tuple
+#define __pyx_empty_bytes __pyx_mstate_global->__pyx_empty_bytes
+#define __pyx_empty_unicode __pyx_mstate_global->__pyx_empty_unicode
+#ifdef __Pyx_CyFunction_USED
+#define __pyx_CyFunctionType __pyx_mstate_global->__pyx_CyFunctionType
+#endif
+#ifdef __Pyx_FusedFunction_USED
+#define __pyx_FusedFunctionType __pyx_mstate_global->__pyx_FusedFunctionType
+#endif
+#ifdef __Pyx_Generator_USED
+#define __pyx_GeneratorType __pyx_mstate_global->__pyx_GeneratorType
+#endif
+#ifdef __Pyx_IterableCoroutine_USED
+#define __pyx_IterableCoroutineType __pyx_mstate_global->__pyx_IterableCoroutineType
+#endif
+#ifdef __Pyx_Coroutine_USED
+#define __pyx_CoroutineAwaitType __pyx_mstate_global->__pyx_CoroutineAwaitType
+#endif
+#ifdef __Pyx_Coroutine_USED
+#define __pyx_CoroutineType __pyx_mstate_global->__pyx_CoroutineType
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#define __pyx_ptype_7cpython_4type_type __pyx_mstate_global->__pyx_ptype_7cpython_4type_type
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#if CYTHON_USE_MODULE_STATE
+#endif
+#define __pyx_ptype_5numpy_dtype __pyx_mstate_global->__pyx_ptype_5numpy_dtype
+#define __pyx_ptype_5numpy_flatiter __pyx_mstate_global->__pyx_ptype_5numpy_flatiter
+#define __pyx_ptype_5numpy_broadcast __pyx_mstate_global->__pyx_ptype_5numpy_broadcast
+#define __pyx_ptype_5numpy_ndarray __pyx_mstate_global->__pyx_ptype_5numpy_ndarray
+#define __pyx_ptype_5numpy_generic __pyx_mstate_global->__pyx_ptype_5numpy_generic
+#define __pyx_ptype_5numpy_number __pyx_mstate_global->__pyx_ptype_5numpy_number
+#define __pyx_ptype_5numpy_integer __pyx_mstate_global->__pyx_ptype_5numpy_integer
+#define __pyx_ptype_5numpy_signedinteger __pyx_mstate_global->__pyx_ptype_5numpy_signedinteger
+#define __pyx_ptype_5numpy_unsignedinteger __pyx_mstate_global->__pyx_ptype_5numpy_unsignedinteger
+#define __pyx_ptype_5numpy_inexact __pyx_mstate_global->__pyx_ptype_5numpy_inexact
+#define __pyx_ptype_5numpy_floating __pyx_mstate_global->__pyx_ptype_5numpy_floating
+#define __pyx_ptype_5numpy_complexfloating __pyx_mstate_global->__pyx_ptype_5numpy_complexfloating
+#define __pyx_ptype_5numpy_flexible __pyx_mstate_global->__pyx_ptype_5numpy_flexible
+#define __pyx_ptype_5numpy_character __pyx_mstate_global->__pyx_ptype_5numpy_character
+#define __pyx_ptype_5numpy_ufunc __pyx_mstate_global->__pyx_ptype_5numpy_ufunc
+#if CYTHON_USE_MODULE_STATE
+#define __pyx_type___pyx_array __pyx_mstate_global->__pyx_type___pyx_array
+#define __pyx_type___pyx_MemviewEnum __pyx_mstate_global->__pyx_type___pyx_MemviewEnum
+#define __pyx_type___pyx_memoryview __pyx_mstate_global->__pyx_type___pyx_memoryview
+#define __pyx_type___pyx_memoryviewslice __pyx_mstate_global->__pyx_type___pyx_memoryviewslice
+#endif
+#define __pyx_array_type __pyx_mstate_global->__pyx_array_type
+#define __pyx_MemviewEnum_type __pyx_mstate_global->__pyx_MemviewEnum_type
+#define __pyx_memoryview_type __pyx_mstate_global->__pyx_memoryview_type
+#define __pyx_memoryviewslice_type __pyx_mstate_global->__pyx_memoryviewslice_type
+#define __pyx_kp_u_ __pyx_mstate_global->__pyx_kp_u_
+#define __pyx_n_s_ASCII __pyx_mstate_global->__pyx_n_s_ASCII
+#define __pyx_kp_s_All_dimensions_preceding_dimensi __pyx_mstate_global->__pyx_kp_s_All_dimensions_preceding_dimensi
+#define __pyx_n_s_AssertionError __pyx_mstate_global->__pyx_n_s_AssertionError
+#define __pyx_kp_s_Buffer_view_does_not_expose_stri __pyx_mstate_global->__pyx_kp_s_Buffer_view_does_not_expose_stri
+#define __pyx_kp_s_Can_only_create_a_buffer_that_is __pyx_mstate_global->__pyx_kp_s_Can_only_create_a_buffer_that_is
+#define __pyx_kp_s_Cannot_assign_to_read_only_memor __pyx_mstate_global->__pyx_kp_s_Cannot_assign_to_read_only_memor
+#define __pyx_kp_s_Cannot_create_writable_memory_vi __pyx_mstate_global->__pyx_kp_s_Cannot_create_writable_memory_vi
+#define __pyx_kp_u_Cannot_index_with_type __pyx_mstate_global->__pyx_kp_u_Cannot_index_with_type
+#define __pyx_kp_s_Cannot_transpose_memoryview_with __pyx_mstate_global->__pyx_kp_s_Cannot_transpose_memoryview_with
+#define __pyx_kp_s_Dimension_d_is_not_direct __pyx_mstate_global->__pyx_kp_s_Dimension_d_is_not_direct
+#define __pyx_n_s_Ellipsis __pyx_mstate_global->__pyx_n_s_Ellipsis
+#define __pyx_kp_s_Empty_shape_tuple_for_cython_arr __pyx_mstate_global->__pyx_kp_s_Empty_shape_tuple_for_cython_arr
+#define __pyx_n_s_ImportError __pyx_mstate_global->__pyx_n_s_ImportError
+#define __pyx_kp_s_Incompatible_checksums_0x_x_vs_0 __pyx_mstate_global->__pyx_kp_s_Incompatible_checksums_0x_x_vs_0
+#define __pyx_n_s_IndexError __pyx_mstate_global->__pyx_n_s_IndexError
+#define __pyx_kp_s_Index_out_of_bounds_axis_d __pyx_mstate_global->__pyx_kp_s_Index_out_of_bounds_axis_d
+#define __pyx_kp_s_Indirect_dimensions_not_supporte __pyx_mstate_global->__pyx_kp_s_Indirect_dimensions_not_supporte
+#define __pyx_kp_u_Invalid_mode_expected_c_or_fortr __pyx_mstate_global->__pyx_kp_u_Invalid_mode_expected_c_or_fortr
+#define __pyx_kp_u_Invalid_shape_in_axis __pyx_mstate_global->__pyx_kp_u_Invalid_shape_in_axis
+#define __pyx_n_s_MemoryError __pyx_mstate_global->__pyx_n_s_MemoryError
+#define __pyx_kp_s_MemoryView_of_r_at_0x_x __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_at_0x_x
+#define __pyx_kp_s_MemoryView_of_r_object __pyx_mstate_global->__pyx_kp_s_MemoryView_of_r_object
+#define __pyx_n_b_O __pyx_mstate_global->__pyx_n_b_O
+#define __pyx_kp_u_Out_of_bounds_on_buffer_access_a __pyx_mstate_global->__pyx_kp_u_Out_of_bounds_on_buffer_access_a
+#define __pyx_n_s_PickleError __pyx_mstate_global->__pyx_n_s_PickleError
+#define __pyx_n_s_Sequence __pyx_mstate_global->__pyx_n_s_Sequence
+#define __pyx_kp_s_Step_may_not_be_zero_axis_d __pyx_mstate_global->__pyx_kp_s_Step_may_not_be_zero_axis_d
+#define __pyx_n_s_TypeError __pyx_mstate_global->__pyx_n_s_TypeError
+#define __pyx_kp_s_Unable_to_convert_item_to_object __pyx_mstate_global->__pyx_kp_s_Unable_to_convert_item_to_object
+#define __pyx_n_s_ValueError __pyx_mstate_global->__pyx_n_s_ValueError
+#define __pyx_n_s_View_MemoryView __pyx_mstate_global->__pyx_n_s_View_MemoryView
+#define __pyx_kp_u__2 __pyx_mstate_global->__pyx_kp_u__2
+#define __pyx_n_s__25 __pyx_mstate_global->__pyx_n_s__25
+#define __pyx_n_s__3 __pyx_mstate_global->__pyx_n_s__3
+#define __pyx_kp_u__6 __pyx_mstate_global->__pyx_kp_u__6
+#define __pyx_kp_u__7 __pyx_mstate_global->__pyx_kp_u__7
+#define __pyx_n_s_abc __pyx_mstate_global->__pyx_n_s_abc
+#define __pyx_n_s_allocate_buffer __pyx_mstate_global->__pyx_n_s_allocate_buffer
+#define __pyx_kp_u_and __pyx_mstate_global->__pyx_kp_u_and
+#define __pyx_n_s_asyncio_coroutines __pyx_mstate_global->__pyx_n_s_asyncio_coroutines
+#define __pyx_n_s_base __pyx_mstate_global->__pyx_n_s_base
+#define __pyx_n_s_c __pyx_mstate_global->__pyx_n_s_c
+#define __pyx_n_u_c __pyx_mstate_global->__pyx_n_u_c
+#define __pyx_n_s_class __pyx_mstate_global->__pyx_n_s_class
+#define __pyx_n_s_class_getitem __pyx_mstate_global->__pyx_n_s_class_getitem
+#define __pyx_n_s_cline_in_traceback __pyx_mstate_global->__pyx_n_s_cline_in_traceback
+#define __pyx_n_s_collections __pyx_mstate_global->__pyx_n_s_collections
+#define __pyx_kp_s_collections_abc __pyx_mstate_global->__pyx_kp_s_collections_abc
+#define __pyx_kp_s_contiguous_and_direct __pyx_mstate_global->__pyx_kp_s_contiguous_and_direct
+#define __pyx_kp_s_contiguous_and_indirect __pyx_mstate_global->__pyx_kp_s_contiguous_and_indirect
+#define __pyx_n_s_count __pyx_mstate_global->__pyx_n_s_count
+#define __pyx_n_s_dict __pyx_mstate_global->__pyx_n_s_dict
+#define __pyx_kp_u_disable __pyx_mstate_global->__pyx_kp_u_disable
+#define __pyx_n_s_dtype_is_object __pyx_mstate_global->__pyx_n_s_dtype_is_object
+#define __pyx_kp_u_enable __pyx_mstate_global->__pyx_kp_u_enable
+#define __pyx_n_s_encode __pyx_mstate_global->__pyx_n_s_encode
+#define __pyx_n_s_enumerate __pyx_mstate_global->__pyx_n_s_enumerate
+#define __pyx_n_s_error __pyx_mstate_global->__pyx_n_s_error
+#define __pyx_n_s_flags __pyx_mstate_global->__pyx_n_s_flags
+#define __pyx_n_s_format __pyx_mstate_global->__pyx_n_s_format
+#define __pyx_n_s_fortran __pyx_mstate_global->__pyx_n_s_fortran
+#define __pyx_n_u_fortran __pyx_mstate_global->__pyx_n_u_fortran
+#define __pyx_kp_u_gc __pyx_mstate_global->__pyx_kp_u_gc
+#define __pyx_n_s_getstate __pyx_mstate_global->__pyx_n_s_getstate
+#define __pyx_kp_u_got __pyx_mstate_global->__pyx_kp_u_got
+#define __pyx_kp_u_got_differing_extents_in_dimensi __pyx_mstate_global->__pyx_kp_u_got_differing_extents_in_dimensi
+#define __pyx_n_s_id __pyx_mstate_global->__pyx_n_s_id
+#define __pyx_n_s_import __pyx_mstate_global->__pyx_n_s_import
+#define __pyx_n_s_index __pyx_mstate_global->__pyx_n_s_index
+#define __pyx_n_s_initializing __pyx_mstate_global->__pyx_n_s_initializing
+#define __pyx_n_s_is_coroutine __pyx_mstate_global->__pyx_n_s_is_coroutine
+#define __pyx_kp_u_isenabled __pyx_mstate_global->__pyx_kp_u_isenabled
+#define __pyx_n_s_itemsize __pyx_mstate_global->__pyx_n_s_itemsize
+#define __pyx_kp_s_itemsize_0_for_cython_array __pyx_mstate_global->__pyx_kp_s_itemsize_0_for_cython_array
+#define __pyx_n_s_main __pyx_mstate_global->__pyx_n_s_main
+#define __pyx_kp_s_matcha_utils_monotonic_align_cor __pyx_mstate_global->__pyx_kp_s_matcha_utils_monotonic_align_cor
+#define __pyx_n_s_matcha_utils_monotonic_align_cor_2 __pyx_mstate_global->__pyx_n_s_matcha_utils_monotonic_align_cor_2
+#define __pyx_n_s_max_neg_val __pyx_mstate_global->__pyx_n_s_max_neg_val
+#define __pyx_n_s_maximum_path_c __pyx_mstate_global->__pyx_n_s_maximum_path_c
+#define __pyx_n_s_memview __pyx_mstate_global->__pyx_n_s_memview
+#define __pyx_n_s_mode __pyx_mstate_global->__pyx_n_s_mode
+#define __pyx_n_s_name __pyx_mstate_global->__pyx_n_s_name
+#define __pyx_n_s_name_2 __pyx_mstate_global->__pyx_n_s_name_2
+#define __pyx_n_s_ndim __pyx_mstate_global->__pyx_n_s_ndim
+#define __pyx_n_s_new __pyx_mstate_global->__pyx_n_s_new
+#define __pyx_kp_s_no_default___reduce___due_to_non __pyx_mstate_global->__pyx_kp_s_no_default___reduce___due_to_non
+#define __pyx_n_s_np __pyx_mstate_global->__pyx_n_s_np
+#define __pyx_n_s_numpy __pyx_mstate_global->__pyx_n_s_numpy
+#define __pyx_kp_u_numpy_core_multiarray_failed_to __pyx_mstate_global->__pyx_kp_u_numpy_core_multiarray_failed_to
+#define __pyx_kp_u_numpy_core_umath_failed_to_impor __pyx_mstate_global->__pyx_kp_u_numpy_core_umath_failed_to_impor
+#define __pyx_n_s_obj __pyx_mstate_global->__pyx_n_s_obj
+#define __pyx_n_s_pack __pyx_mstate_global->__pyx_n_s_pack
+#define __pyx_n_s_paths __pyx_mstate_global->__pyx_n_s_paths
+#define __pyx_n_s_pickle __pyx_mstate_global->__pyx_n_s_pickle
+#define __pyx_n_s_pyx_PickleError __pyx_mstate_global->__pyx_n_s_pyx_PickleError
+#define __pyx_n_s_pyx_checksum __pyx_mstate_global->__pyx_n_s_pyx_checksum
+#define __pyx_n_s_pyx_result __pyx_mstate_global->__pyx_n_s_pyx_result
+#define __pyx_n_s_pyx_state __pyx_mstate_global->__pyx_n_s_pyx_state
+#define __pyx_n_s_pyx_type __pyx_mstate_global->__pyx_n_s_pyx_type
+#define __pyx_n_s_pyx_unpickle_Enum __pyx_mstate_global->__pyx_n_s_pyx_unpickle_Enum
+#define __pyx_n_s_pyx_vtable __pyx_mstate_global->__pyx_n_s_pyx_vtable
+#define __pyx_n_s_range __pyx_mstate_global->__pyx_n_s_range
+#define __pyx_n_s_reduce __pyx_mstate_global->__pyx_n_s_reduce
+#define __pyx_n_s_reduce_cython __pyx_mstate_global->__pyx_n_s_reduce_cython
+#define __pyx_n_s_reduce_ex __pyx_mstate_global->__pyx_n_s_reduce_ex
+#define __pyx_n_s_register __pyx_mstate_global->__pyx_n_s_register
+#define __pyx_n_s_setstate __pyx_mstate_global->__pyx_n_s_setstate
+#define __pyx_n_s_setstate_cython __pyx_mstate_global->__pyx_n_s_setstate_cython
+#define __pyx_n_s_shape __pyx_mstate_global->__pyx_n_s_shape
+#define __pyx_n_s_size __pyx_mstate_global->__pyx_n_s_size
+#define __pyx_n_s_spec __pyx_mstate_global->__pyx_n_s_spec
+#define __pyx_n_s_start __pyx_mstate_global->__pyx_n_s_start
+#define __pyx_n_s_step __pyx_mstate_global->__pyx_n_s_step
+#define __pyx_n_s_stop __pyx_mstate_global->__pyx_n_s_stop
+#define __pyx_kp_s_strided_and_direct __pyx_mstate_global->__pyx_kp_s_strided_and_direct
+#define __pyx_kp_s_strided_and_direct_or_indirect __pyx_mstate_global->__pyx_kp_s_strided_and_direct_or_indirect
+#define __pyx_kp_s_strided_and_indirect __pyx_mstate_global->__pyx_kp_s_strided_and_indirect
+#define __pyx_kp_s_stringsource __pyx_mstate_global->__pyx_kp_s_stringsource
+#define __pyx_n_s_struct __pyx_mstate_global->__pyx_n_s_struct
+#define __pyx_n_s_sys __pyx_mstate_global->__pyx_n_s_sys
+#define __pyx_n_s_t_xs __pyx_mstate_global->__pyx_n_s_t_xs
+#define __pyx_n_s_t_ys __pyx_mstate_global->__pyx_n_s_t_ys
+#define __pyx_n_s_test __pyx_mstate_global->__pyx_n_s_test
+#define __pyx_kp_s_unable_to_allocate_array_data __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_array_data
+#define __pyx_kp_s_unable_to_allocate_shape_and_str __pyx_mstate_global->__pyx_kp_s_unable_to_allocate_shape_and_str
+#define __pyx_n_s_unpack __pyx_mstate_global->__pyx_n_s_unpack
+#define __pyx_n_s_update __pyx_mstate_global->__pyx_n_s_update
+#define __pyx_n_s_values __pyx_mstate_global->__pyx_n_s_values
+#define __pyx_n_s_version_info __pyx_mstate_global->__pyx_n_s_version_info
+#define __pyx_int_0 __pyx_mstate_global->__pyx_int_0
+#define __pyx_int_1 __pyx_mstate_global->__pyx_int_1
+#define __pyx_int_3 __pyx_mstate_global->__pyx_int_3
+#define __pyx_int_112105877 __pyx_mstate_global->__pyx_int_112105877
+#define __pyx_int_136983863 __pyx_mstate_global->__pyx_int_136983863
+#define __pyx_int_184977713 __pyx_mstate_global->__pyx_int_184977713
+#define __pyx_int_neg_1 __pyx_mstate_global->__pyx_int_neg_1
+#define __pyx_k__11 __pyx_mstate_global->__pyx_k__11
+#define __pyx_slice__5 __pyx_mstate_global->__pyx_slice__5
+#define __pyx_tuple__4 __pyx_mstate_global->__pyx_tuple__4
+#define __pyx_tuple__8 __pyx_mstate_global->__pyx_tuple__8
+#define __pyx_tuple__9 __pyx_mstate_global->__pyx_tuple__9
+#define __pyx_tuple__10 __pyx_mstate_global->__pyx_tuple__10
+#define __pyx_tuple__12 __pyx_mstate_global->__pyx_tuple__12
+#define __pyx_tuple__13 __pyx_mstate_global->__pyx_tuple__13
+#define __pyx_tuple__14 __pyx_mstate_global->__pyx_tuple__14
+#define __pyx_tuple__15 __pyx_mstate_global->__pyx_tuple__15
+#define __pyx_tuple__16 __pyx_mstate_global->__pyx_tuple__16
+#define __pyx_tuple__17 __pyx_mstate_global->__pyx_tuple__17
+#define __pyx_tuple__18 __pyx_mstate_global->__pyx_tuple__18
+#define __pyx_tuple__19 __pyx_mstate_global->__pyx_tuple__19
+#define __pyx_tuple__20 __pyx_mstate_global->__pyx_tuple__20
+#define __pyx_tuple__21 __pyx_mstate_global->__pyx_tuple__21
+#define __pyx_tuple__23 __pyx_mstate_global->__pyx_tuple__23
+#define __pyx_codeobj__22 __pyx_mstate_global->__pyx_codeobj__22
+#define __pyx_codeobj__24 __pyx_mstate_global->__pyx_codeobj__24
+/* #### Code section: module_code ### */
+
+/* "View.MemoryView":131
+ * cdef bint dtype_is_object
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<<
+ * mode="c", bint allocate_buffer=True):
+ *
+ */
+
+/* Python wrapper */
+static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_array___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_shape = 0;
+ Py_ssize_t __pyx_v_itemsize;
+ PyObject *__pyx_v_format = 0;
+ PyObject *__pyx_v_mode = 0;
+ int __pyx_v_allocate_buffer;
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[5] = {0,0,0,0,0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 131, __pyx_L3_error)
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_shape,&__pyx_n_s_itemsize,&__pyx_n_s_format,&__pyx_n_s_mode,&__pyx_n_s_allocate_buffer,0};
+ values[3] = __Pyx_Arg_NewRef_VARARGS(((PyObject *)__pyx_n_s_c));
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);
+ CYTHON_FALLTHROUGH;
+ case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_shape)) != 0)) {
+ (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_itemsize)) != 0)) {
+ (void)__Pyx_Arg_NewRef_VARARGS(values[1]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error)
+ else {
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 1); __PYX_ERR(1, 131, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_format)) != 0)) {
+ (void)__Pyx_Arg_NewRef_VARARGS(values[2]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error)
+ else {
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, 2); __PYX_ERR(1, 131, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 3:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_mode);
+ if (value) { values[3] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 4:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_allocate_buffer);
+ if (value) { values[4] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 131, __pyx_L3_error)
+ }
+ } else {
+ switch (__pyx_nargs) {
+ case 5: values[4] = __Pyx_Arg_VARARGS(__pyx_args, 4);
+ CYTHON_FALLTHROUGH;
+ case 4: values[3] = __Pyx_Arg_VARARGS(__pyx_args, 3);
+ CYTHON_FALLTHROUGH;
+ case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+ values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+ values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+ break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ }
+ __pyx_v_shape = ((PyObject*)values[0]);
+ __pyx_v_itemsize = __Pyx_PyIndex_AsSsize_t(values[1]); if (unlikely((__pyx_v_itemsize == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 131, __pyx_L3_error)
+ __pyx_v_format = values[2];
+ __pyx_v_mode = values[3];
+ if (values[4]) {
+ __pyx_v_allocate_buffer = __Pyx_PyObject_IsTrue(values[4]); if (unlikely((__pyx_v_allocate_buffer == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 132, __pyx_L3_error)
+ } else {
+
+ /* "View.MemoryView":132
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None,
+ * mode="c", bint allocate_buffer=True): # <<<<<<<<<<<<<<
+ *
+ * cdef int idx
+ */
+ __pyx_v_allocate_buffer = ((int)1);
+ }
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 3, 5, __pyx_nargs); __PYX_ERR(1, 131, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ if (unlikely(!__Pyx_ArgTypeTest(((PyObject *)__pyx_v_shape), (&PyTuple_Type), 1, "shape", 1))) __PYX_ERR(1, 131, __pyx_L1_error)
+ if (unlikely(((PyObject *)__pyx_v_format) == Py_None)) {
+ PyErr_Format(PyExc_TypeError, "Argument '%.200s' must not be None", "format"); __PYX_ERR(1, 131, __pyx_L1_error)
+ }
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v_shape, __pyx_v_itemsize, __pyx_v_format, __pyx_v_mode, __pyx_v_allocate_buffer);
+
+ /* "View.MemoryView":131
+ * cdef bint dtype_is_object
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<<
+ * mode="c", bint allocate_buffer=True):
+ *
+ */
+
+ /* function exit code */
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __pyx_r = -1;
+ __pyx_L0:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array___cinit__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, PyObject *__pyx_v_format, PyObject *__pyx_v_mode, int __pyx_v_allocate_buffer) {
+ int __pyx_v_idx;
+ Py_ssize_t __pyx_v_dim;
+ char __pyx_v_order;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ int __pyx_t_7;
+ char *__pyx_t_8;
+ Py_ssize_t __pyx_t_9;
+ Py_UCS4 __pyx_t_10;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__cinit__", 0);
+ __Pyx_INCREF(__pyx_v_format);
+
+ /* "View.MemoryView":137
+ * cdef Py_ssize_t dim
+ *
+ * self.ndim = len(shape) # <<<<<<<<<<<<<<
+ * self.itemsize = itemsize
+ *
+ */
+ if (unlikely(__pyx_v_shape == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+ __PYX_ERR(1, 137, __pyx_L1_error)
+ }
+ __pyx_t_1 = __Pyx_PyTuple_GET_SIZE(__pyx_v_shape); if (unlikely(__pyx_t_1 == ((Py_ssize_t)-1))) __PYX_ERR(1, 137, __pyx_L1_error)
+ __pyx_v_self->ndim = ((int)__pyx_t_1);
+
+ /* "View.MemoryView":138
+ *
+ * self.ndim = len(shape)
+ * self.itemsize = itemsize # <<<<<<<<<<<<<<
+ *
+ * if not self.ndim:
+ */
+ __pyx_v_self->itemsize = __pyx_v_itemsize;
+
+ /* "View.MemoryView":140
+ * self.itemsize = itemsize
+ *
+ * if not self.ndim: # <<<<<<<<<<<<<<
+ * raise ValueError, "Empty shape tuple for cython.array"
+ *
+ */
+ __pyx_t_2 = (!(__pyx_v_self->ndim != 0));
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":141
+ *
+ * if not self.ndim:
+ * raise ValueError, "Empty shape tuple for cython.array" # <<<<<<<<<<<<<<
+ *
+ * if itemsize <= 0:
+ */
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Empty_shape_tuple_for_cython_arr, 0, 0);
+ __PYX_ERR(1, 141, __pyx_L1_error)
+
+ /* "View.MemoryView":140
+ * self.itemsize = itemsize
+ *
+ * if not self.ndim: # <<<<<<<<<<<<<<
+ * raise ValueError, "Empty shape tuple for cython.array"
+ *
+ */
+ }
+
+ /* "View.MemoryView":143
+ * raise ValueError, "Empty shape tuple for cython.array"
+ *
+ * if itemsize <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError, "itemsize <= 0 for cython.array"
+ *
+ */
+ __pyx_t_2 = (__pyx_v_itemsize <= 0);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":144
+ *
+ * if itemsize <= 0:
+ * raise ValueError, "itemsize <= 0 for cython.array" # <<<<<<<<<<<<<<
+ *
+ * if not isinstance(format, bytes):
+ */
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_itemsize_0_for_cython_array, 0, 0);
+ __PYX_ERR(1, 144, __pyx_L1_error)
+
+ /* "View.MemoryView":143
+ * raise ValueError, "Empty shape tuple for cython.array"
+ *
+ * if itemsize <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError, "itemsize <= 0 for cython.array"
+ *
+ */
+ }
+
+ /* "View.MemoryView":146
+ * raise ValueError, "itemsize <= 0 for cython.array"
+ *
+ * if not isinstance(format, bytes): # <<<<<<<<<<<<<<
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string
+ */
+ __pyx_t_2 = PyBytes_Check(__pyx_v_format);
+ __pyx_t_3 = (!__pyx_t_2);
+ if (__pyx_t_3) {
+
+ /* "View.MemoryView":147
+ *
+ * if not isinstance(format, bytes):
+ * format = format.encode('ASCII') # <<<<<<<<<<<<<<
+ * self._format = format # keep a reference to the byte string
+ * self.format = self._format
+ */
+ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_format, __pyx_n_s_encode); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 147, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_6 = NULL;
+ __pyx_t_7 = 0;
+ #if CYTHON_UNPACK_METHODS
+ if (likely(PyMethod_Check(__pyx_t_5))) {
+ __pyx_t_6 = PyMethod_GET_SELF(__pyx_t_5);
+ if (likely(__pyx_t_6)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+ __Pyx_INCREF(__pyx_t_6);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_5, function);
+ __pyx_t_7 = 1;
+ }
+ }
+ #endif
+ {
+ PyObject *__pyx_callargs[2] = {__pyx_t_6, __pyx_n_s_ASCII};
+ __pyx_t_4 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_7, 1+__pyx_t_7);
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 147, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ }
+ __Pyx_DECREF_SET(__pyx_v_format, __pyx_t_4);
+ __pyx_t_4 = 0;
+
+ /* "View.MemoryView":146
+ * raise ValueError, "itemsize <= 0 for cython.array"
+ *
+ * if not isinstance(format, bytes): # <<<<<<<<<<<<<<
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string
+ */
+ }
+
+ /* "View.MemoryView":148
+ * if not isinstance(format, bytes):
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string # <<<<<<<<<<<<<<
+ * self.format = self._format
+ *
+ */
+ if (!(likely(PyBytes_CheckExact(__pyx_v_format))||((__pyx_v_format) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_v_format))) __PYX_ERR(1, 148, __pyx_L1_error)
+ __pyx_t_4 = __pyx_v_format;
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_4);
+ __Pyx_GOTREF(__pyx_v_self->_format);
+ __Pyx_DECREF(__pyx_v_self->_format);
+ __pyx_v_self->_format = ((PyObject*)__pyx_t_4);
+ __pyx_t_4 = 0;
+
+ /* "View.MemoryView":149
+ * format = format.encode('ASCII')
+ * self._format = format # keep a reference to the byte string
+ * self.format = self._format # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ if (unlikely(__pyx_v_self->_format == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "expected bytes, NoneType found");
+ __PYX_ERR(1, 149, __pyx_L1_error)
+ }
+ __pyx_t_8 = __Pyx_PyBytes_AsWritableString(__pyx_v_self->_format); if (unlikely((!__pyx_t_8) && PyErr_Occurred())) __PYX_ERR(1, 149, __pyx_L1_error)
+ __pyx_v_self->format = __pyx_t_8;
+
+ /* "View.MemoryView":152
+ *
+ *
+ * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2) # <<<<<<<<<<<<<<
+ * self._strides = self._shape + self.ndim
+ *
+ */
+ __pyx_v_self->_shape = ((Py_ssize_t *)PyObject_Malloc((((sizeof(Py_ssize_t)) * __pyx_v_self->ndim) * 2)));
+
+ /* "View.MemoryView":153
+ *
+ * self._shape = PyObject_Malloc(sizeof(Py_ssize_t)*self.ndim*2)
+ * self._strides = self._shape + self.ndim # <<<<<<<<<<<<<<
+ *
+ * if not self._shape:
+ */
+ __pyx_v_self->_strides = (__pyx_v_self->_shape + __pyx_v_self->ndim);
+
+ /* "View.MemoryView":155
+ * self._strides = self._shape + self.ndim
+ *
+ * if not self._shape: # <<<<<<<<<<<<<<
+ * raise MemoryError, "unable to allocate shape and strides."
+ *
+ */
+ __pyx_t_3 = (!(__pyx_v_self->_shape != 0));
+ if (unlikely(__pyx_t_3)) {
+
+ /* "View.MemoryView":156
+ *
+ * if not self._shape:
+ * raise MemoryError, "unable to allocate shape and strides." # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_Raise(__pyx_builtin_MemoryError, __pyx_kp_s_unable_to_allocate_shape_and_str, 0, 0);
+ __PYX_ERR(1, 156, __pyx_L1_error)
+
+ /* "View.MemoryView":155
+ * self._strides = self._shape + self.ndim
+ *
+ * if not self._shape: # <<<<<<<<<<<<<<
+ * raise MemoryError, "unable to allocate shape and strides."
+ *
+ */
+ }
+
+ /* "View.MemoryView":159
+ *
+ *
+ * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<<
+ * if dim <= 0:
+ * raise ValueError, f"Invalid shape in axis {idx}: {dim}."
+ */
+ __pyx_t_7 = 0;
+ __pyx_t_4 = __pyx_v_shape; __Pyx_INCREF(__pyx_t_4); __pyx_t_1 = 0;
+ for (;;) {
+ if (__pyx_t_1 >= PyTuple_GET_SIZE(__pyx_t_4)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_4, __pyx_t_1); __Pyx_INCREF(__pyx_t_5); __pyx_t_1++; if (unlikely((0 < 0))) __PYX_ERR(1, 159, __pyx_L1_error)
+ #else
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_4, __pyx_t_1); __pyx_t_1++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 159, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ #endif
+ __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_5); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 159, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __pyx_v_dim = __pyx_t_9;
+ __pyx_v_idx = __pyx_t_7;
+ __pyx_t_7 = (__pyx_t_7 + 1);
+
+ /* "View.MemoryView":160
+ *
+ * for idx, dim in enumerate(shape):
+ * if dim <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError, f"Invalid shape in axis {idx}: {dim}."
+ * self._shape[idx] = dim
+ */
+ __pyx_t_3 = (__pyx_v_dim <= 0);
+ if (unlikely(__pyx_t_3)) {
+
+ /* "View.MemoryView":161
+ * for idx, dim in enumerate(shape):
+ * if dim <= 0:
+ * raise ValueError, f"Invalid shape in axis {idx}: {dim}." # <<<<<<<<<<<<<<
+ * self._shape[idx] = dim
+ *
+ */
+ __pyx_t_5 = PyTuple_New(5); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 161, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_9 = 0;
+ __pyx_t_10 = 127;
+ __Pyx_INCREF(__pyx_kp_u_Invalid_shape_in_axis);
+ __pyx_t_9 += 22;
+ __Pyx_GIVEREF(__pyx_kp_u_Invalid_shape_in_axis);
+ PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Invalid_shape_in_axis);
+ __pyx_t_6 = __Pyx_PyUnicode_From_int(__pyx_v_idx, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
+ __Pyx_GIVEREF(__pyx_t_6);
+ PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_6);
+ __pyx_t_6 = 0;
+ __Pyx_INCREF(__pyx_kp_u_);
+ __pyx_t_9 += 2;
+ __Pyx_GIVEREF(__pyx_kp_u_);
+ PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u_);
+ __pyx_t_6 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_9 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_6);
+ __Pyx_GIVEREF(__pyx_t_6);
+ PyTuple_SET_ITEM(__pyx_t_5, 3, __pyx_t_6);
+ __pyx_t_6 = 0;
+ __Pyx_INCREF(__pyx_kp_u__2);
+ __pyx_t_9 += 1;
+ __Pyx_GIVEREF(__pyx_kp_u__2);
+ PyTuple_SET_ITEM(__pyx_t_5, 4, __pyx_kp_u__2);
+ __pyx_t_6 = __Pyx_PyUnicode_Join(__pyx_t_5, 5, __pyx_t_9, __pyx_t_10); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 161, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __PYX_ERR(1, 161, __pyx_L1_error)
+
+ /* "View.MemoryView":160
+ *
+ * for idx, dim in enumerate(shape):
+ * if dim <= 0: # <<<<<<<<<<<<<<
+ * raise ValueError, f"Invalid shape in axis {idx}: {dim}."
+ * self._shape[idx] = dim
+ */
+ }
+
+ /* "View.MemoryView":162
+ * if dim <= 0:
+ * raise ValueError, f"Invalid shape in axis {idx}: {dim}."
+ * self._shape[idx] = dim # <<<<<<<<<<<<<<
+ *
+ * cdef char order
+ */
+ (__pyx_v_self->_shape[__pyx_v_idx]) = __pyx_v_dim;
+
+ /* "View.MemoryView":159
+ *
+ *
+ * for idx, dim in enumerate(shape): # <<<<<<<<<<<<<<
+ * if dim <= 0:
+ * raise ValueError, f"Invalid shape in axis {idx}: {dim}."
+ */
+ }
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+
+ /* "View.MemoryView":165
+ *
+ * cdef char order
+ * if mode == 'c': # <<<<<<<<<<<<<<
+ * order = b'C'
+ * self.mode = u'c'
+ */
+ __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_c, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 165, __pyx_L1_error)
+ if (__pyx_t_3) {
+
+ /* "View.MemoryView":166
+ * cdef char order
+ * if mode == 'c':
+ * order = b'C' # <<<<<<<<<<<<<<
+ * self.mode = u'c'
+ * elif mode == 'fortran':
+ */
+ __pyx_v_order = 'C';
+
+ /* "View.MemoryView":167
+ * if mode == 'c':
+ * order = b'C'
+ * self.mode = u'c' # <<<<<<<<<<<<<<
+ * elif mode == 'fortran':
+ * order = b'F'
+ */
+ __Pyx_INCREF(__pyx_n_u_c);
+ __Pyx_GIVEREF(__pyx_n_u_c);
+ __Pyx_GOTREF(__pyx_v_self->mode);
+ __Pyx_DECREF(__pyx_v_self->mode);
+ __pyx_v_self->mode = __pyx_n_u_c;
+
+ /* "View.MemoryView":165
+ *
+ * cdef char order
+ * if mode == 'c': # <<<<<<<<<<<<<<
+ * order = b'C'
+ * self.mode = u'c'
+ */
+ goto __pyx_L11;
+ }
+
+ /* "View.MemoryView":168
+ * order = b'C'
+ * self.mode = u'c'
+ * elif mode == 'fortran': # <<<<<<<<<<<<<<
+ * order = b'F'
+ * self.mode = u'fortran'
+ */
+ __pyx_t_3 = (__Pyx_PyString_Equals(__pyx_v_mode, __pyx_n_s_fortran, Py_EQ)); if (unlikely((__pyx_t_3 < 0))) __PYX_ERR(1, 168, __pyx_L1_error)
+ if (likely(__pyx_t_3)) {
+
+ /* "View.MemoryView":169
+ * self.mode = u'c'
+ * elif mode == 'fortran':
+ * order = b'F' # <<<<<<<<<<<<<<
+ * self.mode = u'fortran'
+ * else:
+ */
+ __pyx_v_order = 'F';
+
+ /* "View.MemoryView":170
+ * elif mode == 'fortran':
+ * order = b'F'
+ * self.mode = u'fortran' # <<<<<<<<<<<<<<
+ * else:
+ * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}"
+ */
+ __Pyx_INCREF(__pyx_n_u_fortran);
+ __Pyx_GIVEREF(__pyx_n_u_fortran);
+ __Pyx_GOTREF(__pyx_v_self->mode);
+ __Pyx_DECREF(__pyx_v_self->mode);
+ __pyx_v_self->mode = __pyx_n_u_fortran;
+
+ /* "View.MemoryView":168
+ * order = b'C'
+ * self.mode = u'c'
+ * elif mode == 'fortran': # <<<<<<<<<<<<<<
+ * order = b'F'
+ * self.mode = u'fortran'
+ */
+ goto __pyx_L11;
+ }
+
+ /* "View.MemoryView":172
+ * self.mode = u'fortran'
+ * else:
+ * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}" # <<<<<<<<<<<<<<
+ *
+ * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order)
+ */
+ /*else*/ {
+ __pyx_t_4 = __Pyx_PyObject_FormatSimple(__pyx_v_mode, __pyx_empty_unicode); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 172, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_6 = __Pyx_PyUnicode_Concat(__pyx_kp_u_Invalid_mode_expected_c_or_fortr, __pyx_t_4); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 172, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_6, 0, 0);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __PYX_ERR(1, 172, __pyx_L1_error)
+ }
+ __pyx_L11:;
+
+ /* "View.MemoryView":174
+ * raise ValueError, f"Invalid mode, expected 'c' or 'fortran', got {mode}"
+ *
+ * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order) # <<<<<<<<<<<<<<
+ *
+ * self.free_data = allocate_buffer
+ */
+ __pyx_v_self->len = __pyx_fill_contig_strides_array(__pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_itemsize, __pyx_v_self->ndim, __pyx_v_order);
+
+ /* "View.MemoryView":176
+ * self.len = fill_contig_strides_array(self._shape, self._strides, itemsize, self.ndim, order)
+ *
+ * self.free_data = allocate_buffer # <<<<<<<<<<<<<<
+ * self.dtype_is_object = format == b'O'
+ *
+ */
+ __pyx_v_self->free_data = __pyx_v_allocate_buffer;
+
+ /* "View.MemoryView":177
+ *
+ * self.free_data = allocate_buffer
+ * self.dtype_is_object = format == b'O' # <<<<<<<<<<<<<<
+ *
+ * if allocate_buffer:
+ */
+ __pyx_t_6 = PyObject_RichCompare(__pyx_v_format, __pyx_n_b_O, Py_EQ); __Pyx_XGOTREF(__pyx_t_6); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 177, __pyx_L1_error)
+ __pyx_t_3 = __Pyx_PyObject_IsTrue(__pyx_t_6); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 177, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __pyx_v_self->dtype_is_object = __pyx_t_3;
+
+ /* "View.MemoryView":179
+ * self.dtype_is_object = format == b'O'
+ *
+ * if allocate_buffer: # <<<<<<<<<<<<<<
+ * _allocate_buffer(self)
+ *
+ */
+ if (__pyx_v_allocate_buffer) {
+
+ /* "View.MemoryView":180
+ *
+ * if allocate_buffer:
+ * _allocate_buffer(self) # <<<<<<<<<<<<<<
+ *
+ * @cname('getbuffer')
+ */
+ __pyx_t_7 = __pyx_array_allocate_buffer(__pyx_v_self); if (unlikely(__pyx_t_7 == ((int)-1))) __PYX_ERR(1, 180, __pyx_L1_error)
+
+ /* "View.MemoryView":179
+ * self.dtype_is_object = format == b'O'
+ *
+ * if allocate_buffer: # <<<<<<<<<<<<<<
+ * _allocate_buffer(self)
+ *
+ */
+ }
+
+ /* "View.MemoryView":131
+ * cdef bint dtype_is_object
+ *
+ * def __cinit__(array self, tuple shape, Py_ssize_t itemsize, format not None, # <<<<<<<<<<<<<<
+ * mode="c", bint allocate_buffer=True):
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_AddTraceback("View.MemoryView.array.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_format);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":182
+ * _allocate_buffer(self)
+ *
+ * @cname('getbuffer') # <<<<<<<<<<<<<<
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1
+ */
+
+/* Python wrapper */
+CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+CYTHON_UNUSED static int __pyx_array_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(((struct __pyx_array_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_2__getbuffer__(struct __pyx_array_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ int __pyx_v_bufmode;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ char *__pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ int __pyx_t_4;
+ Py_ssize_t *__pyx_t_5;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ if (unlikely(__pyx_v_info == NULL)) {
+ PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
+ return -1;
+ }
+ __Pyx_RefNannySetupContext("__getbuffer__", 0);
+ __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(__pyx_v_info->obj);
+
+ /* "View.MemoryView":184
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1 # <<<<<<<<<<<<<<
+ * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS):
+ * if self.mode == u"c":
+ */
+ __pyx_v_bufmode = -1;
+
+ /* "View.MemoryView":185
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1
+ * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): # <<<<<<<<<<<<<<
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ */
+ __pyx_t_1 = ((__pyx_v_flags & ((PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS) | PyBUF_ANY_CONTIGUOUS)) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":186
+ * cdef int bufmode = -1
+ * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS):
+ * if self.mode == u"c": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran":
+ */
+ __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_c, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 186, __pyx_L1_error)
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":187
+ * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS):
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<<
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ */
+ __pyx_v_bufmode = (PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
+
+ /* "View.MemoryView":186
+ * cdef int bufmode = -1
+ * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS):
+ * if self.mode == u"c": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran":
+ */
+ goto __pyx_L4;
+ }
+
+ /* "View.MemoryView":188
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode):
+ */
+ __pyx_t_1 = (__Pyx_PyUnicode_Equals(__pyx_v_self->mode, __pyx_n_u_fortran, Py_EQ)); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 188, __pyx_L1_error)
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":189
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS # <<<<<<<<<<<<<<
+ * if not (flags & bufmode):
+ * raise ValueError, "Can only create a buffer that is contiguous in memory."
+ */
+ __pyx_v_bufmode = (PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS);
+
+ /* "View.MemoryView":188
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * elif self.mode == u"fortran": # <<<<<<<<<<<<<<
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode):
+ */
+ }
+ __pyx_L4:;
+
+ /* "View.MemoryView":190
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode): # <<<<<<<<<<<<<<
+ * raise ValueError, "Can only create a buffer that is contiguous in memory."
+ * info.buf = self.data
+ */
+ __pyx_t_1 = (!((__pyx_v_flags & __pyx_v_bufmode) != 0));
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":191
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode):
+ * raise ValueError, "Can only create a buffer that is contiguous in memory." # <<<<<<<<<<<<<<
+ * info.buf = self.data
+ * info.len = self.len
+ */
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Can_only_create_a_buffer_that_is, 0, 0);
+ __PYX_ERR(1, 191, __pyx_L1_error)
+
+ /* "View.MemoryView":190
+ * elif self.mode == u"fortran":
+ * bufmode = PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ * if not (flags & bufmode): # <<<<<<<<<<<<<<
+ * raise ValueError, "Can only create a buffer that is contiguous in memory."
+ * info.buf = self.data
+ */
+ }
+
+ /* "View.MemoryView":185
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1
+ * if flags & (PyBUF_C_CONTIGUOUS | PyBUF_F_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS): # <<<<<<<<<<<<<<
+ * if self.mode == u"c":
+ * bufmode = PyBUF_C_CONTIGUOUS | PyBUF_ANY_CONTIGUOUS
+ */
+ }
+
+ /* "View.MemoryView":192
+ * if not (flags & bufmode):
+ * raise ValueError, "Can only create a buffer that is contiguous in memory."
+ * info.buf = self.data # <<<<<<<<<<<<<<
+ * info.len = self.len
+ *
+ */
+ __pyx_t_2 = __pyx_v_self->data;
+ __pyx_v_info->buf = __pyx_t_2;
+
+ /* "View.MemoryView":193
+ * raise ValueError, "Can only create a buffer that is contiguous in memory."
+ * info.buf = self.data
+ * info.len = self.len # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_STRIDES:
+ */
+ __pyx_t_3 = __pyx_v_self->len;
+ __pyx_v_info->len = __pyx_t_3;
+
+ /* "View.MemoryView":195
+ * info.len = self.len
+ *
+ * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<<
+ * info.ndim = self.ndim
+ * info.shape = self._shape
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":196
+ *
+ * if flags & PyBUF_STRIDES:
+ * info.ndim = self.ndim # <<<<<<<<<<<<<<
+ * info.shape = self._shape
+ * info.strides = self._strides
+ */
+ __pyx_t_4 = __pyx_v_self->ndim;
+ __pyx_v_info->ndim = __pyx_t_4;
+
+ /* "View.MemoryView":197
+ * if flags & PyBUF_STRIDES:
+ * info.ndim = self.ndim
+ * info.shape = self._shape # <<<<<<<<<<<<<<
+ * info.strides = self._strides
+ * else:
+ */
+ __pyx_t_5 = __pyx_v_self->_shape;
+ __pyx_v_info->shape = __pyx_t_5;
+
+ /* "View.MemoryView":198
+ * info.ndim = self.ndim
+ * info.shape = self._shape
+ * info.strides = self._strides # <<<<<<<<<<<<<<
+ * else:
+ * info.ndim = 1
+ */
+ __pyx_t_5 = __pyx_v_self->_strides;
+ __pyx_v_info->strides = __pyx_t_5;
+
+ /* "View.MemoryView":195
+ * info.len = self.len
+ *
+ * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<<
+ * info.ndim = self.ndim
+ * info.shape = self._shape
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":200
+ * info.strides = self._strides
+ * else:
+ * info.ndim = 1 # <<<<<<<<<<<<<<
+ * info.shape = &self.len if flags & PyBUF_ND else NULL
+ * info.strides = NULL
+ */
+ /*else*/ {
+ __pyx_v_info->ndim = 1;
+
+ /* "View.MemoryView":201
+ * else:
+ * info.ndim = 1
+ * info.shape = &self.len if flags & PyBUF_ND else NULL # <<<<<<<<<<<<<<
+ * info.strides = NULL
+ *
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0);
+ if (__pyx_t_1) {
+ __pyx_t_5 = (&__pyx_v_self->len);
+ } else {
+ __pyx_t_5 = NULL;
+ }
+ __pyx_v_info->shape = __pyx_t_5;
+
+ /* "View.MemoryView":202
+ * info.ndim = 1
+ * info.shape = &self.len if flags & PyBUF_ND else NULL
+ * info.strides = NULL # <<<<<<<<<<<<<<
+ *
+ * info.suboffsets = NULL
+ */
+ __pyx_v_info->strides = NULL;
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":204
+ * info.strides = NULL
+ *
+ * info.suboffsets = NULL # <<<<<<<<<<<<<<
+ * info.itemsize = self.itemsize
+ * info.readonly = 0
+ */
+ __pyx_v_info->suboffsets = NULL;
+
+ /* "View.MemoryView":205
+ *
+ * info.suboffsets = NULL
+ * info.itemsize = self.itemsize # <<<<<<<<<<<<<<
+ * info.readonly = 0
+ * info.format = self.format if flags & PyBUF_FORMAT else NULL
+ */
+ __pyx_t_3 = __pyx_v_self->itemsize;
+ __pyx_v_info->itemsize = __pyx_t_3;
+
+ /* "View.MemoryView":206
+ * info.suboffsets = NULL
+ * info.itemsize = self.itemsize
+ * info.readonly = 0 # <<<<<<<<<<<<<<
+ * info.format = self.format if flags & PyBUF_FORMAT else NULL
+ * info.obj = self
+ */
+ __pyx_v_info->readonly = 0;
+
+ /* "View.MemoryView":207
+ * info.itemsize = self.itemsize
+ * info.readonly = 0
+ * info.format = self.format if flags & PyBUF_FORMAT else NULL # <<<<<<<<<<<<<<
+ * info.obj = self
+ *
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+ if (__pyx_t_1) {
+ __pyx_t_2 = __pyx_v_self->format;
+ } else {
+ __pyx_t_2 = NULL;
+ }
+ __pyx_v_info->format = __pyx_t_2;
+
+ /* "View.MemoryView":208
+ * info.readonly = 0
+ * info.format = self.format if flags & PyBUF_FORMAT else NULL
+ * info.obj = self # <<<<<<<<<<<<<<
+ *
+ * def __dealloc__(array self):
+ */
+ __Pyx_INCREF((PyObject *)__pyx_v_self);
+ __Pyx_GIVEREF((PyObject *)__pyx_v_self);
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj);
+ __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+
+ /* "View.MemoryView":182
+ * _allocate_buffer(self)
+ *
+ * @cname('getbuffer') # <<<<<<<<<<<<<<
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * cdef int bufmode = -1
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.array.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ if (__pyx_v_info->obj != NULL) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ goto __pyx_L2;
+ __pyx_L0:;
+ if (__pyx_v_info->obj == Py_None) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ __pyx_L2:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":210
+ * info.obj = self
+ *
+ * def __dealloc__(array self): # <<<<<<<<<<<<<<
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ */
+
+/* Python wrapper */
+static void __pyx_array___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_array___dealloc__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_array___pyx_pf_15View_dot_MemoryView_5array_4__dealloc__(struct __pyx_array_obj *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "View.MemoryView":211
+ *
+ * def __dealloc__(array self):
+ * if self.callback_free_data != NULL: # <<<<<<<<<<<<<<
+ * self.callback_free_data(self.data)
+ * elif self.free_data and self.data is not NULL:
+ */
+ __pyx_t_1 = (__pyx_v_self->callback_free_data != NULL);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":212
+ * def __dealloc__(array self):
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data) # <<<<<<<<<<<<<<
+ * elif self.free_data and self.data is not NULL:
+ * if self.dtype_is_object:
+ */
+ __pyx_v_self->callback_free_data(__pyx_v_self->data);
+
+ /* "View.MemoryView":211
+ *
+ * def __dealloc__(array self):
+ * if self.callback_free_data != NULL: # <<<<<<<<<<<<<<
+ * self.callback_free_data(self.data)
+ * elif self.free_data and self.data is not NULL:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":213
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ * elif self.free_data and self.data is not NULL: # <<<<<<<<<<<<<<
+ * if self.dtype_is_object:
+ * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False)
+ */
+ if (__pyx_v_self->free_data) {
+ } else {
+ __pyx_t_1 = __pyx_v_self->free_data;
+ goto __pyx_L4_bool_binop_done;
+ }
+ __pyx_t_2 = (__pyx_v_self->data != NULL);
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L4_bool_binop_done:;
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":214
+ * self.callback_free_data(self.data)
+ * elif self.free_data and self.data is not NULL:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False)
+ * free(self.data)
+ */
+ if (__pyx_v_self->dtype_is_object) {
+
+ /* "View.MemoryView":215
+ * elif self.free_data and self.data is not NULL:
+ * if self.dtype_is_object:
+ * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False) # <<<<<<<<<<<<<<
+ * free(self.data)
+ * PyObject_Free(self._shape)
+ */
+ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_self->data, __pyx_v_self->_shape, __pyx_v_self->_strides, __pyx_v_self->ndim, 0);
+
+ /* "View.MemoryView":214
+ * self.callback_free_data(self.data)
+ * elif self.free_data and self.data is not NULL:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False)
+ * free(self.data)
+ */
+ }
+
+ /* "View.MemoryView":216
+ * if self.dtype_is_object:
+ * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False)
+ * free(self.data) # <<<<<<<<<<<<<<
+ * PyObject_Free(self._shape)
+ *
+ */
+ free(__pyx_v_self->data);
+
+ /* "View.MemoryView":213
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ * elif self.free_data and self.data is not NULL: # <<<<<<<<<<<<<<
+ * if self.dtype_is_object:
+ * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False)
+ */
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":217
+ * refcount_objects_in_slice(self.data, self._shape, self._strides, self.ndim, inc=False)
+ * free(self.data)
+ * PyObject_Free(self._shape) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ PyObject_Free(__pyx_v_self->_shape);
+
+ /* "View.MemoryView":210
+ * info.obj = self
+ *
+ * def __dealloc__(array self): # <<<<<<<<<<<<<<
+ * if self.callback_free_data != NULL:
+ * self.callback_free_data(self.data)
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":219
+ * PyObject_Free(self._shape)
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def memview(self):
+ * return self.get_memview()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_5array_7memview_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_5array_7memview___get__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_5array_7memview___get__(struct __pyx_array_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":221
+ * @property
+ * def memview(self):
+ * return self.get_memview() # <<<<<<<<<<<<<<
+ *
+ * @cname('get_memview')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_array *)__pyx_v_self->__pyx_vtab)->get_memview(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 221, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":219
+ * PyObject_Free(self._shape)
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def memview(self):
+ * return self.get_memview()
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.array.memview.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":224
+ *
+ * @cname('get_memview')
+ * cdef get_memview(self): # <<<<<<<<<<<<<<
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ * return memoryview(self, flags, self.dtype_is_object)
+ */
+
+static PyObject *__pyx_array_get_memview(struct __pyx_array_obj *__pyx_v_self) {
+ int __pyx_v_flags;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("get_memview", 0);
+
+ /* "View.MemoryView":225
+ * @cname('get_memview')
+ * cdef get_memview(self):
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE # <<<<<<<<<<<<<<
+ * return memoryview(self, flags, self.dtype_is_object)
+ *
+ */
+ __pyx_v_flags = ((PyBUF_ANY_CONTIGUOUS | PyBUF_FORMAT) | PyBUF_WRITABLE);
+
+ /* "View.MemoryView":226
+ * cdef get_memview(self):
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ * return memoryview(self, flags, self.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ * def __len__(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 226, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 226, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 226, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF((PyObject *)__pyx_v_self);
+ __Pyx_GIVEREF((PyObject *)__pyx_v_self);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, ((PyObject *)__pyx_v_self))) __PYX_ERR(1, 226, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(1, 226, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_2);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2)) __PYX_ERR(1, 226, __pyx_L1_error);
+ __pyx_t_1 = 0;
+ __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 226, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":224
+ *
+ * @cname('get_memview')
+ * cdef get_memview(self): # <<<<<<<<<<<<<<
+ * flags = PyBUF_ANY_CONTIGUOUS|PyBUF_FORMAT|PyBUF_WRITABLE
+ * return memoryview(self, flags, self.dtype_is_object)
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.array.get_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":228
+ * return memoryview(self, flags, self.dtype_is_object)
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * return self._shape[0]
+ *
+ */
+
+/* Python wrapper */
+static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_array___len__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static Py_ssize_t __pyx_array___pyx_pf_15View_dot_MemoryView_5array_6__len__(struct __pyx_array_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__len__", 0);
+
+ /* "View.MemoryView":229
+ *
+ * def __len__(self):
+ * return self._shape[0] # <<<<<<<<<<<<<<
+ *
+ * def __getattr__(self, attr):
+ */
+ __pyx_r = (__pyx_v_self->_shape[0]);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":228
+ * return memoryview(self, flags, self.dtype_is_object)
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * return self._shape[0]
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":231
+ * return self._shape[0]
+ *
+ * def __getattr__(self, attr): # <<<<<<<<<<<<<<
+ * return getattr(self.memview, attr)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr); /*proto*/
+static PyObject *__pyx_array___getattr__(PyObject *__pyx_v_self, PyObject *__pyx_v_attr) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getattr__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_attr));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_8__getattr__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_attr) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getattr__", 0);
+
+ /* "View.MemoryView":232
+ *
+ * def __getattr__(self, attr):
+ * return getattr(self.memview, attr) # <<<<<<<<<<<<<<
+ *
+ * def __getitem__(self, item):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 232, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_GetAttr(__pyx_t_1, __pyx_v_attr); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 232, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":231
+ * return self._shape[0]
+ *
+ * def __getattr__(self, attr): # <<<<<<<<<<<<<<
+ * return getattr(self.memview, attr)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.array.__getattr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":234
+ * return getattr(self.memview, attr)
+ *
+ * def __getitem__(self, item): # <<<<<<<<<<<<<<
+ * return self.memview[item]
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item); /*proto*/
+static PyObject *__pyx_array___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_array___pyx_pf_15View_dot_MemoryView_5array_10__getitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getitem__", 0);
+
+ /* "View.MemoryView":235
+ *
+ * def __getitem__(self, item):
+ * return self.memview[item] # <<<<<<<<<<<<<<
+ *
+ * def __setitem__(self, item, value):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 235, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyObject_GetItem(__pyx_t_1, __pyx_v_item); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 235, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":234
+ * return getattr(self.memview, attr)
+ *
+ * def __getitem__(self, item): # <<<<<<<<<<<<<<
+ * return self.memview[item]
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.array.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":237
+ * return self.memview[item]
+ *
+ * def __setitem__(self, item, value): # <<<<<<<<<<<<<<
+ * self.memview[item] = value
+ *
+ */
+
+/* Python wrapper */
+static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_array___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(((struct __pyx_array_obj *)__pyx_v_self), ((PyObject *)__pyx_v_item), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_array___pyx_pf_15View_dot_MemoryView_5array_12__setitem__(struct __pyx_array_obj *__pyx_v_self, PyObject *__pyx_v_item, PyObject *__pyx_v_value) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setitem__", 0);
+
+ /* "View.MemoryView":238
+ *
+ * def __setitem__(self, item, value):
+ * self.memview[item] = value # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_memview); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 238, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (unlikely((PyObject_SetItem(__pyx_t_1, __pyx_v_item, __pyx_v_value) < 0))) __PYX_ERR(1, 238, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "View.MemoryView":237
+ * return self.memview[item]
+ *
+ * def __setitem__(self, item, value): # <<<<<<<<<<<<<<
+ * self.memview[item] = value
+ *
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.array.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_array_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 1, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_array___reduce_cython__(((struct __pyx_array_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_array___reduce_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.array.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_array_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[1] = {0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 3, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+ (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
+ }
+ } else if (unlikely(__pyx_nargs != 1)) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ }
+ __pyx_v___pyx_state = values[0];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_array_2__setstate_cython__(((struct __pyx_array_obj *)__pyx_v_self), __pyx_v___pyx_state);
+
+ /* function exit code */
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_array_2__setstate_cython__(CYTHON_UNUSED struct __pyx_array_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<<
+ */
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.array.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":248
+ *
+ * @cname("__pyx_array_allocate_buffer")
+ * cdef int _allocate_buffer(array self) except -1: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+
+static int __pyx_array_allocate_buffer(struct __pyx_array_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_v_i;
+ PyObject **__pyx_v_p;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ Py_ssize_t __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ Py_ssize_t __pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("_allocate_buffer", 0);
+
+ /* "View.MemoryView":254
+ * cdef PyObject **p
+ *
+ * self.free_data = True # <<<<<<<<<<<<<<
+ * self.data = malloc(self.len)
+ * if not self.data:
+ */
+ __pyx_v_self->free_data = 1;
+
+ /* "View.MemoryView":255
+ *
+ * self.free_data = True
+ * self.data = malloc(self.len) # <<<<<<<<<<<<<<
+ * if not self.data:
+ * raise MemoryError, "unable to allocate array data."
+ */
+ __pyx_v_self->data = ((char *)malloc(__pyx_v_self->len));
+
+ /* "View.MemoryView":256
+ * self.free_data = True
+ * self.data = malloc(self.len)
+ * if not self.data: # <<<<<<<<<<<<<<
+ * raise MemoryError, "unable to allocate array data."
+ *
+ */
+ __pyx_t_1 = (!(__pyx_v_self->data != 0));
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":257
+ * self.data = malloc(self.len)
+ * if not self.data:
+ * raise MemoryError, "unable to allocate array data." # <<<<<<<<<<<<<<
+ *
+ * if self.dtype_is_object:
+ */
+ __Pyx_Raise(__pyx_builtin_MemoryError, __pyx_kp_s_unable_to_allocate_array_data, 0, 0);
+ __PYX_ERR(1, 257, __pyx_L1_error)
+
+ /* "View.MemoryView":256
+ * self.free_data = True
+ * self.data = malloc(self.len)
+ * if not self.data: # <<<<<<<<<<<<<<
+ * raise MemoryError, "unable to allocate array data."
+ *
+ */
+ }
+
+ /* "View.MemoryView":259
+ * raise MemoryError, "unable to allocate array data."
+ *
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * p = self.data
+ * for i in range(self.len // self.itemsize):
+ */
+ if (__pyx_v_self->dtype_is_object) {
+
+ /* "View.MemoryView":260
+ *
+ * if self.dtype_is_object:
+ * p = self.data # <<<<<<<<<<<<<<
+ * for i in range(self.len // self.itemsize):
+ * p[i] = Py_None
+ */
+ __pyx_v_p = ((PyObject **)__pyx_v_self->data);
+
+ /* "View.MemoryView":261
+ * if self.dtype_is_object:
+ * p = self.data
+ * for i in range(self.len // self.itemsize): # <<<<<<<<<<<<<<
+ * p[i] = Py_None
+ * Py_INCREF(Py_None)
+ */
+ if (unlikely(__pyx_v_self->itemsize == 0)) {
+ PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
+ __PYX_ERR(1, 261, __pyx_L1_error)
+ }
+ else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_self->itemsize == (Py_ssize_t)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_self->len))) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
+ __PYX_ERR(1, 261, __pyx_L1_error)
+ }
+ __pyx_t_2 = __Pyx_div_Py_ssize_t(__pyx_v_self->len, __pyx_v_self->itemsize);
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":262
+ * p = self.data
+ * for i in range(self.len // self.itemsize):
+ * p[i] = Py_None # <<<<<<<<<<<<<<
+ * Py_INCREF(Py_None)
+ * return 0
+ */
+ (__pyx_v_p[__pyx_v_i]) = Py_None;
+
+ /* "View.MemoryView":263
+ * for i in range(self.len // self.itemsize):
+ * p[i] = Py_None
+ * Py_INCREF(Py_None) # <<<<<<<<<<<<<<
+ * return 0
+ *
+ */
+ Py_INCREF(Py_None);
+ }
+
+ /* "View.MemoryView":259
+ * raise MemoryError, "unable to allocate array data."
+ *
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * p = self.data
+ * for i in range(self.len // self.itemsize):
+ */
+ }
+
+ /* "View.MemoryView":264
+ * p[i] = Py_None
+ * Py_INCREF(Py_None)
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":248
+ *
+ * @cname("__pyx_array_allocate_buffer")
+ * cdef int _allocate_buffer(array self) except -1: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView._allocate_buffer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":268
+ *
+ * @cname("__pyx_array_new")
+ * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): # <<<<<<<<<<<<<<
+ * cdef array result
+ * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string.
+ */
+
+static struct __pyx_array_obj *__pyx_array_new(PyObject *__pyx_v_shape, Py_ssize_t __pyx_v_itemsize, char *__pyx_v_format, char *__pyx_v_c_mode, char *__pyx_v_buf) {
+ struct __pyx_array_obj *__pyx_v_result = 0;
+ PyObject *__pyx_v_mode = 0;
+ struct __pyx_array_obj *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("array_cwrapper", 0);
+
+ /* "View.MemoryView":270
+ * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf):
+ * cdef array result
+ * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string. # <<<<<<<<<<<<<<
+ *
+ * if buf is NULL:
+ */
+ __pyx_t_2 = ((__pyx_v_c_mode[0]) == 'f');
+ if (__pyx_t_2) {
+ __Pyx_INCREF(__pyx_n_s_fortran);
+ __pyx_t_1 = __pyx_n_s_fortran;
+ } else {
+ __Pyx_INCREF(__pyx_n_s_c);
+ __pyx_t_1 = __pyx_n_s_c;
+ }
+ __pyx_v_mode = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":272
+ * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string.
+ *
+ * if buf is NULL: # <<<<<<<<<<<<<<
+ * result = array.__new__(array, shape, itemsize, format, mode)
+ * else:
+ */
+ __pyx_t_2 = (__pyx_v_buf == NULL);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":273
+ *
+ * if buf is NULL:
+ * result = array.__new__(array, shape, itemsize, format, mode) # <<<<<<<<<<<<<<
+ * else:
+ * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False)
+ */
+ __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 273, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 273, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = PyTuple_New(4); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 273, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_INCREF(__pyx_v_shape);
+ __Pyx_GIVEREF(__pyx_v_shape);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_v_shape)) __PYX_ERR(1, 273, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(1, 273, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_3);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_t_3)) __PYX_ERR(1, 273, __pyx_L1_error);
+ __Pyx_INCREF(__pyx_v_mode);
+ __Pyx_GIVEREF(__pyx_v_mode);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 3, __pyx_v_mode)) __PYX_ERR(1, 273, __pyx_L1_error);
+ __pyx_t_1 = 0;
+ __pyx_t_3 = 0;
+ __pyx_t_3 = ((PyObject *)__pyx_tp_new_array(((PyTypeObject *)__pyx_array_type), __pyx_t_4, NULL)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 273, __pyx_L1_error)
+ __Pyx_GOTREF((PyObject *)__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":272
+ * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string.
+ *
+ * if buf is NULL: # <<<<<<<<<<<<<<
+ * result = array.__new__(array, shape, itemsize, format, mode)
+ * else:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":275
+ * result = array.__new__(array, shape, itemsize, format, mode)
+ * else:
+ * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False) # <<<<<<<<<<<<<<
+ * result.data = buf
+ *
+ */
+ /*else*/ {
+ __pyx_t_3 = PyInt_FromSsize_t(__pyx_v_itemsize); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = __Pyx_PyBytes_FromString(__pyx_v_format); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_1 = PyTuple_New(4); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 275, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_v_shape);
+ __Pyx_GIVEREF(__pyx_v_shape);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_shape)) __PYX_ERR(1, 275, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_3);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_4);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error);
+ __Pyx_INCREF(__pyx_v_mode);
+ __Pyx_GIVEREF(__pyx_v_mode);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_v_mode)) __PYX_ERR(1, 275, __pyx_L1_error);
+ __pyx_t_3 = 0;
+ __pyx_t_4 = 0;
+ __pyx_t_4 = __Pyx_PyDict_NewPresized(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 275, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ if (PyDict_SetItem(__pyx_t_4, __pyx_n_s_allocate_buffer, Py_False) < 0) __PYX_ERR(1, 275, __pyx_L1_error)
+ __pyx_t_3 = ((PyObject *)__pyx_tp_new_array(((PyTypeObject *)__pyx_array_type), __pyx_t_1, __pyx_t_4)); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 275, __pyx_L1_error)
+ __Pyx_GOTREF((PyObject *)__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __pyx_v_result = ((struct __pyx_array_obj *)__pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":276
+ * else:
+ * result = array.__new__(array, shape, itemsize, format, mode, allocate_buffer=False)
+ * result.data = buf # <<<<<<<<<<<<<<
+ *
+ * return result
+ */
+ __pyx_v_result->data = __pyx_v_buf;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":278
+ * result.data = buf
+ *
+ * return result # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF((PyObject *)__pyx_r);
+ __Pyx_INCREF((PyObject *)__pyx_v_result);
+ __pyx_r = __pyx_v_result;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":268
+ *
+ * @cname("__pyx_array_new")
+ * cdef array array_cwrapper(tuple shape, Py_ssize_t itemsize, char *format, char *c_mode, char *buf): # <<<<<<<<<<<<<<
+ * cdef array result
+ * cdef str mode = "fortran" if c_mode[0] == b'f' else "c" # this often comes from a constant C string.
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView.array_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XDECREF(__pyx_v_mode);
+ __Pyx_XGIVEREF((PyObject *)__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":304
+ * cdef class Enum(object):
+ * cdef object name
+ * def __init__(self, name): # <<<<<<<<<<<<<<
+ * self.name = name
+ * def __repr__(self):
+ */
+
+/* Python wrapper */
+static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_MemviewEnum___init__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_name = 0;
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[1] = {0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__init__ (wrapper)", 0);
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 304, __pyx_L3_error)
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_name,0};
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_name)) != 0)) {
+ (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 304, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__init__") < 0)) __PYX_ERR(1, 304, __pyx_L3_error)
+ }
+ } else if (unlikely(__pyx_nargs != 1)) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+ }
+ __pyx_v_name = values[0];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__init__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 304, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView.Enum.__init__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v_name);
+
+ /* function exit code */
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum___init__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v_name) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__init__", 0);
+
+ /* "View.MemoryView":305
+ * cdef object name
+ * def __init__(self, name):
+ * self.name = name # <<<<<<<<<<<<<<
+ * def __repr__(self):
+ * return self.name
+ */
+ __Pyx_INCREF(__pyx_v_name);
+ __Pyx_GIVEREF(__pyx_v_name);
+ __Pyx_GOTREF(__pyx_v_self->name);
+ __Pyx_DECREF(__pyx_v_self->name);
+ __pyx_v_self->name = __pyx_v_name;
+
+ /* "View.MemoryView":304
+ * cdef class Enum(object):
+ * cdef object name
+ * def __init__(self, name): # <<<<<<<<<<<<<<
+ * self.name = name
+ * def __repr__(self):
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":306
+ * def __init__(self, name):
+ * self.name = name
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return self.name
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_MemviewEnum___repr__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_MemviewEnum___pyx_pf_15View_dot_MemoryView_4Enum_2__repr__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__repr__", 0);
+
+ /* "View.MemoryView":307
+ * self.name = name
+ * def __repr__(self):
+ * return self.name # <<<<<<<<<<<<<<
+ *
+ * cdef generic = Enum("")
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->name);
+ __pyx_r = __pyx_v_self->name;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":306
+ * def __init__(self, name):
+ * self.name = name
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return self.name
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * cdef tuple state
+ * cdef object _dict
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_MemviewEnum_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 1, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_MemviewEnum___reduce_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_MemviewEnum___reduce_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self) {
+ PyObject *__pyx_v_state = 0;
+ PyObject *__pyx_v__dict = 0;
+ int __pyx_v_use_setstate;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":5
+ * cdef object _dict
+ * cdef bint use_setstate
+ * state = (self.name,) # <<<<<<<<<<<<<<
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None:
+ */
+ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_v_self->name);
+ __Pyx_GIVEREF(__pyx_v_self->name);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v_self->name)) __PYX_ERR(1, 5, __pyx_L1_error);
+ __pyx_v_state = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":6
+ * cdef bint use_setstate
+ * state = (self.name,)
+ * _dict = getattr(self, '__dict__', None) # <<<<<<<<<<<<<<
+ * if _dict is not None:
+ * state += (_dict,)
+ */
+ __pyx_t_1 = __Pyx_GetAttr3(((PyObject *)__pyx_v_self), __pyx_n_s_dict, Py_None); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v__dict = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":7
+ * state = (self.name,)
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None: # <<<<<<<<<<<<<<
+ * state += (_dict,)
+ * use_setstate = True
+ */
+ __pyx_t_2 = (__pyx_v__dict != Py_None);
+ if (__pyx_t_2) {
+
+ /* "(tree fragment)":8
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None:
+ * state += (_dict,) # <<<<<<<<<<<<<<
+ * use_setstate = True
+ * else:
+ */
+ __pyx_t_1 = PyTuple_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 8, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_v__dict);
+ __Pyx_GIVEREF(__pyx_v__dict);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_v__dict)) __PYX_ERR(1, 8, __pyx_L1_error);
+ __pyx_t_3 = PyNumber_InPlaceAdd(__pyx_v_state, __pyx_t_1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 8, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF_SET(__pyx_v_state, ((PyObject*)__pyx_t_3));
+ __pyx_t_3 = 0;
+
+ /* "(tree fragment)":9
+ * if _dict is not None:
+ * state += (_dict,)
+ * use_setstate = True # <<<<<<<<<<<<<<
+ * else:
+ * use_setstate = self.name is not None
+ */
+ __pyx_v_use_setstate = 1;
+
+ /* "(tree fragment)":7
+ * state = (self.name,)
+ * _dict = getattr(self, '__dict__', None)
+ * if _dict is not None: # <<<<<<<<<<<<<<
+ * state += (_dict,)
+ * use_setstate = True
+ */
+ goto __pyx_L3;
+ }
+
+ /* "(tree fragment)":11
+ * use_setstate = True
+ * else:
+ * use_setstate = self.name is not None # <<<<<<<<<<<<<<
+ * if use_setstate:
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state
+ */
+ /*else*/ {
+ __pyx_t_2 = (__pyx_v_self->name != Py_None);
+ __pyx_v_use_setstate = __pyx_t_2;
+ }
+ __pyx_L3:;
+
+ /* "(tree fragment)":12
+ * else:
+ * use_setstate = self.name is not None
+ * if use_setstate: # <<<<<<<<<<<<<<
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state
+ * else:
+ */
+ if (__pyx_v_use_setstate) {
+
+ /* "(tree fragment)":13
+ * use_setstate = self.name is not None
+ * if use_setstate:
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state # <<<<<<<<<<<<<<
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_GetModuleGlobalName(__pyx_t_3, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 13, __pyx_L1_error);
+ __Pyx_INCREF(__pyx_int_136983863);
+ __Pyx_GIVEREF(__pyx_int_136983863);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_136983863)) __PYX_ERR(1, 13, __pyx_L1_error);
+ __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(Py_None);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, Py_None)) __PYX_ERR(1, 13, __pyx_L1_error);
+ __pyx_t_4 = PyTuple_New(3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 13, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_3);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(1, 13, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 1, __pyx_t_1)) __PYX_ERR(1, 13, __pyx_L1_error);
+ __Pyx_INCREF(__pyx_v_state);
+ __Pyx_GIVEREF(__pyx_v_state);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 2, __pyx_v_state)) __PYX_ERR(1, 13, __pyx_L1_error);
+ __pyx_t_3 = 0;
+ __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_4;
+ __pyx_t_4 = 0;
+ goto __pyx_L0;
+
+ /* "(tree fragment)":12
+ * else:
+ * use_setstate = self.name is not None
+ * if use_setstate: # <<<<<<<<<<<<<<
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state
+ * else:
+ */
+ }
+
+ /* "(tree fragment)":15
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, None), state
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state) # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+ /*else*/ {
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_GetModuleGlobalName(__pyx_t_4, __pyx_n_s_pyx_unpickle_Enum); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_1 = PyTuple_New(3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ __Pyx_GIVEREF(((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))));
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 0, ((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))))) __PYX_ERR(1, 15, __pyx_L1_error);
+ __Pyx_INCREF(__pyx_int_136983863);
+ __Pyx_GIVEREF(__pyx_int_136983863);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_int_136983863)) __PYX_ERR(1, 15, __pyx_L1_error);
+ __Pyx_INCREF(__pyx_v_state);
+ __Pyx_GIVEREF(__pyx_v_state);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_v_state)) __PYX_ERR(1, 15, __pyx_L1_error);
+ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 15, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_4);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_4)) __PYX_ERR(1, 15, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(1, 15, __pyx_L1_error);
+ __pyx_t_4 = 0;
+ __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_3;
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * cdef tuple state
+ * cdef object _dict
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView.Enum.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_state);
+ __Pyx_XDECREF(__pyx_v__dict);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":16
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state)
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_MemviewEnum_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ PyObject *__pyx_v___pyx_state = 0;
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[1] = {0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 16, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+ (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 16, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 16, __pyx_L3_error)
+ }
+ } else if (unlikely(__pyx_nargs != 1)) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ }
+ __pyx_v___pyx_state = values[0];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 16, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_MemviewEnum_2__setstate_cython__(((struct __pyx_MemviewEnum_obj *)__pyx_v_self), __pyx_v___pyx_state);
+
+ /* function exit code */
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_MemviewEnum_2__setstate_cython__(struct __pyx_MemviewEnum_obj *__pyx_v_self, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":17
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state)
+ * def __setstate_cython__(self, __pyx_state):
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state) # <<<<<<<<<<<<<<
+ */
+ if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 17, __pyx_L1_error)
+ __pyx_t_1 = __pyx_unpickle_Enum__set_state(__pyx_v_self, ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 17, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "(tree fragment)":16
+ * else:
+ * return __pyx_unpickle_Enum, (type(self), 0x82a3537, state)
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state(self, __pyx_state)
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.Enum.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":349
+ * cdef __Pyx_TypeInfo *typeinfo
+ *
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<<
+ * self.obj = obj
+ * self.flags = flags
+ */
+
+/* Python wrapper */
+static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds); /*proto*/
+static int __pyx_memoryview___cinit__(PyObject *__pyx_v_self, PyObject *__pyx_args, PyObject *__pyx_kwds) {
+ PyObject *__pyx_v_obj = 0;
+ int __pyx_v_flags;
+ int __pyx_v_dtype_is_object;
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[3] = {0,0,0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__cinit__ (wrapper)", 0);
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 349, __pyx_L3_error)
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_obj,&__pyx_n_s_flags,&__pyx_n_s_dtype_is_object,0};
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_VARARGS(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_obj)) != 0)) {
+ (void)__Pyx_Arg_NewRef_VARARGS(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_flags)) != 0)) {
+ (void)__Pyx_Arg_NewRef_VARARGS(values[1]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error)
+ else {
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, 1); __PYX_ERR(1, 349, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (kw_args > 0) {
+ PyObject* value = __Pyx_GetKwValue_VARARGS(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_dtype_is_object);
+ if (value) { values[2] = __Pyx_Arg_NewRef_VARARGS(value); kw_args--; }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__cinit__") < 0)) __PYX_ERR(1, 349, __pyx_L3_error)
+ }
+ } else {
+ switch (__pyx_nargs) {
+ case 3: values[2] = __Pyx_Arg_VARARGS(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = __Pyx_Arg_VARARGS(__pyx_args, 1);
+ values[0] = __Pyx_Arg_VARARGS(__pyx_args, 0);
+ break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ }
+ __pyx_v_obj = values[0];
+ __pyx_v_flags = __Pyx_PyInt_As_int(values[1]); if (unlikely((__pyx_v_flags == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error)
+ if (values[2]) {
+ __pyx_v_dtype_is_object = __Pyx_PyObject_IsTrue(values[2]); if (unlikely((__pyx_v_dtype_is_object == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 349, __pyx_L3_error)
+ } else {
+ __pyx_v_dtype_is_object = ((int)0);
+ }
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__cinit__", 0, 2, 3, __pyx_nargs); __PYX_ERR(1, 349, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return -1;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_obj, __pyx_v_flags, __pyx_v_dtype_is_object);
+
+ /* function exit code */
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_VARARGS(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview___cinit__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj, int __pyx_v_flags, int __pyx_v_dtype_is_object) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ Py_intptr_t __pyx_t_4;
+ size_t __pyx_t_5;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__cinit__", 0);
+
+ /* "View.MemoryView":350
+ *
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
+ * self.obj = obj # <<<<<<<<<<<<<<
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None:
+ */
+ __Pyx_INCREF(__pyx_v_obj);
+ __Pyx_GIVEREF(__pyx_v_obj);
+ __Pyx_GOTREF(__pyx_v_self->obj);
+ __Pyx_DECREF(__pyx_v_self->obj);
+ __pyx_v_self->obj = __pyx_v_obj;
+
+ /* "View.MemoryView":351
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False):
+ * self.obj = obj
+ * self.flags = flags # <<<<<<<<<<<<<<
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ */
+ __pyx_v_self->flags = __pyx_v_flags;
+
+ /* "View.MemoryView":352
+ * self.obj = obj
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL:
+ */
+ __pyx_t_2 = (((PyObject *)Py_TYPE(((PyObject *)__pyx_v_self))) == ((PyObject *)__pyx_memoryview_type));
+ if (!__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L4_bool_binop_done;
+ }
+ __pyx_t_2 = (__pyx_v_obj != Py_None);
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L4_bool_binop_done:;
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":353
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags) # <<<<<<<<<<<<<<
+ * if self.view.obj == NULL:
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ */
+ __pyx_t_3 = __Pyx_GetBuffer(__pyx_v_obj, (&__pyx_v_self->view), __pyx_v_flags); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 353, __pyx_L1_error)
+
+ /* "View.MemoryView":354
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL: # <<<<<<<<<<<<<<
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ * Py_INCREF(Py_None)
+ */
+ __pyx_t_1 = (((PyObject *)__pyx_v_self->view.obj) == NULL);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":355
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL:
+ * (<__pyx_buffer *> &self.view).obj = Py_None # <<<<<<<<<<<<<<
+ * Py_INCREF(Py_None)
+ *
+ */
+ ((Py_buffer *)(&__pyx_v_self->view))->obj = Py_None;
+
+ /* "View.MemoryView":356
+ * if self.view.obj == NULL:
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ * Py_INCREF(Py_None) # <<<<<<<<<<<<<<
+ *
+ * if not __PYX_CYTHON_ATOMICS_ENABLED():
+ */
+ Py_INCREF(Py_None);
+
+ /* "View.MemoryView":354
+ * if type(self) is memoryview or obj is not None:
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL: # <<<<<<<<<<<<<<
+ * (<__pyx_buffer *> &self.view).obj = Py_None
+ * Py_INCREF(Py_None)
+ */
+ }
+
+ /* "View.MemoryView":352
+ * self.obj = obj
+ * self.flags = flags
+ * if type(self) is memoryview or obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_GetBuffer(obj, &self.view, flags)
+ * if self.view.obj == NULL:
+ */
+ }
+
+ /* "View.MemoryView":358
+ * Py_INCREF(Py_None)
+ *
+ * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<<
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < 8:
+ */
+ __pyx_t_1 = (!__PYX_CYTHON_ATOMICS_ENABLED());
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":360
+ * if not __PYX_CYTHON_ATOMICS_ENABLED():
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < 8: # <<<<<<<<<<<<<<
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ */
+ __pyx_t_1 = (__pyx_memoryview_thread_locks_used < 8);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":361
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < 8:
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL:
+ */
+ __pyx_v_self->lock = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
+
+ /* "View.MemoryView":362
+ * if __pyx_memoryview_thread_locks_used < 8:
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1 # <<<<<<<<<<<<<<
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock()
+ */
+ __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used + 1);
+
+ /* "View.MemoryView":360
+ * if not __PYX_CYTHON_ATOMICS_ENABLED():
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < 8: # <<<<<<<<<<<<<<
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ */
+ }
+
+ /* "View.MemoryView":363
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL:
+ */
+ __pyx_t_1 = (__pyx_v_self->lock == NULL);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":364
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock() # <<<<<<<<<<<<<<
+ * if self.lock is NULL:
+ * raise MemoryError
+ */
+ __pyx_v_self->lock = PyThread_allocate_lock();
+
+ /* "View.MemoryView":365
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ *
+ */
+ __pyx_t_1 = (__pyx_v_self->lock == NULL);
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":366
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL:
+ * raise MemoryError # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_FORMAT:
+ */
+ PyErr_NoMemory(); __PYX_ERR(1, 366, __pyx_L1_error)
+
+ /* "View.MemoryView":365
+ * if self.lock is NULL:
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ *
+ */
+ }
+
+ /* "View.MemoryView":363
+ * self.lock = __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]
+ * __pyx_memoryview_thread_locks_used += 1
+ * if self.lock is NULL: # <<<<<<<<<<<<<<
+ * self.lock = PyThread_allocate_lock()
+ * if self.lock is NULL:
+ */
+ }
+
+ /* "View.MemoryView":358
+ * Py_INCREF(Py_None)
+ *
+ * if not __PYX_CYTHON_ATOMICS_ENABLED(): # <<<<<<<<<<<<<<
+ * global __pyx_memoryview_thread_locks_used
+ * if __pyx_memoryview_thread_locks_used < 8:
+ */
+ }
+
+ /* "View.MemoryView":368
+ * raise MemoryError
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":369
+ *
+ * if flags & PyBUF_FORMAT:
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0') # <<<<<<<<<<<<<<
+ * else:
+ * self.dtype_is_object = dtype_is_object
+ */
+ __pyx_t_2 = ((__pyx_v_self->view.format[0]) == 'O');
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L12_bool_binop_done;
+ }
+ __pyx_t_2 = ((__pyx_v_self->view.format[1]) == '\x00');
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L12_bool_binop_done:;
+ __pyx_v_self->dtype_is_object = __pyx_t_1;
+
+ /* "View.MemoryView":368
+ * raise MemoryError
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ * else:
+ */
+ goto __pyx_L11;
+ }
+
+ /* "View.MemoryView":371
+ * self.dtype_is_object = (self.view.format[0] == b'O' and self.view.format[1] == b'\0')
+ * else:
+ * self.dtype_is_object = dtype_is_object # <<<<<<<<<<<<<<
+ *
+ * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0
+ */
+ /*else*/ {
+ __pyx_v_self->dtype_is_object = __pyx_v_dtype_is_object;
+ }
+ __pyx_L11:;
+
+ /* "View.MemoryView":373
+ * self.dtype_is_object = dtype_is_object
+ *
+ * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0 # <<<<<<<<<<<<<<
+ * self.typeinfo = NULL
+ *
+ */
+ #ifndef CYTHON_WITHOUT_ASSERTIONS
+ if (unlikely(__pyx_assertions_enabled())) {
+ __pyx_t_4 = ((Py_intptr_t)((void *)(&__pyx_v_self->acquisition_count)));
+ __pyx_t_5 = (sizeof(__pyx_atomic_int_type));
+ if (unlikely(__pyx_t_5 == 0)) {
+ PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
+ __PYX_ERR(1, 373, __pyx_L1_error)
+ }
+ __pyx_t_1 = ((__pyx_t_4 % __pyx_t_5) == 0);
+ if (unlikely(!__pyx_t_1)) {
+ __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
+ __PYX_ERR(1, 373, __pyx_L1_error)
+ }
+ }
+ #else
+ if ((1)); else __PYX_ERR(1, 373, __pyx_L1_error)
+ #endif
+
+ /* "View.MemoryView":374
+ *
+ * assert (&self.acquisition_count) % sizeof(__pyx_atomic_int_type) == 0
+ * self.typeinfo = NULL # <<<<<<<<<<<<<<
+ *
+ * def __dealloc__(memoryview self):
+ */
+ __pyx_v_self->typeinfo = NULL;
+
+ /* "View.MemoryView":349
+ * cdef __Pyx_TypeInfo *typeinfo
+ *
+ * def __cinit__(memoryview self, object obj, int flags, bint dtype_is_object=False): # <<<<<<<<<<<<<<
+ * self.obj = obj
+ * self.flags = flags
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__cinit__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":376
+ * self.typeinfo = NULL
+ *
+ * def __dealloc__(memoryview self): # <<<<<<<<<<<<<<
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ */
+
+/* Python wrapper */
+static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_memoryview___dealloc__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_2__dealloc__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ int __pyx_v_i;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ PyThread_type_lock __pyx_t_5;
+ PyThread_type_lock __pyx_t_6;
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "View.MemoryView":377
+ *
+ * def __dealloc__(memoryview self):
+ * if self.obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ */
+ __pyx_t_1 = (__pyx_v_self->obj != Py_None);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":378
+ * def __dealloc__(memoryview self):
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view) # <<<<<<<<<<<<<<
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ *
+ */
+ __Pyx_ReleaseBuffer((&__pyx_v_self->view));
+
+ /* "View.MemoryView":377
+ *
+ * def __dealloc__(memoryview self):
+ * if self.obj is not None: # <<<<<<<<<<<<<<
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":379
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<<
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL
+ */
+ __pyx_t_1 = (((Py_buffer *)(&__pyx_v_self->view))->obj == Py_None);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":381
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None:
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL # <<<<<<<<<<<<<<
+ * Py_DECREF(Py_None)
+ *
+ */
+ ((Py_buffer *)(&__pyx_v_self->view))->obj = NULL;
+
+ /* "View.MemoryView":382
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL
+ * Py_DECREF(Py_None) # <<<<<<<<<<<<<<
+ *
+ * cdef int i
+ */
+ Py_DECREF(Py_None);
+
+ /* "View.MemoryView":379
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ * elif (<__pyx_buffer *> &self.view).obj == Py_None: # <<<<<<<<<<<<<<
+ *
+ * (<__pyx_buffer *> &self.view).obj = NULL
+ */
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":386
+ * cdef int i
+ * global __pyx_memoryview_thread_locks_used
+ * if self.lock != NULL: # <<<<<<<<<<<<<<
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ */
+ __pyx_t_1 = (__pyx_v_self->lock != NULL);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":387
+ * global __pyx_memoryview_thread_locks_used
+ * if self.lock != NULL:
+ * for i in range(__pyx_memoryview_thread_locks_used): # <<<<<<<<<<<<<<
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1
+ */
+ __pyx_t_2 = __pyx_memoryview_thread_locks_used;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":388
+ * if self.lock != NULL:
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used:
+ */
+ __pyx_t_1 = ((__pyx_memoryview_thread_locks[__pyx_v_i]) == __pyx_v_self->lock);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":389
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1 # <<<<<<<<<<<<<<
+ * if i != __pyx_memoryview_thread_locks_used:
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ */
+ __pyx_memoryview_thread_locks_used = (__pyx_memoryview_thread_locks_used - 1);
+
+ /* "View.MemoryView":390
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ */
+ __pyx_t_1 = (__pyx_v_i != __pyx_memoryview_thread_locks_used);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":392
+ * if i != __pyx_memoryview_thread_locks_used:
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i]) # <<<<<<<<<<<<<<
+ * break
+ * else:
+ */
+ __pyx_t_5 = (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]);
+ __pyx_t_6 = (__pyx_memoryview_thread_locks[__pyx_v_i]);
+
+ /* "View.MemoryView":391
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used:
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = ( # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ * break
+ */
+ (__pyx_memoryview_thread_locks[__pyx_v_i]) = __pyx_t_5;
+ (__pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used]) = __pyx_t_6;
+
+ /* "View.MemoryView":390
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ */
+ }
+
+ /* "View.MemoryView":393
+ * __pyx_memoryview_thread_locks[i], __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used] = (
+ * __pyx_memoryview_thread_locks[__pyx_memoryview_thread_locks_used], __pyx_memoryview_thread_locks[i])
+ * break # <<<<<<<<<<<<<<
+ * else:
+ * PyThread_free_lock(self.lock)
+ */
+ goto __pyx_L6_break;
+
+ /* "View.MemoryView":388
+ * if self.lock != NULL:
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock: # <<<<<<<<<<<<<<
+ * __pyx_memoryview_thread_locks_used -= 1
+ * if i != __pyx_memoryview_thread_locks_used:
+ */
+ }
+ }
+ /*else*/ {
+
+ /* "View.MemoryView":395
+ * break
+ * else:
+ * PyThread_free_lock(self.lock) # <<<<<<<<<<<<<<
+ *
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL:
+ */
+ PyThread_free_lock(__pyx_v_self->lock);
+ }
+ __pyx_L6_break:;
+
+ /* "View.MemoryView":386
+ * cdef int i
+ * global __pyx_memoryview_thread_locks_used
+ * if self.lock != NULL: # <<<<<<<<<<<<<<
+ * for i in range(__pyx_memoryview_thread_locks_used):
+ * if __pyx_memoryview_thread_locks[i] is self.lock:
+ */
+ }
+
+ /* "View.MemoryView":376
+ * self.typeinfo = NULL
+ *
+ * def __dealloc__(memoryview self): # <<<<<<<<<<<<<<
+ * if self.obj is not None:
+ * __Pyx_ReleaseBuffer(&self.view)
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":397
+ * PyThread_free_lock(self.lock)
+ *
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dim
+ * cdef char *itemp = self.view.buf
+ */
+
+static char *__pyx_memoryview_get_item_pointer(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
+ Py_ssize_t __pyx_v_dim;
+ char *__pyx_v_itemp;
+ PyObject *__pyx_v_idx = NULL;
+ char *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ Py_ssize_t __pyx_t_3;
+ PyObject *(*__pyx_t_4)(PyObject *);
+ PyObject *__pyx_t_5 = NULL;
+ Py_ssize_t __pyx_t_6;
+ char *__pyx_t_7;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("get_item_pointer", 0);
+
+ /* "View.MemoryView":399
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL:
+ * cdef Py_ssize_t dim
+ * cdef char *itemp = self.view.buf # <<<<<<<<<<<<<<
+ *
+ * for dim, idx in enumerate(index):
+ */
+ __pyx_v_itemp = ((char *)__pyx_v_self->view.buf);
+
+ /* "View.MemoryView":401
+ * cdef char *itemp = self.view.buf
+ *
+ * for dim, idx in enumerate(index): # <<<<<<<<<<<<<<
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ *
+ */
+ __pyx_t_1 = 0;
+ if (likely(PyList_CheckExact(__pyx_v_index)) || PyTuple_CheckExact(__pyx_v_index)) {
+ __pyx_t_2 = __pyx_v_index; __Pyx_INCREF(__pyx_t_2); __pyx_t_3 = 0;
+ __pyx_t_4 = NULL;
+ } else {
+ __pyx_t_3 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_index); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 401, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 401, __pyx_L1_error)
+ }
+ for (;;) {
+ if (likely(!__pyx_t_4)) {
+ if (likely(PyList_CheckExact(__pyx_t_2))) {
+ if (__pyx_t_3 >= PyList_GET_SIZE(__pyx_t_2)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_5 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(1, 401, __pyx_L1_error)
+ #else
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 401, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ #endif
+ } else {
+ if (__pyx_t_3 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_5 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_3); __Pyx_INCREF(__pyx_t_5); __pyx_t_3++; if (unlikely((0 < 0))) __PYX_ERR(1, 401, __pyx_L1_error)
+ #else
+ __pyx_t_5 = PySequence_ITEM(__pyx_t_2, __pyx_t_3); __pyx_t_3++; if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 401, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ #endif
+ }
+ } else {
+ __pyx_t_5 = __pyx_t_4(__pyx_t_2);
+ if (unlikely(!__pyx_t_5)) {
+ PyObject* exc_type = PyErr_Occurred();
+ if (exc_type) {
+ if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+ else __PYX_ERR(1, 401, __pyx_L1_error)
+ }
+ break;
+ }
+ __Pyx_GOTREF(__pyx_t_5);
+ }
+ __Pyx_XDECREF_SET(__pyx_v_idx, __pyx_t_5);
+ __pyx_t_5 = 0;
+ __pyx_v_dim = __pyx_t_1;
+ __pyx_t_1 = (__pyx_t_1 + 1);
+
+ /* "View.MemoryView":402
+ *
+ * for dim, idx in enumerate(index):
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim) # <<<<<<<<<<<<<<
+ *
+ * return itemp
+ */
+ __pyx_t_6 = __Pyx_PyIndex_AsSsize_t(__pyx_v_idx); if (unlikely((__pyx_t_6 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 402, __pyx_L1_error)
+ __pyx_t_7 = __pyx_pybuffer_index((&__pyx_v_self->view), __pyx_v_itemp, __pyx_t_6, __pyx_v_dim); if (unlikely(__pyx_t_7 == ((char *)NULL))) __PYX_ERR(1, 402, __pyx_L1_error)
+ __pyx_v_itemp = __pyx_t_7;
+
+ /* "View.MemoryView":401
+ * cdef char *itemp = self.view.buf
+ *
+ * for dim, idx in enumerate(index): # <<<<<<<<<<<<<<
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ *
+ */
+ }
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "View.MemoryView":404
+ * itemp = pybuffer_index(&self.view, itemp, idx, dim)
+ *
+ * return itemp # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = __pyx_v_itemp;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":397
+ * PyThread_free_lock(self.lock)
+ *
+ * cdef char *get_item_pointer(memoryview self, object index) except NULL: # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dim
+ * cdef char *itemp = self.view.buf
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.get_item_pointer", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_idx);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":407
+ *
+ *
+ * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<<
+ * if index is Ellipsis:
+ * return self
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index); /*proto*/
+static PyObject *__pyx_memoryview___getitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getitem__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_4__getitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index) {
+ PyObject *__pyx_v_have_slices = NULL;
+ PyObject *__pyx_v_indices = NULL;
+ char *__pyx_v_itemp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ char *__pyx_t_5;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__getitem__", 0);
+
+ /* "View.MemoryView":408
+ *
+ * def __getitem__(memoryview self, object index):
+ * if index is Ellipsis: # <<<<<<<<<<<<<<
+ * return self
+ *
+ */
+ __pyx_t_1 = (__pyx_v_index == __pyx_builtin_Ellipsis);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":409
+ * def __getitem__(memoryview self, object index):
+ * if index is Ellipsis:
+ * return self # <<<<<<<<<<<<<<
+ *
+ * have_slices, indices = _unellipsify(index, self.view.ndim)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF((PyObject *)__pyx_v_self);
+ __pyx_r = ((PyObject *)__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":408
+ *
+ * def __getitem__(memoryview self, object index):
+ * if index is Ellipsis: # <<<<<<<<<<<<<<
+ * return self
+ *
+ */
+ }
+
+ /* "View.MemoryView":411
+ * return self
+ *
+ * have_slices, indices = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * cdef char *itemp
+ */
+ __pyx_t_2 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 411, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ if (likely(__pyx_t_2 != Py_None)) {
+ PyObject* sequence = __pyx_t_2;
+ Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+ if (unlikely(size != 2)) {
+ if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+ else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+ __PYX_ERR(1, 411, __pyx_L1_error)
+ }
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_3 = PyTuple_GET_ITEM(sequence, 0);
+ __pyx_t_4 = PyTuple_GET_ITEM(sequence, 1);
+ __Pyx_INCREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_t_4);
+ #else
+ __pyx_t_3 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 411, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 411, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ #endif
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ } else {
+ __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 411, __pyx_L1_error)
+ }
+ __pyx_v_have_slices = __pyx_t_3;
+ __pyx_t_3 = 0;
+ __pyx_v_indices = __pyx_t_4;
+ __pyx_t_4 = 0;
+
+ /* "View.MemoryView":414
+ *
+ * cdef char *itemp
+ * if have_slices: # <<<<<<<<<<<<<<
+ * return memview_slice(self, indices)
+ * else:
+ */
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 414, __pyx_L1_error)
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":415
+ * cdef char *itemp
+ * if have_slices:
+ * return memview_slice(self, indices) # <<<<<<<<<<<<<<
+ * else:
+ * itemp = self.get_item_pointer(indices)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = ((PyObject *)__pyx_memview_slice(__pyx_v_self, __pyx_v_indices)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 415, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":414
+ *
+ * cdef char *itemp
+ * if have_slices: # <<<<<<<<<<<<<<
+ * return memview_slice(self, indices)
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":417
+ * return memview_slice(self, indices)
+ * else:
+ * itemp = self.get_item_pointer(indices) # <<<<<<<<<<<<<<
+ * return self.convert_item_to_object(itemp)
+ *
+ */
+ /*else*/ {
+ __pyx_t_5 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_indices); if (unlikely(__pyx_t_5 == ((char *)NULL))) __PYX_ERR(1, 417, __pyx_L1_error)
+ __pyx_v_itemp = __pyx_t_5;
+
+ /* "View.MemoryView":418
+ * else:
+ * itemp = self.get_item_pointer(indices)
+ * return self.convert_item_to_object(itemp) # <<<<<<<<<<<<<<
+ *
+ * def __setitem__(memoryview self, object index, object value):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->convert_item_to_object(__pyx_v_self, __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 418, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":407
+ *
+ *
+ * def __getitem__(memoryview self, object index): # <<<<<<<<<<<<<<
+ * if index is Ellipsis:
+ * return self
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__getitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_have_slices);
+ __Pyx_XDECREF(__pyx_v_indices);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":420
+ * return self.convert_item_to_object(itemp)
+ *
+ * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<<
+ * if self.view.readonly:
+ * raise TypeError, "Cannot assign to read-only memoryview"
+ */
+
+/* Python wrapper */
+static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value); /*proto*/
+static int __pyx_memoryview___setitem__(PyObject *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setitem__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((PyObject *)__pyx_v_index), ((PyObject *)__pyx_v_value));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_6__setitem__(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+ PyObject *__pyx_v_have_slices = NULL;
+ PyObject *__pyx_v_obj = NULL;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setitem__", 0);
+ __Pyx_INCREF(__pyx_v_index);
+
+ /* "View.MemoryView":421
+ *
+ * def __setitem__(memoryview self, object index, object value):
+ * if self.view.readonly: # <<<<<<<<<<<<<<
+ * raise TypeError, "Cannot assign to read-only memoryview"
+ *
+ */
+ if (unlikely(__pyx_v_self->view.readonly)) {
+
+ /* "View.MemoryView":422
+ * def __setitem__(memoryview self, object index, object value):
+ * if self.view.readonly:
+ * raise TypeError, "Cannot assign to read-only memoryview" # <<<<<<<<<<<<<<
+ *
+ * have_slices, index = _unellipsify(index, self.view.ndim)
+ */
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_Cannot_assign_to_read_only_memor, 0, 0);
+ __PYX_ERR(1, 422, __pyx_L1_error)
+
+ /* "View.MemoryView":421
+ *
+ * def __setitem__(memoryview self, object index, object value):
+ * if self.view.readonly: # <<<<<<<<<<<<<<
+ * raise TypeError, "Cannot assign to read-only memoryview"
+ *
+ */
+ }
+
+ /* "View.MemoryView":424
+ * raise TypeError, "Cannot assign to read-only memoryview"
+ *
+ * have_slices, index = _unellipsify(index, self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * if have_slices:
+ */
+ __pyx_t_1 = _unellipsify(__pyx_v_index, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 424, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (likely(__pyx_t_1 != Py_None)) {
+ PyObject* sequence = __pyx_t_1;
+ Py_ssize_t size = __Pyx_PySequence_SIZE(sequence);
+ if (unlikely(size != 2)) {
+ if (size > 2) __Pyx_RaiseTooManyValuesError(2);
+ else if (size >= 0) __Pyx_RaiseNeedMoreValuesError(size);
+ __PYX_ERR(1, 424, __pyx_L1_error)
+ }
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_2 = PyTuple_GET_ITEM(sequence, 0);
+ __pyx_t_3 = PyTuple_GET_ITEM(sequence, 1);
+ __Pyx_INCREF(__pyx_t_2);
+ __Pyx_INCREF(__pyx_t_3);
+ #else
+ __pyx_t_2 = PySequence_ITEM(sequence, 0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 424, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PySequence_ITEM(sequence, 1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 424, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ #endif
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ } else {
+ __Pyx_RaiseNoneNotIterableError(); __PYX_ERR(1, 424, __pyx_L1_error)
+ }
+ __pyx_v_have_slices = __pyx_t_2;
+ __pyx_t_2 = 0;
+ __Pyx_DECREF_SET(__pyx_v_index, __pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":426
+ * have_slices, index = _unellipsify(index, self.view.ndim)
+ *
+ * if have_slices: # <<<<<<<<<<<<<<
+ * obj = self.is_slice(value)
+ * if obj:
+ */
+ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_have_slices); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 426, __pyx_L1_error)
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":427
+ *
+ * if have_slices:
+ * obj = self.is_slice(value) # <<<<<<<<<<<<<<
+ * if obj:
+ * self.setitem_slice_assignment(self[index], obj)
+ */
+ __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->is_slice(__pyx_v_self, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 427, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_obj = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":428
+ * if have_slices:
+ * obj = self.is_slice(value)
+ * if obj: # <<<<<<<<<<<<<<
+ * self.setitem_slice_assignment(self[index], obj)
+ * else:
+ */
+ __pyx_t_4 = __Pyx_PyObject_IsTrue(__pyx_v_obj); if (unlikely((__pyx_t_4 < 0))) __PYX_ERR(1, 428, __pyx_L1_error)
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":429
+ * obj = self.is_slice(value)
+ * if obj:
+ * self.setitem_slice_assignment(self[index], obj) # <<<<<<<<<<<<<<
+ * else:
+ * self.setitem_slice_assign_scalar(self[index], value)
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 429, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assignment(__pyx_v_self, __pyx_t_1, __pyx_v_obj); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 429, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "View.MemoryView":428
+ * if have_slices:
+ * obj = self.is_slice(value)
+ * if obj: # <<<<<<<<<<<<<<
+ * self.setitem_slice_assignment(self[index], obj)
+ * else:
+ */
+ goto __pyx_L5;
+ }
+
+ /* "View.MemoryView":431
+ * self.setitem_slice_assignment(self[index], obj)
+ * else:
+ * self.setitem_slice_assign_scalar(self[index], value) # <<<<<<<<<<<<<<
+ * else:
+ * self.setitem_indexed(index, value)
+ */
+ /*else*/ {
+ __pyx_t_3 = __Pyx_PyObject_GetItem(((PyObject *)__pyx_v_self), __pyx_v_index); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 431, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ if (!(likely(((__pyx_t_3) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_3, __pyx_memoryview_type))))) __PYX_ERR(1, 431, __pyx_L1_error)
+ __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_slice_assign_scalar(__pyx_v_self, ((struct __pyx_memoryview_obj *)__pyx_t_3), __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 431, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ }
+ __pyx_L5:;
+
+ /* "View.MemoryView":426
+ * have_slices, index = _unellipsify(index, self.view.ndim)
+ *
+ * if have_slices: # <<<<<<<<<<<<<<
+ * obj = self.is_slice(value)
+ * if obj:
+ */
+ goto __pyx_L4;
+ }
+
+ /* "View.MemoryView":433
+ * self.setitem_slice_assign_scalar(self[index], value)
+ * else:
+ * self.setitem_indexed(index, value) # <<<<<<<<<<<<<<
+ *
+ * cdef is_slice(self, obj):
+ */
+ /*else*/ {
+ __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->setitem_indexed(__pyx_v_self, __pyx_v_index, __pyx_v_value); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 433, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ }
+ __pyx_L4:;
+
+ /* "View.MemoryView":420
+ * return self.convert_item_to_object(itemp)
+ *
+ * def __setitem__(memoryview self, object index, object value): # <<<<<<<<<<<<<<
+ * if self.view.readonly:
+ * raise TypeError, "Cannot assign to read-only memoryview"
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__setitem__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_have_slices);
+ __Pyx_XDECREF(__pyx_v_obj);
+ __Pyx_XDECREF(__pyx_v_index);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":435
+ * self.setitem_indexed(index, value)
+ *
+ * cdef is_slice(self, obj): # <<<<<<<<<<<<<<
+ * if not isinstance(obj, memoryview):
+ * try:
+ */
+
+static PyObject *__pyx_memoryview_is_slice(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_obj) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ PyObject *__pyx_t_7 = NULL;
+ PyObject *__pyx_t_8 = NULL;
+ int __pyx_t_9;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("is_slice", 0);
+ __Pyx_INCREF(__pyx_v_obj);
+
+ /* "View.MemoryView":436
+ *
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<<
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_obj, __pyx_memoryview_type);
+ __pyx_t_2 = (!__pyx_t_1);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":437
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview):
+ * try: # <<<<<<<<<<<<<<
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ */
+ {
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ __Pyx_ExceptionSave(&__pyx_t_3, &__pyx_t_4, &__pyx_t_5);
+ __Pyx_XGOTREF(__pyx_t_3);
+ __Pyx_XGOTREF(__pyx_t_4);
+ __Pyx_XGOTREF(__pyx_t_5);
+ /*try:*/ {
+
+ /* "View.MemoryView":438
+ * if not isinstance(obj, memoryview):
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<<
+ * self.dtype_is_object)
+ * except TypeError:
+ */
+ __pyx_t_6 = __Pyx_PyInt_From_int(((__pyx_v_self->flags & (~PyBUF_WRITABLE)) | PyBUF_ANY_CONTIGUOUS)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 438, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_6);
+
+ /* "View.MemoryView":439
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object) # <<<<<<<<<<<<<<
+ * except TypeError:
+ * return None
+ */
+ __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_self->dtype_is_object); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 439, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_7);
+
+ /* "View.MemoryView":438
+ * if not isinstance(obj, memoryview):
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS, # <<<<<<<<<<<<<<
+ * self.dtype_is_object)
+ * except TypeError:
+ */
+ __pyx_t_8 = PyTuple_New(3); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 438, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __Pyx_INCREF(__pyx_v_obj);
+ __Pyx_GIVEREF(__pyx_v_obj);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 0, __pyx_v_obj)) __PYX_ERR(1, 438, __pyx_L4_error);
+ __Pyx_GIVEREF(__pyx_t_6);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 1, __pyx_t_6)) __PYX_ERR(1, 438, __pyx_L4_error);
+ __Pyx_GIVEREF(__pyx_t_7);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_8, 2, __pyx_t_7)) __PYX_ERR(1, 438, __pyx_L4_error);
+ __pyx_t_6 = 0;
+ __pyx_t_7 = 0;
+ __pyx_t_7 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_8, NULL); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 438, __pyx_L4_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ __Pyx_DECREF_SET(__pyx_v_obj, __pyx_t_7);
+ __pyx_t_7 = 0;
+
+ /* "View.MemoryView":437
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview):
+ * try: # <<<<<<<<<<<<<<
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ */
+ }
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ goto __pyx_L9_try_end;
+ __pyx_L4_error:;
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_XDECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+ /* "View.MemoryView":440
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ * except TypeError: # <<<<<<<<<<<<<<
+ * return None
+ *
+ */
+ __pyx_t_9 = __Pyx_PyErr_ExceptionMatches(__pyx_builtin_TypeError);
+ if (__pyx_t_9) {
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ if (__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_6) < 0) __PYX_ERR(1, 440, __pyx_L6_except_error)
+ __Pyx_XGOTREF(__pyx_t_7);
+ __Pyx_XGOTREF(__pyx_t_8);
+ __Pyx_XGOTREF(__pyx_t_6);
+
+ /* "View.MemoryView":441
+ * self.dtype_is_object)
+ * except TypeError:
+ * return None # <<<<<<<<<<<<<<
+ *
+ * return obj
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ goto __pyx_L7_except_return;
+ }
+ goto __pyx_L6_except_error;
+
+ /* "View.MemoryView":437
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview):
+ * try: # <<<<<<<<<<<<<<
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ * self.dtype_is_object)
+ */
+ __pyx_L6_except_error:;
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_XGIVEREF(__pyx_t_5);
+ __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+ goto __pyx_L1_error;
+ __pyx_L7_except_return:;
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_XGIVEREF(__pyx_t_5);
+ __Pyx_ExceptionReset(__pyx_t_3, __pyx_t_4, __pyx_t_5);
+ goto __pyx_L0;
+ __pyx_L9_try_end:;
+ }
+
+ /* "View.MemoryView":436
+ *
+ * cdef is_slice(self, obj):
+ * if not isinstance(obj, memoryview): # <<<<<<<<<<<<<<
+ * try:
+ * obj = memoryview(obj, self.flags & ~PyBUF_WRITABLE | PyBUF_ANY_CONTIGUOUS,
+ */
+ }
+
+ /* "View.MemoryView":443
+ * return None
+ *
+ * return obj # <<<<<<<<<<<<<<
+ *
+ * cdef setitem_slice_assignment(self, dst, src):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_obj);
+ __pyx_r = __pyx_v_obj;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":435
+ * self.setitem_indexed(index, value)
+ *
+ * cdef is_slice(self, obj): # <<<<<<<<<<<<<<
+ * if not isinstance(obj, memoryview):
+ * try:
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_XDECREF(__pyx_t_8);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_obj);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":445
+ * return obj
+ *
+ * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice dst_slice
+ * cdef __Pyx_memviewslice src_slice
+ */
+
+static PyObject *__pyx_memoryview_setitem_slice_assignment(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_dst, PyObject *__pyx_v_src) {
+ __Pyx_memviewslice __pyx_v_dst_slice;
+ __Pyx_memviewslice __pyx_v_src_slice;
+ __Pyx_memviewslice __pyx_v_msrc;
+ __Pyx_memviewslice __pyx_v_mdst;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("setitem_slice_assignment", 0);
+
+ /* "View.MemoryView":448
+ * cdef __Pyx_memviewslice dst_slice
+ * cdef __Pyx_memviewslice src_slice
+ * cdef __Pyx_memviewslice msrc = get_slice_from_memview(src, &src_slice)[0] # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0]
+ *
+ */
+ if (!(likely(((__pyx_v_src) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_src, __pyx_memoryview_type))))) __PYX_ERR(1, 448, __pyx_L1_error)
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_src), (&__pyx_v_src_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 448, __pyx_L1_error)
+ __pyx_v_msrc = (__pyx_t_1[0]);
+
+ /* "View.MemoryView":449
+ * cdef __Pyx_memviewslice src_slice
+ * cdef __Pyx_memviewslice msrc = get_slice_from_memview(src, &src_slice)[0]
+ * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0] # <<<<<<<<<<<<<<
+ *
+ * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object)
+ */
+ if (!(likely(((__pyx_v_dst) == Py_None) || likely(__Pyx_TypeTest(__pyx_v_dst, __pyx_memoryview_type))))) __PYX_ERR(1, 449, __pyx_L1_error)
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(((struct __pyx_memoryview_obj *)__pyx_v_dst), (&__pyx_v_dst_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 449, __pyx_L1_error)
+ __pyx_v_mdst = (__pyx_t_1[0]);
+
+ /* "View.MemoryView":451
+ * cdef __Pyx_memviewslice mdst = get_slice_from_memview(dst, &dst_slice)[0]
+ *
+ * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value):
+ */
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_src, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 451, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_3 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 451, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_v_dst, __pyx_n_s_ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 451, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = __Pyx_PyInt_As_int(__pyx_t_2); if (unlikely((__pyx_t_4 == (int)-1) && PyErr_Occurred())) __PYX_ERR(1, 451, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_5 = __pyx_memoryview_copy_contents(__pyx_v_msrc, __pyx_v_mdst, __pyx_t_3, __pyx_t_4, __pyx_v_self->dtype_is_object); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 451, __pyx_L1_error)
+
+ /* "View.MemoryView":445
+ * return obj
+ *
+ * cdef setitem_slice_assignment(self, dst, src): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice dst_slice
+ * cdef __Pyx_memviewslice src_slice
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assignment", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":453
+ * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object)
+ *
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<<
+ * cdef int array[128]
+ * cdef void *tmp = NULL
+ */
+
+static PyObject *__pyx_memoryview_setitem_slice_assign_scalar(struct __pyx_memoryview_obj *__pyx_v_self, struct __pyx_memoryview_obj *__pyx_v_dst, PyObject *__pyx_v_value) {
+ int __pyx_v_array[0x80];
+ void *__pyx_v_tmp;
+ void *__pyx_v_item;
+ __Pyx_memviewslice *__pyx_v_dst_slice;
+ __Pyx_memviewslice __pyx_v_tmp_slice;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ char const *__pyx_t_6;
+ PyObject *__pyx_t_7 = NULL;
+ PyObject *__pyx_t_8 = NULL;
+ PyObject *__pyx_t_9 = NULL;
+ PyObject *__pyx_t_10 = NULL;
+ PyObject *__pyx_t_11 = NULL;
+ PyObject *__pyx_t_12 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("setitem_slice_assign_scalar", 0);
+
+ /* "View.MemoryView":455
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value):
+ * cdef int array[128]
+ * cdef void *tmp = NULL # <<<<<<<<<<<<<<
+ * cdef void *item
+ *
+ */
+ __pyx_v_tmp = NULL;
+
+ /* "View.MemoryView":460
+ * cdef __Pyx_memviewslice *dst_slice
+ * cdef __Pyx_memviewslice tmp_slice
+ * dst_slice = get_slice_from_memview(dst, &tmp_slice) # <<<<<<<<<<<<<<
+ *
+ * if self.view.itemsize > sizeof(array):
+ */
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_dst, (&__pyx_v_tmp_slice)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 460, __pyx_L1_error)
+ __pyx_v_dst_slice = __pyx_t_1;
+
+ /* "View.MemoryView":462
+ * dst_slice = get_slice_from_memview(dst, &tmp_slice)
+ *
+ * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<<
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL:
+ */
+ __pyx_t_2 = (((size_t)__pyx_v_self->view.itemsize) > (sizeof(__pyx_v_array)));
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":463
+ *
+ * if self.view.itemsize > sizeof(array):
+ * tmp = PyMem_Malloc(self.view.itemsize) # <<<<<<<<<<<<<<
+ * if tmp == NULL:
+ * raise MemoryError
+ */
+ __pyx_v_tmp = PyMem_Malloc(__pyx_v_self->view.itemsize);
+
+ /* "View.MemoryView":464
+ * if self.view.itemsize > sizeof(array):
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ * item = tmp
+ */
+ __pyx_t_2 = (__pyx_v_tmp == NULL);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":465
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL:
+ * raise MemoryError # <<<<<<<<<<<<<<
+ * item = tmp
+ * else:
+ */
+ PyErr_NoMemory(); __PYX_ERR(1, 465, __pyx_L1_error)
+
+ /* "View.MemoryView":464
+ * if self.view.itemsize > sizeof(array):
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ * item = tmp
+ */
+ }
+
+ /* "View.MemoryView":466
+ * if tmp == NULL:
+ * raise MemoryError
+ * item = tmp # <<<<<<<<<<<<<<
+ * else:
+ * item = array
+ */
+ __pyx_v_item = __pyx_v_tmp;
+
+ /* "View.MemoryView":462
+ * dst_slice = get_slice_from_memview(dst, &tmp_slice)
+ *
+ * if self.view.itemsize > sizeof(array): # <<<<<<<<<<<<<<
+ * tmp = PyMem_Malloc(self.view.itemsize)
+ * if tmp == NULL:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":468
+ * item = tmp
+ * else:
+ * item = array # <<<<<<<<<<<<<<
+ *
+ * try:
+ */
+ /*else*/ {
+ __pyx_v_item = ((void *)__pyx_v_array);
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":470
+ * item = array
+ *
+ * try: # <<<<<<<<<<<<<<
+ * if self.dtype_is_object:
+ * ( item)[0] = value
+ */
+ /*try:*/ {
+
+ /* "View.MemoryView":471
+ *
+ * try:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * ( item)[0] = value
+ * else:
+ */
+ if (__pyx_v_self->dtype_is_object) {
+
+ /* "View.MemoryView":472
+ * try:
+ * if self.dtype_is_object:
+ * ( item)[0] = value # <<<<<<<<<<<<<<
+ * else:
+ * self.assign_item_from_object( item, value)
+ */
+ (((PyObject **)__pyx_v_item)[0]) = ((PyObject *)__pyx_v_value);
+
+ /* "View.MemoryView":471
+ *
+ * try:
+ * if self.dtype_is_object: # <<<<<<<<<<<<<<
+ * ( item)[0] = value
+ * else:
+ */
+ goto __pyx_L8;
+ }
+
+ /* "View.MemoryView":474
+ * ( item)[0] = value
+ * else:
+ * self.assign_item_from_object( item, value) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ /*else*/ {
+ __pyx_t_3 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, ((char *)__pyx_v_item), __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 474, __pyx_L6_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ }
+ __pyx_L8:;
+
+ /* "View.MemoryView":478
+ *
+ *
+ * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ */
+ __pyx_t_2 = (__pyx_v_self->view.suboffsets != NULL);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":479
+ *
+ * if self.view.suboffsets != NULL:
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim) # <<<<<<<<<<<<<<
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ * item, self.dtype_is_object)
+ */
+ __pyx_t_4 = assert_direct_dimensions(__pyx_v_self->view.suboffsets, __pyx_v_self->view.ndim); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 479, __pyx_L6_error)
+
+ /* "View.MemoryView":478
+ *
+ *
+ * if self.view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize,
+ */
+ }
+
+ /* "View.MemoryView":480
+ * if self.view.suboffsets != NULL:
+ * assert_direct_dimensions(self.view.suboffsets, self.view.ndim)
+ * slice_assign_scalar(dst_slice, dst.view.ndim, self.view.itemsize, # <<<<<<<<<<<<<<
+ * item, self.dtype_is_object)
+ * finally:
+ */
+ __pyx_memoryview_slice_assign_scalar(__pyx_v_dst_slice, __pyx_v_dst->view.ndim, __pyx_v_self->view.itemsize, __pyx_v_item, __pyx_v_self->dtype_is_object);
+ }
+
+ /* "View.MemoryView":483
+ * item, self.dtype_is_object)
+ * finally:
+ * PyMem_Free(tmp) # <<<<<<<<<<<<<<
+ *
+ * cdef setitem_indexed(self, index, value):
+ */
+ /*finally:*/ {
+ /*normal exit:*/{
+ PyMem_Free(__pyx_v_tmp);
+ goto __pyx_L7;
+ }
+ __pyx_L6_error:;
+ /*exception exit:*/{
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+ __Pyx_XDECREF(__pyx_t_3); __pyx_t_3 = 0;
+ if (PY_MAJOR_VERSION >= 3) __Pyx_ExceptionSwap(&__pyx_t_10, &__pyx_t_11, &__pyx_t_12);
+ if ((PY_MAJOR_VERSION < 3) || unlikely(__Pyx_GetException(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9) < 0)) __Pyx_ErrFetch(&__pyx_t_7, &__pyx_t_8, &__pyx_t_9);
+ __Pyx_XGOTREF(__pyx_t_7);
+ __Pyx_XGOTREF(__pyx_t_8);
+ __Pyx_XGOTREF(__pyx_t_9);
+ __Pyx_XGOTREF(__pyx_t_10);
+ __Pyx_XGOTREF(__pyx_t_11);
+ __Pyx_XGOTREF(__pyx_t_12);
+ __pyx_t_4 = __pyx_lineno; __pyx_t_5 = __pyx_clineno; __pyx_t_6 = __pyx_filename;
+ {
+ PyMem_Free(__pyx_v_tmp);
+ }
+ if (PY_MAJOR_VERSION >= 3) {
+ __Pyx_XGIVEREF(__pyx_t_10);
+ __Pyx_XGIVEREF(__pyx_t_11);
+ __Pyx_XGIVEREF(__pyx_t_12);
+ __Pyx_ExceptionReset(__pyx_t_10, __pyx_t_11, __pyx_t_12);
+ }
+ __Pyx_XGIVEREF(__pyx_t_7);
+ __Pyx_XGIVEREF(__pyx_t_8);
+ __Pyx_XGIVEREF(__pyx_t_9);
+ __Pyx_ErrRestore(__pyx_t_7, __pyx_t_8, __pyx_t_9);
+ __pyx_t_7 = 0; __pyx_t_8 = 0; __pyx_t_9 = 0; __pyx_t_10 = 0; __pyx_t_11 = 0; __pyx_t_12 = 0;
+ __pyx_lineno = __pyx_t_4; __pyx_clineno = __pyx_t_5; __pyx_filename = __pyx_t_6;
+ goto __pyx_L1_error;
+ }
+ __pyx_L7:;
+ }
+
+ /* "View.MemoryView":453
+ * memoryview_copy_contents(msrc, mdst, src.ndim, dst.ndim, self.dtype_is_object)
+ *
+ * cdef setitem_slice_assign_scalar(self, memoryview dst, value): # <<<<<<<<<<<<<<
+ * cdef int array[128]
+ * cdef void *tmp = NULL
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_slice_assign_scalar", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":485
+ * PyMem_Free(tmp)
+ *
+ * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<<
+ * cdef char *itemp = self.get_item_pointer(index)
+ * self.assign_item_from_object(itemp, value)
+ */
+
+static PyObject *__pyx_memoryview_setitem_indexed(struct __pyx_memoryview_obj *__pyx_v_self, PyObject *__pyx_v_index, PyObject *__pyx_v_value) {
+ char *__pyx_v_itemp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ char *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("setitem_indexed", 0);
+
+ /* "View.MemoryView":486
+ *
+ * cdef setitem_indexed(self, index, value):
+ * cdef char *itemp = self.get_item_pointer(index) # <<<<<<<<<<<<<<
+ * self.assign_item_from_object(itemp, value)
+ *
+ */
+ __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->get_item_pointer(__pyx_v_self, __pyx_v_index); if (unlikely(__pyx_t_1 == ((char *)NULL))) __PYX_ERR(1, 486, __pyx_L1_error)
+ __pyx_v_itemp = __pyx_t_1;
+
+ /* "View.MemoryView":487
+ * cdef setitem_indexed(self, index, value):
+ * cdef char *itemp = self.get_item_pointer(index)
+ * self.assign_item_from_object(itemp, value) # <<<<<<<<<<<<<<
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ */
+ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->assign_item_from_object(__pyx_v_self, __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 487, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "View.MemoryView":485
+ * PyMem_Free(tmp)
+ *
+ * cdef setitem_indexed(self, index, value): # <<<<<<<<<<<<<<
+ * cdef char *itemp = self.get_item_pointer(index)
+ * self.assign_item_from_object(itemp, value)
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.setitem_indexed", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":489
+ * self.assign_item_from_object(itemp, value)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+static PyObject *__pyx_memoryview_convert_item_to_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp) {
+ PyObject *__pyx_v_struct = NULL;
+ PyObject *__pyx_v_bytesitem = 0;
+ PyObject *__pyx_v_result = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ PyObject *__pyx_t_7 = NULL;
+ int __pyx_t_8;
+ Py_ssize_t __pyx_t_9;
+ int __pyx_t_10;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("convert_item_to_object", 0);
+
+ /* "View.MemoryView":492
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ * import struct # <<<<<<<<<<<<<<
+ * cdef bytes bytesitem
+ *
+ */
+ __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_struct, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 492, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_struct = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":495
+ * cdef bytes bytesitem
+ *
+ * bytesitem = itemp[:self.view.itemsize] # <<<<<<<<<<<<<<
+ * try:
+ * result = struct.unpack(self.view.format, bytesitem)
+ */
+ __pyx_t_1 = __Pyx_PyBytes_FromStringAndSize(__pyx_v_itemp + 0, __pyx_v_self->view.itemsize - 0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 495, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_bytesitem = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":496
+ *
+ * bytesitem = itemp[:self.view.itemsize]
+ * try: # <<<<<<<<<<<<<<
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ */
+ {
+ __Pyx_PyThreadState_declare
+ __Pyx_PyThreadState_assign
+ __Pyx_ExceptionSave(&__pyx_t_2, &__pyx_t_3, &__pyx_t_4);
+ __Pyx_XGOTREF(__pyx_t_2);
+ __Pyx_XGOTREF(__pyx_t_3);
+ __Pyx_XGOTREF(__pyx_t_4);
+ /*try:*/ {
+
+ /* "View.MemoryView":497
+ * bytesitem = itemp[:self.view.itemsize]
+ * try:
+ * result = struct.unpack(self.view.format, bytesitem) # <<<<<<<<<<<<<<
+ * except struct.error:
+ * raise ValueError, "Unable to convert item to object"
+ */
+ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_unpack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 497, __pyx_L3_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_6 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 497, __pyx_L3_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __pyx_t_7 = NULL;
+ __pyx_t_8 = 0;
+ #if CYTHON_UNPACK_METHODS
+ if (likely(PyMethod_Check(__pyx_t_5))) {
+ __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_5);
+ if (likely(__pyx_t_7)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+ __Pyx_INCREF(__pyx_t_7);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_5, function);
+ __pyx_t_8 = 1;
+ }
+ }
+ #endif
+ {
+ PyObject *__pyx_callargs[3] = {__pyx_t_7, __pyx_t_6, __pyx_v_bytesitem};
+ __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_8, 2+__pyx_t_8);
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 497, __pyx_L3_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ }
+ __pyx_v_result = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":496
+ *
+ * bytesitem = itemp[:self.view.itemsize]
+ * try: # <<<<<<<<<<<<<<
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ */
+ }
+
+ /* "View.MemoryView":501
+ * raise ValueError, "Unable to convert item to object"
+ * else:
+ * if len(self.view.format) == 1: # <<<<<<<<<<<<<<
+ * return result[0]
+ * return result
+ */
+ /*else:*/ {
+ __pyx_t_9 = __Pyx_ssize_strlen(__pyx_v_self->view.format); if (unlikely(__pyx_t_9 == ((Py_ssize_t)-1))) __PYX_ERR(1, 501, __pyx_L5_except_error)
+ __pyx_t_10 = (__pyx_t_9 == 1);
+ if (__pyx_t_10) {
+
+ /* "View.MemoryView":502
+ * else:
+ * if len(self.view.format) == 1:
+ * return result[0] # <<<<<<<<<<<<<<
+ * return result
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_GetItemInt(__pyx_v_result, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 502, __pyx_L5_except_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L6_except_return;
+
+ /* "View.MemoryView":501
+ * raise ValueError, "Unable to convert item to object"
+ * else:
+ * if len(self.view.format) == 1: # <<<<<<<<<<<<<<
+ * return result[0]
+ * return result
+ */
+ }
+
+ /* "View.MemoryView":503
+ * if len(self.view.format) == 1:
+ * return result[0]
+ * return result # <<<<<<<<<<<<<<
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_result);
+ __pyx_r = __pyx_v_result;
+ goto __pyx_L6_except_return;
+ }
+ __pyx_L3_error:;
+ __Pyx_XDECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_XDECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_XDECREF(__pyx_t_6); __pyx_t_6 = 0;
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+
+ /* "View.MemoryView":498
+ * try:
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error: # <<<<<<<<<<<<<<
+ * raise ValueError, "Unable to convert item to object"
+ * else:
+ */
+ __Pyx_ErrFetch(&__pyx_t_1, &__pyx_t_5, &__pyx_t_6);
+ __pyx_t_7 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_error); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 498, __pyx_L5_except_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_8 = __Pyx_PyErr_GivenExceptionMatches(__pyx_t_1, __pyx_t_7);
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_ErrRestore(__pyx_t_1, __pyx_t_5, __pyx_t_6);
+ __pyx_t_1 = 0; __pyx_t_5 = 0; __pyx_t_6 = 0;
+ if (__pyx_t_8) {
+ __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ if (__Pyx_GetException(&__pyx_t_6, &__pyx_t_5, &__pyx_t_1) < 0) __PYX_ERR(1, 498, __pyx_L5_except_error)
+ __Pyx_XGOTREF(__pyx_t_6);
+ __Pyx_XGOTREF(__pyx_t_5);
+ __Pyx_XGOTREF(__pyx_t_1);
+
+ /* "View.MemoryView":499
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ * raise ValueError, "Unable to convert item to object" # <<<<<<<<<<<<<<
+ * else:
+ * if len(self.view.format) == 1:
+ */
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Unable_to_convert_item_to_object, 0, 0);
+ __PYX_ERR(1, 499, __pyx_L5_except_error)
+ }
+ goto __pyx_L5_except_error;
+
+ /* "View.MemoryView":496
+ *
+ * bytesitem = itemp[:self.view.itemsize]
+ * try: # <<<<<<<<<<<<<<
+ * result = struct.unpack(self.view.format, bytesitem)
+ * except struct.error:
+ */
+ __pyx_L5_except_error:;
+ __Pyx_XGIVEREF(__pyx_t_2);
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
+ goto __pyx_L1_error;
+ __pyx_L6_except_return:;
+ __Pyx_XGIVEREF(__pyx_t_2);
+ __Pyx_XGIVEREF(__pyx_t_3);
+ __Pyx_XGIVEREF(__pyx_t_4);
+ __Pyx_ExceptionReset(__pyx_t_2, __pyx_t_3, __pyx_t_4);
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":489
+ * self.assign_item_from_object(itemp, value)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_struct);
+ __Pyx_XDECREF(__pyx_v_bytesitem);
+ __Pyx_XDECREF(__pyx_v_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":505
+ * return result
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+static PyObject *__pyx_memoryview_assign_item_from_object(struct __pyx_memoryview_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
+ PyObject *__pyx_v_struct = NULL;
+ char __pyx_v_c;
+ PyObject *__pyx_v_bytesvalue = 0;
+ Py_ssize_t __pyx_v_i;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_t_6;
+ Py_ssize_t __pyx_t_7;
+ PyObject *__pyx_t_8 = NULL;
+ char *__pyx_t_9;
+ char *__pyx_t_10;
+ char *__pyx_t_11;
+ char *__pyx_t_12;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("assign_item_from_object", 0);
+
+ /* "View.MemoryView":508
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ * import struct # <<<<<<<<<<<<<<
+ * cdef char c
+ * cdef bytes bytesvalue
+ */
+ __pyx_t_1 = __Pyx_ImportDottedModule(__pyx_n_s_struct, NULL); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 508, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_v_struct = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":513
+ * cdef Py_ssize_t i
+ *
+ * if isinstance(value, tuple): # <<<<<<<<<<<<<<
+ * bytesvalue = struct.pack(self.view.format, *value)
+ * else:
+ */
+ __pyx_t_2 = PyTuple_Check(__pyx_v_value);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":514
+ *
+ * if isinstance(value, tuple):
+ * bytesvalue = struct.pack(self.view.format, *value) # <<<<<<<<<<<<<<
+ * else:
+ * bytesvalue = struct.pack(self.view.format, value)
+ */
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_3 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = PyTuple_New(1); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_3);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_4, 0, __pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error);
+ __pyx_t_3 = 0;
+ __pyx_t_3 = __Pyx_PySequence_Tuple(__pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_5 = PyNumber_Add(__pyx_t_4, __pyx_t_3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_t_3 = __Pyx_PyObject_Call(__pyx_t_1, __pyx_t_5, NULL); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 514, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(1, 514, __pyx_L1_error)
+ __pyx_v_bytesvalue = ((PyObject*)__pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":513
+ * cdef Py_ssize_t i
+ *
+ * if isinstance(value, tuple): # <<<<<<<<<<<<<<
+ * bytesvalue = struct.pack(self.view.format, *value)
+ * else:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":516
+ * bytesvalue = struct.pack(self.view.format, *value)
+ * else:
+ * bytesvalue = struct.pack(self.view.format, value) # <<<<<<<<<<<<<<
+ *
+ * for i, c in enumerate(bytesvalue):
+ */
+ /*else*/ {
+ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(__pyx_v_struct, __pyx_n_s_pack); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 516, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_1 = __Pyx_PyBytes_FromString(__pyx_v_self->view.format); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 516, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_4 = NULL;
+ __pyx_t_6 = 0;
+ #if CYTHON_UNPACK_METHODS
+ if (likely(PyMethod_Check(__pyx_t_5))) {
+ __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_5);
+ if (likely(__pyx_t_4)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_5);
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_5, function);
+ __pyx_t_6 = 1;
+ }
+ }
+ #endif
+ {
+ PyObject *__pyx_callargs[3] = {__pyx_t_4, __pyx_t_1, __pyx_v_value};
+ __pyx_t_3 = __Pyx_PyObject_FastCall(__pyx_t_5, __pyx_callargs+1-__pyx_t_6, 2+__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 516, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ }
+ if (!(likely(PyBytes_CheckExact(__pyx_t_3))||((__pyx_t_3) == Py_None) || __Pyx_RaiseUnexpectedTypeError("bytes", __pyx_t_3))) __PYX_ERR(1, 516, __pyx_L1_error)
+ __pyx_v_bytesvalue = ((PyObject*)__pyx_t_3);
+ __pyx_t_3 = 0;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":518
+ * bytesvalue = struct.pack(self.view.format, value)
+ *
+ * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<<
+ * itemp[i] = c
+ *
+ */
+ __pyx_t_7 = 0;
+ if (unlikely(__pyx_v_bytesvalue == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' is not iterable");
+ __PYX_ERR(1, 518, __pyx_L1_error)
+ }
+ __Pyx_INCREF(__pyx_v_bytesvalue);
+ __pyx_t_8 = __pyx_v_bytesvalue;
+ __pyx_t_10 = PyBytes_AS_STRING(__pyx_t_8);
+ __pyx_t_11 = (__pyx_t_10 + PyBytes_GET_SIZE(__pyx_t_8));
+ for (__pyx_t_12 = __pyx_t_10; __pyx_t_12 < __pyx_t_11; __pyx_t_12++) {
+ __pyx_t_9 = __pyx_t_12;
+ __pyx_v_c = (__pyx_t_9[0]);
+
+ /* "View.MemoryView":519
+ *
+ * for i, c in enumerate(bytesvalue):
+ * itemp[i] = c # <<<<<<<<<<<<<<
+ *
+ * @cname('getbuffer')
+ */
+ __pyx_v_i = __pyx_t_7;
+
+ /* "View.MemoryView":518
+ * bytesvalue = struct.pack(self.view.format, value)
+ *
+ * for i, c in enumerate(bytesvalue): # <<<<<<<<<<<<<<
+ * itemp[i] = c
+ *
+ */
+ __pyx_t_7 = (__pyx_t_7 + 1);
+
+ /* "View.MemoryView":519
+ *
+ * for i, c in enumerate(bytesvalue):
+ * itemp[i] = c # <<<<<<<<<<<<<<
+ *
+ * @cname('getbuffer')
+ */
+ (__pyx_v_itemp[__pyx_v_i]) = __pyx_v_c;
+ }
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+
+ /* "View.MemoryView":505
+ * return result
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * """Only used if instantiated manually by the user, or if Cython doesn't
+ * know how to convert the type"""
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_8);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_struct);
+ __Pyx_XDECREF(__pyx_v_bytesvalue);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":521
+ * itemp[i] = c
+ *
+ * @cname('getbuffer') # <<<<<<<<<<<<<<
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly:
+ */
+
+/* Python wrapper */
+CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags); /*proto*/
+CYTHON_UNUSED static int __pyx_memoryview_getbuffer(PyObject *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__getbuffer__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(((struct __pyx_memoryview_obj *)__pyx_v_self), ((Py_buffer *)__pyx_v_info), ((int)__pyx_v_flags));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static int __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_8__getbuffer__(struct __pyx_memoryview_obj *__pyx_v_self, Py_buffer *__pyx_v_info, int __pyx_v_flags) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ char *__pyx_t_4;
+ void *__pyx_t_5;
+ int __pyx_t_6;
+ Py_ssize_t __pyx_t_7;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ if (unlikely(__pyx_v_info == NULL)) {
+ PyErr_SetString(PyExc_BufferError, "PyObject_GetBuffer: view==NULL argument is obsolete");
+ return -1;
+ }
+ __Pyx_RefNannySetupContext("__getbuffer__", 0);
+ __pyx_v_info->obj = Py_None; __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(__pyx_v_info->obj);
+
+ /* "View.MemoryView":523
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<<
+ * raise ValueError, "Cannot create writable memory view from read-only memoryview"
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_flags & PyBUF_WRITABLE) != 0);
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L4_bool_binop_done;
+ }
+ __pyx_t_1 = __pyx_v_self->view.readonly;
+ __pyx_L4_bool_binop_done:;
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":524
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly:
+ * raise ValueError, "Cannot create writable memory view from read-only memoryview" # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_ND:
+ */
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Cannot_create_writable_memory_vi, 0, 0);
+ __PYX_ERR(1, 524, __pyx_L1_error)
+
+ /* "View.MemoryView":523
+ * @cname('getbuffer')
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly: # <<<<<<<<<<<<<<
+ * raise ValueError, "Cannot create writable memory view from read-only memoryview"
+ *
+ */
+ }
+
+ /* "View.MemoryView":526
+ * raise ValueError, "Cannot create writable memory view from read-only memoryview"
+ *
+ * if flags & PyBUF_ND: # <<<<<<<<<<<<<<
+ * info.shape = self.view.shape
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_ND) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":527
+ *
+ * if flags & PyBUF_ND:
+ * info.shape = self.view.shape # <<<<<<<<<<<<<<
+ * else:
+ * info.shape = NULL
+ */
+ __pyx_t_3 = __pyx_v_self->view.shape;
+ __pyx_v_info->shape = __pyx_t_3;
+
+ /* "View.MemoryView":526
+ * raise ValueError, "Cannot create writable memory view from read-only memoryview"
+ *
+ * if flags & PyBUF_ND: # <<<<<<<<<<<<<<
+ * info.shape = self.view.shape
+ * else:
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":529
+ * info.shape = self.view.shape
+ * else:
+ * info.shape = NULL # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_STRIDES:
+ */
+ /*else*/ {
+ __pyx_v_info->shape = NULL;
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":531
+ * info.shape = NULL
+ *
+ * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<<
+ * info.strides = self.view.strides
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_STRIDES) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":532
+ *
+ * if flags & PyBUF_STRIDES:
+ * info.strides = self.view.strides # <<<<<<<<<<<<<<
+ * else:
+ * info.strides = NULL
+ */
+ __pyx_t_3 = __pyx_v_self->view.strides;
+ __pyx_v_info->strides = __pyx_t_3;
+
+ /* "View.MemoryView":531
+ * info.shape = NULL
+ *
+ * if flags & PyBUF_STRIDES: # <<<<<<<<<<<<<<
+ * info.strides = self.view.strides
+ * else:
+ */
+ goto __pyx_L7;
+ }
+
+ /* "View.MemoryView":534
+ * info.strides = self.view.strides
+ * else:
+ * info.strides = NULL # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_INDIRECT:
+ */
+ /*else*/ {
+ __pyx_v_info->strides = NULL;
+ }
+ __pyx_L7:;
+
+ /* "View.MemoryView":536
+ * info.strides = NULL
+ *
+ * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<<
+ * info.suboffsets = self.view.suboffsets
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_INDIRECT) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":537
+ *
+ * if flags & PyBUF_INDIRECT:
+ * info.suboffsets = self.view.suboffsets # <<<<<<<<<<<<<<
+ * else:
+ * info.suboffsets = NULL
+ */
+ __pyx_t_3 = __pyx_v_self->view.suboffsets;
+ __pyx_v_info->suboffsets = __pyx_t_3;
+
+ /* "View.MemoryView":536
+ * info.strides = NULL
+ *
+ * if flags & PyBUF_INDIRECT: # <<<<<<<<<<<<<<
+ * info.suboffsets = self.view.suboffsets
+ * else:
+ */
+ goto __pyx_L8;
+ }
+
+ /* "View.MemoryView":539
+ * info.suboffsets = self.view.suboffsets
+ * else:
+ * info.suboffsets = NULL # <<<<<<<<<<<<<<
+ *
+ * if flags & PyBUF_FORMAT:
+ */
+ /*else*/ {
+ __pyx_v_info->suboffsets = NULL;
+ }
+ __pyx_L8:;
+
+ /* "View.MemoryView":541
+ * info.suboffsets = NULL
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * info.format = self.view.format
+ * else:
+ */
+ __pyx_t_1 = ((__pyx_v_flags & PyBUF_FORMAT) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":542
+ *
+ * if flags & PyBUF_FORMAT:
+ * info.format = self.view.format # <<<<<<<<<<<<<<
+ * else:
+ * info.format = NULL
+ */
+ __pyx_t_4 = __pyx_v_self->view.format;
+ __pyx_v_info->format = __pyx_t_4;
+
+ /* "View.MemoryView":541
+ * info.suboffsets = NULL
+ *
+ * if flags & PyBUF_FORMAT: # <<<<<<<<<<<<<<
+ * info.format = self.view.format
+ * else:
+ */
+ goto __pyx_L9;
+ }
+
+ /* "View.MemoryView":544
+ * info.format = self.view.format
+ * else:
+ * info.format = NULL # <<<<<<<<<<<<<<
+ *
+ * info.buf = self.view.buf
+ */
+ /*else*/ {
+ __pyx_v_info->format = NULL;
+ }
+ __pyx_L9:;
+
+ /* "View.MemoryView":546
+ * info.format = NULL
+ *
+ * info.buf = self.view.buf # <<<<<<<<<<<<<<
+ * info.ndim = self.view.ndim
+ * info.itemsize = self.view.itemsize
+ */
+ __pyx_t_5 = __pyx_v_self->view.buf;
+ __pyx_v_info->buf = __pyx_t_5;
+
+ /* "View.MemoryView":547
+ *
+ * info.buf = self.view.buf
+ * info.ndim = self.view.ndim # <<<<<<<<<<<<<<
+ * info.itemsize = self.view.itemsize
+ * info.len = self.view.len
+ */
+ __pyx_t_6 = __pyx_v_self->view.ndim;
+ __pyx_v_info->ndim = __pyx_t_6;
+
+ /* "View.MemoryView":548
+ * info.buf = self.view.buf
+ * info.ndim = self.view.ndim
+ * info.itemsize = self.view.itemsize # <<<<<<<<<<<<<<
+ * info.len = self.view.len
+ * info.readonly = self.view.readonly
+ */
+ __pyx_t_7 = __pyx_v_self->view.itemsize;
+ __pyx_v_info->itemsize = __pyx_t_7;
+
+ /* "View.MemoryView":549
+ * info.ndim = self.view.ndim
+ * info.itemsize = self.view.itemsize
+ * info.len = self.view.len # <<<<<<<<<<<<<<
+ * info.readonly = self.view.readonly
+ * info.obj = self
+ */
+ __pyx_t_7 = __pyx_v_self->view.len;
+ __pyx_v_info->len = __pyx_t_7;
+
+ /* "View.MemoryView":550
+ * info.itemsize = self.view.itemsize
+ * info.len = self.view.len
+ * info.readonly = self.view.readonly # <<<<<<<<<<<<<<
+ * info.obj = self
+ *
+ */
+ __pyx_t_1 = __pyx_v_self->view.readonly;
+ __pyx_v_info->readonly = __pyx_t_1;
+
+ /* "View.MemoryView":551
+ * info.len = self.view.len
+ * info.readonly = self.view.readonly
+ * info.obj = self # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_INCREF((PyObject *)__pyx_v_self);
+ __Pyx_GIVEREF((PyObject *)__pyx_v_self);
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj);
+ __pyx_v_info->obj = ((PyObject *)__pyx_v_self);
+
+ /* "View.MemoryView":521
+ * itemp[i] = c
+ *
+ * @cname('getbuffer') # <<<<<<<<<<<<<<
+ * def __getbuffer__(self, Py_buffer *info, int flags):
+ * if flags & PyBUF_WRITABLE and self.view.readonly:
+ */
+
+ /* function exit code */
+ __pyx_r = 0;
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__getbuffer__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ if (__pyx_v_info->obj != NULL) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ goto __pyx_L2;
+ __pyx_L0:;
+ if (__pyx_v_info->obj == Py_None) {
+ __Pyx_GOTREF(__pyx_v_info->obj);
+ __Pyx_DECREF(__pyx_v_info->obj); __pyx_v_info->obj = 0;
+ }
+ __pyx_L2:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":554
+ *
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def T(self):
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_1T_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_1T___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":556
+ * @property
+ * def T(self):
+ * cdef _memoryviewslice result = memoryview_copy(self) # <<<<<<<<<<<<<<
+ * transpose_memslice(&result.from_slice)
+ * return result
+ */
+ __pyx_t_1 = __pyx_memoryview_copy_object(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 556, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ if (!(likely(((__pyx_t_1) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_1, __pyx_memoryviewslice_type))))) __PYX_ERR(1, 556, __pyx_L1_error)
+ __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":557
+ * def T(self):
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ * transpose_memslice(&result.from_slice) # <<<<<<<<<<<<<<
+ * return result
+ *
+ */
+ __pyx_t_2 = __pyx_memslice_transpose((&__pyx_v_result->from_slice)); if (unlikely(__pyx_t_2 == ((int)-1))) __PYX_ERR(1, 557, __pyx_L1_error)
+
+ /* "View.MemoryView":558
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ * transpose_memslice(&result.from_slice)
+ * return result # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF((PyObject *)__pyx_v_result);
+ __pyx_r = ((PyObject *)__pyx_v_result);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":554
+ *
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def T(self):
+ * cdef _memoryviewslice result = memoryview_copy(self)
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.T.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":560
+ * return result
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def base(self):
+ * return self._get_base()
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4base_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4base___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":562
+ * @property
+ * def base(self):
+ * return self._get_base() # <<<<<<<<<<<<<<
+ *
+ * cdef _get_base(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = ((struct __pyx_vtabstruct_memoryview *)__pyx_v_self->__pyx_vtab)->_get_base(__pyx_v_self); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 562, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":560
+ * return result
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def base(self):
+ * return self._get_base()
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.base.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":564
+ * return self._get_base()
+ *
+ * cdef _get_base(self): # <<<<<<<<<<<<<<
+ * return self.obj
+ *
+ */
+
+static PyObject *__pyx_memoryview__get_base(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("_get_base", 0);
+
+ /* "View.MemoryView":565
+ *
+ * cdef _get_base(self):
+ * return self.obj # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->obj);
+ __pyx_r = __pyx_v_self->obj;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":564
+ * return self._get_base()
+ *
+ * cdef _get_base(self): # <<<<<<<<<<<<<<
+ * return self.obj
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":567
+ * return self.obj
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def shape(self):
+ * return tuple([length for length in self.view.shape[:self.view.ndim]])
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_5shape_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_5shape___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_7genexpr__pyx_v_length;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ Py_ssize_t *__pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":569
+ * @property
+ * def shape(self):
+ * return tuple([length for length in self.view.shape[:self.view.ndim]]) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ { /* enter inner scope */
+ __pyx_t_1 = PyList_New(0); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 569, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
+ for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+ __pyx_t_2 = __pyx_t_4;
+ __pyx_7genexpr__pyx_v_length = (__pyx_t_2[0]);
+ __pyx_t_5 = PyInt_FromSsize_t(__pyx_7genexpr__pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 569, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ if (unlikely(__Pyx_ListComp_Append(__pyx_t_1, (PyObject*)__pyx_t_5))) __PYX_ERR(1, 569, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ }
+ } /* exit inner scope */
+ __pyx_t_5 = PyList_AsTuple(((PyObject*)__pyx_t_1)); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 569, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_r = __pyx_t_5;
+ __pyx_t_5 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":567
+ * return self.obj
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def shape(self):
+ * return tuple([length for length in self.view.shape[:self.view.ndim]])
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.shape.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":571
+ * return tuple([length for length in self.view.shape[:self.view.ndim]])
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def strides(self):
+ * if self.view.strides == NULL:
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_7strides_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_7strides___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_8genexpr1__pyx_v_stride;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+ Py_ssize_t *__pyx_t_5;
+ PyObject *__pyx_t_6 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":573
+ * @property
+ * def strides(self):
+ * if self.view.strides == NULL: # <<<<<<<<<<<<<<
+ *
+ * raise ValueError, "Buffer view does not expose strides"
+ */
+ __pyx_t_1 = (__pyx_v_self->view.strides == NULL);
+ if (unlikely(__pyx_t_1)) {
+
+ /* "View.MemoryView":575
+ * if self.view.strides == NULL:
+ *
+ * raise ValueError, "Buffer view does not expose strides" # <<<<<<<<<<<<<<
+ *
+ * return tuple([stride for stride in self.view.strides[:self.view.ndim]])
+ */
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Buffer_view_does_not_expose_stri, 0, 0);
+ __PYX_ERR(1, 575, __pyx_L1_error)
+
+ /* "View.MemoryView":573
+ * @property
+ * def strides(self):
+ * if self.view.strides == NULL: # <<<<<<<<<<<<<<
+ *
+ * raise ValueError, "Buffer view does not expose strides"
+ */
+ }
+
+ /* "View.MemoryView":577
+ * raise ValueError, "Buffer view does not expose strides"
+ *
+ * return tuple([stride for stride in self.view.strides[:self.view.ndim]]) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ { /* enter inner scope */
+ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 577, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = (__pyx_v_self->view.strides + __pyx_v_self->view.ndim);
+ for (__pyx_t_5 = __pyx_v_self->view.strides; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
+ __pyx_t_3 = __pyx_t_5;
+ __pyx_8genexpr1__pyx_v_stride = (__pyx_t_3[0]);
+ __pyx_t_6 = PyInt_FromSsize_t(__pyx_8genexpr1__pyx_v_stride); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 577, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 577, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ }
+ } /* exit inner scope */
+ __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 577, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_6;
+ __pyx_t_6 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":571
+ * return tuple([length for length in self.view.shape[:self.view.ndim]])
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def strides(self):
+ * if self.view.strides == NULL:
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.strides.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":579
+ * return tuple([stride for stride in self.view.strides[:self.view.ndim]])
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL:
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_10suboffsets_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_10suboffsets___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_8genexpr2__pyx_v_suboffset;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+ Py_ssize_t *__pyx_t_5;
+ PyObject *__pyx_t_6 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":581
+ * @property
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<<
+ * return (-1,) * self.view.ndim
+ *
+ */
+ __pyx_t_1 = (__pyx_v_self->view.suboffsets == NULL);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":582
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL:
+ * return (-1,) * self.view.ndim # <<<<<<<<<<<<<<
+ *
+ * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __Pyx_PySequence_Multiply(__pyx_tuple__4, __pyx_v_self->view.ndim); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 582, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":581
+ * @property
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL: # <<<<<<<<<<<<<<
+ * return (-1,) * self.view.ndim
+ *
+ */
+ }
+
+ /* "View.MemoryView":584
+ * return (-1,) * self.view.ndim
+ *
+ * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]]) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ { /* enter inner scope */
+ __pyx_t_2 = PyList_New(0); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 584, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_4 = (__pyx_v_self->view.suboffsets + __pyx_v_self->view.ndim);
+ for (__pyx_t_5 = __pyx_v_self->view.suboffsets; __pyx_t_5 < __pyx_t_4; __pyx_t_5++) {
+ __pyx_t_3 = __pyx_t_5;
+ __pyx_8genexpr2__pyx_v_suboffset = (__pyx_t_3[0]);
+ __pyx_t_6 = PyInt_FromSsize_t(__pyx_8genexpr2__pyx_v_suboffset); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 584, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ if (unlikely(__Pyx_ListComp_Append(__pyx_t_2, (PyObject*)__pyx_t_6))) __PYX_ERR(1, 584, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ }
+ } /* exit inner scope */
+ __pyx_t_6 = PyList_AsTuple(((PyObject*)__pyx_t_2)); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 584, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_6;
+ __pyx_t_6 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":579
+ * return tuple([stride for stride in self.view.strides[:self.view.ndim]])
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def suboffsets(self):
+ * if self.view.suboffsets == NULL:
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.suboffsets.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":586
+ * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def ndim(self):
+ * return self.view.ndim
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4ndim_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4ndim___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":588
+ * @property
+ * def ndim(self):
+ * return self.view.ndim # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_self->view.ndim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 588, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":586
+ * return tuple([suboffset for suboffset in self.view.suboffsets[:self.view.ndim]])
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def ndim(self):
+ * return self.view.ndim
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.ndim.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":590
+ * return self.view.ndim
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def itemsize(self):
+ * return self.view.itemsize
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_8itemsize_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_8itemsize___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":592
+ * @property
+ * def itemsize(self):
+ * return self.view.itemsize # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 592, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":590
+ * return self.view.ndim
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def itemsize(self):
+ * return self.view.itemsize
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.itemsize.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":594
+ * return self.view.itemsize
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def nbytes(self):
+ * return self.size * self.view.itemsize
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_6nbytes_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_6nbytes___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":596
+ * @property
+ * def nbytes(self):
+ * return self.size * self.view.itemsize # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_size); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 596, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_self->view.itemsize); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 596, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyNumber_Multiply(__pyx_t_1, __pyx_t_2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 596, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_3;
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":594
+ * return self.view.itemsize
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def nbytes(self):
+ * return self.size * self.view.itemsize
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.nbytes.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":598
+ * return self.size * self.view.itemsize
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def size(self):
+ * if self._size is None:
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_pw_15View_dot_MemoryView_10memoryview_4size_1__get__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__get__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView_10memoryview_4size___get__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_v_result = NULL;
+ PyObject *__pyx_v_length = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ Py_ssize_t *__pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__get__", 0);
+
+ /* "View.MemoryView":600
+ * @property
+ * def size(self):
+ * if self._size is None: # <<<<<<<<<<<<<<
+ * result = 1
+ *
+ */
+ __pyx_t_1 = (__pyx_v_self->_size == Py_None);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":601
+ * def size(self):
+ * if self._size is None:
+ * result = 1 # <<<<<<<<<<<<<<
+ *
+ * for length in self.view.shape[:self.view.ndim]:
+ */
+ __Pyx_INCREF(__pyx_int_1);
+ __pyx_v_result = __pyx_int_1;
+
+ /* "View.MemoryView":603
+ * result = 1
+ *
+ * for length in self.view.shape[:self.view.ndim]: # <<<<<<<<<<<<<<
+ * result *= length
+ *
+ */
+ __pyx_t_3 = (__pyx_v_self->view.shape + __pyx_v_self->view.ndim);
+ for (__pyx_t_4 = __pyx_v_self->view.shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+ __pyx_t_2 = __pyx_t_4;
+ __pyx_t_5 = PyInt_FromSsize_t((__pyx_t_2[0])); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 603, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_5);
+ __pyx_t_5 = 0;
+
+ /* "View.MemoryView":604
+ *
+ * for length in self.view.shape[:self.view.ndim]:
+ * result *= length # <<<<<<<<<<<<<<
+ *
+ * self._size = result
+ */
+ __pyx_t_5 = PyNumber_InPlaceMultiply(__pyx_v_result, __pyx_v_length); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 604, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF_SET(__pyx_v_result, __pyx_t_5);
+ __pyx_t_5 = 0;
+ }
+
+ /* "View.MemoryView":606
+ * result *= length
+ *
+ * self._size = result # <<<<<<<<<<<<<<
+ *
+ * return self._size
+ */
+ __Pyx_INCREF(__pyx_v_result);
+ __Pyx_GIVEREF(__pyx_v_result);
+ __Pyx_GOTREF(__pyx_v_self->_size);
+ __Pyx_DECREF(__pyx_v_self->_size);
+ __pyx_v_self->_size = __pyx_v_result;
+
+ /* "View.MemoryView":600
+ * @property
+ * def size(self):
+ * if self._size is None: # <<<<<<<<<<<<<<
+ * result = 1
+ *
+ */
+ }
+
+ /* "View.MemoryView":608
+ * self._size = result
+ *
+ * return self._size # <<<<<<<<<<<<<<
+ *
+ * def __len__(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->_size);
+ __pyx_r = __pyx_v_self->_size;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":598
+ * return self.size * self.view.itemsize
+ *
+ * @property # <<<<<<<<<<<<<<
+ * def size(self):
+ * if self._size is None:
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.size.__get__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_result);
+ __Pyx_XDECREF(__pyx_v_length);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":610
+ * return self._size
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * if self.view.ndim >= 1:
+ * return self.view.shape[0]
+ */
+
+/* Python wrapper */
+static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self); /*proto*/
+static Py_ssize_t __pyx_memoryview___len__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__len__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static Py_ssize_t __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_10__len__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ Py_ssize_t __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("__len__", 0);
+
+ /* "View.MemoryView":611
+ *
+ * def __len__(self):
+ * if self.view.ndim >= 1: # <<<<<<<<<<<<<<
+ * return self.view.shape[0]
+ *
+ */
+ __pyx_t_1 = (__pyx_v_self->view.ndim >= 1);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":612
+ * def __len__(self):
+ * if self.view.ndim >= 1:
+ * return self.view.shape[0] # <<<<<<<<<<<<<<
+ *
+ * return 0
+ */
+ __pyx_r = (__pyx_v_self->view.shape[0]);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":611
+ *
+ * def __len__(self):
+ * if self.view.ndim >= 1: # <<<<<<<<<<<<<<
+ * return self.view.shape[0]
+ *
+ */
+ }
+
+ /* "View.MemoryView":614
+ * return self.view.shape[0]
+ *
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ * def __repr__(self):
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":610
+ * return self._size
+ *
+ * def __len__(self): # <<<<<<<<<<<<<<
+ * if self.view.ndim >= 1:
+ * return self.view.shape[0]
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":616
+ * return 0
+ *
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,
+ * id(self))
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_memoryview___repr__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__repr__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_12__repr__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__repr__", 0);
+
+ /* "View.MemoryView":617
+ *
+ * def __repr__(self):
+ * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<<
+ * id(self))
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 617, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "View.MemoryView":618
+ * def __repr__(self):
+ * return "" % (self.base.__class__.__name__,
+ * id(self)) # <<<<<<<<<<<<<<
+ *
+ * def __str__(self):
+ */
+ __pyx_t_2 = __Pyx_PyObject_CallOneArg(__pyx_builtin_id, ((PyObject *)__pyx_v_self)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 618, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+
+ /* "View.MemoryView":617
+ *
+ * def __repr__(self):
+ * return "" % (self.base.__class__.__name__, # <<<<<<<<<<<<<<
+ * id(self))
+ *
+ */
+ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 617, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(1, 617, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_2);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_2)) __PYX_ERR(1, 617, __pyx_L1_error);
+ __pyx_t_1 = 0;
+ __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_at_0x_x, __pyx_t_3); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 617, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":616
+ * return 0
+ *
+ * def __repr__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,
+ * id(self))
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__repr__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":620
+ * id(self))
+ *
+ * def __str__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,)
+ *
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self); /*proto*/
+static PyObject *__pyx_memoryview___str__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__str__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_14__str__(struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__str__", 0);
+
+ /* "View.MemoryView":621
+ *
+ * def __str__(self):
+ * return "" % (self.base.__class__.__name__,) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v_self), __pyx_n_s_base); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyObject_GetAttrStr(__pyx_t_1, __pyx_n_s_class); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 621, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_PyObject_GetAttrStr(__pyx_t_2, __pyx_n_s_name_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_2 = PyTuple_New(1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 621, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_2, 0, __pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error);
+ __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_MemoryView_of_r_object, __pyx_t_2); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 621, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":620
+ * id(self))
+ *
+ * def __str__(self): # <<<<<<<<<<<<<<
+ * return "" % (self.base.__class__.__name__,)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__str__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":624
+ *
+ *
+ * def is_c_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_memoryview_is_c_contig(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("is_c_contig (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 624, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("is_c_contig", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "is_c_contig", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_16is_c_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice *__pyx_v_mslice;
+ __Pyx_memviewslice __pyx_v_tmp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("is_c_contig", 0);
+
+ /* "View.MemoryView":627
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<<
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ *
+ */
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 627, __pyx_L1_error)
+ __pyx_v_mslice = __pyx_t_1;
+
+ /* "View.MemoryView":628
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp)
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * def is_f_contig(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'C', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 628, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":624
+ *
+ *
+ * def is_c_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_c_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":630
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ *
+ * def is_f_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_memoryview_is_f_contig(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("is_f_contig (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 630, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("is_f_contig", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "is_f_contig", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_18is_f_contig(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice *__pyx_v_mslice;
+ __Pyx_memviewslice __pyx_v_tmp;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice *__pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("is_f_contig", 0);
+
+ /* "View.MemoryView":633
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp) # <<<<<<<<<<<<<<
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ *
+ */
+ __pyx_t_1 = __pyx_memoryview_get_slice_from_memoryview(__pyx_v_self, (&__pyx_v_tmp)); if (unlikely(__pyx_t_1 == ((__Pyx_memviewslice *)NULL))) __PYX_ERR(1, 633, __pyx_L1_error)
+ __pyx_v_mslice = __pyx_t_1;
+
+ /* "View.MemoryView":634
+ * cdef __Pyx_memviewslice tmp
+ * mslice = get_slice_from_memview(self, &tmp)
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim) # <<<<<<<<<<<<<<
+ *
+ * def copy(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_memviewslice_is_contig((__pyx_v_mslice[0]), 'F', __pyx_v_self->view.ndim)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 634, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":630
+ * return slice_is_contig(mslice[0], 'C', self.view.ndim)
+ *
+ * def is_f_contig(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice *mslice
+ * cdef __Pyx_memviewslice tmp
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.is_f_contig", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":636
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ *
+ * def copy(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice mslice
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_memoryview_copy(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("copy (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 636, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("copy", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "copy", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_20copy(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice __pyx_v_mslice;
+ int __pyx_v_flags;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("copy", 0);
+
+ /* "View.MemoryView":638
+ * def copy(self):
+ * cdef __Pyx_memviewslice mslice
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS # <<<<<<<<<<<<<<
+ *
+ * slice_copy(self, &mslice)
+ */
+ __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_F_CONTIGUOUS));
+
+ /* "View.MemoryView":640
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ *
+ * slice_copy(self, &mslice) # <<<<<<<<<<<<<<
+ * mslice = slice_copy_contig(&mslice, "c", self.view.ndim,
+ * self.view.itemsize,
+ */
+ __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_mslice));
+
+ /* "View.MemoryView":641
+ *
+ * slice_copy(self, &mslice)
+ * mslice = slice_copy_contig(&mslice, "c", self.view.ndim, # <<<<<<<<<<<<<<
+ * self.view.itemsize,
+ * flags|PyBUF_C_CONTIGUOUS,
+ */
+ __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_mslice), ((char *)"c"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_C_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 641, __pyx_L1_error)
+ __pyx_v_mslice = __pyx_t_1;
+
+ /* "View.MemoryView":646
+ * self.dtype_is_object)
+ *
+ * return memoryview_copy_from_slice(self, &mslice) # <<<<<<<<<<<<<<
+ *
+ * def copy_fortran(self):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_mslice)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 646, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":636
+ * return slice_is_contig(mslice[0], 'F', self.view.ndim)
+ *
+ * def copy(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice mslice
+ * cdef int flags = self.flags & ~PyBUF_F_CONTIGUOUS
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":648
+ * return memoryview_copy_from_slice(self, &mslice)
+ *
+ * def copy_fortran(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice src, dst
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_memoryview_copy_fortran(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("copy_fortran (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 648, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("copy_fortran", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "copy_fortran", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_memoryview___pyx_pf_15View_dot_MemoryView_10memoryview_22copy_fortran(struct __pyx_memoryview_obj *__pyx_v_self) {
+ __Pyx_memviewslice __pyx_v_src;
+ __Pyx_memviewslice __pyx_v_dst;
+ int __pyx_v_flags;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_memviewslice __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("copy_fortran", 0);
+
+ /* "View.MemoryView":650
+ * def copy_fortran(self):
+ * cdef __Pyx_memviewslice src, dst
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS # <<<<<<<<<<<<<<
+ *
+ * slice_copy(self, &src)
+ */
+ __pyx_v_flags = (__pyx_v_self->flags & (~PyBUF_C_CONTIGUOUS));
+
+ /* "View.MemoryView":652
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ *
+ * slice_copy(self, &src) # <<<<<<<<<<<<<<
+ * dst = slice_copy_contig(&src, "fortran", self.view.ndim,
+ * self.view.itemsize,
+ */
+ __pyx_memoryview_slice_copy(__pyx_v_self, (&__pyx_v_src));
+
+ /* "View.MemoryView":653
+ *
+ * slice_copy(self, &src)
+ * dst = slice_copy_contig(&src, "fortran", self.view.ndim, # <<<<<<<<<<<<<<
+ * self.view.itemsize,
+ * flags|PyBUF_F_CONTIGUOUS,
+ */
+ __pyx_t_1 = __pyx_memoryview_copy_new_contig((&__pyx_v_src), ((char *)"fortran"), __pyx_v_self->view.ndim, __pyx_v_self->view.itemsize, (__pyx_v_flags | PyBUF_F_CONTIGUOUS), __pyx_v_self->dtype_is_object); if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 653, __pyx_L1_error)
+ __pyx_v_dst = __pyx_t_1;
+
+ /* "View.MemoryView":658
+ * self.dtype_is_object)
+ *
+ * return memoryview_copy_from_slice(self, &dst) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_memoryview_copy_object_from_slice(__pyx_v_self, (&__pyx_v_dst)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 658, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":648
+ * return memoryview_copy_from_slice(self, &mslice)
+ *
+ * def copy_fortran(self): # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice src, dst
+ * cdef int flags = self.flags & ~PyBUF_C_CONTIGUOUS
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.memoryview.copy_fortran", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryview_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 1, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_memoryview___reduce_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryview___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryview_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[1] = {0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 3, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+ (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
+ }
+ } else if (unlikely(__pyx_nargs != 1)) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ }
+ __pyx_v___pyx_state = values[0];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_memoryview_2__setstate_cython__(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v___pyx_state);
+
+ /* function exit code */
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryview_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryview_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<<
+ */
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.memoryview.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":662
+ *
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<<
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo
+ */
+
+static PyObject *__pyx_memoryview_new(PyObject *__pyx_v_o, int __pyx_v_flags, int __pyx_v_dtype_is_object, __Pyx_TypeInfo *__pyx_v_typeinfo) {
+ struct __pyx_memoryview_obj *__pyx_v_result = 0;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_cwrapper", 0);
+
+ /* "View.MemoryView":663
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object) # <<<<<<<<<<<<<<
+ * result.typeinfo = typeinfo
+ * return result
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_flags); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 663, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 663, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 663, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_v_o);
+ __Pyx_GIVEREF(__pyx_v_o);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_o)) __PYX_ERR(1, 663, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_1)) __PYX_ERR(1, 663, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_2);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2)) __PYX_ERR(1, 663, __pyx_L1_error);
+ __pyx_t_1 = 0;
+ __pyx_t_2 = 0;
+ __pyx_t_2 = __Pyx_PyObject_Call(((PyObject *)__pyx_memoryview_type), __pyx_t_3, NULL); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 663, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_v_result = ((struct __pyx_memoryview_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":664
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo):
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo # <<<<<<<<<<<<<<
+ * return result
+ *
+ */
+ __pyx_v_result->typeinfo = __pyx_v_typeinfo;
+
+ /* "View.MemoryView":665
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo
+ * return result # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_check')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF((PyObject *)__pyx_v_result);
+ __pyx_r = ((PyObject *)__pyx_v_result);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":662
+ *
+ * @cname('__pyx_memoryview_new')
+ * cdef memoryview_cwrapper(object o, int flags, bint dtype_is_object, __Pyx_TypeInfo *typeinfo): # <<<<<<<<<<<<<<
+ * cdef memoryview result = memoryview(o, flags, dtype_is_object)
+ * result.typeinfo = typeinfo
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_cwrapper", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":668
+ *
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o) noexcept: # <<<<<<<<<<<<<<
+ * return isinstance(o, memoryview)
+ *
+ */
+
+static CYTHON_INLINE int __pyx_memoryview_check(PyObject *__pyx_v_o) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("memoryview_check", 0);
+
+ /* "View.MemoryView":669
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o) noexcept:
+ * return isinstance(o, memoryview) # <<<<<<<<<<<<<<
+ *
+ * cdef tuple _unellipsify(object index, int ndim):
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(__pyx_v_o, __pyx_memoryview_type);
+ __pyx_r = __pyx_t_1;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":668
+ *
+ * @cname('__pyx_memoryview_check')
+ * cdef inline bint memoryview_check(object o) noexcept: # <<<<<<<<<<<<<<
+ * return isinstance(o, memoryview)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":671
+ * return isinstance(o, memoryview)
+ *
+ * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<<
+ * """
+ * Replace all ellipses with full slices and fill incomplete indices with
+ */
+
+static PyObject *_unellipsify(PyObject *__pyx_v_index, int __pyx_v_ndim) {
+ Py_ssize_t __pyx_v_idx;
+ PyObject *__pyx_v_tup = NULL;
+ PyObject *__pyx_v_result = NULL;
+ int __pyx_v_have_slices;
+ int __pyx_v_seen_ellipsis;
+ PyObject *__pyx_v_item = NULL;
+ Py_ssize_t __pyx_v_nslices;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ Py_ssize_t __pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+ Py_UCS4 __pyx_t_6;
+ PyObject *__pyx_t_7 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("_unellipsify", 0);
+
+ /* "View.MemoryView":677
+ * """
+ * cdef Py_ssize_t idx
+ * tup = index if isinstance(index, tuple) else (index,) # <<<<<<<<<<<<<<
+ *
+ * result = [slice(None)] * ndim
+ */
+ __pyx_t_2 = PyTuple_Check(__pyx_v_index);
+ if (__pyx_t_2) {
+ __Pyx_INCREF(((PyObject*)__pyx_v_index));
+ __pyx_t_1 = __pyx_v_index;
+ } else {
+ __pyx_t_3 = PyTuple_New(1); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 677, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(__pyx_v_index);
+ __Pyx_GIVEREF(__pyx_v_index);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_v_index)) __PYX_ERR(1, 677, __pyx_L1_error);
+ __pyx_t_1 = __pyx_t_3;
+ __pyx_t_3 = 0;
+ }
+ __pyx_v_tup = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":679
+ * tup = index if isinstance(index, tuple) else (index,)
+ *
+ * result = [slice(None)] * ndim # <<<<<<<<<<<<<<
+ * have_slices = False
+ * seen_ellipsis = False
+ */
+ __pyx_t_1 = PyList_New(1 * ((__pyx_v_ndim<0) ? 0:__pyx_v_ndim)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 679, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ { Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < __pyx_v_ndim; __pyx_temp++) {
+ __Pyx_INCREF(__pyx_slice__5);
+ __Pyx_GIVEREF(__pyx_slice__5);
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_1, __pyx_temp, __pyx_slice__5)) __PYX_ERR(1, 679, __pyx_L1_error);
+ }
+ }
+ __pyx_v_result = ((PyObject*)__pyx_t_1);
+ __pyx_t_1 = 0;
+
+ /* "View.MemoryView":680
+ *
+ * result = [slice(None)] * ndim
+ * have_slices = False # <<<<<<<<<<<<<<
+ * seen_ellipsis = False
+ * idx = 0
+ */
+ __pyx_v_have_slices = 0;
+
+ /* "View.MemoryView":681
+ * result = [slice(None)] * ndim
+ * have_slices = False
+ * seen_ellipsis = False # <<<<<<<<<<<<<<
+ * idx = 0
+ * for item in tup:
+ */
+ __pyx_v_seen_ellipsis = 0;
+
+ /* "View.MemoryView":682
+ * have_slices = False
+ * seen_ellipsis = False
+ * idx = 0 # <<<<<<<<<<<<<<
+ * for item in tup:
+ * if item is Ellipsis:
+ */
+ __pyx_v_idx = 0;
+
+ /* "View.MemoryView":683
+ * seen_ellipsis = False
+ * idx = 0
+ * for item in tup: # <<<<<<<<<<<<<<
+ * if item is Ellipsis:
+ * if not seen_ellipsis:
+ */
+ if (unlikely(__pyx_v_tup == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' object is not iterable");
+ __PYX_ERR(1, 683, __pyx_L1_error)
+ }
+ __pyx_t_1 = __pyx_v_tup; __Pyx_INCREF(__pyx_t_1); __pyx_t_4 = 0;
+ for (;;) {
+ if (__pyx_t_4 >= PyTuple_GET_SIZE(__pyx_t_1)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_3 = PyTuple_GET_ITEM(__pyx_t_1, __pyx_t_4); __Pyx_INCREF(__pyx_t_3); __pyx_t_4++; if (unlikely((0 < 0))) __PYX_ERR(1, 683, __pyx_L1_error)
+ #else
+ __pyx_t_3 = PySequence_ITEM(__pyx_t_1, __pyx_t_4); __pyx_t_4++; if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 683, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ #endif
+ __Pyx_XDECREF_SET(__pyx_v_item, __pyx_t_3);
+ __pyx_t_3 = 0;
+
+ /* "View.MemoryView":684
+ * idx = 0
+ * for item in tup:
+ * if item is Ellipsis: # <<<<<<<<<<<<<<
+ * if not seen_ellipsis:
+ * idx += ndim - len(tup)
+ */
+ __pyx_t_2 = (__pyx_v_item == __pyx_builtin_Ellipsis);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":685
+ * for item in tup:
+ * if item is Ellipsis:
+ * if not seen_ellipsis: # <<<<<<<<<<<<<<
+ * idx += ndim - len(tup)
+ * seen_ellipsis = True
+ */
+ __pyx_t_2 = (!__pyx_v_seen_ellipsis);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":686
+ * if item is Ellipsis:
+ * if not seen_ellipsis:
+ * idx += ndim - len(tup) # <<<<<<<<<<<<<<
+ * seen_ellipsis = True
+ * have_slices = True
+ */
+ if (unlikely(__pyx_v_tup == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+ __PYX_ERR(1, 686, __pyx_L1_error)
+ }
+ __pyx_t_5 = __Pyx_PyTuple_GET_SIZE(__pyx_v_tup); if (unlikely(__pyx_t_5 == ((Py_ssize_t)-1))) __PYX_ERR(1, 686, __pyx_L1_error)
+ __pyx_v_idx = (__pyx_v_idx + (__pyx_v_ndim - __pyx_t_5));
+
+ /* "View.MemoryView":687
+ * if not seen_ellipsis:
+ * idx += ndim - len(tup)
+ * seen_ellipsis = True # <<<<<<<<<<<<<<
+ * have_slices = True
+ * else:
+ */
+ __pyx_v_seen_ellipsis = 1;
+
+ /* "View.MemoryView":685
+ * for item in tup:
+ * if item is Ellipsis:
+ * if not seen_ellipsis: # <<<<<<<<<<<<<<
+ * idx += ndim - len(tup)
+ * seen_ellipsis = True
+ */
+ }
+
+ /* "View.MemoryView":688
+ * idx += ndim - len(tup)
+ * seen_ellipsis = True
+ * have_slices = True # <<<<<<<<<<<<<<
+ * else:
+ * if isinstance(item, slice):
+ */
+ __pyx_v_have_slices = 1;
+
+ /* "View.MemoryView":684
+ * idx = 0
+ * for item in tup:
+ * if item is Ellipsis: # <<<<<<<<<<<<<<
+ * if not seen_ellipsis:
+ * idx += ndim - len(tup)
+ */
+ goto __pyx_L5;
+ }
+
+ /* "View.MemoryView":690
+ * have_slices = True
+ * else:
+ * if isinstance(item, slice): # <<<<<<<<<<<<<<
+ * have_slices = True
+ * elif not PyIndex_Check(item):
+ */
+ /*else*/ {
+ __pyx_t_2 = PySlice_Check(__pyx_v_item);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":691
+ * else:
+ * if isinstance(item, slice):
+ * have_slices = True # <<<<<<<<<<<<<<
+ * elif not PyIndex_Check(item):
+ * raise TypeError, f"Cannot index with type '{type(item)}'"
+ */
+ __pyx_v_have_slices = 1;
+
+ /* "View.MemoryView":690
+ * have_slices = True
+ * else:
+ * if isinstance(item, slice): # <<<<<<<<<<<<<<
+ * have_slices = True
+ * elif not PyIndex_Check(item):
+ */
+ goto __pyx_L7;
+ }
+
+ /* "View.MemoryView":692
+ * if isinstance(item, slice):
+ * have_slices = True
+ * elif not PyIndex_Check(item): # <<<<<<<<<<<<<<
+ * raise TypeError, f"Cannot index with type '{type(item)}'"
+ * result[idx] = item
+ */
+ __pyx_t_2 = (!(PyIndex_Check(__pyx_v_item) != 0));
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":693
+ * have_slices = True
+ * elif not PyIndex_Check(item):
+ * raise TypeError, f"Cannot index with type '{type(item)}'" # <<<<<<<<<<<<<<
+ * result[idx] = item
+ * idx += 1
+ */
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 693, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_5 = 0;
+ __pyx_t_6 = 127;
+ __Pyx_INCREF(__pyx_kp_u_Cannot_index_with_type);
+ __pyx_t_5 += 24;
+ __Pyx_GIVEREF(__pyx_kp_u_Cannot_index_with_type);
+ PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Cannot_index_with_type);
+ __pyx_t_7 = __Pyx_PyObject_FormatSimple(((PyObject *)Py_TYPE(__pyx_v_item)), __pyx_empty_unicode); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 693, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_6 = (__Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) > __pyx_t_6) ? __Pyx_PyUnicode_MAX_CHAR_VALUE(__pyx_t_7) : __pyx_t_6;
+ __pyx_t_5 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_7);
+ __Pyx_GIVEREF(__pyx_t_7);
+ PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7);
+ __pyx_t_7 = 0;
+ __Pyx_INCREF(__pyx_kp_u__6);
+ __pyx_t_5 += 1;
+ __Pyx_GIVEREF(__pyx_kp_u__6);
+ PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__6);
+ __pyx_t_7 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_5, __pyx_t_6); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 693, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_t_7, 0, 0);
+ __Pyx_DECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __PYX_ERR(1, 693, __pyx_L1_error)
+
+ /* "View.MemoryView":692
+ * if isinstance(item, slice):
+ * have_slices = True
+ * elif not PyIndex_Check(item): # <<<<<<<<<<<<<<
+ * raise TypeError, f"Cannot index with type '{type(item)}'"
+ * result[idx] = item
+ */
+ }
+ __pyx_L7:;
+
+ /* "View.MemoryView":694
+ * elif not PyIndex_Check(item):
+ * raise TypeError, f"Cannot index with type '{type(item)}'"
+ * result[idx] = item # <<<<<<<<<<<<<<
+ * idx += 1
+ *
+ */
+ if (unlikely((__Pyx_SetItemInt(__pyx_v_result, __pyx_v_idx, __pyx_v_item, Py_ssize_t, 1, PyInt_FromSsize_t, 1, 1, 1) < 0))) __PYX_ERR(1, 694, __pyx_L1_error)
+ }
+ __pyx_L5:;
+
+ /* "View.MemoryView":695
+ * raise TypeError, f"Cannot index with type '{type(item)}'"
+ * result[idx] = item
+ * idx += 1 # <<<<<<<<<<<<<<
+ *
+ * nslices = ndim - idx
+ */
+ __pyx_v_idx = (__pyx_v_idx + 1);
+
+ /* "View.MemoryView":683
+ * seen_ellipsis = False
+ * idx = 0
+ * for item in tup: # <<<<<<<<<<<<<<
+ * if item is Ellipsis:
+ * if not seen_ellipsis:
+ */
+ }
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "View.MemoryView":697
+ * idx += 1
+ *
+ * nslices = ndim - idx # <<<<<<<<<<<<<<
+ * return have_slices or nslices, tuple(result)
+ *
+ */
+ __pyx_v_nslices = (__pyx_v_ndim - __pyx_v_idx);
+
+ /* "View.MemoryView":698
+ *
+ * nslices = ndim - idx
+ * return have_slices or nslices, tuple(result) # <<<<<<<<<<<<<<
+ *
+ * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1:
+ */
+ __Pyx_XDECREF(__pyx_r);
+ if (!__pyx_v_have_slices) {
+ } else {
+ __pyx_t_7 = __Pyx_PyBool_FromLong(__pyx_v_have_slices); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_1 = __pyx_t_7;
+ __pyx_t_7 = 0;
+ goto __pyx_L9_bool_binop_done;
+ }
+ __pyx_t_7 = PyInt_FromSsize_t(__pyx_v_nslices); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_1 = __pyx_t_7;
+ __pyx_t_7 = 0;
+ __pyx_L9_bool_binop_done:;
+ __pyx_t_7 = PyList_AsTuple(__pyx_v_result); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_7);
+ __pyx_t_3 = PyTuple_New(2); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 698, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_1);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_t_1)) __PYX_ERR(1, 698, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_7);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_7)) __PYX_ERR(1, 698, __pyx_L1_error);
+ __pyx_t_1 = 0;
+ __pyx_t_7 = 0;
+ __pyx_r = ((PyObject*)__pyx_t_3);
+ __pyx_t_3 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":671
+ * return isinstance(o, memoryview)
+ *
+ * cdef tuple _unellipsify(object index, int ndim): # <<<<<<<<<<<<<<
+ * """
+ * Replace all ellipses with full slices and fill incomplete indices with
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_AddTraceback("View.MemoryView._unellipsify", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v_tup);
+ __Pyx_XDECREF(__pyx_v_result);
+ __Pyx_XDECREF(__pyx_v_item);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":700
+ * return have_slices or nslices, tuple(result)
+ *
+ * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: # <<<<<<<<<<<<<<
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0:
+ */
+
+static int assert_direct_dimensions(Py_ssize_t *__pyx_v_suboffsets, int __pyx_v_ndim) {
+ Py_ssize_t __pyx_v_suboffset;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t *__pyx_t_1;
+ Py_ssize_t *__pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ int __pyx_t_4;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("assert_direct_dimensions", 0);
+
+ /* "View.MemoryView":701
+ *
+ * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1:
+ * for suboffset in suboffsets[:ndim]: # <<<<<<<<<<<<<<
+ * if suboffset >= 0:
+ * raise ValueError, "Indirect dimensions not supported"
+ */
+ __pyx_t_2 = (__pyx_v_suboffsets + __pyx_v_ndim);
+ for (__pyx_t_3 = __pyx_v_suboffsets; __pyx_t_3 < __pyx_t_2; __pyx_t_3++) {
+ __pyx_t_1 = __pyx_t_3;
+ __pyx_v_suboffset = (__pyx_t_1[0]);
+
+ /* "View.MemoryView":702
+ * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1:
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * raise ValueError, "Indirect dimensions not supported"
+ * return 0 # return type just used as an error flag
+ */
+ __pyx_t_4 = (__pyx_v_suboffset >= 0);
+ if (unlikely(__pyx_t_4)) {
+
+ /* "View.MemoryView":703
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0:
+ * raise ValueError, "Indirect dimensions not supported" # <<<<<<<<<<<<<<
+ * return 0 # return type just used as an error flag
+ *
+ */
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_kp_s_Indirect_dimensions_not_supporte, 0, 0);
+ __PYX_ERR(1, 703, __pyx_L1_error)
+
+ /* "View.MemoryView":702
+ * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1:
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * raise ValueError, "Indirect dimensions not supported"
+ * return 0 # return type just used as an error flag
+ */
+ }
+ }
+
+ /* "View.MemoryView":704
+ * if suboffset >= 0:
+ * raise ValueError, "Indirect dimensions not supported"
+ * return 0 # return type just used as an error flag # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":700
+ * return have_slices or nslices, tuple(result)
+ *
+ * cdef int assert_direct_dimensions(Py_ssize_t *suboffsets, int ndim) except -1: # <<<<<<<<<<<<<<
+ * for suboffset in suboffsets[:ndim]:
+ * if suboffset >= 0:
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView.assert_direct_dimensions", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":711
+ *
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<<
+ * cdef int new_ndim = 0, suboffset_dim = -1, dim
+ * cdef bint negative_step
+ */
+
+static struct __pyx_memoryview_obj *__pyx_memview_slice(struct __pyx_memoryview_obj *__pyx_v_memview, PyObject *__pyx_v_indices) {
+ int __pyx_v_new_ndim;
+ int __pyx_v_suboffset_dim;
+ int __pyx_v_dim;
+ __Pyx_memviewslice __pyx_v_src;
+ __Pyx_memviewslice __pyx_v_dst;
+ __Pyx_memviewslice *__pyx_v_p_src;
+ struct __pyx_memoryviewslice_obj *__pyx_v_memviewsliceobj = 0;
+ __Pyx_memviewslice *__pyx_v_p_dst;
+ int *__pyx_v_p_suboffset_dim;
+ Py_ssize_t __pyx_v_start;
+ Py_ssize_t __pyx_v_stop;
+ Py_ssize_t __pyx_v_step;
+ Py_ssize_t __pyx_v_cindex;
+ int __pyx_v_have_start;
+ int __pyx_v_have_stop;
+ int __pyx_v_have_step;
+ PyObject *__pyx_v_index = NULL;
+ struct __pyx_memoryview_obj *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ struct __pyx_memoryview_obj *__pyx_t_3;
+ char *__pyx_t_4;
+ int __pyx_t_5;
+ Py_ssize_t __pyx_t_6;
+ PyObject *(*__pyx_t_7)(PyObject *);
+ PyObject *__pyx_t_8 = NULL;
+ Py_ssize_t __pyx_t_9;
+ int __pyx_t_10;
+ Py_ssize_t __pyx_t_11;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memview_slice", 0);
+
+ /* "View.MemoryView":712
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices):
+ * cdef int new_ndim = 0, suboffset_dim = -1, dim # <<<<<<<<<<<<<<
+ * cdef bint negative_step
+ * cdef __Pyx_memviewslice src, dst
+ */
+ __pyx_v_new_ndim = 0;
+ __pyx_v_suboffset_dim = -1;
+
+ /* "View.MemoryView":719
+ *
+ *
+ * memset(&dst, 0, sizeof(dst)) # <<<<<<<<<<<<<<
+ *
+ * cdef _memoryviewslice memviewsliceobj
+ */
+ (void)(memset((&__pyx_v_dst), 0, (sizeof(__pyx_v_dst))));
+
+ /* "View.MemoryView":723
+ * cdef _memoryviewslice memviewsliceobj
+ *
+ * assert memview.view.ndim > 0 # <<<<<<<<<<<<<<
+ *
+ * if isinstance(memview, _memoryviewslice):
+ */
+ #ifndef CYTHON_WITHOUT_ASSERTIONS
+ if (unlikely(__pyx_assertions_enabled())) {
+ __pyx_t_1 = (__pyx_v_memview->view.ndim > 0);
+ if (unlikely(!__pyx_t_1)) {
+ __Pyx_Raise(__pyx_builtin_AssertionError, 0, 0, 0);
+ __PYX_ERR(1, 723, __pyx_L1_error)
+ }
+ }
+ #else
+ if ((1)); else __PYX_ERR(1, 723, __pyx_L1_error)
+ #endif
+
+ /* "View.MemoryView":725
+ * assert memview.view.ndim > 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * memviewsliceobj = memview
+ * p_src = &memviewsliceobj.from_slice
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":726
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * memviewsliceobj = memview # <<<<<<<<<<<<<<
+ * p_src = &memviewsliceobj.from_slice
+ * else:
+ */
+ if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 726, __pyx_L1_error)
+ __pyx_t_2 = ((PyObject *)__pyx_v_memview);
+ __Pyx_INCREF(__pyx_t_2);
+ __pyx_v_memviewsliceobj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":727
+ * if isinstance(memview, _memoryviewslice):
+ * memviewsliceobj = memview
+ * p_src = &memviewsliceobj.from_slice # <<<<<<<<<<<<<<
+ * else:
+ * slice_copy(memview, &src)
+ */
+ __pyx_v_p_src = (&__pyx_v_memviewsliceobj->from_slice);
+
+ /* "View.MemoryView":725
+ * assert memview.view.ndim > 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * memviewsliceobj = memview
+ * p_src = &memviewsliceobj.from_slice
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":729
+ * p_src = &memviewsliceobj.from_slice
+ * else:
+ * slice_copy(memview, &src) # <<<<<<<<<<<<<<
+ * p_src = &src
+ *
+ */
+ /*else*/ {
+ __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_src));
+
+ /* "View.MemoryView":730
+ * else:
+ * slice_copy(memview, &src)
+ * p_src = &src # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_p_src = (&__pyx_v_src);
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":736
+ *
+ *
+ * dst.memview = p_src.memview # <<<<<<<<<<<<<<
+ * dst.data = p_src.data
+ *
+ */
+ __pyx_t_3 = __pyx_v_p_src->memview;
+ __pyx_v_dst.memview = __pyx_t_3;
+
+ /* "View.MemoryView":737
+ *
+ * dst.memview = p_src.memview
+ * dst.data = p_src.data # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_4 = __pyx_v_p_src->data;
+ __pyx_v_dst.data = __pyx_t_4;
+
+ /* "View.MemoryView":742
+ *
+ *
+ * cdef __Pyx_memviewslice *p_dst = &dst # <<<<<<<<<<<<<<
+ * cdef int *p_suboffset_dim = &suboffset_dim
+ * cdef Py_ssize_t start, stop, step, cindex
+ */
+ __pyx_v_p_dst = (&__pyx_v_dst);
+
+ /* "View.MemoryView":743
+ *
+ * cdef __Pyx_memviewslice *p_dst = &dst
+ * cdef int *p_suboffset_dim = &suboffset_dim # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t start, stop, step, cindex
+ * cdef bint have_start, have_stop, have_step
+ */
+ __pyx_v_p_suboffset_dim = (&__pyx_v_suboffset_dim);
+
+ /* "View.MemoryView":747
+ * cdef bint have_start, have_stop, have_step
+ *
+ * for dim, index in enumerate(indices): # <<<<<<<<<<<<<<
+ * if PyIndex_Check(index):
+ * cindex = index
+ */
+ __pyx_t_5 = 0;
+ if (likely(PyList_CheckExact(__pyx_v_indices)) || PyTuple_CheckExact(__pyx_v_indices)) {
+ __pyx_t_2 = __pyx_v_indices; __Pyx_INCREF(__pyx_t_2); __pyx_t_6 = 0;
+ __pyx_t_7 = NULL;
+ } else {
+ __pyx_t_6 = -1; __pyx_t_2 = PyObject_GetIter(__pyx_v_indices); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 747, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_7 = __Pyx_PyObject_GetIterNextFunc(__pyx_t_2); if (unlikely(!__pyx_t_7)) __PYX_ERR(1, 747, __pyx_L1_error)
+ }
+ for (;;) {
+ if (likely(!__pyx_t_7)) {
+ if (likely(PyList_CheckExact(__pyx_t_2))) {
+ if (__pyx_t_6 >= PyList_GET_SIZE(__pyx_t_2)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_8 = PyList_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(1, 747, __pyx_L1_error)
+ #else
+ __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 747, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ #endif
+ } else {
+ if (__pyx_t_6 >= PyTuple_GET_SIZE(__pyx_t_2)) break;
+ #if CYTHON_ASSUME_SAFE_MACROS && !CYTHON_AVOID_BORROWED_REFS
+ __pyx_t_8 = PyTuple_GET_ITEM(__pyx_t_2, __pyx_t_6); __Pyx_INCREF(__pyx_t_8); __pyx_t_6++; if (unlikely((0 < 0))) __PYX_ERR(1, 747, __pyx_L1_error)
+ #else
+ __pyx_t_8 = PySequence_ITEM(__pyx_t_2, __pyx_t_6); __pyx_t_6++; if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 747, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ #endif
+ }
+ } else {
+ __pyx_t_8 = __pyx_t_7(__pyx_t_2);
+ if (unlikely(!__pyx_t_8)) {
+ PyObject* exc_type = PyErr_Occurred();
+ if (exc_type) {
+ if (likely(__Pyx_PyErr_GivenExceptionMatches(exc_type, PyExc_StopIteration))) PyErr_Clear();
+ else __PYX_ERR(1, 747, __pyx_L1_error)
+ }
+ break;
+ }
+ __Pyx_GOTREF(__pyx_t_8);
+ }
+ __Pyx_XDECREF_SET(__pyx_v_index, __pyx_t_8);
+ __pyx_t_8 = 0;
+ __pyx_v_dim = __pyx_t_5;
+ __pyx_t_5 = (__pyx_t_5 + 1);
+
+ /* "View.MemoryView":748
+ *
+ * for dim, index in enumerate(indices):
+ * if PyIndex_Check(index): # <<<<<<<<<<<<<<
+ * cindex = index
+ * slice_memviewslice(
+ */
+ __pyx_t_1 = (PyIndex_Check(__pyx_v_index) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":749
+ * for dim, index in enumerate(indices):
+ * if PyIndex_Check(index):
+ * cindex = index # <<<<<<<<<<<<<<
+ * slice_memviewslice(
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ */
+ __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_v_index); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 749, __pyx_L1_error)
+ __pyx_v_cindex = __pyx_t_9;
+
+ /* "View.MemoryView":750
+ * if PyIndex_Check(index):
+ * cindex = index
+ * slice_memviewslice( # <<<<<<<<<<<<<<
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ * dim, new_ndim, p_suboffset_dim,
+ */
+ __pyx_t_10 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_cindex, 0, 0, 0, 0, 0, 0); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 750, __pyx_L1_error)
+
+ /* "View.MemoryView":748
+ *
+ * for dim, index in enumerate(indices):
+ * if PyIndex_Check(index): # <<<<<<<<<<<<<<
+ * cindex = index
+ * slice_memviewslice(
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":756
+ * 0, 0, 0, # have_{start,stop,step}
+ * False)
+ * elif index is None: # <<<<<<<<<<<<<<
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0
+ */
+ __pyx_t_1 = (__pyx_v_index == Py_None);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":757
+ * False)
+ * elif index is None:
+ * p_dst.shape[new_ndim] = 1 # <<<<<<<<<<<<<<
+ * p_dst.strides[new_ndim] = 0
+ * p_dst.suboffsets[new_ndim] = -1
+ */
+ (__pyx_v_p_dst->shape[__pyx_v_new_ndim]) = 1;
+
+ /* "View.MemoryView":758
+ * elif index is None:
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0 # <<<<<<<<<<<<<<
+ * p_dst.suboffsets[new_ndim] = -1
+ * new_ndim += 1
+ */
+ (__pyx_v_p_dst->strides[__pyx_v_new_ndim]) = 0;
+
+ /* "View.MemoryView":759
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0
+ * p_dst.suboffsets[new_ndim] = -1 # <<<<<<<<<<<<<<
+ * new_ndim += 1
+ * else:
+ */
+ (__pyx_v_p_dst->suboffsets[__pyx_v_new_ndim]) = -1L;
+
+ /* "View.MemoryView":760
+ * p_dst.strides[new_ndim] = 0
+ * p_dst.suboffsets[new_ndim] = -1
+ * new_ndim += 1 # <<<<<<<<<<<<<<
+ * else:
+ * start = index.start or 0
+ */
+ __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
+
+ /* "View.MemoryView":756
+ * 0, 0, 0, # have_{start,stop,step}
+ * False)
+ * elif index is None: # <<<<<<<<<<<<<<
+ * p_dst.shape[new_ndim] = 1
+ * p_dst.strides[new_ndim] = 0
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":762
+ * new_ndim += 1
+ * else:
+ * start = index.start or 0 # <<<<<<<<<<<<<<
+ * stop = index.stop or 0
+ * step = index.step or 0
+ */
+ /*else*/ {
+ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 762, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 762, __pyx_L1_error)
+ if (!__pyx_t_1) {
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ } else {
+ __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 762, __pyx_L1_error)
+ __pyx_t_9 = __pyx_t_11;
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ goto __pyx_L7_bool_binop_done;
+ }
+ __pyx_t_9 = 0;
+ __pyx_L7_bool_binop_done:;
+ __pyx_v_start = __pyx_t_9;
+
+ /* "View.MemoryView":763
+ * else:
+ * start = index.start or 0
+ * stop = index.stop or 0 # <<<<<<<<<<<<<<
+ * step = index.step or 0
+ *
+ */
+ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 763, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 763, __pyx_L1_error)
+ if (!__pyx_t_1) {
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ } else {
+ __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 763, __pyx_L1_error)
+ __pyx_t_9 = __pyx_t_11;
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ goto __pyx_L9_bool_binop_done;
+ }
+ __pyx_t_9 = 0;
+ __pyx_L9_bool_binop_done:;
+ __pyx_v_stop = __pyx_t_9;
+
+ /* "View.MemoryView":764
+ * start = index.start or 0
+ * stop = index.stop or 0
+ * step = index.step or 0 # <<<<<<<<<<<<<<
+ *
+ * have_start = index.start is not None
+ */
+ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 764, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __pyx_t_1 = __Pyx_PyObject_IsTrue(__pyx_t_8); if (unlikely((__pyx_t_1 < 0))) __PYX_ERR(1, 764, __pyx_L1_error)
+ if (!__pyx_t_1) {
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ } else {
+ __pyx_t_11 = __Pyx_PyIndex_AsSsize_t(__pyx_t_8); if (unlikely((__pyx_t_11 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 764, __pyx_L1_error)
+ __pyx_t_9 = __pyx_t_11;
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ goto __pyx_L11_bool_binop_done;
+ }
+ __pyx_t_9 = 0;
+ __pyx_L11_bool_binop_done:;
+ __pyx_v_step = __pyx_t_9;
+
+ /* "View.MemoryView":766
+ * step = index.step or 0
+ *
+ * have_start = index.start is not None # <<<<<<<<<<<<<<
+ * have_stop = index.stop is not None
+ * have_step = index.step is not None
+ */
+ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_start); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 766, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __pyx_t_1 = (__pyx_t_8 != Py_None);
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ __pyx_v_have_start = __pyx_t_1;
+
+ /* "View.MemoryView":767
+ *
+ * have_start = index.start is not None
+ * have_stop = index.stop is not None # <<<<<<<<<<<<<<
+ * have_step = index.step is not None
+ *
+ */
+ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_stop); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 767, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __pyx_t_1 = (__pyx_t_8 != Py_None);
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ __pyx_v_have_stop = __pyx_t_1;
+
+ /* "View.MemoryView":768
+ * have_start = index.start is not None
+ * have_stop = index.stop is not None
+ * have_step = index.step is not None # <<<<<<<<<<<<<<
+ *
+ * slice_memviewslice(
+ */
+ __pyx_t_8 = __Pyx_PyObject_GetAttrStr(__pyx_v_index, __pyx_n_s_step); if (unlikely(!__pyx_t_8)) __PYX_ERR(1, 768, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_8);
+ __pyx_t_1 = (__pyx_t_8 != Py_None);
+ __Pyx_DECREF(__pyx_t_8); __pyx_t_8 = 0;
+ __pyx_v_have_step = __pyx_t_1;
+
+ /* "View.MemoryView":770
+ * have_step = index.step is not None
+ *
+ * slice_memviewslice( # <<<<<<<<<<<<<<
+ * p_dst, p_src.shape[dim], p_src.strides[dim], p_src.suboffsets[dim],
+ * dim, new_ndim, p_suboffset_dim,
+ */
+ __pyx_t_10 = __pyx_memoryview_slice_memviewslice(__pyx_v_p_dst, (__pyx_v_p_src->shape[__pyx_v_dim]), (__pyx_v_p_src->strides[__pyx_v_dim]), (__pyx_v_p_src->suboffsets[__pyx_v_dim]), __pyx_v_dim, __pyx_v_new_ndim, __pyx_v_p_suboffset_dim, __pyx_v_start, __pyx_v_stop, __pyx_v_step, __pyx_v_have_start, __pyx_v_have_stop, __pyx_v_have_step, 1); if (unlikely(__pyx_t_10 == ((int)-1))) __PYX_ERR(1, 770, __pyx_L1_error)
+
+ /* "View.MemoryView":776
+ * have_start, have_stop, have_step,
+ * True)
+ * new_ndim += 1 # <<<<<<<<<<<<<<
+ *
+ * if isinstance(memview, _memoryviewslice):
+ */
+ __pyx_v_new_ndim = (__pyx_v_new_ndim + 1);
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":747
+ * cdef bint have_start, have_stop, have_step
+ *
+ * for dim, index in enumerate(indices): # <<<<<<<<<<<<<<
+ * if PyIndex_Check(index):
+ * cindex = index
+ */
+ }
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+
+ /* "View.MemoryView":778
+ * new_ndim += 1
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func,
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":779
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<<
+ * memviewsliceobj.to_object_func,
+ * memviewsliceobj.to_dtype_func,
+ */
+ __Pyx_XDECREF((PyObject *)__pyx_r);
+
+ /* "View.MemoryView":780
+ * if isinstance(memview, _memoryviewslice):
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func, # <<<<<<<<<<<<<<
+ * memviewsliceobj.to_dtype_func,
+ * memview.dtype_is_object)
+ */
+ if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 780, __pyx_L1_error) }
+
+ /* "View.MemoryView":781
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func,
+ * memviewsliceobj.to_dtype_func, # <<<<<<<<<<<<<<
+ * memview.dtype_is_object)
+ * else:
+ */
+ if (unlikely(!__pyx_v_memviewsliceobj)) { __Pyx_RaiseUnboundLocalError("memviewsliceobj"); __PYX_ERR(1, 781, __pyx_L1_error) }
+
+ /* "View.MemoryView":779
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * return memoryview_fromslice(dst, new_ndim, # <<<<<<<<<<<<<<
+ * memviewsliceobj.to_object_func,
+ * memviewsliceobj.to_dtype_func,
+ */
+ __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, __pyx_v_memviewsliceobj->to_object_func, __pyx_v_memviewsliceobj->to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 779, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_memoryview_type))))) __PYX_ERR(1, 779, __pyx_L1_error)
+ __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":778
+ * new_ndim += 1
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * return memoryview_fromslice(dst, new_ndim,
+ * memviewsliceobj.to_object_func,
+ */
+ }
+
+ /* "View.MemoryView":784
+ * memview.dtype_is_object)
+ * else:
+ * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<<
+ * memview.dtype_is_object)
+ *
+ */
+ /*else*/ {
+ __Pyx_XDECREF((PyObject *)__pyx_r);
+
+ /* "View.MemoryView":785
+ * else:
+ * return memoryview_fromslice(dst, new_ndim, NULL, NULL,
+ * memview.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_2 = __pyx_memoryview_fromslice(__pyx_v_dst, __pyx_v_new_ndim, NULL, NULL, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 784, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+
+ /* "View.MemoryView":784
+ * memview.dtype_is_object)
+ * else:
+ * return memoryview_fromslice(dst, new_ndim, NULL, NULL, # <<<<<<<<<<<<<<
+ * memview.dtype_is_object)
+ *
+ */
+ if (!(likely(((__pyx_t_2) == Py_None) || likely(__Pyx_TypeTest(__pyx_t_2, __pyx_memoryview_type))))) __PYX_ERR(1, 784, __pyx_L1_error)
+ __pyx_r = ((struct __pyx_memoryview_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":711
+ *
+ * @cname('__pyx_memview_slice')
+ * cdef memoryview memview_slice(memoryview memview, object indices): # <<<<<<<<<<<<<<
+ * cdef int new_ndim = 0, suboffset_dim = -1, dim
+ * cdef bint negative_step
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_8);
+ __Pyx_AddTraceback("View.MemoryView.memview_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_memviewsliceobj);
+ __Pyx_XDECREF(__pyx_v_index);
+ __Pyx_XGIVEREF((PyObject *)__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":793
+ *
+ * @cname('__pyx_memoryview_slice_memviewslice')
+ * cdef int slice_memviewslice( # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
+ */
+
+static int __pyx_memoryview_slice_memviewslice(__Pyx_memviewslice *__pyx_v_dst, Py_ssize_t __pyx_v_shape, Py_ssize_t __pyx_v_stride, Py_ssize_t __pyx_v_suboffset, int __pyx_v_dim, int __pyx_v_new_ndim, int *__pyx_v_suboffset_dim, Py_ssize_t __pyx_v_start, Py_ssize_t __pyx_v_stop, Py_ssize_t __pyx_v_step, int __pyx_v_have_start, int __pyx_v_have_stop, int __pyx_v_have_step, int __pyx_v_is_slice) {
+ Py_ssize_t __pyx_v_new_shape;
+ int __pyx_v_negative_step;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save;
+ #endif
+ __Pyx_RefNannySetupContext("slice_memviewslice", 1);
+
+ /* "View.MemoryView":813
+ * cdef bint negative_step
+ *
+ * if not is_slice: # <<<<<<<<<<<<<<
+ *
+ * if start < 0:
+ */
+ __pyx_t_1 = (!__pyx_v_is_slice);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":815
+ * if not is_slice:
+ *
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if not 0 <= start < shape:
+ */
+ __pyx_t_1 = (__pyx_v_start < 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":816
+ *
+ * if start < 0:
+ * start += shape # <<<<<<<<<<<<<<
+ * if not 0 <= start < shape:
+ * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim)
+ */
+ __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
+
+ /* "View.MemoryView":815
+ * if not is_slice:
+ *
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if not 0 <= start < shape:
+ */
+ }
+
+ /* "View.MemoryView":817
+ * if start < 0:
+ * start += shape
+ * if not 0 <= start < shape: # <<<<<<<<<<<<<<
+ * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim)
+ * else:
+ */
+ __pyx_t_1 = (0 <= __pyx_v_start);
+ if (__pyx_t_1) {
+ __pyx_t_1 = (__pyx_v_start < __pyx_v_shape);
+ }
+ __pyx_t_2 = (!__pyx_t_1);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":818
+ * start += shape
+ * if not 0 <= start < shape:
+ * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim) # <<<<<<<<<<<<<<
+ * else:
+ *
+ */
+ __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_IndexError, __pyx_kp_s_Index_out_of_bounds_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 818, __pyx_L1_error)
+
+ /* "View.MemoryView":817
+ * if start < 0:
+ * start += shape
+ * if not 0 <= start < shape: # <<<<<<<<<<<<<<
+ * _err_dim(PyExc_IndexError, "Index out of bounds (axis %d)", dim)
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":813
+ * cdef bint negative_step
+ *
+ * if not is_slice: # <<<<<<<<<<<<<<
+ *
+ * if start < 0:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":821
+ * else:
+ *
+ * if have_step: # <<<<<<<<<<<<<<
+ * negative_step = step < 0
+ * if step == 0:
+ */
+ /*else*/ {
+ __pyx_t_2 = (__pyx_v_have_step != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":822
+ *
+ * if have_step:
+ * negative_step = step < 0 # <<<<<<<<<<<<<<
+ * if step == 0:
+ * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim)
+ */
+ __pyx_v_negative_step = (__pyx_v_step < 0);
+
+ /* "View.MemoryView":823
+ * if have_step:
+ * negative_step = step < 0
+ * if step == 0: # <<<<<<<<<<<<<<
+ * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim)
+ * else:
+ */
+ __pyx_t_2 = (__pyx_v_step == 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":824
+ * negative_step = step < 0
+ * if step == 0:
+ * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim) # <<<<<<<<<<<<<<
+ * else:
+ * negative_step = False
+ */
+ __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_ValueError, __pyx_kp_s_Step_may_not_be_zero_axis_d, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 824, __pyx_L1_error)
+
+ /* "View.MemoryView":823
+ * if have_step:
+ * negative_step = step < 0
+ * if step == 0: # <<<<<<<<<<<<<<
+ * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim)
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":821
+ * else:
+ *
+ * if have_step: # <<<<<<<<<<<<<<
+ * negative_step = step < 0
+ * if step == 0:
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":826
+ * _err_dim(PyExc_ValueError, "Step may not be zero (axis %d)", dim)
+ * else:
+ * negative_step = False # <<<<<<<<<<<<<<
+ * step = 1
+ *
+ */
+ /*else*/ {
+ __pyx_v_negative_step = 0;
+
+ /* "View.MemoryView":827
+ * else:
+ * negative_step = False
+ * step = 1 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_step = 1;
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":830
+ *
+ *
+ * if have_start: # <<<<<<<<<<<<<<
+ * if start < 0:
+ * start += shape
+ */
+ __pyx_t_2 = (__pyx_v_have_start != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":831
+ *
+ * if have_start:
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if start < 0:
+ */
+ __pyx_t_2 = (__pyx_v_start < 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":832
+ * if have_start:
+ * if start < 0:
+ * start += shape # <<<<<<<<<<<<<<
+ * if start < 0:
+ * start = 0
+ */
+ __pyx_v_start = (__pyx_v_start + __pyx_v_shape);
+
+ /* "View.MemoryView":833
+ * if start < 0:
+ * start += shape
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start = 0
+ * elif start >= shape:
+ */
+ __pyx_t_2 = (__pyx_v_start < 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":834
+ * start += shape
+ * if start < 0:
+ * start = 0 # <<<<<<<<<<<<<<
+ * elif start >= shape:
+ * if negative_step:
+ */
+ __pyx_v_start = 0;
+
+ /* "View.MemoryView":833
+ * if start < 0:
+ * start += shape
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start = 0
+ * elif start >= shape:
+ */
+ }
+
+ /* "View.MemoryView":831
+ *
+ * if have_start:
+ * if start < 0: # <<<<<<<<<<<<<<
+ * start += shape
+ * if start < 0:
+ */
+ goto __pyx_L9;
+ }
+
+ /* "View.MemoryView":835
+ * if start < 0:
+ * start = 0
+ * elif start >= shape: # <<<<<<<<<<<<<<
+ * if negative_step:
+ * start = shape - 1
+ */
+ __pyx_t_2 = (__pyx_v_start >= __pyx_v_shape);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":836
+ * start = 0
+ * elif start >= shape:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ if (__pyx_v_negative_step) {
+
+ /* "View.MemoryView":837
+ * elif start >= shape:
+ * if negative_step:
+ * start = shape - 1 # <<<<<<<<<<<<<<
+ * else:
+ * start = shape
+ */
+ __pyx_v_start = (__pyx_v_shape - 1);
+
+ /* "View.MemoryView":836
+ * start = 0
+ * elif start >= shape:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ goto __pyx_L11;
+ }
+
+ /* "View.MemoryView":839
+ * start = shape - 1
+ * else:
+ * start = shape # <<<<<<<<<<<<<<
+ * else:
+ * if negative_step:
+ */
+ /*else*/ {
+ __pyx_v_start = __pyx_v_shape;
+ }
+ __pyx_L11:;
+
+ /* "View.MemoryView":835
+ * if start < 0:
+ * start = 0
+ * elif start >= shape: # <<<<<<<<<<<<<<
+ * if negative_step:
+ * start = shape - 1
+ */
+ }
+ __pyx_L9:;
+
+ /* "View.MemoryView":830
+ *
+ *
+ * if have_start: # <<<<<<<<<<<<<<
+ * if start < 0:
+ * start += shape
+ */
+ goto __pyx_L8;
+ }
+
+ /* "View.MemoryView":841
+ * start = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ /*else*/ {
+ if (__pyx_v_negative_step) {
+
+ /* "View.MemoryView":842
+ * else:
+ * if negative_step:
+ * start = shape - 1 # <<<<<<<<<<<<<<
+ * else:
+ * start = 0
+ */
+ __pyx_v_start = (__pyx_v_shape - 1);
+
+ /* "View.MemoryView":841
+ * start = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * start = shape - 1
+ * else:
+ */
+ goto __pyx_L12;
+ }
+
+ /* "View.MemoryView":844
+ * start = shape - 1
+ * else:
+ * start = 0 # <<<<<<<<<<<<<<
+ *
+ * if have_stop:
+ */
+ /*else*/ {
+ __pyx_v_start = 0;
+ }
+ __pyx_L12:;
+ }
+ __pyx_L8:;
+
+ /* "View.MemoryView":846
+ * start = 0
+ *
+ * if have_stop: # <<<<<<<<<<<<<<
+ * if stop < 0:
+ * stop += shape
+ */
+ __pyx_t_2 = (__pyx_v_have_stop != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":847
+ *
+ * if have_stop:
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop += shape
+ * if stop < 0:
+ */
+ __pyx_t_2 = (__pyx_v_stop < 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":848
+ * if have_stop:
+ * if stop < 0:
+ * stop += shape # <<<<<<<<<<<<<<
+ * if stop < 0:
+ * stop = 0
+ */
+ __pyx_v_stop = (__pyx_v_stop + __pyx_v_shape);
+
+ /* "View.MemoryView":849
+ * if stop < 0:
+ * stop += shape
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop = 0
+ * elif stop > shape:
+ */
+ __pyx_t_2 = (__pyx_v_stop < 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":850
+ * stop += shape
+ * if stop < 0:
+ * stop = 0 # <<<<<<<<<<<<<<
+ * elif stop > shape:
+ * stop = shape
+ */
+ __pyx_v_stop = 0;
+
+ /* "View.MemoryView":849
+ * if stop < 0:
+ * stop += shape
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop = 0
+ * elif stop > shape:
+ */
+ }
+
+ /* "View.MemoryView":847
+ *
+ * if have_stop:
+ * if stop < 0: # <<<<<<<<<<<<<<
+ * stop += shape
+ * if stop < 0:
+ */
+ goto __pyx_L14;
+ }
+
+ /* "View.MemoryView":851
+ * if stop < 0:
+ * stop = 0
+ * elif stop > shape: # <<<<<<<<<<<<<<
+ * stop = shape
+ * else:
+ */
+ __pyx_t_2 = (__pyx_v_stop > __pyx_v_shape);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":852
+ * stop = 0
+ * elif stop > shape:
+ * stop = shape # <<<<<<<<<<<<<<
+ * else:
+ * if negative_step:
+ */
+ __pyx_v_stop = __pyx_v_shape;
+
+ /* "View.MemoryView":851
+ * if stop < 0:
+ * stop = 0
+ * elif stop > shape: # <<<<<<<<<<<<<<
+ * stop = shape
+ * else:
+ */
+ }
+ __pyx_L14:;
+
+ /* "View.MemoryView":846
+ * start = 0
+ *
+ * if have_stop: # <<<<<<<<<<<<<<
+ * if stop < 0:
+ * stop += shape
+ */
+ goto __pyx_L13;
+ }
+
+ /* "View.MemoryView":854
+ * stop = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * stop = -1
+ * else:
+ */
+ /*else*/ {
+ if (__pyx_v_negative_step) {
+
+ /* "View.MemoryView":855
+ * else:
+ * if negative_step:
+ * stop = -1 # <<<<<<<<<<<<<<
+ * else:
+ * stop = shape
+ */
+ __pyx_v_stop = -1L;
+
+ /* "View.MemoryView":854
+ * stop = shape
+ * else:
+ * if negative_step: # <<<<<<<<<<<<<<
+ * stop = -1
+ * else:
+ */
+ goto __pyx_L16;
+ }
+
+ /* "View.MemoryView":857
+ * stop = -1
+ * else:
+ * stop = shape # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ /*else*/ {
+ __pyx_v_stop = __pyx_v_shape;
+ }
+ __pyx_L16:;
+ }
+ __pyx_L13:;
+
+ /* "View.MemoryView":861
+ *
+ * with cython.cdivision(True):
+ * new_shape = (stop - start) // step # <<<<<<<<<<<<<<
+ *
+ * if (stop - start) - step * new_shape:
+ */
+ __pyx_v_new_shape = ((__pyx_v_stop - __pyx_v_start) / __pyx_v_step);
+
+ /* "View.MemoryView":863
+ * new_shape = (stop - start) // step
+ *
+ * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<<
+ * new_shape += 1
+ *
+ */
+ __pyx_t_2 = (((__pyx_v_stop - __pyx_v_start) - (__pyx_v_step * __pyx_v_new_shape)) != 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":864
+ *
+ * if (stop - start) - step * new_shape:
+ * new_shape += 1 # <<<<<<<<<<<<<<
+ *
+ * if new_shape < 0:
+ */
+ __pyx_v_new_shape = (__pyx_v_new_shape + 1);
+
+ /* "View.MemoryView":863
+ * new_shape = (stop - start) // step
+ *
+ * if (stop - start) - step * new_shape: # <<<<<<<<<<<<<<
+ * new_shape += 1
+ *
+ */
+ }
+
+ /* "View.MemoryView":866
+ * new_shape += 1
+ *
+ * if new_shape < 0: # <<<<<<<<<<<<<<
+ * new_shape = 0
+ *
+ */
+ __pyx_t_2 = (__pyx_v_new_shape < 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":867
+ *
+ * if new_shape < 0:
+ * new_shape = 0 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_new_shape = 0;
+
+ /* "View.MemoryView":866
+ * new_shape += 1
+ *
+ * if new_shape < 0: # <<<<<<<<<<<<<<
+ * new_shape = 0
+ *
+ */
+ }
+
+ /* "View.MemoryView":870
+ *
+ *
+ * dst.strides[new_ndim] = stride * step # <<<<<<<<<<<<<<
+ * dst.shape[new_ndim] = new_shape
+ * dst.suboffsets[new_ndim] = suboffset
+ */
+ (__pyx_v_dst->strides[__pyx_v_new_ndim]) = (__pyx_v_stride * __pyx_v_step);
+
+ /* "View.MemoryView":871
+ *
+ * dst.strides[new_ndim] = stride * step
+ * dst.shape[new_ndim] = new_shape # <<<<<<<<<<<<<<
+ * dst.suboffsets[new_ndim] = suboffset
+ *
+ */
+ (__pyx_v_dst->shape[__pyx_v_new_ndim]) = __pyx_v_new_shape;
+
+ /* "View.MemoryView":872
+ * dst.strides[new_ndim] = stride * step
+ * dst.shape[new_ndim] = new_shape
+ * dst.suboffsets[new_ndim] = suboffset # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ (__pyx_v_dst->suboffsets[__pyx_v_new_ndim]) = __pyx_v_suboffset;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":875
+ *
+ *
+ * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<<
+ * dst.data += start * stride
+ * else:
+ */
+ __pyx_t_2 = ((__pyx_v_suboffset_dim[0]) < 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":876
+ *
+ * if suboffset_dim[0] < 0:
+ * dst.data += start * stride # <<<<<<<<<<<<<<
+ * else:
+ * dst.suboffsets[suboffset_dim[0]] += start * stride
+ */
+ __pyx_v_dst->data = (__pyx_v_dst->data + (__pyx_v_start * __pyx_v_stride));
+
+ /* "View.MemoryView":875
+ *
+ *
+ * if suboffset_dim[0] < 0: # <<<<<<<<<<<<<<
+ * dst.data += start * stride
+ * else:
+ */
+ goto __pyx_L19;
+ }
+
+ /* "View.MemoryView":878
+ * dst.data += start * stride
+ * else:
+ * dst.suboffsets[suboffset_dim[0]] += start * stride # <<<<<<<<<<<<<<
+ *
+ * if suboffset >= 0:
+ */
+ /*else*/ {
+ __pyx_t_3 = (__pyx_v_suboffset_dim[0]);
+ (__pyx_v_dst->suboffsets[__pyx_t_3]) = ((__pyx_v_dst->suboffsets[__pyx_t_3]) + (__pyx_v_start * __pyx_v_stride));
+ }
+ __pyx_L19:;
+
+ /* "View.MemoryView":880
+ * dst.suboffsets[suboffset_dim[0]] += start * stride
+ *
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * if not is_slice:
+ * if new_ndim == 0:
+ */
+ __pyx_t_2 = (__pyx_v_suboffset >= 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":881
+ *
+ * if suboffset >= 0:
+ * if not is_slice: # <<<<<<<<<<<<<<
+ * if new_ndim == 0:
+ * dst.data = ( dst.data)[0] + suboffset
+ */
+ __pyx_t_2 = (!__pyx_v_is_slice);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":882
+ * if suboffset >= 0:
+ * if not is_slice:
+ * if new_ndim == 0: # <<<<<<<<<<<<<<
+ * dst.data = ( dst.data)[0] + suboffset
+ * else:
+ */
+ __pyx_t_2 = (__pyx_v_new_ndim == 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":883
+ * if not is_slice:
+ * if new_ndim == 0:
+ * dst.data = ( dst.data)[0] + suboffset # <<<<<<<<<<<<<<
+ * else:
+ * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d "
+ */
+ __pyx_v_dst->data = ((((char **)__pyx_v_dst->data)[0]) + __pyx_v_suboffset);
+
+ /* "View.MemoryView":882
+ * if suboffset >= 0:
+ * if not is_slice:
+ * if new_ndim == 0: # <<<<<<<<<<<<<<
+ * dst.data = ( dst.data)[0] + suboffset
+ * else:
+ */
+ goto __pyx_L22;
+ }
+
+ /* "View.MemoryView":885
+ * dst.data = ( dst.data)[0] + suboffset
+ * else:
+ * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d " # <<<<<<<<<<<<<<
+ * "must be indexed and not sliced", dim)
+ * else:
+ */
+ /*else*/ {
+
+ /* "View.MemoryView":886
+ * else:
+ * _err_dim(PyExc_IndexError, "All dimensions preceding dimension %d "
+ * "must be indexed and not sliced", dim) # <<<<<<<<<<<<<<
+ * else:
+ * suboffset_dim[0] = new_ndim
+ */
+ __pyx_t_3 = __pyx_memoryview_err_dim(PyExc_IndexError, __pyx_kp_s_All_dimensions_preceding_dimensi, __pyx_v_dim); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 885, __pyx_L1_error)
+ }
+ __pyx_L22:;
+
+ /* "View.MemoryView":881
+ *
+ * if suboffset >= 0:
+ * if not is_slice: # <<<<<<<<<<<<<<
+ * if new_ndim == 0:
+ * dst.data = ( dst.data)[0] + suboffset
+ */
+ goto __pyx_L21;
+ }
+
+ /* "View.MemoryView":888
+ * "must be indexed and not sliced", dim)
+ * else:
+ * suboffset_dim[0] = new_ndim # <<<<<<<<<<<<<<
+ *
+ * return 0
+ */
+ /*else*/ {
+ (__pyx_v_suboffset_dim[0]) = __pyx_v_new_ndim;
+ }
+ __pyx_L21:;
+
+ /* "View.MemoryView":880
+ * dst.suboffsets[suboffset_dim[0]] += start * stride
+ *
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * if not is_slice:
+ * if new_ndim == 0:
+ */
+ }
+
+ /* "View.MemoryView":890
+ * suboffset_dim[0] = new_ndim
+ *
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":793
+ *
+ * @cname('__pyx_memoryview_slice_memviewslice')
+ * cdef int slice_memviewslice( # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * Py_ssize_t shape, Py_ssize_t stride, Py_ssize_t suboffset,
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ #ifdef WITH_THREAD
+ __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.slice_memviewslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContextNogil()
+ return __pyx_r;
+}
+
+/* "View.MemoryView":896
+ *
+ * @cname('__pyx_pybuffer_index')
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<<
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1
+ */
+
+static char *__pyx_pybuffer_index(Py_buffer *__pyx_v_view, char *__pyx_v_bufp, Py_ssize_t __pyx_v_index, Py_ssize_t __pyx_v_dim) {
+ Py_ssize_t __pyx_v_shape;
+ Py_ssize_t __pyx_v_stride;
+ Py_ssize_t __pyx_v_suboffset;
+ Py_ssize_t __pyx_v_itemsize;
+ char *__pyx_v_resultp;
+ char *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ Py_UCS4 __pyx_t_4;
+ PyObject *__pyx_t_5 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("pybuffer_index", 0);
+
+ /* "View.MemoryView":898
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index,
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1 # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t itemsize = view.itemsize
+ * cdef char *resultp
+ */
+ __pyx_v_suboffset = -1L;
+
+ /* "View.MemoryView":899
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1
+ * cdef Py_ssize_t itemsize = view.itemsize # <<<<<<<<<<<<<<
+ * cdef char *resultp
+ *
+ */
+ __pyx_t_1 = __pyx_v_view->itemsize;
+ __pyx_v_itemsize = __pyx_t_1;
+
+ /* "View.MemoryView":902
+ * cdef char *resultp
+ *
+ * if view.ndim == 0: # <<<<<<<<<<<<<<
+ * shape = view.len // itemsize
+ * stride = itemsize
+ */
+ __pyx_t_2 = (__pyx_v_view->ndim == 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":903
+ *
+ * if view.ndim == 0:
+ * shape = view.len // itemsize # <<<<<<<<<<<<<<
+ * stride = itemsize
+ * else:
+ */
+ if (unlikely(__pyx_v_itemsize == 0)) {
+ PyErr_SetString(PyExc_ZeroDivisionError, "integer division or modulo by zero");
+ __PYX_ERR(1, 903, __pyx_L1_error)
+ }
+ else if (sizeof(Py_ssize_t) == sizeof(long) && (!(((Py_ssize_t)-1) > 0)) && unlikely(__pyx_v_itemsize == (Py_ssize_t)-1) && unlikely(__Pyx_UNARY_NEG_WOULD_OVERFLOW(__pyx_v_view->len))) {
+ PyErr_SetString(PyExc_OverflowError, "value too large to perform division");
+ __PYX_ERR(1, 903, __pyx_L1_error)
+ }
+ __pyx_v_shape = __Pyx_div_Py_ssize_t(__pyx_v_view->len, __pyx_v_itemsize);
+
+ /* "View.MemoryView":904
+ * if view.ndim == 0:
+ * shape = view.len // itemsize
+ * stride = itemsize # <<<<<<<<<<<<<<
+ * else:
+ * shape = view.shape[dim]
+ */
+ __pyx_v_stride = __pyx_v_itemsize;
+
+ /* "View.MemoryView":902
+ * cdef char *resultp
+ *
+ * if view.ndim == 0: # <<<<<<<<<<<<<<
+ * shape = view.len // itemsize
+ * stride = itemsize
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":906
+ * stride = itemsize
+ * else:
+ * shape = view.shape[dim] # <<<<<<<<<<<<<<
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL:
+ */
+ /*else*/ {
+ __pyx_v_shape = (__pyx_v_view->shape[__pyx_v_dim]);
+
+ /* "View.MemoryView":907
+ * else:
+ * shape = view.shape[dim]
+ * stride = view.strides[dim] # <<<<<<<<<<<<<<
+ * if view.suboffsets != NULL:
+ * suboffset = view.suboffsets[dim]
+ */
+ __pyx_v_stride = (__pyx_v_view->strides[__pyx_v_dim]);
+
+ /* "View.MemoryView":908
+ * shape = view.shape[dim]
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * suboffset = view.suboffsets[dim]
+ *
+ */
+ __pyx_t_2 = (__pyx_v_view->suboffsets != NULL);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":909
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL:
+ * suboffset = view.suboffsets[dim] # <<<<<<<<<<<<<<
+ *
+ * if index < 0:
+ */
+ __pyx_v_suboffset = (__pyx_v_view->suboffsets[__pyx_v_dim]);
+
+ /* "View.MemoryView":908
+ * shape = view.shape[dim]
+ * stride = view.strides[dim]
+ * if view.suboffsets != NULL: # <<<<<<<<<<<<<<
+ * suboffset = view.suboffsets[dim]
+ *
+ */
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":911
+ * suboffset = view.suboffsets[dim]
+ *
+ * if index < 0: # <<<<<<<<<<<<<<
+ * index += view.shape[dim]
+ * if index < 0:
+ */
+ __pyx_t_2 = (__pyx_v_index < 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":912
+ *
+ * if index < 0:
+ * index += view.shape[dim] # <<<<<<<<<<<<<<
+ * if index < 0:
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ */
+ __pyx_v_index = (__pyx_v_index + (__pyx_v_view->shape[__pyx_v_dim]));
+
+ /* "View.MemoryView":913
+ * if index < 0:
+ * index += view.shape[dim]
+ * if index < 0: # <<<<<<<<<<<<<<
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ *
+ */
+ __pyx_t_2 = (__pyx_v_index < 0);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":914
+ * index += view.shape[dim]
+ * if index < 0:
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})" # <<<<<<<<<<<<<<
+ *
+ * if index >= shape:
+ */
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 914, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_1 = 0;
+ __pyx_t_4 = 127;
+ __Pyx_INCREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ __pyx_t_1 += 37;
+ __Pyx_GIVEREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ PyTuple_SET_ITEM(__pyx_t_3, 0, __pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ __pyx_t_5 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 914, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_1 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_5);
+ __Pyx_GIVEREF(__pyx_t_5);
+ PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_t_5);
+ __pyx_t_5 = 0;
+ __Pyx_INCREF(__pyx_kp_u__7);
+ __pyx_t_1 += 1;
+ __Pyx_GIVEREF(__pyx_kp_u__7);
+ PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_kp_u__7);
+ __pyx_t_5 = __Pyx_PyUnicode_Join(__pyx_t_3, 3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 914, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_5, 0, 0);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __PYX_ERR(1, 914, __pyx_L1_error)
+
+ /* "View.MemoryView":913
+ * if index < 0:
+ * index += view.shape[dim]
+ * if index < 0: # <<<<<<<<<<<<<<
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ *
+ */
+ }
+
+ /* "View.MemoryView":911
+ * suboffset = view.suboffsets[dim]
+ *
+ * if index < 0: # <<<<<<<<<<<<<<
+ * index += view.shape[dim]
+ * if index < 0:
+ */
+ }
+
+ /* "View.MemoryView":916
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ *
+ * if index >= shape: # <<<<<<<<<<<<<<
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ *
+ */
+ __pyx_t_2 = (__pyx_v_index >= __pyx_v_shape);
+ if (unlikely(__pyx_t_2)) {
+
+ /* "View.MemoryView":917
+ *
+ * if index >= shape:
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})" # <<<<<<<<<<<<<<
+ *
+ * resultp = bufp + index * stride
+ */
+ __pyx_t_5 = PyTuple_New(3); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 917, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_1 = 0;
+ __pyx_t_4 = 127;
+ __Pyx_INCREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ __pyx_t_1 += 37;
+ __Pyx_GIVEREF(__pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ PyTuple_SET_ITEM(__pyx_t_5, 0, __pyx_kp_u_Out_of_bounds_on_buffer_access_a);
+ __pyx_t_3 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_dim, 0, ' ', 'd'); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 917, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_1 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_3);
+ __Pyx_GIVEREF(__pyx_t_3);
+ PyTuple_SET_ITEM(__pyx_t_5, 1, __pyx_t_3);
+ __pyx_t_3 = 0;
+ __Pyx_INCREF(__pyx_kp_u__7);
+ __pyx_t_1 += 1;
+ __Pyx_GIVEREF(__pyx_kp_u__7);
+ PyTuple_SET_ITEM(__pyx_t_5, 2, __pyx_kp_u__7);
+ __pyx_t_3 = __Pyx_PyUnicode_Join(__pyx_t_5, 3, __pyx_t_1, __pyx_t_4); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 917, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ __Pyx_Raise(__pyx_builtin_IndexError, __pyx_t_3, 0, 0);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __PYX_ERR(1, 917, __pyx_L1_error)
+
+ /* "View.MemoryView":916
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ *
+ * if index >= shape: # <<<<<<<<<<<<<<
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ *
+ */
+ }
+
+ /* "View.MemoryView":919
+ * raise IndexError, f"Out of bounds on buffer access (axis {dim})"
+ *
+ * resultp = bufp + index * stride # <<<<<<<<<<<<<<
+ * if suboffset >= 0:
+ * resultp = ( resultp)[0] + suboffset
+ */
+ __pyx_v_resultp = (__pyx_v_bufp + (__pyx_v_index * __pyx_v_stride));
+
+ /* "View.MemoryView":920
+ *
+ * resultp = bufp + index * stride
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * resultp = ( resultp)[0] + suboffset
+ *
+ */
+ __pyx_t_2 = (__pyx_v_suboffset >= 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":921
+ * resultp = bufp + index * stride
+ * if suboffset >= 0:
+ * resultp = ( resultp)[0] + suboffset # <<<<<<<<<<<<<<
+ *
+ * return resultp
+ */
+ __pyx_v_resultp = ((((char **)__pyx_v_resultp)[0]) + __pyx_v_suboffset);
+
+ /* "View.MemoryView":920
+ *
+ * resultp = bufp + index * stride
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * resultp = ( resultp)[0] + suboffset
+ *
+ */
+ }
+
+ /* "View.MemoryView":923
+ * resultp = ( resultp)[0] + suboffset
+ *
+ * return resultp # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = __pyx_v_resultp;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":896
+ *
+ * @cname('__pyx_pybuffer_index')
+ * cdef char *pybuffer_index(Py_buffer *view, char *bufp, Py_ssize_t index, # <<<<<<<<<<<<<<
+ * Py_ssize_t dim) except NULL:
+ * cdef Py_ssize_t shape, stride, suboffset = -1
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_AddTraceback("View.MemoryView.pybuffer_index", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":929
+ *
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: # <<<<<<<<<<<<<<
+ * cdef int ndim = memslice.memview.view.ndim
+ *
+ */
+
+static int __pyx_memslice_transpose(__Pyx_memviewslice *__pyx_v_memslice) {
+ int __pyx_v_ndim;
+ Py_ssize_t *__pyx_v_shape;
+ Py_ssize_t *__pyx_v_strides;
+ int __pyx_v_i;
+ int __pyx_v_j;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ Py_ssize_t *__pyx_t_2;
+ long __pyx_t_3;
+ long __pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+ Py_ssize_t __pyx_t_6;
+ int __pyx_t_7;
+ int __pyx_t_8;
+ int __pyx_t_9;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save;
+ #endif
+ __Pyx_RefNannySetupContext("transpose_memslice", 1);
+
+ /* "View.MemoryView":930
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil:
+ * cdef int ndim = memslice.memview.view.ndim # <<<<<<<<<<<<<<
+ *
+ * cdef Py_ssize_t *shape = memslice.shape
+ */
+ __pyx_t_1 = __pyx_v_memslice->memview->view.ndim;
+ __pyx_v_ndim = __pyx_t_1;
+
+ /* "View.MemoryView":932
+ * cdef int ndim = memslice.memview.view.ndim
+ *
+ * cdef Py_ssize_t *shape = memslice.shape # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t *strides = memslice.strides
+ *
+ */
+ __pyx_t_2 = __pyx_v_memslice->shape;
+ __pyx_v_shape = __pyx_t_2;
+
+ /* "View.MemoryView":933
+ *
+ * cdef Py_ssize_t *shape = memslice.shape
+ * cdef Py_ssize_t *strides = memslice.strides # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_2 = __pyx_v_memslice->strides;
+ __pyx_v_strides = __pyx_t_2;
+
+ /* "View.MemoryView":937
+ *
+ * cdef int i, j
+ * for i in range(ndim // 2): # <<<<<<<<<<<<<<
+ * j = ndim - 1 - i
+ * strides[i], strides[j] = strides[j], strides[i]
+ */
+ __pyx_t_3 = __Pyx_div_long(__pyx_v_ndim, 2);
+ __pyx_t_4 = __pyx_t_3;
+ for (__pyx_t_1 = 0; __pyx_t_1 < __pyx_t_4; __pyx_t_1+=1) {
+ __pyx_v_i = __pyx_t_1;
+
+ /* "View.MemoryView":938
+ * cdef int i, j
+ * for i in range(ndim // 2):
+ * j = ndim - 1 - i # <<<<<<<<<<<<<<
+ * strides[i], strides[j] = strides[j], strides[i]
+ * shape[i], shape[j] = shape[j], shape[i]
+ */
+ __pyx_v_j = ((__pyx_v_ndim - 1) - __pyx_v_i);
+
+ /* "View.MemoryView":939
+ * for i in range(ndim // 2):
+ * j = ndim - 1 - i
+ * strides[i], strides[j] = strides[j], strides[i] # <<<<<<<<<<<<<<
+ * shape[i], shape[j] = shape[j], shape[i]
+ *
+ */
+ __pyx_t_5 = (__pyx_v_strides[__pyx_v_j]);
+ __pyx_t_6 = (__pyx_v_strides[__pyx_v_i]);
+ (__pyx_v_strides[__pyx_v_i]) = __pyx_t_5;
+ (__pyx_v_strides[__pyx_v_j]) = __pyx_t_6;
+
+ /* "View.MemoryView":940
+ * j = ndim - 1 - i
+ * strides[i], strides[j] = strides[j], strides[i]
+ * shape[i], shape[j] = shape[j], shape[i] # <<<<<<<<<<<<<<
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
+ */
+ __pyx_t_6 = (__pyx_v_shape[__pyx_v_j]);
+ __pyx_t_5 = (__pyx_v_shape[__pyx_v_i]);
+ (__pyx_v_shape[__pyx_v_i]) = __pyx_t_6;
+ (__pyx_v_shape[__pyx_v_j]) = __pyx_t_5;
+
+ /* "View.MemoryView":942
+ * shape[i], shape[j] = shape[j], shape[i]
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<<
+ * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions")
+ *
+ */
+ __pyx_t_8 = ((__pyx_v_memslice->suboffsets[__pyx_v_i]) >= 0);
+ if (!__pyx_t_8) {
+ } else {
+ __pyx_t_7 = __pyx_t_8;
+ goto __pyx_L6_bool_binop_done;
+ }
+ __pyx_t_8 = ((__pyx_v_memslice->suboffsets[__pyx_v_j]) >= 0);
+ __pyx_t_7 = __pyx_t_8;
+ __pyx_L6_bool_binop_done:;
+ if (__pyx_t_7) {
+
+ /* "View.MemoryView":943
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0:
+ * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions") # <<<<<<<<<<<<<<
+ *
+ * return 0
+ */
+ __pyx_t_9 = __pyx_memoryview_err(PyExc_ValueError, __pyx_kp_s_Cannot_transpose_memoryview_with); if (unlikely(__pyx_t_9 == ((int)-1))) __PYX_ERR(1, 943, __pyx_L1_error)
+
+ /* "View.MemoryView":942
+ * shape[i], shape[j] = shape[j], shape[i]
+ *
+ * if memslice.suboffsets[i] >= 0 or memslice.suboffsets[j] >= 0: # <<<<<<<<<<<<<<
+ * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions")
+ *
+ */
+ }
+ }
+
+ /* "View.MemoryView":945
+ * _err(PyExc_ValueError, "Cannot transpose memoryview with indirect dimensions")
+ *
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":929
+ *
+ * @cname('__pyx_memslice_transpose')
+ * cdef int transpose_memslice(__Pyx_memviewslice *memslice) except -1 nogil: # <<<<<<<<<<<<<<
+ * cdef int ndim = memslice.memview.view.ndim
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ #ifdef WITH_THREAD
+ __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.transpose_memslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContextNogil()
+ return __pyx_r;
+}
+
+/* "View.MemoryView":963
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1)
+ *
+ */
+
+/* Python wrapper */
+static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self); /*proto*/
+static void __pyx_memoryviewslice___dealloc__(PyObject *__pyx_v_self) {
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__ (wrapper)", 0);
+ __pyx_kwvalues = __Pyx_KwValues_VARARGS(__pyx_args, __pyx_nargs);
+ __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+static void __pyx_memoryviewslice___pyx_pf_15View_dot_MemoryView_16_memoryviewslice___dealloc__(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__dealloc__", 0);
+
+ /* "View.MemoryView":964
+ *
+ * def __dealloc__(self):
+ * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1) # <<<<<<<<<<<<<<
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ */
+ __PYX_XCLEAR_MEMVIEW((&__pyx_v_self->from_slice), 1);
+
+ /* "View.MemoryView":963
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * def __dealloc__(self): # <<<<<<<<<<<<<<
+ * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1)
+ *
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":966
+ * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * if self.to_object_func != NULL:
+ * return self.to_object_func(itemp)
+ */
+
+static PyObject *__pyx_memoryviewslice_convert_item_to_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("convert_item_to_object", 0);
+
+ /* "View.MemoryView":967
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ * if self.to_object_func != NULL: # <<<<<<<<<<<<<<
+ * return self.to_object_func(itemp)
+ * else:
+ */
+ __pyx_t_1 = (__pyx_v_self->to_object_func != NULL);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":968
+ * cdef convert_item_to_object(self, char *itemp):
+ * if self.to_object_func != NULL:
+ * return self.to_object_func(itemp) # <<<<<<<<<<<<<<
+ * else:
+ * return memoryview.convert_item_to_object(self, itemp)
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_v_self->to_object_func(__pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 968, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":967
+ *
+ * cdef convert_item_to_object(self, char *itemp):
+ * if self.to_object_func != NULL: # <<<<<<<<<<<<<<
+ * return self.to_object_func(itemp)
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":970
+ * return self.to_object_func(itemp)
+ * else:
+ * return memoryview.convert_item_to_object(self, itemp) # <<<<<<<<<<<<<<
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ */
+ /*else*/ {
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_2 = __pyx_memoryview_convert_item_to_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 970, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_r = __pyx_t_2;
+ __pyx_t_2 = 0;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":966
+ * __PYX_XCLEAR_MEMVIEW(&self.from_slice, 1)
+ *
+ * cdef convert_item_to_object(self, char *itemp): # <<<<<<<<<<<<<<
+ * if self.to_object_func != NULL:
+ * return self.to_object_func(itemp)
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.convert_item_to_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":972
+ * return memoryview.convert_item_to_object(self, itemp)
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * if self.to_dtype_func != NULL:
+ * self.to_dtype_func(itemp, value)
+ */
+
+static PyObject *__pyx_memoryviewslice_assign_item_from_object(struct __pyx_memoryviewslice_obj *__pyx_v_self, char *__pyx_v_itemp, PyObject *__pyx_v_value) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("assign_item_from_object", 0);
+
+ /* "View.MemoryView":973
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<<
+ * self.to_dtype_func(itemp, value)
+ * else:
+ */
+ __pyx_t_1 = (__pyx_v_self->to_dtype_func != NULL);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":974
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ * if self.to_dtype_func != NULL:
+ * self.to_dtype_func(itemp, value) # <<<<<<<<<<<<<<
+ * else:
+ * memoryview.assign_item_from_object(self, itemp, value)
+ */
+ __pyx_t_2 = __pyx_v_self->to_dtype_func(__pyx_v_itemp, __pyx_v_value); if (unlikely(__pyx_t_2 == ((int)0))) __PYX_ERR(1, 974, __pyx_L1_error)
+
+ /* "View.MemoryView":973
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value):
+ * if self.to_dtype_func != NULL: # <<<<<<<<<<<<<<
+ * self.to_dtype_func(itemp, value)
+ * else:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":976
+ * self.to_dtype_func(itemp, value)
+ * else:
+ * memoryview.assign_item_from_object(self, itemp, value) # <<<<<<<<<<<<<<
+ *
+ * cdef _get_base(self):
+ */
+ /*else*/ {
+ __pyx_t_3 = __pyx_memoryview_assign_item_from_object(((struct __pyx_memoryview_obj *)__pyx_v_self), __pyx_v_itemp, __pyx_v_value); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 976, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":972
+ * return memoryview.convert_item_to_object(self, itemp)
+ *
+ * cdef assign_item_from_object(self, char *itemp, object value): # <<<<<<<<<<<<<<
+ * if self.to_dtype_func != NULL:
+ * self.to_dtype_func(itemp, value)
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.assign_item_from_object", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":978
+ * memoryview.assign_item_from_object(self, itemp, value)
+ *
+ * cdef _get_base(self): # <<<<<<<<<<<<<<
+ * return self.from_object
+ *
+ */
+
+static PyObject *__pyx_memoryviewslice__get_base(struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("_get_base", 0);
+
+ /* "View.MemoryView":979
+ *
+ * cdef _get_base(self):
+ * return self.from_object # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v_self->from_object);
+ __pyx_r = __pyx_v_self->from_object;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":978
+ * memoryview.assign_item_from_object(self, itemp, value)
+ *
+ * cdef _get_base(self): # <<<<<<<<<<<<<<
+ * return self.from_object
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryviewslice_1__reduce_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__reduce_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 1, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ if (unlikely(__pyx_nargs > 0)) {
+ __Pyx_RaiseArgtupleInvalid("__reduce_cython__", 1, 0, 0, __pyx_nargs); return NULL;}
+ if (unlikely(__pyx_kwds) && __Pyx_NumKwargs_FASTCALL(__pyx_kwds) && unlikely(!__Pyx_CheckKeywordStrings(__pyx_kwds, "__reduce_cython__", 0))) return NULL;
+ goto __pyx_L4_argument_unpacking_done;
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_memoryviewslice___reduce_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self));
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryviewslice___reduce_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__reduce_cython__", 0);
+
+ /* "(tree fragment)":2
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<<
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
+ __PYX_ERR(1, 2, __pyx_L1_error)
+
+ /* "(tree fragment)":1
+ * def __reduce_cython__(self): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__reduce_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyObject *__pyx_pw___pyx_memoryviewslice_3__setstate_cython__(PyObject *__pyx_v_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ CYTHON_UNUSED PyObject *__pyx_v___pyx_state = 0;
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[1] = {0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__setstate_cython__ (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 3, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_state,0};
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+ (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 3, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__setstate_cython__") < 0)) __PYX_ERR(1, 3, __pyx_L3_error)
+ }
+ } else if (unlikely(__pyx_nargs != 1)) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ }
+ __pyx_v___pyx_state = values[0];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__setstate_cython__", 1, 1, 1, __pyx_nargs); __PYX_ERR(1, 3, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf___pyx_memoryviewslice_2__setstate_cython__(((struct __pyx_memoryviewslice_obj *)__pyx_v_self), __pyx_v___pyx_state);
+
+ /* function exit code */
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf___pyx_memoryviewslice_2__setstate_cython__(CYTHON_UNUSED struct __pyx_memoryviewslice_obj *__pyx_v_self, CYTHON_UNUSED PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__setstate_cython__", 0);
+
+ /* "(tree fragment)":4
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__" # <<<<<<<<<<<<<<
+ */
+ __Pyx_Raise(__pyx_builtin_TypeError, __pyx_kp_s_no_default___reduce___due_to_non, 0, 0);
+ __PYX_ERR(1, 4, __pyx_L1_error)
+
+ /* "(tree fragment)":3
+ * def __reduce_cython__(self):
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ * def __setstate_cython__(self, __pyx_state): # <<<<<<<<<<<<<<
+ * raise TypeError, "no default __reduce__ due to non-trivial __cinit__"
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView._memoryviewslice.__setstate_cython__", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":999
+ *
+ * @cname('__pyx_memoryview_fromslice')
+ * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * object (*to_object_func)(char *),
+ */
+
+static PyObject *__pyx_memoryview_fromslice(__Pyx_memviewslice __pyx_v_memviewslice, int __pyx_v_ndim, PyObject *(*__pyx_v_to_object_func)(char *), int (*__pyx_v_to_dtype_func)(char *, PyObject *), int __pyx_v_dtype_is_object) {
+ struct __pyx_memoryviewslice_obj *__pyx_v_result = 0;
+ Py_ssize_t __pyx_v_suboffset;
+ PyObject *__pyx_v_length = NULL;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ PyObject *__pyx_t_3 = NULL;
+ __Pyx_TypeInfo *__pyx_t_4;
+ Py_buffer __pyx_t_5;
+ Py_ssize_t *__pyx_t_6;
+ Py_ssize_t *__pyx_t_7;
+ Py_ssize_t *__pyx_t_8;
+ Py_ssize_t __pyx_t_9;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_fromslice", 0);
+
+ /* "View.MemoryView":1007
+ * cdef _memoryviewslice result
+ *
+ * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<<
+ * return None
+ *
+ */
+ __pyx_t_1 = (((PyObject *)__pyx_v_memviewslice.memview) == Py_None);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1008
+ *
+ * if memviewslice.memview == Py_None:
+ * return None # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1007
+ * cdef _memoryviewslice result
+ *
+ * if memviewslice.memview == Py_None: # <<<<<<<<<<<<<<
+ * return None
+ *
+ */
+ }
+
+ /* "View.MemoryView":1013
+ *
+ *
+ * result = _memoryviewslice.__new__(_memoryviewslice, None, 0, dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ * result.from_slice = memviewslice
+ */
+ __pyx_t_2 = __Pyx_PyBool_FromLong(__pyx_v_dtype_is_object); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyTuple_New(3); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1013, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_INCREF(Py_None);
+ __Pyx_GIVEREF(Py_None);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 0, Py_None)) __PYX_ERR(1, 1013, __pyx_L1_error);
+ __Pyx_INCREF(__pyx_int_0);
+ __Pyx_GIVEREF(__pyx_int_0);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 1, __pyx_int_0)) __PYX_ERR(1, 1013, __pyx_L1_error);
+ __Pyx_GIVEREF(__pyx_t_2);
+ if (__Pyx_PyTuple_SET_ITEM(__pyx_t_3, 2, __pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error);
+ __pyx_t_2 = 0;
+ __pyx_t_2 = ((PyObject *)__pyx_tp_new__memoryviewslice(((PyTypeObject *)__pyx_memoryviewslice_type), __pyx_t_3, NULL)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1013, __pyx_L1_error)
+ __Pyx_GOTREF((PyObject *)__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_v_result = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":1015
+ * result = _memoryviewslice.__new__(_memoryviewslice, None, 0, dtype_is_object)
+ *
+ * result.from_slice = memviewslice # <<<<<<<<<<<<<<
+ * __PYX_INC_MEMVIEW(&memviewslice, 1)
+ *
+ */
+ __pyx_v_result->from_slice = __pyx_v_memviewslice;
+
+ /* "View.MemoryView":1016
+ *
+ * result.from_slice = memviewslice
+ * __PYX_INC_MEMVIEW(&memviewslice, 1) # <<<<<<<<<<<<<<
+ *
+ * result.from_object = ( memviewslice.memview)._get_base()
+ */
+ __PYX_INC_MEMVIEW((&__pyx_v_memviewslice), 1);
+
+ /* "View.MemoryView":1018
+ * __PYX_INC_MEMVIEW(&memviewslice, 1)
+ *
+ * result.from_object = ( memviewslice.memview)._get_base() # <<<<<<<<<<<<<<
+ * result.typeinfo = memviewslice.memview.typeinfo
+ *
+ */
+ __pyx_t_2 = ((struct __pyx_vtabstruct_memoryview *)((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->__pyx_vtab)->_get_base(((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1018, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_GIVEREF(__pyx_t_2);
+ __Pyx_GOTREF(__pyx_v_result->from_object);
+ __Pyx_DECREF(__pyx_v_result->from_object);
+ __pyx_v_result->from_object = __pyx_t_2;
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":1019
+ *
+ * result.from_object = ( memviewslice.memview)._get_base()
+ * result.typeinfo = memviewslice.memview.typeinfo # <<<<<<<<<<<<<<
+ *
+ * result.view = memviewslice.memview.view
+ */
+ __pyx_t_4 = __pyx_v_memviewslice.memview->typeinfo;
+ __pyx_v_result->__pyx_base.typeinfo = __pyx_t_4;
+
+ /* "View.MemoryView":1021
+ * result.typeinfo = memviewslice.memview.typeinfo
+ *
+ * result.view = memviewslice.memview.view # <<<<<<<<<<<<<<
+ * result.view.buf = memviewslice.data
+ * result.view.ndim = ndim
+ */
+ __pyx_t_5 = __pyx_v_memviewslice.memview->view;
+ __pyx_v_result->__pyx_base.view = __pyx_t_5;
+
+ /* "View.MemoryView":1022
+ *
+ * result.view = memviewslice.memview.view
+ * result.view.buf = memviewslice.data # <<<<<<<<<<<<<<
+ * result.view.ndim = ndim
+ * (<__pyx_buffer *> &result.view).obj = Py_None
+ */
+ __pyx_v_result->__pyx_base.view.buf = ((void *)__pyx_v_memviewslice.data);
+
+ /* "View.MemoryView":1023
+ * result.view = memviewslice.memview.view
+ * result.view.buf = memviewslice.data
+ * result.view.ndim = ndim # <<<<<<<<<<<<<<
+ * (<__pyx_buffer *> &result.view).obj = Py_None
+ * Py_INCREF(Py_None)
+ */
+ __pyx_v_result->__pyx_base.view.ndim = __pyx_v_ndim;
+
+ /* "View.MemoryView":1024
+ * result.view.buf = memviewslice.data
+ * result.view.ndim = ndim
+ * (<__pyx_buffer *> &result.view).obj = Py_None # <<<<<<<<<<<<<<
+ * Py_INCREF(Py_None)
+ *
+ */
+ ((Py_buffer *)(&__pyx_v_result->__pyx_base.view))->obj = Py_None;
+
+ /* "View.MemoryView":1025
+ * result.view.ndim = ndim
+ * (<__pyx_buffer *> &result.view).obj = Py_None
+ * Py_INCREF(Py_None) # <<<<<<<<<<<<<<
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE:
+ */
+ Py_INCREF(Py_None);
+
+ /* "View.MemoryView":1027
+ * Py_INCREF(Py_None)
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<<
+ * result.flags = PyBUF_RECORDS
+ * else:
+ */
+ __pyx_t_1 = ((((struct __pyx_memoryview_obj *)__pyx_v_memviewslice.memview)->flags & PyBUF_WRITABLE) != 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1028
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE:
+ * result.flags = PyBUF_RECORDS # <<<<<<<<<<<<<<
+ * else:
+ * result.flags = PyBUF_RECORDS_RO
+ */
+ __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS;
+
+ /* "View.MemoryView":1027
+ * Py_INCREF(Py_None)
+ *
+ * if (memviewslice.memview).flags & PyBUF_WRITABLE: # <<<<<<<<<<<<<<
+ * result.flags = PyBUF_RECORDS
+ * else:
+ */
+ goto __pyx_L4;
+ }
+
+ /* "View.MemoryView":1030
+ * result.flags = PyBUF_RECORDS
+ * else:
+ * result.flags = PyBUF_RECORDS_RO # <<<<<<<<<<<<<<
+ *
+ * result.view.shape = result.from_slice.shape
+ */
+ /*else*/ {
+ __pyx_v_result->__pyx_base.flags = PyBUF_RECORDS_RO;
+ }
+ __pyx_L4:;
+
+ /* "View.MemoryView":1032
+ * result.flags = PyBUF_RECORDS_RO
+ *
+ * result.view.shape = result.from_slice.shape # <<<<<<<<<<<<<<
+ * result.view.strides = result.from_slice.strides
+ *
+ */
+ __pyx_v_result->__pyx_base.view.shape = ((Py_ssize_t *)__pyx_v_result->from_slice.shape);
+
+ /* "View.MemoryView":1033
+ *
+ * result.view.shape = result.from_slice.shape
+ * result.view.strides = result.from_slice.strides # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_result->__pyx_base.view.strides = ((Py_ssize_t *)__pyx_v_result->from_slice.strides);
+
+ /* "View.MemoryView":1036
+ *
+ *
+ * result.view.suboffsets = NULL # <<<<<<<<<<<<<<
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0:
+ */
+ __pyx_v_result->__pyx_base.view.suboffsets = NULL;
+
+ /* "View.MemoryView":1037
+ *
+ * result.view.suboffsets = NULL
+ * for suboffset in result.from_slice.suboffsets[:ndim]: # <<<<<<<<<<<<<<
+ * if suboffset >= 0:
+ * result.view.suboffsets = result.from_slice.suboffsets
+ */
+ __pyx_t_7 = (__pyx_v_result->from_slice.suboffsets + __pyx_v_ndim);
+ for (__pyx_t_8 = __pyx_v_result->from_slice.suboffsets; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
+ __pyx_t_6 = __pyx_t_8;
+ __pyx_v_suboffset = (__pyx_t_6[0]);
+
+ /* "View.MemoryView":1038
+ * result.view.suboffsets = NULL
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * result.view.suboffsets = result.from_slice.suboffsets
+ * break
+ */
+ __pyx_t_1 = (__pyx_v_suboffset >= 0);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1039
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0:
+ * result.view.suboffsets = result.from_slice.suboffsets # <<<<<<<<<<<<<<
+ * break
+ *
+ */
+ __pyx_v_result->__pyx_base.view.suboffsets = ((Py_ssize_t *)__pyx_v_result->from_slice.suboffsets);
+
+ /* "View.MemoryView":1040
+ * if suboffset >= 0:
+ * result.view.suboffsets = result.from_slice.suboffsets
+ * break # <<<<<<<<<<<<<<
+ *
+ * result.view.len = result.view.itemsize
+ */
+ goto __pyx_L6_break;
+
+ /* "View.MemoryView":1038
+ * result.view.suboffsets = NULL
+ * for suboffset in result.from_slice.suboffsets[:ndim]:
+ * if suboffset >= 0: # <<<<<<<<<<<<<<
+ * result.view.suboffsets = result.from_slice.suboffsets
+ * break
+ */
+ }
+ }
+ __pyx_L6_break:;
+
+ /* "View.MemoryView":1042
+ * break
+ *
+ * result.view.len = result.view.itemsize # <<<<<<<<<<<<<<
+ * for length in result.view.shape[:ndim]:
+ * result.view.len *= length
+ */
+ __pyx_t_9 = __pyx_v_result->__pyx_base.view.itemsize;
+ __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
+
+ /* "View.MemoryView":1043
+ *
+ * result.view.len = result.view.itemsize
+ * for length in result.view.shape[:ndim]: # <<<<<<<<<<<<<<
+ * result.view.len *= length
+ *
+ */
+ __pyx_t_7 = (__pyx_v_result->__pyx_base.view.shape + __pyx_v_ndim);
+ for (__pyx_t_8 = __pyx_v_result->__pyx_base.view.shape; __pyx_t_8 < __pyx_t_7; __pyx_t_8++) {
+ __pyx_t_6 = __pyx_t_8;
+ __pyx_t_2 = PyInt_FromSsize_t((__pyx_t_6[0])); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1043, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_XDECREF_SET(__pyx_v_length, __pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":1044
+ * result.view.len = result.view.itemsize
+ * for length in result.view.shape[:ndim]:
+ * result.view.len *= length # <<<<<<<<<<<<<<
+ *
+ * result.to_object_func = to_object_func
+ */
+ __pyx_t_2 = PyInt_FromSsize_t(__pyx_v_result->__pyx_base.view.len); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1044, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __pyx_t_3 = PyNumber_InPlaceMultiply(__pyx_t_2, __pyx_v_length); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 1044, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __pyx_t_9 = __Pyx_PyIndex_AsSsize_t(__pyx_t_3); if (unlikely((__pyx_t_9 == (Py_ssize_t)-1) && PyErr_Occurred())) __PYX_ERR(1, 1044, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __pyx_v_result->__pyx_base.view.len = __pyx_t_9;
+ }
+
+ /* "View.MemoryView":1046
+ * result.view.len *= length
+ *
+ * result.to_object_func = to_object_func # <<<<<<<<<<<<<<
+ * result.to_dtype_func = to_dtype_func
+ *
+ */
+ __pyx_v_result->to_object_func = __pyx_v_to_object_func;
+
+ /* "View.MemoryView":1047
+ *
+ * result.to_object_func = to_object_func
+ * result.to_dtype_func = to_dtype_func # <<<<<<<<<<<<<<
+ *
+ * return result
+ */
+ __pyx_v_result->to_dtype_func = __pyx_v_to_dtype_func;
+
+ /* "View.MemoryView":1049
+ * result.to_dtype_func = to_dtype_func
+ *
+ * return result # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF((PyObject *)__pyx_v_result);
+ __pyx_r = ((PyObject *)__pyx_v_result);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":999
+ *
+ * @cname('__pyx_memoryview_fromslice')
+ * cdef memoryview_fromslice(__Pyx_memviewslice memviewslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * object (*to_object_func)(char *),
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_fromslice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_result);
+ __Pyx_XDECREF(__pyx_v_length);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1052
+ *
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ */
+
+static __Pyx_memviewslice *__pyx_memoryview_get_slice_from_memoryview(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_mslice) {
+ struct __pyx_memoryviewslice_obj *__pyx_v_obj = 0;
+ __Pyx_memviewslice *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("get_slice_from_memview", 0);
+
+ /* "View.MemoryView":1055
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * obj = memview
+ * return &obj.from_slice
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1056
+ * cdef _memoryviewslice obj
+ * if isinstance(memview, _memoryviewslice):
+ * obj = memview # <<<<<<<<<<<<<<
+ * return &obj.from_slice
+ * else:
+ */
+ if (!(likely(((((PyObject *)__pyx_v_memview)) == Py_None) || likely(__Pyx_TypeTest(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type))))) __PYX_ERR(1, 1056, __pyx_L1_error)
+ __pyx_t_2 = ((PyObject *)__pyx_v_memview);
+ __Pyx_INCREF(__pyx_t_2);
+ __pyx_v_obj = ((struct __pyx_memoryviewslice_obj *)__pyx_t_2);
+ __pyx_t_2 = 0;
+
+ /* "View.MemoryView":1057
+ * if isinstance(memview, _memoryviewslice):
+ * obj = memview
+ * return &obj.from_slice # <<<<<<<<<<<<<<
+ * else:
+ * slice_copy(memview, mslice)
+ */
+ __pyx_r = (&__pyx_v_obj->from_slice);
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1055
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * obj = memview
+ * return &obj.from_slice
+ */
+ }
+
+ /* "View.MemoryView":1059
+ * return &obj.from_slice
+ * else:
+ * slice_copy(memview, mslice) # <<<<<<<<<<<<<<
+ * return mslice
+ *
+ */
+ /*else*/ {
+ __pyx_memoryview_slice_copy(__pyx_v_memview, __pyx_v_mslice);
+
+ /* "View.MemoryView":1060
+ * else:
+ * slice_copy(memview, mslice)
+ * return mslice # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_slice_copy')
+ */
+ __pyx_r = __pyx_v_mslice;
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":1052
+ *
+ * @cname('__pyx_memoryview_get_slice_from_memoryview')
+ * cdef __Pyx_memviewslice *get_slice_from_memview(memoryview memview, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *mslice) except NULL:
+ * cdef _memoryviewslice obj
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView.get_slice_from_memview", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF((PyObject *)__pyx_v_obj);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1063
+ *
+ * @cname('__pyx_memoryview_slice_copy')
+ * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst) noexcept: # <<<<<<<<<<<<<<
+ * cdef int dim
+ * cdef (Py_ssize_t*) shape, strides, suboffsets
+ */
+
+static void __pyx_memoryview_slice_copy(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_dst) {
+ int __pyx_v_dim;
+ Py_ssize_t *__pyx_v_shape;
+ Py_ssize_t *__pyx_v_strides;
+ Py_ssize_t *__pyx_v_suboffsets;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t *__pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+ int __pyx_t_6;
+ __Pyx_RefNannySetupContext("slice_copy", 0);
+
+ /* "View.MemoryView":1067
+ * cdef (Py_ssize_t*) shape, strides, suboffsets
+ *
+ * shape = memview.view.shape # <<<<<<<<<<<<<<
+ * strides = memview.view.strides
+ * suboffsets = memview.view.suboffsets
+ */
+ __pyx_t_1 = __pyx_v_memview->view.shape;
+ __pyx_v_shape = __pyx_t_1;
+
+ /* "View.MemoryView":1068
+ *
+ * shape = memview.view.shape
+ * strides = memview.view.strides # <<<<<<<<<<<<<<
+ * suboffsets = memview.view.suboffsets
+ *
+ */
+ __pyx_t_1 = __pyx_v_memview->view.strides;
+ __pyx_v_strides = __pyx_t_1;
+
+ /* "View.MemoryView":1069
+ * shape = memview.view.shape
+ * strides = memview.view.strides
+ * suboffsets = memview.view.suboffsets # <<<<<<<<<<<<<<
+ *
+ * dst.memview = <__pyx_memoryview *> memview
+ */
+ __pyx_t_1 = __pyx_v_memview->view.suboffsets;
+ __pyx_v_suboffsets = __pyx_t_1;
+
+ /* "View.MemoryView":1071
+ * suboffsets = memview.view.suboffsets
+ *
+ * dst.memview = <__pyx_memoryview *> memview # <<<<<<<<<<<<<<
+ * dst.data = memview.view.buf
+ *
+ */
+ __pyx_v_dst->memview = ((struct __pyx_memoryview_obj *)__pyx_v_memview);
+
+ /* "View.MemoryView":1072
+ *
+ * dst.memview = <__pyx_memoryview *> memview
+ * dst.data = memview.view.buf # <<<<<<<<<<<<<<
+ *
+ * for dim in range(memview.view.ndim):
+ */
+ __pyx_v_dst->data = ((char *)__pyx_v_memview->view.buf);
+
+ /* "View.MemoryView":1074
+ * dst.data = memview.view.buf
+ *
+ * for dim in range(memview.view.ndim): # <<<<<<<<<<<<<<
+ * dst.shape[dim] = shape[dim]
+ * dst.strides[dim] = strides[dim]
+ */
+ __pyx_t_2 = __pyx_v_memview->view.ndim;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_dim = __pyx_t_4;
+
+ /* "View.MemoryView":1075
+ *
+ * for dim in range(memview.view.ndim):
+ * dst.shape[dim] = shape[dim] # <<<<<<<<<<<<<<
+ * dst.strides[dim] = strides[dim]
+ * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
+ */
+ (__pyx_v_dst->shape[__pyx_v_dim]) = (__pyx_v_shape[__pyx_v_dim]);
+
+ /* "View.MemoryView":1076
+ * for dim in range(memview.view.ndim):
+ * dst.shape[dim] = shape[dim]
+ * dst.strides[dim] = strides[dim] # <<<<<<<<<<<<<<
+ * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1
+ *
+ */
+ (__pyx_v_dst->strides[__pyx_v_dim]) = (__pyx_v_strides[__pyx_v_dim]);
+
+ /* "View.MemoryView":1077
+ * dst.shape[dim] = shape[dim]
+ * dst.strides[dim] = strides[dim]
+ * dst.suboffsets[dim] = suboffsets[dim] if suboffsets else -1 # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_copy_object')
+ */
+ __pyx_t_6 = (__pyx_v_suboffsets != 0);
+ if (__pyx_t_6) {
+ __pyx_t_5 = (__pyx_v_suboffsets[__pyx_v_dim]);
+ } else {
+ __pyx_t_5 = -1L;
+ }
+ (__pyx_v_dst->suboffsets[__pyx_v_dim]) = __pyx_t_5;
+ }
+
+ /* "View.MemoryView":1063
+ *
+ * @cname('__pyx_memoryview_slice_copy')
+ * cdef void slice_copy(memoryview memview, __Pyx_memviewslice *dst) noexcept: # <<<<<<<<<<<<<<
+ * cdef int dim
+ * cdef (Py_ssize_t*) shape, strides, suboffsets
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":1080
+ *
+ * @cname('__pyx_memoryview_copy_object')
+ * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<<
+ * "Create a new memoryview object"
+ * cdef __Pyx_memviewslice memviewslice
+ */
+
+static PyObject *__pyx_memoryview_copy_object(struct __pyx_memoryview_obj *__pyx_v_memview) {
+ __Pyx_memviewslice __pyx_v_memviewslice;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_copy", 0);
+
+ /* "View.MemoryView":1083
+ * "Create a new memoryview object"
+ * cdef __Pyx_memviewslice memviewslice
+ * slice_copy(memview, &memviewslice) # <<<<<<<<<<<<<<
+ * return memoryview_copy_from_slice(memview, &memviewslice)
+ *
+ */
+ __pyx_memoryview_slice_copy(__pyx_v_memview, (&__pyx_v_memviewslice));
+
+ /* "View.MemoryView":1084
+ * cdef __Pyx_memviewslice memviewslice
+ * slice_copy(memview, &memviewslice)
+ * return memoryview_copy_from_slice(memview, &memviewslice) # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = __pyx_memoryview_copy_object_from_slice(__pyx_v_memview, (&__pyx_v_memviewslice)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1084, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1080
+ *
+ * @cname('__pyx_memoryview_copy_object')
+ * cdef memoryview_copy(memoryview memview): # <<<<<<<<<<<<<<
+ * "Create a new memoryview object"
+ * cdef __Pyx_memviewslice memviewslice
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_copy", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1087
+ *
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<<
+ * """
+ * Create a new memoryview object from a given memoryview object and slice.
+ */
+
+static PyObject *__pyx_memoryview_copy_object_from_slice(struct __pyx_memoryview_obj *__pyx_v_memview, __Pyx_memviewslice *__pyx_v_memviewslice) {
+ PyObject *(*__pyx_v_to_object_func)(char *);
+ int (*__pyx_v_to_dtype_func)(char *, PyObject *);
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ PyObject *(*__pyx_t_2)(char *);
+ int (*__pyx_t_3)(char *, PyObject *);
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("memoryview_copy_from_slice", 0);
+
+ /* "View.MemoryView":1094
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * to_object_func = (<_memoryviewslice> memview).to_object_func
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ */
+ __pyx_t_1 = __Pyx_TypeCheck(((PyObject *)__pyx_v_memview), __pyx_memoryviewslice_type);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1095
+ *
+ * if isinstance(memview, _memoryviewslice):
+ * to_object_func = (<_memoryviewslice> memview).to_object_func # <<<<<<<<<<<<<<
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ * else:
+ */
+ __pyx_t_2 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_object_func;
+ __pyx_v_to_object_func = __pyx_t_2;
+
+ /* "View.MemoryView":1096
+ * if isinstance(memview, _memoryviewslice):
+ * to_object_func = (<_memoryviewslice> memview).to_object_func
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func # <<<<<<<<<<<<<<
+ * else:
+ * to_object_func = NULL
+ */
+ __pyx_t_3 = ((struct __pyx_memoryviewslice_obj *)__pyx_v_memview)->to_dtype_func;
+ __pyx_v_to_dtype_func = __pyx_t_3;
+
+ /* "View.MemoryView":1094
+ * cdef int (*to_dtype_func)(char *, object) except 0
+ *
+ * if isinstance(memview, _memoryviewslice): # <<<<<<<<<<<<<<
+ * to_object_func = (<_memoryviewslice> memview).to_object_func
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1098
+ * to_dtype_func = (<_memoryviewslice> memview).to_dtype_func
+ * else:
+ * to_object_func = NULL # <<<<<<<<<<<<<<
+ * to_dtype_func = NULL
+ *
+ */
+ /*else*/ {
+ __pyx_v_to_object_func = NULL;
+
+ /* "View.MemoryView":1099
+ * else:
+ * to_object_func = NULL
+ * to_dtype_func = NULL # <<<<<<<<<<<<<<
+ *
+ * return memoryview_fromslice(memviewslice[0], memview.view.ndim,
+ */
+ __pyx_v_to_dtype_func = NULL;
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1101
+ * to_dtype_func = NULL
+ *
+ * return memoryview_fromslice(memviewslice[0], memview.view.ndim, # <<<<<<<<<<<<<<
+ * to_object_func, to_dtype_func,
+ * memview.dtype_is_object)
+ */
+ __Pyx_XDECREF(__pyx_r);
+
+ /* "View.MemoryView":1103
+ * return memoryview_fromslice(memviewslice[0], memview.view.ndim,
+ * to_object_func, to_dtype_func,
+ * memview.dtype_is_object) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_4 = __pyx_memoryview_fromslice((__pyx_v_memviewslice[0]), __pyx_v_memview->view.ndim, __pyx_v_to_object_func, __pyx_v_to_dtype_func, __pyx_v_memview->dtype_is_object); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1101, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_r = __pyx_t_4;
+ __pyx_t_4 = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1087
+ *
+ * @cname('__pyx_memoryview_copy_object_from_slice')
+ * cdef memoryview_copy_from_slice(memoryview memview, __Pyx_memviewslice *memviewslice): # <<<<<<<<<<<<<<
+ * """
+ * Create a new memoryview object from a given memoryview object and slice.
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView.memoryview_copy_from_slice", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1109
+ *
+ *
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: # <<<<<<<<<<<<<<
+ * return -arg if arg < 0 else arg
+ *
+ */
+
+static Py_ssize_t abs_py_ssize_t(Py_ssize_t __pyx_v_arg) {
+ Py_ssize_t __pyx_r;
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+
+ /* "View.MemoryView":1110
+ *
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil:
+ * return -arg if arg < 0 else arg # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_get_best_slice_order')
+ */
+ __pyx_t_2 = (__pyx_v_arg < 0);
+ if (__pyx_t_2) {
+ __pyx_t_1 = (-__pyx_v_arg);
+ } else {
+ __pyx_t_1 = __pyx_v_arg;
+ }
+ __pyx_r = __pyx_t_1;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1109
+ *
+ *
+ * cdef Py_ssize_t abs_py_ssize_t(Py_ssize_t arg) noexcept nogil: # <<<<<<<<<<<<<<
+ * return -arg if arg < 0 else arg
+ *
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1113
+ *
+ * @cname('__pyx_get_best_slice_order')
+ * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) noexcept nogil: # <<<<<<<<<<<<<<
+ * """
+ * Figure out the best memory access order for a given slice.
+ */
+
+static char __pyx_get_best_slice_order(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim) {
+ int __pyx_v_i;
+ Py_ssize_t __pyx_v_c_stride;
+ Py_ssize_t __pyx_v_f_stride;
+ char __pyx_r;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+
+ /* "View.MemoryView":1118
+ * """
+ * cdef int i
+ * cdef Py_ssize_t c_stride = 0 # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t f_stride = 0
+ *
+ */
+ __pyx_v_c_stride = 0;
+
+ /* "View.MemoryView":1119
+ * cdef int i
+ * cdef Py_ssize_t c_stride = 0
+ * cdef Py_ssize_t f_stride = 0 # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim - 1, -1, -1):
+ */
+ __pyx_v_f_stride = 0;
+
+ /* "View.MemoryView":1121
+ * cdef Py_ssize_t f_stride = 0
+ *
+ * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<<
+ * if mslice.shape[i] > 1:
+ * c_stride = mslice.strides[i]
+ */
+ for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
+ __pyx_v_i = __pyx_t_1;
+
+ /* "View.MemoryView":1122
+ *
+ * for i in range(ndim - 1, -1, -1):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * c_stride = mslice.strides[i]
+ * break
+ */
+ __pyx_t_2 = ((__pyx_v_mslice->shape[__pyx_v_i]) > 1);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1123
+ * for i in range(ndim - 1, -1, -1):
+ * if mslice.shape[i] > 1:
+ * c_stride = mslice.strides[i] # <<<<<<<<<<<<<<
+ * break
+ *
+ */
+ __pyx_v_c_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+ /* "View.MemoryView":1124
+ * if mslice.shape[i] > 1:
+ * c_stride = mslice.strides[i]
+ * break # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim):
+ */
+ goto __pyx_L4_break;
+
+ /* "View.MemoryView":1122
+ *
+ * for i in range(ndim - 1, -1, -1):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * c_stride = mslice.strides[i]
+ * break
+ */
+ }
+ }
+ __pyx_L4_break:;
+
+ /* "View.MemoryView":1126
+ * break
+ *
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * if mslice.shape[i] > 1:
+ * f_stride = mslice.strides[i]
+ */
+ __pyx_t_1 = __pyx_v_ndim;
+ __pyx_t_3 = __pyx_t_1;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1127
+ *
+ * for i in range(ndim):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * f_stride = mslice.strides[i]
+ * break
+ */
+ __pyx_t_2 = ((__pyx_v_mslice->shape[__pyx_v_i]) > 1);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1128
+ * for i in range(ndim):
+ * if mslice.shape[i] > 1:
+ * f_stride = mslice.strides[i] # <<<<<<<<<<<<<<
+ * break
+ *
+ */
+ __pyx_v_f_stride = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+ /* "View.MemoryView":1129
+ * if mslice.shape[i] > 1:
+ * f_stride = mslice.strides[i]
+ * break # <<<<<<<<<<<<<<
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
+ */
+ goto __pyx_L7_break;
+
+ /* "View.MemoryView":1127
+ *
+ * for i in range(ndim):
+ * if mslice.shape[i] > 1: # <<<<<<<<<<<<<<
+ * f_stride = mslice.strides[i]
+ * break
+ */
+ }
+ }
+ __pyx_L7_break:;
+
+ /* "View.MemoryView":1131
+ * break
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<<
+ * return 'C'
+ * else:
+ */
+ __pyx_t_2 = (abs_py_ssize_t(__pyx_v_c_stride) <= abs_py_ssize_t(__pyx_v_f_stride));
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1132
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride):
+ * return 'C' # <<<<<<<<<<<<<<
+ * else:
+ * return 'F'
+ */
+ __pyx_r = 'C';
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1131
+ * break
+ *
+ * if abs_py_ssize_t(c_stride) <= abs_py_ssize_t(f_stride): # <<<<<<<<<<<<<<
+ * return 'C'
+ * else:
+ */
+ }
+
+ /* "View.MemoryView":1134
+ * return 'C'
+ * else:
+ * return 'F' # <<<<<<<<<<<<<<
+ *
+ * @cython.cdivision(True)
+ */
+ /*else*/ {
+ __pyx_r = 'F';
+ goto __pyx_L0;
+ }
+
+ /* "View.MemoryView":1113
+ *
+ * @cname('__pyx_get_best_slice_order')
+ * cdef char get_best_order(__Pyx_memviewslice *mslice, int ndim) noexcept nogil: # <<<<<<<<<<<<<<
+ * """
+ * Figure out the best memory access order for a given slice.
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1137
+ *
+ * @cython.cdivision(True)
+ * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<<
+ * char *dst_data, Py_ssize_t *dst_strides,
+ * Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
+ */
+
+static void _copy_strided_to_strided(char *__pyx_v_src_data, Py_ssize_t *__pyx_v_src_strides, char *__pyx_v_dst_data, Py_ssize_t *__pyx_v_dst_strides, Py_ssize_t *__pyx_v_src_shape, Py_ssize_t *__pyx_v_dst_shape, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
+ CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+ CYTHON_UNUSED Py_ssize_t __pyx_v_src_extent;
+ Py_ssize_t __pyx_v_dst_extent;
+ Py_ssize_t __pyx_v_src_stride;
+ Py_ssize_t __pyx_v_dst_stride;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ Py_ssize_t __pyx_t_4;
+ Py_ssize_t __pyx_t_5;
+
+ /* "View.MemoryView":1144
+ *
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t src_extent = src_shape[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dst_extent = dst_shape[0]
+ * cdef Py_ssize_t src_stride = src_strides[0]
+ */
+ __pyx_v_src_extent = (__pyx_v_src_shape[0]);
+
+ /* "View.MemoryView":1145
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t src_extent = src_shape[0]
+ * cdef Py_ssize_t dst_extent = dst_shape[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t src_stride = src_strides[0]
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ */
+ __pyx_v_dst_extent = (__pyx_v_dst_shape[0]);
+
+ /* "View.MemoryView":1146
+ * cdef Py_ssize_t src_extent = src_shape[0]
+ * cdef Py_ssize_t dst_extent = dst_shape[0]
+ * cdef Py_ssize_t src_stride = src_strides[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ *
+ */
+ __pyx_v_src_stride = (__pyx_v_src_strides[0]);
+
+ /* "View.MemoryView":1147
+ * cdef Py_ssize_t dst_extent = dst_shape[0]
+ * cdef Py_ssize_t src_stride = src_strides[0]
+ * cdef Py_ssize_t dst_stride = dst_strides[0] # <<<<<<<<<<<<<<
+ *
+ * if ndim == 1:
+ */
+ __pyx_v_dst_stride = (__pyx_v_dst_strides[0]);
+
+ /* "View.MemoryView":1149
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride):
+ */
+ __pyx_t_1 = (__pyx_v_ndim == 1);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1150
+ *
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<<
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+ __pyx_t_2 = (__pyx_v_src_stride > 0);
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L5_bool_binop_done;
+ }
+ __pyx_t_2 = (__pyx_v_dst_stride > 0);
+ if (__pyx_t_2) {
+ } else {
+ __pyx_t_1 = __pyx_t_2;
+ goto __pyx_L5_bool_binop_done;
+ }
+
+ /* "View.MemoryView":1151
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride): # <<<<<<<<<<<<<<
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ * else:
+ */
+ __pyx_t_2 = (((size_t)__pyx_v_src_stride) == __pyx_v_itemsize);
+ if (__pyx_t_2) {
+ __pyx_t_2 = (__pyx_v_itemsize == ((size_t)__pyx_v_dst_stride));
+ }
+ __pyx_t_1 = __pyx_t_2;
+ __pyx_L5_bool_binop_done:;
+
+ /* "View.MemoryView":1150
+ *
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<<
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1152
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent) # <<<<<<<<<<<<<<
+ * else:
+ * for i in range(dst_extent):
+ */
+ (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, (__pyx_v_itemsize * __pyx_v_dst_extent)));
+
+ /* "View.MemoryView":1150
+ *
+ * if ndim == 1:
+ * if (src_stride > 0 and dst_stride > 0 and # <<<<<<<<<<<<<<
+ * src_stride == itemsize == dst_stride):
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ */
+ goto __pyx_L4;
+ }
+
+ /* "View.MemoryView":1154
+ * memcpy(dst_data, src_data, itemsize * dst_extent)
+ * else:
+ * for i in range(dst_extent): # <<<<<<<<<<<<<<
+ * memcpy(dst_data, src_data, itemsize)
+ * src_data += src_stride
+ */
+ /*else*/ {
+ __pyx_t_3 = __pyx_v_dst_extent;
+ __pyx_t_4 = __pyx_t_3;
+ for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+ __pyx_v_i = __pyx_t_5;
+
+ /* "View.MemoryView":1155
+ * else:
+ * for i in range(dst_extent):
+ * memcpy(dst_data, src_data, itemsize) # <<<<<<<<<<<<<<
+ * src_data += src_stride
+ * dst_data += dst_stride
+ */
+ (void)(memcpy(__pyx_v_dst_data, __pyx_v_src_data, __pyx_v_itemsize));
+
+ /* "View.MemoryView":1156
+ * for i in range(dst_extent):
+ * memcpy(dst_data, src_data, itemsize)
+ * src_data += src_stride # <<<<<<<<<<<<<<
+ * dst_data += dst_stride
+ * else:
+ */
+ __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
+
+ /* "View.MemoryView":1157
+ * memcpy(dst_data, src_data, itemsize)
+ * src_data += src_stride
+ * dst_data += dst_stride # <<<<<<<<<<<<<<
+ * else:
+ * for i in range(dst_extent):
+ */
+ __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
+ }
+ }
+ __pyx_L4:;
+
+ /* "View.MemoryView":1149
+ * cdef Py_ssize_t dst_stride = dst_strides[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if (src_stride > 0 and dst_stride > 0 and
+ * src_stride == itemsize == dst_stride):
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1159
+ * dst_data += dst_stride
+ * else:
+ * for i in range(dst_extent): # <<<<<<<<<<<<<<
+ * _copy_strided_to_strided(src_data, src_strides + 1,
+ * dst_data, dst_strides + 1,
+ */
+ /*else*/ {
+ __pyx_t_3 = __pyx_v_dst_extent;
+ __pyx_t_4 = __pyx_t_3;
+ for (__pyx_t_5 = 0; __pyx_t_5 < __pyx_t_4; __pyx_t_5+=1) {
+ __pyx_v_i = __pyx_t_5;
+
+ /* "View.MemoryView":1160
+ * else:
+ * for i in range(dst_extent):
+ * _copy_strided_to_strided(src_data, src_strides + 1, # <<<<<<<<<<<<<<
+ * dst_data, dst_strides + 1,
+ * src_shape + 1, dst_shape + 1,
+ */
+ _copy_strided_to_strided(__pyx_v_src_data, (__pyx_v_src_strides + 1), __pyx_v_dst_data, (__pyx_v_dst_strides + 1), (__pyx_v_src_shape + 1), (__pyx_v_dst_shape + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize);
+
+ /* "View.MemoryView":1164
+ * src_shape + 1, dst_shape + 1,
+ * ndim - 1, itemsize)
+ * src_data += src_stride # <<<<<<<<<<<<<<
+ * dst_data += dst_stride
+ *
+ */
+ __pyx_v_src_data = (__pyx_v_src_data + __pyx_v_src_stride);
+
+ /* "View.MemoryView":1165
+ * ndim - 1, itemsize)
+ * src_data += src_stride
+ * dst_data += dst_stride # <<<<<<<<<<<<<<
+ *
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src,
+ */
+ __pyx_v_dst_data = (__pyx_v_dst_data + __pyx_v_dst_stride);
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1137
+ *
+ * @cython.cdivision(True)
+ * cdef void _copy_strided_to_strided(char *src_data, Py_ssize_t *src_strides, # <<<<<<<<<<<<<<
+ * char *dst_data, Py_ssize_t *dst_strides,
+ * Py_ssize_t *src_shape, Py_ssize_t *dst_shape,
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1167
+ * dst_data += dst_stride
+ *
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * int ndim, size_t itemsize) noexcept nogil:
+ */
+
+static void copy_strided_to_strided(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize) {
+
+ /* "View.MemoryView":1170
+ * __Pyx_memviewslice *dst,
+ * int ndim, size_t itemsize) noexcept nogil:
+ * _copy_strided_to_strided(src.data, src.strides, dst.data, dst.strides, # <<<<<<<<<<<<<<
+ * src.shape, dst.shape, ndim, itemsize)
+ *
+ */
+ _copy_strided_to_strided(__pyx_v_src->data, __pyx_v_src->strides, __pyx_v_dst->data, __pyx_v_dst->strides, __pyx_v_src->shape, __pyx_v_dst->shape, __pyx_v_ndim, __pyx_v_itemsize);
+
+ /* "View.MemoryView":1167
+ * dst_data += dst_stride
+ *
+ * cdef void copy_strided_to_strided(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *dst,
+ * int ndim, size_t itemsize) noexcept nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1174
+ *
+ * @cname('__pyx_memoryview_slice_get_size')
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: # <<<<<<<<<<<<<<
+ * "Return the size of the memory occupied by the slice in number of bytes"
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize
+ */
+
+static Py_ssize_t __pyx_memoryview_slice_get_size(__Pyx_memviewslice *__pyx_v_src, int __pyx_v_ndim) {
+ Py_ssize_t __pyx_v_shape;
+ Py_ssize_t __pyx_v_size;
+ Py_ssize_t __pyx_r;
+ Py_ssize_t __pyx_t_1;
+ Py_ssize_t *__pyx_t_2;
+ Py_ssize_t *__pyx_t_3;
+ Py_ssize_t *__pyx_t_4;
+
+ /* "View.MemoryView":1176
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil:
+ * "Return the size of the memory occupied by the slice in number of bytes"
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize # <<<<<<<<<<<<<<
+ *
+ * for shape in src.shape[:ndim]:
+ */
+ __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
+ __pyx_v_size = __pyx_t_1;
+
+ /* "View.MemoryView":1178
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize
+ *
+ * for shape in src.shape[:ndim]: # <<<<<<<<<<<<<<
+ * size *= shape
+ *
+ */
+ __pyx_t_3 = (__pyx_v_src->shape + __pyx_v_ndim);
+ for (__pyx_t_4 = __pyx_v_src->shape; __pyx_t_4 < __pyx_t_3; __pyx_t_4++) {
+ __pyx_t_2 = __pyx_t_4;
+ __pyx_v_shape = (__pyx_t_2[0]);
+
+ /* "View.MemoryView":1179
+ *
+ * for shape in src.shape[:ndim]:
+ * size *= shape # <<<<<<<<<<<<<<
+ *
+ * return size
+ */
+ __pyx_v_size = (__pyx_v_size * __pyx_v_shape);
+ }
+
+ /* "View.MemoryView":1181
+ * size *= shape
+ *
+ * return size # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_fill_contig_strides_array')
+ */
+ __pyx_r = __pyx_v_size;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1174
+ *
+ * @cname('__pyx_memoryview_slice_get_size')
+ * cdef Py_ssize_t slice_get_size(__Pyx_memviewslice *src, int ndim) noexcept nogil: # <<<<<<<<<<<<<<
+ * "Return the size of the memory occupied by the slice in number of bytes"
+ * cdef Py_ssize_t shape, size = src.memview.view.itemsize
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1184
+ *
+ * @cname('__pyx_fill_contig_strides_array')
+ * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<<
+ * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
+ * int ndim, char order) noexcept nogil:
+ */
+
+static Py_ssize_t __pyx_fill_contig_strides_array(Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, Py_ssize_t __pyx_v_stride, int __pyx_v_ndim, char __pyx_v_order) {
+ int __pyx_v_idx;
+ Py_ssize_t __pyx_r;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+
+ /* "View.MemoryView":1193
+ * cdef int idx
+ *
+ * if order == 'F': # <<<<<<<<<<<<<<
+ * for idx in range(ndim):
+ * strides[idx] = stride
+ */
+ __pyx_t_1 = (__pyx_v_order == 'F');
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1194
+ *
+ * if order == 'F':
+ * for idx in range(ndim): # <<<<<<<<<<<<<<
+ * strides[idx] = stride
+ * stride *= shape[idx]
+ */
+ __pyx_t_2 = __pyx_v_ndim;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_idx = __pyx_t_4;
+
+ /* "View.MemoryView":1195
+ * if order == 'F':
+ * for idx in range(ndim):
+ * strides[idx] = stride # <<<<<<<<<<<<<<
+ * stride *= shape[idx]
+ * else:
+ */
+ (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
+
+ /* "View.MemoryView":1196
+ * for idx in range(ndim):
+ * strides[idx] = stride
+ * stride *= shape[idx] # <<<<<<<<<<<<<<
+ * else:
+ * for idx in range(ndim - 1, -1, -1):
+ */
+ __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
+ }
+
+ /* "View.MemoryView":1193
+ * cdef int idx
+ *
+ * if order == 'F': # <<<<<<<<<<<<<<
+ * for idx in range(ndim):
+ * strides[idx] = stride
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1198
+ * stride *= shape[idx]
+ * else:
+ * for idx in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<<
+ * strides[idx] = stride
+ * stride *= shape[idx]
+ */
+ /*else*/ {
+ for (__pyx_t_2 = (__pyx_v_ndim - 1); __pyx_t_2 > -1; __pyx_t_2-=1) {
+ __pyx_v_idx = __pyx_t_2;
+
+ /* "View.MemoryView":1199
+ * else:
+ * for idx in range(ndim - 1, -1, -1):
+ * strides[idx] = stride # <<<<<<<<<<<<<<
+ * stride *= shape[idx]
+ *
+ */
+ (__pyx_v_strides[__pyx_v_idx]) = __pyx_v_stride;
+
+ /* "View.MemoryView":1200
+ * for idx in range(ndim - 1, -1, -1):
+ * strides[idx] = stride
+ * stride *= shape[idx] # <<<<<<<<<<<<<<
+ *
+ * return stride
+ */
+ __pyx_v_stride = (__pyx_v_stride * (__pyx_v_shape[__pyx_v_idx]));
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1202
+ * stride *= shape[idx]
+ *
+ * return stride # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ */
+ __pyx_r = __pyx_v_stride;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1184
+ *
+ * @cname('__pyx_fill_contig_strides_array')
+ * cdef Py_ssize_t fill_contig_strides_array( # <<<<<<<<<<<<<<
+ * Py_ssize_t *shape, Py_ssize_t *strides, Py_ssize_t stride,
+ * int ndim, char order) noexcept nogil:
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1205
+ *
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *tmpslice,
+ * char order,
+ */
+
+static void *__pyx_memoryview_copy_data_to_temp(__Pyx_memviewslice *__pyx_v_src, __Pyx_memviewslice *__pyx_v_tmpslice, char __pyx_v_order, int __pyx_v_ndim) {
+ int __pyx_v_i;
+ void *__pyx_v_result;
+ size_t __pyx_v_itemsize;
+ size_t __pyx_v_size;
+ void *__pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ struct __pyx_memoryview_obj *__pyx_t_4;
+ int __pyx_t_5;
+ int __pyx_t_6;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save;
+ #endif
+ __Pyx_RefNannySetupContext("copy_data_to_temp", 1);
+
+ /* "View.MemoryView":1216
+ * cdef void *result
+ *
+ * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<<
+ * cdef size_t size = slice_get_size(src, ndim)
+ *
+ */
+ __pyx_t_1 = __pyx_v_src->memview->view.itemsize;
+ __pyx_v_itemsize = __pyx_t_1;
+
+ /* "View.MemoryView":1217
+ *
+ * cdef size_t itemsize = src.memview.view.itemsize
+ * cdef size_t size = slice_get_size(src, ndim) # <<<<<<<<<<<<<<
+ *
+ * result = malloc(size)
+ */
+ __pyx_v_size = __pyx_memoryview_slice_get_size(__pyx_v_src, __pyx_v_ndim);
+
+ /* "View.MemoryView":1219
+ * cdef size_t size = slice_get_size(src, ndim)
+ *
+ * result = malloc(size) # <<<<<<<<<<<<<<
+ * if not result:
+ * _err_no_memory()
+ */
+ __pyx_v_result = malloc(__pyx_v_size);
+
+ /* "View.MemoryView":1220
+ *
+ * result = malloc(size)
+ * if not result: # <<<<<<<<<<<<<<
+ * _err_no_memory()
+ *
+ */
+ __pyx_t_2 = (!(__pyx_v_result != 0));
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1221
+ * result = malloc(size)
+ * if not result:
+ * _err_no_memory() # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_3 = __pyx_memoryview_err_no_memory(); if (unlikely(__pyx_t_3 == ((int)-1))) __PYX_ERR(1, 1221, __pyx_L1_error)
+
+ /* "View.MemoryView":1220
+ *
+ * result = malloc(size)
+ * if not result: # <<<<<<<<<<<<<<
+ * _err_no_memory()
+ *
+ */
+ }
+
+ /* "View.MemoryView":1224
+ *
+ *
+ * tmpslice.data = result # <<<<<<<<<<<<<<
+ * tmpslice.memview = src.memview
+ * for i in range(ndim):
+ */
+ __pyx_v_tmpslice->data = ((char *)__pyx_v_result);
+
+ /* "View.MemoryView":1225
+ *
+ * tmpslice.data = result
+ * tmpslice.memview = src.memview # <<<<<<<<<<<<<<
+ * for i in range(ndim):
+ * tmpslice.shape[i] = src.shape[i]
+ */
+ __pyx_t_4 = __pyx_v_src->memview;
+ __pyx_v_tmpslice->memview = __pyx_t_4;
+
+ /* "View.MemoryView":1226
+ * tmpslice.data = result
+ * tmpslice.memview = src.memview
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * tmpslice.shape[i] = src.shape[i]
+ * tmpslice.suboffsets[i] = -1
+ */
+ __pyx_t_3 = __pyx_v_ndim;
+ __pyx_t_5 = __pyx_t_3;
+ for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+ __pyx_v_i = __pyx_t_6;
+
+ /* "View.MemoryView":1227
+ * tmpslice.memview = src.memview
+ * for i in range(ndim):
+ * tmpslice.shape[i] = src.shape[i] # <<<<<<<<<<<<<<
+ * tmpslice.suboffsets[i] = -1
+ *
+ */
+ (__pyx_v_tmpslice->shape[__pyx_v_i]) = (__pyx_v_src->shape[__pyx_v_i]);
+
+ /* "View.MemoryView":1228
+ * for i in range(ndim):
+ * tmpslice.shape[i] = src.shape[i]
+ * tmpslice.suboffsets[i] = -1 # <<<<<<<<<<<<<<
+ *
+ * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, ndim, order)
+ */
+ (__pyx_v_tmpslice->suboffsets[__pyx_v_i]) = -1L;
+ }
+
+ /* "View.MemoryView":1230
+ * tmpslice.suboffsets[i] = -1
+ *
+ * fill_contig_strides_array(&tmpslice.shape[0], &tmpslice.strides[0], itemsize, ndim, order) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ (void)(__pyx_fill_contig_strides_array((&(__pyx_v_tmpslice->shape[0])), (&(__pyx_v_tmpslice->strides[0])), __pyx_v_itemsize, __pyx_v_ndim, __pyx_v_order));
+
+ /* "View.MemoryView":1233
+ *
+ *
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * if tmpslice.shape[i] == 1:
+ * tmpslice.strides[i] = 0
+ */
+ __pyx_t_3 = __pyx_v_ndim;
+ __pyx_t_5 = __pyx_t_3;
+ for (__pyx_t_6 = 0; __pyx_t_6 < __pyx_t_5; __pyx_t_6+=1) {
+ __pyx_v_i = __pyx_t_6;
+
+ /* "View.MemoryView":1234
+ *
+ * for i in range(ndim):
+ * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<<
+ * tmpslice.strides[i] = 0
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_tmpslice->shape[__pyx_v_i]) == 1);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1235
+ * for i in range(ndim):
+ * if tmpslice.shape[i] == 1:
+ * tmpslice.strides[i] = 0 # <<<<<<<<<<<<<<
+ *
+ * if slice_is_contig(src[0], order, ndim):
+ */
+ (__pyx_v_tmpslice->strides[__pyx_v_i]) = 0;
+
+ /* "View.MemoryView":1234
+ *
+ * for i in range(ndim):
+ * if tmpslice.shape[i] == 1: # <<<<<<<<<<<<<<
+ * tmpslice.strides[i] = 0
+ *
+ */
+ }
+ }
+
+ /* "View.MemoryView":1237
+ * tmpslice.strides[i] = 0
+ *
+ * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<<
+ * memcpy(result, src.data, size)
+ * else:
+ */
+ __pyx_t_2 = __pyx_memviewslice_is_contig((__pyx_v_src[0]), __pyx_v_order, __pyx_v_ndim);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1238
+ *
+ * if slice_is_contig(src[0], order, ndim):
+ * memcpy(result, src.data, size) # <<<<<<<<<<<<<<
+ * else:
+ * copy_strided_to_strided(src, tmpslice, ndim, itemsize)
+ */
+ (void)(memcpy(__pyx_v_result, __pyx_v_src->data, __pyx_v_size));
+
+ /* "View.MemoryView":1237
+ * tmpslice.strides[i] = 0
+ *
+ * if slice_is_contig(src[0], order, ndim): # <<<<<<<<<<<<<<
+ * memcpy(result, src.data, size)
+ * else:
+ */
+ goto __pyx_L9;
+ }
+
+ /* "View.MemoryView":1240
+ * memcpy(result, src.data, size)
+ * else:
+ * copy_strided_to_strided(src, tmpslice, ndim, itemsize) # <<<<<<<<<<<<<<
+ *
+ * return result
+ */
+ /*else*/ {
+ copy_strided_to_strided(__pyx_v_src, __pyx_v_tmpslice, __pyx_v_ndim, __pyx_v_itemsize);
+ }
+ __pyx_L9:;
+
+ /* "View.MemoryView":1242
+ * copy_strided_to_strided(src, tmpslice, ndim, itemsize)
+ *
+ * return result # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_r = __pyx_v_result;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1205
+ *
+ * @cname('__pyx_memoryview_copy_data_to_temp')
+ * cdef void *copy_data_to_temp(__Pyx_memviewslice *src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice *tmpslice,
+ * char order,
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ #ifdef WITH_THREAD
+ __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.copy_data_to_temp", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContextNogil()
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1247
+ *
+ * @cname('__pyx_memoryview_err_extents')
+ * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<<
+ * Py_ssize_t extent2) except -1 with gil:
+ * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})"
+ */
+
+static int __pyx_memoryview_err_extents(int __pyx_v_i, Py_ssize_t __pyx_v_extent1, Py_ssize_t __pyx_v_extent2) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ Py_ssize_t __pyx_t_2;
+ Py_UCS4 __pyx_t_3;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("_err_extents", 0);
+
+ /* "View.MemoryView":1249
+ * cdef int _err_extents(int i, Py_ssize_t extent1,
+ * Py_ssize_t extent2) except -1 with gil:
+ * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})" # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_err_dim')
+ */
+ __pyx_t_1 = PyTuple_New(7); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1249, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = 0;
+ __pyx_t_3 = 127;
+ __Pyx_INCREF(__pyx_kp_u_got_differing_extents_in_dimensi);
+ __pyx_t_2 += 35;
+ __Pyx_GIVEREF(__pyx_kp_u_got_differing_extents_in_dimensi);
+ PyTuple_SET_ITEM(__pyx_t_1, 0, __pyx_kp_u_got_differing_extents_in_dimensi);
+ __pyx_t_4 = __Pyx_PyUnicode_From_int(__pyx_v_i, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_1, 1, __pyx_t_4);
+ __pyx_t_4 = 0;
+ __Pyx_INCREF(__pyx_kp_u_got);
+ __pyx_t_2 += 6;
+ __Pyx_GIVEREF(__pyx_kp_u_got);
+ PyTuple_SET_ITEM(__pyx_t_1, 2, __pyx_kp_u_got);
+ __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_extent1, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_1, 3, __pyx_t_4);
+ __pyx_t_4 = 0;
+ __Pyx_INCREF(__pyx_kp_u_and);
+ __pyx_t_2 += 5;
+ __Pyx_GIVEREF(__pyx_kp_u_and);
+ PyTuple_SET_ITEM(__pyx_t_1, 4, __pyx_kp_u_and);
+ __pyx_t_4 = __Pyx_PyUnicode_From_Py_ssize_t(__pyx_v_extent2, 0, ' ', 'd'); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __pyx_t_2 += __Pyx_PyUnicode_GET_LENGTH(__pyx_t_4);
+ __Pyx_GIVEREF(__pyx_t_4);
+ PyTuple_SET_ITEM(__pyx_t_1, 5, __pyx_t_4);
+ __pyx_t_4 = 0;
+ __Pyx_INCREF(__pyx_kp_u__7);
+ __pyx_t_2 += 1;
+ __Pyx_GIVEREF(__pyx_kp_u__7);
+ PyTuple_SET_ITEM(__pyx_t_1, 6, __pyx_kp_u__7);
+ __pyx_t_4 = __Pyx_PyUnicode_Join(__pyx_t_1, 7, __pyx_t_2, __pyx_t_3); if (unlikely(!__pyx_t_4)) __PYX_ERR(1, 1249, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_4);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_Raise(__pyx_builtin_ValueError, __pyx_t_4, 0, 0);
+ __Pyx_DECREF(__pyx_t_4); __pyx_t_4 = 0;
+ __PYX_ERR(1, 1249, __pyx_L1_error)
+
+ /* "View.MemoryView":1247
+ *
+ * @cname('__pyx_memoryview_err_extents')
+ * cdef int _err_extents(int i, Py_ssize_t extent1, # <<<<<<<<<<<<<<
+ * Py_ssize_t extent2) except -1 with gil:
+ * raise ValueError, f"got differing extents in dimension {i} (got {extent1} and {extent2})"
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView._err_extents", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1252
+ *
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: # <<<<<<<<<<<<<<
+ * raise error, msg % dim
+ *
+ */
+
+static int __pyx_memoryview_err_dim(PyObject *__pyx_v_error, PyObject *__pyx_v_msg, int __pyx_v_dim) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ PyObject *__pyx_t_2 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("_err_dim", 0);
+ __Pyx_INCREF(__pyx_v_msg);
+
+ /* "View.MemoryView":1253
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil:
+ * raise error, msg % dim # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_err')
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_int(__pyx_v_dim); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 1253, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = __Pyx_PyString_FormatSafe(__pyx_v_msg, __pyx_t_1); if (unlikely(!__pyx_t_2)) __PYX_ERR(1, 1253, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_2);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_Raise(((PyObject *)__pyx_v_error), __pyx_t_2, 0, 0);
+ __Pyx_DECREF(__pyx_t_2); __pyx_t_2 = 0;
+ __PYX_ERR(1, 1253, __pyx_L1_error)
+
+ /* "View.MemoryView":1252
+ *
+ * @cname('__pyx_memoryview_err_dim')
+ * cdef int _err_dim(PyObject *error, str msg, int dim) except -1 with gil: # <<<<<<<<<<<<<<
+ * raise error, msg % dim
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_2);
+ __Pyx_AddTraceback("View.MemoryView._err_dim", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __Pyx_XDECREF(__pyx_v_msg);
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1256
+ *
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(PyObject *error, str msg) except -1 with gil: # <<<<<<<<<<<<<<
+ * raise error, msg
+ *
+ */
+
+static int __pyx_memoryview_err(PyObject *__pyx_v_error, PyObject *__pyx_v_msg) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("_err", 0);
+ __Pyx_INCREF(__pyx_v_msg);
+
+ /* "View.MemoryView":1257
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(PyObject *error, str msg) except -1 with gil:
+ * raise error, msg # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_err_no_memory')
+ */
+ __Pyx_Raise(((PyObject *)__pyx_v_error), __pyx_v_msg, 0, 0);
+ __PYX_ERR(1, 1257, __pyx_L1_error)
+
+ /* "View.MemoryView":1256
+ *
+ * @cname('__pyx_memoryview_err')
+ * cdef int _err(PyObject *error, str msg) except -1 with gil: # <<<<<<<<<<<<<<
+ * raise error, msg
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView._err", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __Pyx_XDECREF(__pyx_v_msg);
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1260
+ *
+ * @cname('__pyx_memoryview_err_no_memory')
+ * cdef int _err_no_memory() except -1 with gil: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ *
+ */
+
+static int __pyx_memoryview_err_no_memory(void) {
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("_err_no_memory", 0);
+
+ /* "View.MemoryView":1261
+ * @cname('__pyx_memoryview_err_no_memory')
+ * cdef int _err_no_memory() except -1 with gil:
+ * raise MemoryError # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ PyErr_NoMemory(); __PYX_ERR(1, 1261, __pyx_L1_error)
+
+ /* "View.MemoryView":1260
+ *
+ * @cname('__pyx_memoryview_err_no_memory')
+ * cdef int _err_no_memory() except -1 with gil: # <<<<<<<<<<<<<<
+ * raise MemoryError
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_AddTraceback("View.MemoryView._err_no_memory", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1265
+ *
+ * @cname('__pyx_memoryview_copy_contents')
+ * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice dst,
+ * int src_ndim, int dst_ndim,
+ */
+
+static int __pyx_memoryview_copy_contents(__Pyx_memviewslice __pyx_v_src, __Pyx_memviewslice __pyx_v_dst, int __pyx_v_src_ndim, int __pyx_v_dst_ndim, int __pyx_v_dtype_is_object) {
+ void *__pyx_v_tmpdata;
+ size_t __pyx_v_itemsize;
+ int __pyx_v_i;
+ char __pyx_v_order;
+ int __pyx_v_broadcasting;
+ int __pyx_v_direct_copy;
+ __Pyx_memviewslice __pyx_v_tmp;
+ int __pyx_v_ndim;
+ int __pyx_r;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+ int __pyx_t_4;
+ int __pyx_t_5;
+ int __pyx_t_6;
+ void *__pyx_t_7;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save;
+ #endif
+ __Pyx_RefNannySetupContext("memoryview_copy_contents", 1);
+
+ /* "View.MemoryView":1273
+ * Check for overlapping memory and verify the shapes.
+ * """
+ * cdef void *tmpdata = NULL # <<<<<<<<<<<<<<
+ * cdef size_t itemsize = src.memview.view.itemsize
+ * cdef int i
+ */
+ __pyx_v_tmpdata = NULL;
+
+ /* "View.MemoryView":1274
+ * """
+ * cdef void *tmpdata = NULL
+ * cdef size_t itemsize = src.memview.view.itemsize # <<<<<<<<<<<<<<
+ * cdef int i
+ * cdef char order = get_best_order(&src, src_ndim)
+ */
+ __pyx_t_1 = __pyx_v_src.memview->view.itemsize;
+ __pyx_v_itemsize = __pyx_t_1;
+
+ /* "View.MemoryView":1276
+ * cdef size_t itemsize = src.memview.view.itemsize
+ * cdef int i
+ * cdef char order = get_best_order(&src, src_ndim) # <<<<<<<<<<<<<<
+ * cdef bint broadcasting = False
+ * cdef bint direct_copy = False
+ */
+ __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_src), __pyx_v_src_ndim);
+
+ /* "View.MemoryView":1277
+ * cdef int i
+ * cdef char order = get_best_order(&src, src_ndim)
+ * cdef bint broadcasting = False # <<<<<<<<<<<<<<
+ * cdef bint direct_copy = False
+ * cdef __Pyx_memviewslice tmp
+ */
+ __pyx_v_broadcasting = 0;
+
+ /* "View.MemoryView":1278
+ * cdef char order = get_best_order(&src, src_ndim)
+ * cdef bint broadcasting = False
+ * cdef bint direct_copy = False # <<<<<<<<<<<<<<
+ * cdef __Pyx_memviewslice tmp
+ *
+ */
+ __pyx_v_direct_copy = 0;
+
+ /* "View.MemoryView":1281
+ * cdef __Pyx_memviewslice tmp
+ *
+ * if src_ndim < dst_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim:
+ */
+ __pyx_t_2 = (__pyx_v_src_ndim < __pyx_v_dst_ndim);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1282
+ *
+ * if src_ndim < dst_ndim:
+ * broadcast_leading(&src, src_ndim, dst_ndim) # <<<<<<<<<<<<<<
+ * elif dst_ndim < src_ndim:
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ */
+ __pyx_memoryview_broadcast_leading((&__pyx_v_src), __pyx_v_src_ndim, __pyx_v_dst_ndim);
+
+ /* "View.MemoryView":1281
+ * cdef __Pyx_memviewslice tmp
+ *
+ * if src_ndim < dst_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim:
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1283
+ * if src_ndim < dst_ndim:
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ *
+ */
+ __pyx_t_2 = (__pyx_v_dst_ndim < __pyx_v_src_ndim);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1284
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim:
+ * broadcast_leading(&dst, dst_ndim, src_ndim) # <<<<<<<<<<<<<<
+ *
+ * cdef int ndim = max(src_ndim, dst_ndim)
+ */
+ __pyx_memoryview_broadcast_leading((&__pyx_v_dst), __pyx_v_dst_ndim, __pyx_v_src_ndim);
+
+ /* "View.MemoryView":1283
+ * if src_ndim < dst_ndim:
+ * broadcast_leading(&src, src_ndim, dst_ndim)
+ * elif dst_ndim < src_ndim: # <<<<<<<<<<<<<<
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ *
+ */
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1286
+ * broadcast_leading(&dst, dst_ndim, src_ndim)
+ *
+ * cdef int ndim = max(src_ndim, dst_ndim) # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim):
+ */
+ __pyx_t_3 = __pyx_v_dst_ndim;
+ __pyx_t_4 = __pyx_v_src_ndim;
+ __pyx_t_2 = (__pyx_t_3 > __pyx_t_4);
+ if (__pyx_t_2) {
+ __pyx_t_5 = __pyx_t_3;
+ } else {
+ __pyx_t_5 = __pyx_t_4;
+ }
+ __pyx_v_ndim = __pyx_t_5;
+
+ /* "View.MemoryView":1288
+ * cdef int ndim = max(src_ndim, dst_ndim)
+ *
+ * for i in range(ndim): # <<<<<<<<<<<<<<
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1:
+ */
+ __pyx_t_5 = __pyx_v_ndim;
+ __pyx_t_3 = __pyx_t_5;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1289
+ *
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<<
+ * if src.shape[i] == 1:
+ * broadcasting = True
+ */
+ __pyx_t_2 = ((__pyx_v_src.shape[__pyx_v_i]) != (__pyx_v_dst.shape[__pyx_v_i]));
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1290
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1: # <<<<<<<<<<<<<<
+ * broadcasting = True
+ * src.strides[i] = 0
+ */
+ __pyx_t_2 = ((__pyx_v_src.shape[__pyx_v_i]) == 1);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1291
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1:
+ * broadcasting = True # <<<<<<<<<<<<<<
+ * src.strides[i] = 0
+ * else:
+ */
+ __pyx_v_broadcasting = 1;
+
+ /* "View.MemoryView":1292
+ * if src.shape[i] == 1:
+ * broadcasting = True
+ * src.strides[i] = 0 # <<<<<<<<<<<<<<
+ * else:
+ * _err_extents(i, dst.shape[i], src.shape[i])
+ */
+ (__pyx_v_src.strides[__pyx_v_i]) = 0;
+
+ /* "View.MemoryView":1290
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]:
+ * if src.shape[i] == 1: # <<<<<<<<<<<<<<
+ * broadcasting = True
+ * src.strides[i] = 0
+ */
+ goto __pyx_L7;
+ }
+
+ /* "View.MemoryView":1294
+ * src.strides[i] = 0
+ * else:
+ * _err_extents(i, dst.shape[i], src.shape[i]) # <<<<<<<<<<<<<<
+ *
+ * if src.suboffsets[i] >= 0:
+ */
+ /*else*/ {
+ __pyx_t_6 = __pyx_memoryview_err_extents(__pyx_v_i, (__pyx_v_dst.shape[__pyx_v_i]), (__pyx_v_src.shape[__pyx_v_i])); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1294, __pyx_L1_error)
+ }
+ __pyx_L7:;
+
+ /* "View.MemoryView":1289
+ *
+ * for i in range(ndim):
+ * if src.shape[i] != dst.shape[i]: # <<<<<<<<<<<<<<
+ * if src.shape[i] == 1:
+ * broadcasting = True
+ */
+ }
+
+ /* "View.MemoryView":1296
+ * _err_extents(i, dst.shape[i], src.shape[i])
+ *
+ * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<<
+ * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i)
+ *
+ */
+ __pyx_t_2 = ((__pyx_v_src.suboffsets[__pyx_v_i]) >= 0);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1297
+ *
+ * if src.suboffsets[i] >= 0:
+ * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i) # <<<<<<<<<<<<<<
+ *
+ * if slices_overlap(&src, &dst, ndim, itemsize):
+ */
+ __pyx_t_6 = __pyx_memoryview_err_dim(PyExc_ValueError, __pyx_kp_s_Dimension_d_is_not_direct, __pyx_v_i); if (unlikely(__pyx_t_6 == ((int)-1))) __PYX_ERR(1, 1297, __pyx_L1_error)
+
+ /* "View.MemoryView":1296
+ * _err_extents(i, dst.shape[i], src.shape[i])
+ *
+ * if src.suboffsets[i] >= 0: # <<<<<<<<<<<<<<
+ * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i)
+ *
+ */
+ }
+ }
+
+ /* "View.MemoryView":1299
+ * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i)
+ *
+ * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<<
+ *
+ * if not slice_is_contig(src, order, ndim):
+ */
+ __pyx_t_2 = __pyx_slices_overlap((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1301
+ * if slices_overlap(&src, &dst, ndim, itemsize):
+ *
+ * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<<
+ * order = get_best_order(&dst, ndim)
+ *
+ */
+ __pyx_t_2 = (!__pyx_memviewslice_is_contig(__pyx_v_src, __pyx_v_order, __pyx_v_ndim));
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1302
+ *
+ * if not slice_is_contig(src, order, ndim):
+ * order = get_best_order(&dst, ndim) # <<<<<<<<<<<<<<
+ *
+ * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
+ */
+ __pyx_v_order = __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim);
+
+ /* "View.MemoryView":1301
+ * if slices_overlap(&src, &dst, ndim, itemsize):
+ *
+ * if not slice_is_contig(src, order, ndim): # <<<<<<<<<<<<<<
+ * order = get_best_order(&dst, ndim)
+ *
+ */
+ }
+
+ /* "View.MemoryView":1304
+ * order = get_best_order(&dst, ndim)
+ *
+ * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim) # <<<<<<<<<<<<<<
+ * src = tmp
+ *
+ */
+ __pyx_t_7 = __pyx_memoryview_copy_data_to_temp((&__pyx_v_src), (&__pyx_v_tmp), __pyx_v_order, __pyx_v_ndim); if (unlikely(__pyx_t_7 == ((void *)NULL))) __PYX_ERR(1, 1304, __pyx_L1_error)
+ __pyx_v_tmpdata = __pyx_t_7;
+
+ /* "View.MemoryView":1305
+ *
+ * tmpdata = copy_data_to_temp(&src, &tmp, order, ndim)
+ * src = tmp # <<<<<<<<<<<<<<
+ *
+ * if not broadcasting:
+ */
+ __pyx_v_src = __pyx_v_tmp;
+
+ /* "View.MemoryView":1299
+ * _err_dim(PyExc_ValueError, "Dimension %d is not direct", i)
+ *
+ * if slices_overlap(&src, &dst, ndim, itemsize): # <<<<<<<<<<<<<<
+ *
+ * if not slice_is_contig(src, order, ndim):
+ */
+ }
+
+ /* "View.MemoryView":1307
+ * src = tmp
+ *
+ * if not broadcasting: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_2 = (!__pyx_v_broadcasting);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1310
+ *
+ *
+ * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim):
+ */
+ __pyx_t_2 = __pyx_memviewslice_is_contig(__pyx_v_src, 'C', __pyx_v_ndim);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1311
+ *
+ * if slice_is_contig(src, 'C', ndim):
+ * direct_copy = slice_is_contig(dst, 'C', ndim) # <<<<<<<<<<<<<<
+ * elif slice_is_contig(src, 'F', ndim):
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ */
+ __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'C', __pyx_v_ndim);
+
+ /* "View.MemoryView":1310
+ *
+ *
+ * if slice_is_contig(src, 'C', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim):
+ */
+ goto __pyx_L12;
+ }
+
+ /* "View.MemoryView":1312
+ * if slice_is_contig(src, 'C', ndim):
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ */
+ __pyx_t_2 = __pyx_memviewslice_is_contig(__pyx_v_src, 'F', __pyx_v_ndim);
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1313
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim):
+ * direct_copy = slice_is_contig(dst, 'F', ndim) # <<<<<<<<<<<<<<
+ *
+ * if direct_copy:
+ */
+ __pyx_v_direct_copy = __pyx_memviewslice_is_contig(__pyx_v_dst, 'F', __pyx_v_ndim);
+
+ /* "View.MemoryView":1312
+ * if slice_is_contig(src, 'C', ndim):
+ * direct_copy = slice_is_contig(dst, 'C', ndim)
+ * elif slice_is_contig(src, 'F', ndim): # <<<<<<<<<<<<<<
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ */
+ }
+ __pyx_L12:;
+
+ /* "View.MemoryView":1315
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ * if direct_copy: # <<<<<<<<<<<<<<
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False)
+ */
+ if (__pyx_v_direct_copy) {
+
+ /* "View.MemoryView":1317
+ * if direct_copy:
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<<
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True)
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+ /* "View.MemoryView":1318
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False)
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim)) # <<<<<<<<<<<<<<
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True)
+ * free(tmpdata)
+ */
+ (void)(memcpy(__pyx_v_dst.data, __pyx_v_src.data, __pyx_memoryview_slice_get_size((&__pyx_v_src), __pyx_v_ndim)));
+
+ /* "View.MemoryView":1319
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False)
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<<
+ * free(tmpdata)
+ * return 0
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+ /* "View.MemoryView":1320
+ * memcpy(dst.data, src.data, slice_get_size(&src, ndim))
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True)
+ * free(tmpdata) # <<<<<<<<<<<<<<
+ * return 0
+ *
+ */
+ free(__pyx_v_tmpdata);
+
+ /* "View.MemoryView":1321
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True)
+ * free(tmpdata)
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ * if order == 'F' == get_best_order(&dst, ndim):
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1315
+ * direct_copy = slice_is_contig(dst, 'F', ndim)
+ *
+ * if direct_copy: # <<<<<<<<<<<<<<
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False)
+ */
+ }
+
+ /* "View.MemoryView":1307
+ * src = tmp
+ *
+ * if not broadcasting: # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ }
+
+ /* "View.MemoryView":1323
+ * return 0
+ *
+ * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_t_2 = (__pyx_v_order == 'F');
+ if (__pyx_t_2) {
+ __pyx_t_2 = ('F' == __pyx_get_best_slice_order((&__pyx_v_dst), __pyx_v_ndim));
+ }
+ if (__pyx_t_2) {
+
+ /* "View.MemoryView":1326
+ *
+ *
+ * transpose_memslice(&src) # <<<<<<<<<<<<<<
+ * transpose_memslice(&dst)
+ *
+ */
+ __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_src)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1326, __pyx_L1_error)
+
+ /* "View.MemoryView":1327
+ *
+ * transpose_memslice(&src)
+ * transpose_memslice(&dst) # <<<<<<<<<<<<<<
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False)
+ */
+ __pyx_t_5 = __pyx_memslice_transpose((&__pyx_v_dst)); if (unlikely(__pyx_t_5 == ((int)-1))) __PYX_ERR(1, 1327, __pyx_L1_error)
+
+ /* "View.MemoryView":1323
+ * return 0
+ *
+ * if order == 'F' == get_best_order(&dst, ndim): # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ }
+
+ /* "View.MemoryView":1329
+ * transpose_memslice(&dst)
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<<
+ * copy_strided_to_strided(&src, &dst, ndim, itemsize)
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True)
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+ /* "View.MemoryView":1330
+ *
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False)
+ * copy_strided_to_strided(&src, &dst, ndim, itemsize) # <<<<<<<<<<<<<<
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True)
+ *
+ */
+ copy_strided_to_strided((&__pyx_v_src), (&__pyx_v_dst), __pyx_v_ndim, __pyx_v_itemsize);
+
+ /* "View.MemoryView":1331
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=False)
+ * copy_strided_to_strided(&src, &dst, ndim, itemsize)
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<<
+ *
+ * free(tmpdata)
+ */
+ __pyx_memoryview_refcount_copying((&__pyx_v_dst), __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+ /* "View.MemoryView":1333
+ * refcount_copying(&dst, dtype_is_object, ndim, inc=True)
+ *
+ * free(tmpdata) # <<<<<<<<<<<<<<
+ * return 0
+ *
+ */
+ free(__pyx_v_tmpdata);
+
+ /* "View.MemoryView":1334
+ *
+ * free(tmpdata)
+ * return 0 # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_broadcast_leading')
+ */
+ __pyx_r = 0;
+ goto __pyx_L0;
+
+ /* "View.MemoryView":1265
+ *
+ * @cname('__pyx_memoryview_copy_contents')
+ * cdef int memoryview_copy_contents(__Pyx_memviewslice src, # <<<<<<<<<<<<<<
+ * __Pyx_memviewslice dst,
+ * int src_ndim, int dst_ndim,
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ #ifdef WITH_THREAD
+ __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_AddTraceback("View.MemoryView.memoryview_copy_contents", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = -1;
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+ __pyx_L0:;
+ __Pyx_RefNannyFinishContextNogil()
+ return __pyx_r;
+}
+
+/* "View.MemoryView":1337
+ *
+ * @cname('__pyx_memoryview_broadcast_leading')
+ * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * int ndim_other) noexcept nogil:
+ */
+
+static void __pyx_memoryview_broadcast_leading(__Pyx_memviewslice *__pyx_v_mslice, int __pyx_v_ndim, int __pyx_v_ndim_other) {
+ int __pyx_v_i;
+ int __pyx_v_offset;
+ int __pyx_t_1;
+ int __pyx_t_2;
+ int __pyx_t_3;
+
+ /* "View.MemoryView":1341
+ * int ndim_other) noexcept nogil:
+ * cdef int i
+ * cdef int offset = ndim_other - ndim # <<<<<<<<<<<<<<
+ *
+ * for i in range(ndim - 1, -1, -1):
+ */
+ __pyx_v_offset = (__pyx_v_ndim_other - __pyx_v_ndim);
+
+ /* "View.MemoryView":1343
+ * cdef int offset = ndim_other - ndim
+ *
+ * for i in range(ndim - 1, -1, -1): # <<<<<<<<<<<<<<
+ * mslice.shape[i + offset] = mslice.shape[i]
+ * mslice.strides[i + offset] = mslice.strides[i]
+ */
+ for (__pyx_t_1 = (__pyx_v_ndim - 1); __pyx_t_1 > -1; __pyx_t_1-=1) {
+ __pyx_v_i = __pyx_t_1;
+
+ /* "View.MemoryView":1344
+ *
+ * for i in range(ndim - 1, -1, -1):
+ * mslice.shape[i + offset] = mslice.shape[i] # <<<<<<<<<<<<<<
+ * mslice.strides[i + offset] = mslice.strides[i]
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ */
+ (__pyx_v_mslice->shape[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->shape[__pyx_v_i]);
+
+ /* "View.MemoryView":1345
+ * for i in range(ndim - 1, -1, -1):
+ * mslice.shape[i + offset] = mslice.shape[i]
+ * mslice.strides[i + offset] = mslice.strides[i] # <<<<<<<<<<<<<<
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ *
+ */
+ (__pyx_v_mslice->strides[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->strides[__pyx_v_i]);
+
+ /* "View.MemoryView":1346
+ * mslice.shape[i + offset] = mslice.shape[i]
+ * mslice.strides[i + offset] = mslice.strides[i]
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i] # <<<<<<<<<<<<<<
+ *
+ * for i in range(offset):
+ */
+ (__pyx_v_mslice->suboffsets[(__pyx_v_i + __pyx_v_offset)]) = (__pyx_v_mslice->suboffsets[__pyx_v_i]);
+ }
+
+ /* "View.MemoryView":1348
+ * mslice.suboffsets[i + offset] = mslice.suboffsets[i]
+ *
+ * for i in range(offset): # <<<<<<<<<<<<<<
+ * mslice.shape[i] = 1
+ * mslice.strides[i] = mslice.strides[0]
+ */
+ __pyx_t_1 = __pyx_v_offset;
+ __pyx_t_2 = __pyx_t_1;
+ for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+ __pyx_v_i = __pyx_t_3;
+
+ /* "View.MemoryView":1349
+ *
+ * for i in range(offset):
+ * mslice.shape[i] = 1 # <<<<<<<<<<<<<<
+ * mslice.strides[i] = mslice.strides[0]
+ * mslice.suboffsets[i] = -1
+ */
+ (__pyx_v_mslice->shape[__pyx_v_i]) = 1;
+
+ /* "View.MemoryView":1350
+ * for i in range(offset):
+ * mslice.shape[i] = 1
+ * mslice.strides[i] = mslice.strides[0] # <<<<<<<<<<<<<<
+ * mslice.suboffsets[i] = -1
+ *
+ */
+ (__pyx_v_mslice->strides[__pyx_v_i]) = (__pyx_v_mslice->strides[0]);
+
+ /* "View.MemoryView":1351
+ * mslice.shape[i] = 1
+ * mslice.strides[i] = mslice.strides[0]
+ * mslice.suboffsets[i] = -1 # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ (__pyx_v_mslice->suboffsets[__pyx_v_i]) = -1L;
+ }
+
+ /* "View.MemoryView":1337
+ *
+ * @cname('__pyx_memoryview_broadcast_leading')
+ * cdef void broadcast_leading(__Pyx_memviewslice *mslice, # <<<<<<<<<<<<<<
+ * int ndim,
+ * int ndim_other) noexcept nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1359
+ *
+ * @cname('__pyx_memoryview_refcount_copying')
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: # <<<<<<<<<<<<<<
+ *
+ * if dtype_is_object:
+ */
+
+static void __pyx_memoryview_refcount_copying(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_dtype_is_object, int __pyx_v_ndim, int __pyx_v_inc) {
+
+ /* "View.MemoryView":1361
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil:
+ *
+ * if dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc)
+ *
+ */
+ if (__pyx_v_dtype_is_object) {
+
+ /* "View.MemoryView":1362
+ *
+ * if dtype_is_object:
+ * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc) # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
+ */
+ __pyx_memoryview_refcount_objects_in_slice_with_gil(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_inc);
+
+ /* "View.MemoryView":1361
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil:
+ *
+ * if dtype_is_object: # <<<<<<<<<<<<<<
+ * refcount_objects_in_slice_with_gil(dst.data, dst.shape, dst.strides, ndim, inc)
+ *
+ */
+ }
+
+ /* "View.MemoryView":1359
+ *
+ * @cname('__pyx_memoryview_refcount_copying')
+ * cdef void refcount_copying(__Pyx_memviewslice *dst, bint dtype_is_object, int ndim, bint inc) noexcept nogil: # <<<<<<<<<<<<<<
+ *
+ * if dtype_is_object:
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1365
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
+ * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * bint inc) noexcept with gil:
+ */
+
+static void __pyx_memoryview_refcount_objects_in_slice_with_gil(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
+ __Pyx_RefNannyDeclarations
+ #ifdef WITH_THREAD
+ PyGILState_STATE __pyx_gilstate_save = __Pyx_PyGILState_Ensure();
+ #endif
+ __Pyx_RefNannySetupContext("refcount_objects_in_slice_with_gil", 0);
+
+ /* "View.MemoryView":1368
+ * Py_ssize_t *strides, int ndim,
+ * bint inc) noexcept with gil:
+ * refcount_objects_in_slice(data, shape, strides, ndim, inc) # <<<<<<<<<<<<<<
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ */
+ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, __pyx_v_shape, __pyx_v_strides, __pyx_v_ndim, __pyx_v_inc);
+
+ /* "View.MemoryView":1365
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice_with_gil')
+ * cdef void refcount_objects_in_slice_with_gil(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * bint inc) noexcept with gil:
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+ #ifdef WITH_THREAD
+ __Pyx_PyGILState_Release(__pyx_gilstate_save);
+ #endif
+}
+
+/* "View.MemoryView":1371
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim, bint inc) noexcept:
+ * cdef Py_ssize_t i
+ */
+
+static void __pyx_memoryview_refcount_objects_in_slice(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, int __pyx_v_inc) {
+ CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+ Py_ssize_t __pyx_v_stride;
+ __Pyx_RefNannyDeclarations
+ Py_ssize_t __pyx_t_1;
+ Py_ssize_t __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ int __pyx_t_4;
+ __Pyx_RefNannySetupContext("refcount_objects_in_slice", 0);
+
+ /* "View.MemoryView":1374
+ * Py_ssize_t *strides, int ndim, bint inc) noexcept:
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<<
+ *
+ * for i in range(shape[0]):
+ */
+ __pyx_v_stride = (__pyx_v_strides[0]);
+
+ /* "View.MemoryView":1376
+ * cdef Py_ssize_t stride = strides[0]
+ *
+ * for i in range(shape[0]): # <<<<<<<<<<<<<<
+ * if ndim == 1:
+ * if inc:
+ */
+ __pyx_t_1 = (__pyx_v_shape[0]);
+ __pyx_t_2 = __pyx_t_1;
+ for (__pyx_t_3 = 0; __pyx_t_3 < __pyx_t_2; __pyx_t_3+=1) {
+ __pyx_v_i = __pyx_t_3;
+
+ /* "View.MemoryView":1377
+ *
+ * for i in range(shape[0]):
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if inc:
+ * Py_INCREF(( data)[0])
+ */
+ __pyx_t_4 = (__pyx_v_ndim == 1);
+ if (__pyx_t_4) {
+
+ /* "View.MemoryView":1378
+ * for i in range(shape[0]):
+ * if ndim == 1:
+ * if inc: # <<<<<<<<<<<<<<
+ * Py_INCREF(( data)[0])
+ * else:
+ */
+ if (__pyx_v_inc) {
+
+ /* "View.MemoryView":1379
+ * if ndim == 1:
+ * if inc:
+ * Py_INCREF(( data)[0]) # <<<<<<<<<<<<<<
+ * else:
+ * Py_DECREF(( data)[0])
+ */
+ Py_INCREF((((PyObject **)__pyx_v_data)[0]));
+
+ /* "View.MemoryView":1378
+ * for i in range(shape[0]):
+ * if ndim == 1:
+ * if inc: # <<<<<<<<<<<<<<
+ * Py_INCREF(( data)[0])
+ * else:
+ */
+ goto __pyx_L6;
+ }
+
+ /* "View.MemoryView":1381
+ * Py_INCREF(( data)[0])
+ * else:
+ * Py_DECREF(( data)[0]) # <<<<<<<<<<<<<<
+ * else:
+ * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc)
+ */
+ /*else*/ {
+ Py_DECREF((((PyObject **)__pyx_v_data)[0]));
+ }
+ __pyx_L6:;
+
+ /* "View.MemoryView":1377
+ *
+ * for i in range(shape[0]):
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * if inc:
+ * Py_INCREF(( data)[0])
+ */
+ goto __pyx_L5;
+ }
+
+ /* "View.MemoryView":1383
+ * Py_DECREF(( data)[0])
+ * else:
+ * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc) # <<<<<<<<<<<<<<
+ *
+ * data += stride
+ */
+ /*else*/ {
+ __pyx_memoryview_refcount_objects_in_slice(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_inc);
+ }
+ __pyx_L5:;
+
+ /* "View.MemoryView":1385
+ * refcount_objects_in_slice(data, shape + 1, strides + 1, ndim - 1, inc)
+ *
+ * data += stride # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
+ }
+
+ /* "View.MemoryView":1371
+ *
+ * @cname('__pyx_memoryview_refcount_objects_in_slice')
+ * cdef void refcount_objects_in_slice(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim, bint inc) noexcept:
+ * cdef Py_ssize_t i
+ */
+
+ /* function exit code */
+ __Pyx_RefNannyFinishContext();
+}
+
+/* "View.MemoryView":1391
+ *
+ * @cname('__pyx_memoryview_slice_assign_scalar')
+ * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<<
+ * size_t itemsize, void *item,
+ * bint dtype_is_object) noexcept nogil:
+ */
+
+static void __pyx_memoryview_slice_assign_scalar(__Pyx_memviewslice *__pyx_v_dst, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item, int __pyx_v_dtype_is_object) {
+
+ /* "View.MemoryView":1394
+ * size_t itemsize, void *item,
+ * bint dtype_is_object) noexcept nogil:
+ * refcount_copying(dst, dtype_is_object, ndim, inc=False) # <<<<<<<<<<<<<<
+ * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item)
+ * refcount_copying(dst, dtype_is_object, ndim, inc=True)
+ */
+ __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 0);
+
+ /* "View.MemoryView":1395
+ * bint dtype_is_object) noexcept nogil:
+ * refcount_copying(dst, dtype_is_object, ndim, inc=False)
+ * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item) # <<<<<<<<<<<<<<
+ * refcount_copying(dst, dtype_is_object, ndim, inc=True)
+ *
+ */
+ __pyx_memoryview__slice_assign_scalar(__pyx_v_dst->data, __pyx_v_dst->shape, __pyx_v_dst->strides, __pyx_v_ndim, __pyx_v_itemsize, __pyx_v_item);
+
+ /* "View.MemoryView":1396
+ * refcount_copying(dst, dtype_is_object, ndim, inc=False)
+ * _slice_assign_scalar(dst.data, dst.shape, dst.strides, ndim, itemsize, item)
+ * refcount_copying(dst, dtype_is_object, ndim, inc=True) # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_memoryview_refcount_copying(__pyx_v_dst, __pyx_v_dtype_is_object, __pyx_v_ndim, 1);
+
+ /* "View.MemoryView":1391
+ *
+ * @cname('__pyx_memoryview_slice_assign_scalar')
+ * cdef void slice_assign_scalar(__Pyx_memviewslice *dst, int ndim, # <<<<<<<<<<<<<<
+ * size_t itemsize, void *item,
+ * bint dtype_is_object) noexcept nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "View.MemoryView":1400
+ *
+ * @cname('__pyx_memoryview__slice_assign_scalar')
+ * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * size_t itemsize, void *item) noexcept nogil:
+ */
+
+static void __pyx_memoryview__slice_assign_scalar(char *__pyx_v_data, Py_ssize_t *__pyx_v_shape, Py_ssize_t *__pyx_v_strides, int __pyx_v_ndim, size_t __pyx_v_itemsize, void *__pyx_v_item) {
+ CYTHON_UNUSED Py_ssize_t __pyx_v_i;
+ Py_ssize_t __pyx_v_stride;
+ Py_ssize_t __pyx_v_extent;
+ int __pyx_t_1;
+ Py_ssize_t __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ Py_ssize_t __pyx_t_4;
+
+ /* "View.MemoryView":1404
+ * size_t itemsize, void *item) noexcept nogil:
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t stride = strides[0] # <<<<<<<<<<<<<<
+ * cdef Py_ssize_t extent = shape[0]
+ *
+ */
+ __pyx_v_stride = (__pyx_v_strides[0]);
+
+ /* "View.MemoryView":1405
+ * cdef Py_ssize_t i
+ * cdef Py_ssize_t stride = strides[0]
+ * cdef Py_ssize_t extent = shape[0] # <<<<<<<<<<<<<<
+ *
+ * if ndim == 1:
+ */
+ __pyx_v_extent = (__pyx_v_shape[0]);
+
+ /* "View.MemoryView":1407
+ * cdef Py_ssize_t extent = shape[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * for i in range(extent):
+ * memcpy(data, item, itemsize)
+ */
+ __pyx_t_1 = (__pyx_v_ndim == 1);
+ if (__pyx_t_1) {
+
+ /* "View.MemoryView":1408
+ *
+ * if ndim == 1:
+ * for i in range(extent): # <<<<<<<<<<<<<<
+ * memcpy(data, item, itemsize)
+ * data += stride
+ */
+ __pyx_t_2 = __pyx_v_extent;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1409
+ * if ndim == 1:
+ * for i in range(extent):
+ * memcpy(data, item, itemsize) # <<<<<<<<<<<<<<
+ * data += stride
+ * else:
+ */
+ (void)(memcpy(__pyx_v_data, __pyx_v_item, __pyx_v_itemsize));
+
+ /* "View.MemoryView":1410
+ * for i in range(extent):
+ * memcpy(data, item, itemsize)
+ * data += stride # <<<<<<<<<<<<<<
+ * else:
+ * for i in range(extent):
+ */
+ __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
+ }
+
+ /* "View.MemoryView":1407
+ * cdef Py_ssize_t extent = shape[0]
+ *
+ * if ndim == 1: # <<<<<<<<<<<<<<
+ * for i in range(extent):
+ * memcpy(data, item, itemsize)
+ */
+ goto __pyx_L3;
+ }
+
+ /* "View.MemoryView":1412
+ * data += stride
+ * else:
+ * for i in range(extent): # <<<<<<<<<<<<<<
+ * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item)
+ * data += stride
+ */
+ /*else*/ {
+ __pyx_t_2 = __pyx_v_extent;
+ __pyx_t_3 = __pyx_t_2;
+ for (__pyx_t_4 = 0; __pyx_t_4 < __pyx_t_3; __pyx_t_4+=1) {
+ __pyx_v_i = __pyx_t_4;
+
+ /* "View.MemoryView":1413
+ * else:
+ * for i in range(extent):
+ * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item) # <<<<<<<<<<<<<<
+ * data += stride
+ *
+ */
+ __pyx_memoryview__slice_assign_scalar(__pyx_v_data, (__pyx_v_shape + 1), (__pyx_v_strides + 1), (__pyx_v_ndim - 1), __pyx_v_itemsize, __pyx_v_item);
+
+ /* "View.MemoryView":1414
+ * for i in range(extent):
+ * _slice_assign_scalar(data, shape + 1, strides + 1, ndim - 1, itemsize, item)
+ * data += stride # <<<<<<<<<<<<<<
+ *
+ *
+ */
+ __pyx_v_data = (__pyx_v_data + __pyx_v_stride);
+ }
+ }
+ __pyx_L3:;
+
+ /* "View.MemoryView":1400
+ *
+ * @cname('__pyx_memoryview__slice_assign_scalar')
+ * cdef void _slice_assign_scalar(char *data, Py_ssize_t *shape, # <<<<<<<<<<<<<<
+ * Py_ssize_t *strides, int ndim,
+ * size_t itemsize, void *item) noexcept nogil:
+ */
+
+ /* function exit code */
+}
+
+/* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<<
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ */
+
+/* Python wrapper */
+static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+); /*proto*/
+static PyMethodDef __pyx_mdef_15View_dot_MemoryView_1__pyx_unpickle_Enum = {"__pyx_unpickle_Enum", (PyCFunction)(void*)(__Pyx_PyCFunction_FastCallWithKeywords)__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum, __Pyx_METH_FASTCALL|METH_KEYWORDS, 0};
+static PyObject *__pyx_pw_15View_dot_MemoryView_1__pyx_unpickle_Enum(PyObject *__pyx_self,
+#if CYTHON_METH_FASTCALL
+PyObject *const *__pyx_args, Py_ssize_t __pyx_nargs, PyObject *__pyx_kwds
+#else
+PyObject *__pyx_args, PyObject *__pyx_kwds
+#endif
+) {
+ PyObject *__pyx_v___pyx_type = 0;
+ long __pyx_v___pyx_checksum;
+ PyObject *__pyx_v___pyx_state = 0;
+ #if !CYTHON_METH_FASTCALL
+ CYTHON_UNUSED Py_ssize_t __pyx_nargs;
+ #endif
+ CYTHON_UNUSED PyObject *const *__pyx_kwvalues;
+ PyObject* values[3] = {0,0,0};
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ PyObject *__pyx_r = 0;
+ __Pyx_RefNannyDeclarations
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Enum (wrapper)", 0);
+ #if !CYTHON_METH_FASTCALL
+ #if CYTHON_ASSUME_SAFE_MACROS
+ __pyx_nargs = PyTuple_GET_SIZE(__pyx_args);
+ #else
+ __pyx_nargs = PyTuple_Size(__pyx_args);
+ if (unlikely((__pyx_nargs < 0))) __PYX_ERR(1, 1, __pyx_L3_error)
+ #endif
+ #endif
+ __pyx_kwvalues = __Pyx_KwValues_FASTCALL(__pyx_args, __pyx_nargs);
+ {
+ PyObject **__pyx_pyargnames[] = {&__pyx_n_s_pyx_type,&__pyx_n_s_pyx_checksum,&__pyx_n_s_pyx_state,0};
+ if (__pyx_kwds) {
+ Py_ssize_t kw_args;
+ switch (__pyx_nargs) {
+ case 3: values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+ CYTHON_FALLTHROUGH;
+ case 2: values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+ CYTHON_FALLTHROUGH;
+ case 1: values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ CYTHON_FALLTHROUGH;
+ case 0: break;
+ default: goto __pyx_L5_argtuple_error;
+ }
+ kw_args = __Pyx_NumKwargs_FASTCALL(__pyx_kwds);
+ switch (__pyx_nargs) {
+ case 0:
+ if (likely((values[0] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_type)) != 0)) {
+ (void)__Pyx_Arg_NewRef_FASTCALL(values[0]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
+ else goto __pyx_L5_argtuple_error;
+ CYTHON_FALLTHROUGH;
+ case 1:
+ if (likely((values[1] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_checksum)) != 0)) {
+ (void)__Pyx_Arg_NewRef_FASTCALL(values[1]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
+ else {
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 1); __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ CYTHON_FALLTHROUGH;
+ case 2:
+ if (likely((values[2] = __Pyx_GetKwValue_FASTCALL(__pyx_kwds, __pyx_kwvalues, __pyx_n_s_pyx_state)) != 0)) {
+ (void)__Pyx_Arg_NewRef_FASTCALL(values[2]);
+ kw_args--;
+ }
+ else if (unlikely(PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
+ else {
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, 2); __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ }
+ if (unlikely(kw_args > 0)) {
+ const Py_ssize_t kwd_pos_args = __pyx_nargs;
+ if (unlikely(__Pyx_ParseOptionalKeywords(__pyx_kwds, __pyx_kwvalues, __pyx_pyargnames, 0, values + 0, kwd_pos_args, "__pyx_unpickle_Enum") < 0)) __PYX_ERR(1, 1, __pyx_L3_error)
+ }
+ } else if (unlikely(__pyx_nargs != 3)) {
+ goto __pyx_L5_argtuple_error;
+ } else {
+ values[0] = __Pyx_Arg_FASTCALL(__pyx_args, 0);
+ values[1] = __Pyx_Arg_FASTCALL(__pyx_args, 1);
+ values[2] = __Pyx_Arg_FASTCALL(__pyx_args, 2);
+ }
+ __pyx_v___pyx_type = values[0];
+ __pyx_v___pyx_checksum = __Pyx_PyInt_As_long(values[1]); if (unlikely((__pyx_v___pyx_checksum == (long)-1) && PyErr_Occurred())) __PYX_ERR(1, 1, __pyx_L3_error)
+ __pyx_v___pyx_state = values[2];
+ }
+ goto __pyx_L4_argument_unpacking_done;
+ __pyx_L5_argtuple_error:;
+ __Pyx_RaiseArgtupleInvalid("__pyx_unpickle_Enum", 1, 3, 3, __pyx_nargs); __PYX_ERR(1, 1, __pyx_L3_error)
+ goto __pyx_L3_error;
+ __pyx_L3_error:;
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __Pyx_RefNannyFinishContext();
+ return NULL;
+ __pyx_L4_argument_unpacking_done:;
+ __pyx_r = __pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(__pyx_self, __pyx_v___pyx_type, __pyx_v___pyx_checksum, __pyx_v___pyx_state);
+
+ /* function exit code */
+ {
+ Py_ssize_t __pyx_temp;
+ for (__pyx_temp=0; __pyx_temp < (Py_ssize_t)(sizeof(values)/sizeof(values[0])); ++__pyx_temp) {
+ __Pyx_Arg_XDECREF_FASTCALL(values[__pyx_temp]);
+ }
+ }
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+static PyObject *__pyx_pf_15View_dot_MemoryView___pyx_unpickle_Enum(CYTHON_UNUSED PyObject *__pyx_self, PyObject *__pyx_v___pyx_type, long __pyx_v___pyx_checksum, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_v___pyx_PickleError = 0;
+ PyObject *__pyx_v___pyx_result = 0;
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ PyObject *__pyx_t_3 = NULL;
+ PyObject *__pyx_t_4 = NULL;
+ int __pyx_t_5;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Enum", 0);
+
+ /* "(tree fragment)":4
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<<
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum
+ */
+ __pyx_t_1 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_t_2 = (__Pyx_PySequence_ContainsTF(__pyx_t_1, __pyx_tuple__8, Py_NE)); if (unlikely((__pyx_t_2 < 0))) __PYX_ERR(1, 4, __pyx_L1_error)
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ if (__pyx_t_2) {
+
+ /* "(tree fragment)":5
+ * cdef object __pyx_result
+ * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931):
+ * from pickle import PickleError as __pyx_PickleError # <<<<<<<<<<<<<<
+ * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum
+ * __pyx_result = Enum.__new__(__pyx_type)
+ */
+ __pyx_t_1 = PyList_New(1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_n_s_PickleError);
+ __Pyx_GIVEREF(__pyx_n_s_PickleError);
+ if (__Pyx_PyList_SET_ITEM(__pyx_t_1, 0, __pyx_n_s_PickleError)) __PYX_ERR(1, 5, __pyx_L1_error);
+ __pyx_t_3 = __Pyx_Import(__pyx_n_s_pickle, __pyx_t_1, 0); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __pyx_t_1 = __Pyx_ImportFrom(__pyx_t_3, __pyx_n_s_PickleError); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 5, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_INCREF(__pyx_t_1);
+ __pyx_v___pyx_PickleError = __pyx_t_1;
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+
+ /* "(tree fragment)":6
+ * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931):
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum # <<<<<<<<<<<<<<
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None:
+ */
+ __pyx_t_3 = __Pyx_PyInt_From_long(__pyx_v___pyx_checksum); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_1 = __Pyx_PyString_Format(__pyx_kp_s_Incompatible_checksums_0x_x_vs_0, __pyx_t_3); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 6, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ __Pyx_Raise(__pyx_v___pyx_PickleError, __pyx_t_1, 0, 0);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+ __PYX_ERR(1, 6, __pyx_L1_error)
+
+ /* "(tree fragment)":4
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ * if __pyx_checksum not in (0x82a3537, 0x6ae9995, 0xb068931): # <<<<<<<<<<<<<<
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum
+ */
+ }
+
+ /* "(tree fragment)":7
+ * from pickle import PickleError as __pyx_PickleError
+ * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum
+ * __pyx_result = Enum.__new__(__pyx_type) # <<<<<<<<<<<<<<
+ * if __pyx_state is not None:
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ */
+ __pyx_t_3 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_MemviewEnum_type), __pyx_n_s_new); if (unlikely(!__pyx_t_3)) __PYX_ERR(1, 7, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_3);
+ __pyx_t_4 = NULL;
+ __pyx_t_5 = 0;
+ #if CYTHON_UNPACK_METHODS
+ if (likely(PyMethod_Check(__pyx_t_3))) {
+ __pyx_t_4 = PyMethod_GET_SELF(__pyx_t_3);
+ if (likely(__pyx_t_4)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_3);
+ __Pyx_INCREF(__pyx_t_4);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_3, function);
+ __pyx_t_5 = 1;
+ }
+ }
+ #endif
+ {
+ PyObject *__pyx_callargs[2] = {__pyx_t_4, __pyx_v___pyx_type};
+ __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_3, __pyx_callargs+1-__pyx_t_5, 1+__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_4); __pyx_t_4 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 7, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_3); __pyx_t_3 = 0;
+ }
+ __pyx_v___pyx_result = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":8
+ * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None: # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ */
+ __pyx_t_2 = (__pyx_v___pyx_state != Py_None);
+ if (__pyx_t_2) {
+
+ /* "(tree fragment)":9
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None:
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state) # <<<<<<<<<<<<<<
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ */
+ if (!(likely(PyTuple_CheckExact(__pyx_v___pyx_state))||((__pyx_v___pyx_state) == Py_None) || __Pyx_RaiseUnexpectedTypeError("tuple", __pyx_v___pyx_state))) __PYX_ERR(1, 9, __pyx_L1_error)
+ __pyx_t_1 = __pyx_unpickle_Enum__set_state(((struct __pyx_MemviewEnum_obj *)__pyx_v___pyx_result), ((PyObject*)__pyx_v___pyx_state)); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 9, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "(tree fragment)":8
+ * raise __pyx_PickleError, "Incompatible checksums (0x%x vs (0x82a3537, 0x6ae9995, 0xb068931) = (name))" % __pyx_checksum
+ * __pyx_result = Enum.__new__(__pyx_type)
+ * if __pyx_state is not None: # <<<<<<<<<<<<<<
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ */
+ }
+
+ /* "(tree fragment)":10
+ * if __pyx_state is not None:
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result # <<<<<<<<<<<<<<
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0]
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(__pyx_v___pyx_result);
+ __pyx_r = __pyx_v___pyx_result;
+ goto __pyx_L0;
+
+ /* "(tree fragment)":1
+ * def __pyx_unpickle_Enum(__pyx_type, long __pyx_checksum, __pyx_state): # <<<<<<<<<<<<<<
+ * cdef object __pyx_PickleError
+ * cdef object __pyx_result
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_3);
+ __Pyx_XDECREF(__pyx_t_4);
+ __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = NULL;
+ __pyx_L0:;
+ __Pyx_XDECREF(__pyx_v___pyx_PickleError);
+ __Pyx_XDECREF(__pyx_v___pyx_result);
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "(tree fragment)":11
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+static PyObject *__pyx_unpickle_Enum__set_state(struct __pyx_MemviewEnum_obj *__pyx_v___pyx_result, PyObject *__pyx_v___pyx_state) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_t_2;
+ Py_ssize_t __pyx_t_3;
+ int __pyx_t_4;
+ PyObject *__pyx_t_5 = NULL;
+ PyObject *__pyx_t_6 = NULL;
+ PyObject *__pyx_t_7 = NULL;
+ int __pyx_t_8;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("__pyx_unpickle_Enum__set_state", 0);
+
+ /* "(tree fragment)":12
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0] # <<<<<<<<<<<<<<
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ * __pyx_result.__dict__.update(__pyx_state[1])
+ */
+ if (unlikely(__pyx_v___pyx_state == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+ __PYX_ERR(1, 12, __pyx_L1_error)
+ }
+ __pyx_t_1 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 0, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 12, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_GIVEREF(__pyx_t_1);
+ __Pyx_GOTREF(__pyx_v___pyx_result->name);
+ __Pyx_DECREF(__pyx_v___pyx_result->name);
+ __pyx_v___pyx_result->name = __pyx_t_1;
+ __pyx_t_1 = 0;
+
+ /* "(tree fragment)":13
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<<
+ * __pyx_result.__dict__.update(__pyx_state[1])
+ */
+ if (unlikely(__pyx_v___pyx_state == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "object of type 'NoneType' has no len()");
+ __PYX_ERR(1, 13, __pyx_L1_error)
+ }
+ __pyx_t_3 = __Pyx_PyTuple_GET_SIZE(__pyx_v___pyx_state); if (unlikely(__pyx_t_3 == ((Py_ssize_t)-1))) __PYX_ERR(1, 13, __pyx_L1_error)
+ __pyx_t_4 = (__pyx_t_3 > 1);
+ if (__pyx_t_4) {
+ } else {
+ __pyx_t_2 = __pyx_t_4;
+ goto __pyx_L4_bool_binop_done;
+ }
+ __pyx_t_4 = __Pyx_HasAttr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(__pyx_t_4 == ((int)-1))) __PYX_ERR(1, 13, __pyx_L1_error)
+ __pyx_t_2 = __pyx_t_4;
+ __pyx_L4_bool_binop_done:;
+ if (__pyx_t_2) {
+
+ /* "(tree fragment)":14
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ * __pyx_result.__dict__.update(__pyx_state[1]) # <<<<<<<<<<<<<<
+ */
+ __pyx_t_5 = __Pyx_PyObject_GetAttrStr(((PyObject *)__pyx_v___pyx_result), __pyx_n_s_dict); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_6 = __Pyx_PyObject_GetAttrStr(__pyx_t_5, __pyx_n_s_update); if (unlikely(!__pyx_t_6)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_6);
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ if (unlikely(__pyx_v___pyx_state == Py_None)) {
+ PyErr_SetString(PyExc_TypeError, "'NoneType' object is not subscriptable");
+ __PYX_ERR(1, 14, __pyx_L1_error)
+ }
+ __pyx_t_5 = __Pyx_GetItemInt_Tuple(__pyx_v___pyx_state, 1, long, 1, __Pyx_PyInt_From_long, 0, 0, 1); if (unlikely(!__pyx_t_5)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_5);
+ __pyx_t_7 = NULL;
+ __pyx_t_8 = 0;
+ #if CYTHON_UNPACK_METHODS
+ if (likely(PyMethod_Check(__pyx_t_6))) {
+ __pyx_t_7 = PyMethod_GET_SELF(__pyx_t_6);
+ if (likely(__pyx_t_7)) {
+ PyObject* function = PyMethod_GET_FUNCTION(__pyx_t_6);
+ __Pyx_INCREF(__pyx_t_7);
+ __Pyx_INCREF(function);
+ __Pyx_DECREF_SET(__pyx_t_6, function);
+ __pyx_t_8 = 1;
+ }
+ }
+ #endif
+ {
+ PyObject *__pyx_callargs[2] = {__pyx_t_7, __pyx_t_5};
+ __pyx_t_1 = __Pyx_PyObject_FastCall(__pyx_t_6, __pyx_callargs+1-__pyx_t_8, 1+__pyx_t_8);
+ __Pyx_XDECREF(__pyx_t_7); __pyx_t_7 = 0;
+ __Pyx_DECREF(__pyx_t_5); __pyx_t_5 = 0;
+ if (unlikely(!__pyx_t_1)) __PYX_ERR(1, 14, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __Pyx_DECREF(__pyx_t_6); __pyx_t_6 = 0;
+ }
+ __Pyx_DECREF(__pyx_t_1); __pyx_t_1 = 0;
+
+ /* "(tree fragment)":13
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state):
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'): # <<<<<<<<<<<<<<
+ * __pyx_result.__dict__.update(__pyx_state[1])
+ */
+ }
+
+ /* "(tree fragment)":11
+ * __pyx_unpickle_Enum__set_state( __pyx_result, __pyx_state)
+ * return __pyx_result
+ * cdef __pyx_unpickle_Enum__set_state(Enum __pyx_result, tuple __pyx_state): # <<<<<<<<<<<<<<
+ * __pyx_result.name = __pyx_state[0]
+ * if len(__pyx_state) > 1 and hasattr(__pyx_result, '__dict__'):
+ */
+
+ /* function exit code */
+ __pyx_r = Py_None; __Pyx_INCREF(Py_None);
+ goto __pyx_L0;
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_XDECREF(__pyx_t_5);
+ __Pyx_XDECREF(__pyx_t_6);
+ __Pyx_XDECREF(__pyx_t_7);
+ __Pyx_AddTraceback("View.MemoryView.__pyx_unpickle_Enum__set_state", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245
+ *
+ * @property
+ * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns a borrowed reference to the object owning the data/memory.
+ * """
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_7ndarray_4base_base(PyArrayObject *__pyx_v_self) {
+ PyObject *__pyx_r;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":248
+ * """Returns a borrowed reference to the object owning the data/memory.
+ * """
+ * return PyArray_BASE(self) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __pyx_r = PyArray_BASE(__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":245
+ *
+ * @property
+ * cdef inline PyObject* base(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns a borrowed reference to the object owning the data/memory.
+ * """
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251
+ *
+ * @property
+ * cdef inline dtype descr(self): # <<<<<<<<<<<<<<
+ * """Returns an owned reference to the dtype of the array.
+ * """
+ */
+
+static CYTHON_INLINE PyArray_Descr *__pyx_f_5numpy_7ndarray_5descr_descr(PyArrayObject *__pyx_v_self) {
+ PyArray_Descr *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyArray_Descr *__pyx_t_1;
+ __Pyx_RefNannySetupContext("descr", 0);
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":254
+ * """Returns an owned reference to the dtype of the array.
+ * """
+ * return PyArray_DESCR(self) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __Pyx_XDECREF((PyObject *)__pyx_r);
+ __pyx_t_1 = PyArray_DESCR(__pyx_v_self);
+ __Pyx_INCREF((PyObject *)((PyArray_Descr *)__pyx_t_1));
+ __pyx_r = ((PyArray_Descr *)__pyx_t_1);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":251
+ *
+ * @property
+ * cdef inline dtype descr(self): # <<<<<<<<<<<<<<
+ * """Returns an owned reference to the dtype of the array.
+ * """
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ __Pyx_XGIVEREF((PyObject *)__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257
+ *
+ * @property
+ * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns the number of dimensions in the array.
+ * """
+ */
+
+static CYTHON_INLINE int __pyx_f_5numpy_7ndarray_4ndim_ndim(PyArrayObject *__pyx_v_self) {
+ int __pyx_r;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":260
+ * """Returns the number of dimensions in the array.
+ * """
+ * return PyArray_NDIM(self) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __pyx_r = PyArray_NDIM(__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":257
+ *
+ * @property
+ * cdef inline int ndim(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns the number of dimensions in the array.
+ * """
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263
+ *
+ * @property
+ * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns a pointer to the dimensions/shape of the array.
+ * The number of elements matches the number of dimensions of the array (ndim).
+ */
+
+static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_5shape_shape(PyArrayObject *__pyx_v_self) {
+ npy_intp *__pyx_r;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":268
+ * Can return NULL for 0-dimensional arrays.
+ * """
+ * return PyArray_DIMS(self) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __pyx_r = PyArray_DIMS(__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":263
+ *
+ * @property
+ * cdef inline npy_intp *shape(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns a pointer to the dimensions/shape of the array.
+ * The number of elements matches the number of dimensions of the array (ndim).
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271
+ *
+ * @property
+ * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns a pointer to the strides of the array.
+ * The number of elements matches the number of dimensions of the array (ndim).
+ */
+
+static CYTHON_INLINE npy_intp *__pyx_f_5numpy_7ndarray_7strides_strides(PyArrayObject *__pyx_v_self) {
+ npy_intp *__pyx_r;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":275
+ * The number of elements matches the number of dimensions of the array (ndim).
+ * """
+ * return PyArray_STRIDES(self) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __pyx_r = PyArray_STRIDES(__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":271
+ *
+ * @property
+ * cdef inline npy_intp *strides(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns a pointer to the strides of the array.
+ * The number of elements matches the number of dimensions of the array (ndim).
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278
+ *
+ * @property
+ * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns the total size (in number of elements) of the array.
+ * """
+ */
+
+static CYTHON_INLINE npy_intp __pyx_f_5numpy_7ndarray_4size_size(PyArrayObject *__pyx_v_self) {
+ npy_intp __pyx_r;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":281
+ * """Returns the total size (in number of elements) of the array.
+ * """
+ * return PyArray_SIZE(self) # <<<<<<<<<<<<<<
+ *
+ * @property
+ */
+ __pyx_r = PyArray_SIZE(__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":278
+ *
+ * @property
+ * cdef inline npy_intp size(self) nogil: # <<<<<<<<<<<<<<
+ * """Returns the total size (in number of elements) of the array.
+ * """
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284
+ *
+ * @property
+ * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<<
+ * """The pointer to the data buffer as a char*.
+ * This is provided for legacy reasons to avoid direct struct field access.
+ */
+
+static CYTHON_INLINE char *__pyx_f_5numpy_7ndarray_4data_data(PyArrayObject *__pyx_v_self) {
+ char *__pyx_r;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":290
+ * of `PyArray_DATA()` instead, which returns a 'void*'.
+ * """
+ * return PyArray_BYTES(self) # <<<<<<<<<<<<<<
+ *
+ * ctypedef unsigned char npy_bool
+ */
+ __pyx_r = PyArray_BYTES(__pyx_v_self);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":284
+ *
+ * @property
+ * cdef inline char* data(self) nogil: # <<<<<<<<<<<<<<
+ * """The pointer to the data buffer as a char*.
+ * This is provided for legacy reasons to avoid direct struct field access.
+ */
+
+ /* function exit code */
+ __pyx_L0:;
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776
+ * ctypedef npy_cdouble complex_t
+ *
+ * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(1, a)
+ *
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew1(PyObject *__pyx_v_a) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("PyArray_MultiIterNew1", 0);
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":777
+ *
+ * cdef inline object PyArray_MultiIterNew1(a):
+ * return PyArray_MultiIterNew(1, a) # <<<<<<<<<<<<<<
+ *
+ * cdef inline object PyArray_MultiIterNew2(a, b):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyArray_MultiIterNew(1, ((void *)__pyx_v_a)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 777, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":776
+ * ctypedef npy_cdouble complex_t
+ *
+ * cdef inline object PyArray_MultiIterNew1(a): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(1, a)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("numpy.PyArray_MultiIterNew1", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779
+ * return PyArray_MultiIterNew(1, a)
+ *
+ * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(2, a, b)
+ *
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew2(PyObject *__pyx_v_a, PyObject *__pyx_v_b) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("PyArray_MultiIterNew2", 0);
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":780
+ *
+ * cdef inline object PyArray_MultiIterNew2(a, b):
+ * return PyArray_MultiIterNew(2, a, b) # <<<<<<<<<<<<<<
+ *
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyArray_MultiIterNew(2, ((void *)__pyx_v_a), ((void *)__pyx_v_b)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 780, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":779
+ * return PyArray_MultiIterNew(1, a)
+ *
+ * cdef inline object PyArray_MultiIterNew2(a, b): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(2, a, b)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("numpy.PyArray_MultiIterNew2", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782
+ * return PyArray_MultiIterNew(2, a, b)
+ *
+ * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(3, a, b, c)
+ *
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew3(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("PyArray_MultiIterNew3", 0);
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":783
+ *
+ * cdef inline object PyArray_MultiIterNew3(a, b, c):
+ * return PyArray_MultiIterNew(3, a, b, c) # <<<<<<<<<<<<<<
+ *
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyArray_MultiIterNew(3, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 783, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":782
+ * return PyArray_MultiIterNew(2, a, b)
+ *
+ * cdef inline object PyArray_MultiIterNew3(a, b, c): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(3, a, b, c)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("numpy.PyArray_MultiIterNew3", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785
+ * return PyArray_MultiIterNew(3, a, b, c)
+ *
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(4, a, b, c, d)
+ *
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew4(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("PyArray_MultiIterNew4", 0);
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":786
+ *
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d):
+ * return PyArray_MultiIterNew(4, a, b, c, d) # <<<<<<<<<<<<<<
+ *
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyArray_MultiIterNew(4, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 786, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":785
+ * return PyArray_MultiIterNew(3, a, b, c)
+ *
+ * cdef inline object PyArray_MultiIterNew4(a, b, c, d): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(4, a, b, c, d)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("numpy.PyArray_MultiIterNew4", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788
+ * return PyArray_MultiIterNew(4, a, b, c, d)
+ *
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(5, a, b, c, d, e)
+ *
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyArray_MultiIterNew5(PyObject *__pyx_v_a, PyObject *__pyx_v_b, PyObject *__pyx_v_c, PyObject *__pyx_v_d, PyObject *__pyx_v_e) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ PyObject *__pyx_t_1 = NULL;
+ int __pyx_lineno = 0;
+ const char *__pyx_filename = NULL;
+ int __pyx_clineno = 0;
+ __Pyx_RefNannySetupContext("PyArray_MultiIterNew5", 0);
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":789
+ *
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e):
+ * return PyArray_MultiIterNew(5, a, b, c, d, e) # <<<<<<<<<<<<<<
+ *
+ * cdef inline tuple PyDataType_SHAPE(dtype d):
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __pyx_t_1 = PyArray_MultiIterNew(5, ((void *)__pyx_v_a), ((void *)__pyx_v_b), ((void *)__pyx_v_c), ((void *)__pyx_v_d), ((void *)__pyx_v_e)); if (unlikely(!__pyx_t_1)) __PYX_ERR(2, 789, __pyx_L1_error)
+ __Pyx_GOTREF(__pyx_t_1);
+ __pyx_r = __pyx_t_1;
+ __pyx_t_1 = 0;
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":788
+ * return PyArray_MultiIterNew(4, a, b, c, d)
+ *
+ * cdef inline object PyArray_MultiIterNew5(a, b, c, d, e): # <<<<<<<<<<<<<<
+ * return PyArray_MultiIterNew(5, a, b, c, d, e)
+ *
+ */
+
+ /* function exit code */
+ __pyx_L1_error:;
+ __Pyx_XDECREF(__pyx_t_1);
+ __Pyx_AddTraceback("numpy.PyArray_MultiIterNew5", __pyx_clineno, __pyx_lineno, __pyx_filename);
+ __pyx_r = 0;
+ __pyx_L0:;
+ __Pyx_XGIVEREF(__pyx_r);
+ __Pyx_RefNannyFinishContext();
+ return __pyx_r;
+}
+
+/* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":791
+ * return PyArray_MultiIterNew(5, a, b, c, d, e)
+ *
+ * cdef inline tuple PyDataType_SHAPE(dtype d): # <<<<<<<<<<<<<<
+ * if PyDataType_HASSUBARRAY(d):
+ * return d.subarray.shape
+ */
+
+static CYTHON_INLINE PyObject *__pyx_f_5numpy_PyDataType_SHAPE(PyArray_Descr *__pyx_v_d) {
+ PyObject *__pyx_r = NULL;
+ __Pyx_RefNannyDeclarations
+ int __pyx_t_1;
+ __Pyx_RefNannySetupContext("PyDataType_SHAPE", 0);
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":792
+ *
+ * cdef inline tuple PyDataType_SHAPE(dtype d):
+ * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<<
+ * return d.subarray.shape
+ * else:
+ */
+ __pyx_t_1 = PyDataType_HASSUBARRAY(__pyx_v_d);
+ if (__pyx_t_1) {
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":793
+ * cdef inline tuple PyDataType_SHAPE(dtype d):
+ * if PyDataType_HASSUBARRAY(d):
+ * return d.subarray.shape # <<<<<<<<<<<<<<
+ * else:
+ * return ()
+ */
+ __Pyx_XDECREF(__pyx_r);
+ __Pyx_INCREF(((PyObject*)__pyx_v_d->subarray->shape));
+ __pyx_r = ((PyObject*)__pyx_v_d->subarray->shape);
+ goto __pyx_L0;
+
+ /* "../anaconda3/envs/Matcha_repo/lib/python3.10/site-packages/numpy/__init__.cython-30.pxd":792
+ *
+ * cdef inline tuple PyDataType_SHAPE(dtype d):
+ * if PyDataType_HASSUBARRAY(d): # <<<<<<<<<<<<<<
+ * return