(self, parameters: dict, ext: str)
| 37 | |
| 38 | class TestBoosterIO: |
| 39 | def run_model_json_io(self, parameters: dict, ext: str) -> None: |
| 40 | config = xgb.config.get_config() |
| 41 | assert config["verbosity"] == 1 |
| 42 | |
| 43 | if ext == "ubj" and tm.no_ubjson()["condition"]: |
| 44 | pytest.skip(tm.no_ubjson()["reason"]) |
| 45 | |
| 46 | loc = locale.getpreferredencoding(False) |
| 47 | model_path = "test_model_json_io." + ext |
| 48 | j_model = json_model(model_path, parameters) |
| 49 | assert isinstance(j_model["learner"], dict) |
| 50 | |
| 51 | bst = xgb.Booster(model_file=model_path) |
| 52 | |
| 53 | bst.save_model(fname=model_path) |
| 54 | if ext == "ubj": |
| 55 | import ubjson |
| 56 | |
| 57 | with open(model_path, "rb") as ubjfd: |
| 58 | j_model = ubjson.load(ubjfd) |
| 59 | else: |
| 60 | with open(model_path, "r") as fd: |
| 61 | j_model = json.load(fd) |
| 62 | |
| 63 | assert isinstance(j_model["learner"], dict) |
| 64 | |
| 65 | os.remove(model_path) |
| 66 | assert locale.getpreferredencoding(False) == loc |
| 67 | |
| 68 | json_raw = bst.save_raw(raw_format="json") |
| 69 | from_jraw = xgb.Booster() |
| 70 | from_jraw.load_model(json_raw) |
| 71 | |
| 72 | ubj_raw = bst.save_raw(raw_format="ubj") |
| 73 | from_ubjraw = xgb.Booster() |
| 74 | from_ubjraw.load_model(ubj_raw) |
| 75 | |
| 76 | raw_json = bst.save_raw(raw_format="json") |
| 77 | pretty = json.dumps(json.loads(raw_json), indent=2) + "\n\n" |
| 78 | bst.load_model(bytearray(pretty, encoding="ascii")) |
| 79 | |
| 80 | rng = np.random.default_rng() |
| 81 | X = rng.random(size=from_jraw.num_features() * 10).reshape( |
| 82 | (10, from_jraw.num_features()) |
| 83 | ) |
| 84 | predt_from_jraw = from_jraw.predict(xgb.DMatrix(X)) |
| 85 | predt_from_bst = bst.predict(xgb.DMatrix(X)) |
| 86 | np.testing.assert_allclose(predt_from_jraw, predt_from_bst) |
| 87 | |
| 88 | @pytest.mark.parametrize("ext", ["json", "ubj"]) |
| 89 | def test_model_json_io(self, ext: str) -> None: |
no test coverage detected