├── __init__.py ├── gymnax_exchange ├── jaxob │ ├── __init__.py │ ├── README.md │ ├── JaxOrderBookWrapper.py │ ├── jaxob_constants.py │ ├── jaxob_config.py │ └── jorderbook.py ├── utils │ ├── __init__.py │ └── utils.py ├── jaxlobster │ ├── __init__.py │ ├── constants.py │ └── data_loading.py ├── __init__.py ├── jaxen │ ├── __init__.py │ ├── from_JAXMARL │ │ ├── __pycache__ │ │ │ └── multi_agent_env.cpython-312.pyc │ │ └── multi_agent_env.py │ ├── StatesandParams.py │ ├── Speed_test.py │ └── base_env.py └── jaxrl │ ├── __init__.py │ └── MARL │ ├── config │ ├── ippo_rnn_JAXMARL.yaml │ ├── ippo_rnn_JAXMARL_simplest_case.yaml │ ├── ippo_rnn_JAXMARL_fine_sweep.yaml │ ├── ippo_rnn_JAXMARL_2player.yaml │ └── PMAP_ippo_rnn_JAXMARL_2player.yaml │ └── baseline_eval │ ├── config │ └── base_config.yaml │ ├── simple_triangular_plot.py │ ├── plotting_episodes.py │ └── plotting_combinations.py ├── Makefile ├── Dockerfile ├── .gitignore ├── README.md └── requirements.txt /__init__.py: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /gymnax_exchange/jaxob/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /gymnax_exchange/utils/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /gymnax_exchange/jaxlobster/__init__.py: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /gymnax_exchange/jaxob/README.md: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /gymnax_exchange/__init__.py: -------------------------------------------------------------------------------- 1 | try: 2 | import rich.traceback 3 | rich.traceback.install() 4 | except ImportError: 5 | pass -------------------------------------------------------------------------------- /gymnax_exchange/jaxen/__init__.py: -------------------------------------------------------------------------------- 1 | try: 2 | import rich.traceback 3 | rich.traceback.install() 4 | except ImportError: 5 | pass -------------------------------------------------------------------------------- /gymnax_exchange/jaxrl/__init__.py: -------------------------------------------------------------------------------- 1 | try: 2 | import rich.traceback 3 | rich.traceback.install() 4 | except ImportError: 5 | pass 6 | -------------------------------------------------------------------------------- /gymnax_exchange/jaxen/from_JAXMARL/__pycache__/multi_agent_env.cpython-312.pyc: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/vmohl/JaxMARL-HFT/HEAD/gymnax_exchange/jaxen/from_JAXMARL/__pycache__/multi_agent_env.cpython-312.pyc -------------------------------------------------------------------------------- /gymnax_exchange/jaxob/JaxOrderBookWrapper.py: -------------------------------------------------------------------------------- 1 | # ===================================== # 2 | # ******* Config your own func ******** # 3 | # ===================================== # 4 | 5 | from gymnax_exchange.jaxob.JaxOrderBookArrays import * 6 | @partial(jax.jit) 7 | def get_best_bid(asks, bids): 8 | L2_state = get_L2_state(1, asks, bids) 9 | return L2_state[0] 10 | 11 | @partial(jax.jit) 12 | def get_best_bid(asks, bids): 13 | L2_state = get_L2_state(1, asks, bids) 14 | return L2_state[1] 15 | -------------------------------------------------------------------------------- /gymnax_exchange/jaxrl/MARL/config/ippo_rnn_JAXMARL.yaml: -------------------------------------------------------------------------------- 1 | # Those hparams which are in a list 2 | # apply differently to each ntwrk 3 | # Should match with NUM_AGENTS_PER_TYPE 4 | 5 | "LR": [0.0004, 0.0004] 6 | "NUM_ENVS": 512 7 | "NUM_STEPS": 256 8 | "GRU_HIDDEN_DIM": 128 9 | "FC_DIM_SIZE": 128 10 | "TOTAL_TIMESTEPS": 5e7 11 | "UPDATE_EPOCHS": 4 12 | "NUM_MINIBATCHES": 16 13 | "GAMMA": [0.999, 0.999] 14 | "GAE_LAMBDA": [0.99, 0.99] 15 | "CLIP_EPS": 0.2 16 | "SCALE_CLIP_EPS": [False] 17 | "ENT_COEF": [0.001, 0.01] 18 | "VF_COEF": [0.000000000000000000000001, 0.00001] 19 | "MAX_GRAD_NORM": [0.5, 0.5] 20 | "ACTIVATION": ["relu", "relu"] 21 | "ENV_NAME": "JAXMARL-Lob-v0" 22 | "NUM_AGENTS_PER_TYPE": [1, 1] 23 | "SEED": 1 24 | # "ENV_KWARGS": 25 | # "LIST_OF_AGENTS_CONFIGS: [] 26 | # "NUM_AGENTS_PER_TYPE": True 27 | # # "attack_mode": "closest" 28 | "ANNEAL_LR": [True, True] 29 | 30 | # WandB Params 31 | "ENTITY": "oxford-lob" 32 | "PROJECT": "JAXMARL-LOB_GOOG_2019_two_agents" 33 | "WANDB_MODE" : "online" -------------------------------------------------------------------------------- /gymnax_exchange/jaxrl/MARL/config/ippo_rnn_JAXMARL_simplest_case.yaml: -------------------------------------------------------------------------------- 1 | # Those hparams which are in a list 2 | # apply differently to each ntwrk 3 | # Should match with NUM_AGENTS_PER_TYPE 4 | 5 | "LR": [5e-5] 6 | "NUM_ENVS": 512 7 | "NUM_STEPS": 256 8 | "NUM_STEPS_EVAL" : 64 9 | "GRU_HIDDEN_DIM": 128 10 | "FC_DIM_SIZE": 128 11 | "TOTAL_TIMESTEPS": 1e7 12 | "UPDATE_EPOCHS": 4 13 | "NUM_MINIBATCHES": 16 14 | "GAMMA": [0.999] 15 | "GAE_LAMBDA": [0.99] 16 | "CLIP_EPS": 0.2 17 | "SCALE_CLIP_EPS": [False] 18 | "ENT_COEF": [0.01] 19 | "VF_COEF": [0.001] 20 | "MAX_GRAD_NORM": [0.5] 21 | "ACTIVATION": ["relu"] 22 | "ENV_NAME": "JAXMARL-Lob-v0" 23 | "NUM_AGENTS_PER_TYPE": [1] 24 | "SEED": 0 25 | # "ENV_KWARGS": 26 | # "LIST_OF_AGENTS_CONFIGS: [] 27 | # "NUM_AGENTS_PER_TYPE": True 28 | # # "attack_mode": "closest" 29 | "ANNEAL_LR": [True] 30 | 31 | # WandB Params 32 | "ENTITY": "oxford-lob" 33 | "PROJECT": "NEWTEST" 34 | "WANDB_MODE" : "online" 35 | 36 | # High-Level Params 37 | "CALC_EVAL" : True 38 | "CALC_BASELINE" : True -------------------------------------------------------------------------------- /gymnax_exchange/jaxrl/MARL/config/ippo_rnn_JAXMARL_fine_sweep.yaml: -------------------------------------------------------------------------------- 1 | # Those hparams which are in a list 2 | # apply differently to each ntwrk 3 | # Should match with NUM_AGENTS_PER_TYPE 4 | 5 | "LR": [5e-5] 6 | "NUM_ENVS": 512 7 | "NUM_STEPS": 512 8 | "GRU_HIDDEN_DIM": 128 9 | "FC_DIM_SIZE": 128 10 | "TOTAL_TIMESTEPS": 1e7 11 | "UPDATE_EPOCHS": 4 12 | "NUM_MINIBATCHES": 16 13 | "GAMMA": [0.999] 14 | "GAE_LAMBDA": [0.99] 15 | "CLIP_EPS": 0.2 16 | "SCALE_CLIP_EPS": [False] 17 | "ENT_COEF": [0.01] 18 | "VF_COEF": [0.001] 19 | "MAX_GRAD_NORM": [0.5] 20 | "ACTIVATION": ["relu"] 21 | "ENV_NAME": "JAXMARL-Lob-v0" 22 | "NUM_AGENTS_PER_TYPE": [1] 23 | "SEED": 0 24 | # "ENV_KWARGS": 25 | # "LIST_OF_AGENTS_CONFIGS: [] 26 | # "NUM_AGENTS_PER_TYPE": True 27 | # # "attack_mode": "closest" 28 | "ANNEAL_LR": [True] 29 | 30 | # WandB Params 31 | "ENTITY": "oxford-lob" 32 | "PROJECT": "DebugConfig" 33 | "WANDB_MODE" : "online" 34 | 35 | # High-Level Params 36 | "CALC_EVAL" : True 37 | "Calculate Baseline" : True 38 | 39 | 40 | 41 | -------------------------------------------------------------------------------- /gymnax_exchange/jaxrl/MARL/config/ippo_rnn_JAXMARL_2player.yaml: -------------------------------------------------------------------------------- 1 | # Those hparams which are in a list 2 | # apply differently to each ntwrk 3 | # Should match with NUM_AGENTS_PER_TYPE 4 | 5 | "LR": [0.0004,0.0004] 6 | "NUM_ENVS": 4096 #128 7 | "NUM_STEPS": 128 8 | "NUM_STEPS_EVAL" : 64 9 | "GRU_HIDDEN_DIM": 128 10 | "FC_DIM_SIZE": 128 11 | "TOTAL_TIMESTEPS": 5e7 12 | "UPDATE_EPOCHS": 4 13 | "NUM_MINIBATCHES": 16 14 | "GAMMA": [0.999,0.999] 15 | "GAE_LAMBDA": [0.99,0.99] 16 | "CLIP_EPS": 0.2 17 | "SCALE_CLIP_EPS": [False,False] 18 | "ENT_COEF": [0.001,0.001] 19 | "VF_COEF": [1e-11,1e-11] 20 | "MAX_GRAD_NORM": [0.5,0.5] 21 | "ACTIVATION": ["relu","relu"] 22 | "ENV_NAME": "JAXMARL-Lob-v0" 23 | "NUM_AGENTS_PER_TYPE": [1,1] 24 | "SEED": 2 25 | "N_DEVICES": 1 26 | # "ENV_KWARGS": 27 | # "LIST_OF_AGENTS_CONFIGS: [] 28 | # "NUM_AGENTS_PER_TYPE": True 29 | # # "attack_mode": "closest" 30 | "ANNEAL_LR": [True,True] 31 | 32 | # WandB Params 33 | "ENTITY": "oxford-lob" 34 | "PROJECT": "test2" 35 | "WANDB_MODE" : "online" 36 | 37 | # High-Level Params 38 | "CALC_EVAL" : False 39 | "EvalTimePeriod" : "2024_Eval" 40 | "Calculate Baseline" : False 41 | "Timing" : False 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /gymnax_exchange/jaxrl/MARL/config/PMAP_ippo_rnn_JAXMARL_2player.yaml: -------------------------------------------------------------------------------- 1 | # Those hparams which are in a list 2 | # apply differently to each ntwrk 3 | # Should match with NUM_AGENTS_PER_TYPE 4 | 5 | "LR": [0.0004,0.0004] 6 | "NUM_ENVS": 32768 #32768 #128 7 | "NUM_STEPS": 64 8 | "NUM_STEPS_EVAL" : 64 9 | "GRU_HIDDEN_DIM": 128 10 | "FC_DIM_SIZE": 128 11 | "TOTAL_TIMESTEPS": 1e10 12 | "UPDATE_EPOCHS": 4 13 | "NUM_MINIBATCHES": 16 14 | "GAMMA": [0.999,0.999] 15 | "GAE_LAMBDA": [0.99,0.99] 16 | "CLIP_EPS": 0.2 17 | "SCALE_CLIP_EPS": [False,False] 18 | "ENT_COEF": [0.001,0.001] 19 | "VF_COEF": [1e-11,1e-11] 20 | "MAX_GRAD_NORM": [0.5,0.5] 21 | "ACTIVATION": ["relu","relu"] 22 | "ENV_NAME": "JAXMARL-Lob-v0" 23 | "NUM_AGENTS_PER_TYPE": [10,10] 24 | "SEED": 2 25 | "N_DEVICES": 8 26 | # "ENV_KWARGS": 27 | # "LIST_OF_AGENTS_CONFIGS: [] 28 | # "NUM_AGENTS_PER_TYPE": True 29 | # # "attack_mode": "closest" 30 | "ANNEAL_LR": [True,True] 31 | 32 | # WandB Params 33 | "ENTITY": "oxford-lob" 34 | "PROJECT": "PMAP_SPEED" #"DEBUG" 35 | "WANDB_MODE" : "online" 36 | 37 | # High-Level Params 38 | "CALC_EVAL" : False 39 | "EvalTimePeriod" : "2024_Eval" 40 | "Calculate Baseline" : False 41 | "Timing" : True 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | NVCC_RESULT := $(shell which nvcc 2> NULL; rm NULL) 2 | NVCC_TEST := $(notdir $(NVCC_RESULT)) 3 | ifeq ($(NVCC_TEST),nvcc) 4 | GPUS=--gpus '"device=7"' 5 | else 6 | GPUS= 7 | endif 8 | 9 | 10 | # Set flag for docker run command 11 | MYUSER=myuser 12 | SERVER_NAME = $(shell hostname) 13 | # If using flair12 server, set data directory to /homes/80/sascha/data, otherwise assume data is on same level as the repo 14 | ifeq ($(SERVER_NAME),flair-node-12) 15 | DATADIR=/homes/80/sascha/data 16 | else 17 | DATADIR=~/data 18 | endif 19 | BASE_FLAGS=-it --rm -v ${PWD}:/home/$(MYUSER) -v $(DATADIR):/home/$(MYUSER)/data --shm-size 20G 20 | PORT_FLAGS= -p 8074:80 -p 8075:6006 21 | RUN_FLAGS=$(GPUS) $(BASE_FLAGS) $(PORT_FLAGS) 22 | BASIC_FLAGS=$(GPUS) $(BASE_FLAGS) 23 | 24 | 25 | DOCKER_IMAGE_NAME = jaxmarl_lob 26 | IMAGE = $(DOCKER_IMAGE_NAME):latest # for working image: IMAGE = $(DOCKER_IMAGE_NAME):working or 27 | DOCKER_RUN=docker run $(RUN_FLAGS) $(IMAGE) 28 | DOCKER_RUN_BASIC=docker run --gpus "device=$(gpu)" $(BASE_FLAGS) $(IMAGE) 29 | USE_CUDA = $(if $(GPUS),true,false) 30 | ID = $(shell id -u) 31 | 32 | # make file commands 33 | build: 34 | DOCKER_BUILDKIT=1 docker build -f Dockerfile --build-arg USE_CUDA=$(USE_CUDA) --build-arg MYUSER=$(MYUSER) --build-arg UID=$(ID) --tag $(IMAGE) --progress=plain ${PWD}/. 35 | 36 | # --no-cache 37 | 38 | 39 | run: 40 | $(DOCKER_RUN) /bin/bash 41 | 42 | test: 43 | $(DOCKER_RUN) /bin/bash -c "pytest ./tests/" 44 | 45 | ppo: 46 | $(DOCKER_RUN_BASIC) /bin/bash -c "python3 ./gymnax_exchange/jaxrl/MARL/ippo_rnn_JAXMARL.py" 47 | 48 | workflow-test: 49 | # without -it flag 50 | docker run --rm -v ${PWD}:/home/workdir --shm-size 20G $(IMAGE) /bin/bash -c "pytest ./tests/" -------------------------------------------------------------------------------- /gymnax_exchange/jaxob/jaxob_constants.py: -------------------------------------------------------------------------------- 1 | 2 | from enum import Enum 3 | 4 | class MaxInt(Enum): 5 | _64_Bit_Signed=2_147_483_647 6 | _32_Bit_Signed=32_767 7 | 8 | # Actual constants, will never change. 9 | INITID=-2 10 | DUMMYID=-888888 11 | EMPTY_SLOT=-1 12 | 13 | ORDERBOOK_FEAT=6 14 | TRADE_FEAT=8 15 | NS_PER_SEC=1e9 16 | 17 | # Default values for the config. 18 | 19 | NTRADE_CAP=100 20 | NORDER_CAP=100 21 | STARTOFDAY=[34200 , 0] 22 | ENDOFDAY=[57600 , 0] 23 | TEST_TIME=[44444,44444] 24 | 25 | 26 | # LOBSTER Message types, 27 | class MessageType(Enum): 28 | LIMIT=1 29 | CANCEL=2 30 | DELETE=3 31 | MATCH=4 32 | HIDDEN=5 33 | AUCTION=6 34 | HALT=7 35 | 36 | class OrderSideFeat(Enum): 37 | P=0 #Price 38 | Q=1 #Quantity 39 | OID=2 #Order ID 40 | TID=3 # Trade ID 41 | SEC=4 #Seconds 42 | NSEC=5 #Nanoseconds 43 | 44 | class TradesFeat(Enum): 45 | P=0 #Price 46 | Q=1 #Quantity 47 | PASS_OID=2 #Order ID 48 | AGRS_OID=3 # Trade ID 49 | SEC=4 #Seconds 50 | NSEC=5 #Nanoseconds 51 | PASS_TID=6 #Order ID 52 | AGRS_TID=7 # Trade ID 53 | 54 | 55 | 56 | class BidAskSide(Enum): 57 | BID=1 58 | ASK=-1 59 | 60 | 61 | #Define as static...? Might solve 62 | class CancelMode(Enum): 63 | STRICT_BY_ID=0 #Cancel only if ID matches. 64 | INCLUDE_INITS=1 #Cancel only init orders if ID does not match 65 | CANCEL_UNIFORM=2 #Pick a random order at the right price level to cancel 66 | CANCEL_UNIFORM_AND_LARGE=3 # Unused for now 67 | 68 | SEED= 42 # the meaning of life. 69 | 70 | #TODO: flag on behaviour of type market either limit or far touch. 71 | 72 | class SimulatorMode(Enum): 73 | GENERAL_EXCHANGE=0 74 | LOBSTER_INTERPRETER=1 75 | 76 | class LOBMSGFEAT(Enum): 77 | Type=0 # Message type 78 | Side=1 # Order side (buy/sell) 79 | Quant=2 # Quantity 80 | Price=3 # Price 81 | OID=4 # Order ID 82 | TID=5 # Trade ID 83 | TS=6 # Timestamp seconds 84 | TNS=7 # Timestamp nanoseconds -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nvcr.io/nvidia/jax:25.01-py3 2 | 3 | # Create user 4 | ARG UID 5 | ARG MYUSER 6 | RUN useradd -m -u $UID --create-home ${MYUSER} && \ 7 | echo "${MYUSER}: ${MYUSER}" | chpasswd && \ 8 | adduser ${MYUSER} sudo && \ 9 | # mkdir -p /home/${MYUSER}/.local/bin && \ 10 | chown -R ${MYUSER}:${MYUSER} /home/${MYUSER} 11 | 12 | # default workdir 13 | WORKDIR /home/${MYUSER}/ 14 | COPY --chown=${MYUSER} --chmod=777 . . 15 | 16 | # install tmux 17 | RUN apt-get update && \ 18 | apt-get install -y tmux && \ 19 | apt-get install -y \ 20 | apt-transport-https \ 21 | ca-certificates \ 22 | gnupg \ 23 | libgl1 \ 24 | p7zip-full \ 25 | unrar \ 26 | htop \ 27 | graphviz \ 28 | libcupti-dev 29 | # Copy requirements.txt and verify its contents 30 | COPY --chown=${MYUSER}:${MYUSER} requirements.txt /home/${MYUSER}/AlphaTrade/ 31 | RUN ls -l && cat requirements.txt 32 | 33 | #jaxmarl from source if needed, all the requirements 34 | # RUN pip install -e .[algs,dev] 35 | RUN pip install --no-cache-dir -r requirements.txt 36 | 37 | 38 | RUN wget https://go.dev/dl/go1.24.5.linux-amd64.tar.gz 39 | RUN rm -rf /usr/local/go 40 | RUN tar -C /usr/local -xzf go1.24.5.linux-amd64.tar.gz 41 | 42 | RUN export PATH=$PATH:/usr/local/go/bin 43 | 44 | USER ${MYUSER} 45 | 46 | #disabling preallocation 47 | RUN export XLA_PYTHON_CLIENT_PREALLOCATE=false 48 | #safety measures 49 | RUN export XLA_PYTHON_CLIENT_MEM_FRACTION=0.25 50 | RUN export TF_FORCE_GPU_ALLOW_GROWTH=true 51 | 52 | # Add .local/bin to PATH 53 | RUN echo 'export PATH=$PATH:/home/duser/.local/bin' >> ~/.bashrc 54 | 55 | 56 | # Ensure home directory is on the Python path 57 | ENV PYTHONPATH="/home/${MYUSER}:$PYTHONPATH" 58 | RUN export PATH="$HOME/.local/bin:$PATH" 59 | RUN export PATH="$HOME/.local/lib:$PATH" 60 | # Uncomment below if you want jupyter 61 | # RUN pip install jupyterlab 62 | 63 | #for secrets and debug 64 | ENV WANDB_API_KEY="" 65 | ENV WANDB_ENTITY="" 66 | RUN git config --global --add safe.directory /home/${MYUSER} 67 | 68 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | **.csv 2 | .idea/**/ 3 | **.pyc 4 | .idea/** 5 | .spyproject/** 6 | .DS_Store 7 | **.log 8 | /train/output/** 9 | **.pkl 10 | /train/wandb/** 11 | **/wandb/** 12 | /gym_exchange/outputs/** 13 | .bash_history 14 | jax_rwkv/** 15 | .bash_history 16 | 17 | gym_exchange/.DS_Store 18 | gym_exchange/data_orderbook_adapter/.DS_Store 19 | gym_exchange/orderbook/.DS_Store 20 | gymnax_exchange/.DS_Store 21 | **.xml 22 | **/.idea/**/ 23 | gymnax_exchange/.idea/ 24 | gymnax_exchange/.idea/** 25 | **/.DS_Store 26 | gymnax_exchange/.DS_Store 27 | .vscode/** 28 | **/.ipynb_checkpoints/** 29 | gymnax_exchange/jaxob/.ipynb_checkpoints/** 30 | Miniconda3-latest-Linux-x86_64.sh 31 | nohup.out 32 | program.prof 33 | **/gymnax/** 34 | params_file 35 | params_file_2023-07-08_15-22-20 36 | params_file_2023-07-08_19-29-37 37 | re_1.py 38 | re_2.ipynb 39 | **.ckpt 40 | params_file** 41 | note.md 42 | results_file** 43 | 44 | *.png 45 | *.npy 46 | *.nfs* 47 | 48 | Dockerfile 49 | Dockerfile_twogymnax_exchange/jaxrl/pre_trained_weights/*.model 50 | tensorboard_logs/ 51 | tensorboard_logs/** 52 | 53 | old_version_tb_logs/ 54 | old_version_tb_logs/** 55 | report* 56 | .nv/** 57 | .nv/ */ 58 | 59 | 60 | eval_results/** 61 | 62 | .cache/ 63 | .cache/** 64 | .keras/ 65 | .keras/** 66 | .local/ 67 | .local/** 68 | 69 | .vscode-server/** 70 | .outputs/** 71 | .mycache/** 72 | .ssh/** 73 | .chache/** 74 | .outputs/** 75 | /training_oneDay/ 76 | /training_oneDay/** 77 | /outputs/** 78 | /.dotnet/** 79 | .dotnet/ 80 | .dotnet/** 81 | .vscode/ 82 | .vscode-server/** 83 | .gnupg/ 84 | .gnupg/** 85 | outputs/ 86 | outputs/** 87 | 88 | .ssh/ 89 | .ssh/** 90 | 91 | .venv/ 92 | .venv/** 93 | /mycache/** 94 | /cache/** 95 | 96 | /gymnax_exchange/jaxen/Timing_speed/** */ 97 | /gymnax_exchange/jaxen/Timing_speed/** 98 | .netrc 99 | /gymnax_exchange/jaxen/output/** 100 | /old/.netrc 101 | 102 | /go/* 103 | .config/* 104 | saved_npz/** 105 | saved_npz/ 106 | .netrc 107 | /checkpoints/** 108 | .gitconfig 109 | 110 | test.py -------------------------------------------------------------------------------- /gymnax_exchange/jaxlobster/constants.py: -------------------------------------------------------------------------------- 1 | from dataclasses import dataclass 2 | import numpy as np 3 | 4 | TIME_COL = "