Compilation from source with Metal support fails

Description
When I follow the following tutorial on macOS 13.4.1 with an AMD Radeon Pro Vega 20 GPU, the building of JAX from source with the command python build/build.py --bazel_options=--@xla//xla/python:enable_tpu=true fails with the following error:
python build/build.py --bazel_options=--@xla//xla/python:enable_tpu=true

     _   _  __  __
    | | / \ \ \/ /
 _  | |/ _ \ \  /
| |_| / ___ \/  \
 \___/_/   \/_/\_\

Bazel binary path: ./bazel-5.1.1-darwin-x86_64
Bazel version: 5.1.1
Python binary path: /Users/maximilianstoelzle/opt/miniconda3/envs/jax-metal/bin/python
Python version: 3.10
NumPy version: 1.24.3
MKL-DNN enabled: yes
Target CPU: x86_64
Target CPU features: release
CUDA enabled: no
TPU enabled: no
ROCm enabled: no
Plugin device enabled: no

Building XLA and installing it in the jaxlib source tree...
./bazel-5.1.1-darwin-x86_64 run --verbose_failures=true :build_wheel -- --output_path=/Users/maximilianstoelzle/Documents/phd/jax/dist --cpu=x86_64
Starting local Bazel server and connecting to it...
INFO: Options provided by the client:
  Inherited 'common' options: --isatty=0 --terminal_columns=80
INFO: Reading rc options for 'run' from /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc:
  Inherited 'common' options: --experimental_repo_remote_exec
INFO: Reading rc options for 'run' from /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc:
  Inherited 'build' options: --nocheck_visibility --apple_platform_type=macos --macos_minimum_os=10.14 --announce_rc --define open_source_build=true --spawn_strategy=standalone --enable_platform_specific_config --experimental_cc_shared_library --define=no_aws_support=true --define=no_gcp_support=true --define=no_hdfs_support=true --define=no_kafka_support=true --define=no_ignite_support=true --define=grpc_no_ares=true --define=tsl_link_protobuf=true -c opt --config=short_logs --copt=-DMLIR_PYTHON_PACKAGE_PREFIX=jaxlib.mlir. --@xla//xla/python:enable_gpu=false --@xla//xla/python:enable_tpu=false --@xla//xla/python:enable_plugin_device=false
INFO: Reading rc options for 'run' from /Users/maximilianstoelzle/Documents/phd/jax/.jax_configure.bazelrc:
  Inherited 'build' options: --strategy=Genrule=standalone --repo_env PYTHON_BIN_PATH=/Users/maximilianstoelzle/opt/miniconda3/envs/jax-metal/bin/python --action_env=PYENV_ROOT --python_path=/Users/maximilianstoelzle/opt/miniconda3/envs/jax-metal/bin/python --distinct_host_configuration=false --@xla//xla/python:enable_tpu=true --config=avx_posix --config=mkl_open_source_only
INFO: Found applicable config definition build:short_logs in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --output_filter=DONT_MATCH_ANYTHING
INFO: Found applicable config definition build:avx_posix in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --copt=-mavx --host_copt=-mavx
INFO: Found applicable config definition build:mkl_open_source_only in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --define=tensorflow_mkldnn_contraction_kernel=1
INFO: Found applicable config definition build:macos in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --config=posix
INFO: Found applicable config definition build:posix in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --copt=-fvisibility=hidden --copt=-Wno-sign-compare --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
DEBUG: /private/var/tmp/_bazel_maximilianstoelzle/52c984ae7d44274dd09457495e3661f8/external/xla/third_party/repo.bzl:132:14:
Warning: skipping import of repository 'tf_runtime' because it already exists.
DEBUG: /private/var/tmp/_bazel_maximilianstoelzle/52c984ae7d44274dd09457495e3661f8/external/xla/third_party/repo.bzl:132:14:
Warning: skipping import of repository 'llvm-raw' because it already exists.
Loading:
Loading: 1 packages loaded
Analyzing: target //build:build_wheel (2 packages loaded, 0 targets configured)
Analyzing: target //build:build_wheel (63 packages loaded, 315 targets configured)
Analyzing: target //build:build_wheel (171 packages loaded, 7007 targets configured)
Analyzing: target //build:build_wheel (203 packages loaded, 15248 targets configured)
INFO: Analyzed target //build:build_wheel (203 packages loaded, 15248 targets configured).
INFO: Found 1 target...
[15 / 86] [Prepa] BazelWorkspaceStatusAction stable-status.txt
[1,826 / 5,071] checking cached actions
[3,043 / 5,182] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 0s local ... (2 actions running)
[3,986 / 5,182] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 1s local ... (6 actions running)
[4,407 / 5,349] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 3s local ... (15 actions running)
[4,407 / 5,349] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 5s local ... (16 actions running)
[4,410 / 5,354] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 13s local ... (16 actions, 15 running)
[4,417 / 5,356] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 16s local ... (16 actions running)
[4,418 / 5,356] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 22s local ... (16 actions, 15 running)
[4,469 / 5,410] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 27s local ... (16 actions, 15 running)
[4,481 / 5,423] Compiling jaxlib/cpu/ducc_fft_kernels.cc; 34s local ... (16 actions running)
[4,597 / 5,546] Compiling mlir/lib/Bindings/Python/IRCore.cpp; 40s local ... (16 actions running)
[4,746 / 5,706] Compiling stablehlo/dialect/VhloOps.cpp; 47s local ... (15 actions running)
[4,977 / 6,068] Compiling stablehlo/dialect/VhloOps.cpp; 55s local ... (16 actions running)
[5,011 / 6,068] Compiling mlir/lib/Conversion/AMDGPUToROCDL/AMDGPUToROCDL.cpp; 16s local ... (16 actions running)
[5,030 / 6,068] Compiling mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp; 27s local ... (16 actions running)
[5,055 / 6,068] Compiling mlir/lib/Dialect/OpenACC/IR/OpenACC.cpp; 40s local ... (16 actions running)
[5,354 / 6,442] Compiling llvm/utils/TableGen/GlobalISelEmitter.cpp; 27s local ... (16 actions running)
[5,387 / 6,475] Compiling src/cpu/x64/gemm/bf16/jit_avx512_core_s16_24x8_copy_at_kern_autogen.cpp; 29s local ... (16 actions running)
[5,396 / 6,475] Compiling src/cpu/x64/gemm/bf16/jit_avx512_core_s16_24x8_copy_at_kern_autogen.cpp; 49s local ... (16 actions running)
[5,421 / 6,475] Compiling src/cpu/x64/gemm/s8x8s32/jit_avx_kernel_b_gemm_s8u8s32_kern_autogen.cpp; 71s local ... (15 actions running)
[5,520 / 6,717] Compiling src/cpu/x64/gemm/s8x8s32/jit_avx_kernel_b_gemm_s8u8s32_kern_autogen.cpp; 97s local ... (16 actions running)
[5,619 / 6,717] Compiling src/cpu/x64/gemm/s8x8s32/jit_avx512_core_u8_copy_sum_at_kern_autogen.cpp; 128s local ... (16 actions running)
[5,851 / 7,147] Compiling src/cpu/x64/gemm/s8x8s32/jit_avx512_core_u8_copy_sum_at_kern_autogen.cpp; 162s local ... (16 actions running)
[5,876 / 7,147] Compiling src/cpu/x64/gemm/s8x8s32/jit_avx512_core_u8_copy_sum_at_kern_autogen.cpp; 202s local ... (16 actions running)
[5,928 / 7,189] Compiling src/cpu/x64/gemm/s8x8s32/jit_avx512_core_u8_copy_sum_at_kern_autogen.cpp; 249s local ... (16 actions running)
[6,180 / 7,510] Compiling src/cpu/x64/gemm/f32/jit_avx512_core_f32_copy_an_kern_autogen.cpp; 299s local ... (16 actions running)
[6,251 / 7,611] Compiling src/cpu/x64/gemm/f32/jit_avx512_core_f32_copy_an_kern_autogen.cpp; 360s local ... (16 actions running)
[6,294 / 7,924] Compiling src/cpu/x64/gemm/f32/jit_avx512_core_f32_copy_an_kern_autogen.cpp; 430s local ... (16 actions running)
[6,345 / 7,924] Compiling llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp; 50s local ... (16 actions running)
[6,402 / 7,924] Compiling llvm/lib/CodeGen/CodeGenPrepare.cpp; 52s local ... (16 actions running)
[6,488 / 7,924] Compiling llvm/lib/CodeGen/MachineBlockPlacement.cpp; 29s local ... (16 actions running)
[6,844 / 8,350] Compiling llvm/lib/CodeGen/SelectionDAG/DAGCombiner.cpp; 52s local ... (16 actions running)
[7,053 / 8,544] Compiling mlir/lib/Dialect/SPIRV/IR/SPIRVDialect.cpp; 166s local ... (16 actions running)
[7,290 / 8,778] Compiling mlir/lib/Conversion/VectorToGPU/VectorToGPU.cpp; 66s local ... (16 actions running)
ERROR: /private/var/tmp/_bazel_maximilianstoelzle/52c984ae7d44274dd09457495e3661f8/external/boringssl/BUILD:133:11: Compiling err_data.c failed: (Exit 1): cc_wrapper.sh failed: error executing command
  (cd /private/var/tmp/_bazel_maximilianstoelzle/52c984ae7d44274dd09457495e3661f8/execroot/__main__ && \
  exec env - \
    PATH='/Users/maximilianstoelzle/opt/miniconda3/envs/jax-metal/bin:/Users/maximilianstoelzle/.local/bin:/usr/local/opt/apr/bin:/Users/maximilianstoelzle/opt/miniconda3/condabin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/VMware Fusion.app/Contents/Public:/Library/TeX/texbin:/opt/X11/bin:/Library/Apple/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin' \
    PWD=/proc/self/cwd \
  external/local_config_cc/cc_wrapper.sh -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -Wunused-but-set-parameter -Wno-free-nonheap-object -fcolor-diagnostics -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections -fdata-sections -MD -MF bazel-out/darwin-opt/bin/external/boringssl/_objs/crypto/err_data.pic.d '-frandom-seed=bazel-out/darwin-opt/bin/external/boringssl/_objs/crypto/err_data.pic.o' -fPIC -iquote external/boringssl -iquote bazel-out/darwin-opt/bin/external/boringssl -isystem external/boringssl/src/include -isystem bazel-out/darwin-opt/bin/external/boringssl/src/include '-fvisibility=hidden' -Wno-sign-compare '-DMLIR_PYTHON_PACKAGE_PREFIX=jaxlib.mlir.' -mavx -DBORINGSSL_IMPLEMENTATION -Wa,--noexecstack -Wall -Werror '-Wformat=2' -Wsign-compare -Wmissing-field-initializers -Wwrite-strings -Wshadow -fno-common '-std=c11' -Wmissing-prototypes -Wold-style-definition -Wstrict-prototypes -no-canonical-prefixes -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c external/boringssl/err_data.c -o bazel-out/darwin-opt/bin/external/boringssl/_objs/crypto/err_data.pic.o)
# Configuration: d748bc1f44716ebd9815f0a0dfa21a6ff718a7abd3c7192a120ab787eb2a59d7
# Execution platform: @local_execution_config_platform//:platform
In file included from external/boringssl/err_data.c:18:
In file included from /usr/local/include/openssl/err.h:21:
/usr/local/include/openssl/e_os2.h:183:11: error: 'OPENSSL_EXPORT' macro redefined [-Werror,-Wmacro-redefined]
#  define OPENSSL_EXPORT extern
          ^
