fork download
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3.  
  4. # 设置中文字体
  5. plt.rcParams['font.sans-serif'] = ['SimHei']
  6. plt.rcParams['axes.unicode_minus'] = False
  7.  
  8.  
  9. class GreenAmmoniaAnalyzer:
  10. """绿电制氨系统分析器"""
  11.  
  12. def __init__(self):
  13. """初始化系统参数"""
  14. # 系统参数
  15. self.P_fixed = 20.75 # 固定负荷 (MW)
  16. self.P_base_con = 6 # 常规负荷基准 (MW)
  17. self.P_base_wind = 40 # 风电基准 (MW)
  18. self.P_base_pv = 64 # 光伏基准 (MW)
  19. self.M_daily = 36 # 日产量 (吨)
  20.  
  21. # 标幺值曲线 (24小时)
  22. self.p_con_pu = np.array([
  23. 0.2283, 0.1833, 0.1333, 0.1650, 0.1967, 0.2717,
  24. 0.4167, 0.5617, 0.6683, 0.7000, 0.6867, 0.6500,
  25. 0.5433, 0.4483, 0.6050, 0.6367, 0.6250, 0.5233,
  26. 0.4350, 0.3533, 0.3100, 0.2717, 0.2600, 0.2467
  27. ])
  28.  
  29. self.p_wind_pu = np.array([
  30. 0.2726, 0.3788, 0.3328, 0.3768, 0.4681, 0.2407,
  31. 0.5701, 0.4463, 0.3582, 0.2976, 0.1934, 0.2139,
  32. 0.3630, 0.1677, 0.2794, 0.2527, 0.1596, 0.1607,
  33. 0.1434, 0.0938, 0.0923, 0.1220, 0.0625, 0.0798
  34. ])
  35.  
  36. self.p_pv_pu = np.array([
  37. 0.00, 0.00, 0.00, 0.00, 0.00, 0.02,
  38. 0.12, 0.28, 0.45, 0.58, 0.67, 0.70,
  39. 0.72, 0.67, 0.58, 0.45, 0.28, 0.08,
  40. 0.00, 0.00, 0.00, 0.00, 0.00, 0.00
  41. ])
  42.  
  43. # 分时电价 (元/kWh)
  44. self.price_buy = np.array([0.3424]*7 + [0.6074]*3 + [0.8024]*5 +
  45. [0.6074]*3 + [0.8024]*3 + [0.6074]*2 + [0.3424])
  46.  
  47. # 计算结果存储
  48. self.results = {}
  49.  
  50. def calculate_power_balance(self):
  51. """计算功率平衡"""
  52. # 计算实际功率
  53. P_con = self.P_base_con * self.p_con_pu
  54. P_wind = self.P_base_wind * self.p_wind_pu
  55. P_pv = self.P_base_pv * self.p_pv_pu
  56.  
  57. P_ren = P_wind + P_pv
  58. P_load = P_con + self.P_fixed
  59.  
  60. delta = P_load - P_ren
  61. P_buy = np.maximum(delta, 0)
  62. P_sell = np.maximum(-delta, 0)
  63.  
  64. # 存储结果
  65. self.results.update({
  66. 'P_con': P_con, 'P_wind': P_wind, 'P_pv': P_pv,
  67. 'P_ren': P_ren, 'P_load': P_load,
  68. 'P_buy': P_buy, 'P_sell': P_sell
  69. })
  70.  
  71. return P_con, P_wind, P_pv, P_load, P_buy, P_sell
  72.  
  73. def calculate_energy_metrics(self):
  74. """计算电量指标"""
  75. P_buy = self.results['P_buy']
  76. P_sell = self.results['P_sell']
  77. P_load = self.results['P_load']
  78. P_ren = self.results['P_ren']
  79. P_wind = self.results['P_wind']
  80. P_pv = self.results['P_pv']
  81.  
  82. # 累计电量
  83. E_load = np.sum(P_load)
  84. E_ren = np.sum(P_ren)
  85. E_wind_total = np.sum(P_wind)
  86. E_pv_total = np.sum(P_pv)
  87. E_buy = np.sum(P_buy)
  88. E_sell = np.sum(P_sell)
  89.  
  90. # 计算指标
  91. lambda_self = (E_load - E_buy - E_sell) / E_ren * 100
  92. lambda_green = (E_ren - E_sell) / E_load * 100
  93. lambda_grid = E_sell / E_ren * 100
  94. lambda_self_intuitive = (E_ren - E_sell) / E_ren * 100
  95.  
  96. self.results.update({
  97. 'E_load': E_load, 'E_ren': E_ren,
  98. 'E_wind_total': E_wind_total, 'E_pv_total': E_pv_total,
  99. 'E_buy': E_buy, 'E_sell': E_sell,
  100. 'lambda_self': lambda_self, 'lambda_green': lambda_green,
  101. 'lambda_grid': lambda_grid, 'lambda_self_intuitive': lambda_self_intuitive
  102. })
  103.  
  104. return E_load, E_ren, E_buy, E_sell
  105.  
  106. def calculate_cost(self):
  107. """计算运行成本"""
  108. P_buy = self.results['P_buy']
  109. E_wind_total = self.results['E_wind_total']
  110. E_pv_total = self.results['E_pv_total']
  111. E_sell = self.results['E_sell']
  112.  
  113. # 成本计算
  114. cost_wind = E_wind_total * 1000 * 0.15 # 风电成本 0.15元/kWh
  115. cost_pv = E_pv_total * 1000 * 0.12 # 光伏成本 0.12元/kWh
  116. cost_buy = np.sum(P_buy * self.price_buy * 1000) # 购电成本
  117. income_sell = E_sell * 1000 * 0.3779 # 售电收入
  118. om_total = 24000 + 36000 + 36 # 运维总成本
  119.  
  120. total_cost = cost_wind + cost_pv + cost_buy - income_sell + om_total
  121. c_nh3 = total_cost / self.M_daily
  122.  
  123. self.results.update({
  124. 'cost_wind': cost_wind, 'cost_pv': cost_pv,
  125. 'cost_buy': cost_buy, 'income_sell': income_sell,
  126. 'om_total': om_total, 'total_cost': total_cost,
  127. 'c_nh3': c_nh3
  128. })
  129.  
  130. return total_cost, c_nh3
  131.  
  132. def print_power_balance(self):
  133. """打印功率平衡表"""
  134. P_con = self.results['P_con']
  135. P_wind = self.results['P_wind']
  136. P_pv = self.results['P_pv']
  137. P_load = self.results['P_load']
  138. P_buy = self.results['P_buy']
  139. P_sell = self.results['P_sell']
  140.  
  141. print("\n" + "="*70)
  142. print("表7.1 典型日逐时功率平衡(MW)")
  143. print("-"*70)
  144. print(f"{'时刻':<6} {'常规负荷':>10} {'风电':>10} {'光伏':>10} "
  145. f"{'总负荷':>10} {'购电':>10} {'售电':>10}")
  146. print("-"*70)
  147.  
  148. for t in range(24):
  149. print(f"{t:02d}:00 {P_con[t]:10.2f} {P_wind[t]:10.2f} "
  150. f"{P_pv[t]:10.2f} {P_load[t]:10.2f} "
  151. f"{P_buy[t]:10.2f} {P_sell[t]:10.2f}")
  152. print("="*70)
  153.  
  154. def print_energy_metrics(self):
  155. """打印电量指标"""
  156. print("\n表7.2 典型日电量")
  157. print("-"*50)
  158. print(f"总用电量 E_load: {self.results['E_load']:.2f} MWh")
  159. print(f"新能源发电量 E_ren: {self.results['E_ren']:.2f} MWh "
  160. f"(风 {self.results['E_wind_total']:.2f}, 光 {self.results['E_pv_total']:.2f})")
  161. print(f"网购电量 E_buy: {self.results['E_buy']:.2f} MWh")
  162. print(f"上网电量 E_sell: {self.results['E_sell']:.2f} MWh")
  163. print("-"*50)
  164.  
  165. def print_compliance(self):
  166. """打印达标判定"""
  167. print("\n表7.3 绿电直连指标及达标判定")
  168. print("-"*50)
  169.  
  170. metrics = [
  171. ('λ_self', self.results['lambda_self'], 60, '>'),
  172. ('λ_green', self.results['lambda_green'], 30, '>'),
  173. ('λ_grid', self.results['lambda_grid'], 20, '<')
  174. ]
  175.  
  176. for name, value, threshold, op in metrics:
  177. is_compliant = (value > threshold) if op == '>' else (value < threshold)
  178. status = "✓ 符合" if is_compliant else "✗ 不符合"
  179. print(f"{name}: {value:6.2f}% (阈值{op}{threshold}%) {status}")
  180.  
  181. print(f"\n提示:λ_self直观值 = {self.results['lambda_self_intuitive']:.2f}%")
  182. print("-"*50)
  183.  
  184. def print_cost_breakdown(self):
  185. """打印成本构成"""
  186. print("\n表7.4 吨氨运行成本构成")
  187. print("-"*50)
  188.  
  189. total = self.results['total_cost']
  190. wind_pv_cost = self.results['cost_wind'] + self.results['cost_pv']
  191.  
  192. items = [
  193. ('风光发电成本', wind_pv_cost),
  194. (' 风电', self.results['cost_wind']),
  195. (' 光伏', self.results['cost_pv']),
  196. ('网购电成本', self.results['cost_buy']),
  197. ('售电收入', -self.results['income_sell']),
  198. ('电解槽运维', 24000 + 36000),
  199. ('合成氨运维', 36)
  200. ]
  201.  
  202. for name, value in items:
  203. if name.startswith(' '): # 子项缩进显示
  204. print(f"{name}: {value:10.0f} 元")
  205. else:
  206. pct = value / total * 100 if value > 0 else -value / total * 100
  207. print(f"{name}: {value:10.0f} 元 ({pct:.1f}%)")
  208.  
  209. print("-"*50)
  210. print(f"总运行成本: {self.results['total_cost']:10.0f} 元")
  211. print(f"吨氨成本: {self.results['c_nh3']:10.0f} 元/吨")
  212. print("="*50)
  213.  
  214. def plot_power_balance(self):
  215. """绘制功率平衡曲线"""
  216. fig, ax1 = plt.subplots(figsize=(12, 5))
  217.  
  218. # 负荷侧
  219. ax1.stackplot(range(24),
  220. self.results['P_con'],
  221. [self.P_fixed] * 24,
  222. labels=['常规负荷', '制氢制氨固定负荷'],
  223. alpha=0.8)
  224. ax1.plot(range(24), self.results['P_load'], 'k-', lw=2, label='总负荷')
  225. ax1.set_ylabel('功率 (MW)', fontsize=12)
  226. ax1.set_xlabel('时刻 (h)', fontsize=12)
  227.  
  228. # 电源侧
  229. ax2 = ax1.twinx()
  230. ax2.stackplot(range(24),
  231. self.results['P_wind'],
  232. self.results['P_pv'],
  233. labels=['风电', '光伏'],
  234. alpha=0.8)
  235. ax2.plot(range(24), self.results['P_ren'], 'b--', lw=2, label='可再生总出力')
  236. ax2.set_ylabel('功率 (MW)', fontsize=12)
  237.  
  238. # 合并图例
  239. lines1, labels1 = ax1.get_legend_handles_labels()
  240. lines2, labels2 = ax2.get_legend_handles_labels()
  241. ax1.legend(lines1 + lines2, labels1 + labels2, loc='upper left', fontsize=10)
  242.  
  243. plt.title('典型日功率平衡曲线', fontsize=14, fontweight='bold')
  244. plt.tight_layout()
  245. plt.show()
  246.  
  247. def plot_purchase_sale(self):
  248. """绘制购售电曲线"""
  249. fig, ax = plt.subplots(figsize=(12, 4))
  250.  
  251. ax.bar(range(24), self.results['P_sell'],
  252. color='#2E8B57', label='售电(上网)', alpha=0.7)
  253. ax.bar(range(24), -self.results['P_buy'],
  254. color='#CD5C5C', label='购电(网购)', alpha=0.7)
  255. ax.axhline(0, color='black', linewidth=0.8)
  256.  
  257. ax.set_xlabel('时刻 (h)', fontsize=12)
  258. ax.set_ylabel('功率 (MW)', fontsize=12)
  259. ax.legend(loc='upper right', fontsize=10)
  260. ax.grid(True, alpha=0.3)
  261.  
  262. plt.title('典型日购售电功率曲线', fontsize=14, fontweight='bold')
  263. plt.tight_layout()
  264. plt.show()
  265.  
  266. def plot_compliance(self):
  267. """绘制达标情况图"""
  268. fig, ax = plt.subplots(figsize=(8, 5))
  269.  
  270. metrics = ['λ_self', 'λ_green', 'λ_grid']
  271. values = [self.results['lambda_self'],
  272. self.results['lambda_green'],
  273. self.results['lambda_grid']]
  274. thresholds = [60, 30, 20]
  275.  
  276. bars = ax.bar(metrics, values, color='steelblue', alpha=0.7)
  277.  
  278. for i, (bar, v, th) in enumerate(zip(bars, values, thresholds)):
  279. # 绘制阈值线
  280. ax.plot([i - 0.3, i + 0.3], [th, th], 'r--', lw=2, label='政策阈值' if i == 0 else '')
  281.  
  282. # 达标判定
  283. is_compliant = (v > th) if i < 2 else (v < th)
  284. color = 'green' if is_compliant else 'red'
  285. ax.text(i, v + 1, '✓' if is_compliant else '✗',
  286. ha='center', fontsize=18, color=color, fontweight='bold')
  287.  
  288. # 添加直觉值标注
  289. ax.text(0, self.results['lambda_self_intuitive'] + 2,
  290. f'直觉值: {self.results["lambda_self_intuitive"]:.1f}%',
  291. ha='center', fontsize=10, color='purple', style='italic')
  292.  
  293. ax.set_ylabel('比例 (%)', fontsize=12)
  294. ax.set_ylim(0, max(values + thresholds) * 1.15)
  295. ax.legend(['政策阈值'], loc='upper right', fontsize=10)
  296. ax.grid(True, alpha=0.3, axis='y')
  297.  
  298. plt.title('绿电直连指标达标情况', fontsize=14, fontweight='bold')
  299. plt.tight_layout()
  300. plt.show()
  301.  
  302. def plot_cost_pie(self):
  303. """绘制成本构成饼图"""
  304. fig, ax = plt.subplots(figsize=(7, 6))
  305.  
  306. wind_pv_cost = self.results['cost_wind'] + self.results['cost_pv']
  307. labels = [f'风光发电\n{wind_pv_cost:.0f}元',
  308. f'网购电\n{self.results["cost_buy"]:.0f}元',
  309. f'运维\n{self.results["om_total"]:.0f}元']
  310. sizes = [wind_pv_cost, self.results['cost_buy'], self.results['om_total']]
  311. colors = ['#4682B4', '#CD5C5C', '#3CB371']
  312. explode = (0, 0.05, 0)
  313.  
  314. wedges, texts, autotexts = ax.pie(sizes, explode=explode, labels=labels,
  315. colors=colors, autopct='%1.1f%%',
  316. startangle=90, textprops={'fontsize': 11})
  317.  
  318. # 美化百分比文字
  319. for autotext in autotexts:
  320. autotext.set_color('white')
  321. autotext.set_fontweight('bold')
  322.  
  323. plt.title('吨氨运行成本构成', fontsize=14, fontweight='bold', pad=20)
  324. plt.tight_layout()
  325. plt.show()
  326.  
  327. def run_analysis(self):
  328. """运行完整分析"""
  329. print("\n" + "="*70)
  330. print(" "*20 + "绿电制氨系统分析报告")
  331. print("="*70)
  332.  
  333. # 执行计算
  334. self.calculate_power_balance()
  335. self.calculate_energy_metrics()
  336. self.calculate_cost()
  337.  
  338. # 输出结果
  339. self.print_power_balance()
  340. self.print_energy_metrics()
  341. self.print_compliance()
  342. self.print_cost_breakdown()
  343.  
  344. # 绘制图表
  345. print("\n正在生成图表...")
  346. self.plot_power_balance()
  347. self.plot_purchase_sale()
  348. self.plot_compliance()
  349. self.plot_cost_pie()
  350.  
  351.  
  352. # 主程序入口
  353. if __name__ == "__main__":
  354. try:
  355. analyzer = GreenAmmoniaAnalyzer()
  356. analyzer.run_analysis()
  357. except Exception as e:
  358. print(f"程序运行出错: {e}")
  359. import traceback
  360. traceback.print_exc()
