diff --git a/.github/workflows/virtual-environments.yml b/.github/workflows/virtual-environments.yml
index 33b5ed2fdeae..c840aefd9b4e 100644
--- a/.github/workflows/virtual-environments.yml
+++ b/.github/workflows/virtual-environments.yml
@@ -48,10 +48,10 @@ jobs:
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.TensorflowProbabilityTest" --blame-hang-timeout 120seconds --blame-crash && \
# Run Hvplot Python Package Test
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.HvplotTest" --blame-hang-timeout 120seconds --blame-crash && \
- # Run Keras Python Package Test
- dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.KerasTest" --blame-hang-timeout 120seconds --blame-crash && \
# Run Transformers
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.Transformers" --blame-hang-timeout 120seconds --blame-crash && \
dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.XTransformers" --blame-hang-timeout 120seconds --blame-crash && \
# Run Shap
- dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.ShapTest" --blame-hang-timeout 120seconds --blame-crash
\ No newline at end of file
+ dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.ShapTest|KerasTest|PyvinecopulibTest" --blame-hang-timeout 120seconds --blame-crash && \
+ dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.Mlforecast" --blame-hang-timeout 120seconds --blame-crash && \
+ dotnet test ./Tests/bin/Release/QuantConnect.Tests.dll --filter "FullyQualifiedName=QuantConnect.Tests.Python.PythonPackagesTests.MlxtendTest|Thinc" --blame-hang-timeout 120seconds --blame-crash
diff --git a/DockerfileLeanFoundation b/DockerfileLeanFoundation
index fe49100a104a..adc007d75163 100644
--- a/DockerfileLeanFoundation
+++ b/DockerfileLeanFoundation
@@ -21,24 +21,26 @@ RUN apt-get update && apt-get -y install wget curl unzip \
&& apt-get clean && apt-get autoclean && apt-get autoremove --purge -y \
&& rm -rf /var/lib/apt/lists/*
-# Install dotnet 6 sdk & runtime
-RUN apt-get update && apt-get install -y dotnet-sdk-6.0 && \
+# Install dotnet sdk & runtime
+RUN add-apt-repository ppa:dotnet/backports && apt-get update && apt-get install -y dotnet-sdk-9.0 && \
apt-get clean && apt-get autoclean && apt-get autoremove --purge -y && rm -rf /var/lib/apt/lists/*
# Set PythonDLL variable for PythonNet
ENV PYTHONNET_PYDLL="/opt/miniconda3/lib/libpython3.11.so"
# Install miniconda
-ENV CONDA="Miniconda3-py311_24.1.2-0-Linux-x86_64.sh"
+ENV CONDA="Miniconda3-py311_24.9.2-0-Linux-x86_64.sh"
ENV PATH="/opt/miniconda3/bin:${PATH}"
RUN wget -q https://cdn.quantconnect.com/miniconda/${CONDA} && \
- bash ${CONDA} -b -p /opt/miniconda3 && rm -rf ${CONDA} && conda config --set solver classic
+ bash ${CONDA} -b -p /opt/miniconda3 && rm -rf ${CONDA} && \
+ conda config --set solver classic && \
+ conda config --set auto_update_conda false
# Install java runtime for h2o lib
-RUN wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.deb \
- && dpkg -i jdk-17_linux-x64_bin.deb \
- && update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17-oracle-x64/bin/java 1 \
- && rm jdk-17_linux-x64_bin.deb
+RUN wget https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-x64_bin.deb \
+ && dpkg -i jdk-17.0.12_linux-x64_bin.deb \
+ && update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17.0.12-oracle-x64/bin/java 1 \
+ && rm jdk-17.0.12_linux-x64_bin.deb
# Avoid pip install read timeouts
ENV PIP_DEFAULT_TIMEOUT=120
@@ -50,137 +52,140 @@ RUN pip install --no-cache-dir \
scipy==1.11.4 \
numpy==1.26.4 \
wrapt==1.16.0 \
- astropy==6.0.0 \
+ astropy==7.0.0 \
beautifulsoup4==4.12.3 \
dill==0.3.8 \
- jsonschema==4.21.1 \
- lxml==5.1.0 \
- msgpack==1.0.8 \
- numba==0.59.0 \
- xarray==2024.2.0 \
- plotly==5.20.0 \
- jupyterlab==4.1.5 \
- tensorflow==2.16.1 \
- docutils==0.20.1 \
+ jsonschema==4.23.0 \
+ lxml==5.3.0 \
+ msgpack==1.1.0 \
+ numba==0.59.1 \
+ xarray==2024.11.0 \
+ plotly==5.24.1 \
+ jupyterlab==4.3.2 \
+ ipywidgets==8.1.5 \
+ jupyterlab-widgets==3.0.13 \
+ tensorflow==2.18.0 \
+ docutils==0.21.2 \
cvxopt==1.3.2 \
- gensim==4.3.2 \
- keras==3.3.3 \
- lightgbm==4.3.0 \
- nltk==3.8.1 \
- graphviz==0.20.1 \
- cmdstanpy==1.2.1 \
+ gensim==4.3.3 \
+ keras==3.7.0 \
+ lightgbm==4.5.0 \
+ nltk==3.9.1 \
+ graphviz==0.20.3 \
+ cmdstanpy==1.2.4 \
copulae==0.7.9 \
- featuretools==1.30.0 \
- PuLP==2.8.0 \
- pymc==5.10.4 \
+ featuretools==1.31.0 \
+ PuLP==2.9.0 \
+ pymc==5.19.0 \
rauth==0.7.3 \
scikit-learn==1.4.2 \
- scikit-optimize==0.10.0 \
- aesara==2.9.3 \
+ scikit-optimize==0.10.2 \
+ aesara==2.9.4 \
tsfresh==0.20.2 \
tslearn==0.6.3 \
tweepy==4.14.0 \
- PyWavelets==1.5.0 \
- umap-learn==0.5.5 \
- fastai==2.7.14 \
- arch==6.3.0 \
- copulas==0.10.1 \
+ PyWavelets==1.7.0 \
+ umap-learn==0.5.7 \
+ fastai==2.7.18 \
+ arch==7.2.0 \
+ copulas==0.12.0 \
creme==0.6.1 \
cufflinks==0.17.3 \
gym==0.26.2 \
- ipywidgets==8.1.2 \
deap==1.4.1 \
pykalman==0.9.7 \
- cvxpy==1.4.2 \
- pyportfolioopt==1.5.5 \
+ cvxpy==1.6.0 \
+ pyportfolioopt==1.5.6 \
pmdarima==2.0.4 \
- pyro-ppl==1.9.0 \
- riskparityportfolio==0.5.1 \
+ pyro-ppl==1.9.1 \
+ riskparityportfolio==0.6.0 \
sklearn-json==0.1.0 \
- statsmodels==0.14.1 \
- QuantLib==1.33 \
- xgboost==2.0.3 \
- dtw-python==1.3.1 \
- gluonts==0.14.4 \
+ statsmodels==0.14.4 \
+ QuantLib==1.36 \
+ xgboost==2.1.3 \
+ dtw-python==1.5.3 \
+ gluonts==0.16.0 \
gplearn==0.4.2 \
- jax==0.4.25 \
- jaxlib==0.4.25 \
+ jax==0.4.35 \
+ jaxlib==0.4.35 \
keras-rl==0.4.2 \
- pennylane==0.35.1 \
- PennyLane-Lightning==0.35.1 \
- pennylane-qiskit==0.35.1 \
- qiskit==1.0.2 \
+ pennylane==0.39.0 \
+ PennyLane-Lightning==0.39.0 \
+ pennylane-qiskit==0.36.0 \
+ qiskit==1.2.4 \
neural-tangents==0.6.5 \
mplfinance==0.12.10b0 \
- hmmlearn==0.3.2 \
- catboost==1.2.3 \
+ hmmlearn==0.3.3 \
+ catboost==1.2.7 \
fastai2==0.0.30 \
- scikit-tda==1.0.0 \
+ scikit-tda==1.1.1 \
ta==0.11.0 \
seaborn==0.13.2 \
- optuna==3.5.0 \
- findiff==0.10.0 \
+ optuna==4.1.0 \
+ findiff==0.10.2 \
sktime==0.26.0 \
hyperopt==0.2.7 \
- bayesian-optimization==1.4.3 \
- pingouin==0.5.4 \
+ bayesian-optimization==2.0.0 \
+ pingouin==0.5.5 \
quantecon==0.7.2 \
matplotlib==3.7.5 \
sdeint==0.3.0 \
- pandas_market_calendars==4.4.0 \
+ pandas_market_calendars==4.4.2 \
dgl==2.1.0 \
ruptures==1.1.9 \
simpy==4.1.1 \
scikit-learn-extra==0.3.0 \
- ray==2.9.3 \
- "ray[tune]"==2.9.3 \
- "ray[rllib]"==2.9.3 \
- fastText==0.9.2 \
- h2o==3.46.0.1 \
- prophet==1.1.5 \
- torch==2.2.1 \
- torchvision==0.17.1 \
- ax-platform==0.3.7 \
- alphalens-reloaded==0.4.3 \
- pyfolio-reloaded==0.9.5 \
- altair==5.2.0 \
+ ray==2.40.0 \
+ "ray[tune]"==2.40.0 \
+ "ray[rllib]"==2.40.0 \
+ "ray[data]"==2.40.0 \
+ "ray[train]"==2.40.0 \
+ fastText==0.9.3 \
+ h2o==3.46.0.6 \
+ prophet==1.1.6 \
+ torch==2.5.1 \
+ torchvision==0.20.1 \
+ ax-platform==0.4.3 \
+ alphalens-reloaded==0.4.5 \
+ pyfolio-reloaded==0.9.8 \
+ altair==5.5.0 \
modin==0.26.1 \
- persim==0.3.5 \
- ripser==0.6.8 \
- pydmd==1.0.0 \
- spacy==3.7.4 \
+ persim==0.3.7 \
+ ripser==0.6.10 \
+ pydmd==2024.12.1 \
+ spacy==3.7.5 \
pandas-ta==0.3.14b \
- pytorch-ignite==0.4.13 \
- tensorly==0.8.1 \
- mlxtend==0.23.1 \
- shap==0.45.0 \
+ pytorch-ignite==0.5.1 \
+ tensorly==0.9.0 \
+ mlxtend==0.23.3 \
+ shap==0.46.0 \
lime==0.2.0.1 \
- tensorflow-probability==0.24.0 \
+ tensorflow-probability==0.25.0 \
mpmath==1.3.0 \
tensortrade==1.0.3 \
- polars==0.20.15 \
+ polars==1.16.0 \
stockstats==0.6.2 \
autokeras==2.0.0 \
- QuantStats==0.0.62 \
+ QuantStats==0.0.64 \
hurst==0.0.5 \
- numerapi==2.18.0 \
+ numerapi==2.19.1 \
pymdptoolbox==4.0-b3 \
- panel==1.3.8 \
- hvplot==0.9.2 \
- line-profiler==4.1.2 \
+ panel==1.5.4 \
+ hvplot==0.11.1 \
+ line-profiler==4.2.0 \
py-heat==0.0.6 \
py-heat-magic==0.0.2 \
- bokeh==3.3.4 \
- tensorflow-decision-forests==1.9.0 \
+ bokeh==3.6.2 \
+ tensorflow-decision-forests==1.11.0 \
river==0.21.0 \
- stumpy==1.12.0 \
+ stumpy==1.13.0 \
pyvinecopulib==0.6.5 \
- ijson==3.2.3 \
- jupyter-resource-usage==1.0.2 \
- injector==0.21.0 \
- openpyxl==3.1.2 \
+ ijson==3.3.0 \
+ jupyter-resource-usage==1.1.0 \
+ injector==0.22.0 \
+ openpyxl==3.1.5 \
xlrd==2.0.1 \
- mljar-supervised==1.1.6 \
+ mljar-supervised==1.1.9 \
dm-tree==0.1.8 \
lz4==4.3.3 \
ortools==9.9.3963 \
@@ -188,99 +193,117 @@ RUN pip install --no-cache-dir \
thundergbm==0.3.17 \
yellowbrick==1.5 \
livelossplot==0.5.5 \
- gymnasium==0.28.1 \
- interpret==0.5.1 \
- DoubleML==0.7.1 \
- jupyter-bokeh==4.0.0 \
- imbalanced-learn==0.12.0 \
- openai==1.30.4 \
- lazypredict-nightly==0.3.0 \
- darts==0.28.0 \
- fastparquet==2024.2.0 \
- tables==3.9.2 \
- dimod==0.12.14 \
- dwave-samplers==1.2.0 \
- python-statemachine==2.1.2 \
+ gymnasium==1.0.0 \
+ interpret==0.6.7 \
+ DoubleML==0.9.0 \
+ jupyter-bokeh==4.0.5 \
+ imbalanced-learn==0.12.4 \
+ openai==1.57.0 \
+ lazypredict==0.2.14a1 \
+ darts==0.31.0 \
+ fastparquet==2024.11.0 \
+ tables==3.10.1 \
+ dimod==0.12.17 \
+ dwave-samplers==1.3.0 \
+ python-statemachine==2.5.0 \
pymannkendall==1.4.3 \
- Pyomo==6.7.1 \
- gpflow==2.9.1 \
+ Pyomo==6.8.2 \
+ gpflow==2.9.2 \
pyarrow==15.0.1 \
- dwave-ocean-sdk==6.9.0 \
+ dwave-ocean-sdk==8.0.1 \
chardet==5.2.0 \
- stable-baselines3==2.3.2 \
- Shimmy==1.3.0 \
- pystan==3.9.0 \
+ stable-baselines3==2.4.0 \
+ Shimmy==2.0.0 \
+ pystan==3.10.0 \
FixedEffectModel==0.0.5 \
- transformers==4.41.2 \
- Rbeast==0.1.19 \
- langchain==0.1.12 \
- pomegranate==1.0.4 \
- MAPIE==0.8.3 \
- mlforecast==0.12.0 \
- functime==0.9.5 \
- tensorrt==8.6.1.post1 \
- x-transformers==1.30.4 \
- Werkzeug==3.0.1 \
+ transformers==4.46.3 \
+ Rbeast==0.1.23 \
+ langchain==0.2.17 \
+ pomegranate==1.1.1 \
+ MAPIE==0.9.1 \
+ mlforecast==0.15.1 \
+ tensorrt==10.7.0 \
+ x-transformers==1.42.24 \
+ Werkzeug==3.1.3 \
TPOT==0.12.2 \
- llama-index==0.10.19 \
- mlflow==2.11.1 \
+ llama-index==0.12.2 \
+ mlflow==2.18.0 \
ngboost==0.5.1 \
pycaret==3.3.2 \
- control==0.9.4 \
- pgmpy==0.1.25 \
+ control==0.10.1 \
+ pgmpy==0.1.26 \
mgarch==0.3.0 \
- jupyter-ai==2.12.0 \
+ jupyter-ai==2.28.2 \
keras-tcn==3.5.0 \
- neuralprophet[live]==0.8.0 \
- Riskfolio-Lib==6.0.0 \
+ neuralprophet[live]==0.9.0 \
+ Riskfolio-Lib==6.1.1 \
fuzzy-c-means==1.7.2 \
- EMD-signal==1.6.0 \
- dask[complete]==2024.3.1 \
- nolds==0.5.2 \
+ EMD-signal==1.6.4 \
+ dask[complete]==2024.9.0 \
+ nolds==0.6.1 \
feature-engine==1.6.2 \
pytorch-tabnet==4.1.0 \
- opencv-contrib-python-headless==4.9.0.80 \
- POT==0.9.3 \
+ opencv-contrib-python-headless==4.10.0.84 \
+ POT==0.9.5 \
alibi-detect==0.12.0 \
- datasets==2.17.1 \
+ datasets==2.21.0 \
scikeras==0.13.0 \
- accelerate==0.30.1 \
- peft==0.11.1 \
- FlagEmbedding==1.2.10 \
- contourpy==1.2.0
+ accelerate==0.34.2 \
+ peft==0.13.2 \
+ FlagEmbedding==1.2.11 \
+ contourpy==1.3.1 \
+ tensorboardX==2.6.2.2 \
+ scikit-image==0.22.0 \
+ scs==3.2.7 \
+ thinc==8.2.5 \
+ cesium==0.12.1 \
+ cvxportfolio==1.4.0 \
+ tsfel==0.1.9 \
+ ipympl==0.9.4 \
+ PyQt6==6.7.1 \
+ nixtla==0.6.4 \
+ tigramite==5.2.6.7 \
+ pytorch-forecasting==1.2.0 \
+ chronos-forecasting[training]==1.4.1 \
+ setuptools==73.0.1 \
+ tinygrad==0.10.0
+
+RUN conda install -c nvidia -y cuda-compiler=12.3.2 && conda clean -y --all
-RUN conda install -c conda-forge -y cudatoolkit=11.8.0 cupy=13.1.0 && conda install -c nvidia -y cuda-compiler=12.2.2 && conda clean -y --all
-ENV XLA_FLAGS=--xla_gpu_cuda_data_dir=/opt/miniconda3/
-ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cublas/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_cupti/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_nvrtc/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_runtime/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cudnn/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cufft/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/curand/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cusolver/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cusparse/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/nccl/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/nvjitlink/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/nvtx/lib/:/opt/miniconda3/pkgs/cudatoolkit-11.8.0-h6a678d5_0/lib/
ENV CUDA_MODULE_LOADING=LAZY
+ENV XLA_FLAGS=--xla_gpu_cuda_data_dir=/opt/miniconda3/
+ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cublas/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_cupti/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_nvrtc/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_runtime/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cudnn/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cufft/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/curand/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cusolver/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/cusparse/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/nccl/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/nvjitlink/lib/:/opt/miniconda3/lib/python3.11/site-packages/nvidia/nvtx/lib/
# reduces GPU memory usage
ENV PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True
-# mamba-ssm & causal requires nvidia capabilities to be installed. iisignature requires numpy to be already installed
-RUN pip install --no-cache-dir mamba-ssm==1.2.0.post1 causal-conv1d==1.2.0.post2 iisignature==0.24
+# required for numba to work correctly
+RUN ln -s /opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_runtime/lib/libcudart.so.12 /opt/miniconda3/lib/python3.11/site-packages/nvidia/cuda_runtime/lib/libcudart.so
+
+# iisignature requires numpy to be already installed. cupy requires cuda installed
+RUN pip install --no-cache-dir iisignature==0.24 cupy-cuda12x==13.3.0 mamba-ssm[causal-conv1d]==2.2.4
+
+# TF uses this version, pytorch a slightly older (9.1) but cuDNN is backwards compatible
+RUN pip install --no-cache-dir nvidia-cudnn-cu12==9.3.0.75
# Install dwave tool
RUN dwave install --all -y
# Install 'ipopt' solver for 'Pyomo'
-RUN conda install -c conda-forge ipopt==3.14.14 \
+RUN conda install -c conda-forge -y ipopt==3.14.16 coincbc==2.10.12 openmpi=5.0.6 \
&& conda clean -y --all
# Install spacy models
RUN python -m spacy download en_core_web_md && python -m spacy download en_core_web_sm
-RUN conda install -y -c conda-forge \
- openmpi=5.0.2 \
- && conda clean -y --all
-
# Install PyTorch Geometric
RUN TORCH=$(python -c "import torch; print(torch.__version__)") && \
CUDA=$(python -c "import torch; print('cu' + torch.version.cuda.replace('.', ''))") && \
pip install --no-cache-dir -f https://pytorch-geometric.com/whl/torch-${TORCH}+${CUDA}.html \
- torch-scatter==2.1.2 torch-sparse==0.6.18 torch-cluster==1.6.3 torch-spline-conv==1.2.2 torch-geometric==2.5.1
+ torch-scatter==2.1.2 torch-sparse==0.6.18 torch-cluster==1.6.3 torch-spline-conv==1.2.2 torch-geometric==2.6.1
# Install nltk data
RUN python -m nltk.downloader -d /usr/share/nltk_data punkt && \
+ python -m nltk.downloader -d /usr/share/nltk_data punkt_tab && \
python -m nltk.downloader -d /usr/share/nltk_data vader_lexicon && \
python -m nltk.downloader -d /usr/share/nltk_data stopwords && \
python -m nltk.downloader -d /usr/share/nltk_data wordnet
@@ -300,19 +323,13 @@ RUN wget -q https://cdn.quantconnect.com/ta-lib/ta-lib-0.4.0-src.tar.gz && \
tar -zxvf ta-lib-0.4.0-src.tar.gz && cd ta-lib && \
./configure --prefix=/usr && make && make install && \
cd .. && rm -rf ta-lib && rm ta-lib-0.4.0-src.tar.gz && \
- pip install --no-cache-dir TA-Lib==0.4.28
-
-# Install uni2ts. We manually copy the 'cli' folder which holds the fine tuning tools
-RUN wget -q https://cdn.quantconnect.com/uni2ts/uni2ts-main-ffe78db.zip && \
- unzip -q uni2ts-main-ffe78db.zip && cd uni2ts-main && \
- pip install . && cp -r cli /opt/miniconda3/lib/python3.11/site-packages/uni2ts/ && \
- cd .. && rm -rf uni2ts-main && rm uni2ts-main-ffe78db.zip
+ pip install --no-cache-dir TA-Lib==0.5.1
-# Install chronos-forecasting. We manually copy the 'scripts' folder which holds the fine tuning tools
-RUN wget -q https://cdn.quantconnect.com/chronos-forecasting/chronos-forecasting-main-b0bdbd9.zip && \
- unzip -q chronos-forecasting-main-b0bdbd9.zip && cd chronos-forecasting-main && \
- pip install ".[training]" && cp -r scripts /opt/miniconda3/lib/python3.11/site-packages/chronos/ && \
- cd .. && rm -rf chronos-forecasting-main && rm chronos-forecasting-main-b0bdbd9.zip
+# chronos-forecasting we manually copy the 'scripts' folder which holds the fine tuning tools
+RUN wget -q https://cdn.quantconnect.com/chronos-forecasting/chronos-forecasting-main-133761a.zip && \
+ unzip -q chronos-forecasting-main-133761a.zip && cd chronos-forecasting-main && \
+ cp -r scripts /opt/miniconda3/lib/python3.11/site-packages/chronos/ && \
+ cd .. && rm -rf chronos-forecasting-main && rm chronos-forecasting-main-133761a.zip
RUN echo "{\"argv\":[\"python\",\"-m\",\"ipykernel_launcher\",\"-f\",\"{connection_file}\"],\"display_name\":\"Foundation-Py-Default\",\"language\":\"python\",\"metadata\":{\"debugger\":true}}" > /opt/miniconda3/share/jupyter/kernels/python3/kernel.json
@@ -331,7 +348,10 @@ RUN mkdir -p /root/ibgateway && \
./ibgateway-stable-standalone-linux-x64.v10.19.2a.sh -q -dir /root/ibgateway && \
rm ibgateway-stable-standalone-linux-x64.v10.19.2a.sh
+RUN apt-get update && apt-get install -y dotnet-sdk-6.0 && \
+ apt-get clean && apt-get autoclean && apt-get autoremove --purge -y && rm -rf /var/lib/apt/lists/*
+
# label definitions
-LABEL strict_python_version=3.11.7
+LABEL strict_python_version=3.11.11
LABEL python_version=3.11
-LABEL target_framework=net6.0
\ No newline at end of file
+LABEL target_framework=net9.0
\ No newline at end of file
diff --git a/DockerfileLeanFoundationARM b/DockerfileLeanFoundationARM
index d6c9337f076c..c76aee58201f 100644
--- a/DockerfileLeanFoundationARM
+++ b/DockerfileLeanFoundationARM
@@ -19,12 +19,12 @@ RUN add-apt-repository ppa:ubuntu-toolchain-r/test && apt-get update \
&& apt-get clean && apt-get autoclean && apt-get autoremove --purge -y \
&& rm -rf /var/lib/apt/lists/*
-# Install dotnet 6 sdk & runtime
+# Install dotnet 9 sdk & runtime
# The .deb packages don't support ARM, the install script does
ENV PATH="/root/.dotnet:${PATH}"
RUN wget https://dot.net/v1/dotnet-install.sh && \
chmod 777 dotnet-install.sh && \
- ./dotnet-install.sh -c 6.0 && \
+ ./dotnet-install.sh -c 9.0 && \
rm dotnet-install.sh
ENV DOTNET_ROOT="/root/.dotnet"
@@ -32,16 +32,16 @@ ENV DOTNET_ROOT="/root/.dotnet"
ENV PYTHONNET_PYDLL="/opt/miniconda3/lib/libpython3.11.so"
# Install miniconda
-ENV CONDA="Miniconda3-py311_24.1.2-0-Linux-aarch64.sh"
+ENV CONDA="Miniconda3-py311_24.9.2-0-Linux-aarch64.sh"
ENV PATH="/opt/miniconda3/bin:${PATH}"
RUN wget -q https://cdn.quantconnect.com/miniconda/${CONDA} && \
bash ${CONDA} -b -p /opt/miniconda3 && rm -rf ${CONDA}
# Install java runtime for h2o lib
-RUN apt-get update && apt-get install -y alien dpkg-dev debhelper build-essential && wget https://download.oracle.com/java/17/latest/jdk-17_linux-aarch64_bin.rpm \
- && alien -i jdk-17_linux-aarch64_bin.rpm \
- && update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17-oracle-aarch64/bin/java 1 \
- && rm jdk-17_linux-aarch64_bin.rpm
+RUN apt-get update && apt-get install -y alien dpkg-dev debhelper build-essential && wget https://download.oracle.com/java/17/archive/jdk-17.0.12_linux-aarch64_bin.rpm \
+ && alien -i jdk-17.0.12_linux-aarch64_bin.rpm \
+ && update-alternatives --install /usr/bin/java java /usr/lib/jvm/jdk-17.0.12-oracle-aarch64/bin/java 1 \
+ && rm jdk-17.0.12_linux-aarch64_bin.rpm
# Avoid pip install read timeouts
ENV PIP_DEFAULT_TIMEOUT=120
@@ -60,116 +60,119 @@ RUN pip install --no-cache-dir \
scipy==1.11.4 \
numpy==1.26.4 \
wrapt==1.16.0 \
- astropy==6.0.0 \
+ astropy==7.0.0 \
beautifulsoup4==4.12.3 \
dill==0.3.8 \
- jsonschema==4.21.1 \
- lxml==5.1.0 \
- msgpack==1.0.8 \
- numba==0.59.0 \
- xarray==2024.2.0 \
- plotly==5.20.0 \
- jupyterlab==4.1.5 \
- tensorflow==2.16.1 \
- docutils==0.20.1 \
- gensim==4.3.2 \
- keras==3.3.3 \
- lightgbm==4.3.0 \
- nltk==3.8.1 \
- graphviz==0.20.1 \
- cmdstanpy==1.2.1 \
+ jsonschema==4.23.0 \
+ lxml==5.3.0 \
+ msgpack==1.1.0 \
+ numba==0.59.1 \
+ xarray==2024.11.0 \
+ plotly==5.24.1 \
+ jupyterlab==4.3.2 \
+ ipywidgets==8.1.5 \
+ jupyterlab-widgets==3.0.13 \
+ tensorflow==2.18.0 \
+ docutils==0.21.2 \
+ gensim==4.3.3 \
+ keras==3.7.0 \
+ lightgbm==4.5.0 \
+ nltk==3.9.1 \
+ graphviz==0.20.3 \
+ cmdstanpy==1.2.4 \
copulae==0.7.9 \
- featuretools==1.30.0 \
- PuLP==2.8.0 \
- pymc==5.10.4 \
+ featuretools==1.31.0 \
+ PuLP==2.9.0 \
+ pymc==5.19.0 \
rauth==0.7.3 \
scikit-learn==1.4.2 \
- scikit-optimize==0.10.0 \
- aesara==2.9.3 \
+ scikit-optimize==0.10.2 \
+ aesara==2.9.4 \
tsfresh==0.20.2 \
tslearn==0.6.3 \
tweepy==4.14.0 \
- PyWavelets==1.5.0 \
- umap-learn==0.5.5 \
- fastai==2.7.14 \
- arch==6.3.0 \
- copulas==0.10.1 \
+ PyWavelets==1.7.0 \
+ umap-learn==0.5.7 \
+ fastai==2.7.18 \
+ arch==7.2.0 \
+ copulas==0.12.0 \
cufflinks==0.17.3 \
gym==0.26.2 \
- ipywidgets==8.1.2 \
deap==1.4.1 \
pykalman==0.9.7 \
- cvxpy==1.4.2 \
- pyro-ppl==1.9.0 \
+ cvxpy==1.6.0 \
+ pyro-ppl==1.9.1 \
sklearn-json==0.1.0 \
- dtw-python==1.3.1 \
- gluonts==0.14.4 \
+ dtw-python==1.5.3 \
+ gluonts==0.16.0 \
gplearn==0.4.2 \
- jax==0.4.25 \
- pennylane==0.35.1 \
- PennyLane-Lightning==0.35.1 \
- pennylane-qiskit==0.35.1 \
+ jax==0.4.35 \
+ pennylane==0.39.0 \
+ PennyLane-Lightning==0.39.0 \
+ pennylane-qiskit==0.36.0 \
mplfinance==0.12.10b0 \
- hmmlearn==0.3.2 \
+ hmmlearn==0.3.3 \
ta==0.11.0 \
seaborn==0.13.2 \
- optuna==3.5.0 \
- findiff==0.10.0 \
+ optuna==4.1.0 \
+ findiff==0.10.2 \
sktime==0.26.0 \
hyperopt==0.2.7 \
- bayesian-optimization==1.4.3 \
+ bayesian-optimization==2.0.0 \
matplotlib==3.7.5 \
sdeint==0.3.0 \
- pandas_market_calendars==4.4.0 \
+ pandas_market_calendars==4.4.2 \
ruptures==1.1.9 \
simpy==4.1.1 \
scikit-learn-extra==0.3.0 \
- ray==2.9.3 \
- "ray[tune]"==2.9.3 \
- "ray[rllib]"==2.9.3 \
- fastText==0.9.2 \
- h2o==3.46.0.1 \
- prophet==1.1.5 \
- Riskfolio-Lib==6.0.0 \
- torch==2.2.1 \
- torchvision==0.17.1 \
- ax-platform==0.3.7 \
- alphalens-reloaded==0.4.3 \
- pyfolio-reloaded==0.9.5 \
- altair==5.2.0 \
+ ray==2.40.0 \
+ "ray[tune]"==2.40.0 \
+ "ray[rllib]"==2.40.0 \
+ "ray[data]"==2.40.0 \
+ "ray[train]"==2.40.0 \
+ fastText==0.9.3 \
+ h2o==3.46.0.6 \
+ prophet==1.1.6 \
+ Riskfolio-Lib==6.1.1 \
+ torch==2.5.1 \
+ torchvision==0.20.1 \
+ ax-platform==0.4.3 \
+ alphalens-reloaded==0.4.5 \
+ pyfolio-reloaded==0.9.8 \
+ altair==5.5.0 \
modin==0.26.1 \
- persim==0.3.5 \
- ripser==0.6.8 \
- pydmd==1.0.0 \
- EMD-signal==1.6.0 \
- spacy==3.7.4 \
+ persim==0.3.7 \
+ ripser==0.6.10 \
+ pydmd==2024.12.1 \
+ EMD-signal==1.6.4 \
+ spacy==3.7.5 \
pandas-ta==0.3.14b \
- pytorch-ignite==0.4.13 \
- tensorly==0.8.1 \
- mlxtend==0.23.1 \
- shap==0.45.0 \
+ pytorch-ignite==0.5.1 \
+ tensorly==0.9.0 \
+ mlxtend==0.23.3 \
+ shap==0.46.0 \
lime==0.2.0.1 \
mpmath==1.3.0 \
- polars==0.20.15 \
+ polars==1.16.0 \
stockstats==0.6.2 \
- QuantStats==0.0.62 \
+ QuantStats==0.0.64 \
hurst==0.0.5 \
- numerapi==2.18.0 \
+ numerapi==2.19.1 \
pymdptoolbox==4.0-b3 \
- panel==1.3.8 \
- hvplot==0.9.2 \
+ panel==1.5.4 \
+ hvplot==0.11.1 \
py-heat==0.0.6 \
py-heat-magic==0.0.2 \
- bokeh==3.3.4 \
+ bokeh==3.6.2 \
river==0.21.0 \
- stumpy==1.12.0 \
+ stumpy==1.13.0 \
pyvinecopulib==0.6.5 \
- ijson==3.2.3 \
- jupyter-resource-usage==1.0.2 \
- injector==0.21.0 \
- openpyxl==3.1.2 \
+ ijson==3.3.0 \
+ jupyter-resource-usage==1.1.0 \
+ injector==0.22.0 \
+ openpyxl==3.1.5 \
xlrd==2.0.1 \
- mljar-supervised==1.1.6 \
+ mljar-supervised==1.1.9 \
dm-tree==0.1.8 \
lz4==4.3.3 \
ortools==9.9.3963 \
@@ -177,51 +180,50 @@ RUN pip install --no-cache-dir \
thundergbm==0.3.17 \
yellowbrick==1.5 \
livelossplot==0.5.5 \
- gymnasium==0.28.1 \
- interpret==0.5.1 \
- DoubleML==0.7.1 \
- jupyter-bokeh==4.0.0 \
- imbalanced-learn==0.12.0 \
- openai==1.30.4 \
- lazypredict-nightly==0.3.0 \
- darts==0.28.0 \
- fastparquet==2024.2.0 \
- tables==3.9.2 \
- dimod==0.12.14 \
- dwave-samplers==1.2.0 \
- python-statemachine==2.1.2 \
+ gymnasium==1.0.0 \
+ interpret==0.6.7 \
+ DoubleML==0.9.0 \
+ jupyter-bokeh==4.0.5 \
+ imbalanced-learn==0.12.4 \
+ openai==1.57.0 \
+ lazypredict==0.2.14a1 \
+ darts==0.31.0 \
+ fastparquet==2024.11.0 \
+ tables==3.10.1 \
+ dimod==0.12.17 \
+ dwave-samplers==1.3.0 \
+ python-statemachine==2.5.0 \
pymannkendall==1.4.3 \
- Pyomo==6.7.1 \
- gpflow==2.9.1 \
+ Pyomo==6.8.2 \
+ gpflow==2.9.2 \
pyarrow==15.0.1 \
- dwave-ocean-sdk==6.9.0 \
+ dwave-ocean-sdk==8.0.1 \
chardet==5.2.0 \
- stable-baselines3==2.3.2 \
- Shimmy==1.3.0 \
+ stable-baselines3==2.4.0 \
+ Shimmy==2.0.0 \
FixedEffectModel==0.0.5 \
- transformers==4.38.2 \
- langchain==0.1.12 \
- pomegranate==1.0.4 \
- MAPIE==0.8.3 \
- mlforecast==0.12.0 \
- x-transformers==1.27.19 \
- Werkzeug==3.0.1 \
- h5py==3.10.0 \
- nolds==0.5.2 \
+ transformers==4.46.3 \
+ langchain==0.2.17 \
+ pomegranate==1.1.1 \
+ MAPIE==0.9.1 \
+ mlforecast==0.15.1 \
+ x-transformers==1.42.24 \
+ Werkzeug==3.1.3 \
+ nolds==0.6.1 \
feature-engine==1.6.2 \
pytorch-tabnet==4.1.0 \
- opencv-contrib-python-headless==4.9.0.80 \
- POT==0.9.3 \
+ opencv-contrib-python-headless==4.10.0.84 \
+ POT==0.9.5 \
alibi-detect==0.12.0 \
- datasets==2.17.1 \
+ datasets==2.21.0 \
scikeras==0.13.0 \
- contourpy==1.2.0
+ contourpy==1.3.1
# Install dwave tool
RUN dwave install --all -y
# Install 'ipopt' solver for 'Pyomo'
-RUN conda install -c conda-forge ipopt==3.14.14 \
+RUN conda install -c conda-forge ipopt==3.14.16 \
&& conda clean -y --all
# We install need to install separately else fails to find numpy
@@ -231,11 +233,12 @@ RUN pip install --no-cache-dir iisignature==0.24
RUN python -m spacy download en_core_web_md && python -m spacy download en_core_web_sm
RUN conda config --set solver classic && conda install -y -c conda-forge \
- openmpi=5.0.2 \
+ openmpi=5.0.6 \
&& conda clean -y --all
# Install nltk data
RUN python -m nltk.downloader -d /usr/share/nltk_data punkt && \
+ python -m nltk.downloader -d /usr/share/nltk_data punkt_tab && \
python -m nltk.downloader -d /usr/share/nltk_data vader_lexicon && \
python -m nltk.downloader -d /usr/share/nltk_data stopwords && \
python -m nltk.downloader -d /usr/share/nltk_data wordnet
@@ -270,7 +273,12 @@ RUN apt-get update && apt install -y xvfb wkhtmltopdf && \
RUN wget -q https://cdn.quantconnect.com/fonts/foundation.zip && unzip -q foundation.zip && rm foundation.zip \
&& mv "lean fonts/"* /usr/share/fonts/truetype/ && rm -rf "lean fonts/" "__MACOSX/"
+RUN wget https://dot.net/v1/dotnet-install.sh && \
+ chmod 777 dotnet-install.sh && \
+ ./dotnet-install.sh -c 6.0 && \
+ rm dotnet-install.sh
+
# label definitions
-LABEL strict_python_version=3.11.7
+LABEL strict_python_version=3.11.11
LABEL python_version=3.11
-LABEL target_framework=net6.0
\ No newline at end of file
+LABEL target_framework=net9.0
\ No newline at end of file
diff --git a/Research/QuantConnect.Research.csproj b/Research/QuantConnect.Research.csproj
index ba538810071f..e5bc65cd1c5e 100644
--- a/Research/QuantConnect.Research.csproj
+++ b/Research/QuantConnect.Research.csproj
@@ -32,8 +32,9 @@
-
-
+
+
+
diff --git a/Tests/Python/PythonPackagesTests.cs b/Tests/Python/PythonPackagesTests.cs
index 95d139d0cd53..50fc3bf31d10 100644
--- a/Tests/Python/PythonPackagesTests.cs
+++ b/Tests/Python/PythonPackagesTests.cs
@@ -23,6 +23,246 @@ namespace QuantConnect.Tests.Python
[TestFixture, Category("TravisExclude")]
public class PythonPackagesTests
{
+ [Test]
+ public void Tinygrad()
+ {
+ AssertCode(@"
+def RunTest():
+ import numpy as np
+ from tinygrad import Tensor
+
+ t1 = Tensor([1, 2, 3, 4, 5])
+ na = np.array([1, 2, 3, 4, 5])
+ t2 = Tensor(na)
+");
+ }
+
+ [Test]
+ public void Tigramite()
+ {
+ AssertCode(@"
+def RunTest():
+ import numpy as np
+ import matplotlib
+ from matplotlib import pyplot as plt
+
+ import tigramite
+ from tigramite import data_processing as pp
+ from tigramite.toymodels import structural_causal_processes as toys
+
+ from tigramite.toymodels import surrogate_generator
+
+ from tigramite import plotting as tp
+ from tigramite.pcmci import PCMCI
+ from tigramite.independence_tests.parcorr import ParCorr
+ from tigramite.models import Models, Prediction
+
+ import math
+ import sklearn
+ from sklearn.linear_model import LinearRegression
+
+ np.random.seed(14) # Fix random seed
+ lin_f = lambda x: x
+ links_coeffs = {0: [((0, -1), 0.7, lin_f)],
+ 1: [((1, -1), 0.8, lin_f), ((0, -1), 0.3, lin_f)],
+ 2: [((2, -1), 0.5, lin_f), ((0, -2), -0.5, lin_f)],
+ 3: [((3, -1), 0., lin_f)], #, ((4, -1), 0.4, lin_f)],
+ 4: [((4, -1), 0., lin_f), ((3, 0), 0.5, lin_f)], #, ((3, -1), 0.3, lin_f)],
+ }
+ T = 200 # time series length
+ # Make some noise with different variance, alternatively just noises=None
+ noises = np.array([(1. + 0.2*float(j))*np.random.randn((T + int(math.floor(0.2*T))))
+ for j in range(len(links_coeffs))]).T
+
+ data, _ = toys.structural_causal_process(links_coeffs, T=T, noises=noises, seed=14)
+ T, N = data.shape
+
+ # For generality, we include some masking
+ # mask = np.zeros(data.shape, dtype='int')
+ # mask[:int(T/2)] = True
+ mask=None
+
+ # Initialize dataframe object, specify time axis and variable names
+ var_names = [r'$X^0$', r'$X^1$', r'$X^2$', r'$X^3$', r'$X^4$']
+ dataframe = pp.DataFrame(data,
+ mask=mask,
+ datatime = {0:np.arange(len(data))},
+ var_names=var_names)
+");
+ }
+
+ [Test]
+ public void Tsfel()
+ {
+ AssertCode(@"
+def RunTest():
+ import tsfel
+ import pandas as pd
+
+ # load dataset
+ data = tsfel.datasets.load_biopluxecg()
+
+ # Retrieves a pre-defined feature configuration file to extract the temporal, statistical and spectral feature sets
+ cfg = tsfel.get_features_by_domain()
+
+ # Extract features
+ X = tsfel.time_series_features_extractor(cfg, data)
+");
+ }
+
+ [Test]
+ public void Cvxportfolio()
+ {
+ AssertCode(@"
+def RunTest():
+ import cvxportfolio as cvx
+ import numpy as np
+ import pandas as pd
+
+ objective = cvx.ReturnsForecast() - 0.5 * cvx.FullCovariance()
+ constraints = [cvx.LongOnly(), cvx.LeverageLimit(1)]
+
+ strategy = cvx.SinglePeriodOptimization(objective, constraints)
+");
+ }
+
+ [Test]
+ public void Cesium()
+ {
+ AssertCode(@"
+def RunTest():
+ import numpy as np
+ import matplotlib.pyplot as plt
+ import seaborn
+ from cesium import datasets, featurize
+
+ seaborn.set()
+
+ eeg = datasets.fetch_andrzejak()
+
+ # Group together classes (Z, O), (N, F), (S) as normal, interictal, ictal
+ eeg[""classes""] = eeg[""classes""].astype(""U16"") # allocate memory for longer class names
+ eeg[""classes""][np.logical_or(eeg[""classes""] == ""Z"", eeg[""classes""] == ""O"")] = ""Normal""
+ eeg[""classes""][
+ np.logical_or(eeg[""classes""] == ""N"", eeg[""classes""] == ""F"")
+ ] = ""Interictal""
+ eeg[""classes""][eeg[""classes""] == ""S""] = ""Ictal""
+
+ fig, ax = plt.subplots(1, len(np.unique(eeg[""classes""])), sharey=True)
+ for label, subplot in zip(np.unique(eeg[""classes""]), ax):
+ i = np.where(eeg[""classes""] == label)[0][0]
+ subplot.plot(eeg[""times""][i], eeg[""measurements""][i])
+ subplot.set(xlabel=""time (s)"", ylabel=""signal"", title=label)
+
+ features_to_use = [
+ ""amplitude"",
+ ""percent_beyond_1_std"",
+ ""maximum"",
+ ""max_slope"",
+ ""median"",
+ ""median_absolute_deviation"",
+ ""percent_close_to_median"",
+ ""minimum"",
+ ""skew"",
+ ""std"",
+ ""weighted_average"",
+ ]
+ fset_cesium = featurize.featurize_time_series(
+ times=eeg[""times""],
+ values=eeg[""measurements""],
+ errors=None,
+ features_to_use=features_to_use,
+ )
+ print(fset_cesium.head())
+");
+ }
+
+ [Test, Explicit("Run separate")]
+ public void Thinc()
+ {
+ AssertCode(@"
+def RunTest():
+ from thinc.api import PyTorchWrapper, chain, Linear
+ import torch.nn
+
+ model = chain(
+ PyTorchWrapper(torch.nn.Linear(16, 8)),
+ Linear(4, 8)
+ )
+ X = model.ops.alloc2f(1, 16) # make a dummy batch
+ model.initialize(X=X)
+ Y, backprop = model(X, is_train=True)
+ dX = backprop(Y)
+");
+ }
+
+ [Test]
+ public void Scs()
+ {
+ AssertCode(@"
+def RunTest():
+ import scipy
+ import scs
+ import numpy as np
+
+ # Set up the problem data
+ P = scipy.sparse.csc_matrix([[3.0, -1.0], [-1.0, 2.0]])
+ A = scipy.sparse.csc_matrix([[-1.0, 1.0], [1.0, 0.0], [0.0, 1.0]])
+ b = np.array([-1, 0.3, -0.5])
+ c = np.array([-1.0, -1.0])
+
+ # Populate dicts with data to pass into SCS
+ data = dict(P=P, A=A, b=b, c=c)
+ cone = dict(z=1, l=2)
+
+ # Initialize solver
+ solver = scs.SCS(data, cone, eps_abs=1e-9, eps_rel=1e-9)
+ # Solve!
+ sol = solver.solve()
+
+ print(f""SCS took {sol['info']['iter']} iters"")
+ print(""Optimal solution vector x*:"")
+ print(sol[""x""])
+
+ print(""Optimal dual vector y*:"")
+ print(sol[""y""])");
+ }
+
+ [Test]
+ public void ScikitImage()
+ {
+ AssertCode(@"
+def RunTest():
+ import skimage as ski
+ from skimage import data, color
+ from skimage.transform import rescale, resize, downscale_local_mean
+
+ img = ski.data.astronaut()
+ top_left = img[:100, :100]
+
+ image = color.rgb2gray(data.astronaut())
+
+ image_rescaled = rescale(image, 0.25, anti_aliasing=False)
+ image_resized = resize(
+ image, (image.shape[0] // 4, image.shape[1] // 4), anti_aliasing=True
+ )
+ image_downscaled = downscale_local_mean(image, (4, 3))");
+ }
+
+ [Test]
+ public void TensorboardX()
+ {
+ AssertCode(@"
+def RunTest():
+ from tensorboardX import SummaryWriter
+ #SummaryWriter encapsulates everything
+ writer = SummaryWriter('runs/exp-1')
+ #creates writer object. The log will be saved in 'runs/exp-1'
+ writer2 = SummaryWriter()
+ #creates writer2 object with auto generated file name, the dir will be something like 'runs/Aug20-17-20-33'
+ writer3 = SummaryWriter(comment='3x learning rate')");
+ }
+
[Test]
public void Peft()
{
@@ -256,7 +496,7 @@ def RunTest():
loss.backward()");
}
- [Test]
+ [Test, Explicit("Requires old polars")]
public void Functime()
{
AssertCode(
@@ -308,7 +548,7 @@ def RunTest():
y_pred = forecaster.predict(fh=3, X=X_future)");
}
- [Test]
+ [Test, Explicit("Run separate")]
public void Mlforecast()
{
AssertCode(
@@ -480,7 +720,7 @@ transformed parameters {
df = fit.to_frame() # pandas `DataFrame, requires pandas");
}
- [Test]
+ [Test, Explicit("Run separate")]
public void PyvinecopulibTest()
{
AssertCode(
@@ -800,7 +1040,7 @@ def RunTest():
);
}
- [Test]
+ [Test, Explicit("Run separate")]
public void MlxtendTest()
{
AssertCode(
@@ -858,7 +1098,7 @@ public void IgniteTest()
import ignite
def RunTest():
- assert(ignite.__version__ == '0.4.13')"
+ assert(ignite.__version__ == '0.5.1')"
);
}
@@ -2303,38 +2543,42 @@ def RunTest():
///
/// The module we are testing
/// The module version
- [TestCase("pulp", "2.8.0", "VERSION")]
- [TestCase("pymc", "5.10.4", "__version__")]
+ [TestCase("pulp", "2.9.0", "VERSION")]
+ [TestCase("pymc", "5.19.0", "__version__")]
[TestCase("pypfopt", "pypfopt", "__name__")]
[TestCase("wrapt", "1.16.0", "__version__")]
[TestCase("tslearn", "0.6.3", "__version__")]
[TestCase("tweepy", "4.14.0", "__version__")]
- [TestCase("pywt", "1.5.0", "__version__")]
- [TestCase("umap", "0.5.5", "__version__")]
- [TestCase("dtw", "1.3.1", "__version__")]
+ [TestCase("pywt", "1.7.0", "__version__")]
+ [TestCase("umap", "0.5.7", "__version__")]
+ [TestCase("dtw", "1.5.3", "__version__")]
[TestCase("mplfinance", "0.12.10b0", "__version__")]
[TestCase("cufflinks", "0.17.3", "__version__")]
- [TestCase("ipywidgets", "8.1.2", "__version__")]
- [TestCase("astropy", "6.0.0", "__version__")]
- [TestCase("gluonts", "0.14.4", "__version__")]
+ [TestCase("ipywidgets", "8.1.5", "__version__")]
+ [TestCase("astropy", "7.0.0", "__version__")]
+ [TestCase("gluonts", "0.16.0", "__version__")]
[TestCase("gplearn", "0.4.2", "__version__")]
- [TestCase("featuretools", "1.30.0", "__version__")]
- [TestCase("pennylane", "0.35.1", "version()")]
- [TestCase("pyfolio", "0.9.5", "__version__")]
- [TestCase("altair", "5.2.0", "__version__")]
+ [TestCase("featuretools", "1.31.0", "__version__")]
+ [TestCase("pennylane", "0.39.0", "version()")]
+ [TestCase("pyfolio", "0.9.8", "__version__")]
+ [TestCase("altair", "5.5.0", "__version__")]
[TestCase("modin", "0.26.1", "__version__")]
- [TestCase("persim", "0.3.5", "__version__")]
- [TestCase("pydmd", "1.0.0", "__version__")]
+ [TestCase("persim", "0.3.7", "__version__")]
+ [TestCase("pydmd", "pydmd", "__name__")]
[TestCase("pandas_ta", "0.3.14b0", "__version__")]
[TestCase("tensortrade", "1.0.3", "__version__")]
- [TestCase("quantstats", "0.0.62", "__version__")]
- [TestCase("panel", "1.3.8", "__version__")]
+ [TestCase("quantstats", "0.0.64", "__version__")]
+ [TestCase("panel", "1.5.4", "__version__")]
[TestCase("pyheat", "pyheat", "__name__")]
- [TestCase("tensorflow_decision_forests", "1.9.0", "__version__")]
- [TestCase("pomegranate", "1.0.4", "__version__")]
- [TestCase("cv2", "4.9.0", "__version__")]
- [TestCase("ot", "0.9.3", "__version__")]
- [TestCase("datasets", "2.17.1", "__version__")]
+ [TestCase("tensorflow_decision_forests", "1.11.0", "__version__")]
+ [TestCase("pomegranate", "1.1.1", "__version__")]
+ [TestCase("cv2", "4.10.0", "__version__")]
+ [TestCase("ot", "0.9.5", "__version__")]
+ [TestCase("datasets", "2.21.0", "__version__")]
+ [TestCase("ipympl", "0.9.4", "__version__")]
+ [TestCase("PyQt6", "PyQt6", "__name__")]
+ [TestCase("pytorch_forecasting", "1.2.0", "__version__")]
+ [TestCase("chronos", "chronos", "__name__")]
public void ModuleVersionTest(string module, string value, string attribute)
{
AssertCode(