external/boringssl/src/include/openssl/base.h:220:9: note: previous definition is here
#define OPENSSL_EXPORT
        ^
In file included from external/boringssl/err_data.c:18:
In file included from /usr/local/include/openssl/err.h:28:
/usr/local/include/openssl/types.h:74:13: error: typedef redefinition with different types ('int' vs 'struct asn1_null_st')
typedef int ASN1_NULL;
            ^
external/boringssl/src/include/openssl/base.h:344:29: note: previous definition is here
typedef struct asn1_null_st ASN1_NULL;
                            ^
In file included from external/boringssl/err_data.c:18:
In file included from /usr/local/include/openssl/err.h:28:
/usr/local/include/openssl/types.h:106:26: error: typedef redefinition with different types ('struct evp_md_st' vs 'struct env_md_st')
typedef struct evp_md_st EVP_MD;
                         ^
external/boringssl/src/include/openssl/base.h:411:26: note: previous definition is here
typedef struct env_md_st EVP_MD;
                         ^
In file included from external/boringssl/err_data.c:18:
In file included from /usr/local/include/openssl/err.h:28:
/usr/local/include/openssl/types.h:107:30: error: typedef redefinition with different types ('struct evp_md_ctx_st' vs 'struct env_md_ctx_st')
typedef struct evp_md_ctx_st EVP_MD_CTX;
                             ^
external/boringssl/src/include/openssl/base.h:410:30: note: previous definition is here
typedef struct env_md_ctx_st EVP_MD_CTX;
                             ^
In file included from external/boringssl/err_data.c:18:
In file included from /usr/local/include/openssl/err.h:28:
/usr/local/include/openssl/types.h:133:34: error: typedef redefinition with different types ('struct evp_Encode_Ctx_st' vs 'struct evp_encode_ctx_st')
typedef struct evp_Encode_Ctx_st EVP_ENCODE_CTX;
                                 ^
external/boringssl/src/include/openssl/base.h:416:34: note: previous definition is here
typedef struct evp_encode_ctx_st EVP_ENCODE_CTX;
                                 ^
In file included from external/boringssl/err_data.c:18:
In file included from /usr/local/include/openssl/err.h:29:
In file included from /usr/local/include/openssl/bio.h:30:
/usr/local/include/openssl/crypto.h:308:3: error: typedef redefinition with different types ('struct crypto_threadid_st' vs 'int')
} CRYPTO_THREADID;
  ^
external/boringssl/src/include/openssl/base.h:340:13: note: previous definition is here
typedef int CRYPTO_THREADID;
            ^
external/boringssl/err_data.c:33:1: error: static_assert failed due to requirement '13 == 12' "library value changed"
static_assert(ERR_LIB_ASN1 == 12, "library value changed");
^             ~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:34:1: error: static_assert failed due to requirement '14 == 13' "library value changed"
static_assert(ERR_LIB_CONF == 13, "library value changed");
^             ~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:35:1: error: static_assert failed due to requirement '15 == 14' "library value changed"
static_assert(ERR_LIB_CRYPTO == 14, "library value changed");
^             ~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:36:1: error: static_assert failed due to requirement '16 == 15' "library value changed"
static_assert(ERR_LIB_EC == 15, "library value changed");
^             ~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:37:1: error: static_assert failed due to requirement '20 == 16' "library value changed"
static_assert(ERR_LIB_SSL == 16, "library value changed");
^             ~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:38:1: error: static_assert failed due to requirement '32 == 17' "library value changed"
static_assert(ERR_LIB_BIO == 17, "library value changed");
^             ~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:39:1: error: static_assert failed due to requirement '33 == 18' "library value changed"
static_assert(ERR_LIB_PKCS7 == 18, "library value changed");
^             ~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:40:15: error: use of undeclared identifier 'ERR_LIB_PKCS8'
static_assert(ERR_LIB_PKCS8 == 19, "library value changed");
              ^
external/boringssl/err_data.c:41:1: error: static_assert failed due to requirement '34 == 20' "library value changed"
static_assert(ERR_LIB_X509V3 == 20, "library value changed");
^             ~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:42:1: error: static_assert failed due to requirement '36 == 21' "library value changed"
static_assert(ERR_LIB_RAND == 21, "library value changed");
^             ~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:43:1: error: static_assert failed due to requirement '38 == 22' "library value changed"
static_assert(ERR_LIB_ENGINE == 22, "library value changed");
^             ~~~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:44:1: error: static_assert failed due to requirement '39 == 23' "library value changed"
static_assert(ERR_LIB_OCSP == 23, "library value changed");
^             ~~~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
external/boringssl/err_data.c:45:1: error: static_assert failed due to requirement '40 == 24' "library value changed"
static_assert(ERR_LIB_UI == 24, "library value changed");
^             ~~~~~~~~~~~~~~~~
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/assert.h:113:23: note: expanded from macro 'static_assert'
#define static_assert _Static_assert
                      ^
fatal error: too many errors emitted, stopping now [-ferror-limit=]
20 errors generated.
Target //build:build_wheel failed to build
INFO: Elapsed time: 1264.523s, Critical Path: 460.57s
INFO: 1485 processes: 107 internal, 1378 local.
FAILED: Build did NOT complete successfully
ERROR: Build failed. Not running target
FAILED: Build did NOT complete successfully

When I run the same script again, it fails with a different error message:
Bazel binary path: ./bazel-5.1.1-darwin-x86_64
Bazel version: 5.1.1
Python binary path: /Users/maximilianstoelzle/opt/miniconda3/envs/jax-metal/bin/python
Python version: 3.10
NumPy version: 1.24.3
MKL-DNN enabled: yes
Target CPU: x86_64
Target CPU features: release
CUDA enabled: no
TPU enabled: no
ROCm enabled: no
Plugin device enabled: no

Building XLA and installing it in the jaxlib source tree...
./bazel-5.1.1-darwin-x86_64 run --verbose_failures=true :build_wheel -- --output_path=/Users/maximilianstoelzle/Documents/phd/jax/dist --cpu=x86_64
INFO: Options provided by the client:
  Inherited 'common' options: --isatty=0 --terminal_columns=80
INFO: Reading rc options for 'run' from /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc:
  Inherited 'common' options: --experimental_repo_remote_exec
INFO: Reading rc options for 'run' from /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc:
  Inherited 'build' options: --nocheck_visibility --apple_platform_type=macos --macos_minimum_os=10.14 --announce_rc --define open_source_build=true --spawn_strategy=standalone --enable_platform_specific_config --experimental_cc_shared_library --define=no_aws_support=true --define=no_gcp_support=true --define=no_hdfs_support=true --define=no_kafka_support=true --define=no_ignite_support=true --define=grpc_no_ares=true --define=tsl_link_protobuf=true -c opt --config=short_logs --copt=-DMLIR_PYTHON_PACKAGE_PREFIX=jaxlib.mlir. --@xla//xla/python:enable_gpu=false --@xla//xla/python:enable_tpu=false --@xla//xla/python:enable_plugin_device=false
INFO: Reading rc options for 'run' from /Users/maximilianstoelzle/Documents/phd/jax/.jax_configure.bazelrc:
  Inherited 'build' options: --strategy=Genrule=standalone --repo_env PYTHON_BIN_PATH=/Users/maximilianstoelzle/opt/miniconda3/envs/jax-metal/bin/python --action_env=PYENV_ROOT --python_path=/Users/maximilianstoelzle/opt/miniconda3/envs/jax-metal/bin/python --distinct_host_configuration=false --@xla//xla/python:enable_tpu=true --config=avx_posix --config=mkl_open_source_only
INFO: Found applicable config definition build:short_logs in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --output_filter=DONT_MATCH_ANYTHING
INFO: Found applicable config definition build:avx_posix in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --copt=-mavx --host_copt=-mavx
INFO: Found applicable config definition build:mkl_open_source_only in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --define=tensorflow_mkldnn_contraction_kernel=1
INFO: Found applicable config definition build:macos in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --config=posix
INFO: Found applicable config definition build:posix in file /Users/maximilianstoelzle/Documents/phd/jax/.bazelrc: --copt=-fvisibility=hidden --copt=-Wno-sign-compare --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
DEBUG: /private/var/tmp/_bazel_maximilianstoelzle/52c984ae7d44274dd09457495e3661f8/external/xla/third_party/repo.bzl:132:14:
Warning: skipping import of repository 'tf_runtime' because it already exists.
DEBUG: /private/var/tmp/_bazel_maximilianstoelzle/52c984ae7d44274dd09457495e3661f8/external/xla/third_party/repo.bzl:132:14:
Warning: skipping import of repository 'llvm-raw' because it already exists.
Loading:
Loading: 0 packages loaded
Analyzing: target //build:build_wheel (0 packages loaded, 0 targets configured)
INFO: Analyzed target //build:build_wheel (0 packages loaded, 0 targets configured).

FAILED: Build did NOT complete successfully
ERROR: Build failed.
Metal / AMD Radeon Pro Vega 20
Additional system info
Python 3.10.11, macOS 13.4.1, MacBook Pro 15'' (2019)
NVIDIA GPU info
No response

I think this is a more general build issue and not really related to the Metal plugin specifically. However, Metal plugin installation would probably be easier if users could use a prebuilt jaxlib, which isn't currently possible.
I'm curious: can you build jaxlib at head? It's difficult for us to debug build issues at an older revision, but maybe if you can reproduce at head then we might have some ideas. You won't be able to use the metal plugin with a jaxlib from head, though.

I got the same error trying to build jaxlib-v0.4.10 from source.
2021 iMac 27", on MacOS 13.5.
I was able to compile 'jaxlib' Version: 0.4.15.dev20230822 and run 'pytest', however it doesn't work with jax-metal.
% python --version
Python 3.9.17
(jax-metal) davidlaxer@bluediamond jax % pip show jax
Name: jax
Version: 0.4.11
Summary: Differentiate, compile, and transform Numpy code.
Home-page: https://github.com/google/jax
Author: JAX team
Author-email<EMAIL_ADDRESS>License: Apache-2.0
Location: /Users/davidlaxer/jax-metal/lib/python3.9/site-packages
Requires: importlib-metadata, ml-dtypes, numpy, opt-einsum, scipy
Required-by: jax-metal
(jax-metal) davidlaxer@bluediamond jax % pip show jaxlib
Name: jaxlib
Version: 0.4.15.dev20230822
Summary: XLA library for JAX
Home-page: https://github.com/google/jax
Author: JAX team
Author-email<EMAIL_ADDRESS>License: Apache-2.0
Location: /Users/davidlaxer/jax-metal/lib/python3.9/site-packages
Requires: ml-dtypes, numpy, scipy
Required-by:
(jax-metal) davidlaxer@bluediamond jax % pip show jax-metal
Name: jax-metal
Version: 0.0.3
Summary: JAX acceleration for Mac GPUs.
Home-page: https://developer.apple.com/metal/jax/
Author:
Author-email:
License: Copyright © 2023 Apple Inc. All rights reserved.

INFO: Options provided by the client:
  Inherited 'common' options: --isatty=0 --terminal_columns=80