Success #stdin #stdout #stderr 3.2s 76636KB
stdin
Standard input is empty
stdout
======================================================================
                    绿电制氨系统分析报告
======================================================================

======================================================================
表7.1 典型日逐时功率平衡(MW)
----------------------------------------------------------------------
时刻           常规负荷         风电         光伏        总负荷         购电         售电
----------------------------------------------------------------------
00:00        1.37      10.90       0.00      22.12      11.22       0.00
01:00        1.10      15.15       0.00      21.85       6.70       0.00
02:00        0.80      13.31       0.00      21.55       8.24       0.00
03:00        0.99      15.07       0.00      21.74       6.67       0.00
04:00        1.18      18.72       0.00      21.93       3.21       0.00
05:00        1.63       9.63       1.28      22.38      11.47       0.00
06:00        2.50      22.80       7.68      23.25       0.00       7.23
07:00        3.37      17.85      17.92      24.12       0.00      11.65
08:00        4.01      14.33      28.80      24.76       0.00      18.37
09:00        4.20      11.90      37.12      24.95       0.00      24.07
10:00        4.12       7.74      42.88      24.87       0.00      25.75
11:00        3.90       8.56      44.80      24.65       0.00      28.71
12:00        3.26      14.52      46.08      24.01       0.00      36.59
13:00        2.69       6.71      42.88      23.44       0.00      26.15
14:00        3.63      11.18      37.12      24.38       0.00      23.92
15:00        3.82      10.11      28.80      24.57       0.00      14.34
16:00        3.75       6.38      17.92      24.50       0.20       0.00
17:00        3.14       6.43       5.12      23.89      12.34       0.00
18:00        2.61       5.74       0.00      23.36      17.62       0.00
19:00        2.12       3.75       0.00      22.87      19.12       0.00
20:00        1.86       3.69       0.00      22.61      18.92       0.00
21:00        1.63       4.88       0.00      22.38      17.50       0.00
22:00        1.56       2.50       0.00      22.31      19.81       0.00
23:00        1.48       3.19       0.00      22.23      19.04       0.00
======================================================================

