{"record":{"id":"88b0a62b773d751c","repo":"microsoft/qlib","slug":"lib-not-in-arctic","errorCode":null,"errorMessage":"lib {} not in arctic","messagePattern":"lib (.+?) not in arctic","errorType":"exception","errorClass":"ValueError","httpStatus":null,"severity":"error","filePath":"qlib/contrib/data/data.py","lineNumber":39,"sourceCode":"        self, uri=\"127.0.0.1\", retry_time=0, market_transaction_time_list=[(\"09:15\", \"11:30\"), (\"13:00\", \"15:00\")]\n    ):\n        super().__init__()\n        self.uri = uri\n        # TODO:\n        # retry connecting if error occurs\n        # does it real matters?\n        self.retry_time = retry_time\n        # NOTE: this is especially important for TResample operator\n        self.market_transaction_time_list = market_transaction_time_list\n\n    def feature(self, instrument, field, start_index, end_index, freq):\n        field = str(field)[1:]\n        with pymongo.MongoClient(self.uri) as client:\n            # TODO: this will result in frequently connecting the server and performance issue\n            arctic = Arctic(client)\n\n            if freq not in arctic.list_libraries():\n                raise ValueError(\"lib {} not in arctic\".format(freq))\n\n            if instrument not in arctic[freq].list_symbols():\n                # instruments does not exist\n                return pd.Series()\n            else:\n                df = arctic[freq].read(instrument, columns=[field], chunk_range=(start_index, end_index))\n                s = df[field]\n\n                if not s.empty:\n                    s = pd.concat(\n                        [\n                            s.between_time(time_tuple[0], time_tuple[1])\n                            for time_tuple in self.market_transaction_time_list\n                        ]\n                    )\n                return s\n","sourceCodeStart":21,"sourceCodeEnd":56,"githubUrl":"https://github.com/microsoft/qlib/blob/79633dd9506ea689e5400dea0197717b5b3d74b7/qlib/contrib/data/data.py#L21-L56","documentation":"The RemoteArcticProvider feature loader (qlib/contrib/data/data.py) reads data from an Arctic (MongoDB-backed) timeseries store, keyed by libraries named after frequency ('day', '1min', ...). If the Arctic instance has no library matching the requested freq, it raises ValueError('lib {} not in arctic'). The check is deliberately early so a missing dataset fails before symbol lookup.","triggerScenarios":"Configuring qlib with an arctic provider_uri ('arctic_host:port/lib') and requesting a frequency whose library was never created — e.g. requesting 1min data when only the 'day' library was ever initialized on the Arctic/MongoDB server.","commonSituations":"Production MongoDB migrations that rename or drop Arctic libraries; using a fresh Mongo instance without running the data-dump scripts; requesting 'tick'/'1min' freq against a day-only store.","solutions":["Verify what exists: arctic.list_libraries() against the same MongoDB URI, and request only those frequencies.","Create/populate the missing library with your data ingestion pipeline (initialize the Arctic lib for that freq and write instrument data).","Point provider_uri at the correct Mongo host/database where the library actually lives.","Catch the ValueError at startup and degrade to an available frequency rather than crashing mid-run."],"exampleFix":"# before\nD.features(instruments, fields, freq='1min')  # ValueError if '1min' lib absent\n# after\nfrom arctic import Arctic\nlibs = Arctic(self.uri).list_libraries()\nfreq = '1min' if '1min' in libs else 'day'\nD.features(instruments, fields, freq=freq)","handlingStrategy":"validation","validationCode":"from arctic import Arctic\nfrom pymongo import MongoClient\nwith MongoClient(uri) as mc:\n    libs = Arctic(mc).list_libraries()\nif freq not in libs:\n    raise ValueError(f'freq {freq} not in arctic; available: {libs}')","typeGuard":null,"tryCatchPattern":"try:\n    feats = D.features(insts, fields, freq=freq)\nexcept ValueError as e:\n    if 'not in arctic' in str(e):\n        feats = D.features(insts, fields, freq='day')  # degrade to available freq\n    else:\n        raise","preventionTips":["Check list_libraries() at provider startup and restrict requested frequencies to it.","Run data ingestion for every frequency you plan to query before starting backtests.","Monitor for Mongo migrations/renames that drop Arctic libraries."],"tags":["qlib","arctic","mongodb","data-provider"],"backgroundTag":null,"analyzedSha":"79633dd9506ea689e5400dea0197717b5b3d74b7","analyzedAt":"2026-08-15T07:01:27.511Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}