INFO: Reading rc options for 'run' from /Users/davidlaxer/jax/.bazelrc:
  Inherited 'common' options: --experimental_repo_remote_exec
INFO: Reading rc options for 'run' from /Users/davidlaxer/jax/.bazelrc:
  Inherited 'build' options: --nocheck_visibility --apple_platform_type=macos --macos_minimum_os=10.14 --announce_rc --define open_source_build=true --spawn_strategy=standalone --enable_platform_specific_config --experimental_cc_shared_library --define=no_aws_support=true --define=no_gcp_support=true --define=no_hdfs_support=true --define=no_kafka_support=true --define=no_ignite_support=true --define=grpc_no_ares=true --define=tsl_link_protobuf=true -c opt --config=short_logs --copt=-DMLIR_PYTHON_PACKAGE_PREFIX=jaxlib.mlir. --@xla//xla/python:enable_gpu=false --@xla//xla/python:enable_tpu=false --@xla//xla/python:enable_plugin_device=false
INFO: Reading rc options for 'run' from /Users/davidlaxer/jax/.jax_configure.bazelrc:
  Inherited 'build' options: --strategy=Genrule=standalone --repo_env PYTHON_BIN_PATH=/Users/davidlaxer/jax-metal/bin/python --action_env=PYENV_ROOT --python_path=/Users/davidlaxer/jax-metal/bin/python --distinct_host_configuration=false --@xla//xla/python:enable_tpu=true --config=avx_posix --config=mkl_open_source_only
