| 229 | |
| 230 | |
| 231 | def figure_table_manifest( |
| 232 | figure_decisions_wrapper: dict, |
| 233 | source_manifest: dict, |
| 234 | figure_plan: dict, |
| 235 | ) -> dict: |
| 236 | decisions = ( |
| 237 | figure_decisions_wrapper.get("decisions", []) |
| 238 | if isinstance(figure_decisions_wrapper, dict) |
| 239 | else [] |
| 240 | ) |
| 241 | if not isinstance(decisions, list): |
| 242 | decisions = [] |
| 243 | captions = ( |
| 244 | source_manifest.get("captions", {}) |
| 245 | if isinstance(source_manifest.get("captions"), dict) |
| 246 | else {} |
| 247 | ) |
| 248 | decisions_path = ( |
| 249 | figure_decisions_wrapper.get("decisions_path", "") |
| 250 | if isinstance(figure_decisions_wrapper, dict) |
| 251 | else "" |
| 252 | ) |
| 253 | planned_items = ( |
| 254 | len(figure_plan.get("figures", []) or []) if isinstance(figure_plan, dict) else 0 |
| 255 | ) |
| 256 | return { |
| 257 | "decisions_path": decisions_path, |
| 258 | "decisions": decisions, |
| 259 | "caption_counts": { |
| 260 | "figures": len(captions.get("figures", []) or []), |
| 261 | "tables": len(captions.get("tables", []) or []), |
| 262 | }, |
| 263 | "planned_items": planned_items, |
| 264 | "requires_full_decision_table": True, |
| 265 | } |
| 266 | |
| 267 | |
| 268 | def compact_writing_contract() -> dict: |