當前位置: 首頁>>代碼示例>>Python>>正文


Python handlers.QChemErrorHandler類代碼示例

本文整理匯總了Python中custodian.qchem.handlers.QChemErrorHandler的典型用法代碼示例。如果您正苦於以下問題:Python QChemErrorHandler類的具體用法?Python QChemErrorHandler怎麽用?Python QChemErrorHandler使用的例子?那麽, 這裏精選的類代碼示例或許可以為您提供幫助。


在下文中一共展示了QChemErrorHandler類的15個代碼示例,這些例子默認根據受歡迎程度排序。您可以為喜歡或者感覺有用的代碼點讚,您的評價將有助於係統推薦出更棒的Python代碼示例。

示例1: test_pcm_solvent_deprecated

 def test_pcm_solvent_deprecated(self):
     shutil.copyfile(
         os.path.join(test_dir, "pcm_solvent_deprecated.qcinp"),
         os.path.join(scr_dir, "pcm_solvent_deprecated.qcinp"),
     )
     shutil.copyfile(
         os.path.join(test_dir, "pcm_solvent_deprecated.qcout"),
         os.path.join(scr_dir, "pcm_solvent_deprecated.qcout"),
     )
     h = QChemErrorHandler(input_file="pcm_solvent_deprecated.qcinp", output_file="pcm_solvent_deprecated.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(
         d,
         {
             "errors": [
                 "Bad SCF convergence",
                 "Molecular charge is not found",
                 "No input text",
                 "pcm_solvent deprecated",
             ],
             "actions": ["use keyword solvent instead"],
         },
     )
     with open(os.path.join(test_dir, "pcm_solvent_deprecated_use_qc42_format.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "pcm_solvent_deprecated.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:30,代碼來源:test_handlers.py

示例2: test_no_error

 def test_no_error(self):
     shutil.copyfile(os.path.join(test_dir, "hf_no_error.inp"),
                     os.path.join(scr_dir, "hf_no_error.inp"))
     shutil.copyfile(os.path.join(test_dir, "hf_no_error.out"),
                     os.path.join(scr_dir, "hf_no_error.out"))
     h = QChemErrorHandler(input_file="hf_no_error.inp",
                           output_file="hf_no_error.out")
     has_error = h.check()
     self.assertFalse(has_error)
開發者ID:image-tester,項目名稱:custodian,代碼行數:9,代碼來源:test_handlers.py

示例3: test_nan_error

    def test_nan_error(self):
        shutil.copyfile(os.path.join(test_dir, "thiane_nan.inp"), os.path.join(scr_dir, "thiane_nan.inp"))
        shutil.copyfile(os.path.join(test_dir, "thiane_nan.out"), os.path.join(scr_dir, "thiane_nan.out"))
        h = QChemErrorHandler(input_file="thiane_nan.inp", output_file="thiane_nan.out")
        has_error = h.check()
        self.assertTrue(has_error)
        d = h.correct()
        self.assertEqual(d, {"errors": ["NAN values"], "actions": ["use tighter grid"]})
        with open(os.path.join(test_dir, "thiane_nan_dense_grid.inp")) as f:
            ref = [line.strip() for line in f.readlines()]
        with open(os.path.join(scr_dir, "thiane_nan.inp")) as f:
            ans = [line.strip() for line in f.readlines()]
        self.assertEqual(ref, ans)
        shutil.copyfile(
            os.path.join(test_dir, "thiane_nan_dense_grid.inp"), os.path.join(scr_dir, "thiane_nan_dense_grid.inp")
        )
        shutil.copyfile(os.path.join(test_dir, "thiane_nan.out"), os.path.join(scr_dir, "thiane_nan.out"))
        h = QChemErrorHandler(input_file="thiane_nan_dense_grid.inp", output_file="thiane_nan.out")
        has_error = h.check()
        self.assertTrue(has_error)
        d = h.correct()
        self.assertEqual(d, {"errors": ["NAN values"], "actions": None})

        shutil.copyfile(os.path.join(test_dir, "h2o_nan.qcinp"), os.path.join(scr_dir, "h2o_nan.qcinp"))
        shutil.copyfile(os.path.join(test_dir, "h2o_nan.qcout"), os.path.join(scr_dir, "h2o_nan.qcout"))
        h = QChemErrorHandler(input_file="h2o_nan.qcinp", output_file="h2o_nan.qcout")
        has_error = h.check()
        self.assertTrue(has_error)
        d = h.correct()
        self.assertEqual(d, {"errors": ["NAN values"], "actions": ["use tighter grid"]})
        with open(os.path.join(test_dir, "h2o_nan_dense_grid.qcinp")) as f:
            ref = [line.strip() for line in f.readlines()]
        with open(os.path.join(scr_dir, "h2o_nan.qcinp")) as f:
            ans = [line.strip() for line in f.readlines()]
        self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:35,代碼來源:test_handlers.py

示例4: test_scf_in_aimd_reset

 def test_scf_in_aimd_reset(self):
     shutil.copyfile(os.path.join(test_dir, "h2o_aimd.qcinp"), os.path.join(scr_dir, "h2o_aimd.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "h2o_aimd.qcout"), os.path.join(scr_dir, "h2o_aimd.qcout"))
     h = QChemErrorHandler(input_file="h2o_aimd.qcinp", output_file="h2o_aimd.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {"errors": ["Bad SCF convergence"], "actions": ["reset"]})
     with open(os.path.join(test_dir, "h2o_aimd_reset.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "h2o_aimd.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:13,代碼來源:test_handlers.py

示例5: test_ts_opt

 def test_ts_opt(self):
     shutil.copyfile(os.path.join(test_dir, "ts_cf3_leave.qcinp"), os.path.join(scr_dir, "ts_cf3_leave.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "ts_cf3_leave.qcout"), os.path.join(scr_dir, "ts_cf3_leave.qcout"))
     h = QChemErrorHandler(input_file="ts_cf3_leave.qcinp", output_file="ts_cf3_leave.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {"errors": ["Exit Code 134", "Geometry optimization failed"], "actions": ["increase_iter"]})
     with open(os.path.join(test_dir, "ts_cf3_leave_reset_first_step_mol.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "ts_cf3_leave.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:13,代碼來源:test_handlers.py

示例6: test_scf_reset

 def test_scf_reset(self):
     shutil.copyfile(os.path.join(test_dir, "hf_rca_tried_1.inp"), os.path.join(scr_dir, "hf_scf_reset.inp"))
     shutil.copyfile(os.path.join(test_dir, "hf_scf_reset.out"), os.path.join(scr_dir, "hf_scf_reset.out"))
     h = QChemErrorHandler(input_file="hf_scf_reset.inp", output_file="hf_scf_reset.out")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {"errors": ["Bad SCF convergence", "Geometry optimization failed"], "actions": ["reset"]})
     with open(os.path.join(test_dir, "hf_scf_reset.inp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "hf_scf_reset.inp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:13,代碼來源:test_handlers.py

示例7: test_unable_to_determine_lambda

 def test_unable_to_determine_lambda(self):
     shutil.copyfile(os.path.join(test_dir, "unable_to_determine_lambda_in_geom_opt.qcinp"),
                     os.path.join(scr_dir, "unable_to_determine_lambda_in_geom_opt.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "unable_to_determine_lambda_in_geom_opt.qcout"),
                     os.path.join(scr_dir, "unable_to_determine_lambda_in_geom_opt.qcout"))
     h = QChemErrorHandler(input_file="unable_to_determine_lambda_in_geom_opt.qcinp",
                           output_file="unable_to_determine_lambda_in_geom_opt.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {'errors': ['Geometry optimization failed',
                                     'Lamda Determination Failed'],
                          'actions': ['reset']})
     with open(os.path.join(test_dir, "unable_to_determine_lambda_in_geom_opt_reset.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "unable_to_determine_lambda_in_geom_opt.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:cnk118,項目名稱:custodian,代碼行數:18,代碼來源:test_handlers.py

示例8: test_exit_code_134

 def test_exit_code_134(self):
     shutil.copyfile(os.path.join(test_dir, "exit_code_134.qcinp"), os.path.join(scr_dir, "exit_code_134.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "exit_code_134.qcout"), os.path.join(scr_dir, "exit_code_134.qcout"))
     h = QChemErrorHandler(input_file="exit_code_134.qcinp", output_file="exit_code_134.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(
         d,
         {
             "errors": ["Bad SCF convergence", "Exit Code 134", "Molecular charge is not found"],
             "actions": ["use tight integral threshold"],
         },
     )
     with open(os.path.join(test_dir, "exit_code_134_tight_thresh.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "exit_code_134.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:19,代碼來源:test_handlers.py

示例9: test_no_input_text

 def test_no_input_text(self):
     shutil.copyfile(os.path.join(test_dir, "no_reading.qcinp"), os.path.join(scr_dir, "no_reading.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "no_reading.qcout"), os.path.join(scr_dir, "no_reading.qcout"))
     h = QChemErrorHandler(input_file="no_reading.qcinp", output_file="no_reading.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(
         d,
         {
             "errors": ["Bad SCF convergence", "Exit Code 134", "Molecular charge is not found", "No input text"],
             "actions": ["disable symmetry"],
         },
     )
     with open(os.path.join(test_dir, "no_reading_nosymm.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "no_reading.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:19,代碼來源:test_handlers.py

示例10: test_scf_fon

 def test_scf_fon(self):
     shutil.copyfile(os.path.join(test_dir, "hf_rca_hit_5.inp"), os.path.join(scr_dir, "hf_rca_hit_5.inp"))
     shutil.copyfile(os.path.join(test_dir, "hf_rca.out"), os.path.join(scr_dir, "hf_rca.out"))
     h = QChemErrorHandler(input_file="hf_rca_hit_5.inp", output_file="hf_rca.out")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(
         d,
         {
             "errors": ["Bad SCF convergence", "Geometry optimization failed", "Molecular charge is not found"],
             "actions": ["fon"],
         },
     )
     with open(os.path.join(test_dir, "hf_rca_hit_5_fon.inp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "hf_rca_hit_5.inp")) as f:
         ans = [line.strip() for line in f.readlines()]
     ans = self._revert_scf_fix_strategy_to_version(ans, fix_version="2.0")
     self.assertEqual(ref, ans)
開發者ID:dcossey014,項目名稱:custodian,代碼行數:20,代碼來源:test_handlers.py

示例11: test_not_enough_total_memory

 def test_not_enough_total_memory(self):
     old_jobid = os.environ.get("PBS_JOBID", None)
     os.environ["PBS_JOBID"] = "hopque473945"
     shutil.copyfile(
         os.path.join(test_dir, "not_enough_total_memory.qcinp"),
         os.path.join(scr_dir, "not_enough_total_memory.qcinp"),
     )
     shutil.copyfile(
         os.path.join(test_dir, "not_enough_total_memory.qcout"),
         os.path.join(scr_dir, "not_enough_total_memory.qcout"),
     )
     h = QChemErrorHandler(input_file="not_enough_total_memory.qcinp", output_file="not_enough_total_memory.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(
         d, {"errors": ["Exit Code 134", "Not Enough Total Memory"], "actions": ["Use 48 CPSCF segments"]}
     )
     with open(os.path.join(test_dir, "not_enough_total_memory_48_segments.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "not_enough_total_memory.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
     shutil.copyfile(
         os.path.join(test_dir, "not_enough_total_memory_48_segments.qcinp"),
         os.path.join(scr_dir, "not_enough_total_memory_48_segments.qcinp"),
     )
     shutil.copyfile(
         os.path.join(test_dir, "not_enough_total_memory.qcout"),
         os.path.join(scr_dir, "not_enough_total_memory.qcout"),
     )
     qchem_job = QchemJob(
         qchem_cmd=["qchem", "-np", "24"],
         alt_cmd={"openmp": ["qchem", "-seq", "-nt", "24"], "half_cpus": ["qchem", "-np", "12"]},
         input_file="not_enough_total_memory_48_segments.qcinp",
     )
     h = QChemErrorHandler(
         input_file="not_enough_total_memory_48_segments.qcinp",
         output_file="not_enough_total_memory.qcout",
         qchem_job=qchem_job,
     )
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(
         d,
         {
             "errors": ["Exit Code 134", "Not Enough Total Memory"],
             "actions": ["Use half CPUs and 60 CPSCF segments"],
         },
     )
     with open(os.path.join(test_dir, "not_enough_total_memory_60_segments.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "not_enough_total_memory_48_segments.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
     if old_jobid is None:
         os.environ.pop("PBS_JOBID")
     else:
         os.environ["PBS_JOBID"] = old_jobid
開發者ID:dcossey014,項目名稱:custodian,代碼行數:60,代碼來源:test_handlers.py

示例12: test_autoz_error

    def test_autoz_error(self):
        shutil.copyfile(os.path.join(test_dir, "qunino_vinyl.qcinp"),
                        os.path.join(scr_dir, "qunino_vinyl.qcinp"))
        shutil.copyfile(os.path.join(test_dir, "qunino_vinyl.qcout"),
                        os.path.join(scr_dir, "qunino_vinyl.qcout"))
        h = QChemErrorHandler(input_file="qunino_vinyl.qcinp",
                              output_file="qunino_vinyl.qcout")
        has_error = h.check()
        self.assertTrue(has_error)
        d = h.correct()
        self.assertEqual(d, {'errors': ['Bad SCF convergence',
                                        'Geometry optimization failed',
                                        'Molecular charge is not found',
                                        'autoz error'],
                             'actions': ['disable symmetry']})
        with open(os.path.join(test_dir, "qunino_vinyl_nosymm.qcinp")) as f:
            ref = [line.strip() for line in f.readlines()]
        with open(os.path.join(scr_dir, "qunino_vinyl.qcinp")) as f:
            ans = [line.strip() for line in f.readlines()]
        self.assertEqual(ref, ans)

        shutil.copyfile(os.path.join(test_dir, "qunino_vinyl_nosymm.qcinp"),
                        os.path.join(scr_dir, "qunino_vinyl_nosymm.qcinp"))
        shutil.copyfile(os.path.join(test_dir, "qunino_vinyl.qcout"),
                        os.path.join(scr_dir, "qunino_vinyl.qcout"))
        h = QChemErrorHandler(input_file="qunino_vinyl_nosymm.qcinp",
                              output_file="qunino_vinyl.qcout")
        has_error = h.check()
        self.assertTrue(has_error)
        d = h.correct()
        self.assertEqual(d, {'errors': ['Bad SCF convergence',
                                        'Geometry optimization failed',
                                        'Molecular charge is not found',
                                        'autoz error'],
                             'actions': None})
開發者ID:image-tester,項目名稱:custodian,代碼行數:35,代碼來源:test_handlers.py

示例13: test_freq_job_too_small

 def test_freq_job_too_small(self):
     shutil.copyfile(
         os.path.join(test_dir, "freq_seg_too_small.qcinp"), os.path.join(scr_dir, "freq_seg_too_small.qcinp")
     )
     shutil.copyfile(
         os.path.join(test_dir, "freq_seg_too_small.qcout"), os.path.join(scr_dir, "freq_seg_too_small.qcout")
     )
     h = QChemErrorHandler(input_file="freq_seg_too_small.qcinp", output_file="freq_seg_too_small.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {"errors": ["Exit Code 134", "Freq Job Too Small"], "actions": ["use 31 segment in CPSCF"]})
     with open(os.path.join(test_dir, "freq_seg_too_small_31_segments.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "freq_seg_too_small.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
     shutil.copyfile(
         os.path.join(test_dir, "freq_seg_too_small_31_segments.qcinp"),
         os.path.join(scr_dir, "freq_seg_too_small_31_segments.qcinp"),
     )
     shutil.copyfile(
         os.path.join(test_dir, "freq_seg_too_small.qcout"), os.path.join(scr_dir, "freq_seg_too_small.qcout")
     )
     h = QChemErrorHandler(input_file="freq_seg_too_small_31_segments.qcinp", output_file="freq_seg_too_small.qcout")
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {"errors": ["Exit Code 134", "Freq Job Too Small"], "actions": None})
開發者ID:dcossey014,項目名稱:custodian,代碼行數:29,代碼來源:test_handlers.py

示例14: test_json_serializable

 def test_json_serializable(self):
     q1 = QChemErrorHandler()
     str1 = json.dumps(q1, cls=MontyEncoder)
     q2 = json.loads(str1, cls=MontyDecoder)
     self.assertEqual(q1.as_dict(), q2.as_dict())
     shutil.copyfile(os.path.join(test_dir, "qunino_vinyl.qcinp"), os.path.join(scr_dir, "qunino_vinyl.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "qunino_vinyl.qcout"), os.path.join(scr_dir, "qunino_vinyl.qcout"))
     q3 = QChemErrorHandler(input_file="qunino_vinyl.qcinp", output_file="qunino_vinyl.qcout")
     q3.check()
     q3.correct()
     for od in q3.outdata:
         od.pop("input")
     str3 = json.dumps(q3, cls=MontyEncoder)
     q4 = json.loads(str3, cls=MontyDecoder)
     self.assertEqual(q3.as_dict(), q4.as_dict())
開發者ID:dcossey014,項目名稱:custodian,代碼行數:15,代碼來源:test_handlers.py

示例15: test_not_enough_total_memory

 def test_not_enough_total_memory(self):
     shutil.copyfile(os.path.join(test_dir, "not_enough_total_memory.qcinp"),
                     os.path.join(scr_dir, "not_enough_total_memory.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "not_enough_total_memory.qcout"),
                     os.path.join(scr_dir, "not_enough_total_memory.qcout"))
     qchem_job = QchemJob(qchem_cmd=shlex.split("qchem -np 24"),
                          input_file="not_enough_total_memory.qcinp",
                          output_file="not_enough_total_memory.qcout",
                          alt_cmd={"half_cpus": shlex.split("qchem -np 12"),
                                   "openmp": shlex.split("qchem -nt 24")},
                          total_physical_memory=120)
     h = QChemErrorHandler(input_file="not_enough_total_memory.qcinp",
                           output_file="not_enough_total_memory.qcout", qchem_job=qchem_job)
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {'errors': ['Exit Code 134',
                                     'Not Enough Total Memory'],
                          'actions': ['Use 48 CPSCF segments']})
     with open(os.path.join(test_dir, "not_enough_total_memory_48_segments.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "not_enough_total_memory.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
     shutil.copyfile(os.path.join(test_dir, "not_enough_total_memory_48_segments.qcinp"),
                     os.path.join(scr_dir, "not_enough_total_memory_48_segments.qcinp"))
     shutil.copyfile(os.path.join(test_dir, "not_enough_total_memory.qcout"),
                     os.path.join(scr_dir, "not_enough_total_memory.qcout"))
     qchem_job = QchemJob(qchem_cmd=["qchem", "-np", "24"],
                          alt_cmd={"openmp": ["qchem", "-seq", "-nt", "24"],
                                   "half_cpus": ["qchem", "-np", "12"]},
                          input_file="not_enough_total_memory_48_segments.qcinp")
     h = QChemErrorHandler(input_file="not_enough_total_memory_48_segments.qcinp",
                           output_file="not_enough_total_memory.qcout",
                           qchem_job=qchem_job)
     has_error = h.check()
     self.assertTrue(has_error)
     d = h.correct()
     self.assertEqual(d, {'errors': ['Exit Code 134',
                                     'Not Enough Total Memory'],
                          'actions': ['Use half CPUs and 60 CPSCF segments']})
     with open(os.path.join(test_dir, "not_enough_total_memory_60_segments.qcinp")) as f:
         ref = [line.strip() for line in f.readlines()]
     with open(os.path.join(scr_dir, "not_enough_total_memory_48_segments.qcinp")) as f:
         ans = [line.strip() for line in f.readlines()]
     self.assertEqual(ref, ans)
開發者ID:czhengsci,項目名稱:custodian,代碼行數:46,代碼來源:test_handlers.py


注:本文中的custodian.qchem.handlers.QChemErrorHandler類示例由純淨天空整理自Github/MSDocs等開源代碼及文檔管理平台,相關代碼片段篩選自各路編程大神貢獻的開源項目,源碼版權歸原作者所有,傳播和使用請參考對應項目的License;未經允許,請勿轉載。