INFO: Found applicable config definition build:short_logs in file /Users/davidlaxer/jax/.bazelrc: --output_filter=DONT_MATCH_ANYTHING
INFO: Found applicable config definition build:avx_posix in file /Users/davidlaxer/jax/.bazelrc: --copt=-mavx --host_copt=-mavx
INFO: Found applicable config definition build:mkl_open_source_only in file /Users/davidlaxer/jax/.bazelrc: --define=tensorflow_mkldnn_contraction_kernel=1
INFO: Found applicable config definition build:macos in file /Users/davidlaxer/jax/.bazelrc: --config=posix
INFO: Found applicable config definition build:posix in file /Users/davidlaxer/jax/.bazelrc: --copt=-fvisibility=hidden --copt=-Wno-sign-compare --cxxopt=-std=c++17 --host_cxxopt=-std=c++17
DEBUG: /private/var/tmp/_bazel_davidlaxer/8ad43b8709647bf5741554c65757d353/external/xla/third_party/repo.bzl:132:14:
Warning: skipping import of repository 'tf_runtime' because it already exists.
DEBUG: /private/var/tmp/_bazel_davidlaxer/8ad43b8709647bf5741554c65757d353/external/xla/third_party/repo.bzl:132:14:
Warning: skipping import of repository 'llvm-raw' because it already exists.
Loading:
Loading: 1 packages loaded
Analyzing: target //build:build_wheel (2 packages loaded, 0 targets configured)
Analyzing: target //build:build_wheel (36 packages loaded, 10 targets configured)
Analyzing: target //build:build_wheel (46 packages loaded, 209 targets configured)
INFO: Analyzed target //build:build_wheel (203 packages loaded, 15248 targets configured).
INFO: Found 1 target...
[0 / 1,009] [Prepa] BazelWorkspaceStatusAction stable-status.txt ... (13 actions, 0 running)
[2,884 / 10,415] Compiling src/idl_parser.cpp; 8s local ... (16 actions, 15 running)
[3,069 / 10,415] Compiling re2/prefilter_tree.cc; 2s local ... (16 actions, 14 running)
ERROR: /private/var/tmp/_bazel_davidlaxer/8ad43b8709647bf5741554c65757d353/external/llvm-project/llvm/BUILD.bazel:192:11: Compiling llvm/lib/Support/PGOOptions.cpp failed: (Exit 1): cc_wrapper.sh failed: error executing command
  (cd /private/var/tmp/_bazel_davidlaxer/8ad43b8709647bf5741554c65757d353/execroot/__main__ && \
  exec env - \
    PATH='/Users/davidlaxer/.opam/_coq-platform_.2021.02.1/bin:/Users/davidlaxer/jax-metal/bin:/Users/davidlaxer/.juliaup/bin:/Users/davidlaxer/.cabal/bin:/Users/davidlaxer/.ghcup/bin:/Users/davidlaxer/anaconda3/condabin:/opt/local/bin:/opt/local/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:~/.dotnet/tools:/Library/Apple/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Users/davidlaxer/.cargo/bin:/Users/jetbrains/.local/bin' \
    PWD=/proc/self/cwd \
  external/local_config_cc/cc_wrapper.sh -U_FORTIFY_SOURCE -fstack-protector -Wall -Wthread-safety -Wself-assign -Wunused-but-set-parameter -Wno-free-nonheap-object -fcolor-diagnostics -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections -fdata-sections '-std=c++0x' -MD -MF bazel-out/darwin-opt/bin/external/llvm-project/llvm/_objs/Support/PGOOptions.d '-frandom-seed=bazel-out/darwin-opt/bin/external/llvm-project/llvm/_objs/Support/PGOOptions.o' '-DLLVM_ON_UNIX=1' '-DHAVE_BACKTRACE=1' '-DBACKTRACE_HEADER=<execinfo.h>' '-DLTDL_SHLIB_EXT=".so"' '-DLLVM_PLUGIN_EXT=".so"' '-DLLVM_ENABLE_THREADS=1' '-DHAVE_DEREGISTER_FRAME=1' '-DHAVE_LIBPTHREAD=1' '-DHAVE_PTHREAD_GETNAME_NP=1' '-DHAVE_PTHREAD_H=1' '-DHAVE_PTHREAD_SETNAME_NP=1' '-DHAVE_REGISTER_FRAME=1' '-DHAVE_SETENV_R=1' '-DHAVE_STRERROR_R=1' '-DHAVE_SYSEXITS_H=1' '-DHAVE_UNISTD_H=1' '-DHAVE_MACH_MACH_H=1' '-DHAVE_MALLOC_MALLOC_H=1' '-DHAVE_MALLOC_ZONE_STATISTICS=1' '-DHAVE_PROC_PID_RUSAGE=1' '-DHAVE_UNW_ADD_DYNAMIC_FDE=1' '-DLLVM_NATIVE_ARCH="X86"' '-DLLVM_NATIVE_ASMPARSER=LLVMInitializeX86AsmParser' '-DLLVM_NATIVE_ASMPRINTER=LLVMInitializeX86AsmPrinter' '-DLLVM_NATIVE_DISASSEMBLER=LLVMInitializeX86Disassembler' '-DLLVM_NATIVE_TARGET=LLVMInitializeX86Target' '-DLLVM_NATIVE_TARGETINFO=LLVMInitializeX86TargetInfo' '-DLLVM_NATIVE_TARGETMC=LLVMInitializeX86TargetMC' '-DLLVM_NATIVE_TARGETMCA=LLVMInitializeX86TargetMCA' '-DLLVM_HOST_TRIPLE="x86_64-unknown-darwin"' '-DLLVM_DEFAULT_TARGET_TRIPLE="x86_64-unknown-darwin"' '-DLLVM_VERSION_MAJOR=17' '-DLLVM_VERSION_MINOR=0' '-DLLVM_VERSION_PATCH=0' '-DLLVM_VERSION_STRING="17.0.0git"' -D__STDC_LIMIT_MACROS -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS '-DBLAKE3_USE_NEON=0' -DBLAKE3_NO_AVX2 -DBLAKE3_NO_AVX512 -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -iquote external/llvm-project -iquote bazel-out/darwin-opt/bin/external/llvm-project -iquote external/llvm_terminfo -iquote bazel-out/darwin-opt/bin/external/llvm_terminfo -iquote external/llvm_zlib -iquote bazel-out/darwin-opt/bin/external/llvm_zlib -isystem external/llvm-project/llvm/include -isystem bazel-out/darwin-opt/bin/external/llvm-project/llvm/include '-fvisibility=hidden' -Wno-sign-compare '-DMLIR_PYTHON_PACKAGE_PREFIX=jaxlib.mlir.' -mavx '-std=c++17' -no-canonical-prefixes -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' '-fmodule-name=@llvm-project//llvm:Support' '-fmodule-map-file=bazel-out/darwin-opt/bin/external/llvm-project/llvm/Support.cppmap' -fmodules-strict-decluse -Wprivate-header '-fmodule-map-file=external/local_config_cc/module.modulemap' '-fmodule-map-file=bazel-out/darwin-opt/bin/external/llvm-project/llvm/config.cppmap' '-fmodule-map-file=bazel-out/darwin-opt/bin/external/llvm-project/llvm/Demangle.cppmap' '-fmodule-map-file=bazel-out/darwin-opt/bin/external/llvm_terminfo/terminfo.cppmap' '-fmodule-map-file=bazel-out/darwin-opt/bin/external/llvm_zlib/zlib.cppmap' -c external/llvm-project/llvm/lib/Support/PGOOptions.cpp -o bazel-out/darwin-opt/bin/external/llvm-project/llvm/_objs/Support/PGOOptions.o)
# Configuration: 453baf4879e102ee5df052ec6087622b871704c7bccc3f61df28e0cf20545b9f
# Execution platform: @local_execution_config_platform//:platform
In file included from external/llvm-project/llvm/lib/Support/PGOOptions.cpp:9:
In file included from /usr/local/include/llvm/Support/PGOOptions.h:18:
In file included from /usr/local/include/llvm/Support/Error.h:17:
In file included from /usr/local/include/llvm/ADT/Twine.h:12:
In file included from /usr/local/include/llvm/ADT/SmallVector.h:17:
In file included from /usr/local/include/llvm/Support/Compiler.h:18:
/usr/local/include/llvm/Config/llvm-config.h:22:9: warning: 'LLVM_DEFAULT_TARGET_TRIPLE' macro redefined [-Wmacro-redefined]
#define LLVM_DEFAULT_TARGET_TRIPLE "x86_64-apple-darwin22.6.0"
        ^
<command line>:34:9: note: previous definition is here
#define LLVM_DEFAULT_TARGET_TRIPLE "x86_64-unknown-darwin"
        ^
In file included from external/llvm-project/llvm/lib/Support/PGOOptions.cpp:9:
In file included from /usr/local/include/llvm/Support/PGOOptions.h:18:
In file included from /usr/local/include/llvm/Support/Error.h:17:
In file included from /usr/local/include/llvm/ADT/Twine.h:12:
In file included from /usr/local/include/llvm/ADT/SmallVector.h:17:
In file included from /usr/local/include/llvm/Support/Compiler.h:18:
/usr/local/include/llvm/Config/llvm-config.h:31:9: warning: 'LLVM_HOST_TRIPLE' macro redefined [-Wmacro-redefined]
#define LLVM_HOST_TRIPLE "x86_64-apple-darwin22.6.0"
        ^
<command line>:33:9: note: previous definition is here
#define LLVM_HOST_TRIPLE "x86_64-unknown-darwin"
        ^
In file included from external/llvm-project/llvm/lib/Support/PGOOptions.cpp:9:
In file included from /usr/local/include/llvm/Support/PGOOptions.h:18:
In file included from /usr/local/include/llvm/Support/Error.h:17:
In file included from /usr/local/include/llvm/ADT/Twine.h:12:
In file included from /usr/local/include/llvm/ADT/SmallVector.h:17:
In file included from /usr/local/include/llvm/Support/Compiler.h:18:
/usr/local/include/llvm/Config/llvm-config.h:34:9: warning: 'LLVM_NATIVE_ARCH' macro redefined [-Wmacro-redefined]
#define LLVM_NATIVE_ARCH X86
        ^
<command line>:25:9: note: previous definition is here
#define LLVM_NATIVE_ARCH "X86"
        ^
In file included from external/llvm-project/llvm/lib/Support/PGOOptions.cpp:9:
In file included from /usr/local/include/llvm/Support/PGOOptions.h:18:
In file included from /usr/local/include/llvm/Support/Error.h:17:
In file included from /usr/local/include/llvm/ADT/Twine.h:12:
In file included from /usr/local/include/llvm/ADT/SmallVector.h:17:
In file included from /usr/local/include/llvm/Support/Compiler.h:18:
/usr/local/include/llvm/Config/llvm-config.h:70:9: warning: 'LLVM_VERSION_MAJOR' macro redefined [-Wmacro-redefined]
#define LLVM_VERSION_MAJOR 18
        ^
<command line>:35:9: note: previous definition is here
#define LLVM_VERSION_MAJOR 17
        ^
In file included from external/llvm-project/llvm/lib/Support/PGOOptions.cpp:9:
In file included from /usr/local/include/llvm/Support/PGOOptions.h:18:
In file included from /usr/local/include/llvm/Support/Error.h:17:
In file included from /usr/local/include/llvm/ADT/Twine.h:12:
In file included from /usr/local/include/llvm/ADT/SmallVector.h:17:
In file included from /usr/local/include/llvm/Support/Compiler.h:18:
/usr/local/include/llvm/Config/llvm-config.h:79:9: warning: 'LLVM_VERSION_STRING' macro redefined [-Wmacro-redefined]
#define LLVM_VERSION_STRING "18.0.0git"
        ^
<command line>:38:9: note: previous definition is here
#define LLVM_VERSION_STRING "17.0.0git"
        ^
external/llvm-project/llvm/lib/Support/PGOOptions.cpp:14:13: error: out-of-line definition of 'PGOOptions' does not match any declaration in 'llvm::PGOOptions'
PGOOptions::PGOOptions(std::string ProfileFile, std::string CSProfileGenFile,
            ^~~~~~~~~~
5 warnings and 1 error generated.
Target //build:build_wheel failed to build
INFO: Elapsed time: 89.492s, Critical Path: 15.97s
INFO: 3114 processes: 2818 internal, 296 local.
FAILED: Build did NOT complete successfully
ERROR: Build failed. Not running target
FAILED: Build did NOT complete successfully
b''
Traceback (most recent call last):
  File "/Users/davidlaxer/jax/build/build.py", line 564, in <module>
    main()
  File "/Users/davidlaxer/jax/build/build.py", line 559, in main
    shell(command)
  File "/Users/davidlaxer/jax/build/build.py", line 53, in shell
    output = subprocess.check_output(cmd)
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 424, in check_output
    return run(*popenargs, stdout=PIPE, timeout=timeout, check=True,
  File "/opt/local/Library/Frameworks/Python.framework/Versions/3.9/lib/python3.9/subprocess.py", line 528, in run
    raise CalledProcessError(retcode, process.args,
subprocess.CalledProcessError: Command '['/usr/local/bin/bazel', 'run', '--verbose_failures=true', ':build_wheel', '--', '--output_path=/Users/davidlaxer/jax/dist', '--cpu=x86_64']' returned non-zero exit status 1.

This is what happens with Version: 0.4.15.dev20230822:
 % python -c 'import jax; print(jax.devices())'
Traceback (most recent call last):
  File "<string>", line 1, in <module>
  File "/Users/davidlaxer/jax/jax/__init__.py", line 35, in <module>
    from jax import config as _config_module
  File "/Users/davidlaxer/jax/jax/config.py", line 17, in <module>
    from jax._src.config import config  # noqa: F401
  File "/Users/davidlaxer/jax/jax/_src/config.py", line 24, in <module>
    from jax._src import lib
  File "/Users/davidlaxer/jax/jax/_src/lib/__init__.py", line 73, in <module>
    version = check_jaxlib_version(
  File "/Users/davidlaxer/jax/jax/_src/lib/__init__.py", line 68, in check_jaxlib_version
    raise RuntimeError(msg)
RuntimeError: jaxlib version 0.4.15.dev20230823 is newer than and incompatible with jax version 0.4.10. Please update your jax and/or jaxlib packages.

The native build of jaxlib-v0.4.10 had some issue on our side too and we had to use a cross compilation. The next jax-metal will be compatible with jaxlib-v0.4.11 and hence remove the dependency of building a custom jaxlib.

Thanks.  How did you do the cross-compilation?

On Aug 23, 2023, at 12:29 PM, shuhand0 @.***> wrote:
The native build of jaxlib-v0.4.10 had some issue on our side too and we had to use a cross compilation. The next jax-metal will be compatible with jaxlib-v0.4.11 and hence remove the dependency of building a custom jaxlib.
—
Reply to this email directly, view it on GitHub https://github.com/google/jax/issues/17095#issuecomment-1690522697, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXWFW4ALVHUJKGYNAQ5K2TXWZK3NANCNFSM6AAAAAA3PO26SQ.
You are receiving this because you commented.

By cross-compilation, I mean building jaxlib on an AppleSilicon (e.g., M1) host by  python build/build.py --bazel_options=--@xla//xla/python:enable_tpu=true --target_cpu darwin_x86_64 .

Thanks. How did you do the cross-compilation?
…
On Aug 23, 2023, at 12:29 PM, shuhand0 @.***> wrote: The native build of jaxlib-v0.4.10 had some issue on our side too and we had to use a cross compilation. The next jax-metal will be compatible with jaxlib-v0.4.11 and hence remove the dependency of building a custom jaxlib. — Reply to this email directly, view it on GitHub <#17095 (comment)>, or unsubscribe https://github.com/notifications/unsubscribe-auth/AAXWFW4ALVHUJKGYNAQ5K2TXWZK3NANCNFSM6AAAAAA3PO26SQ. You are receiving this because you commented.

This was solved as the latest version of jax-metal includes a pre-built of jax.


1.16.3 4.4.1 withering min/max power flipped?

[Worker-Main-11/ERROR] [Apotheosis : Enchantment/]: Enchantment netherenhanced:withering has min/max power 220/200 at level 5, making this level unobtainable.

That's just something that happens when scaling enchantments, you can either fix it manually via config or the providing mod would need to change their power formulas to not have different slopes.

I hate to comment on this but how would i got about tweaking the scaling of enchants?


Update fs2-core, fs2-io, ... to 3.10.2

About this PR
📦 Updates

co.fs2:fs2-core
co.fs2:fs2-io
co.fs2:fs2-reactive-streams

from 3.2.14 to 3.10.2
📜 GitHub Release Notes - Version Diff
Usage
✅ Please merge!
I'll automatically update this PR to resolve conflicts as long as you don't change it yourself.
If you'd like to skip this version, you can just close this PR. If you have any feedback, just mention me in the comments below.
Configure Scala Steward for your repository with a .scala-steward.conf file.
Have a fantastic day writing Scala!

⚙ Adjust future updates
Add this to your .scala-steward.conf file to ignore future updates of this dependency:
updates.ignore = [ { groupId = "co.fs2" } ]

Or, add this to slow down future updates of this dependency:
dependencyOverrides = [{
  pullRequests = { frequency = "30 days" },
  dependency = { groupId = "co.fs2" }
}]

labels: library-update, early-semver-minor, semver-spec-minor, version-scheme:early-semver, commit-count:1

Superseded by #735.


What is the actual redb Page content size?

👋 Hi there,
First, allow me to say thank you for building this, this is a truly great initiative.
My question is: what is the actual page size, meaning how much content can I fit into a single redb page?
Adding a context, I am trying to build something like singly-linked list on top of the redb Pages to fit potentially very large content - operations' log. It is important to keep all of it for the integrity checks purposes but the reads are usually happen on the recent chunk of that log, say latest page or head of the singly-linked list.
My thinking model currently is to have a fixed size structure like this:
// Matching the default page size of the redb storage
//  https://github.com/cberner/redb/blob/222a37f/src/tree_store/page_store/header.rs#L77
const PAGE_SIZE: usize = 4096;

pub struct OpLogPage {
    id: UUID,
    prev: UUID,
    length: u32,
    data: [u8; PAGE_SIZE - 36], // 36 == std::mem::size_of::<(UUID, UUID, u32)>())
}

With that I have hoped to make sure this structure can match the physical limit of the redb Page. However, I suspect I could be totally wrong here because the PAGE_SIZE I linked to above can be for internal representation. I haven't read the related code yet to figure it out by myself, I thought I would better ask here first to gather initial thoughts on the approach since it can be inefficient.
Thank you for your time.
Kind regards,
Oleg

Pages come in multiple sizes -- "orders" as referred to in the code base -- which are currently a power of 2 multiplied by 4096.
Then there is a variable amount of overhead, depending on how many key-value pairs end up in the page. It's subject to change, but you can find the current format in the design doc, here: https://github.com/cberner/redb/blob/master/docs/design.md#leaf-page

Thanks for the insight, @cberner. I'll review the design first next time.


add jscs as dev dependency

Just adds jscs to the dev deps. Closes #5

Yes, you should merge it :) without this dep tests are not running :)


Fix stat in maddening frame

Likely was a copy/paste error from the other frame. see https://github.com/GTNewHorizons/MagicBees/pull/20 or https://discord.com/channels/181078474394566657/1029918255932002395/1102044489952002130 for the intended stats.
specifically the maddening frame of frenze having a (oblivion like) lifespan redution.

"it's intentional even tho we have no proof of it and i have no memories about it" Looks like this is the definition of unintentional

the proof is that I hand wrote it on multiple other mods, so it seems intentional to me

but like I said, I'm perfectly fine with nerfing the lifespan on the frenzied frame if we think it's a due change given yeah it's sort of weird when you're already using an oblivion frame of sanguis artus, but then again on the other hand...

I will point this out there though, I do personally think it should just be left alone though, it is the frame of frenzy, so like, it's meant to constantly change your bees, whether for better or the worse, so the frenzy implies swift transformative changes over a brief period

well I better go make one then :hehe:


disableOptimisticBPs flag

This is used normally in launch.json for debug launches to stop crazy breakpoint behaviour, like not stopping on breakpoints while debugging, breakpoints vanishing and (maybe) "phantom" break points that continually reappear sometimes a long time after being deleted.
How can I make sure JestRunner also uses this flag? Because I am wasting SO much time because of vanishing, moving and resurrecting breakpoints!

hey @kirstyannepollock
have you seen the notes in the README?
https://github.com/firsttris/vscode-jest-runner#notes-from-contributors
i think there is described what you want to achieve.

@firsttris No! How did I miss that? Thanks


Track files generated by make bundle

This adds the files generated by make manifests :
config/crd/bases/kataconfiguration.openshift.io_kataconfigs.yaml
config/rbac/role.yaml
config/webhook/manifests.yaml
and make bundle :
bundle/
bundle.Dockerfile
This will ease Operator SDK upgrades.
Since the bundle is now tracked in the repo, the bundle-custom.Dockerfile file isn't needed anymore by CI. Drop it.

- Description of the problem which is fixed/What is the use case
- What I did
- How to verify it
- Description for the changelog

/retest

/retest

@gkurz I think we can merge this. I think the prow check failure is due to us pulling the latest envtest which needs golang 1.22. In my PR with Makefile changes, the envtest version is pinned and not using latest.

Fixes: https://issues.redhat.com/browse/KATA-3411


Allow exporting/importing and clearing the bonus stats independent of the team/loadout

Usecase; instead of recreating them manually, or duplicating a team and then changing characters inside it to keep the "abyss or "event" buffs youve configured; create them once and then copy/export and paste/import them into another team, or share your buff settings for a limited time event to another user so they can apply it to their team.

I don't believe this(exim of bonus stats) is easier than just entering a few numbers, this just creates clutter in the UI for a niche usecase, and makes the code here much more complicated to maintain.


Detect partial patterns

Discussion here.

I opened two PRs. #215, #216
If we can merge both, I think we can close this issue.

Thank you @ota-meshi!

Thanks to your awesome work @ota-meshi, we can now close this issue.


HttpRequest.open() uses the "async" keyword

HttpRequest.open() can't be used in an async function:
[error] The keywords 'async', 'await', and 'yield' may not be used as identifiers in an asynchronous or generator function.

It would be nice if this were called something else, but it might cause confusion, since javascript documentation on MDN calls the parameter "async."

@gbracha
This is problematic! I'm fine with not allowing you to introduce or use a variable named "async", but it's highly disruptive to not be able to pass a named parameter named "async" to an unrelated function.
We may want to consider fixing the specification to allow this use.
The identifier "async" doesn't have any special meaning inside an async function anyway, so it's only restricted to avoid confusion, which suggests that there won't be any conflict with loosening that restriction.

The specification now states that async is not a keyword, not even in an async function.

For future visitors, the first version of the SDK where the analyzer doesn't complain about this is 2.4.0


main property - showdown

We need to get this done. It's been more than half a year. Let's leave this for discussion and voting until the Bower meeting on the 3rd November (14 days). Then we should count up votes and pick a winner.
Resources:

Spec document
Previous related issues: #46, #59, #63, #110, #393, #263, #750

Contenders:

single entry point - A relative path to the single file that you include to load the component. Could be any file type.
one-per-type array - An array of file paths, only one per type (e.g. CSS, JS, image, etc.)
array of everything - An array of all of the paths you could possibly want to include to get everything. All types mixed together.
type map - An object with file types as keys. Values are either single paths (4a) or arrays of paths (4b)
feature map - An object with feature names as keys. Values could be any the above (5a - single paths, 5b - array of paths, 5c - type map)

Anywhere that there is an array we can obviously optionally allow a single string instead which means the same as a one-item array without introducing any ambiguity.
If you have a favorite option not listed here, let me know ASAP and I will include it.
//cc: @satazor @addyosmani @sindresorhus @paulirish @benschwarz @wycats @svnlto @desandro @necolas. Please ping anyone else who might have a strong opinion or interesting use-case.

I've opened bower/bower.json-spec#43 to implement sheerun's proposal and resolve this once and for all.


Enforce specifying the bump type alongside the name of the crate being bumped

e.g. instead of writing
crates:
  - name: pallet-balances
  - name: sp-io
  - name: remote-externalities

you'd write something like
crates:
  - pallet-balances minor
  - sp-io patch
  - remote-externalities major

Where the bump type can be major minor or patch.
This will be a key part of maintaining correct semver bumps once we switch to the new release process with stable/prerelease branches.

Wrong repo https://github.com/paritytech/polkadot-sdk/pull/3816


Turbo does not work with Declarative Shadow DOM

Turbo appears to leave template tags in place on navigation breaking components that use Declarative Shadow DOM.
https://github.com/user-attachments/assets/78081b36-4379-4993-87c4-903c7a544a1c
Reproduction: https://github.com/KonnorRogers/turbo-dsd-reproduction

This seems to work as a sort of "polyfill"
function fixDSD (e) {
  const newElement = e.detail.newBody || e.detail.newFrame || e.detail.newStream
  if (!newElement) { return }

  // https://developer.chrome.com/docs/css-ui/declarative-shadow-dom#polyfill
  ;(function attachShadowRoots(root) {
    root.querySelectorAll("template[shadowrootmode]").forEach(template => {
      const mode = template.getAttribute("shadowrootmode");
      const shadowRoot = template.parentNode.attachShadow({ mode });
      shadowRoot.appendChild(template.content);
      template.remove();
      attachShadowRoots(shadowRoot);
    });
  })(newElement);
}

;["turbo:before-render", "turbo:before-stream-render", "turbo:before-frame-render"].forEach((eventName) => {
  document.addEventListener(eventName, fixDSD)
})

This seems to work as a sort of "polyfill"
function fixDSD (e) {
  const newElement = e.detail.newBody || e.detail.newFrame || e.detail.newStream
  if (!newElement) { return }

  // https://developer.chrome.com/docs/css-ui/declarative-shadow-dom#polyfill
  ;(function attachShadowRoots(root) {
    root.querySelectorAll("template[shadowrootmode]").forEach(template => {
      const mode = template.getAttribute("shadowrootmode");
      const shadowRoot = template.parentNode.attachShadow({ mode });
      shadowRoot.appendChild(template.content);
      template.remove();
      attachShadowRoots(shadowRoot);
    });
  })(newElement);
}

;["turbo:before-render", "turbo:before-stream-render", "turbo:before-frame-render"].forEach((eventName) => {
  document.addEventListener(eventName, fixDSD)
})

Thanks for the "polyfill" @KonnorRogers . This is really helpful.
In the meanwhile, this issue seems still open, even in the latest version.

Note that this is very likely due to how "conventional" methods of changing the DOM do not create declarative shadow roots.
E.g. creating a div via document.createElement("template") and setting the shadowrootmode attribute does not create a shadow root when attaching the element to the DOM. The same is true for setting some element's innerHTML.
For this to work, rendering would need to use setHTMLUnsafe or parseHTMLUnsafe.
For reference see:
https://web.dev/articles/declarative-shadow-dom#parser-only
https://thathtml.blog/2024/01/dsd-safety-with-set-html-unsafe/


Altered Broadcast message format for {nextmap} in string.

*** I have not had a chance to test this, just adding for you.
Removed eol from string broadcast.
Added check to get_user_config for RANDOMIZE_BROADCAST message list.


Port the network environment validation to ansible

Should be all fixed up now.

Thanks for the changes, it looks good to me.

:+1:


Update or replace django-oauth-toolkit

We use the package django-oauth-toolkit in edx/edx-platform and edx/video-encode-manager. It hasn't yet added support for Django3.2. Please follow the guidance in https://openedx.atlassian.net/wiki/spaces/AC/pages/3036972032/Handling+Outdated+Dependencies to resolve the problem this poses for the Open edX Django 3.2 upgrade.

I'm not sure what this means, but according to the django-oath-toolkit changelog, support for django 3.2 has been merged but not yet released.

That's a common enough scenario that I just added an entry to https://openedx.atlassian.net/wiki/spaces/AC/pages/3036972032/Handling+Outdated+Dependencies for it, as the first item in the list.  A polite request if there are any blockers to making a new release with the already-merged changes usually gets a relatively prompt response.

jazzband/django-oauth-toolkit#1000

@idegtiarov Thank you so much, please keep us posted.

New version django-oauth-toolkit==6.0.0 with Django 3.2 support was released a month ago.
@idegtiarov thanks a lot for your efforts in keeping track of this change and pushing for new release.


Prebuilt releases

The 0.19.x releases don't appear to have prebuilt versions available. Are they no longer being supported?
I tried building the files using the instructions here, but the resulting JS file was outputting the following error in Chrome's console.
Uncaught SyntaxError: Unexpected token )
The error seems to be being caused by line 261, which looks like some ES6 syntax that hasn't been transpiled.
259: decrementRunningTransitions: function() {
260:   this.activeCount--;
261:   Ember.run.next(() => {
262:     this._maybeResolveIdle();
263:   });
264: },

Yes, this needs work. Rather than try to hack on a liquid-fire specific solution, I hope we can make a tool that uses ember-cli to make a standalone package of any ember addon.

I just released a new tool that can build liquid-fire (and hopefully every other addon!) for use by non-ember-cli apps: https://github.com/ef4/ember-giftwrap

I also updated this example to show how you would use the output from giftwrap.

Awesome! Managed to get this working perfectly once I'd seen that you had submitted a pull request to ember-cli with some patches.


Unable to download pornhub user videos

Make sure you are using the latest version: run youtube-dl --version and ensure your version is 2018.10.05. If it's not, read this FAQ entry and update. Issues with outdated version will be rejected.

[x] I've verified and I assure that I'm running youtube-dl 2018.10.05

Before submitting an issue make sure you have:

[x] At least skimmed through the README, most notably the FAQ and BUGS sections
[x] Searched the bugtracker for similar issues including closed ones
[x] Checked that provided video/audio/playlist URLs (if any) are alive and playable in a browser

What is the purpose of your issue?

[x] Bug report (encountered problems with youtube-dl)
[ ] Site support request (request for adding support for a new site)
[ ] Feature request (request for a new functionality)
[ ] Question
[ ] Other

If the purpose of this issue is a bug report, site support request or you are not completely sure provide the full verbose output as follows:
Add the -v flag to your command line you run youtube-dl with (youtube-dl -v <your command line>), copy the whole output and insert it here. It should look similar to one below (replace it with your log inserted between triple ```):
sh-4.3$ youtube-dl https://www.pornhub.com/users/velvetveronica/videos/public -i -w -o "ph/%(uploader)s/%(title)s [%(id)s].%(ext)s" -f best --verbose
[debug] System config: []
[debug] User config: []
[debug] Custom config: []
[debug] Command-line args: [u'https://www.pornhub.com/users/velvetveronica/videos/public', u'-i', u'-w', u'-o', u'ph/%(uploader)s/%(title)s [%(id)s].%(ext)s', u'-f', u'best', u'--verbose']
[debug] Encodings: locale UTF-8, fs UTF-8, out UTF-8, pref UTF-8
[debug] youtube-dl version 2018.10.05
[debug] Python version 2.7.12 (CPython) - Linux-4.9.87-xxxx-std-ipv6-64-x86_64-with-Ubuntu-16.04-xenial
[debug] exe versions: ffmpeg 2.8.15-0ubuntu<IP_ADDRESS>, ffprobe 2.8.15-0ubuntu<IP_ADDRESS>
[debug] Proxy map: {}
[PornHubUserVideos] velvetveronica: Downloading page 1
[PornHubUserVideos] velvetveronica: Downloading page 2
[PornHubUserVideos] velvetveronica: Downloading page 3
[PornHubUserVideos] velvetveronica: Downloading page 4
[PornHubUserVideos] velvetveronica: Downloading page 5
[PornHubUserVideos] velvetveronica: Downloading page 6
[PornHubUserVideos] velvetveronica: Downloading page 7
...
...
...
[PornHubUserVideos] velvetveronica: Downloading page 492
[PornHubUserVideos] velvetveronica: Downloading page 493
[PornHubUserVideos] velvetveronica: Downloading page 494
[PornHubUserVideos] velvetveronica: Downloading page 495
[PornHubUserVideos] velvetveronica: Downloading page 496
ERROR: Unable to download webpage: [Errno 104] Connection reset by peer (caused by error(104, 'Connection reset by peer')); please report this issue on https://yt-dl.org/bug . Make sure you are using the latest version; type  youtube-dl -U  to update. Be sure to call youtube-dl with the --verbose flag and include its complete output.
  File "/usr/local/bin/youtube-dl/youtube_dl/extractor/common.py", line 604, in _request_webpage
    return self._downloader.urlopen(url_or_request)
  File "/usr/local/bin/youtube-dl/youtube_dl/YoutubeDL.py", line 2211, in urlopen
    return self._opener.open(req, timeout=self._socket_timeout)
  File "/usr/lib/python2.7/urllib2.py", line 435, in open
    response = meth(req, response)
  File "/usr/lib/python2.7/urllib2.py", line 548, in http_response
    'http', request, response, code, msg, hdrs)
  File "/usr/lib/python2.7/urllib2.py", line 467, in error
    result = self._call_chain(*args)
  File "/usr/lib/python2.7/urllib2.py", line 407, in _call_chain
    result = func(*args)
  File "/usr/lib/python2.7/urllib2.py", line 654, in http_error_302
    return self.parent.open(new, timeout=req.timeout)
  File "/usr/lib/python2.7/urllib2.py", line 435, in open
    response = meth(req, response)
  File "/usr/local/bin/youtube-dl/youtube_dl/utils.py", line 1027, in http_response
    content = resp.read()
  File "/usr/lib/python2.7/socket.py", line 355, in read
    data = self._sock.recv(rbufsize)
  File "/usr/lib/python2.7/httplib.py", line 588, in read
    return self._read_chunked(amt)
  File "/usr/lib/python2.7/httplib.py", line 648, in _read_chunked
    value.append(self._safe_read(amt))
  File "/usr/lib/python2.7/httplib.py", line 703, in _safe_read
    chunk = self.fp.read(min(amt, MAXAMOUNT))
  File "/usr/lib/python2.7/socket.py", line 384, in read
    data = self._sock.recv(left)
  File "/usr/lib/python2.7/ssl.py", line 756, in recv
    return self.read(buflen)
  File "/usr/lib/python2.7/ssl.py", line 643, in read
    v = self._sslobj.read(len)

If the purpose of this issue is a site support request please provide all kinds of example URLs support for which should be included (replace following example URLs by yours):

Any pornhub user video page (e.g., https://www.pornhub.com/users/velvetveronica/videos/public, or removing the /videos and/or /videos/public)

Note that youtube-dl does not support sites dedicated to copyright infringement. In order for site support request to be accepted all provided example URLs should not violate any copyrights.

Description of your issue, suggested solution and other information
I've been unable to download user videos for some time, with the above output being consistent.

Hi @zzzeusss,
I believe this is related to issue #16078.  Apparently Pornhub has implemented some site changes regarding the user profiles, and this is causing some problems when trying to fetch playlists of videos.
A new PR has already been submitted to address this, unfortunately the peer review has been stalled for some time now.
Cheers,
Parmjit V.

I’m very surprised that the pull request hasn’t been accepted after all these months?

I’m very surprised that the pull request hasn’t been accepted after all these months?

@parmjitv how can I run / use your version or Pornhub extractor?

@github-userx - Strictly speaking we should pull code that has been vetted and merged by the collaborators, as this will be properly maintained over time.  At any rate the pull request needs some work yet - please see PR #17454 for details.
Cheers,
Parmjit V.

Ok, thanks for this Update and Information! Unfortunately i am not a programmer myself and can’t take this on. I’m surprised that this extractor has not bigger demand apparently.
kind regards


Disable Logs/Metrics on GKE and Run Preemptible Nodes

Part of https://github.com/knative/test-infra/issues/3003

Can we make this configurable? For example when debugging a flake I'd like to opt into logging to do better searches

+1 on this.
@upodroid the image with the updated gcloud version has been rolled out, could you make this change?

I added an env variable that enables logging when needed

/retest

/lgtm
/approve


Update grpc to 1.20.1

Signed-off-by: Justin Terry (VM<EMAIL_ADDRESS>

To keep in sync with containerd: https://github.com/containerd/containerd/pull/3192


publishing an ephemeral instance with --force throws etag error, then works

Required information

Distribution: Debian
Distribution version: 10
The output of "lxc info" or if that fails:

Kernel version: 4.19.0-14-amd64
LXD version: 4.14 (snap)
Storage backend in use: zfs (0.8.6)

Issue description
When creating images from ephemeral instances for CI usage, the first call to lxc publish --force will always fail for me like so:
Error: ETag doesn't match: c380fb1279400ae8f34c484260a143efc5fe6d840c6f88003c8af5f510624055 vs d013f6543f3120c37640d29ba3a3a03b8b3c10cf428ba52b3c03a3a6ff2fd055
The machine will remain in shutdown state.
Repeating the command will work fine!
Steps to reproduce

Create ephemeral instance: lxc launch -e images:debian/buster/cloud publishtestinstance
try to publish an image of it: lxc publish publishtestinstance --force -> fails
retry: lxc publish publishtestinstance --force -> works

Ah yeah, this is an interesting case as normally shutting down an ephemeral instance would destroy it but we obviously don't want it to happen in this case ;)
I'll take a look, it's probably a simple mistake in the CLI code.


Add custom dawn library path for unprovided binaries

michal-z/dawn-bin only contains binaries for macOS 12, but I'm still on macOS 11. Fortunately, I can manually build hexops/mach-gpu using the -Ddawn-from-source.
I managed to hack in the path to libdawn.a and got the demos working.
diff --git a/build.zig b/build.zig
index 16d8e850..b3394df0 100644
--- a/build.zig
+++ b/build.zig
@@ -8,7 +8,7 @@ pub fn build(b: *std.build.Builder) void {
         .target = b.standardTargetOptions(.{}),
         .ztracy_enable = b.option(bool, "ztracy-enable", "Enable Tracy profiler") orelse false,
     };
-    ensureTarget(b, options.target) catch return;
+    // ensureTarget(b, options.target) catch return;
     ensureZigVersion() catch return;
     ensureGit(b.allocator) catch return;
     ensureGitLfs(b.allocator) catch return;
diff --git a/libs/zgpu/build.zig b/libs/zgpu/build.zig
index 3255f069..78b2fcee 100644
--- a/libs/zgpu/build.zig
+++ b/libs/zgpu/build.zig
@@ -40,7 +40,8 @@ pub fn link(exe: *std.build.LibExeObjStep) void {
         },
         .macos => {
             if (target.cpu.arch.isX86())
-                exe.addLibraryPath(thisDir() ++ "/libs/dawn/x86_64-macos-none")
+                // exe.addLibraryPath(thisDir() ++ "/libs/dawn/x86_64-macos-none")
+                exe.addLibraryPath(".../zig-cache/o/5a4de4a42c82a90b5184bf9ec0cc7908")
             else
                 exe.addLibraryPath(thisDir() ++ "/libs/dawn/aarch64-macos-none");

Unfortunately, I'm new to zig build and couldn't figure out the proper way to add a dawn-library-path build option.

Thanks for the report. Try to use our fork: https://github.com/michal-z/mach-gpu-dawn to build a binary.
I don't really have bandwidth to test and support older macOS versions. Is there a chance that you can upgrade to macOS 12?

I'm on a late 2014 and big sur is the latest supported macos. Let me see if I can do an unsupported install of macos 12

What's the command line to build Dawn for macos 11?
zig build -Dtarget=x86_64-macos.11
?

Let me know how it went. If it won't work I can try to add support for macOS 11.

I was able to update to macOS 12 using https://dortania.github.io/OpenCore-Legacy-Patcher/START.html
Just tested the samples and they work!


Improve Namespace performance

I've noticed that when having many namespaces, and many experiments to set up and tear down again, which is the recommended way of handling changing experiments that are added and removed without reshuffling all assignments, performance starts to become an issue.
We've recently had to rewrite all of our experiments code to use caching via cookies because calculating those on every request significantly slowed down our application. The whole stateless aspect of planout is one of the major selling points though, so I do not find it a particularly elegant solution.
I've put up a benchmark on http://requirebin.com/?gist=a584dd4d020dabd830fa
Try playing around with the numSegments and experiments that get added and removed and you'll see that currently namespaces don't scale really well.
Assuming you are using several namespaces in parallel with 100 segments each and several running experiments, you'll quickly end up with hundreds of milliseconds of processing time.
I wonder if there's room for optimization so Planout.js scales better, or if this is because of the hashing and cannot be improved on.
In any case I'd be happy to help out with this if you have any ideas for low hanging fruits.

@TimBeyer that definitely doesn't sound good, but we have not experienced the same perf issues. From my perf testing a while ago, random assignment should be incredibly quick (usually no more than 1ms overhead, usually less but I never recorded my results so this may be my memory playing tricks on me :) ). It's definitely possible that some recent changes may have caused some perf issues, though. I can look into if there is any low-hanging fruit around the initialization of namespaces that is causing some slowdown.
Couple of questions

iirc you are using this on the server-side with node.js and not client-side. Is that still the case?
How many namespaces / how many experiments are you running?
Are you using singletons for your namespace classes?

In any case, I'm going to take a deep look into this this week, I'll let you know if I find anything. Thanks for letting me know about this.

@rawls238 When I tested just a normal experiment assignment without namespaces, things were indeed around the 1ms mark. However, when using namespaces things started adding up.
Currently we're doing 4 experiments (there were 5 in total, but one was concluded and so to get consistent assignments it too needs to be added and removed during namespace initialization anyway until all the remaining tests have been concluded) in a 1000 segment namespace, and the time it took to instantiate the namespace was around 150ms - 200ms. We're planning to expand the amount of namespaces in the future to about 5. For some quick performance gains we'll reduce the amount of segments per namespace though.
We used to do this both in the client and on the server in a universal JS app because it was easier to set up that way, but now we're going server-side only to avoid the overhead and only calculate the assignments once, storing all of them in a cookie with a timestamp.
The namespaces used to be singletons scoped to every request on the server so that we need to instantiate them only once. https://github.com/othiym23/node-continuation-local-storage comes in handy for those kind of things

FWIW at Facebook namespaces / experiments are stored in databases, so there is no sequential logic, and all of the param values are computed / filled in server side. Tim, if you are mostly working server side, that might be a more efficient and scalable approach.

On Oct 27, 2015, at 6:33 AM, Tim Beyer<EMAIL_ADDRESS>wrote:
@rawls238 When I tested just a normal experiment assignment without namespaces, things were indeed around the 1ms mark. However, when using namespaces things started adding up.
Currently we're doing 4 experiments (there were 5 in total, but one was concluded and so to get consistent assignments it too needs to be added and removed during namespace initialization anyway until all the remaining tests have been concluded) in a 1000 segment namespace, and the time it took to instantiate the namespace was around 150ms - 200ms. We're planning to expand the amount of namespaces in the future to about 5. For some quick performance gains we'll reduce the amount of segments per namespace though.
We used to do this both in the client and on the server in a universal JS app because it was easier to set up that way, but now we're going server-side only to avoid the overhead and only calculate the assignments once, storing all of them in a cookie with a timestamp.
The namespaces used to be singletons scoped to every request on the server so that we need to instantiate them only once. https://github.com/othiym23/node-continuation-local-storage comes in handy for those kind of things
—
Reply to this email directly or view it on GitHub.

agreed with eytan about that approach if you are doing things server-side, but I have added a few bells and whistles to the namespace class in the recent past and have not verified that they don't have performance implications. Will let you know what you find

@eytan does that mean you have a large database containing all params for all visitors, and when a new experiment is released you update the whole database? I don't feel like I fully understand yet how the server-side approach would speed things up unless you already precompute all assignments before the requests come in. Either that, or you accept the performance hit on the first request of the user after the experiments have changed.

@TimBeyer, check out Section 5 of the PlanOut paper.  In a production system, you typically wouldn't have these .addExperiment() and .removeExperiment() calls, and the code that manages the experiments would be completely separate from the code that retrieves the experiment definition and performs the assignment.  All of the assignment is done online when params are requested for the user.
In some cases we cache the assignment server-side, but that can often end up occupying a ton of memory.  If you do go that route, there are some subtleties to making it work in a way in a way that lets you change the definition or turn the experiment off if things go sour.

@rawls238 @eytan From looking at the code, it seems like the segmentation code is pretty much independent from the experiment assignment code in namespaces.
I'm wondering if it would make sense to split those things up, which would also have the benefit of making namespaces a bit less stateful, removing the need for the requireExperiment side-effect.
I'm thinking something like this: (apologies for the non ES6 syntax, it was quicker to copy paste from existing code that way)

var Namespace = extend.call(planout.Namespace.SimpleNamespace, {
    setupDefaults: function () {
        this.numSegments = 100;
    },
    setup: function () {
        this.setName('Test');
        this.setPrimaryUnit('userId');
    },
    setupExperiments: function () {
        this.addExperiment('foo', Foo, 10);
        this.addExperiment('bar', Bar, 10);
        this.removeExperiment('foo');
    }
});

var namespace = new Namespace();

var experiment1 = namespace.getExperiment({
    userId: '1337'
});

var experiment2 = namespace.getExperiment({
    userId: '7331'
});

This way the namespace can be created only once and then reused forever.
Logging is delegated to the experiments anyway.
I also think it might clean up the overrides code.
It would also clear up the confusion where a Namespace basically is an Experiment. What I mean by this is that the Namespace shares mostly the same interface as the Experiment and almost every call on a namespace method causes the requireExperiment() side effect which turns the once generic Namespace instance into something that just delegates to its assigned Experiment.

@eytan after reading through https://github.com/HubSpot/react-experiments/pull/11#issuecomment-144199918 I realized we might be abusing namespaces as well, but pretty much the same reasons @gusvargas mentioned apply to us too.
Often you don't want to deal with the overhead in analytics and with making all variations work properly with all other variations until you have proven that they are worth the effort. Plus sometimes the business wants to try out new things with a smaller percentage of users first and then scale it up when it can be seen that things seem to be stable for that smaller audience.
I think this is a valid use case for namespaces, so the implementation of segmentation should probably be decoupled from the idea of using segmentation to run truly mutually exclusive tests touching the same kind of parameters.
It definitely can add a bit of fragility that sometimes you get undefined as the result of the parameter you request, but I believe with proper architecture this can be addressed.

@TimBeyer requireExperiment should only ever do experiment assignment once, even if it is called many times. I'm going to be spending some time today digging into the issues you described and see if I can find where we can make the biggest perf gains.
I think that your use of namespaces is fine - we talked about this and those are legitimate cases for using namespaces, though the primary use for it is for iterating on the same experiment with the same parameters it works equally well for the cases you describe.
I think that your suggestion re: breaking up the experiment segment assignments and the individual user assignment is a good idea. One way to do this is to use @eytan's suggestion of just persisting this information, but the other thing we could do to make this easier to integrate into an app without having to deal with any persistence mechanism is make it so that you can kick off experiment segment assignments for all namespaces when you start up your app and then all client requests that require experiment parameters just have to do individual experiment assignments (i.e. assignments with units that are not experiment names) on the fly as needed, but this should be <2 ms per assignment fetch. This is roughly speaking how we do it on the client-side, but there are some complications to the server-side approach. I'll see if I can sketch up a solution to make this work on the server-side.
In any case, I'll let you guys know what I find

yikes! If you put segment size down to 100 then you have reasonable load times which is mainly what we do. That explains why I haven't run into this yet...
@TimBeyer I think I know how to make this better - PR incoming soon

@TimBeyer good news is that I found some things that could lead to huge performance increases, not sure if I'll finish them today but definitely by next week.

@TimBeyer I'm planning on publishing a new version tomorrow or Tuesday with the perf changes. Should be significantly faster than it was before. As stated previously, they won't be compatible with previous experiment assignments but you should be able to migrate things using the toggleCompatible flag.

@rawls238 sounds nice! Is it already in master?

@DeTeam not yet, still waiting on a second opinion of https://github.com/HubSpot/PlanOut.js/pull/22 before I push out a new release

@DeTeam @TimBeyer just published v2.0 which should have substantial perf improvements. As noted before, it is incompatible with old experiment and namespace assignments so be careful when upgrading (you can always toggle it to be compatible with the old version by doing ExperimentSetup.toggleCompatibleHash(true)
Closing this but file another issue if you encounter any other issues or email me at garidor at hubspot.com

@TimBeyer did the updates fix the performance issues you were seeing?

@rawls238 yes, everything is great now.


Wrap getting a &mut from a static mut in an unsafe block

Fixes #537

Note that we'll probably still get the static-mut-refs lint right? (i.e. this only fixes the unsafe-op-in-unsafe-fn lint)
Not sure what's the best: just allow the lint or try to use &raw mut (but that might trigger other lints deref-addrof).

That's already taken care of by #561

Perfect! I didn't see it since it's not released yet and got the warning with a recent compiler.


Fix: slow chat because of osr and allow tab presses to accept diffs.

Fixes:

https://github.com/orgs/smallcloudai/projects/5/views/1?pane=issue&itemId=79694684
https://github.com/orgs/smallcloudai/projects/5/views/1?pane=issue&itemId=76351964

Other issues:
the history list isn't very responsive :/

this pr merged in last release


Fix links

Website link was broken,  maybe docs
Edit: looks like you did named links. Do feel free to reject this :)

Sorry for that, I believe this is now already fixed in the main branch!

Sorry for that, I believe this is now already fixed in the main branch!

No worries!


Update CombatTrackerConfig to Foundry VTT 0.7.9

Which class should be updated?
CombatTrackerConfig
For which version should the class be updated?
Foundry VTT 0.7.9

Taking this.


Issue #818 Attempt 1 to use Test-DbaDbQueryStore for new checks

Attempt 1 to use Test-DbaDbQueryStore for new checks. getting odd error at end of whole instance check regarding NULL value in array
      [-] Error occurred in Context block 0ms
        RuntimeException: Cannot index into a null array.
        Exception: Cannot index into a null array.
        at Stop-Function, C:\Users\Jonathan\Documents\WindowsPowerShell\Modules\dbatools\1.0.133\allcommands.ps1: line 85993
        at Test-DbaDbQueryStore<Process>, C:\Users\Jonathan\Documents\WindowsPowerShell\Modules\dbatools\1.0.133\allcommands.ps1: line 72879
        at <ScriptBlock>, C:\Users\Jonathan\Documents\GitHub\dbachecks\checks\Database.Tests.ps1: line 1147
        at <ScriptBlock>, C:\Users\Jonathan\Documents\GitHub\dbachecks\checks\Database.Tests.ps1: line 1145
        at DescribeImpl, C:\Program Files\WindowsPowerShell\Modules\Pester\4.10.1\Functions\Describe.ps1: line 213

I get the same and managed to get the interactive debugger to track down the database issue and it's model. Is we run this against just the model database we get the same issue.
[09:09:52][00:01:30] PS> Test-DbaDbQueryStore -SqlInstance mssql1 -Database model

WARNING: [09:10:07][Test-DbaDbQueryStore] Error occurred while establishing connection to  | Cannot index into a null array.

Potential fix is to add 'model' to the excluded databases on line 1131?
Noticed a couple of other things (just formatting) while I was poking around this morning - added some comments in the file.

Just a note, the only system db that support Query Store is msdb.  So I we may need to make sure master, tempdb, and model can't be included.

I'm working on fixing this one up, but first the function in dbatools needs to be fix so it will test msdb so it most accurate, so I logged a bug report last night and waiting to hear back on rather they agree and will let me fix that first.

I've fixed this in PR #878 so this can be closed.


[BEAM-11481] emit output watermark on watermark hold change

Fixes [BEAM-11481].

Thank you for your contribution! Follow this checklist to help us incorporate your contribution quickly and easily:

[ ] Choose reviewer(s) and mention them in a comment (R: @username).
[ ] Format the pull request title like [BEAM-XXX] Fixes bug in ApproximateQuantiles, where you replace BEAM-XXX with the appropriate JIRA issue, if applicable. This will automatically link the pull request to the issue.
[ ] Update CHANGES.md with noteworthy changes.
[ ] If this contribution is large, please file an Apache Individual Contributor License Agreement.

See the Contributor Guide for more tips on how to make review process smoother.

GitHub Actions Tests Status (on master branch)

See CI.md for more information about GitHub Actions CI.

Can you please add a new DoFnOperatorTest for this?

My best guess is that impulse progresses input WM from MIN to MAX and we let watermark hold to handle the progression... in that case, SDF probably never worked properly on flink runner 🤔

@dmvk test added, @mxm did I answer the questions?

Run Flink ValidatesRunner

Run Java Flink PortableValidatesRunner Streaming

@mxm I refactor the code a little, please have a look now.

Run Flink ValidatesRunner

Run Java Flink PortableValidatesRunner Streaming

Run Python_PVR_Flink PreCommit

Run Java PreCommit

Feel free to proceed however you like. No need to block this on me. After all, it's a good fix!

Run Java PreCommit


[ENH] Added test for OptionalPassthrough

Reference Issues/PRs
#3272

I think we should also cover fit, with an estimator where fit is not empty. I would recommend BoxCoxTransformer as a second transformer
the try/assert construction seems brittle - I would instead compare to a direct application of the estimator (e.g., ExponentTransformer) without wrapping in OptionalPassthrough

I meant, in addition, rather than, instead. I.e., mark.parametrize over estimator which can be exponential or boxcox?

(worst case, just copy-paste your old test in, and I´m also happy with that, mark.parametrize would be more elegant)

I anyway call fit_transform ,so where is the difference if fit is empty?

I anyway call fit_transform ,so where is the difference if fit is empty?

If the wrapped fit is empty, the tag will be copied to OptionalPassthrough, so we do not test the delegation in _fit. Conversely, if the wrapped fit is not empty, we delegate, and do not test the skipping logic (both branches could hide bugs).


Remove generic parameter C from EventStream

This is closed in favour of type alias SingleConsumerEventStream and MultiConsumerEventStream which are added in "0.14.3"


J2objcUtils: type checking + unit tests

Changes isolated to J2objcUtils, J2objcUtilsTest and test resource

First unit tests for the plugin
TODO’s for methods not unit tested
Added prefixes.properties as test resource
Replace many instances of “def” with explicit type
Remove unused fileFilter(…) method

@advayDev1, @confile - please take a look
This is the first beachhead for adding unit testing to the plugin.

LGTM with above comments considered

also please add the issue number for unit-tests to the commit message so they are linke

Add reference to unit testing issue #98 in commit message


Out of memory when launching server with larger values for --max-batch-prefill-tokens yet GPU memory is available

System Info
text-generation-launcher --env
2024-04-01T20:49:45.871764Z  INFO text_generation_launcher: Runtime environment:
Target: x86_64-unknown-linux-gnu
Cargo version: 1.75.0
Commit sha: e6bb3ff81fd670ad2f54904676f8165367dd47f8
Docker label: sha-e6bb3ff

Information

[X] Docker
[ ] The CLI directly

Tasks

[X] An officially supported command
[ ] My own modifications

Reproduction
On my system I can launch with the following arguments using two GPUs:
text-generation-launcher --model-id codellama/CodeLlama-70b-hf --max-batch-prefill-tokens 27000 --max-input-length 14000 --max-total-tokens 20000 --enable-cuda-graphs --otlp-endpoint jaeger:4317 --port 3000 --sharded true --num-shard 2

After launching, my nvidia-smi looks like this, indicating that there is ~5GiB of memory free.
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.08             Driver Version: 535.161.08   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA H100 80GB HBM3          On  | 00000000:84:00.0 Off |                    0 |
| N/A   30C    P0             117W / 700W |  76185MiB / 81559MiB |      0%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+
|   1  NVIDIA H100 80GB HBM3          On  | 00000000:A3:00.0 Off |                    0 |
| N/A   27C    P0             112W / 700W |  76185MiB / 81559MiB |      0%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+

However, if I adjust the --max-batch-prefill-tokens parameter to a value of 28000, then I see the following error:
2024-04-01T20:57:57.494773Z ERROR text_generation_launcher: Method Warmup encountered an error.
Traceback (most recent call last):
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/flash_causal_lm.py", line 756, in warmup
    _, batch, _ = self.generate_token(batch)
  File "/opt/conda/lib/python3.10/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/flash_causal_lm.py", line 941, in generate_token
    raise e
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/flash_causal_lm.py", line 938, in generate_token
    out, speculative_logits = self.forward(batch)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/flash_causal_lm.py", line 881, in forward
    return self.model.forward(
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/custom_modeling/flash_llama_modeling.py", line 431, in forward
    hidden_states = self.model(
  File "/opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
    return forward_call(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/custom_modeling/flash_llama_modeling.py", line 390, in forward
    hidden_states, residual = layer(
  File "/opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
    return forward_call(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/custom_modeling/flash_llama_modeling.py", line 334, in forward
    mlp_output = self.mlp(normed_attn_res_output)
  File "/opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
    return self._call_impl(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
    return forward_call(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/custom_modeling/flash_llama_modeling.py", line 280, in forward
    return self.down_proj(self.act(gate_up_states[:, 0]) * gate_up_states[:, 1])
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 766.00 MiB. GPU 0 has a total capacty of 79.11 GiB of which 686.88 MiB is free. Process 1733126 has 78.43 GiB memory in use. Of the allocated memory 75.77 GiB is allocated by PyTorch, and 1.11 GiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

Expected behavior
I am wondering if something can be done to improve the way GPU memory is allocated for the prefill token buffer. On my system it seems like I should be able to increase the size of the prefill buffer (5 GiB of GPU memory available per GPU after starting server), but I cannot.

Another example with the new DBRX model, in this case I have configured a system with four GPUs, I'm able to get the server running with the following parameters
text-generation-launcher --model-id databricks/dbrx-instruct --max-batch-prefill-tokens 23000 --max-input-length 14000 --max-total-tokens 20000 --enable-cuda-graphs --otlp-endpoint jaeger:4317 --port 3000 --sharded true --num-shard 4

My nvidia-smi looks like this, indicating that each of the 4 GPUs has about 10GiB of memory free:
+---------------------------------------------------------------------------------------+
| NVIDIA-SMI 535.161.08             Driver Version: 535.161.08   CUDA Version: 12.2     |
|-----------------------------------------+----------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |         Memory-Usage | GPU-Util  Compute M. |
|                                         |                      |               MIG M. |
|=========================================+======================+======================|
|   0  NVIDIA H100 80GB HBM3          On  | 00000000:84:00.0 Off |                    0 |
| N/A   34C    P0             237W / 700W |  67845MiB / 81559MiB |     22%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+
|   1  NVIDIA H100 80GB HBM3          On  | 00000000:A3:00.0 Off |                    0 |
| N/A   30C    P0             214W / 700W |  67893MiB / 81559MiB |      0%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+
|   2  NVIDIA H100 80GB HBM3          On  | 00000000:C3:00.0 Off |                    0 |
| N/A   33C    P0             269W / 700W |  67893MiB / 81559MiB |      0%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+
|   3  NVIDIA H100 80GB HBM3          On  | 00000000:E4:00.0 Off |                    0 |
| N/A   29C    P0             151W / 700W |  67813MiB / 81559MiB |      0%      Default |
|                                         |                      |             Disabled |
+-----------------------------------------+----------------------+----------------------+

If I increase the --max-batch-prefill-tokens parameter from 23000 to 24000 then the server fails to start with this error:
2024-04-01T21:57:16.818189Z ERROR text_generation_launcher: Method Warmup encountered an error.
Traceback (most recent call last):
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/flash_causal_lm.py", line 759, in warmup
    _, batch, _ = self.generate_token(batch)
  File "/opt/conda/lib/python3.10/contextlib.py", line 79, in inner
    return func(*args, **kwds)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/flash_causal_lm.py", line 1051, in generate_token
    prefill_logprobs_tensor = torch.log_softmax(out, -1)
torch.cuda.OutOfMemoryError: CUDA out of memory. Tried to allocate 4.49 GiB. GPU 0 has a total capacty of 79.11 GiB of which 4.20 GiB is free. Process 1763351 has 74.90 GiB memory in use. Of the allocated memory 71.86 GiB is allocated by PyTorch, and 264.26 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting max_split_size_mb to avoid fragmentation.  See documentation for Memory Management and PYTORCH_CUDA_ALLOC_CONF

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/opt/conda/bin/text-generation-server", line 8, in <module>
    sys.exit(app())
  File "/opt/conda/lib/python3.10/site-packages/typer/main.py", line 311, in __call__
    return get_command(self)(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/click/core.py", line 1157, in __call__
    return self.main(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/typer/core.py", line 778, in main
    return _main(
  File "/opt/conda/lib/python3.10/site-packages/typer/core.py", line 216, in _main
    rv = self.invoke(ctx)
  File "/opt/conda/lib/python3.10/site-packages/click/core.py", line 1688, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/opt/conda/lib/python3.10/site-packages/click/core.py", line 1434, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/opt/conda/lib/python3.10/site-packages/click/core.py", line 783, in invoke
    return __callback(*args, **kwargs)
  File "/opt/conda/lib/python3.10/site-packages/typer/main.py", line 683, in wrapper
    return callback(**use_params)  # type: ignore
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/cli.py", line 89, in serve
    server.serve(
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/server.py", line 235, in serve
    asyncio.run(
  File "/opt/conda/lib/python3.10/asyncio/runners.py", line 44, in run
    return loop.run_until_complete(main)
  File "/opt/conda/lib/python3.10/asyncio/base_events.py", line 636, in run_until_complete
    self.run_forever()
  File "/opt/conda/lib/python3.10/asyncio/base_events.py", line 603, in run_forever
    self._run_once()
  File "/opt/conda/lib/python3.10/asyncio/base_events.py", line 1909, in _run_once
    handle._run()
  File "/opt/conda/lib/python3.10/asyncio/events.py", line 80, in _run
    self._context.run(self._callback, *self._args)
  File "/opt/conda/lib/python3.10/site-packages/grpc_interceptor/server.py", line 165, in invoke_intercept_method
    return await self.intercept(
> File "/opt/conda/lib/python3.10/site-packages/text_generation_server/interceptor.py", line 21, in intercept
    return await response
  File "/opt/conda/lib/python3.10/site-packages/opentelemetry/instrumentation/grpc/_aio_server.py", line 82, in _unary_interceptor
    raise error
  File "/opt/conda/lib/python3.10/site-packages/opentelemetry/instrumentation/grpc/_aio_server.py", line 73, in _unary_interceptor
    return await behavior(request_or_iterator, context)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/server.py", line 95, in Warmup
    max_supported_total_tokens = self.model.warmup(batch)
  File "/opt/conda/lib/python3.10/site-packages/text_generation_server/models/flash_causal_lm.py", line 761, in warmup
    raise RuntimeError(
RuntimeError: Not enough memory to handle 2 prefill tokens. You need to decrease `--max-batch-prefill-tokens`

Wondering if there is anything we can do to make this easier to reason about?

Help!


Update main.py

Tables of the database was already referenced with 'tables'. Accessing tables of 'tables' errors out.

Thanks, my bad for merging https://github.com/AnswerDotAI/fasthtml-example/pull/39/files without testing. This reverts the change.


Add Inter Process communication with named pipes

should allow other processes to communicate with the app. for example a Proxy module which could ask for a refresh of the loadout or other stuff.

added with commit 7a4ee9a5a0ec3bf70acbc52018d55e8ca5812e32
BLREdit will now spawn NamedPipes which other processes on the local machine can connect to to request stuff from the API endpoints.


Bump base dependency to <5, test with GHC 8.10.4

FYI I uploaded this one to hackage already. It wasn't building with GHC 8.10.
I think the risk of incremental changes to base breaking this simple package is small, so I bumped the base constraint to <5. I hope you don't mind, but I can tighten it down again if you prefer.

Looks good, thanks.
On Sat, May 1, 2021 at 8:57 AM Björn Buckwalter @.***>
wrote:

FYI I uploaded this one to hackage already. It wasn't building with GHC
8.10.
I think the risk of incremental changes to base breaking this simple
package is small, so I bumped the base constraint to <5. I hope you don't
mind, but I can tighten it down again if you prefer.
You can view, comment on, or merge this pull request online at:
https://github.com/dmcclean/dimensional-codata/pull/8
Commit Summary

Bump base dependency to <5, test with GHC 8.10.4

File Changes

M dimensional-codata.cabal
https://github.com/dmcclean/dimensional-codata/pull/8/files#diff-04e160371d534c62fad5870210c2f86fc6f2b5c158730fb49d60ac3e518ded2c
(6)
M stack.yaml
https://github.com/dmcclean/dimensional-codata/pull/8/files#diff-0de01f189d384bfbe69e806ef70b1a425b27394dbe2a9d0e62ffd010dda86c03
(2)

Patch Links:

https://github.com/dmcclean/dimensional-codata/pull/8.patch
https://github.com/dmcclean/dimensional-codata/pull/8.diff

—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub
https://github.com/dmcclean/dimensional-codata/pull/8, or unsubscribe
https://github.com/notifications/unsubscribe-auth/AAETJU5K5ASOU5TAUEYPXN3TLP3D7ANCNFSM436JVSMA
.

--
J. Douglas McClean
(781) 561-5540 (cell)


Add: Swift Framework

Add a link to SwiftyOpenCC, a simple, elegant way to use OpenCC on Apple devices.

Thanks