表7.2 典型日电量
--------------------------------------------------
总用电量 E_load: 558.72 MWh
新能源发电量 E_ren: 603.45 MWh (风 245.05, 光 358.40)
网购电量 E_buy: 172.04 MWh
上网电量 E_sell: 216.77 MWh
--------------------------------------------------

表7.3 绿电直连指标及达标判定
--------------------------------------------------
λ_self:  28.16% (阈值>60%) ✗ 不符合
λ_green:  69.21% (阈值>30%) ✓ 符合
λ_grid:  35.92% (阈值<20%) ✗ 不符合

提示:λ_self直观值 = 64.08%
--------------------------------------------------

表7.4 吨氨运行成本构成
--------------------------------------------------
风光发电成本:      79765 元 (51.3%)
  风电:      36757 元
  光伏:      43008 元
网购电成本:      97721 元 (62.8%)
售电收入:     -81918 元 (52.6%)
电解槽运维:      60000 元 (38.6%)
合成氨运维:         36 元 (0.0%)
--------------------------------------------------
总运行成本:     155604 元
吨氨成本:       4322 元/吨
==================================================

正在生成图表...
stderr
Fontconfig error: No writable cache directories
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 26102 (\N{CJK UNIFIED IDEOGRAPH-65F6}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 21051 (\N{CJK UNIFIED IDEOGRAPH-523B}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 21151 (\N{CJK UNIFIED IDEOGRAPH-529F}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 29575 (\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 24120 (\N{CJK UNIFIED IDEOGRAPH-5E38}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 35268 (\N{CJK UNIFIED IDEOGRAPH-89C4}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 36127 (\N{CJK UNIFIED IDEOGRAPH-8D1F}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 33655 (\N{CJK UNIFIED IDEOGRAPH-8377}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 21046 (\N{CJK UNIFIED IDEOGRAPH-5236}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 27682 (\N{CJK UNIFIED IDEOGRAPH-6C22}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 27688 (\N{CJK UNIFIED IDEOGRAPH-6C28}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 22266 (\N{CJK UNIFIED IDEOGRAPH-56FA}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 23450 (\N{CJK UNIFIED IDEOGRAPH-5B9A}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 24635 (\N{CJK UNIFIED IDEOGRAPH-603B}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 39118 (\N{CJK UNIFIED IDEOGRAPH-98CE}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 30005 (\N{CJK UNIFIED IDEOGRAPH-7535}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 20809 (\N{CJK UNIFIED IDEOGRAPH-5149}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 20239 (\N{CJK UNIFIED IDEOGRAPH-4F0F}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 21487 (\N{CJK UNIFIED IDEOGRAPH-53EF}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 20877 (\N{CJK UNIFIED IDEOGRAPH-518D}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 29983 (\N{CJK UNIFIED IDEOGRAPH-751F}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 20986 (\N{CJK UNIFIED IDEOGRAPH-51FA}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 21147 (\N{CJK UNIFIED IDEOGRAPH-529B}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:244: UserWarning: Glyph 20856 (\N{CJK UNIFIED IDEOGRAPH-5178}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 22411 (\N{CJK UNIFIED IDEOGRAPH-578B}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 26085 (\N{CJK UNIFIED IDEOGRAPH-65E5}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 24179 (\N{CJK UNIFIED IDEOGRAPH-5E73}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 34913 (\N{CJK UNIFIED IDEOGRAPH-8861}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 26354 (\N{CJK UNIFIED IDEOGRAPH-66F2}) missing from font(s) DejaVu Sans.
./prog.py:244: UserWarning: Glyph 32447 (\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:263: UserWarning: Glyph 26102 (\N{CJK UNIFIED IDEOGRAPH-65F6}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 21051 (\N{CJK UNIFIED IDEOGRAPH-523B}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:263: UserWarning: Glyph 21151 (\N{CJK UNIFIED IDEOGRAPH-529F}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 29575 (\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:263: UserWarning: Glyph 20856 (\N{CJK UNIFIED IDEOGRAPH-5178}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 22411 (\N{CJK UNIFIED IDEOGRAPH-578B}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 26085 (\N{CJK UNIFIED IDEOGRAPH-65E5}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 36141 (\N{CJK UNIFIED IDEOGRAPH-8D2D}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 21806 (\N{CJK UNIFIED IDEOGRAPH-552E}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 30005 (\N{CJK UNIFIED IDEOGRAPH-7535}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 26354 (\N{CJK UNIFIED IDEOGRAPH-66F2}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 32447 (\N{CJK UNIFIED IDEOGRAPH-7EBF}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:263: UserWarning: Glyph 65288 (\N{FULLWIDTH LEFT PARENTHESIS}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 19978 (\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 32593 (\N{CJK UNIFIED IDEOGRAPH-7F51}) missing from font(s) DejaVu Sans.
./prog.py:263: UserWarning: Glyph 65289 (\N{FULLWIDTH RIGHT PARENTHESIS}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:299: UserWarning: Glyph 27604 (\N{CJK UNIFIED IDEOGRAPH-6BD4}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 20363 (\N{CJK UNIFIED IDEOGRAPH-4F8B}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:299: UserWarning: Glyph 32511 (\N{CJK UNIFIED IDEOGRAPH-7EFF}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 30005 (\N{CJK UNIFIED IDEOGRAPH-7535}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 30452 (\N{CJK UNIFIED IDEOGRAPH-76F4}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 36830 (\N{CJK UNIFIED IDEOGRAPH-8FDE}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 25351 (\N{CJK UNIFIED IDEOGRAPH-6307}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 26631 (\N{CJK UNIFIED IDEOGRAPH-6807}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 36798 (\N{CJK UNIFIED IDEOGRAPH-8FBE}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 24773 (\N{CJK UNIFIED IDEOGRAPH-60C5}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 20917 (\N{CJK UNIFIED IDEOGRAPH-51B5}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:299: UserWarning: Glyph 35273 (\N{CJK UNIFIED IDEOGRAPH-89C9}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 20540 (\N{CJK UNIFIED IDEOGRAPH-503C}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:299: UserWarning: Glyph 25919 (\N{CJK UNIFIED IDEOGRAPH-653F}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 31574 (\N{CJK UNIFIED IDEOGRAPH-7B56}) missing from font(s) DejaVu Sans.
./prog.py:299: UserWarning: Glyph 38408 (\N{CJK UNIFIED IDEOGRAPH-9608}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:324: UserWarning: Glyph 21544 (\N{CJK UNIFIED IDEOGRAPH-5428}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 27688 (\N{CJK UNIFIED IDEOGRAPH-6C28}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 36816 (\N{CJK UNIFIED IDEOGRAPH-8FD0}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 34892 (\N{CJK UNIFIED IDEOGRAPH-884C}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 25104 (\N{CJK UNIFIED IDEOGRAPH-6210}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 26412 (\N{CJK UNIFIED IDEOGRAPH-672C}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 26500 (\N{CJK UNIFIED IDEOGRAPH-6784}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:324: UserWarning: Glyph 39118 (\N{CJK UNIFIED IDEOGRAPH-98CE}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 20809 (\N{CJK UNIFIED IDEOGRAPH-5149}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 21457 (\N{CJK UNIFIED IDEOGRAPH-53D1}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 30005 (\N{CJK UNIFIED IDEOGRAPH-7535}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:324: UserWarning: Glyph 20803 (\N{CJK UNIFIED IDEOGRAPH-5143}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:324: UserWarning: Glyph 32593 (\N{CJK UNIFIED IDEOGRAPH-7F51}) missing from font(s) DejaVu Sans.
./prog.py:324: UserWarning: Glyph 36141 (\N{CJK UNIFIED IDEOGRAPH-8D2D}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
./prog.py:324: UserWarning: Glyph 32500 (\N{CJK UNIFIED IDEOGRAPH-7EF4}) missing from font(s) DejaVu Sans.
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei
findfont: Generic family 'sans-serif' not found because none of the following families were found: SimHei