"""Append newly discovered papers to the plan without disturbing existing numbering. Usage: python add_papers.py """ import json import os import shutil import sys # explicit stems so existing numbered files are never renumbered ASSIGN = { '2310.16818': ('05-多模态', '08-DreamCraft3D-2310.16818', '多模态'), '2408.15664': ('07-架构', '04-Aux-Loss-Free-Load-Balancing-2408.15664', '架构'), '2411.07975': ('05-多模态', '07-JanusFlow-2411.07975', '多模态'), '2502.07316': ('02-代码模型', '03-CodeIO-2502.07316', '代码模型'), '2502.11089': ('07-架构', '03-NSA-原生稀疏注意力-2502.11089', '架构'), } def main(): plan_path, ver_path, base = sys.argv[1], sys.argv[2], sys.argv[3] plan = json.load(open(plan_path, encoding='utf-8')) have = {p['id'] for p in plan} extra = json.load(open(ver_path, encoding='utf-8')) added = [] for r in extra: if not r.get('ok') or r['id'] in have: continue d, stem, cat = ASSIGN[r['id']] outdir = os.path.join(base, d) os.makedirs(outdir, exist_ok=True) src = os.path.join(base, 'pdf', r['id'] + '.pdf') dst = os.path.join(outdir, stem + '.pdf') if os.path.exists(src) and not os.path.exists(dst): shutil.move(src, dst) plan.append({ 'id': r['id'], 'title': r.get('title', ''), 'authors': r.get('authors', ''), 'abstract': r.get('abstract', ''), 'dateline': r.get('dateline', ''), 'date': r.get('dateline', ''), 'comments': r.get('comments', ''), 'category': cat, 'dir': d, 'stem': stem, 'pdf_path': os.path.join(d, stem + '.pdf'), 'md_path': os.path.join(d, stem + '.md'), 'pdf_url': 'https://arxiv.org/pdf/' + r['id'], 'abs_url': 'https://arxiv.org/abs/' + r['id'], }) added.append((r['id'], d, stem, r.get('title', ''))) json.dump(plan, open(plan_path, 'w', encoding='utf-8'), ensure_ascii=False, indent=1) for a in added: print('added', a) print('total', len(plan)) if __name__ == '__main__': main()