code: def get_en_fund_symbols(qlib_data_path: [str, Path] = None) -> list:
      """get en fund symbols
  
      Returns
      -------
          fund symbols in China
      """
      global _EN_FUND_SYMBOLS  # pylint: disable=W0603
  
      @deco_retry
      def _get_eastmoney():
          url = "http://fund.eastmoney.com/js/fundcode_search.js"
          resp = requests.get(url, timeout=None)
          if resp.status_code != 200:
              raise ValueError("request error")
          try:
              _symbols = []
              for sub_data in re.findall(
                  r"[\[](.*?)[\]]",
                  resp.content.decode()
                  .split("= [")[-1]
                  .replace("];", ""),
              ):
                  data = sub_data.replace('"', "").replace("'", "")
                  # TODO: do we need other information, like fund_name from ['000001', 'HXCZHH', '华夏成长混合', '混合型', 'HUAXIACHENGZHANGHUNHE']
                  _symbols.append(data.split(",")[0])
          except Exception as e:
              logger.warning(f"request error: {e}")
              raise
          if len(_symbols) < 8000:
              raise ValueError("request error")
          return _symbols
  
      if _EN_FUND_SYMBOLS is None:
          _all_symbols = _get_eastmoney()
  
          _EN_FUND_SYMBOLS = sorted(set(_all_symbols))
  
      return _EN_FUND_SYMBOLS
  
imports: import re
  import copy
  import importlib
  import time
  import bisect
  import pickle
  import random
  import requests
  import functools
  from pathlib import Path
  from typing import Iterable, Tuple, List
  import numpy
  import pandas
  from lxml import etree
  from loguru import logger
  from yahooquery import Ticker
  from tqdm import tqdm
  from functools import partial
  from concurrent.futures import ProcessPoolExecutor
  from bs4 import BeautifulSoup
label_desc: Use image node_id 8 for calling a global function with example usage: get_en_fund_symbols(qlib_data_path) and returns: _EN_FUND_SYMBOLS, _symbols